LColor::Pimpl

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@6952 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2003-05-09 09:43:39 +00:00
parent f88898ed9a
commit 69cb723040
6 changed files with 95 additions and 56 deletions

View File

@ -1,3 +1,8 @@
2003-05-09 André Pönitz <poenitz@gmx.net>
* LColor.[Ch]: Pimpl the #include <map> away
2003-05-09 John Levon <levon@movementarian.org> 2003-05-09 John Levon <levon@movementarian.org>
* bufferlist.C: never remove emergency saves * bufferlist.C: never remove emergency saves

View File

@ -15,19 +15,12 @@
#include "gettext.h" #include "gettext.h"
#include "support/lstrings.h" #include "support/lstrings.h"
#include <map>
using std::endl; using std::endl;
void LColor::fill(LColor::color col, string const & gui,
string const & latex, string const & x11,
string const & lyx) {
information in;
in.guiname = gui;
in.latexname = latex;
in.x11name = x11;
in.lyxname = lyx;
infotab[col] = in; namespace {
}
struct ColorEntry { struct ColorEntry {
LColor::color lcolor; LColor::color lcolor;
@ -37,11 +30,44 @@ struct ColorEntry {
char const * lyxname; char const * lyxname;
}; };
}
struct LColor::Pimpl {
///
struct information {
/// the name as it appears in the GUI
string guiname;
/// the name used in LaTeX
string latexname;
/// the name for X11
string x11name;
/// the name for LyX
string lyxname;
};
/// initialise a color entry
void fill(ColorEntry const & entry)
{
information & in = infotab[entry.lcolor];
in.guiname = entry.guiname;
in.latexname = entry.latexname;
in.x11name = entry.x11name;
in.lyxname = entry.lyxname;
}
///
typedef std::map<LColor::color, information> InfoTab;
/// the table of color information
InfoTab infotab;
};
LColor::LColor() LColor::LColor()
: pimpl_(new Pimpl)
{ {
// LColor::color, gui, latex, x11, lyx // LColor::color, gui, latex, x11, lyx
ColorEntry items[] = { static ColorEntry const items[] = {
{ none, N_("none"), "none", "black", "none" }, { none, N_("none"), "none", "black", "none" },
{ black, N_("black"), "black", "black", "black" }, { black, N_("black"), "black", "black", "black" },
{ white, N_("white"), "white", "white", "white" }, { white, N_("white"), "white", "white", "white" },
@ -100,29 +126,43 @@ LColor::LColor()
{ ignore, 0, 0, 0, 0 } { ignore, 0, 0, 0, 0 }
}; };
int i = 0; for (int i = 0; items[i].guiname; ++i)
while (items[i].guiname) { pimpl_->fill(items[i]);
fill(items[i].lcolor, items[i].guiname, items[i].latexname,
items[i].x11name, items[i].lyxname);
++i;
}
} }
LColor::LColor(LColor const & c)
: pimpl_(new Pimpl(*c.pimpl_))
{}
LColor::~LColor()
{
delete pimpl_;
}
void LColor::operator=(LColor const & c)
{
LColor tmp(c);
std::swap(pimpl_, tmp.pimpl_);
}
string const LColor::getGUIName(LColor::color c) const string const LColor::getGUIName(LColor::color c) const
{ {
InfoTab::const_iterator ici = infotab.find(c); Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != infotab.end()) if (ici != pimpl_->infotab.end())
return _(ici->second.guiname); return _(ici->second.guiname);
return "none"; return "none";
} }
string const LColor::getX11Name(LColor::color c) const string const LColor::getX11Name(LColor::color c) const
{ {
InfoTab::const_iterator ici = infotab.find(c); Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != infotab.end()) if (ici != pimpl_->infotab.end())
return ici->second.x11name; return ici->second.x11name;
lyxerr << "LyX internal error: Missing color" lyxerr << "LyX internal error: Missing color"
@ -134,8 +174,8 @@ string const LColor::getX11Name(LColor::color c) const
string const LColor::getLaTeXName(LColor::color c) const string const LColor::getLaTeXName(LColor::color c) const
{ {
InfoTab::const_iterator ici = infotab.find(c); Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != infotab.end()) if (ici != pimpl_->infotab.end())
return ici->second.latexname; return ici->second.latexname;
return "black"; return "black";
} }
@ -143,8 +183,8 @@ string const LColor::getLaTeXName(LColor::color c) const
string const LColor::getLyXName(LColor::color c) const string const LColor::getLyXName(LColor::color c) const
{ {
InfoTab::const_iterator ici = infotab.find(c); Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != infotab.end()) if (ici != pimpl_->infotab.end())
return ici->second.lyxname; return ici->second.lyxname;
return "black"; return "black";
} }
@ -152,8 +192,8 @@ string const LColor::getLyXName(LColor::color c) const
void LColor::setColor(LColor::color col, string const & x11name) void LColor::setColor(LColor::color col, string const & x11name)
{ {
InfoTab::iterator iti = infotab.find(col); Pimpl::InfoTab::iterator iti = pimpl_->infotab.find(col);
if (iti != infotab.end()) { if (iti != pimpl_->infotab.end()) {
iti->second.x11name = x11name; iti->second.x11name = x11name;
return; return;
} }
@ -164,7 +204,7 @@ void LColor::setColor(LColor::color col, string const & x11name)
bool LColor::setColor(string const & lyxname, string const & x11name) bool LColor::setColor(string const & lyxname, string const & x11name)
{ {
color col = getFromLyXName (lyxname); color col = getFromLyXName(lyxname);
// "inherit" is returned for colors not in the database // "inherit" is returned for colors not in the database
// (and anyway should not be redefined) // (and anyway should not be redefined)
@ -180,8 +220,8 @@ bool LColor::setColor(string const & lyxname, string const & x11name)
LColor::color LColor::getFromGUIName(string const & guiname) const LColor::color LColor::getFromGUIName(string const & guiname) const
{ {
InfoTab::const_iterator ici = infotab.begin(); Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.begin();
InfoTab::const_iterator end = infotab.end(); Pimpl::InfoTab::const_iterator end = pimpl_->infotab.end();
for (; ici != end; ++ici) { for (; ici != end; ++ici) {
if (!compare_ascii_no_case(_(ici->second.guiname), guiname)) if (!compare_ascii_no_case(_(ici->second.guiname), guiname))
return ici->first; return ici->first;
@ -192,9 +232,8 @@ LColor::color LColor::getFromGUIName(string const & guiname) const
LColor::color LColor::getFromLyXName(string const & lyxname) const LColor::color LColor::getFromLyXName(string const & lyxname) const
{ {
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.begin();
InfoTab::const_iterator ici = infotab.begin(); Pimpl::InfoTab::const_iterator end = pimpl_->infotab.end();
InfoTab::const_iterator end = infotab.end();
for (; ici != end; ++ici) { for (; ici != end; ++ici) {
if (!compare_ascii_no_case(ici->second.lyxname, lyxname)) if (!compare_ascii_no_case(ici->second.lyxname, lyxname))
return ici->first; return ici->first;
@ -202,6 +241,7 @@ LColor::color LColor::getFromLyXName(string const & lyxname) const
return LColor::inherit; return LColor::inherit;
} }
// The evil global LColor instance // The evil global LColor instance
LColor lcolor; LColor lcolor;
// An equally evil global system LColor instance // An equally evil global system LColor instance

View File

@ -11,8 +11,6 @@
#ifndef LCOLOR_H #ifndef LCOLOR_H
#define LCOLOR_H #define LCOLOR_H
#include <map>
#include "LString.h" #include "LString.h"
/** /**
@ -35,7 +33,7 @@
* - A logical color, such as no color, inherit, math * - A logical color, such as no color, inherit, math
*/ */
class LColor // : public boost::noncopyable { class LColor
// made copyable for same reasons as LyXRC was made copyable. See there for // made copyable for same reasons as LyXRC was made copyable. See there for
// explanation. // explanation.
{ {
@ -170,6 +168,12 @@ public:
/// ///
LColor(); LColor();
///
LColor(LColor const &);
///
~LColor();
///
void operator=(LColor const &);
/// set the given LyX color to the color defined by the X11 name given /// set the given LyX color to the color defined by the X11 name given
void setColor(LColor::color col, string const & x11name); void setColor(LColor::color col, string const & x11name);
/// set the given LyX color to the color defined by the X11 name given /// set the given LyX color to the color defined by the X11 name given
@ -193,26 +197,9 @@ public:
LColor::color getFromLyXName(string const & lyxname) const; LColor::color getFromLyXName(string const & lyxname) const;
private: private:
/// ///
struct information { struct Pimpl;
/// the name as it appears in the GUI
string guiname;
/// the name used in LaTeX
string latexname;
/// the name for X11
string x11name;
/// the name for LyX
string lyxname;
};
/// initialise a color entry
void fill(LColor::color col, string const & gui,
string const & latex, string const & x11,
string const & lyx);
/// ///
typedef std::map<LColor::color, information> InfoTab; Pimpl * pimpl_;
/// the table of color information
InfoTab infotab;
}; };
/// the current color definitions /// the current color definitions

View File

@ -15,6 +15,7 @@
#include "frontends/Painter.h" #include "frontends/Painter.h"
#include <map>
#include <boost/scoped_ptr.hpp> #include <boost/scoped_ptr.hpp>
// This is only included to provide stuff for the non-public sections // This is only included to provide stuff for the non-public sections

View File

@ -1,3 +1,8 @@
2003-05-05 André Pönitz <poenitz@gmx.net>
* insettext.h: add missing #include <map>
2003-05-07 Lars Gullik Bjønnes <larsbj@gullik.net> 2003-05-07 Lars Gullik Bjønnes <larsbj@gullik.net>
* insettext.C (InsetText): parlist cleanup * insettext.C (InsetText): parlist cleanup

View File

@ -22,6 +22,7 @@
#include "support/types.h" #include "support/types.h"
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <map>
class Painter; class Painter;
class BufferView; class BufferView;