1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3#include "openpagesmodel.h"
4
5#include "helpenginewrapper.h"
6#include "helpviewer.h"
7#include "tracer.h"
8
9#include <QtCore/QStringList>
10#include <QtCore/QUrl>
11
12QT_BEGIN_NAMESPACE
13
14OpenPagesModel::OpenPagesModel(QObject *parent) : QAbstractTableModel(parent)
15{
16 TRACE_OBJ
17}
18
19int OpenPagesModel::rowCount(const QModelIndex &parent) const
20{
21 TRACE_OBJ
22 return parent.isValid() ? 0 : m_pages.size();
23}
24
25int OpenPagesModel::columnCount(const QModelIndex &/*parent*/) const
26{
27 TRACE_OBJ
28 return 2;
29}
30
31QVariant OpenPagesModel::data(const QModelIndex &index, int role) const
32{
33 TRACE_OBJ
34 if (!index.isValid() || index.row() >= rowCount() || index.column() > 0
35 || role != Qt::DisplayRole)
36 return QVariant();
37 QString title = m_pages.at(i: index.row())->title();
38 title.replace(c: QLatin1Char('&'), after: QLatin1String("&&"));
39 return title.isEmpty() ? QLatin1String("(Untitled)") : title;
40}
41
42HelpViewer *OpenPagesModel::addPage(const QUrl &url, qreal zoom)
43{
44 TRACE_OBJ
45 beginInsertRows(parent: QModelIndex(), first: rowCount(), last: rowCount());
46 HelpViewer *page = new HelpViewer(zoom);
47 connect(sender: page, signal: &HelpViewer::titleChanged,
48 context: this, slot: &OpenPagesModel::handleTitleChanged);
49 m_pages << page;
50 endInsertRows();
51 page->setSource(url);
52 return page;
53}
54
55void OpenPagesModel::removePage(int index)
56{
57 TRACE_OBJ
58 Q_ASSERT(index >= 0 && index < rowCount());
59 beginRemoveRows(parent: QModelIndex(), first: index, last: index);
60 HelpViewer *page = m_pages.at(i: index);
61 m_pages.removeAt(i: index);
62 endRemoveRows();
63 page->deleteLater();
64}
65
66HelpViewer *OpenPagesModel::pageAt(int index) const
67{
68 TRACE_OBJ
69 Q_ASSERT(index >= 0 && index < rowCount());
70 return m_pages.at(i: index);
71}
72
73void OpenPagesModel::handleTitleChanged()
74{
75 TRACE_OBJ
76 HelpViewer *page = static_cast<HelpViewer *>(sender());
77 const int row = m_pages.indexOf(t: page);
78 Q_ASSERT(row != -1 );
79 const QModelIndex &item = index(row, column: 0);
80 emit dataChanged(topLeft: item, bottomRight: item);
81}
82
83QT_END_NAMESPACE
84

source code of qttools/src/assistant/assistant/openpagesmodel.cpp