Jean-Marc Lasgouttes schrieb:
At least, I would prefer
if (!tbi)
to
if (tbi == 0)
Done.
Now that I look at it (even) more closely, I have a question: we used
to have two version of getToolbars, which only differred by the fact
that one is const.
With your patch we know kind of randomly decide that one should be for
usedtoolbars (you have not told me yet what it is, the fact that you
did not write it does not help my comprehension :) qnd the other one
for defined toolbars. Why?
See it that way: I removed an obsolete non-const method for "defined"
and added a _different_ non-const method for "used". There is no case in
which we want to change a "defined" toolbar whereas we have to change a
"used" toolbar.
Regarding "used" vs. "defined". I still don't know their precise
meaning. However, this is irrelevant for the patch. It has never been my
intention to question the toolbar implementation. I just wanted to fix a
translation problem and a seg fault. Luckily, I was able to do so
without understanding the details of the implementation :-)
New patch version attached. José, Jean-Marc, can I commit?
Michael
Index: src/frontends/LyXView.h
===================================================================
--- src/frontends/LyXView.h (Revision 19004)
+++ src/frontends/LyXView.h (Arbeitskopie)
@@ -157,8 +157,8 @@
/// update the toolbar
void updateToolbars();
- /// get toolbar state
- ToolbarInfo::Flags getToolbarState(std::string const & name);
+ /// get toolbar info
+ ToolbarInfo * getToolbarInfo(std::string const & name);
/// toggle toolbar state
void toggleToolbarState(std::string const & name, bool allowauto);
/// update the menubar
Index: src/frontends/Toolbars.cpp
===================================================================
--- src/frontends/Toolbars.cpp (Revision 19004)
+++ src/frontends/Toolbars.cpp (Arbeitskopie)
@@ -169,58 +169,44 @@
}
-ToolbarInfo::Flags Toolbars::getToolbarState(string const & name)
+ToolbarInfo * Toolbars::getToolbarInfo(string const & name)
{
- ToolbarBackend::Toolbars::const_iterator cit = toolbarbackend.begin();
- ToolbarBackend::Toolbars::const_iterator end = toolbarbackend.end();
-
- for (; cit != end; ++cit) {
- if (cit->name == name)
- return cit->flags;
- }
-
- LYXERR(Debug::GUI) << "Toolbar::display: no toolbar named "
- << name << endl;
-
- // return dummy for msvc
- return ToolbarInfo::OFF;
+ return toolbarbackend.getUsedToolbarInfo(name);
}
void Toolbars::toggleToolbarState(string const & name, bool allowauto)
{
- ToolbarBackend::Toolbars::iterator cit = toolbarbackend.begin();
- ToolbarBackend::Toolbars::iterator end = toolbarbackend.end();
+ ToolbarInfo * tbi = toolbarbackend.getUsedToolbarInfo(name);
- for (; cit != end; ++cit) {
- if (cit->name == name) {
- int flags = cit->flags;
- // off -> on
- if (flags & ToolbarInfo::OFF) {
- TurnOffFlag(OFF);
- TurnOnFlag(ON);
- // auto -> off
- } else if (flags & ToolbarInfo::AUTO) {
- TurnOffFlag(AUTO);
- TurnOnFlag(OFF);
- } else if (allowauto
- && ((flags & ToolbarInfo::MATH)
- || (flags & ToolbarInfo::TABLE)
- || (flags & ToolbarInfo::REVIEW))) {
- // for math etc, toggle from on -> auto
- TurnOffFlag(ON);
- TurnOnFlag(AUTO);
- } else {
- // for others, toggle from on -> off
- TurnOffFlag(ON);
- TurnOnFlag(OFF);
- }
- cit->flags = static_cast<ToolbarInfo::Flags>(flags);
- return;
- }
+ if (!tbi) {
+ LYXERR(Debug::GUI) << "Toolbar::display: no toolbar named "
+ << name << endl;
+ return;
}
- LYXERR(Debug::GUI) << "Toolbar::display: no toolbar named "
- << name << endl;
+
+ int flags = tbi->flags;
+ // off -> on
+ if (flags & ToolbarInfo::OFF) {
+ TurnOffFlag(OFF);
+ TurnOnFlag(ON);
+ // auto -> off
+ } else if (flags & ToolbarInfo::AUTO) {
+ TurnOffFlag(AUTO);
+ TurnOnFlag(OFF);
+ } else if (allowauto
+ && ((flags & ToolbarInfo::MATH)
+ || (flags & ToolbarInfo::TABLE)
+ || (flags & ToolbarInfo::REVIEW))) {
+ // for math etc, toggle from on -> auto
+ TurnOffFlag(ON);
+ TurnOnFlag(AUTO);
+ } else {
+ // for others, toggle from on -> off
+ TurnOffFlag(ON);
+ TurnOnFlag(OFF);
+ }
+ tbi->flags = static_cast<ToolbarInfo::Flags>(flags);
}
#undef TurnOnFlag
#undef TurnOffFlag
Index: src/frontends/qt4/QLToolbar.cpp
===================================================================
--- src/frontends/qt4/QLToolbar.cpp (Revision 19004)
+++ src/frontends/qt4/QLToolbar.cpp (Arbeitskopie)
@@ -214,9 +214,13 @@
IconPalette * panel = new IconPalette(tb);
panel->setWindowTitle(qt_(to_ascii(item.label_)));
connect(this, SIGNAL(updated()), panel, SLOT(updateParent()));
- ToolbarInfo const & tbinfo = toolbarbackend.getToolbar(item.name_);
- ToolbarInfo::item_iterator it = tbinfo.items.begin();
- ToolbarInfo::item_iterator const end = tbinfo.items.end();
+ ToolbarInfo const * tbinfo = toolbarbackend.getDefinedToolbarInfo(item.name_);
+ if (!tbinfo) {
+ lyxerr << "Unknown toolbar " << item.name_ << endl;
+ break;
+ }
+ ToolbarInfo::item_iterator it = tbinfo->items.begin();
+ ToolbarInfo::item_iterator const end = tbinfo->items.end();
for (; it != end; ++it)
if (!getStatus(it->func_).unknown()) {
Action * action = new Action(owner_,
@@ -227,7 +231,7 @@
panel->addButton(action);
ActionVector.push_back(action);
// use the icon of first action for the toolbar button
- if (it == tbinfo.items.begin())
+ if (it == tbinfo->items.begin())
tb->setIcon(QPixmap(getIcon(it->func_).c_str()));
}
tb->setCheckable(true);
@@ -251,9 +255,13 @@
m->setWindowTitle(qt_(to_ascii(item.label_)));
m->setTearOffEnabled(true);
connect(this, SIGNAL(updated()), m, SLOT(updateParent()));
- ToolbarInfo const & tbinfo = toolbarbackend.getToolbar(item.name_);
- ToolbarInfo::item_iterator it = tbinfo.items.begin();
- ToolbarInfo::item_iterator const end = tbinfo.items.end();
+ ToolbarInfo const * tbinfo = toolbarbackend.getDefinedToolbarInfo(item.name_);
+ if (!tbinfo) {
+ lyxerr << "Unknown toolbar " << item.name_ << endl;
+ break;
+ }
+ ToolbarInfo::item_iterator it = tbinfo->items.begin();
+ ToolbarInfo::item_iterator const end = tbinfo->items.end();
for (; it != end; ++it)
if (!getStatus(it->func_).unknown()) {
Action * action = new Action(owner_,
Index: src/frontends/LyXView.cpp
===================================================================
--- src/frontends/LyXView.cpp (Revision 19004)
+++ src/frontends/LyXView.cpp (Arbeitskopie)
@@ -406,9 +406,9 @@
}
-ToolbarInfo::Flags LyXView::getToolbarState(string const & name)
+ToolbarInfo * LyXView::getToolbarInfo(string const & name)
{
- return toolbars_->getToolbarState(name);
+ return toolbars_->getToolbarInfo(name);
}
Index: src/frontends/Toolbars.h
===================================================================
--- src/frontends/Toolbars.h (Revision 19004)
+++ src/frontends/Toolbars.h (Arbeitskopie)
@@ -90,8 +90,8 @@
/// Show/hide the named toolbar.
void display(std::string const & name, bool show);
- /// get toolbar state (on/off/auto)
- ToolbarInfo::Flags getToolbarState(std::string const & name);
+ /// get toolbar info
+ ToolbarInfo * getToolbarInfo(std::string const & name);
/** toggle the state of toolbars (on/off/auto). Skip "auto"
* when allowauto is false.
Index: src/LyXFunc.cpp
===================================================================
--- src/LyXFunc.cpp (Revision 19004)
+++ src/LyXFunc.cpp (Arbeitskopie)
@@ -1784,18 +1784,22 @@
string const name = cmd.getArg(0);
bool const allowauto = cmd.getArg(1) == "allowauto";
lyx_view_->toggleToolbarState(name, allowauto);
- ToolbarInfo::Flags const flags =
- lyx_view_->getToolbarState(name);
+ ToolbarInfo * tbi = lyx_view_->getToolbarInfo(name);
+ if (!tbi) {
+ setMessage(bformat(_("Unknown toolbar \"%1$s\""),
+ from_utf8(name)));
+ break;
+ }
docstring state;
- if (flags & ToolbarInfo::ON)
+ if (tbi->flags & ToolbarInfo::ON)
state = _("on");
- else if (flags & ToolbarInfo::OFF)
+ else if (tbi->flags & ToolbarInfo::OFF)
state = _("off");
- else if (flags & ToolbarInfo::AUTO)
+ else if (tbi->flags & ToolbarInfo::AUTO)
state = _("auto");
setMessage(bformat(_("Toolbar \"%1$s\" state set to %2$s"),
- from_ascii(name), state));
+ _(tbi->gui_name), state));
break;
}
Index: src/ToolbarBackend.cpp
===================================================================
--- src/ToolbarBackend.cpp (Revision 19004)
+++ src/ToolbarBackend.cpp (Arbeitskopie)
@@ -328,24 +328,21 @@
}
-ToolbarInfo const & ToolbarBackend::getToolbar(string const & name) const
+ToolbarInfo const * ToolbarBackend::getDefinedToolbarInfo(string const & name) const
{
- Toolbars::const_iterator cit = find_if(toolbars.begin(), toolbars.end(), ToolbarNamesEqual(name));
- if (cit == toolbars.end())
- lyxerr << "No toolbar named " << name << endl;
- BOOST_ASSERT(cit != toolbars.end());
- return (*cit);
+ Toolbars::const_iterator it = find_if(toolbars.begin(), toolbars.end(), ToolbarNamesEqual(name));
+ if (it == toolbars.end())
+ return 0;
+ return &(*it);
}
-ToolbarInfo & ToolbarBackend::getToolbar(string const & name)
+ToolbarInfo * ToolbarBackend::getUsedToolbarInfo(string const &name)
{
- Toolbars::iterator it = find_if(toolbars.begin(), toolbars.end(), ToolbarNamesEqual(name));
- if (it == toolbars.end())
- lyxerr << "No toolbar named " << name << endl;
- BOOST_ASSERT(it != toolbars.end());
- return (*it);
+ Toolbars::iterator it = find_if(usedtoolbars.begin(), usedtoolbars.end(), ToolbarNamesEqual(name));
+ if (it == usedtoolbars.end())
+ return 0;
+ return &(*it);
}
-
} // namespace lyx
Index: src/ToolbarBackend.h
===================================================================
--- src/ToolbarBackend.h (Revision 19004)
+++ src/ToolbarBackend.h (Arbeitskopie)
@@ -126,13 +126,14 @@
/// read ui toolbar settings
void readToolbarSettings(Lexer &);
+
///
- ToolbarInfo const & getToolbar(std::string const & name) const;
+ ToolbarInfo const * getDefinedToolbarInfo(std::string const & name) const;
///
- ToolbarInfo & getToolbar(std::string const & name);
+ ToolbarInfo * getUsedToolbarInfo(std::string const & name);
private:
- /// all the toolbars
+ /// all the defined toolbars
Toolbars toolbars;
/// toolbars listed