|
|
|
|
@ -29,6 +29,7 @@ |
|
|
|
|
|
|
|
|
|
TabTreeView::TabTreeView(QWidget *parent) |
|
|
|
|
: QTreeView(parent) |
|
|
|
|
, m_expandedSessionKey(QSL("VerticalTabs-expanded")) |
|
|
|
|
{ |
|
|
|
|
setDragEnabled(true); |
|
|
|
|
setAcceptDrops(true); |
|
|
|
|
@ -50,6 +51,18 @@ TabTreeView::TabTreeView(QWidget *parent) |
|
|
|
|
|
|
|
|
|
// Enable hover to force redrawing close button
|
|
|
|
|
viewport()->setAttribute(Qt::WA_Hover); |
|
|
|
|
|
|
|
|
|
auto saveExpandedState = [this](const QModelIndex &index, bool expanded) { |
|
|
|
|
if (m_initializing) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>(); |
|
|
|
|
if (tab) { |
|
|
|
|
tab->setSessionData(m_expandedSessionKey, expanded); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
connect(this, &TabTreeView::expanded, this, std::bind(saveExpandedState, std::placeholders::_1, true)); |
|
|
|
|
connect(this, &TabTreeView::collapsed, this, std::bind(saveExpandedState, std::placeholders::_1, false)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int TabTreeView::backgroundIndentation() const |
|
|
|
|
@ -72,6 +85,14 @@ void TabTreeView::setTabsInOrder(bool enable) |
|
|
|
|
m_tabsInOrder = enable; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void TabTreeView::setModel(QAbstractItemModel *model) |
|
|
|
|
{ |
|
|
|
|
QTreeView::setModel(model); |
|
|
|
|
|
|
|
|
|
m_initializing = true; |
|
|
|
|
QTimer::singleShot(0, this, &TabTreeView::initView); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void TabTreeView::updateIndex(const QModelIndex &index) |
|
|
|
|
{ |
|
|
|
|
QRect rect = visualRect(index); |
|
|
|
|
@ -134,6 +155,10 @@ void TabTreeView::rowsInserted(const QModelIndex &parent, int start, int end) |
|
|
|
|
{ |
|
|
|
|
QTreeView::rowsInserted(parent, start, end); |
|
|
|
|
|
|
|
|
|
if (m_initializing) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Parent for WebTab is set after insertTab is emitted
|
|
|
|
|
const QPersistentModelIndex index = model()->index(start, 0, parent); |
|
|
|
|
QTimer::singleShot(0, this, [=]() { |
|
|
|
|
@ -277,6 +302,22 @@ bool TabTreeView::viewportEvent(QEvent *event) |
|
|
|
|
return QTreeView::viewportEvent(event); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void TabTreeView::initView() |
|
|
|
|
{ |
|
|
|
|
// Restore expanded state
|
|
|
|
|
expandAll(); |
|
|
|
|
QModelIndex index = model()->index(0, 0); |
|
|
|
|
while (index.isValid()) { |
|
|
|
|
WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>(); |
|
|
|
|
if (tab) { |
|
|
|
|
setExpanded(index, tab->sessionData().value(m_expandedSessionKey, true).toBool()); |
|
|
|
|
} |
|
|
|
|
index = indexBelow(index); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
m_initializing = false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
TabTreeView::DelegateButton TabTreeView::buttonAt(const QPoint &pos, const QModelIndex &index) const |
|
|
|
|
{ |
|
|
|
|
if (m_delegate->expandButtonRect(index).contains(pos)) { |
|
|
|
|
|