* Copyright 2001 The LyX Team.
* See the file COPYING.
*
- * \author Angus Leeming, a.leeming@.ac.uk
+ * \author Angus Leeming, a.leeming@ic.ac.uk
*/
#include <vector>
#include <config.h>
+#include "ViewBase.h"
+#include "ButtonControllerBase.h"
#include "ControlCharacter.h"
-#include "bufferview_funcs.h"
+#include "buffer.h"
#include "Dialogs.h"
#include "Liason.h"
#include "LyXView.h"
-#include "buffer.h"
-#include "lyxtext.h"
+#include "bufferview_funcs.h" // ToggleAndShow
+#include "gettext.h"
#include "language.h"
+#include "BufferView.h"
using Liason::setMinibuffer;
using SigC::slot;
using std::vector;
+
ControlCharacter::ControlCharacter(LyXView & lv, Dialogs & d)
: ControlDialog<ControlConnectBD>(lv, d),
font_(0), toggleall_(false)
{
- d.showLayoutCharacter.connect(slot(this, &ControlCharacter::show));
- d.setUserFreeFont.connect(slot(this, &ControlCharacter::apply));
+ d_.showCharacter.connect(slot(this, &ControlCharacter::show));
+ d_.setUserFreeFont.connect(slot(this, &ControlCharacter::apply));
}
void ControlCharacter::setParams()
{
- if (font_) delete font_;
- font_ = new LyXFont(LyXFont::ALL_IGNORE);
-}
-
+ // Do this the first time only. Used as a flag for whether or not the
+ // view has been built
+ if (!font_.get())
+ font_.reset(new LyXFont(LyXFont::ALL_IGNORE));
-void ControlCharacter::clearParams()
-{
- if (font_) {
- delete font_;
- font_ = 0;
- }
+ // so that the user can press Ok
+ if (getFamily() != LyXFont::IGNORE_FAMILY ||
+ getSeries() != LyXFont::IGNORE_SERIES ||
+ getShape() != LyXFont::IGNORE_SHAPE ||
+ getSize() != LyXFont::IGNORE_SIZE ||
+ getBar() != character::IGNORE ||
+ getColor() != LColor::ignore ||
+ font_->language() != ignore_language)
+ bc().valid();
}
void ControlCharacter::apply()
{
- if (!lv_.view()->available())
+ // Nothing to apply. (Can be called from the Toolbar.)
+ if (!font_.get())
return;
-
- view().apply();
- ToggleAndShow(lv_.view(), *font_, toggleall_);
+ // Apply from the view if it's visible. Otherwise, use the stored values
+ if (lv_.view()->available())
+ view().apply();
+
+ toggleAndShow(lv_.view(), *(font_.get()), toggleall_);
lv_.view()->setState();
lv_.buffer()->markDirty();
setMinibuffer(&lv_, _("Character set"));
}
+LyXFont::FONT_FAMILY ControlCharacter::getFamily() const
+{
+ if (!font_.get())
+ return LyXFont::IGNORE_FAMILY;
+ return font_->family();
+}
+
+
void ControlCharacter::setFamily(LyXFont::FONT_FAMILY val)
{
font_->setFamily(val);
}
+
+LyXFont::FONT_SERIES ControlCharacter::getSeries() const
+{
+ if (!font_.get())
+ return LyXFont::IGNORE_SERIES;
+ return font_->series();
+}
+
+
void ControlCharacter::setSeries(LyXFont::FONT_SERIES val)
{
font_->setSeries(val);
}
+
+LyXFont::FONT_SHAPE ControlCharacter::getShape() const
+{
+ if (!font_.get())
+ return LyXFont::IGNORE_SHAPE;
+ return font_->shape();
+}
+
+
void ControlCharacter::setShape(LyXFont::FONT_SHAPE val)
{
font_->setShape(val);
}
+
+LyXFont::FONT_SIZE ControlCharacter::getSize() const
+{
+ if (!font_.get())
+ return LyXFont::IGNORE_SIZE;
+ return font_->size();
+}
+
+
void ControlCharacter::setSize(LyXFont::FONT_SIZE val)
{
font_->setSize(val);
}
-void ControlCharacter::setBar(ControlCharacter::FONT_STATE val)
+
+character::FONT_STATE ControlCharacter::getBar() const
+{
+ if (!font_.get())
+ return character::IGNORE;
+
+ if (font_->emph() == LyXFont::TOGGLE)
+ return character::EMPH_TOGGLE;
+
+ if (font_->underbar() == LyXFont::TOGGLE)
+ return character::UNDERBAR_TOGGLE;
+
+ if (font_->noun() == LyXFont::TOGGLE)
+ return character::NOUN_TOGGLE;
+
+ if (font_->emph() == LyXFont::IGNORE &&
+ font_->underbar() == LyXFont::IGNORE &&
+ font_->noun() == LyXFont::IGNORE)
+ return character::IGNORE;
+
+ return character::INHERIT;
+}
+
+
+void ControlCharacter::setBar(character::FONT_STATE val)
{
switch (val) {
- case IGNORE:
+ case character::IGNORE:
font_->setEmph(LyXFont::IGNORE);
font_->setUnderbar(LyXFont::IGNORE);
font_->setNoun(LyXFont::IGNORE);
- font_->setLatex(LyXFont::IGNORE);
break;
- case EMPH_TOGGLE:
+ case character::EMPH_TOGGLE:
font_->setEmph(LyXFont::TOGGLE);
break;
- case UNDERBAR_TOGGLE:
+ case character::UNDERBAR_TOGGLE:
font_->setUnderbar(LyXFont::TOGGLE);
break;
- case NOUN_TOGGLE:
+ case character::NOUN_TOGGLE:
font_->setNoun(LyXFont::TOGGLE);
break;
- case LATEX_TOGGLE:
- font_->setLatex(LyXFont::TOGGLE);
- break;
-
- case INHERIT:
+ case character::INHERIT:
font_->setEmph(LyXFont::INHERIT);
font_->setUnderbar(LyXFont::INHERIT);
font_->setNoun(LyXFont::INHERIT);
- font_->setLatex(LyXFont::INHERIT);
break;
}
}
+
+LColor::color ControlCharacter::getColor() const
+{
+ if (!font_.get())
+ return LColor::ignore;
+
+ return font_->color();
+}
+
+
void ControlCharacter::setColor(LColor::color val)
{
switch (val) {
case LColor::inherit:
font_->setColor(val);
break;
-
default:
break;
}
}
-
+
+string ControlCharacter::getLanguage() const
+{
+ if (font_.get() && font_->language())
+ return font_->language()->lang();
+ return _("No change");
+}
+
+
void ControlCharacter::setLanguage(string const & val)
{
if (val == _("No change"))
font_->setLanguage(languages.getLanguage(val));
}
-void ControlCharacter::setToggleAll(bool t)
-{
- toggleall_ = t;
-}
-
-
-vector<ControlCharacter::FamilyPair> const getFamilyData()
-{
- vector<ControlCharacter::FamilyPair> family(5);
-
- ControlCharacter::FamilyPair pr;
- pr.first = _("No change"); pr.second = LyXFont::IGNORE_FAMILY;
- family[0] = pr;
- pr.first = _("Roman"); pr.second = LyXFont::ROMAN_FAMILY;
- family[1] = pr;
- pr.first = _("Sans Serif"); pr.second = LyXFont::SANS_FAMILY;
- family[2] = pr;
- pr.first = _("Typewriter"); pr.second = LyXFont::TYPEWRITER_FAMILY;
- family[3] = pr;
- pr.first = _("Reset"); pr.second = LyXFont::INHERIT_FAMILY;
- family[4] = pr;
-
- return family;
-}
-
-vector<ControlCharacter::SeriesPair> const getSeriesData()
+bool ControlCharacter::getToggleAll() const
{
- vector<ControlCharacter::SeriesPair> series(4);
-
- ControlCharacter::SeriesPair pr;
- pr.first = _("No change"); pr.second = LyXFont::IGNORE_SERIES;
- series[0] = pr;
- pr.first = _("Medium"); pr.second = LyXFont::MEDIUM_SERIES;
- series[1] = pr;
- pr.first = _("Bold"); pr.second = LyXFont::BOLD_SERIES;
- series[2] = pr;
- pr.first = _("Reset"); pr.second = LyXFont::INHERIT_SERIES;
- series[3] = pr;
-
- return series;
+ return toggleall_;
}
-vector<ControlCharacter::ShapePair> const getShapeData()
-{
- vector<ControlCharacter::ShapePair> shape(6);
-
- ControlCharacter::ShapePair pr;
- pr.first = _("No change"); pr.second = LyXFont::IGNORE_SHAPE;
- shape[0] = pr;
- pr.first = _("Upright"); pr.second = LyXFont::UP_SHAPE;
- shape[1] = pr;
- pr.first = _("Italic"); pr.second = LyXFont::ITALIC_SHAPE;
- shape[2] = pr;
- pr.first = _("Slanted"); pr.second = LyXFont::SLANTED_SHAPE;
- shape[3] = pr;
- pr.first = _("Small Caps"); pr.second = LyXFont::SMALLCAPS_SHAPE;
- shape[4] = pr;
- pr.first = _("Reset"); pr.second = LyXFont::INHERIT_SHAPE;
- shape[5] = pr;
-
- return shape;
-}
-
-
-vector<ControlCharacter::SizePair> const getSizeData()
-{
- vector<ControlCharacter::SizePair> size(14);
-
- ControlCharacter::SizePair pr;
- pr.first = _("No change"); pr.second = LyXFont::IGNORE_SIZE;
- size[0] = pr;
- pr.first = _("Tiny"); pr.second = LyXFont::SIZE_TINY;
- size[1] = pr;
- pr.first = _("Smallest"); pr.second = LyXFont::SIZE_SCRIPT;
- size[2] = pr;
- pr.first = _("Smaller"); pr.second = LyXFont::SIZE_FOOTNOTE;
- size[3] = pr;
- pr.first = _("Small"); pr.second = LyXFont::SIZE_SMALL;
- size[4] = pr;
- pr.first = _("Normal"); pr.second = LyXFont::SIZE_NORMAL;
- size[5] = pr;
- pr.first = _("Large"); pr.second = LyXFont::SIZE_LARGE;
- size[6] = pr;
- pr.first = _("Larger"); pr.second = LyXFont::SIZE_LARGER;
- size[7] = pr;
- pr.first = _("Largest"); pr.second = LyXFont::SIZE_LARGEST;
- size[8] = pr;
- pr.first = _("Huge"); pr.second = LyXFont::SIZE_HUGE;
- size[9] = pr;
- pr.first = _("Huger"); pr.second = LyXFont::SIZE_HUGER;
- size[10] = pr;
- pr.first = _("Increase"); pr.second = LyXFont::INCREASE_SIZE;
- size[11] = pr;
- pr.first = _("Decrease"); pr.second = LyXFont::DECREASE_SIZE;
- size[12] = pr;
- pr.first = _("Reset"); pr.second = LyXFont::INHERIT_SIZE;
- size[13] = pr;
-
- return size;
-}
-
-
-vector<ControlCharacter::BarPair> const getBarData()
-{
- vector<ControlCharacter::BarPair> bar(6);
-
- ControlCharacter::BarPair pr;
- pr.first = _("No change"); pr.second = ControlCharacter::IGNORE;
- bar[0] = pr;
- pr.first = _("Emph"); pr.second = ControlCharacter::EMPH_TOGGLE;
- bar[1] = pr;
- pr.first = _("Underbar"); pr.second = ControlCharacter::UNDERBAR_TOGGLE;
- bar[2] = pr;
- pr.first = _("Noun"); pr.second = ControlCharacter::NOUN_TOGGLE;
- bar[3] = pr;
- pr.first = _("LaTeX mode"); pr.second = ControlCharacter::LATEX_TOGGLE;
- bar[4] = pr;
- pr.first = _("Reset"); pr.second = ControlCharacter::INHERIT;
- bar[5] = pr;
-
- return bar;
-}
-
-
-vector<ControlCharacter::ColorPair> const getColorData()
-{
- vector<ControlCharacter::ColorPair> color(11);
-
- ControlCharacter::ColorPair pr;
- pr.first = _("No change"); pr.second = LColor::ignore;
- color[0] = pr;
- pr.first = _("No color"); pr.second = LColor::none;
- color[1] = pr;
- pr.first = _("Black"); pr.second = LColor::black;
- color[2] = pr;
- pr.first = _("White"); pr.second = LColor::white;
- color[3] = pr;
- pr.first = _("Red"); pr.second = LColor::red;
- color[4] = pr;
- pr.first = _("Green"); pr.second = LColor::green;
- color[5] = pr;
- pr.first = _("Blue"); pr.second = LColor::blue;
- color[6] = pr;
- pr.first = _("Cyan"); pr.second = LColor::cyan;
- color[7] = pr;
- pr.first = _("Magenta"); pr.second = LColor::magenta;
- color[8] = pr;
- pr.first = _("Yellow"); pr.second = LColor::yellow;
- color[9] = pr;
- pr.first = _("Reset"); pr.second = LColor::inherit;
- color[10] = pr;
-
- return color;
-}
-
-
-vector<string> const getLanguageData()
+void ControlCharacter::setToggleAll(bool t)
{
- vector<string> langs(languages.size() + 2);
-
- langs[0] = _("No change");
- langs[1] = _("Reset");
-
- vector<string>::size_type i = 1;
- for (Languages::const_iterator cit = languages.begin();
- cit != languages.end(); ++cit) {
- langs[++i] = cit->second.lang();
- }
-
- return langs;
+ toggleall_ = t;
}