#include "GuiBox.h"
+#include "GuiApplication.h"
+#include "ColorCache.h"
+#include "ColorSet.h"
#include "LengthCombo.h"
#include "Length.h"
#include "qt_helpers.h"
#include "insets/InsetBox.h"
#include "support/gettext.h"
-#include "support/foreach.h"
#include "support/lstrings.h"
+#include <QComboBox>
#include <QLineEdit>
#include <QPushButton>
}
+static QList<ColorCode> colors()
+{
+ QList<ColorCode> colors;
+ 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;
+}
+
+
GuiBox::GuiBox(QWidget * parent) : InsetParamsWidget(parent)
{
setupUi(this);
connect(shadowsizeED, SIGNAL(textChanged(QString)), this, SIGNAL(changed()));
connect(shadowsizeUnitsLC, SIGNAL(selectionChanged(lyx::Length::UNIT)),
this, SIGNAL(changed()));
+ connect(backgroundColorCO, SIGNAL(currentIndexChanged(int)),
+ this, SIGNAL(changed()));
heightED->setValidator(unsignedLengthValidator(heightED));
widthED->setValidator(unsignedLengthValidator(widthED));
addCheckedWidget(separationED, separationLA);
addCheckedWidget(shadowsizeED, shadowsizeLA);
+ // the background can be uncolored while the frame cannot
+ color_codes_ = colors();
+ qSort(color_codes_.begin(), color_codes_.end(), ColorSorter);
+ fillComboColor(backgroundColorCO, true);
+ fillComboColor(frameColorCO, false);
+
initDialog();
}
-void GuiBox::on_innerBoxCO_activated(int /* index */)
+void GuiBox::fillComboColor(QComboBox * combo, bool const is_none)
{
- QString itype =
- innerBoxCO->itemData(innerBoxCO->currentIndex()).toString();
+ combo->clear();
+ 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)));
+ QList<ColorCode>::const_iterator cit = color_codes_.begin();
+ 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 = innerBoxCO->itemData(index).toString();
// handle parbox and minipage the same way
bool const ibox = (itype != "none" && itype != "makebox");
if (heightCB->isChecked() && !ibox)
widthCB->setChecked(itype != "none");
pagebreakCB->setChecked(false);
}
+ // assure that the frame color is black for frameless boxes to
+ // provide the color "none"
+ int const b = frameColorCO->findData("black");
+ if (frameless && frameColorCO->currentIndex() != b)
+ frameColorCO->setCurrentIndex(b);
+ changed();
+}
+
+
+void GuiBox::on_frameColorCO_currentIndexChanged(int index)
+{
+ // if there is a non-black frame color the background cannot be uncolored
+ // therefore remove the entry "none" in this case
+ int const n = backgroundColorCO->findData("none");
+ if (index != frameColorCO->findData("black")) {
+ if (n != -1) {
+ if (backgroundColorCO->currentIndex() == n)
+ backgroundColorCO->setCurrentIndex(
+ backgroundColorCO->findData("white"));
+ backgroundColorCO->removeItem(n);
+ }
+ } else {
+ if (n == -1)
+ backgroundColorCO->insertItem(0, toqstr(translateIfPossible((lcolor.getGUIName(Color_none)))),
+ toqstr(lcolor.getLaTeXName(Color_none)));
+ }
changed();
}
ialignCO->setEnabled(ibox);
setSpecial(ibox);
- // halign is only allowed if a width is used
- halignCO->setEnabled(widthCB->isChecked());
+ // halign is only allowed without inner box and if a width is used and if
+ // pagebreak is not used
+ halignCO->setEnabled(!pagebreakCB->isChecked() && widthCB->isChecked()
+ && ((!ibox && type == "Boxed") || inner_type == "makebox"));
// add the entry "Stretch" if the box is \makebox or \framebox and if not already there
if ((inner_type == "makebox" || (type == "Boxed" && inner_type == "none"))
&& halignCO->count() < 4)
shadowsizeUnitsLC->setEnabled(type == "Shadowbox");
lengthToWidgets(shadowsizeED, shadowsizeUnitsLC,
(params.shadowsize).asString(), default_unit);
+ // set color
+ frameColorCO->setCurrentIndex(frameColorCO->findData(toqstr(params.framecolor)));
+ backgroundColorCO->setCurrentIndex(backgroundColorCO->findData(toqstr(params.backgroundcolor)));
}
params.shadowsize = Length(widgetsToLength(shadowsizeED, shadowsizeUnitsLC));
else
params.shadowsize = Length("4pt");
+ if (frameColorCO->isEnabled())
+ params.framecolor =
+ fromqstr(frameColorCO->itemData(frameColorCO->currentIndex()).toString());
+ else
+ params.framecolor = "black";
+ if (backgroundColorCO->isEnabled())
+ params.backgroundcolor =
+ fromqstr(backgroundColorCO->itemData(backgroundColorCO->currentIndex()).toString());
+ else
+ params.backgroundcolor = "none";
return from_ascii(InsetBox::params2string(params));
}
widthED->setEnabled(false);
widthUnitsLC->setEnabled(false);
}
- // halign is only allowed if a width is used
- halignCO->setEnabled(widthCB->isChecked());
+ // halign is only allowed without inner box and if a width is used and if
+ // pagebreak is not used
+ halignCO->setEnabled(!pagebreakCB->isChecked() && widthCB->isChecked()
+ && ((!ibox && outer == "Boxed") || itype == "makebox"));
// add the entry "Stretch" if the box is \makebox or \framebox and if not already there
if ((itype == "makebox" || (outer == "Boxed" && itype == "none"))
&& halignCO->count() < 4)
shadowsizeED->setText("4");
shadowsizeUnitsLC->setCurrentItem(Length::PT);
}
+ // \fboxcolor and \colorbox cannot be used for fancybox boxes
+ frameColorCO->setEnabled(!pagebreakCB->isChecked() && outer == "Boxed");
+ backgroundColorCO->setEnabled(!pagebreakCB->isChecked() && (frameColorCO->isEnabled() || outer == "Frameless"));
}
return InsetParamsWidget::checkWidgets();