mainly reduce include dependencies

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20976 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2007-10-15 22:43:55 +00:00
parent 17fafa7f3d
commit 200f5a292f
8 changed files with 164 additions and 161 deletions

View File

@ -27,7 +27,7 @@ namespace lyx {
namespace frontend { namespace frontend {
Action::Action(GuiViewBase & lyxView, QString const & icon, Action::Action(GuiViewBase & lyxView, QIcon const & icon,
QString const & text, FuncRequest const & func, QString const & text, FuncRequest const & func,
QString const & tooltip) QString const & tooltip)
: QAction(&lyxView), func_(func), lyxView_(lyxView) : QAction(&lyxView), func_(func), lyxView_(lyxView)
@ -36,7 +36,7 @@ Action::Action(GuiViewBase & lyxView, QString const & icon,
// only Qt/Mac handles that // only Qt/Mac handles that
setMenuRole(NoRole); setMenuRole(NoRole);
#endif #endif
setIcon(QPixmap(icon)); setIcon(icon);
setText(text); setText(text);
setToolTip(tooltip); setToolTip(tooltip);
setStatusTip(tooltip); setStatusTip(tooltip);

View File

@ -14,6 +14,8 @@
#include <QAction> #include <QAction>
class QIcon;
namespace lyx { namespace lyx {
class FuncRequest; class FuncRequest;
@ -32,7 +34,7 @@ class Action : public QAction
Q_OBJECT Q_OBJECT
public: 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); FuncRequest const & func, QString const & tooltip);
void update(); void update();

View File

@ -106,7 +106,7 @@ void GuiPopupMenu::populate(QMenu * qMenu, Menu * menu)
addBinding(label, *m); addBinding(label, *m);
Action * action = new Action(*(owner_->view()), Action * action = new Action(*(owner_->view()),
QString(), toqstr(label), m->func(), QString()); QIcon(), toqstr(label), m->func(), QString());
qMenu->addAction(action); qMenu->addAction(action);
} }
} }

View File

@ -56,6 +56,153 @@ using support::compare;
namespace frontend { 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) static TextClass const & textClass(LyXView const & lv)
{ {
return lv.buffer()->params().getTextClass(); return lv.buffer()->params().getTextClass();
@ -176,7 +323,7 @@ GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiViewBase & owner)
Action * GuiToolbar::addItem(ToolbarItem const & item) Action * GuiToolbar::addItem(ToolbarItem const & item)
{ {
Action * act = new Action(owner_, Action * act = new Action(owner_,
getIcon(item.func_, false).c_str(), getIcon(item.func_, false),
toqstr(item.label_), item.func_, toqstr(item.label_)); toqstr(item.label_), item.func_, toqstr(item.label_));
actions_.append(act); actions_.append(act);
return act; return act;
@ -202,7 +349,7 @@ void GuiToolbar::add(ToolbarItem const & item)
case ToolbarItem::TABLEINSERT: { case ToolbarItem::TABLEINSERT: {
QToolButton * tb = new QToolButton; QToolButton * tb = new QToolButton;
tb->setCheckable(true); 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->setToolTip(qt_(to_ascii(item.label_)));
tb->setStatusTip(qt_(to_ascii(item.label_))); tb->setStatusTip(qt_(to_ascii(item.label_)));
tb->setText(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)); panel->addButton(addItem(*it));
// use the icon of first action for the toolbar button // 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->setIcon(getIcon(it->func_, true));
} }
tb->setCheckable(true); tb->setCheckable(true);
connect(tb, SIGNAL(clicked(bool)), panel, SLOT(setVisible(bool))); 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 frontend
} // namespace lyx } // namespace lyx

View File

@ -16,8 +16,6 @@
#ifndef GUITOOLBAR_H #ifndef GUITOOLBAR_H
#define GUITOOLBAR_H #define GUITOOLBAR_H
#include "GuiCommandBuffer.h"
#include "Session.h" #include "Session.h"
#include <QList> #include <QList>
@ -26,11 +24,11 @@
namespace lyx { namespace lyx {
class FuncRequest;
class ToolbarItem; class ToolbarItem;
namespace frontend { namespace frontend {
class GuiCommandBuffer;
class GuiViewBase; class GuiViewBase;
class Action; class Action;
@ -43,7 +41,7 @@ public:
/// select the right layout in the combobox. /// select the right layout in the combobox.
void set(docstring const & layout); void set(docstring const & layout);
/// Populate the layout combox. /// Populate the layout combobox.
void updateContents(); void updateContents();
private Q_SLOTS: private Q_SLOTS:
@ -85,9 +83,6 @@ private:
GuiCommandBuffer * command_buffer_; 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 frontend
} // namespace lyx } // namespace lyx

View File

@ -14,6 +14,7 @@
#include "GuiToolbars.h" #include "GuiToolbars.h"
#include "GuiCommandBuffer.h"
#include "GuiToolbar.h" #include "GuiToolbar.h"
#include "GuiView.h" #include "GuiView.h"
@ -27,6 +28,7 @@
#include "LyX.h" #include "LyX.h"
#include "LyXFunc.h" #include "LyXFunc.h"
#include "TextClass.h" #include "TextClass.h"
#include "ToolbarBackend.h"
using std::endl; using std::endl;

View File

@ -15,12 +15,13 @@
#define GUI_TOOLBARS_H #define GUI_TOOLBARS_H
#include "TextClass.h" #include "TextClass.h"
#include "ToolbarBackend.h"
#include "Session.h"
#include <map> #include <map>
namespace lyx { namespace lyx {
class ToolbarInfo;
namespace frontend { namespace frontend {
class GuiLayoutBox; class GuiLayoutBox;

View File

@ -47,6 +47,7 @@
#include "MenuBackend.h" #include "MenuBackend.h"
#include "Paragraph.h" #include "Paragraph.h"
#include "Session.h" #include "Session.h"
#include "ToolbarBackend.h"
#include "version.h" #include "version.h"
#include <boost/current_function.hpp> #include <boost/current_function.hpp>