From 200f5a292f596a5a789a21ec5e790a42f94f8e45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Mon, 15 Oct 2007 22:43:55 +0000 Subject: [PATCH] mainly reduce include dependencies git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20976 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/Action.cpp | 4 +- src/frontends/qt4/Action.h | 4 +- src/frontends/qt4/GuiPopupMenu.cpp | 2 +- src/frontends/qt4/GuiToolbar.cpp | 298 +++++++++++++++-------------- src/frontends/qt4/GuiToolbar.h | 9 +- src/frontends/qt4/GuiToolbars.cpp | 2 + src/frontends/qt4/GuiToolbars.h | 5 +- src/frontends/qt4/GuiView.cpp | 1 + 8 files changed, 164 insertions(+), 161 deletions(-) diff --git a/src/frontends/qt4/Action.cpp b/src/frontends/qt4/Action.cpp index 63a05c68eb..bf18bef6db 100644 --- a/src/frontends/qt4/Action.cpp +++ b/src/frontends/qt4/Action.cpp @@ -27,7 +27,7 @@ namespace lyx { namespace frontend { -Action::Action(GuiViewBase & lyxView, QString const & icon, +Action::Action(GuiViewBase & lyxView, QIcon const & icon, QString const & text, FuncRequest const & func, QString const & tooltip) : QAction(&lyxView), func_(func), lyxView_(lyxView) @@ -36,7 +36,7 @@ Action::Action(GuiViewBase & lyxView, QString const & icon, // only Qt/Mac handles that setMenuRole(NoRole); #endif - setIcon(QPixmap(icon)); + setIcon(icon); setText(text); setToolTip(tooltip); setStatusTip(tooltip); diff --git a/src/frontends/qt4/Action.h b/src/frontends/qt4/Action.h index ecefbfe958..28ab3df4e0 100644 --- a/src/frontends/qt4/Action.h +++ b/src/frontends/qt4/Action.h @@ -14,6 +14,8 @@ #include +class QIcon; + namespace lyx { class FuncRequest; @@ -32,7 +34,7 @@ class Action : public QAction Q_OBJECT public: - Action(GuiViewBase & lyxView, QString const & icon, QString const & text, + Action(GuiViewBase & lyxView, QIcon const & icon, QString const & text, FuncRequest const & func, QString const & tooltip); void update(); diff --git a/src/frontends/qt4/GuiPopupMenu.cpp b/src/frontends/qt4/GuiPopupMenu.cpp index 1c2c104fc3..16c5368fa9 100644 --- a/src/frontends/qt4/GuiPopupMenu.cpp +++ b/src/frontends/qt4/GuiPopupMenu.cpp @@ -106,7 +106,7 @@ void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu) addBinding(label, *m); Action * action = new Action(*(owner_->view()), - QString(), toqstr(label), m->func(), QString()); + QIcon(), toqstr(label), m->func(), QString()); qMenu->addAction(action); } } diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index 06e3eedc84..2539b89f90 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -56,6 +56,153 @@ using support::compare; namespace frontend { + +namespace { + +struct PngMap { + char const * key; + char const * value; +}; + + +bool operator<(PngMap const & lhs, PngMap const & rhs) +{ + return compare(lhs.key, rhs.key) < 0; +} + + +class CompareKey { +public: + CompareKey(string const & name) : name_(name) {} + bool operator()(PngMap const & other) const { return other.key == name_; } +private: + string const name_; +}; + + +PngMap sorted_png_map[] = { + { "Bumpeq", "bumpeq2" }, + { "Cap", "cap2" }, + { "Cup", "cup2" }, + { "Delta", "delta2" }, + { "Downarrow", "downarrow2" }, + { "Gamma", "gamma2" }, + { "Lambda", "lambda2" }, + { "Leftarrow", "leftarrow2" }, + { "Leftrightarrow", "leftrightarrow2" }, + { "Longleftarrow", "longleftarrow2" }, + { "Longleftrightarrow", "longleftrightarrow2" }, + { "Longrightarrow", "longrightarrow2" }, + { "Omega", "omega2" }, + { "Phi", "phi2" }, + { "Pi", "pi2" }, + { "Psi", "psi2" }, + { "Rightarrow", "rightarrow2" }, + { "Sigma", "sigma2" }, + { "Subset", "subset2" }, + { "Supset", "supset2" }, + { "Theta", "theta2" }, + { "Uparrow", "uparrow2" }, + { "Updownarrow", "updownarrow2" }, + { "Upsilon", "upsilon2" }, + { "Vdash", "vdash3" }, + { "Xi", "xi2" }, + { "nLeftarrow", "nleftarrow2" }, + { "nLeftrightarrow", "nleftrightarrow2" }, + { "nRightarrow", "nrightarrow2" }, + { "nVDash", "nvdash3" }, + { "nvDash", "nvdash2" }, + { "textrm \\AA", "textrm_AA"}, + { "textrm \\O", "textrm_Oe"}, + { "vDash", "vdash2" } +}; + +size_t const nr_sorted_png_map = sizeof(sorted_png_map) / sizeof(PngMap); + + +string const find_png(string const & name) +{ + PngMap const * const begin = sorted_png_map; + PngMap const * const end = begin + nr_sorted_png_map; + BOOST_ASSERT(sorted(begin, end)); + + PngMap const * const it = std::find_if(begin, end, CompareKey(name)); + + string png_name; + if (it != end) + png_name = it->value; + else { + png_name = subst(name, "_", "underscore"); + png_name = subst(png_name, ' ', '_'); + + // This way we can have "math-delim { }" on the toolbar. + png_name = subst(png_name, "(", "lparen"); + png_name = subst(png_name, ")", "rparen"); + png_name = subst(png_name, "[", "lbracket"); + png_name = subst(png_name, "]", "rbracket"); + png_name = subst(png_name, "{", "lbrace"); + png_name = subst(png_name, "}", "rbrace"); + png_name = subst(png_name, "|", "bars"); + png_name = subst(png_name, ",", "thinspace"); + png_name = subst(png_name, ":", "mediumspace"); + png_name = subst(png_name, ";", "thickspace"); + png_name = subst(png_name, "!", "negthinspace"); + } + + LYXERR(Debug::GUI) << "find_png(" << name << ")\n" + << "Looking for math PNG called \"" + << png_name << '"' << std::endl; + + return libFileSearch("images/math/", png_name, "png").absFilename(); +} + +} // namespace anon + + +/// return a icon for the given action +static QIcon getIcon(FuncRequest const & f, bool unknown) +{ + string fullname; + + switch (f.action) { + case LFUN_MATH_INSERT: + if (!f.argument().empty()) + fullname = find_png(to_utf8(f.argument()).substr(1)); + break; + case LFUN_MATH_DELIM: + case LFUN_MATH_BIGDELIM: + fullname = find_png(to_utf8(f.argument())); + break; + default: + string const name = lyxaction.getActionName(f.action); + string png_name = name; + + if (!f.argument().empty()) + png_name = subst(name + ' ' + to_utf8(f.argument()), ' ', '_'); + + fullname = libFileSearch("images", png_name, "png").absFilename(); + + if (fullname.empty()) { + // try without the argument + fullname = libFileSearch("images", name, "png").absFilename(); + } + } + + if (!fullname.empty()) { + LYXERR(Debug::GUI) << "Full icon name is `" + << fullname << '\'' << endl; + return QIcon(toqstr(fullname)); + } + + LYXERR(Debug::GUI) << "Cannot find icon for command \"" + << lyxaction.getActionName(f.action) + << '(' << to_utf8(f.argument()) << ")\"" << endl; + if (unknown) + return QIcon(toqstr(libFileSearch("images", "unknown", "png").absFilename())); + return QIcon(); +} + + static TextClass const & textClass(LyXView const & lv) { return lv.buffer()->params().getTextClass(); @@ -176,7 +323,7 @@ GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiViewBase & owner) Action * GuiToolbar::addItem(ToolbarItem const & item) { Action * act = new Action(owner_, - getIcon(item.func_, false).c_str(), + getIcon(item.func_, false), toqstr(item.label_), item.func_, toqstr(item.label_)); actions_.append(act); return act; @@ -202,7 +349,7 @@ void GuiToolbar::add(ToolbarItem const & item) case ToolbarItem::TABLEINSERT: { QToolButton * tb = new QToolButton; tb->setCheckable(true); - tb->setIcon(QPixmap(toqstr(getIcon(FuncRequest(LFUN_TABULAR_INSERT))))); + tb->setIcon(getIcon(FuncRequest(LFUN_TABULAR_INSERT), true)); tb->setToolTip(qt_(to_ascii(item.label_))); tb->setStatusTip(qt_(to_ascii(item.label_))); tb->setText(qt_(to_ascii(item.label_))); @@ -235,7 +382,7 @@ void GuiToolbar::add(ToolbarItem const & item) panel->addButton(addItem(*it)); // use the icon of first action for the toolbar button if (it == tbinfo->items.begin()) - tb->setIcon(QPixmap(getIcon(it->func_).c_str())); + tb->setIcon(getIcon(it->func_, true)); } tb->setCheckable(true); connect(tb, SIGNAL(clicked(bool)), panel, SLOT(setVisible(bool))); @@ -329,151 +476,6 @@ void GuiToolbar::updateContents() } -namespace { - -struct PngMap { - char const * key; - char const * value; -}; - - -bool operator<(PngMap const & lhs, PngMap const & rhs) -{ - return compare(lhs.key, rhs.key) < 0; -} - - -class CompareKey { -public: - CompareKey(string const & name) : name_(name) {} - bool operator()(PngMap const & other) const { return other.key == name_; } -private: - string const name_; -}; - - -PngMap sorted_png_map[] = { - { "Bumpeq", "bumpeq2" }, - { "Cap", "cap2" }, - { "Cup", "cup2" }, - { "Delta", "delta2" }, - { "Downarrow", "downarrow2" }, - { "Gamma", "gamma2" }, - { "Lambda", "lambda2" }, - { "Leftarrow", "leftarrow2" }, - { "Leftrightarrow", "leftrightarrow2" }, - { "Longleftarrow", "longleftarrow2" }, - { "Longleftrightarrow", "longleftrightarrow2" }, - { "Longrightarrow", "longrightarrow2" }, - { "Omega", "omega2" }, - { "Phi", "phi2" }, - { "Pi", "pi2" }, - { "Psi", "psi2" }, - { "Rightarrow", "rightarrow2" }, - { "Sigma", "sigma2" }, - { "Subset", "subset2" }, - { "Supset", "supset2" }, - { "Theta", "theta2" }, - { "Uparrow", "uparrow2" }, - { "Updownarrow", "updownarrow2" }, - { "Upsilon", "upsilon2" }, - { "Vdash", "vdash3" }, - { "Xi", "xi2" }, - { "nLeftarrow", "nleftarrow2" }, - { "nLeftrightarrow", "nleftrightarrow2" }, - { "nRightarrow", "nrightarrow2" }, - { "nVDash", "nvdash3" }, - { "nvDash", "nvdash2" }, - { "textrm \\AA", "textrm_AA"}, - { "textrm \\O", "textrm_Oe"}, - { "vDash", "vdash2" } -}; - -size_t const nr_sorted_png_map = sizeof(sorted_png_map) / sizeof(PngMap); - - -string const find_png(string const & name) -{ - PngMap const * const begin = sorted_png_map; - PngMap const * const end = begin + nr_sorted_png_map; - BOOST_ASSERT(sorted(begin, end)); - - PngMap const * const it = std::find_if(begin, end, CompareKey(name)); - - string png_name; - if (it != end) - png_name = it->value; - else { - png_name = subst(name, "_", "underscore"); - png_name = subst(png_name, ' ', '_'); - - // This way we can have "math-delim { }" on the toolbar. - png_name = subst(png_name, "(", "lparen"); - png_name = subst(png_name, ")", "rparen"); - png_name = subst(png_name, "[", "lbracket"); - png_name = subst(png_name, "]", "rbracket"); - png_name = subst(png_name, "{", "lbrace"); - png_name = subst(png_name, "}", "rbrace"); - png_name = subst(png_name, "|", "bars"); - png_name = subst(png_name, ",", "thinspace"); - png_name = subst(png_name, ":", "mediumspace"); - png_name = subst(png_name, ";", "thickspace"); - png_name = subst(png_name, "!", "negthinspace"); - } - - LYXERR(Debug::GUI) << "find_png(" << name << ")\n" - << "Looking for math PNG called \"" - << png_name << '"' << std::endl; - - return libFileSearch("images/math/", png_name, "png").absFilename(); -} - -} // namespace anon - - -string const getIcon(FuncRequest const & f, bool unknown) -{ - string fullname; - - switch (f.action) { - case LFUN_MATH_INSERT: - if (!f.argument().empty()) - fullname = find_png(to_utf8(f.argument()).substr(1)); - break; - case LFUN_MATH_DELIM: - case LFUN_MATH_BIGDELIM: - fullname = find_png(to_utf8(f.argument())); - break; - default: - string const name = lyxaction.getActionName(f.action); - string png_name = name; - - if (!f.argument().empty()) - png_name = subst(name + ' ' + to_utf8(f.argument()), ' ', '_'); - - fullname = libFileSearch("images", png_name, "png").absFilename(); - - if (fullname.empty()) { - // try without the argument - fullname = libFileSearch("images", name, "png").absFilename(); - } - } - - if (!fullname.empty()) { - LYXERR(Debug::GUI) << "Full icon name is `" - << fullname << '\'' << endl; - return fullname; - } - - LYXERR(Debug::GUI) << "Cannot find icon for command \"" - << lyxaction.getActionName(f.action) - << '(' << to_utf8(f.argument()) << ")\"" << endl; - if (unknown) - return libFileSearch("images", "unknown", "png").absFilename(); - else - return string(); -} - } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/GuiToolbar.h b/src/frontends/qt4/GuiToolbar.h index 7751474d3f..ca4703ca0a 100644 --- a/src/frontends/qt4/GuiToolbar.h +++ b/src/frontends/qt4/GuiToolbar.h @@ -16,8 +16,6 @@ #ifndef GUITOOLBAR_H #define GUITOOLBAR_H -#include "GuiCommandBuffer.h" - #include "Session.h" #include @@ -26,11 +24,11 @@ namespace lyx { -class FuncRequest; class ToolbarItem; namespace frontend { +class GuiCommandBuffer; class GuiViewBase; class Action; @@ -43,7 +41,7 @@ public: /// select the right layout in the combobox. void set(docstring const & layout); - /// Populate the layout combox. + /// Populate the layout combobox. void updateContents(); private Q_SLOTS: @@ -85,9 +83,6 @@ private: GuiCommandBuffer * command_buffer_; }; -/// return a full path of an .png for the given action -std::string const getIcon(FuncRequest const & f, bool unknown = true); - } // namespace frontend } // namespace lyx diff --git a/src/frontends/qt4/GuiToolbars.cpp b/src/frontends/qt4/GuiToolbars.cpp index 8bf24294ed..c2c26cfe9f 100644 --- a/src/frontends/qt4/GuiToolbars.cpp +++ b/src/frontends/qt4/GuiToolbars.cpp @@ -14,6 +14,7 @@ #include "GuiToolbars.h" +#include "GuiCommandBuffer.h" #include "GuiToolbar.h" #include "GuiView.h" @@ -27,6 +28,7 @@ #include "LyX.h" #include "LyXFunc.h" #include "TextClass.h" +#include "ToolbarBackend.h" using std::endl; diff --git a/src/frontends/qt4/GuiToolbars.h b/src/frontends/qt4/GuiToolbars.h index d427132e78..af9c4b9bab 100644 --- a/src/frontends/qt4/GuiToolbars.h +++ b/src/frontends/qt4/GuiToolbars.h @@ -15,12 +15,13 @@ #define GUI_TOOLBARS_H #include "TextClass.h" -#include "ToolbarBackend.h" -#include "Session.h" #include namespace lyx { + +class ToolbarInfo; + namespace frontend { class GuiLayoutBox; diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 7b475f8bff..7e0ced1ae2 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -47,6 +47,7 @@ #include "MenuBackend.h" #include "Paragraph.h" #include "Session.h" +#include "ToolbarBackend.h" #include "version.h" #include