commit af933dde24f1a6e79fe1f19f69cbe0a41f9a95ac
Author: Juergen Spitzmueller <[email protected]>
Date: Sat Feb 22 18:28:33 2025 +0100
A bit more color to the world, part IV
Use the new colors and UI in the Box dialog.
Now all color settings are done.
---
development/FORMAT | 9 ++-
lib/doc/EmbeddedObjects.lyx | 37 +++++++++++-
lib/doc/de/EmbeddedObjects.lyx | 125 +++------------------------------------
lib/lyx2lyx/lyx_2_5.py | 120 +++++++++++++++++++++++++++++++++++--
src/frontends/qt/ColorsCombo.cpp | 5 +-
src/frontends/qt/ColorsCombo.h | 4 ++
src/frontends/qt/GuiBox.cpp | 80 ++++++-------------------
src/frontends/qt/GuiBox.h | 4 +-
src/frontends/qt/ui/BoxUi.ui | 55 +++++++++++------
src/insets/InsetBox.cpp | 41 +++++++++----
src/insets/InsetBox.h | 4 +-
11 files changed, 261 insertions(+), 223 deletions(-)
diff --git a/development/FORMAT b/development/FORMAT
index d0830f8600..4af5d7f1ff 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -8,9 +8,12 @@ changes happened in particular if possible. A good example
would be
-----------------------
2025-02-22 Jürgen Spitzmüller <[email protected]>
- * Format incremented to 633: \fontcolor, \backgroundcolor,
\notefontcolor"
- and \boxbgcolor now take a lyxcolor as a (string) value, no longer
- a color hexname.
+ * Format incremented to 633:
+ 1. \fontcolor, \backgroundcolor, \notefontcolor"
+ and \boxbgcolor now take a lyxcolor as a (string) value, no longer
+ a color hexname.
+ 2. The framecolor and backgroundcolor parameter of InsetBox can
+ take all supported latexcolors and cusom colors as argument.
2025-02-20 Jürgen Spitzmüller <[email protected]>
* Format incremented to 632:
diff --git a/lib/doc/EmbeddedObjects.lyx b/lib/doc/EmbeddedObjects.lyx
index 9c6dcc2e7b..14408a4401 100644
--- a/lib/doc/EmbeddedObjects.lyx
+++ b/lib/doc/EmbeddedObjects.lyx
@@ -38557,7 +38557,9 @@ This is colored text within a colored,
\begin_layout Standard
If you need another color than the predefined ones,
- you can define your own color as described in section
+ you
+\change_deleted -712698321 1740244776
+ can define your own color as described in section
\begin_inset space ~
\end_inset
@@ -38570,10 +38572,25 @@ nolink "false"
\end_inset
.
- To use your own color you must typeset the box by using TeX code:
+
+\change_inserted -712698321 1740244787
+can define your own color in
+\family sans
+Document\SpecialChar menuseparator
+Settings\SpecialChar ldots
+\SpecialChar menuseparator
+Colors\SpecialChar menuseparator
+Custom Colors
+\family default
+ and use that.
+
+\change_deleted -712698321 1740244798
+To use your own color you must typeset the box by using TeX code:
\end_layout
\begin_layout Standard
+
+\change_deleted -712698321 1740244798
Colored boxes without frame are created with the command
\series bold
@@ -38586,6 +38603,8 @@ colorbox
\begin_layout Standard
+\change_deleted -712698321 1740244798
+
\series bold
\backslash
@@ -38593,6 +38612,8 @@ colorbox{color}{box content}
\end_layout
\begin_layout Standard
+
+\change_deleted -712698321 1740244798
The box content can also be a box and colored boxes can also be within other
boxes.
To have e.
\begin_inset space \thinspace{}
@@ -38608,6 +38629,8 @@ a darkgreen background for a word,
\begin_layout Standard
+\change_deleted -712698321 1740244798
+
\series bold
\backslash
@@ -38615,6 +38638,8 @@ colorbox{darkgreen}{
\end_layout
\begin_layout Standard
+
+\change_deleted -712698321 1740244798
before the word in \SpecialChar TeX
Code.
After the word insert a closing brace
@@ -38638,6 +38663,8 @@ This is the result:
\end_layout
\begin_layout Standard
+
+\change_deleted -712698321 1740244798
This is a line where the word
\begin_inset ERT
status collapsed
@@ -38674,6 +38701,8 @@ status collapsed
\end_layout
\begin_layout Standard
+
+\change_deleted -712698321 1740244798
Framed,
colored boxes are created with the command
\series bold
@@ -38687,10 +38716,14 @@ fcolorbox
\begin_layout Standard
+\change_deleted -712698321 1740244798
+
\series bold
\backslash
fcolorbox{frame color}{box color}{box content}
+\change_unchanged
+
\end_layout
\begin_layout Section
diff --git a/lib/doc/de/EmbeddedObjects.lyx b/lib/doc/de/EmbeddedObjects.lyx
index 7fc8973e3a..78e1001036 100644
--- a/lib/doc/de/EmbeddedObjects.lyx
+++ b/lib/doc/de/EmbeddedObjects.lyx
@@ -38720,123 +38720,14 @@ Dies ist farbiger Text in einer farbigen,
\begin_layout Standard
Falls sie andere als die voreingestellten Farben benötigen,
- können Ihre eigenen Farben definieren,
- wie in Abschnitt
-\begin_inset space ~
-\end_inset
-
-
-\begin_inset CommandInset ref
-LatexCommand ref
-reference "abs:Farbige-Tabellen"
-nolink "false"
-
-\end_inset
-
- beschrieben.
- Um selbstdefinierte Farben zu verwenden,
- muss die Box mittels TeX-Code gesetzt werden:
-\end_layout
-
-\begin_layout Standard
-Farbige Boxen ohne Rahmen werden mit dem Befehl
-\series bold
-
-\backslash
-colorbox
-\series default
- erzeugt.
- Er hat folgendes Schema:
-\end_layout
-
-\begin_layout Standard
-
-\series bold
-
-\backslash
-colorbox{Farbe}{Boxinhalt}
-\end_layout
-
-\begin_layout Standard
-Der Boxinhalt kann auch eine Box sein,
- und farbige Boxen können in anderen Boxen sein.
- Um zum Beispiel ein Wort auf einem dunkelgrünen Hintergrund zu drucken,
- fügen sie den \SpecialChar TeX
--Code-Befehl
-\end_layout
-
-\begin_layout Standard
-
-\series bold
-
-\backslash
-colorbox{dunkelgruen}{
-\end_layout
-
-\begin_layout Standard
-vor dem Wort ein.
- Hinter dem Wort fügen Sie
-\series bold
-
-\begin_inset Quotes gld
-\end_inset
-
-}
-\series default
-
-\begin_inset Quotes grd
-\end_inset
-
- als \SpecialChar TeX
--Code ein.
- Hier ist das Ergebnis:
-\end_layout
-
-\begin_layout Standard
-In dieser Zeile hat
-\begin_inset ERT
-status collapsed
-
-\begin_layout Plain Layout
-
-
-\backslash
-colorbox{dunkelgruen}{
-\end_layout
-
-\end_inset
-
-Achtung!
-\begin_inset ERT
-status collapsed
-
-\begin_layout Plain Layout
-
-}
-\end_layout
-
-\end_inset
-
- einen dunkelgrünen Hintergrund.
-\end_layout
-
-\begin_layout Standard
-Farbige Boxen mit Rahmen werden mit dem Befehl
-\series bold
-
-\backslash
-fcolorbox
-\series default
- erzeugt.
- Er hat folgendes Schema:
-\end_layout
-
-\begin_layout Standard
-
-\series bold
-
-\backslash
-fcolorbox{Rahmenfarbe}{Boxfarbe}{Boxinhalt}
+ können Sie in
+\family sans
+Dokument\SpecialChar menuseparator
+Einstellungen\SpecialChar menuseparator
+Farben\SpecialChar menuseparator
+Benutzerdefinierte Farben
+\family default
+ eigene Farben definieren und verwenden.
\end_layout
\begin_layout Section
diff --git a/lib/lyx2lyx/lyx_2_5.py b/lib/lyx2lyx/lyx_2_5.py
index 9b7fa6994e..9919f953a2 100644
--- a/lib/lyx2lyx/lyx_2_5.py
+++ b/lib/lyx2lyx/lyx_2_5.py
@@ -39,7 +39,7 @@ from lyx2lyx_tools import (
# find_re, find_token_backwards, find_token_exact,
# find_tokens,
# get_containing_layout, get_option_value,
-# is_in_inset, set_bool_value
+# is_in_inset
from parser_tools import (
del_token,
find_end_of_inset,
@@ -50,7 +50,8 @@ from parser_tools import (
get_containing_inset,
get_bool_value,
get_quoted_value,
- get_value
+ get_value,
+ set_bool_value
)
####################################################################
@@ -1768,7 +1769,9 @@ def revert_doc_col(document, color, default_value,
xcolor, x11, svg, dvips):
del document.header[i]
return
# check whether it is a color also otherwise used
- color_used = find_token(document.body, "\\color " + value, i) != -1
+ color_used = find_token(document.body, "\\color " + value, i) != -1 \
+ or find_token(document.body, "framecolor \"" + value, i) \
+ or find_token(document.body, "backgroundcolor \"" + value, i)
# check whether it is a known latexcolor
if value in list(xcolor_names):
if color_used == False and value.find(":") != -1:
@@ -1823,6 +1826,115 @@ def revert_doc_colors(document):
options]
)
+
+basic_box_colors = [
+ "default",
+ "none",
+ "black",
+ "white",
+ "blue",
+ "brown",
+ "cyan",
+ "darkgray",
+ "gray",
+ "green",
+ "lightgray",
+ "lime",
+ "magenta",
+ "orange",
+ "olive",
+ "pink",
+ "purple",
+ "red",
+ "teal",
+ "violet",
+ "white",
+ "yellow"
+]
+
+
+def revert_colorbox(document):
+ """Change box color settings to LaTeX code for new colors."""
+
+ i = 0
+ while True:
+ i = find_token(document.body, "\\begin_inset Box", i)
+ if i == -1:
+ return
+
+ j = find_end_of_inset(document.body, i)
+ k = find_token(document.body, "\\begin_layout", i, j)
+ if k == -1:
+ document.warning("Malformed LyX document: no layout in Box inset!")
+ i += 1
+ continue
+
+ # Get colour settings:
+ framecolor = get_quoted_value(document.body, "framecolor", i, k)
+ backcolor = get_quoted_value(document.body, "backgroundcolor", i, k +
1)
+ if not framecolor or not backcolor:
+ document.warning("Malformed LyX document: color options not found
in Box inset!")
+ i += 1
+ continue
+ if framecolor in list(basic_box_colors) and backcolor in
list(basic_box_colors):
+ i += 1
+ continue
+
+ # Set params to default
+ p1 = find_token(document.body, "framecolor", i, j)
+ if p1 != -1:
+ document.body[p1] = "framecolor \"default\""
+ p2 = find_token(document.body, "backgroundcolor", i, j)
+ if p2 != -1:
+ document.body[p2] = "backgroundcolor \"none\""
+
+ if "Box Boxed" not in document.body[i]:
+ i += 1
+ continue
+
+ # framed box, use \fcolorbox
+ # Emulate new colors with LaTeX code
+ einset = find_end_of_inset(document.body, i)
+ if einset == -1:
+ document.warning("Malformed LyX document: Can't find end of box
inset!")
+ i += 1
+ continue
+
+ bothcolors = framecolor + backcolor
+ opts = []
+ if bothcolors.find("X11:") != -1:
+ opts.append("x11names")
+ if bothcolors.find("SVG:") != -1:
+ opts.append("svgnames")
+ if bothcolors.find("DVIPS:") != -1:
+ opts.append("dvipsnames")
+ options = "\\SetKeys[xcolor]{" + ",".join(opts) + "}"
+ for color in list(xcolor_names):
+ if framecolor == color.lower():
+ framecolor = color.split(":")[1]
+ if backcolor == color.lower():
+ backcolor = color.split(":")[1]
+
+ add_to_preamble(document,
["\\@ifundefined{rangeHsb}{\\usepackage{xcolor}}{}", options])
+ # insert the closing brace first (keeps indices 'i' and 'einset' valid)
+ document.body[einset + 1 : einset + 1] = put_cmd_in_ert("}")
+ # now insert the (f)color box command
+ # change the box type (frame added by \fcolorbox)
+ document.body[i] = "\\begin_inset Box Frameless"
+ # ensure an inner box:
+ try:
+ if not set_bool_value(document.body, "has_inner_box", True, i + 3,
i + 4):
+ set_bool_value(document.body, "use_makebox", True, i + 6, i +
7)
+ except ValueError:
+ document.warning(
+ "Malformed LyX document: 'has_inner_box' or "
+ "'use_makebox' option not found in box inset!"
+ )
+ ertinset =
put_cmd_in_ert(f"\\fcolorbox{{{framecolor}}}{{{backcolor}}}{{")
+ document.body[i:i] = ertinset + [""]
+ i += 13
+
+
##
# Conversion hub
#
@@ -1846,7 +1958,7 @@ convert = [
revert = [
- [632, [revert_doc_colors]],
+ [632, [revert_doc_colors, revert_colorbox]],
[631, [revert_textcolor, revert_custom_colors]],
[630, [revert_mathml_version]],
[629, [revert_new_polyglossia_languages, revert_new_babel_languages]],
diff --git a/src/frontends/qt/ColorsCombo.cpp b/src/frontends/qt/ColorsCombo.cpp
index 9086f797c2..2a50440354 100644
--- a/src/frontends/qt/ColorsCombo.cpp
+++ b/src/frontends/qt/ColorsCombo.cpp
@@ -29,7 +29,8 @@ namespace frontend {
ColorsCombo::ColorsCombo(QWidget * parent)
: CategorizedCombo(parent),
- has_ignore_(false), has_inherit_(false)
+ has_ignore_(false), has_inherit_(false),
+ default_value_("none")
{
setLeftMargin(32);
fillComboColor();
@@ -117,7 +118,7 @@ void ColorsCombo::fillComboColor()
addItemSort(QString("ignore"), qt_("No change"),
QString());
if (default_color_.isEmpty())
- addItemSort(QString("none"), qt_("Default"),
+ addItemSort(default_value_, qt_("Default"),
QString());
if (has_inherit_)
addItemSort(QString("inherit"), qt_("(Without)[[color]]"),
diff --git a/src/frontends/qt/ColorsCombo.h b/src/frontends/qt/ColorsCombo.h
index e4345b6329..f801b0ae57 100644
--- a/src/frontends/qt/ColorsCombo.h
+++ b/src/frontends/qt/ColorsCombo.h
@@ -46,6 +46,8 @@ public:
void hasInherit(bool const b) { has_inherit_ = b; }
/// Flag a color as default. This will also omit the "none" entry
void setDefaultColor(std::string const & col) { default_color_ =
toqstr(col); }
+ /// Set the value of the default entry. Preset is "none"
+ void setDefaultValue(std::string const & val) { default_value_ =
toqstr(val); }
private:
///
@@ -60,6 +62,8 @@ private:
bool has_inherit_;
///
QString default_color_;
+ ///
+ QString default_value_;
};
diff --git a/src/frontends/qt/GuiBox.cpp b/src/frontends/qt/GuiBox.cpp
index c7c8dc9027..9ea2244798 100644
--- a/src/frontends/qt/GuiBox.cpp
+++ b/src/frontends/qt/GuiBox.cpp
@@ -15,18 +15,18 @@
#include "GuiBox.h"
-#include "GuiApplication.h"
-#include "ColorCache.h"
-#include "ColorSet.h"
+#include "Buffer.h"
+#include "BufferParams.h"
+
+#include "ColorsCombo.h"
+
#include "LengthCombo.h"
#include "qt_helpers.h"
#include "Validator.h"
#include "insets/InsetBox.h"
-#include "support/gettext.h"
#include "support/Length.h"
-#include "support/lstrings.h"
#include <QComboBox>
#include <QLineEdit>
@@ -72,32 +72,6 @@ static QStringList boxGuiSpecialLengthNames()
}
-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);
@@ -138,6 +112,11 @@ GuiBox::GuiBox(QWidget * parent) :
InsetParamsWidget(parent)
connect(backgroundColorCO, SIGNAL(currentIndexChanged(int)),
this, SIGNAL(changed()));
+ // frame color has "default" as default value, background has "none"
+ frameColorCO->setDefaultValue("default");
+ frameColorCO->setToolTip(qt_("You can also directly type on the list to
filter on color names."));
+ backgroundColorCO->setToolTip(qt_("You can also directly type on the
list to filter on color names."));
+
heightED->setValidator(unsignedLengthValidator(heightED));
widthED->setValidator(unsignedLengthValidator(widthED));
thicknessED->setValidator(unsignedLengthValidator(thicknessED));
@@ -151,38 +130,10 @@ GuiBox::GuiBox(QWidget * parent) :
InsetParamsWidget(parent)
addCheckedWidget(separationED, separationLA);
addCheckedWidget(shadowsizeED, shadowsizeLA);
- // the background can be uncolored while the frame cannot
- color_codes_ = colors();
- sort(color_codes_.begin(), color_codes_.end(), ColorSorter);
- fillComboColor(backgroundColorCO, true);
- fillComboColor(frameColorCO, false);
-
initDialog();
}
-void GuiBox::fillComboColor(QComboBox * combo, bool const is_background)
-{
- combo->clear();
- QPixmap coloritem(32, 32);
- QColor color;
- // 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));
- QString const guiname =
toqstr(translateIfPossible(lcolor.getGUIName(*cit)));
- color = 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();
@@ -274,6 +225,9 @@ void GuiBox::paramsToDialog(Inset const * inset)
{
InsetBox const * box = static_cast<InsetBox const *>(inset);
InsetBoxParams const & params = box->params();
+ custom_colors_cache_ = inset->buffer().masterParams().custom_colors;
+ frameColorCO->setCustomColors(custom_colors_cache_);
+ backgroundColorCO->setCustomColors(custom_colors_cache_);
QString type = toqstr(params.type);
if (type == "Framed") {
pagebreakCB->setChecked(true);
@@ -377,8 +331,8 @@ void GuiBox::paramsToDialog(Inset const * inset)
lengthToWidgets(shadowsizeED, shadowsizeUnitsLC,
(params.shadowsize).asString(), default_unit);
// set color
-
frameColorCO->setCurrentIndex(frameColorCO->findData(toqstr(params.framecolor)));
-
backgroundColorCO->setCurrentIndex(backgroundColorCO->findData(toqstr(params.backgroundcolor)));
+ frameColorCO->set(toqstr(params.framecolor));
+ backgroundColorCO->set(toqstr(params.backgroundcolor));
}
@@ -462,12 +416,12 @@ docstring GuiBox::dialogToParams() const
params.shadowsize = Length("4pt");
if (frameColorCO->isEnabled())
params.framecolor =
-
fromqstr(frameColorCO->itemData(frameColorCO->currentIndex()).toString());
+
fromqstr(frameColorCO->getData(frameColorCO->currentIndex()));
else
params.framecolor = "foreground";
if (backgroundColorCO->isEnabled())
params.backgroundcolor =
-
fromqstr(backgroundColorCO->itemData(backgroundColorCO->currentIndex()).toString());
+
fromqstr(backgroundColorCO->getData(backgroundColorCO->currentIndex()));
else
params.backgroundcolor = "none";
diff --git a/src/frontends/qt/GuiBox.h b/src/frontends/qt/GuiBox.h
index 79a9b91e3b..a63d0cae7e 100644
--- a/src/frontends/qt/GuiBox.h
+++ b/src/frontends/qt/GuiBox.h
@@ -46,8 +46,6 @@ private:
bool checkWidgets(bool readonly) const override;
//@}
- /// Fill the color combos
- void fillComboColor(QComboBox * combo, bool const is_background);
/// add and remove special lengths
void setSpecial(bool ibox);
/// only show valid inner box items
@@ -61,7 +59,7 @@ private:
///
QStringList gui_names_spec_;
///
- QList<ColorCode> color_codes_;
+ std::map<std::string, std::string> custom_colors_cache_;
};
} // namespace frontend
diff --git a/src/frontends/qt/ui/BoxUi.ui b/src/frontends/qt/ui/BoxUi.ui
index 52208b0d75..c70e6e7521 100644
--- a/src/frontends/qt/ui/BoxUi.ui
+++ b/src/frontends/qt/ui/BoxUi.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>579</width>
- <height>381</height>
+ <height>397</height>
</rect>
</property>
<property name="windowTitle">
@@ -434,19 +434,6 @@
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_4">
- <item row="2" column="2">
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </item>
<item row="1" column="0">
<widget class="QLabel" name="backgroundColorLA">
<property name="text">
@@ -457,6 +444,16 @@
</property>
</widget>
</item>
+ <item row="0" column="1">
+ <widget class="lyx::frontend::ColorsCombo" name="frameColorCO">
+ <property name="inputMethodHints">
+ <set>Qt::ImhDigitsOnly|Qt::ImhLatinOnly</set>
+ </property>
+ <property name="maxVisibleItems">
+ <number>20</number>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QLabel" name="frameColorLA">
<property name="text">
@@ -467,11 +464,28 @@
</property>
</widget>
</item>
- <item row="1" column="1" colspan="2">
- <widget class="QComboBox" name="backgroundColorCO"/>
+ <item row="2" column="1">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
</item>
- <item row="0" column="1" colspan="2">
- <widget class="QComboBox" name="frameColorCO"/>
+ <item row="1" column="1">
+ <widget class="lyx::frontend::ColorsCombo" name="backgroundColorCO">
+ <property name="inputMethodHints">
+ <set>Qt::ImhDigitsOnly|Qt::ImhLatinOnly</set>
+ </property>
+ <property name="maxVisibleItems">
+ <number>20</number>
+ </property>
+ </widget>
</item>
</layout>
</widget>
@@ -479,6 +493,11 @@
</layout>
</widget>
<customwidgets>
+ <customwidget>
+ <class>lyx::frontend::ColorsCombo</class>
+ <extends>QComboBox</extends>
+ <header>ColorsCombo.h</header>
+ </customwidget>
<customwidget>
<class>lyx::frontend::LengthCombo</class>
<extends>QComboBox</extends>
diff --git a/src/insets/InsetBox.cpp b/src/insets/InsetBox.cpp
index de217bc9e2..5c11fc2886 100644
--- a/src/insets/InsetBox.cpp
+++ b/src/insets/InsetBox.cpp
@@ -20,7 +20,6 @@
#include "BufferView.h"
#include "ColorSet.h"
#include "Cursor.h"
-#include "DispatchResult.h"
#include "FuncStatus.h"
#include "FuncRequest.h"
#include "LaTeXFeatures.h"
@@ -32,7 +31,6 @@
#include "TextClass.h"
#include "support/debug.h"
-#include "support/docstream.h"
#include "support/FileName.h"
#include "support/gettext.h"
#include "support/Lexer.h"
@@ -165,7 +163,7 @@ void InsetBox::setButtonLabel()
// set the frame color for the inset if the type is Boxed
if (btype == Boxed)
- setFrameColor(lcolor.getFromLaTeXName(getFrameColor(true)));
+ setFrameColor(lcolor.getFromLyXName(getFrameColor(true)));
else
setFrameColor(Color_collapsibleframe);
}
@@ -228,7 +226,7 @@ ColorCode InsetBox::backgroundColor(PainterInfo const &)
const
}
if (params_.backgroundcolor != "none")
- return lcolor.getFromLaTeXName(params_.backgroundcolor);
+ return lcolor.getFromLyXName(getBackgroundColor(true));
return getLayout().bgcolor();
}
@@ -884,21 +882,44 @@ void InsetBox::string2params(string const & in,
InsetBoxParams & params)
}
+void InsetBox::registerLyXColor(string const & value) const
+{
+ if (!lcolor.isKnownLyXName(value)) {
+ if (theLaTeXColors().isLaTeXColor(value)) {
+ LaTeXColor const lc =
theLaTeXColors().getLaTeXColor(value);
+ string const lyxname = lc.name();
+ lcolor.setColor(lyxname, lc.hexname());
+ lcolor.setLaTeXName(lyxname, lc.latex());
+ lcolor.setGUIName(lyxname, to_ascii(lc.guiname()));
+ }
+ }
+}
+
+
string const InsetBox::getFrameColor(bool const gui) const
{
if (params_.framecolor == "default")
return gui ? "foreground" : "black";
- return params_.framecolor;
+
+ registerLyXColor(params_.framecolor);
+ if (!lcolor.isKnownLyXName(params_.framecolor))
+ return gui ? "foreground" : "black";
+ return gui ? params_.framecolor
+ :
lcolor.getLaTeXName(lcolor.getFromLyXName(params_.framecolor));
}
-string const InsetBox::getBackgroundColor() const
+string const InsetBox::getBackgroundColor(bool const gui) const
{
if (params_.backgroundcolor == "none")
- return (buffer().params().backgroundcolor == "none")
- ? "white"
- : "page_backgroundcolor";
- return params_.backgroundcolor;
+ return (gui) ? "white"
+ : "page_backgroundcolor";
+ registerLyXColor(params_.backgroundcolor);
+ if (!lcolor.isKnownLyXName(params_.backgroundcolor))
+ return (gui) ? "white"
+ : "page_backgroundcolor";
+ return gui ? params_.backgroundcolor
+ :
lcolor.getLaTeXName(lcolor.getFromLyXName(params_.backgroundcolor));
}
diff --git a/src/insets/InsetBox.h b/src/insets/InsetBox.h
index a5b71e5cda..5281da8b4c 100644
--- a/src/insets/InsetBox.h
+++ b/src/insets/InsetBox.h
@@ -166,7 +166,9 @@ private:
///
std::string const getFrameColor(bool const gui = false) const;
///
- std::string const getBackgroundColor() const;
+ std::string const getBackgroundColor(bool const gui = false) const;
+ ///
+ void registerLyXColor(std::string const & value) const;
///
bool useFColorBox() const;
--
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs