]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiDocument.cpp
Cosmetics for r29220.
[lyx.git] / src / frontends / qt4 / GuiDocument.cpp
index 104df745f75112a966d6e140a9d423c94a33f9a7..f55878ebb361cbc01780c15145de78f2c8bf2bbe 100644 (file)
@@ -28,6 +28,7 @@
 #include "BufferParams.h"
 #include "BufferView.h"
 #include "Color.h"
+#include "ColorCache.h"
 #include "Encoding.h"
 #include "FloatPlacement.h"
 #include "Format.h"
@@ -54,6 +55,8 @@
 #include "frontends/alert.h"
 
 #include <QAbstractItemModel>
+#include <QColor>
+#include <QColorDialog>
 #include <QCloseEvent>
 #include <QFontDatabase>
 #include <QScrollBar>
 #endif
 
 
+// a style sheet for buttons
+// this is for example used for the background color setting button
+static inline QString colorButtonStyleSheet(QColor const & bgColor)
+{
+       if (bgColor.isValid()) {
+               QString rc = QLatin1String("background:");
+               rc += bgColor.name();
+               return rc;
+       }
+       return QLatin1String("");
+}
+
+
 using namespace std;
 using namespace lyx::support;
 
@@ -157,6 +173,8 @@ vector<pair<string, QString> > pagestyles;
 
 namespace lyx {
 
+RGBColor set_backgroundcolor;
+
 namespace {
 // used when sorting the textclass list.
 class less_textclass_avail_desc
@@ -661,6 +679,10 @@ GuiDocument::GuiDocument(GuiView & lv)
                this, SLOT(change_adaptor()));
        connect(pageLayoutModule->pagestyleCO, SIGNAL(activated(int)),
                this, SLOT(change_adaptor()));
+       connect(pageLayoutModule->backgroundTB, SIGNAL(clicked()),
+               this, SLOT(changeBackgroundColor()));
+       connect(pageLayoutModule->delbackgroundTB, SIGNAL(clicked()),
+               this, SLOT(deleteBackgroundColor()));
 
        pageLayoutModule->pagestyleCO->addItem(qt_("Default"));
        pageLayoutModule->pagestyleCO->addItem(qt_("empty"));
@@ -1165,6 +1187,31 @@ void GuiDocument::setCustomMargins(bool custom)
        marginsModule->columnsepUnit->setEnabled(enableColSep);
 }
 
+void GuiDocument::changeBackgroundColor()
+{
+       QColor const & newColor = QColorDialog::getColor(
+               rgb2qcolor(set_backgroundcolor), qApp->focusWidget());
+       if (!newColor.isValid())
+               return;
+       // set the button color
+       pageLayoutModule->backgroundTB->setStyleSheet(
+               colorButtonStyleSheet(newColor));
+       // save color
+       set_backgroundcolor = rgbFromHexName(fromqstr(newColor.name()));
+       changed();
+}
+
+
+void GuiDocument::deleteBackgroundColor()
+{
+       // set the button color back to white
+       pageLayoutModule->backgroundTB->setStyleSheet(
+               colorButtonStyleSheet(QColor(Qt::white)));
+       // save white as the set color
+       set_backgroundcolor = rgbFromHexName("#ffffff");
+       changed();
+}
+
 
 void GuiDocument::xetexChanged(bool xetex)
 {
@@ -1174,10 +1221,26 @@ void GuiDocument::xetexChanged(bool xetex)
                !langModule->defaultencodingRB->isChecked());
        langModule->defaultencodingRB->setEnabled(!xetex);
        langModule->otherencodingRB->setEnabled(!xetex);
-       
+
        fontModule->fontsDefaultCO->setEnabled(!xetex);
-       if (xetex)
-               fontModule->fontScCB->setEnabled(false);
+       fontModule->fontsDefaultLA->setEnabled(!xetex);
+       fontModule->cjkFontLE->setEnabled(!xetex);
+       fontModule->cjkFontLA->setEnabled(!xetex);
+       string font;
+       if (!xetex)
+               font = tex_fonts_sans[fontModule->fontsSansCO->currentIndex()];
+       bool scaleable = providesScale(font);
+       fontModule->scaleSansSB->setEnabled(scaleable);
+       fontModule->scaleSansLA->setEnabled(scaleable);
+       if (!xetex)
+               font = tex_fonts_monospaced[fontModule->fontsTypewriterCO->currentIndex()];
+       scaleable = providesScale(font);
+       fontModule->scaleTypewriterSB->setEnabled(scaleable);
+       fontModule->scaleTypewriterLA->setEnabled(scaleable);
+       if (!xetex)
+               font = tex_fonts_roman[fontModule->fontsRomanCO->currentIndex()];
+       fontModule->fontScCB->setEnabled(providesSC(font));
+       fontModule->fontOsfCB->setEnabled(providesOSF(font));
 }
 
 
