commit 6780a3040958c937d6441c32f333c5ee55f64e3c
Author: Uwe Stöhr <[email protected]>
Date:   Fri May 15 06:02:41 2015 +0200

    GuiBox.cpp: fix logic
    
    - if pagebreaks are allowed there cannot be defined a width

diff --git a/src/frontends/qt4/GuiBox.cpp b/src/frontends/qt4/GuiBox.cpp
index ccf6cd7..7b28e51 100644
--- a/src/frontends/qt4/GuiBox.cpp
+++ b/src/frontends/qt4/GuiBox.cpp
@@ -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);

Reply via email to