[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [Calligra/all-tooldocker-boemann] f58bb93: Move handling of toolbars
From: Casper Boemann <cbo () boemann ! dk>
Date: 2010-12-31 20:00:27
Message-ID: 20101231200027.3AE47A6090 () git ! kde ! org
[Download RAW message or body]
commit f58bb93e2bc4f51dc41049412c46c92edf06b44e
branch all-tooldocker-boemann
Author: Casper Boemann <cbo@boemann.dk>
Date: Fri Dec 31 17:49:02 2010 +0100
Move handling of toolbars docker from komainwindow to KoDockerManager
Also make sure the toolbarsdocker only steals toolbars while visible
diff --git a/libs/main/KoDockerManager.cpp b/libs/main/KoDockerManager.cpp
index 8bbe014..90fd541 100644
--- a/libs/main/KoDockerManager.cpp
+++ b/libs/main/KoDockerManager.cpp
@@ -26,12 +26,16 @@
#include <kconfig.h>
#include <kconfiggroup.h>
#include <kdebug.h>
+#include <ktoolbar.h>
#include "KoToolDocker_p.h"
#include "KoView.h"
#include "KoMainWindow.h"
+#include <QList>
+#include <QGridLayout>
+
class ToolDockerFactory : public KoDockFactoryBase
{
public:
@@ -51,25 +55,98 @@ public:
}
};
+class ToolBarsDockerFactory : public KoDockFactoryBase
+{
+public:
+ ToolBarsDockerFactory() : KoDockFactoryBase() { }
+
+ QString id() const {
+ return "ToolBarDocker";
+ }
+
+ QDockWidget* createDockWidget() {
+ return new QDockWidget(i18n("Tool Bars Docker"));
+ }
+
+ DockPosition defaultDockPosition() const {
+ return DockTop;
+ }
+};
class KoDockerManager::Private
{
public:
- Private() {};
- KoToolDocker *docker;
+ Private(KoMainWindow *mw) :
+ dockedToolBarsLayout(0)
+ ,mainWindow(mw)
+ ,ignore(true)
+ {
+ }
+
+ KoToolDocker *toolOptionsDocker;
+ QDockWidget *toolBarsDocker;
+ QGridLayout *dockedToolBarsLayout;
+ QList<KToolBar *> toolBarList;
+ KoMainWindow *mainWindow;
+ bool ignore;
+
+ void restoringDone()
+ {
+ ignore = false;
+ moveToolBars();
+ }
- void makeDockVisible()
+ void moveToolBarsBack()
{
+ foreach(KToolBar *toolBar, toolBarList) {
+ mainWindow->addToolBar(toolBar);
+ }
+ toolBarList.clear();
+ }
+
+ void moveToolBars()
+ {
+ if(ignore)
+ return;
+
+ // Move toolbars to docker or back depending on visibllity of docker
+ if (toolBarsDocker->isVisible()) {
+ QList<KToolBar *> tmpList = mainWindow->toolBars();
+ toolBarList.append(tmpList);
+ foreach(KToolBar *toolBar, tmpList) {
+ dockedToolBarsLayout->addWidget(toolBar);
+ }
+ } else {
+ moveToolBarsBack();
+ }
}
};
KoDockerManager::KoDockerManager(KoMainWindow *mainWindow)
- : QObject(mainWindow), d( new Private() )
+ : QObject(mainWindow), d( new Private(mainWindow) )
{
- ToolDockerFactory factory;
- d->docker = qobject_cast<KoToolDocker*>(mainWindow->createDockWidget(&factory));
- Q_ASSERT(d->docker);
- connect(mainWindow, SIGNAL(restoringDone()), this, SLOT(makeDockVisible()));
+ ToolDockerFactory toolDockerFactory;
+ ToolBarsDockerFactory toolBarsDockerFactory;
+ d->toolOptionsDocker =
+ qobject_cast<KoToolDocker*>(mainWindow->createDockWidget(&toolDockerFactory));
+ Q_ASSERT(d->toolOptionsDocker);
+ d->toolBarsDocker = mainWindow->createDockWidget(&toolBarsDockerFactory);
+ Q_ASSERT(d->toolBarsDocker);
+
+ QWidget *dockedToolBarsWidget = new QWidget();
+ d->dockedToolBarsLayout = new QGridLayout();
+ d->dockedToolBarsLayout->setHorizontalSpacing(2);
+ d->dockedToolBarsLayout->setVerticalSpacing(0);
+ dockedToolBarsWidget->setLayout(d->dockedToolBarsLayout);
+ d->toolBarsDocker->setAllowedAreas(Qt::TopDockWidgetArea);
+ d->toolBarsDocker->setFeatures(QDockWidget::DockWidgetClosable);
+ d->toolBarsDocker->setWidget(dockedToolBarsWidget);
+ d->toolBarsDocker->setTitleBarWidget(new QWidget());
+
+ connect(mainWindow, SIGNAL(restoringDone()), this, SLOT(restoringDone()));
+ connect(d->toolBarsDocker, SIGNAL(visibilityChanged(bool)), this, SLOT(moveToolBars()));
+ connect(mainWindow, SIGNAL(beforeHandlingToolBars()), this, SLOT(moveToolBarsBack()));
+ connect(mainWindow, SIGNAL(afterHandlingToolBars()), this, SLOT(moveToolBars()));
}
KoDockerManager::~KoDockerManager()
@@ -79,7 +156,7 @@ KoDockerManager::~KoDockerManager()
void KoDockerManager::newOptionWidgets(const QMap<QString, QWidget *> &optionWidgetMap)
{
- d->docker->setOptionWidgets(optionWidgetMap);
+ d->toolOptionsDocker->setOptionWidgets(optionWidgetMap);
}
#include <KoDockerManager.moc>
diff --git a/libs/main/KoDockerManager.h b/libs/main/KoDockerManager.h
index 85c1252..3ec84b9 100644
--- a/libs/main/KoDockerManager.h
+++ b/libs/main/KoDockerManager.h
@@ -46,7 +46,9 @@ public slots:
private:
- Q_PRIVATE_SLOT(d, void makeDockVisible())
+ Q_PRIVATE_SLOT(d, void moveToolBarsBack())
+ Q_PRIVATE_SLOT(d, void moveToolBars())
+ Q_PRIVATE_SLOT(d, void restoringDone())
class Private;
Private * const d;
};
diff --git a/libs/main/KoMainWindow.cpp b/libs/main/KoMainWindow.cpp
index f4be52a..78604bd 100644
--- a/libs/main/KoMainWindow.cpp
+++ b/libs/main/KoMainWindow.cpp
@@ -128,46 +128,13 @@ public:
readOnly = false;
dockWidgetMenu = 0;
dockerManager = 0;
- toolBarsDock = 0;
- dockedToolBarsLayout = 0;
}
~KoMainWindowPrivate() {
qDeleteAll(toolbarList);
}
- void moveToolBarsToDocker()
- {
- if(!toolBarsDock) {
- toolBarsDock = new QDockWidget(parent);
- toolBarsDock->setTitleBarWidget(new QWidget());
- toolBarsDock->setObjectName("ToolBarDocker");
- QWidget *dockedToolBarsWidget = new QWidget();
- dockedToolBarsLayout = new QGridLayout();
- dockedToolBarsLayout->setHorizontalSpacing(2);
- dockedToolBarsLayout->setVerticalSpacing(0);
- dockedToolBarsWidget->setLayout(dockedToolBarsLayout);
- toolBarsDock->setAllowedAreas(Qt::TopDockWidgetArea);
- toolBarsDock->setFeatures(QDockWidget::NoDockWidgetFeatures);
- toolBarsDock->setWidget(dockedToolBarsWidget);
- parent->addDockWidget(Qt::TopDockWidgetArea, toolBarsDock);
- dockWidgets.push_back(toolBarsDock);
- }
- QList<KToolBar *> tmpList = parent->toolBars();
- toolBarList.append(tmpList);
- foreach(KToolBar *toolBar, tmpList) {
- dockedToolBarsLayout->addWidget(toolBar);
- }
- }
-
void moveToolBarsBack()
{
- if(toolBarsDock) {
- foreach(KToolBar *toolBar, toolBarList) {
- parent->addToolBar(toolBar);
- }
- //toolBarsDock = 0;
- toolBarList.clear();
- }
}
void applyDefaultSettings(QPrinter &printer) {
@@ -249,9 +216,6 @@ public:
KActionMenu *dockWidgetMenu;
QMap<QDockWidget *, bool> dockWidgetVisibilityMap;
KoDockerManager *dockerManager;
- QDockWidget *toolBarsDock;
- QGridLayout *dockedToolBarsLayout;
- QList<KToolBar *> toolBarList;
QList<QDockWidget *> dockWidgets;
QList<QDockWidget *> hiddenDockwidgets; // List of dockers hiddent by the call to hideDocker
};
@@ -1604,8 +1568,9 @@ void KoMainWindow::slotActivePartChanged(KParts::Part *newPart)
//kDebug(30003) <<"no need to change the GUI";
return;
}
- // move the ToolBars back so their status can be saved
- d->moveToolBarsBack();
+
+ // important so dockermanager can move toolbars back
+ emit beforeHandlingToolBars();
KXMLGUIFactory *factory = guiFactory();
@@ -1671,9 +1636,6 @@ void KoMainWindow::slotActivePartChanged(KParts::Part *newPart)
}
plugActionList("toolbarlist", d->toolbarList);
- // This call is what actually puts the toolbars into the toolbars docker
- d->moveToolBarsToDocker();
-
// Send the GUIActivateEvent only now, since it might show/hide toolbars too
// (and this has priority over applyMainWindowSettings)
KParts::GUIActivateEvent ev(true);
@@ -1683,6 +1645,8 @@ void KoMainWindow::slotActivePartChanged(KParts::Part *newPart)
d->activeView = 0;
d->activePart = 0;
}
+ // important so dockermanager can move toolbars where wanted
+ emit afterHandlingToolBars();
// ### setUpdatesEnabled( true );
}
@@ -1823,8 +1787,6 @@ QDockWidget* KoMainWindow::createDockWidget(KoDockFactoryBase* factory)
{
QDockWidget* dockWidget = 0;
- d->moveToolBarsToDocker();
-
if (!d->dockWidgetsMap.contains(factory->id())) {
dockWidget = factory->createDockWidget();
diff --git a/libs/main/KoMainWindow.h b/libs/main/KoMainWindow.h
index 33b161e..31fa4b4 100644
--- a/libs/main/KoMainWindow.h
+++ b/libs/main/KoMainWindow.h
@@ -99,11 +99,6 @@ public:
virtual KParts::PartManager *partManager();
/**
- * Move the toolbars into a dedicated dockWidget.
- */
- void moveToolbarsToDocker();
-
- /**
* The application should call this to show or hide a toolbar.
* It also takes care of the corresponding action in the settings menu.
*/
@@ -194,6 +189,12 @@ signals:
/// This signal is emitted right after the docker states have been succefully restored from config
void restoringDone();
+ /// This signal is emitted right before we handle loading or saving of toolbars
+ void beforeHandlingToolBars();
+
+ /// This signal is emitted right after we handled loading or saving of toolbars
+ void afterHandlingToolBars();
+
public slots:
/**
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic