From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: 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/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kalarm/fontcolour.cpp | 265 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 kalarm/fontcolour.cpp (limited to 'kalarm/fontcolour.cpp') diff --git a/kalarm/fontcolour.cpp b/kalarm/fontcolour.cpp new file mode 100644 index 000000000..dae2e9856 --- /dev/null +++ b/kalarm/fontcolour.cpp @@ -0,0 +1,265 @@ +/* + * fontcolour.cpp - font and colour chooser widget + * Program: kalarm + * Copyright © 2001-2003,2005,2008 by David Jarvie + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "kalarmapp.h" +#include "preferences.h" +#include "colourcombo.h" +#include "checkbox.h" +#include "fontcolour.moc" + + +FontColourChooser::FontColourChooser(QWidget *parent, const char *name, + bool onlyFixed, const QStringList &fontList, + const QString& frameLabel, bool editColours, bool fg, bool defaultFont, + int visibleListSize) + : QWidget(parent, name), + mFgColourButton(0), + mRemoveColourButton(0), + mColourList(Preferences::messageColours()), + mReadOnly(false) +{ + QVBoxLayout* topLayout = new QVBoxLayout(this, 0, KDialog::spacingHint()); + QWidget* page = this; + if (!frameLabel.isNull()) + { + page = new QGroupBox(frameLabel, this); + topLayout->addWidget(page); + topLayout = new QVBoxLayout(page, KDialog::marginHint(), KDialog::spacingHint()); + topLayout->addSpacing(fontMetrics().height() - KDialog::marginHint() + KDialog::spacingHint()); + } + QHBoxLayout* hlayout = new QHBoxLayout(topLayout); + QVBoxLayout* colourLayout = new QVBoxLayout(hlayout); + if (fg) + { + QHBox* box = new QHBox(page); // to group widgets for QWhatsThis text + box->setSpacing(KDialog::spacingHint()/2); + colourLayout->addWidget(box); + + QLabel* label = new QLabel(i18n("&Foreground color:"), box); + box->setStretchFactor(new QWidget(box), 0); + mFgColourButton = new ColourCombo(box); + connect(mFgColourButton, SIGNAL(activated(const QString&)), SLOT(setSampleColour())); + label->setBuddy(mFgColourButton); + QWhatsThis::add(box, i18n("Select the alarm message foreground color")); + } + + QHBox* box = new QHBox(page); // to group widgets for QWhatsThis text + box->setSpacing(KDialog::spacingHint()/2); + colourLayout->addWidget(box); + + QLabel* label = new QLabel(i18n("&Background color:"), box); + box->setStretchFactor(new QWidget(box), 0); + mBgColourButton = new ColourCombo(box); + connect(mBgColourButton, SIGNAL(activated(const QString&)), SLOT(setSampleColour())); + label->setBuddy(mBgColourButton); + QWhatsThis::add(box, i18n("Select the alarm message background color")); + hlayout->addStretch(); + + if (editColours) + { + QHBoxLayout* layout = new QHBoxLayout(topLayout); + QPushButton* button = new QPushButton(i18n("Add Co&lor..."), page); + button->setFixedSize(button->sizeHint()); + connect(button, SIGNAL(clicked()), SLOT(slotAddColour())); + QWhatsThis::add(button, i18n("Choose a new color to add to the color selection list.")); + layout->addWidget(button); + + mRemoveColourButton = new QPushButton(i18n("&Remove Color"), page); + mRemoveColourButton->setFixedSize(mRemoveColourButton->sizeHint()); + connect(mRemoveColourButton, SIGNAL(clicked()), SLOT(slotRemoveColour())); + QWhatsThis::add(mRemoveColourButton, + i18n("Remove the color currently shown in the background color chooser, from the color selection list.")); + layout->addWidget(mRemoveColourButton); + } + + if (defaultFont) + { + QHBoxLayout* layout = new QHBoxLayout(topLayout); + mDefaultFont = new CheckBox(i18n("Use &default font"), page); + mDefaultFont->setMinimumSize(mDefaultFont->sizeHint()); + connect(mDefaultFont, SIGNAL(toggled(bool)), SLOT(slotDefaultFontToggled(bool))); + QWhatsThis::add(mDefaultFont, + i18n("Check to use the default font current at the time the alarm is displayed.")); + layout->addWidget(mDefaultFont); + layout->addWidget(new QWidget(page)); // left adjust the widget + } + else + mDefaultFont = 0; + + mFontChooser = new KFontChooser(page, name, onlyFixed, fontList, false, visibleListSize); + mFontChooser->installEventFilter(this); // for read-only mode + const QObjectList* kids = mFontChooser->queryList(); + for (QObjectList::ConstIterator it = kids->constBegin(); it != kids->constEnd(); ++it) + (*it)->installEventFilter(this); + topLayout->addWidget(mFontChooser); + + slotDefaultFontToggled(false); +} + +void FontColourChooser::setDefaultFont() +{ + if (mDefaultFont) + mDefaultFont->setChecked(true); +} + +void FontColourChooser::setFont(const QFont& font, bool onlyFixed) +{ + if (mDefaultFont) + mDefaultFont->setChecked(false); + mFontChooser->setFont(font, onlyFixed); +} + +bool FontColourChooser::defaultFont() const +{ + return mDefaultFont ? mDefaultFont->isChecked() : false; +} + +QFont FontColourChooser::font() const +{ + return (mDefaultFont && mDefaultFont->isChecked()) ? QFont() : mFontChooser->font(); +} + +void FontColourChooser::setBgColour(const QColor& colour) +{ + mBgColourButton->setColor(colour); + mFontChooser->setBackgroundColor(colour); +} + +void FontColourChooser::setSampleColour() +{ + QColor bg = mBgColourButton->color(); + mFontChooser->setBackgroundColor(bg); + QColor fg = fgColour(); + mFontChooser->setColor(fg); + if (mRemoveColourButton) + mRemoveColourButton->setEnabled(!mBgColourButton->isCustomColour()); // no deletion of custom colour +} + +QColor FontColourChooser::bgColour() const +{ + return mBgColourButton->color(); +} + +QColor FontColourChooser::fgColour() const +{ + if (mFgColourButton) + return mFgColourButton->color(); + else + { + QColor bg = mBgColourButton->color(); + QPalette pal(bg, bg); + return pal.color(QPalette::Active, QColorGroup::Text); + } +} + +QString FontColourChooser::sampleText() const +{ + return mFontChooser->sampleText(); +} + +void FontColourChooser::setSampleText(const QString& text) +{ + mFontChooser->setSampleText(text); +} + +void FontColourChooser::setFgColour(const QColor& colour) +{ + if (mFgColourButton) + { + mFgColourButton->setColor(colour); + mFontChooser->setColor(colour); + } +} + +void FontColourChooser::setReadOnly(bool ro) +{ + if (ro != mReadOnly) + { + mReadOnly = ro; + if (mFgColourButton) + mFgColourButton->setReadOnly(ro); + mBgColourButton->setReadOnly(ro); + mDefaultFont->setReadOnly(ro); + } +} + +bool FontColourChooser::eventFilter(QObject*, QEvent* e) +{ + if (mReadOnly) + { + switch (e->type()) + { + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseButtonDblClick: + case QEvent::KeyPress: + case QEvent::KeyRelease: + return true; // prevent the event being handled + default: + break; + } + } + return false; +} + +void FontColourChooser::slotDefaultFontToggled(bool on) +{ + mFontChooser->setEnabled(!on); +} + +void FontColourChooser::setColours(const ColourList& colours) +{ + mColourList = colours; + mBgColourButton->setColours(mColourList); + mFontChooser->setBackgroundColor(mBgColourButton->color()); +} + +void FontColourChooser::slotAddColour() +{ + QColor colour; + if (KColorDialog::getColor(colour, this) == QDialog::Accepted) + { + mColourList.insert(colour); + mBgColourButton->setColours(mColourList); + } +} + +void FontColourChooser::slotRemoveColour() +{ + if (!mBgColourButton->isCustomColour()) + { + mColourList.remove(mBgColourButton->color()); + mBgColourButton->setColours(mColourList); + } +} + -- cgit v1.2.1