Hi, All
Attached is a patch to save/restore toolbar status. Any opinion? (It
is qt4 only right now, and is not thoroughly tested).
Bo
Index: src/frontends/Toolbars.C
===================================================================
--- src/frontends/Toolbars.C (revision 15344)
+++ src/frontends/Toolbars.C (working copy)
@@ -20,11 +20,15 @@
#include "FuncStatus.h"
#include "gettext.h"
#include "lyxfunc.h"
+#include "lyx_main.h"
+#include "session.h"
+
#include "lyxtextclass.h"
#include "LyXView.h"
using std::endl;
using std::string;
+using std::vector;
Toolbars::Toolbars(LyXView & owner)
@@ -119,7 +123,10 @@
ToolbarPtr tb_ptr = owner_.makeToolbar(tbb);
toolbars_[tbb.name] = tb_ptr;
- if (tbb.flags & ToolbarBackend::ON)
+ // load last saved toolbasr status, if possible
+ lyx::Session & session = LyX::ref().session();
+ string visibleToolbars = session.loadSessionInfo("VisibleToolBars", false);
+ if (tbb.flags & ToolbarBackend::ON & (visibleToolbars.empty() || visibleToolbars.find(tbb.name) != string::npos) )
tb_ptr->show(false);
else
tb_ptr->hide(false);
@@ -142,6 +149,18 @@
}
+vector<string> Toolbars::visibleToolbars()
+{
+ vector<string> toolbars;
+ ToolbarsMap::const_iterator it = toolbars_.begin();
+ ToolbarsMap::const_iterator const end = toolbars_.end();
+ for (; it != end; ++it)
+ if(it->second->isVisible())
+ toolbars.push_back(it->first);
+ return toolbars;
+}
+
+
void Toolbars::update()
{
ToolbarsMap::const_iterator it = toolbars_.begin();
Index: src/frontends/qt4/QLToolbar.C
===================================================================
--- src/frontends/qt4/QLToolbar.C (revision 15344)
+++ src/frontends/qt4/QLToolbar.C (working copy)
@@ -215,6 +215,10 @@
QToolBar::show();
}
+bool QLToolbar::isVisible()
+{
+ return QToolBar::isVisible();
+}
void QLToolbar::update()
{
Index: src/frontends/qt4/QLToolbar.h
===================================================================
--- src/frontends/qt4/QLToolbar.h (revision 15344)
+++ src/frontends/qt4/QLToolbar.h (working copy)
@@ -67,6 +67,7 @@
void add(FuncRequest const & func, lyx::docstring const & tooltip);
void hide(bool);
void show(bool);
+ bool isVisible();
void update();
LayoutBox * layout() const { return layout_.get(); }
Index: src/frontends/qt4/GuiView.C
===================================================================
--- src/frontends/qt4/GuiView.C (revision 15344)
+++ src/frontends/qt4/GuiView.C (working copy)
@@ -251,6 +251,12 @@
session.saveSessionInfo("WindowPosX", convert<string>(geometry.x()));
session.saveSessionInfo("WindowPosY", convert<string>(geometry.y()));
}
+ // save toolbar information
+ std::vector<string> toolbars = getToolbars().visibleToolbars();
+ string names = "";
+ for(std::vector<string>::iterator it = toolbars.begin(); it != toolbars.end(); ++it)
+ names += *it + " ";
+ session.saveSessionInfo("VisibleToolBars", names);
// trigger LFUN_LYX_QUIT instead of quit directly
// since LFUN_LYX_QUIT may have more cleanup stuff
dispatch(FuncRequest(LFUN_LYX_QUIT));
Index: src/frontends/Toolbars.h
===================================================================
--- src/frontends/Toolbars.h (revision 15344)
+++ src/frontends/Toolbars.h (working copy)
@@ -64,6 +64,8 @@
*/
virtual void show(bool update_metrics) = 0;
+ /// if the toolbar is visible
+ virtual bool isVisible() = 0;
/// Refresh the contents of the bar.
virtual void update() = 0;
/// Accessor to the layout combox, if any.
@@ -81,6 +83,10 @@
/// Show/hide the named toolbar.
void display(std::string const & name, bool show);
+
+ /// return the name of active toolbars
+ std::vector<std::string> visibleToolbars();
+
/// Update the state of the toolbars.
void update(bool in_math, bool in_table);