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>
* bufferlist.C: never remove emergency saves

View File

@ -15,19 +15,12 @@
#include "gettext.h"
#include "support/lstrings.h"
#include <map>
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 {
LColor::color lcolor;
@ -37,11 +30,44 @@ struct ColorEntry {
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()
: pimpl_(new Pimpl)
{
// LColor::color, gui, latex, x11, lyx
ColorEntry items[] = {
static ColorEntry const items[] = {
{ none, N_("none"), "none", "black", "none" },
{ black, N_("black"), "black", "black", "black" },
{ white, N_("white"), "white", "white", "white" },
@ -100,29 +126,43 @@ LColor::LColor()
{ ignore, 0, 0, 0, 0 }
};
int i = 0;
while (items[i].guiname) {
fill(items[i].lcolor, items[i].guiname, items[i].latexname,
items[i].x11name, items[i].lyxname);
++i;
for (int i = 0; items[i].guiname; ++i)
pimpl_->fill(items[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
{
InfoTab::const_iterator ici = infotab.find(c);
if (ici != infotab.end())
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != pimpl_->infotab.end())
return _(ici->second.guiname);
return "none";
}
string const LColor::getX11Name(LColor::color c) const
{
InfoTab::const_iterator ici = infotab.find(c);
if (ici != infotab.end())
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != pimpl_->infotab.end())
return ici->second.x11name;
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
{
InfoTab::const_iterator ici = infotab.find(c);
if (ici != infotab.end())
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != pimpl_->infotab.end())
return ici->second.latexname;
return "black";
}
@ -143,8 +183,8 @@ string const LColor::getLaTeXName(LColor::color c) const
string const LColor::getLyXName(LColor::color c) const
{
InfoTab::const_iterator ici = infotab.find(c);
if (ici != infotab.end())
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.find(c);
if (ici != pimpl_->infotab.end())
return ici->second.lyxname;
return "black";
}
@ -152,8 +192,8 @@ string const LColor::getLyXName(LColor::color c) const
void LColor::setColor(LColor::color col, string const & x11name)
{
InfoTab::iterator iti = infotab.find(col);
if (iti != infotab.end()) {
Pimpl::InfoTab::iterator iti = pimpl_->infotab.find(col);
if (iti != pimpl_->infotab.end()) {
iti->second.x11name = x11name;
return;
}
@ -180,8 +220,8 @@ bool LColor::setColor(string const & lyxname, string const & x11name)
LColor::color LColor::getFromGUIName(string const & guiname) const
{
InfoTab::const_iterator ici = infotab.begin();
InfoTab::const_iterator end = infotab.end();
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.begin();
Pimpl::InfoTab::const_iterator end = pimpl_->infotab.end();
for (; ici != end; ++ici) {
if (!compare_ascii_no_case(_(ici->second.guiname), guiname))
return ici->first;
@ -192,9 +232,8 @@ LColor::color LColor::getFromGUIName(string const & guiname) const
LColor::color LColor::getFromLyXName(string const & lyxname) const
{
InfoTab::const_iterator ici = infotab.begin();
InfoTab::const_iterator end = infotab.end();
Pimpl::InfoTab::const_iterator ici = pimpl_->infotab.begin();
Pimpl::InfoTab::const_iterator end = pimpl_->infotab.end();
for (; ici != end; ++ici) {
if (!compare_ascii_no_case(ici->second.lyxname, lyxname))
return ici->first;
@ -202,6 +241,7 @@ LColor::color LColor::getFromLyXName(string const & lyxname) const
return LColor::inherit;
}
// The evil global LColor instance
LColor lcolor;
// An equally evil global system LColor instance

View File

@ -11,8 +11,6 @@
#ifndef LCOLOR_H
#define LCOLOR_H
#include <map>
#include "LString.h"
/**
@ -35,7 +33,7 @@
* - 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
// explanation.
{
@ -170,6 +168,12 @@ public:
///
LColor();
///
LColor(LColor const &);
///
~LColor();
///
void operator=(LColor const &);
/// set the given LyX color to the color defined by the X11 name given
void setColor(LColor::color col, string const & x11name);
/// 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;
private:
///
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(LColor::color col, string const & gui,
string const & latex, string const & x11,
string const & lyx);
struct Pimpl;
///
typedef std::map<LColor::color, information> InfoTab;
/// the table of color information
InfoTab infotab;
Pimpl * pimpl_;
};
/// the current color definitions

View File

@ -15,6 +15,7 @@
#include "frontends/Painter.h"
#include <map>
#include <boost/scoped_ptr.hpp>
// 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>
* insettext.C (InsetText): parlist cleanup

View File

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