From 627a511daa6008228eef6f80b98d1a9de82d4413 Mon Sep 17 00:00:00 2001 From: Jekyll Wu Date: Thu, 24 May 2012 04:57:06 +0800 Subject: [PATCH] Move the code for submenu of 'New Tab' button into class ViewContainer This might feel like slight de-optimization of current code. However, it helps abstracting and refactoring the code for the future. --- src/ViewContainer.cpp | 8 ++++++++ src/ViewContainer.h | 6 ++++++ src/ViewManager.cpp | 19 +------------------ src/ViewManager.h | 5 ----- 4 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/ViewContainer.cpp b/src/ViewContainer.cpp index cc4262add..a4badc077 100644 --- a/src/ViewContainer.cpp +++ b/src/ViewContainer.cpp @@ -42,6 +42,7 @@ #include "IncrementalSearchBar.h" #include "ViewProperties.h" #include "ViewContainerTabBar.h" +#include "ProfileList.h" // TODO Perhaps move everything which is Konsole-specific into different files @@ -300,6 +301,13 @@ TabbedViewContainer::TabbedViewContainer(NavigationPosition position , QObject* _newTabButton->setWhatsThis(i18nc("@info:whatsthis", "Create a new tab. Press and hold to select profile from menu")); _newTabButton->adjustSize(); + QMenu* profileMenu = new QMenu(_newTabButton); + ProfileList* profileList = new ProfileList(false, profileMenu); + profileList->syncWidgetActions(profileMenu, true); + connect(profileList, SIGNAL(profileSelected(Profile::Ptr)), + this, SIGNAL(newViewRequest(Profile::Ptr))); + setNewViewMenu(profileMenu); + _closeTabButton = new QToolButton(_containerWidget); _closeTabButton->setIcon(KIcon("tab-close")); _closeTabButton->setToolTip(i18nc("@info:tooltip", "Close tab")); diff --git a/src/ViewContainer.h b/src/ViewContainer.h index 295870875..d5bdf736f 100644 --- a/src/ViewContainer.h +++ b/src/ViewContainer.h @@ -28,6 +28,9 @@ #include #include +// Konsole +#include "Profile.h" + class QStackedWidget; class QWidget; class QHBoxLayout; @@ -268,6 +271,9 @@ signals: /** Emitted when the user requests to open a new view */ void newViewRequest(); + /** Requests creation of a new view, with the selected profile. */ + void newViewRequest(Profile::Ptr); + /** * Emitted when the user requests to move a view from another container * into this container. If 'success' is set to true by a connected slot diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp index 32b5c0666..b8a3397ca 100644 --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -38,7 +38,6 @@ #include "ColorScheme.h" #include "ColorSchemeManager.h" -#include "ProfileList.h" #include "Session.h" #include "TerminalDisplay.h" #include "SessionController.h" @@ -58,7 +57,6 @@ ViewManager::ViewManager(QObject* parent , KActionCollection* collection) , _viewSplitter(0) , _actionCollection(collection) , _containerSignalMapper(new QSignalMapper(this)) - , _newViewMenu(0) , _navigationMethod(TabbedNavigation) , _navigationVisibility(ViewContainer::AlwaysShowNavigation) , _navigationPosition(ViewContainer::NavigationPositionTop) @@ -108,7 +106,6 @@ ViewManager::ViewManager(QObject* parent , KActionCollection* collection) ViewManager::~ViewManager() { - delete _newViewMenu; } int ViewManager::managerId() const @@ -116,19 +113,6 @@ int ViewManager::managerId() const return _managerId; } -QMenu* ViewManager::createNewViewMenu() -{ - if (_newViewMenu) - return _newViewMenu; - - _newViewMenu = new QMenu(0); - ProfileList* newViewProfiles = new ProfileList(false, _newViewMenu); - newViewProfiles->syncWidgetActions(_newViewMenu, true); - connect(newViewProfiles, SIGNAL(profileSelected(Profile::Ptr)), this, - SIGNAL(newViewRequest(Profile::Ptr))); - - return _newViewMenu; -} QWidget* ViewManager::activeView() const { ViewContainer* container = _viewSplitter->activeContainer(); @@ -639,7 +623,6 @@ ViewContainer* ViewManager::createContainer() container->setFeatures(container->features() | ViewContainer::QuickNewView | ViewContainer::QuickCloseView); - container->setNewViewMenu(createNewViewMenu()); } else { container->setFeatures(container->features() & ~ViewContainer::QuickNewView @@ -654,6 +637,7 @@ ViewContainer* ViewManager::createContainer() _containerSignalMapper->setMapping(container, container); connect(container, SIGNAL(newViewRequest()), this, SIGNAL(newViewRequest())); + connect(container, SIGNAL(newViewRequest(Profile::Ptr)), this, SIGNAL(newViewRequest(Profile::Ptr))); connect(container, SIGNAL(moveViewRequest(int,int,bool&)), this , SLOT(containerMoveViewRequest(int,int,bool&))); connect(container , SIGNAL(viewRemoved(QWidget*)) , this , SLOT(viewDestroyed(QWidget*))); @@ -1099,7 +1083,6 @@ void ViewManager::setShowQuickButtons(bool show) container->setFeatures(container->features() | ViewContainer::QuickNewView | ViewContainer::QuickCloseView); - container->setNewViewMenu(createNewViewMenu()); } else { container->setFeatures(container->features() & ~ViewContainer::QuickNewView diff --git a/src/ViewManager.h b/src/ViewManager.h index 644d57ab8..7d1079e3c 100644 --- a/src/ViewManager.h +++ b/src/ViewManager.h @@ -30,7 +30,6 @@ #include "ViewContainer.h" class QSignalMapper; -class QMenu; class KActionCollection; class KConfigGroup; @@ -367,8 +366,6 @@ private: // about the session ( such as title and associated icon ) to the display. SessionController* createController(Session* session , TerminalDisplay* display); - // create menu for 'new tab' button - QMenu* createNewViewMenu(); private: QPointer _viewSplitter; QPointer _pluggedController; @@ -378,8 +375,6 @@ private: KActionCollection* _actionCollection; QSignalMapper* _containerSignalMapper; - QMenu* _newViewMenu; - NavigationMethod _navigationMethod; ViewContainer::NavigationVisibility _navigationVisibility;