]> git.lyx.org Git - features.git/commitdiff
GuiBox.cpp: fix logic
authorUwe Stöhr <uwestoehr@lyx.org>
Fri, 15 May 2015 04:02:41 +0000 (06:02 +0200)
committerUwe Stöhr <uwestoehr@lyx.org>
Fri, 15 May 2015 04:02:41 +0000 (06:02 +0200)
- if pagebreaks are allowed there cannot be defined a width

src/frontends/qt4/GuiBox.cpp

index ccf6cd76a742da0f141290f1ca578602d8ee1a76..7b28e518c6ca155ef5a10e6582b732b6fc53689a 100644 (file)
@@ -15,6 +15,8 @@
 
 #include "GuiBox.h"
 
+#include "GuiApplication.h"
+#include "ColorCache.h"
 #include "LengthCombo.h"
 #include "Length.h"
 #include "qt_helpers.h"
@@ -26,6 +28,7 @@
 #include "support/foreach.h"
 #include "support/lstrings.h"
 
+#include <QComboBox>
 #include <QLineEdit>
 #include <QPushButton>
 
@@ -73,6 +76,60 @@ static QStringList boxGuiSpecialLengthNames()
 }
 
 
+static QList<ColorPair> colorData()
+{
+       QList<ColorPair> 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);
+       return colors;
+}
+
+
+template<typename T>
+void fillComboColor(QComboBox * combo, QList<T> const & list, bool const is_none)
+{
+       QPixmap coloritem(32, 32);
+       QColor color;
+       // frameColorCO cannot be uncolored
+       if (is_none)
+               combo->addItem("none");
+       typename QList<T>::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<class P>
+static int findPos2nd(QList<P> 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);
@@ -108,6 +165,8 @@ GuiBox::GuiBox(QWidget * parent) : InsetParamsWidget(parent)
        connect(shadowsizeED, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
        connect(shadowsizeUnitsLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
                this, SIGNAL(changed()));
+       connect(frameColorCO, SIGNAL(highlighted(QString)), this, SIGNAL(changed()));
+       connect(backgroundColorCO, SIGNAL(highlighted(QString)), this, SIGNAL(changed()));
 
        heightED->setValidator(unsignedLengthValidator(heightED));
        widthED->setValidator(unsignedLengthValidator(widthED));
@@ -122,6 +181,12 @@ 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);
+
        initDialog();
 }
 
@@ -185,6 +250,9 @@ void GuiBox::initDialog()
        // LaTeX's default for \shadowsize is 4 pt
        shadowsizeED->setText("4");
        shadowsizeUnitsLC->setCurrentItem(Length::PT);
+       // the default color is black and none
+       frameColorCO->setCurrentIndex(findPos2nd(color, qt_("black")) - 1);
+       backgroundColorCO->setCurrentIndex(findPos2nd(color, qt_("none")));
 }
 
 
@@ -318,6 +386,9 @@ void GuiBox::paramsToDialog(Inset const * inset)
        shadowsizeUnitsLC->setEnabled(type == "Shadowbox");
        lengthToWidgets(shadowsizeED, shadowsizeUnitsLC,
                (params.shadowsize).asString(), default_unit);
+       // set color
+       frameColorCO->setCurrentIndex(findPos2nd(color, qt_(params.framecolor)) - 1);
+       backgroundColorCO->setCurrentIndex(findPos2nd(color, qt_(params.backgroundcolor)));
 }
 
 
@@ -443,7 +514,7 @@ bool GuiBox::checkWidgets(bool readonly) const
                // except for Frameless and Boxed, the width cannot be specified if
                // there is no inner box
                bool const width_enabled =
-                       ibox || outer == "Frameless" || outer == "Boxed";
+                       ibox || outer == "Frameless" || (outer == "Boxed" && !pagebreakCB->isChecked());
                // enable if width_enabled
                widthED->setEnabled(width_enabled);
                widthUnitsLC->setEnabled(width_enabled);