summaryrefslogtreecommitdiff
path: root/muse2/muse/cobject.cpp
diff options
context:
space:
mode:
authorFlorian Jung <flo@windfisch.org>2011-08-21 14:29:25 +0000
committerFlorian Jung <flo@windfisch.org>2011-08-21 14:29:25 +0000
commit958f22a0b718d5a94cecd20073710c80e609cdac (patch)
tree714f9cf4fc6aca09e2c1c9d275e70ce347f692ff /muse2/muse/cobject.cpp
parentedbe737895dacf8bf54813d7bc99c5e851dc8018 (diff)
fixed bugs regarding saving and restoring toolbar state
Diffstat (limited to 'muse2/muse/cobject.cpp')
-rw-r--r--muse2/muse/cobject.cpp37
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)
{