commit 087f6bce71dc6d164bccaa49461d17338e7d6c4e
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sat Sep 30 09:56:27 2023 +0200

    Introduce default box frame color (#12921)
    
    This better aligns with dark mode
---
 development/FORMAT          |    4 ++++
 lib/lyx2lyx/lyx_2_4.py      |   21 +++++++++++++++++++--
 src/frontends/qt/GuiBox.cpp |   38 ++++++++------------------------------
 src/frontends/qt/GuiBox.h   |    3 +--
 src/insets/InsetBox.cpp     |   32 ++++++++++++++++++++++++--------
 src/insets/InsetBox.h       |    4 ++++
 src/version.h               |    4 ++--
 7 files changed, 62 insertions(+), 44 deletions(-)

diff --git a/development/FORMAT b/development/FORMAT
index 1711f88..2834dd5 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -7,6 +7,10 @@ changes happened in particular if possible. A good example 
would be
 
 -----------------------
 
+2023-09-29 Jürgen Spitzmüller <sp...@lyx.org> 
+       * Format incremented to 620: Add InsetBox "default" framecolor 
("foreground"
+         rather than "black" in GUI). This aligns better with dark mode.
+
 2023-09-06 Richard Kimberly Heck <rikih...@lyx.org>
        * Format incremented to 619: New document header \use_formatted_ref
          for workarea display purposes only.
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index 4cc5fe5..ca81759 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -5554,6 +5554,21 @@ def revert_formatted_refs(document):
         del document.header[i]
 
 
+def revert_box_fcolor(document):
+    i = 0
+    while True:
+        i = find_token(document.body, '\\begin_inset Box Boxed', i+1)
+        if i == -1:
+            break
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning("Malformed LyX document: Can't find end of framed 
box inset at line %d" % i)
+            continue
+        k = find_token(document.body, 'framecolor "default"', i, j)
+        if k != -1:
+            document.body[k] = 'framecolor "black"'
+
+
 ##
 # Conversion hub
 #
@@ -5634,11 +5649,13 @@ convert = [
            [616, [convert_empty_macro]],
            [617, [convert_cov_options]],
            [618, []],
-           [619, []]
+           [619, []],
+           [620, []]
           ]
 
 
-revert =  [[618, [revert_formatted_refs]],
+revert =  [[619, [revert_box_fcolor]],
+           [618, [revert_formatted_refs]],
            [617, [revert_hequotes]],
            [616, 
[revert_expreambles,revert_exarg2,revert_linggloss2,revert_cov_options]],
            [615, [revert_empty_macro]],
diff --git a/src/frontends/qt/GuiBox.cpp b/src/frontends/qt/GuiBox.cpp
index bda71a6..c7c8dc9 100644
--- a/src/frontends/qt/GuiBox.cpp
+++ b/src/frontends/qt/GuiBox.cpp
@@ -133,6 +133,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(currentIndexChanged(int)),
+               this, SIGNAL(changed()));
        connect(backgroundColorCO, SIGNAL(currentIndexChanged(int)),
                this, SIGNAL(changed()));
 
@@ -159,15 +161,17 @@ GuiBox::GuiBox(QWidget * parent) : 
InsetParamsWidget(parent)
 }
 
 
-void GuiBox::fillComboColor(QComboBox * combo, bool const is_none)
+void GuiBox::fillComboColor(QComboBox * combo, bool const is_background)
 {
        combo->clear();
        QPixmap coloritem(32, 32);
        QColor color;
-       // frameColorCO cannot be uncolored
-       if (is_none)
+       // condition on the two possible types
+       if (is_background)
                
combo->addItem(toqstr(translateIfPossible(lcolor.getGUIName(Color_none))),
                               toqstr(lcolor.getLaTeXName(Color_none)));
+       else
+               combo->addItem(qt_("Default"), toqstr("default"));
        QList<ColorCode>::const_iterator cit = color_codes_.begin();
        for (; cit != color_codes_.end(); ++cit) {
                QString const latexname = toqstr(lcolor.getLaTeXName(*cit));
@@ -215,32 +219,6 @@ void GuiBox::on_typeCO_activated(int index)
                        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();
 }
 
@@ -486,7 +464,7 @@ docstring GuiBox::dialogToParams() const
                params.framecolor =
                        
fromqstr(frameColorCO->itemData(frameColorCO->currentIndex()).toString());
        else
-               params.framecolor = "black";
+               params.framecolor = "foreground";
        if (backgroundColorCO->isEnabled())
                params.backgroundcolor =
                        
fromqstr(backgroundColorCO->itemData(backgroundColorCO->currentIndex()).toString());
diff --git a/src/frontends/qt/GuiBox.h b/src/frontends/qt/GuiBox.h
index 86bfe05..79a9b91 100644
--- a/src/frontends/qt/GuiBox.h
+++ b/src/frontends/qt/GuiBox.h
@@ -30,7 +30,6 @@ public:
 private Q_SLOTS:
        void on_innerBoxCO_activated(int);
        void on_typeCO_activated(int);
-       void on_frameColorCO_currentIndexChanged(int);
        void initDialog();
        void on_widthCB_stateChanged(int state);
        void on_heightCB_stateChanged(int state);
@@ -48,7 +47,7 @@ private:
        //@}
 
        /// Fill the color combos
-       void fillComboColor(QComboBox * combo, bool const is_none);
+       void fillComboColor(QComboBox * combo, bool const is_background);
        /// add and remove special lengths
        void setSpecial(bool ibox);
        /// only show valid inner box items
diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp
index c04bd1e..9ff8cea 100644
--- a/src/insets/InsetBox.cpp
+++ b/src/insets/InsetBox.cpp
@@ -165,7 +165,7 @@ void InsetBox::setButtonLabel()
 
        // set the frame color for the inset if the type is Boxed
        if (btype == Boxed)
-               setFrameColor(lcolor.getFromLaTeXName(params_.framecolor));
+               setFrameColor(lcolor.getFromLaTeXName(getFrameColor(true)));
        else
                setFrameColor(Color_collapsibleframe);
 }
@@ -429,8 +429,8 @@ void InsetBox::latex(otexstream & os, OutputParams const & 
runparams) const
                if (separation_string != defaultSep && thickness_string == 
defaultThick)
                        os << "{\\fboxsep " << from_ascii(separation_string);
                if (!params_.inner_box && !width_string.empty()) {
-                       if (params_.framecolor != "black" || 
params_.backgroundcolor != "none") {
-                               os << maybeBeginL << "\\fcolorbox{" << 
params_.framecolor << "}{" << params_.backgroundcolor << "}{";
+                       if (params_.framecolor != "default" || 
params_.backgroundcolor != "none") {
+                               os << maybeBeginL << "\\fcolorbox{" << 
getFrameColor() << "}{" << getBackgroundColor() << "}{";
                                os << "\\makebox";
                                needEndL = !maybeBeginL.empty();
                        } else
@@ -448,8 +448,8 @@ void InsetBox::latex(otexstream & os, OutputParams const & 
runparams) const
                        if (params_.hor_pos != 'c')
                                os << "[" << params_.hor_pos << "]";
                } else {
-                       if (params_.framecolor != "black" || 
params_.backgroundcolor != "none") {
-                               os << maybeBeginL << "\\fcolorbox{" << 
params_.framecolor << "}{" << params_.backgroundcolor << "}";
+                       if (params_.framecolor != "default" || 
params_.backgroundcolor != "none") {
+                               os << maybeBeginL << "\\fcolorbox{" << 
getFrameColor() << "}{" << getBackgroundColor() << "}";
                                needEndL = !maybeBeginL.empty();
                        } else {
                                if (!cprotect.empty() && 
contains(runparams.active_chars, '^')) {
@@ -616,7 +616,7 @@ void InsetBox::latex(otexstream & os, OutputParams const & 
runparams) const
        case Boxed:
                os << "}";
                if (!params_.inner_box && !width_string.empty()
-                       && (params_.framecolor != "black" || 
params_.backgroundcolor != "none"))
+                       && (params_.framecolor != "default" || 
params_.backgroundcolor != "none"))
                        os << "}";
                if (separation_string != defaultSep || thickness_string != 
defaultThick)
                        os << "}";
@@ -809,7 +809,7 @@ void InsetBox::validate(LaTeXFeatures & features) const
                break;
        case Boxed:
                features.require("calc");
-               if (params_.framecolor != "black" || params_.backgroundcolor != 
"none")
+               if (getFrameColor() != "black" || getBackgroundColor() != 
"white")
                        features.require("xcolor");
                break;
        case ovalbox:
@@ -874,6 +874,22 @@ void InsetBox::string2params(string const & in, 
InsetBoxParams & params)
 }
 
 
+string const InsetBox::getFrameColor(bool const gui) const
+{
+       if (params_.framecolor == "default")
+               return gui ? "foreground" : "black";
+       return params_.framecolor;
+}
+
+
+string const InsetBox::getBackgroundColor() const
+{
+       if (params_.backgroundcolor == "none")
+               return "white";
+       return params_.backgroundcolor;
+}
+
+
 /////////////////////////////////////////////////////////////////////////
 //
 // InsetBoxParams
@@ -895,7 +911,7 @@ InsetBoxParams::InsetBoxParams(string const & label)
          thickness(Length(defaultThick)),
          separation(Length(defaultSep)),
          shadowsize(Length(defaultShadow)),
-         framecolor("black"),
+         framecolor("default"),
          backgroundcolor("none")
 {}
 
diff --git a/src/insets/InsetBox.h b/src/insets/InsetBox.h
index f15896c..97c2a27 100644
--- a/src/insets/InsetBox.h
+++ b/src/insets/InsetBox.h
@@ -163,6 +163,10 @@ protected:
 private:
        /// used by the constructors
        void init();
+       ///
+       std::string const getFrameColor(bool const gui = false) const;
+       ///
+       std::string const getBackgroundColor() const;
 
        ///
        friend class InsetBoxParams;
diff --git a/src/version.h b/src/version.h
index adbd763..3c139d5 100644
--- a/src/version.h
+++ b/src/version.h
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 619 // rikiheck: formatted ref
-#define LYX_FORMAT_TEX2LYX 619
+#define LYX_FORMAT_LYX 620 // spitz: default box frame color
+#define LYX_FORMAT_TEX2LYX 620
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to