@@ -1244,10 +1307,8 @@ void GuiDocument::updateFontlist()
 
 void GuiDocument::romanChanged(int item)
 {
-       if (outputModule->xetexCB->isChecked()) {
-               fontModule->fontScCB->setEnabled(false);
+       if (outputModule->xetexCB->isChecked())
                return;
-       }
        string const font = tex_fonts_roman[item];
        fontModule->fontScCB->setEnabled(providesSC(font));
        fontModule->fontOsfCB->setEnabled(providesOSF(font));
@@ -1256,10 +1317,8 @@ void GuiDocument::romanChanged(int item)
 
 void GuiDocument::sansChanged(int item)
 {
-       if (outputModule->xetexCB->isChecked()) {
-               fontModule->fontScCB->setEnabled(false);
+       if (outputModule->xetexCB->isChecked())
                return;
-       }
        string const font = tex_fonts_sans[item];
        bool scaleable = providesScale(font);
        fontModule->scaleSansSB->setEnabled(scaleable);
@@ -1269,10 +1328,8 @@ void GuiDocument::sansChanged(int item)
 
 void GuiDocument::ttChanged(int item)
 {
-       if (outputModule->xetexCB->isChecked()) {
-               fontModule->fontScCB->setEnabled(false);
+       if (outputModule->xetexCB->isChecked())
                return;
-       }
        string const font = tex_fonts_monospaced[item];
        bool scaleable = providesScale(font);
        fontModule->scaleTypewriterSB->setEnabled(scaleable);
@@ -1709,7 +1766,7 @@ void GuiDocument::applyView()
 
        QString const lang = langModule->languageCO->itemData(
                langModule->languageCO->currentIndex()).toString();
-       bp_.language = lyx::languages.getLanguage(fromqstr(lang));
+       bp_.language = languages.getLanguage(fromqstr(lang));
 
        // numbering
        if (bp_.documentClass().hasTocLevels()) {
@@ -1918,6 +1975,8 @@ void GuiDocument::applyView()
        else
                bp_.orientation = ORIENTATION_PORTRAIT;
 
+       bp_.backgroundcolor = set_backgroundcolor;
+
        // margins
        bp_.use_geometry = !marginsModule->marginCB->isChecked()
                || geom_papersize;
@@ -2257,10 +2316,12 @@ void GuiDocument::paramsToDialog()
        pageLayoutModule->facingPagesCB->setChecked(
                bp_.sides == TwoSides);
 
+       pageLayoutModule->backgroundTB->setStyleSheet(
+               colorButtonStyleSheet(rgb2qcolor(bp_.backgroundcolor)));
+       set_backgroundcolor = bp_.backgroundcolor;
 
        lengthToWidgets(pageLayoutModule->paperwidthLE,
                pageLayoutModule->paperwidthUnitCO, bp_.paperwidth, defaultUnit);
-
        lengthToWidgets(pageLayoutModule->paperheightLE,
                pageLayoutModule->paperheightUnitCO, bp_.paperheight, defaultUnit);
 
@@ -2605,6 +2666,10 @@ bool GuiDocument::isFontAvailable(string const & font) const
 
 bool GuiDocument::providesOSF(string const & font) const
 {
+       if (outputModule->xetexCB->isChecked())
+               // FIXME: we should check if the fonts really
+               // have OSF support. But how?
+               return true;
        if (font == "cmr")
                return isFontAvailable("eco");
        if (font == "palatino")
@@ -2615,6 +2680,8 @@ bool GuiDocument::providesOSF(string const & font) const
 
 bool GuiDocument::providesSC(string const & font) const
 {
+       if (outputModule->xetexCB->isChecked())
+               return false;
        if (font == "palatino")
                return isFontAvailable("mathpazo");
        if (font == "utopia")
@@ -2625,6 +2692,8 @@ bool GuiDocument::providesSC(string const & font) const
 
 bool GuiDocument::providesScale(string const & font) const
 {
+       if (outputModule->xetexCB->isChecked())
+               return true;
        return font == "helvet" || font == "luximono"
                || font == "berasans"  || font == "beramono";
 }