]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/controllers/ControlCharacter.C
The reference dialog now disconnects from the inset on Apply. Its behaviour
[lyx.git] / src / frontends / controllers / ControlCharacter.C
index 0c5d73d7dda0b8c20efb2d30a3d7998826687a75..e9514593587fe0112f635e20bb189339b3975b30 100644 (file)
@@ -3,7 +3,7 @@
  * 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) {
@@ -137,13 +210,20 @@ void ControlCharacter::setColor(LColor::color 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"))
@@ -156,176 +236,14 @@ void ControlCharacter::setLanguage(string const & val)
                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;
 }