47 : QAbstractProxyModel(parent)
50 connect(
this, &QAbstractProxyModel::sourceModelChanged,
this, &TabMruModel::init);
61 return item ? createIndex(m_root->
children.indexOf(item), 0, item) : QModelIndex();
67 return it ? it->
tab :
nullptr;
72 if (!
index.isValid()) {
73 return Qt::NoItemFlags;
75 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
83 return m_items.count();
102 if (!hasIndex(row, column,
parent)) {
105 return createIndex(row, column, m_root->
children.at(row));
122void TabMruModel::init()
128 sourceRowsInserted(QModelIndex(), 0, sourceModel()->
rowCount());
132 connect(sourceModel(), &QAbstractItemModel::dataChanged,
this, &TabMruModel::sourceDataChanged, Qt::UniqueConnection);
133 connect(sourceModel(), &QAbstractItemModel::rowsInserted,
this, &TabMruModel::sourceRowsInserted, Qt::UniqueConnection);
134 connect(sourceModel(), &QAbstractItemModel::rowsAboutToBeRemoved,
this, &TabMruModel::sourceRowsAboutToBeRemoved, Qt::UniqueConnection);
135 connect(sourceModel(), &QAbstractItemModel::modelReset,
this, &TabMruModel::sourceReset, Qt::UniqueConnection);
140 if (!item || item == m_root) {
143 return createIndex(m_root->
children.indexOf(item), 0, item);
151void TabMruModel::currentTabChanged(
int index)
157 const int from = m_root->
children.indexOf(it);
161 if (!beginMoveRows(QModelIndex(), from, from, QModelIndex(), 0)) {
162 qWarning() <<
"Invalid beginMoveRows" << from;
170void TabMruModel::sourceDataChanged(
const QModelIndex &topLeft,
const QModelIndex &bottomRight,
const QVector<int> &roles)
175void TabMruModel::sourceRowsInserted(
const QModelIndex &parent,
int start,
int end)
177 for (
int i = start;
i <= end; ++
i) {
178 const QModelIndex
index = sourceModel()->index(
i, 0,
parent);
181 beginInsertRows(QModelIndex(), m_items.count(), m_items.count());
190void TabMruModel::sourceRowsAboutToBeRemoved(
const QModelIndex &parent,
int start,
int end)
192 for (
int i = start;
i <= end; ++
i) {
193 const QModelIndex
index = sourceModel()->index(
i, 0,
parent);
196 const int idx = m_root->
children.indexOf(it);
197 beginRemoveRows(QModelIndex(), idx, idx);
198 m_items.remove(it->
tab);
206void TabMruModel::sourceReset()
TabWidget * tabWidget() const
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
TabMruModel(BrowserWindow *window, QObject *parent=nullptr)
QModelIndex tabIndex(WebTab *tab) const
int rowCount(const QModelIndex &parent) const override
WebTab * tab(const QModelIndex &index) const
Qt::ItemFlags flags(const QModelIndex &index) const override
int columnCount(const QModelIndex &parent) const override
QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override
QModelIndex mapToSource(const QModelIndex &proxyIndex) const override
QModelIndex parent(const QModelIndex &index) const override
TabMruModelItem(WebTab *tab=nullptr, const QModelIndex &index=QModelIndex())
QPersistentModelIndex sourceIndex
QVector< TabMruModelItem * > children