Add new pref use_system_colors (defaults to true).

What is missing is some feedback on what colors are 
set from the system (they should be disabled in the
color list).


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@35096 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2010-08-08 23:11:02 +00:00
parent 088059724d
commit 17729b9346
7 changed files with 101 additions and 41 deletions

View File

@ -199,6 +199,7 @@ LexerKeyword lyxrcTags[] = {
{ "\\use_pixmap_cache", LyXRC::RC_USE_PIXMAP_CACHE },
// compatibility with versions older than 1.4.0 only
{ "\\use_pspell", LyXRC::RC_USE_SPELL_LIB },
{ "\\use_system_colors", LyXRC::RC_USE_SYSTEM_COLORS },
// compatibility with versions older than 1.4.0 only
{ "\\use_tempdir", LyXRC::RC_USETEMPDIR },
{ "\\use_tooltip", LyXRC::RC_USE_TOOLTIP },
@ -330,6 +331,7 @@ void LyXRC::setDefaults()
preview_hashed_labels = false;
preview_scale_factor = 1.0;
use_converter_cache = true;
use_system_colors = true;
use_tooltip = true;
use_pixmap_cache = false;
converter_cache_maxage = 6 * 30 * 24 * 3600; // 6 months
@ -914,6 +916,9 @@ int LyXRC::read(Lexer & lexrc)
case RC_ACCEPT_COMPOUND:
lexrc >> spellchecker_accept_compound;
break;
case RC_USE_SYSTEM_COLORS:
lexrc >> use_system_colors;
break;
case RC_USE_TOOLTIP:
lexrc >> use_tooltip;
break;
@ -2382,6 +2387,15 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
// obsoleted in 2.0
if (tag != RC_LAST)
break;
case RC_USE_SYSTEM_COLORS:
if (ignore_system_lyxrc ||
use_system_colors != system_lyxrc.use_system_colors) {
os << "\\use_system_colors "
<< convert<string>(use_system_colors)
<< '\n';
}
if (tag != RC_LAST)
break;
case RC_USE_TOOLTIP:
if (ignore_system_lyxrc ||
use_tooltip != system_lyxrc.use_tooltip) {
@ -2932,6 +2946,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_USE_ESC_CHARS:
case LyXRC::RC_USE_INP_ENC:
case LyXRC::RC_USE_PERS_DICT:
case LyXRC::RC_USE_SYSTEM_COLORS:
case LyXRC::RC_USE_TOOLTIP:
case LyXRC::RC_USE_PIXMAP_CACHE:
case LyXRC::RC_USE_SPELL_LIB:
@ -3382,6 +3397,10 @@ string const LyXRC::getDescription(LyXRCTags tag)
case RC_USETEMPDIR:
break;
case RC_USE_TOOLTIP:
str = _("Enable use the system colors for some things like main window background and selection.");
break;
case RC_USE_TOOLTIP:
str = _("Enable the automatic appearance of tool tips in the work area.");
break;

View File

@ -182,6 +182,7 @@ public:
RC_USE_ESC_CHARS,
RC_USE_INP_ENC,
RC_USE_PERS_DICT,
RC_USE_SYSTEM_COLORS,
RC_USE_TOOLTIP,
RC_USE_PIXMAP_CACHE,
RC_USE_SPELL_LIB,
@ -351,6 +352,8 @@ public:
bool paragraph_markers;
/// Use tooltips?
bool use_tooltip;
/// Use the colors from current system theme?
bool use_system_colors;
/// Use pixmap cache?
bool use_pixmap_cache;
/// Spellchecker engine: aspell, hunspell, etc

View File

@ -10,15 +10,56 @@
#include <config.h>
#include "LyXRC.h"
#include "ColorCache.h"
#include "ColorSet.h"
namespace lyx {
void ColorCache::setColor(int col, QPalette::ColorRole cr)
{
lcolors_[col] = pal_.brush(QPalette::Active, cr).color();
}
void ColorCache::init()
{
for (int col = 0; col <= Color_ignore; ++col)
lcolors_[col] = QColor(lcolor.getX11Name(ColorCode(col)).c_str());
if (lyxrc.use_system_colors) {
for (int col = 0; col <= Color_ignore; ++col) {
switch (ColorCode(col)) {
case Color_background:
case Color_commentbg:
case Color_greyedoutbg:
case Color_mathbg:
case Color_graphicsbg:
case Color_mathmacrobg:
case Color_mathcorners:
setColor(col, QPalette::Base);
break;
case Color_foreground:
case Color_cursor:
case Color_preview:
case Color_tabularline:
case Color_previewframe:
setColor(col, QPalette::Text);
break;
case Color_selection:
setColor(col, QPalette::Highlight);
break;
case Color_selectiontext:
setColor(col, QPalette::HighlightedText);
break;
default:
lcolors_[col] = QColor(lcolor.getX11Name(ColorCode(col)).c_str());
}
}
} else {
for (int col = 0; col <= Color_ignore; ++col)
lcolors_[col] = QColor(lcolor.getX11Name(ColorCode(col)).c_str());
}
initialized_ = true;
}

View File

@ -15,6 +15,7 @@
#include "Color.h"
#include <QColor>
#include <QPalette>
namespace lyx {
@ -26,11 +27,15 @@ struct RGBColor;
class ColorCache
{
public:
///
ColorCache() : initialized_(false) {}
/// get the given color
QColor get(Color color) const;
/// change the undelying palette
void setPalette(QPalette const pal) { pal_ = pal; initialized_ = false; }
/// clear all colors
void clear() { initialized_ = false; }
@ -38,9 +43,13 @@ private:
///
void init();
///
void setColor(int col, QPalette::ColorRole cr);
///
QColor lcolors_[Color_ignore + 1];
///
bool initialized_;
///
QPalette pal_;
};
///

View File

@ -162,7 +162,11 @@ frontend::Application * createApplication(int & argc, char * argv[])
}
}
#endif
return new frontend::GuiApplication(argc, argv);
frontend::GuiApplication * guiApp = new frontend::GuiApplication(argc, argv);
// I'd rather do that in the constructor, but I do not think that
// the palette is accessible there.
guiApp->colorCache().setPalette(guiApp->palette());
return guiApp;
}
namespace frontend {
@ -759,13 +763,6 @@ GuiApplication::~GuiApplication()
}
namespace {
void setColor(ColorCode code, QPalette const & pal, QPalette::ColorRole cr)
{
lcolor.setColor(code, fromqstr(pal.brush(QPalette::Active, cr).color().name()));
}
}
GuiApplication::GuiApplication(int & argc, char ** argv)
: QApplication(argc, argv), current_view_(0),
d(new GuiApplication::Private)
@ -827,24 +824,6 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
if (lyxrc.typewriter_font_name.empty())
lyxrc.typewriter_font_name = fromqstr(typewriterFontName());
// initialize colors
setColor(Color_background, palette(), QPalette::Base);
setColor(Color_commentbg, palette(), QPalette::Base);
setColor(Color_greyedoutbg, palette(), QPalette::Base);
setColor(Color_mathbg, palette(), QPalette::Base);
setColor(Color_graphicsbg, palette(), QPalette::Base);
setColor(Color_mathmacrobg, palette(), QPalette::Base);
setColor(Color_mathcorners, palette(), QPalette::Base);
setColor(Color_foreground, palette(), QPalette::Text);
setColor(Color_cursor, palette(), QPalette::Text);
setColor(Color_preview, palette(), QPalette::Text);
setColor(Color_tabularline, palette(), QPalette::Text);
setColor(Color_previewframe, palette(), QPalette::Text);
setColor(Color_selection, palette(), QPalette::Highlight);
setColor(Color_selectiontext, palette(), QPalette::HighlightedText);
d->general_timer_.setInterval(500);
connect(&d->general_timer_, SIGNAL(timeout()),
this, SLOT(handleRegularEvents()));

View File

@ -1088,18 +1088,26 @@ PrefColors::PrefColors(GuiPreferences * form)
this, SLOT(changeLyxObjectsSelection()));
connect(lyxObjectsLW, SIGNAL(itemActivated(QListWidgetItem*)),
this, SLOT(changeColor()));
connect(syscolorsCB, SIGNAL(toggled(bool)),
this, SIGNAL(changed()));
}
void PrefColors::apply(LyXRC & /*rc*/) const
void PrefColors::apply(LyXRC & rc) const
{
LyXRC oldrc = rc;
for (unsigned int i = 0; i < lcolors_.size(); ++i)
if (curcolors_[i] != newcolors_[i])
form_->setColor(lcolors_[i], newcolors_[i]);
rc.use_system_colors = syscolorsCB->isChecked();
if (oldrc.use_system_colors != rc.use_system_colors)
guiApp->colorCache().clear();
}
void PrefColors::update(LyXRC const & /*rc*/)
void PrefColors::update(LyXRC const & rc)
{
for (unsigned int i = 0; i < lcolors_.size(); ++i) {
QColor color = QColor(guiApp->colorCache().get(lcolors_[i]));
@ -1108,6 +1116,7 @@ void PrefColors::update(LyXRC const & /*rc*/)
lyxObjectsLW->item(i)->setIcon(QIcon(coloritem));
newcolors_[i] = curcolors_[i] = color.name();
}
syscolorsCB->setChecked(rc.use_system_colors);
changeLyxObjectsSelection();
}
@ -3081,6 +3090,7 @@ void GuiPreferences::applyView()
apply(rc());
}
bool GuiPreferences::initialiseParams(string const &)
{
rc_ = lyxrc;

View File

@ -5,26 +5,18 @@
<rect>
<x>0</x>
<y>0</y>
<width>199</width>
<height>226</height>
<width>231</width>
<height>254</height>
</rect>
</property>
<property name="windowTitle" >
<string/>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item rowspan="2" row="0" column="0" >
<widget class="QListWidget" name="lyxObjectsLW" >
<property name="sizePolicy" >
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>7</vsizetype>
<sizepolicy vsizetype="Expanding" hsizetype="Preferred" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@ -64,6 +56,13 @@
</property>
</spacer>
</item>
<item row="2" column="0" colspan="2" >
<widget class="QCheckBox" name="syscolorsCB" >
<property name="text" >
<string>Use system colors</string>
</property>
</widget>
</item>
</layout>
</widget>
<includes>