Bo Peng wrote:
Dear all,
The attached patch save/restore toolbar information (right now
on/off). The patch almost works, but all toolbars are displayed even
when session disables QToolbar::show() (see patch).
Peter and Abdel: please comment.
+ ToolbarSection::ToolbarInfo & status =
LyX::ref().session().toolbars().load(tbb.name);
+ status.visible = status.visible || (status.empty && tbb.flags &&
ToolbarBackend::ON);
+ tb_ptr->show(false, status);
The show function now accepts a full structure that contains various
toolbar information. How to make use of them is supposed to be
frontend-specific.
Well, I don't want to minimize your work Bo but for the toolbar
positioning, maybe we could use Qt own session management and call that
from your own session class?
+void QLToolbar::show(bool, ToolbarSection::ToolbarInfo const & info)
{
- QToolBar::show();
+ // FIXME: info should contain information about toolbar location
+ // etc. This function should make use of them to restore toolbar
+ // position etc.
+ // FIXME: the following seems to be appropriate, but toolbars are
shown
+ // even with the following commented out???
+// if (info.visible)
+// QToolBar::show();
I think this is overriden by the Toolbar backend show() and hide(). We
maybe have to rethink this backend.
}
This is where Peter should move toolbars around when lyx starts. This
does not work now since all toolbars are displayed even when I comment
out QToolBar::show(). I do not know what is going on here.
See above.
+void QLToolbar::saveInfo(ToolbarSection::ToolbarInfo & info)
+{
+ // update Toolbar info with current toolbar status
+ // FIXME: there are more information can be saved here
+ info.visible = QLToolbar::isVisible();
+}
This is where Peter should save toolbar information when lyx ends.
+class ToolbarSection : SessionSection
+{
+public:
+ /// information about a toolbar, not all information can be
+ /// saved/restored by all frontends, but this class provides
+ /// a superset of things that can be managed by session.
+ class ToolbarInfo
+ {
+ public:
+ ///
+ ToolbarInfo() :
+ empty(true), visible(false), posX(-1), posY(-1),
location(-1) { }
+ ///
+ ToolbarInfo(bool v, int x, int y) :
+ empty(false), visible(v), posX(x), posY(y), location(-1) { }
+
+ public:
+ /// true means no information is available (so ignore visible
settings)
+ bool empty;
+ /// on/off
+ bool visible;
+ /// position
+ int posX;
+ ///
+ int posY;
We don't need posX and posY. There is no floating toolbar and we should
not support that.
+ /// location: this can be intepreted differently.
+ int location;
Make that an enum:
enum Location {
top,
bottom,
left,
right
}
+ /// potentially, icons
+ };
I'd say not for 1.5.
This is where Toolbar info is handled. Peter, what information do you
want to save? Maybe toolbar orders as well?
Ordering would be nice but strictly necessary for now.
Index: src/frontends/LyXView.h
===================================================================
--- src/frontends/LyXView.h (revision 15649)
+++ src/frontends/LyXView.h (working copy)
@@ -136,6 +136,8 @@
/// update the toolbar
void updateToolbars();
+ /// save the status of toolbars
+ void saveToolbarInfo();
Why do you need this saveToolbarInfo()? toolbars()->saveSession() is as
good.
By the way, instead of using the global session object maybe it would be
better to make the session object retrieve the version itself and save
them as desired. I mean inside Session::save(LyXView & lv)
ToolbarInfo const & ti = lv.toolbars().info();
string lv_id = convert<string>(lv.id()); // Where to save this id?
session.sessionInfo().save("ToolbarLocation",
convert<string>(ti.location()));
What do you think?
Abdel.