From bec3f7bc8c3add410014f3ac0315b3189b6b411a Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Sat, 16 May 2015 11:27:13 +0200 Subject: [PATCH] Fix up GuiBox (use proper data/view separation and clean up) --- src/frontends/qt4/GuiBox.cpp | 147 ++++++++++++++++------------------- src/frontends/qt4/GuiBox.h | 6 +- 2 files changed, 72 insertions(+), 81 deletions(-) diff --git a/src/frontends/qt4/GuiBox.cpp b/src/frontends/qt4/GuiBox.cpp index bf52978c60..1d5c00d71c 100644 --- a/src/frontends/qt4/GuiBox.cpp +++ b/src/frontends/qt4/GuiBox.cpp @@ -77,60 +77,33 @@ static QStringList boxGuiSpecialLengthNames() } -static QList colorData() +static QList colors() { - QList colors; - colors << ColorPair(qt_("none"), Color_none); - colors << ColorPair(qt_("black"), Color_black); - colors << ColorPair(qt_("white"), Color_white); - colors << ColorPair(qt_("blue"), Color_blue); - colors << ColorPair(qt_("brown"), Color_brown); - colors << ColorPair(qt_("cyan"), Color_cyan); - colors << ColorPair(qt_("darkgray"), Color_darkgray); - colors << ColorPair(qt_("gray"), Color_gray); - colors << ColorPair(qt_("green"), Color_green); - colors << ColorPair(qt_("lightgray"), Color_lightgray); - colors << ColorPair(qt_("lime"), Color_lime); - colors << ColorPair(qt_("magenta"), Color_magenta); - colors << ColorPair(qt_("olive"), Color_olive); - colors << ColorPair(qt_("orange"), Color_orange); - colors << ColorPair(qt_("pink"), Color_pink); - colors << ColorPair(qt_("purple"), Color_purple); - colors << ColorPair(qt_("red"), Color_red); - colors << ColorPair(qt_("teal"), Color_teal); - colors << ColorPair(qt_("violet"), Color_violet); - colors << ColorPair(qt_("yellow"), Color_yellow); + QList colors; + colors << Color_none; + colors << Color_black; + colors << Color_white; + colors << Color_blue; + colors << Color_brown; + colors << Color_cyan; + colors << Color_darkgray; + colors << Color_gray; + colors << Color_green; + colors << Color_lightgray; + colors << Color_lime; + colors << Color_magenta; + colors << Color_olive; + colors << Color_orange; + colors << Color_pink; + colors << Color_purple; + colors << Color_red; + colors << Color_teal; + colors << Color_violet; + colors << Color_yellow; return colors; } -template -void fillComboColor(QComboBox * combo, QList const & list, bool const is_none) -{ - QPixmap coloritem(32, 32); - QColor color; - // frameColorCO cannot be uncolored - if (is_none) - combo->addItem(qt_("none")); - typename QList::const_iterator cit = list.begin() + 1; - for (; cit != list.end(); ++cit) { - color = QColor(guiApp->colorCache().get(cit->second, false)); - coloritem.fill(color); - combo->addItem(QIcon(coloritem), cit->first); - } -} - - -template -static int findPos2nd(QList

const & vec, QString val) -{ - for (int i = 0; i != vec.size(); ++i) - if (vec[i].first == val) - return i; - return 0; -} - - GuiBox::GuiBox(QWidget * parent) : InsetParamsWidget(parent) { setupUi(this); @@ -182,16 +155,34 @@ GuiBox::GuiBox(QWidget * parent) : InsetParamsWidget(parent) addCheckedWidget(separationED, separationLA); addCheckedWidget(shadowsizeED, shadowsizeLA); - // initialize colors - color = colorData(); // the background can be uncolored while the frame cannot - fillComboColor(frameColorCO, color, false); - fillComboColor(backgroundColorCO, color, true); + color_codes_ = colors(); + fillComboColor(frameColorCO, false); + fillComboColor(backgroundColorCO, true); initDialog(); } +void GuiBox::fillComboColor(QComboBox * combo, bool const is_none) +{ + QPixmap coloritem(32, 32); + QColor color; + // frameColorCO cannot be uncolored + if (is_none) + combo->addItem(toqstr(translateIfPossible(lcolor.getGUIName(Color_none))), + toqstr(lcolor.getLaTeXName(Color_none))); + typename QList::const_iterator cit = color_codes_.begin() + 1; + for (; cit != color_codes_.end(); ++cit) { + QString const latexname = toqstr(lcolor.getLaTeXName(*cit)); + QString const guiname = toqstr(translateIfPossible(lcolor.getGUIName(*cit))); + color = QColor(guiApp->colorCache().get(*cit, false)); + coloritem.fill(color); + combo->addItem(QIcon(coloritem), guiname, latexname); + } +} + + void GuiBox::on_innerBoxCO_activated(int /* index */) { QString itype = @@ -231,25 +222,29 @@ void GuiBox::on_typeCO_activated(int index) } // assure that the frame color is black for frameless boxes to // provide the color "none" - if (frameless && frameColorCO->currentIndex() != 0) - frameColorCO->setCurrentIndex(0); + int const b = frameColorCO->findData("black"); + if (frameless && frameColorCO->currentIndex() != b) + frameColorCO->setCurrentIndex(b); changed(); } -void GuiBox::on_frameColorCO_currentIndexChanged(int /* index */) +void GuiBox::on_frameColorCO_currentIndexChanged(int index) { - // if there is a non-black frame color the background canot be uncolored + // if there is a non-black frame color the background cannot be uncolored // therefore remove the entry "none" in this case - if (frameColorCO->currentIndex() != 0) { - if (backgroundColorCO->count() == color.count()) { - if (backgroundColorCO->currentIndex() == 0) - backgroundColorCO->setCurrentIndex(findPos2nd(color, qt_("white"))); - backgroundColorCO->removeItem(0); + if (index != frameColorCO->findData("black")) { + int const n = backgroundColorCO->findData("none"); + if (n != -1) { + if (backgroundColorCO->currentIndex() == n) + backgroundColorCO->setCurrentIndex( + backgroundColorCO->findData("white")); + backgroundColorCO->removeItem(n); } } else { - if (backgroundColorCO->count() == color.count() - 1) - backgroundColorCO->insertItem(0, qt_("none")); + if (backgroundColorCO->findData("none") == -1) + backgroundColorCO->insertItem(0, toqstr(translateIfPossible((lcolor.getGUIName(Color_none)))), + toqstr(lcolor.getLaTeXName(Color_none))); } changed(); } @@ -407,12 +402,9 @@ void GuiBox::paramsToDialog(Inset const * inset) lengthToWidgets(shadowsizeED, shadowsizeUnitsLC, (params.shadowsize).asString(), default_unit); // set color - frameColorCO->setCurrentIndex(findPos2nd(color, qt_(params.framecolor)) - 1); - // only if the framecolor is black the backgroundcolor has the entry "none" - if (frameColorCO->currentIndex() != 0) - backgroundColorCO->setCurrentIndex(findPos2nd(color, qt_(params.backgroundcolor)) - 1); - else - backgroundColorCO->setCurrentIndex(findPos2nd(color, qt_(params.backgroundcolor))); + // FIXME: Why use LaTeXName here, not LyXName? (spitz) + frameColorCO->setCurrentIndex(frameColorCO->findData(toqstr(params.framecolor))); + backgroundColorCO->setCurrentIndex(backgroundColorCO->findData(toqstr(params.backgroundcolor))); } @@ -494,17 +486,16 @@ docstring GuiBox::dialogToParams() const params.shadowsize = Length(widgetsToLength(shadowsizeED, shadowsizeUnitsLC)); else params.shadowsize = Length("4pt"); + // FIXME: Why use LaTeXName here, not LyXName? (spitz) if (frameColorCO->isEnabled()) - params.framecolor = lcolor.getLaTeXName(color[frameColorCO->currentIndex() + 1].second); + params.framecolor = + fromqstr(frameColorCO->itemData(frameColorCO->currentIndex()).toString()); else params.framecolor = "black"; - if (backgroundColorCO->isEnabled()) { - // only if the framecolor is black the backgroundcolor has the entry "none" - if (frameColorCO->currentIndex() != 0) - params.backgroundcolor = lcolor.getLaTeXName(color[backgroundColorCO->currentIndex() + 1].second); - else - params.backgroundcolor = lcolor.getLaTeXName(color[backgroundColorCO->currentIndex()].second); - } else + if (backgroundColorCO->isEnabled()) + params.backgroundcolor = + fromqstr(backgroundColorCO->itemData(backgroundColorCO->currentIndex()).toString()); + else params.backgroundcolor = "none"; return from_ascii(InsetBox::params2string(params)); diff --git a/src/frontends/qt4/GuiBox.h b/src/frontends/qt4/GuiBox.h index e40bcae4ef..955335037f 100644 --- a/src/frontends/qt4/GuiBox.h +++ b/src/frontends/qt4/GuiBox.h @@ -20,8 +20,6 @@ namespace lyx { namespace frontend { -typedef std::pair ColorPair; - class GuiBox : public InsetParamsWidget, public Ui::BoxUi { Q_OBJECT @@ -48,6 +46,8 @@ private: bool checkWidgets(bool readonly) const; //@} + /// Fill the color combos + void fillComboColor(QComboBox * combo, bool const is_none); /// add and remove special lengths void setSpecial(bool ibox); /// only show valid inner box items @@ -61,7 +61,7 @@ private: /// QStringList gui_names_spec_; /// - QList color; + QList color_codes_; }; } // namespace frontend