diff options
| author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 | 
|---|---|---|
| committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 | 
| commit | 4aed2c8219774f5d797760606b8489a92ddc5163 (patch) | |
| tree | 3f8c130f7d269626bf6a9447407ef6c35954426a /kcontrol/css/kcmcss.cpp | |
| download | tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.tar.gz tdebase-4aed2c8219774f5d797760606b8489a92ddc5163.zip | |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdebase@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kcontrol/css/kcmcss.cpp')
| -rw-r--r-- | kcontrol/css/kcmcss.cpp | 385 | 
1 files changed, 385 insertions, 0 deletions
| diff --git a/kcontrol/css/kcmcss.cpp b/kcontrol/css/kcmcss.cpp new file mode 100644 index 000000000..bd72a1375 --- /dev/null +++ b/kcontrol/css/kcmcss.cpp @@ -0,0 +1,385 @@ + +#include <qcheckbox.h> +#include <qcombobox.h> +#include <qlayout.h> +#include <qradiobutton.h> +#include <qtextbrowser.h> + +#include <kapplication.h> +#include <kcolorbutton.h> +#include <kconfig.h> +#include <kdialogbase.h> +#include <kfontdialog.h> +#include <kgenericfactory.h> +#include <kglobalsettings.h> +#include <kstandarddirs.h> +#include <kurlrequester.h> + +#include "cssconfig.h" +#include "csscustom.h" +#include "template.h" +#include "preview.h" + +#include "kcmcss.h" + +typedef KGenericFactory<CSSConfig, QWidget> CSSFactory; +K_EXPORT_COMPONENT_FACTORY( kcm_css, CSSFactory("kcmcss") ) + +CSSConfig::CSSConfig(QWidget *parent, const char *name, const QStringList &) +  : KCModule(CSSFactory::instance(), parent, name) +{ +  customDialogBase = new KDialogBase(this, "customCSSDialog", true, QString::null,  +        KDialogBase::Close, KDialogBase::Close, true ); +  customDialog = new CSSCustomDialog(customDialogBase); +  customDialogBase->setMainWidget(customDialog); +  configDialog = new CSSConfigDialog(this); + +  setQuickHelp( i18n("<h1>Konqueror Stylesheets</h1> This module allows you to apply your own color" +              " and font settings to Konqueror by using" +              " stylesheets (CSS). You can either specify" +              " options or apply your own self-written" +              " stylesheet by pointing to its location.<br>" +              " Note that these settings will always have" +              " precedence before all other settings made" +              " by the site author. This can be useful to" +              " visually impaired people or for web pages" +              " that are unreadable due to bad design.")); + + +  QStringList fonts; +  KFontChooser::getFontList(fonts, 0); +  customDialog->fontFamily->insertStringList(fonts); + +  connect(configDialog->useDefault, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(configDialog->useAccess, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(configDialog->useUser, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(configDialog->urlRequester, SIGNAL(textChanged(const QString&)), +	  SLOT(changed())); +  connect(configDialog->customize, SIGNAL(clicked()), +          SLOT(slotCustomize())); +  connect(customDialog->basefontsize, SIGNAL(highlighted(int)), +	  SLOT(changed())); +  connect(customDialog->basefontsize, SIGNAL(textChanged(const QString&)), +	  SLOT(changed())); +  connect(customDialog->dontScale, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->blackOnWhite, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->whiteOnBlack, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->customColor, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->foregroundColor, SIGNAL(changed(const QColor &)), +	  SLOT(changed())); +  connect(customDialog->backgroundColor, SIGNAL(changed(const QColor &)), +	  SLOT(changed())); +  connect(customDialog->fontFamily, SIGNAL(highlighted(int)), +	  SLOT(changed())); +  connect(customDialog->fontFamily, SIGNAL(textChanged(const QString&)), +	  SLOT(changed())); +  connect(customDialog->sameFamily, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->preview, SIGNAL(clicked()), +          SLOT(slotPreview())); +  connect(customDialog->sameColor, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->hideImages, SIGNAL(clicked()), +	  SLOT(changed())); +  connect(customDialog->hideBackground, SIGNAL(clicked()), +	  SLOT(changed())); + +  QVBoxLayout *vbox = new QVBoxLayout(this, 0, 0); +  vbox->addWidget(configDialog); + +  load(); +} + +void CSSConfig::load() +{ +   load( false ); +} + +void CSSConfig::load( bool useDefaults ) +{ +  KConfig *c = new KConfig("kcmcssrc", false, false); +  c->setReadDefaults( useDefaults ); + +  c->setGroup("Stylesheet"); +  QString u = c->readEntry("Use", "default"); +  configDialog->useDefault->setChecked(u == "default"); +  configDialog->useUser->setChecked(u == "user"); +  configDialog->useAccess->setChecked(u == "access"); +  configDialog->urlRequester->setURL(c->readEntry("SheetName")); + +  c->setGroup("Font"); +  customDialog->basefontsize->setEditText(QString::number(c->readNumEntry("BaseSize", 12))); +  customDialog->dontScale->setChecked(c->readBoolEntry("DontScale", false)); + +  QString fname = c->readEntry("Family", "Arial"); +  for (int i=0; i < customDialog->fontFamily->count(); ++i) +    if (customDialog->fontFamily->text(i) == fname) +      { +	customDialog->fontFamily->setCurrentItem(i); +	break; +      } + +  customDialog->sameFamily->setChecked(c->readBoolEntry("SameFamily", false)); + +  c->setGroup("Colors"); +  QString m = c->readEntry("Mode", "black-on-white"); +  customDialog->blackOnWhite->setChecked(m == "black-on-white"); +  customDialog->whiteOnBlack->setChecked(m == "white-on-black"); +  customDialog->customColor->setChecked(m == "custom"); +  customDialog->backgroundColor->setColor(c->readColorEntry("BackColor", &Qt::white)); +  customDialog->foregroundColor->setColor(c->readColorEntry("ForeColor", &Qt::black)); +  customDialog->sameColor->setChecked(c->readBoolEntry("SameColor", false)); + +  // Images +  c->setGroup("Images"); +  customDialog->hideImages->setChecked(c->readBoolEntry("Hide", false)); +  customDialog->hideBackground->setChecked(c->readBoolEntry("HideBackground", true)); + +  delete c; + +  emit changed( useDefaults ); +} + + +void CSSConfig::save() +{ +  // write to config file +  KConfig *c = new KConfig("kcmcssrc", false, false); + +  c->setGroup("Stylesheet"); +  if (configDialog->useDefault->isChecked()) +    c->writeEntry("Use", "default"); +  if (configDialog->useUser->isChecked()) +    c->writeEntry("Use", "user"); +  if (configDialog->useAccess->isChecked()) +    c->writeEntry("Use", "access"); +  c->writeEntry("SheetName", configDialog->urlRequester->url()); + +  c->setGroup("Font"); +  c->writeEntry("BaseSize", customDialog->basefontsize->currentText()); +  c->writeEntry("DontScale", customDialog->dontScale->isChecked()); +  c->writeEntry("SameFamily", customDialog->sameFamily->isChecked()); +  c->writeEntry("Family", customDialog->fontFamily->currentText()); + +  c->setGroup("Colors"); +  if (customDialog->blackOnWhite->isChecked()) +    c->writeEntry("Mode", "black-on-white"); +  if (customDialog->whiteOnBlack->isChecked()) +    c->writeEntry("Mode", "white-on-black"); +  if (customDialog->customColor->isChecked()) +    c->writeEntry("Mode", "custom"); +  c->writeEntry("BackColor", customDialog->backgroundColor->color()); +  c->writeEntry("ForeColor", customDialog->foregroundColor->color()); +  c->writeEntry("SameColor", customDialog->sameColor->isChecked()); + +  c->setGroup("Images"); +  c->writeEntry("Hide", customDialog->hideImages->isChecked()); +  c->writeEntry("HideBackground", customDialog->hideBackground->isChecked()); + +  c->sync(); +  delete c; + +  // generate CSS template +  QString templ = locate("data", "kcmcss/template.css"); +  QString dest; +  if (!templ.isEmpty()) +    { +      CSSTemplate css(templ); + +      dest = kapp->dirs()->saveLocation("data", "kcmcss"); +      dest += "/override.css"; + +      css.expand(dest, cssDict()); +    } + +  // make konqueror use the right stylesheet +  c = new KConfig("konquerorrc", false, false); + +  c->setGroup("HTML Settings"); +  c->writeEntry("UserStyleSheetEnabled", !configDialog->useDefault->isChecked()); + +  if (configDialog->useUser->isChecked()) +    c->writeEntry("UserStyleSheet", configDialog->urlRequester->url()); +  if (configDialog->useAccess->isChecked()) +    c->writeEntry("UserStyleSheet", dest); + +  c->sync(); +  delete c; +  emit changed(false); +} + + +void CSSConfig::defaults() +{ +   load( true ); +} + + +QString px(int i, double scale) +{ +  QString px; +  px.setNum(static_cast<int>(i * scale)); +  px += "px"; +  return px; +} + + +QMap<QString,QString> CSSConfig::cssDict() +{ +  QMap<QString,QString> dict; + +  // Fontsizes ------------------------------------------------------ + +  int bfs = customDialog->basefontsize->currentText().toInt(); +  dict.insert("fontsize-base", px(bfs, 1.0)); + +  if (customDialog->dontScale->isChecked()) +    { +      dict.insert("fontsize-small-1", px(bfs, 1.0)); +      dict.insert("fontsize-large-1", px(bfs, 1.0)); +      dict.insert("fontsize-large-2", px(bfs, 1.0)); +      dict.insert("fontsize-large-3", px(bfs, 1.0)); +      dict.insert("fontsize-large-4", px(bfs, 1.0)); +      dict.insert("fontsize-large-5", px(bfs, 1.0)); +    } +  else +    { +      // TODO: use something harmonic here +      dict.insert("fontsize-small-1", px(bfs, 0.8)); +      dict.insert("fontsize-large-1", px(bfs, 1.2)); +      dict.insert("fontsize-large-2", px(bfs, 1.4)); +      dict.insert("fontsize-large-3", px(bfs, 1.5)); +      dict.insert("fontsize-large-4", px(bfs, 1.6)); +      dict.insert("fontsize-large-5", px(bfs, 1.8)); +    } + +  // Colors -------------------------------------------------------- + +  if (customDialog->blackOnWhite->isChecked()) +    { +      dict.insert("background-color", "White"); +      dict.insert("foreground-color", "Black"); +    } +  else if (customDialog->whiteOnBlack->isChecked()) +    { +      dict.insert("background-color", "Black"); +      dict.insert("foreground-color", "White"); +    } +  else +    { +      dict.insert("background-color", customDialog->backgroundColor->color().name()); +      dict.insert("foreground-color", customDialog->foregroundColor->color().name()); +    } + +  if (customDialog->sameColor->isChecked()) +    dict.insert("force-color", "! important"); +  else +    dict.insert("force-color", ""); + +  // Fonts ------------------------------------------------------------- +  dict.insert("font-family", customDialog->fontFamily->currentText()); +  if (customDialog->sameFamily->isChecked()) +    dict.insert("force-font", "! important"); +  else +    dict.insert("force-font", ""); + +  // Images + +  if (customDialog->hideImages->isChecked()) +    dict.insert("display-images", "background-image : none ! important"); +  else +    dict.insert("display-images", ""); +  if (customDialog->hideBackground->isChecked()) +    dict.insert("display-background", "background-image : none ! important"); +  else +    dict.insert("display-background", ""); + +  return dict; +} + + +void CSSConfig::slotCustomize() +{ +  customDialogBase->exec(); +} + + +void CSSConfig::slotPreview() +{ + +  QStyleSheetItem *h1 = new QStyleSheetItem(QStyleSheet::defaultSheet(), "h1"); +  QStyleSheetItem *h2 = new QStyleSheetItem(QStyleSheet::defaultSheet(), "h2"); +  QStyleSheetItem *h3 = new QStyleSheetItem(QStyleSheet::defaultSheet(), "h3"); +  QStyleSheetItem *text = new QStyleSheetItem(QStyleSheet::defaultSheet(), "p"); + +  // Fontsize + +  int bfs = customDialog->basefontsize->currentText().toInt(); +  text->setFontSize(bfs); +  if (customDialog->dontScale->isChecked()) +    { +      h1->setFontSize(bfs); +      h2->setFontSize(bfs); +      h3->setFontSize(bfs); +    } +  else +    { +      h1->setFontSize(static_cast<int>(bfs * 1.8)); +      h2->setFontSize(static_cast<int>(bfs * 1.6)); +      h3->setFontSize(static_cast<int>(bfs * 1.4)); +    } + +  // Colors + +  QColor back, fore; + +  if (customDialog->blackOnWhite->isChecked()) +    { +      back = Qt::white; +      fore = Qt::black; +    } +  else if (customDialog->whiteOnBlack->isChecked()) +    { +      back = Qt::black; +      fore = Qt::white; +    } +  else +    { +      back = customDialog->backgroundColor->color(); +      fore = customDialog->foregroundColor->color(); +    } + +  h1->setColor(fore); +  h2->setColor(fore); +  h3->setColor(fore); +  text->setColor(fore); + +  // Fonts + +  h1->setFontFamily(customDialog->fontFamily->currentText()); +  h2->setFontFamily(customDialog->fontFamily->currentText()); +  h3->setFontFamily(customDialog->fontFamily->currentText()); +  text->setFontFamily(customDialog->fontFamily->currentText()); + +  // Show the preview +  PreviewDialog *dlg = new PreviewDialog(this, 0, true); +  dlg->preview->setPaper(back); +  dlg->preview->viewport()->setFont(QFont(KGlobalSettings::generalFont().family(), bfs)); + +  dlg->exec(); + +  delete dlg; +} + + + + +#include "kcmcss.moc" + | 
