diff options
author | Florian Jung <flo@windfisch.org> | 2011-08-21 14:29:25 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2011-08-21 14:29:25 +0000 |
commit | 958f22a0b718d5a94cecd20073710c80e609cdac (patch) | |
tree | 714f9cf4fc6aca09e2c1c9d275e70ce347f692ff /muse2/muse/cobject.cpp | |
parent | edbe737895dacf8bf54813d7bc99c5e851dc8018 (diff) |
fixed bugs regarding saving and restoring toolbar state
Diffstat (limited to 'muse2/muse/cobject.cpp')
-rw-r--r-- | muse2/muse/cobject.cpp | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/muse2/muse/cobject.cpp b/muse2/muse/cobject.cpp index 02a7ca74..7b5b4cb6 100644 --- a/muse2/muse/cobject.cpp +++ b/muse2/muse/cobject.cpp @@ -58,6 +58,8 @@ TopWin::TopWin(ToplevelType t, QWidget* parent, const char* name, Qt::WindowFlag if (_defaultSubwin[_type]) setIsMdiWin(true); + if (_sharesToolsAndMenu) + menuBar()->hide(); subwinAction->setChecked(isMdiWin()); shareAction->setChecked(_sharesToolsAndMenu); @@ -82,8 +84,15 @@ void TopWin::readStatus(Xml& xml) fprintf(stderr,"ERROR: couldn't restore geometry. however, this is probably not really a problem.\n"); } else if (tag == "toolbars") { - if (!restoreState(QByteArray::fromHex(xml.parse1().toAscii()))) - fprintf(stderr,"ERROR: couldn't restore toolbars. however, this is not really a problem.\n"); + if (!sharesToolsAndMenu()) { + if (!restoreState(QByteArray::fromHex(xml.parse1().toAscii()))) + fprintf(stderr,"ERROR: couldn't restore toolbars. however, this is not really a problem.\n"); + } + else { + _savedToolbarState=QByteArray::fromHex(xml.parse1().toAscii()); + if (_savedToolbarState.isEmpty()) + _savedToolbarState=_toolbarNonsharedInit[_type]; + } } else if (tag == "shares_menu") { shareToolsAndMenu(xml.parseInt()); @@ -117,7 +126,11 @@ void TopWin::writeStatus(int level, Xml& xml) const xml.intTag(level, "is_subwin", isMdiWin()); xml.strTag(level, "geometry_state", saveGeometry().toHex().data()); xml.intTag(level, "shares_menu", sharesToolsAndMenu()); - xml.strTag(level, "toolbars", saveState().toHex().data()); + + if (!sharesToolsAndMenu()) + xml.strTag(level, "toolbars", saveState().toHex().data()); + else + xml.strTag(level, "toolbars", _savedToolbarState.toHex().data()); xml.tag(level, "/topwin"); } @@ -167,6 +180,8 @@ void TopWin::setIsMdiWin(bool val) { if (!isMdiWin()) { + _savedToolbarState = saveState(); + bool vis=isVisible(); QMdiSubWindow* subwin = createMdiWrapper(); muse->addMdiSubWindow(subwin); @@ -238,6 +253,13 @@ QToolBar* TopWin::addToolBar(const QString& title) void TopWin::shareToolsAndMenu(bool val) { + if (_sharesToolsAndMenu == val) + { + if (debugMsg) printf("TopWin::shareToolsAndMenu() called but has no effect\n"); + return; + } + + _sharesToolsAndMenu = val; if (!val) @@ -246,14 +268,23 @@ void TopWin::shareToolsAndMenu(bool val) for (list<QToolBar*>::iterator it=_toolbars.begin(); it!=_toolbars.end(); it++) if (*it != NULL) + { QMainWindow::addToolBar(*it); + (*it)->show(); + } else QMainWindow::addToolBarBreak(); + + restoreState(_savedToolbarState); + _savedToolbarState.clear(); menuBar()->show(); } else { + if (_savedToolbarState.isEmpty()) // this check avoids overwriting a previously saved state + _savedToolbarState = saveState(); // (by setIsMdiWin) with a now incorrect (empty) state + for (list<QToolBar*>::iterator it=_toolbars.begin(); it!=_toolbars.end(); it++) if (*it != NULL) { |