From a1f8be447103d8c4887aea3ae8794f0937daa45b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Thu, 4 Dec 2014 13:07:01 +0100 Subject: NavigationWidget: Add menu to split button This is more consistent with the split button that we have for the editors, and the default split behavior, which duplicated the current view, seldomly resulted in what was wanted anyhow. Change-Id: Iaba62151edbf11f6bbfaf45d68371532bff48dd5 Reviewed-by: Daniel Teske --- src/plugins/coreplugin/navigationsubwidget.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/plugins/coreplugin/navigationsubwidget.cpp') diff --git a/src/plugins/coreplugin/navigationsubwidget.cpp b/src/plugins/coreplugin/navigationsubwidget.cpp index 354c7810e3..0087980f04 100644 --- a/src/plugins/coreplugin/navigationsubwidget.cpp +++ b/src/plugins/coreplugin/navigationsubwidget.cpp @@ -41,6 +41,7 @@ #include #include +#include #include #include @@ -75,6 +76,12 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget, int pos QToolButton *splitAction = new QToolButton(); splitAction->setIcon(QIcon(QLatin1String(Constants::ICON_SPLIT_HORIZONTAL))); splitAction->setToolTip(tr("Split")); + splitAction->setPopupMode(QToolButton::InstantPopup); + splitAction->setProperty("noArrow", true); + m_splitMenu = new QMenu(splitAction); + splitAction->setMenu(m_splitMenu); + connect(m_splitMenu, &QMenu::aboutToShow, this, &NavigationSubWidget::populateSplitMenu); + QToolButton *close = new QToolButton(); close->setIcon(QIcon(QLatin1String(Constants::ICON_BUTTON_CLOSE))); close->setToolTip(tr("Close")); @@ -88,7 +95,6 @@ NavigationSubWidget::NavigationSubWidget(NavigationWidget *parentWidget, int pos setLayout(lay); lay->addWidget(m_toolBar); - connect(splitAction, SIGNAL(clicked()), this, SIGNAL(splitMe())); connect(close, SIGNAL(clicked()), this, SIGNAL(closeMe())); setFactoryIndex(factoryIndex); @@ -136,6 +142,18 @@ void NavigationSubWidget::comboBoxIndexChanged(int factoryIndex) restoreSettings(); } +void NavigationSubWidget::populateSplitMenu() +{ + m_splitMenu->clear(); + QAbstractItemModel *factoryModel = m_parentWidget->factoryModel(); + int count = factoryModel->rowCount(); + for (int i = 0; i < count; ++i) { + QModelIndex index = factoryModel->index(i, 0); + QAction *action = m_splitMenu->addAction(factoryModel->data(index).toString()); + connect(action, &QAction::triggered, this, [this, i]() { emit splitMe(i); }); + } +} + void NavigationSubWidget::setFocusWidget() { if (m_navigationWidget) -- cgit v1.2.1