00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
#ifdef HAVE_CONFIG_H
00035
#include <config.h>
00036
#endif
00037
00038
#include "appearanceconfigwidget.h"
00039
00040
#include <kleo/cryptobackendfactory.h>
00041
#include <kleo/keyfiltermanager.h>
00042
00043
#include <klistview.h>
00044
#include <kconfig.h>
00045
#include <kdialog.h>
00046
#include <klocale.h>
00047
#include <kdebug.h>
00048
#include <kmessagebox.h>
00049
#include <kfontdialog.h>
00050
#include <kcolordialog.h>
00051
00052
#include <qpushbutton.h>
00053
#include <qlayout.h>
00054
#include <qheader.h>
00055
#include <qcolor.h>
00056
#include <qfont.h>
00057
#include <qstring.h>
00058
#include <qpainter.h>
00059
#include <qregexp.h>
00060
#include <qcheckbox.h>
00061
00062
#include <assert.h>
00063
00064
using namespace Kleo;
00065
00066
class CategoryListViewItem :
public QListViewItem
00067 {
00068
public:
00069 CategoryListViewItem(
QListView* lv,
QListViewItem* prev,
const KConfigBase& config )
00070 :
QListViewItem( lv, prev ) {
00071
00072 setName( config.readEntry(
"Name", i18n(
"<unnamed>") ) );
00073 mForegroundColor = config.readColorEntry(
"foreground-color" );
00074 mBackgroundColor = config.readColorEntry(
"background-color" );
00075 mHasFont = config.hasKey(
"font" );
00076
if ( mHasFont ) {
00077 setFont( config.readFontEntry(
"font" ) );
00078 }
00079
else {
00080 mItalic = config.readBoolEntry(
"font-italic",
false );
00081 mBold = config.readBoolEntry(
"font-bold",
false );
00082 }
00083 mStrikeOut = config.readBoolEntry(
"font-strikeout",
false );
00084 mIsExpired = config.readBoolEntry(
"is-expired",
false );
00085 mDirty =
false;
00086 }
00087
00088
void save( KConfigBase& config ) {
00089 config.writeEntry(
"Name", text( 0 ) );
00090 config.writeEntry(
"foreground-color", mForegroundColor );
00091 config.writeEntry(
"background-color", mBackgroundColor );
00092
if ( mHasFont )
00093 config.writeEntry(
"font", mFont );
00094
else {
00095 config.deleteEntry(
"font" );
00096 config.writeEntry(
"font-italic", mItalic );
00097 config.writeEntry(
"font-bold", mBold );
00098 }
00099 config.writeEntry(
"font-strikeout", mStrikeOut );
00100 }
00101
00102
void setForegroundColor(
const QColor& foreground ) { mForegroundColor = foreground; mDirty =
true; }
00103
void setBackgroundColor(
const QColor& background ) { mBackgroundColor = background; mDirty =
true; }
00104
void setFont(
const QFont& font ) {
00105 mFont = font;
00106 mHasFont =
true;
00107 mItalic = font.
italic();
00108 mBold = font.bold();
00109 mDirty =
true;
00110 }
00111
00112
QColor foregroundColor()
const {
return mForegroundColor; }
00113
QColor backgroundColor()
const {
return mBackgroundColor; }
00114
QFont font()
const {
return mFont; }
00115
00116
void setDefaultAppearance() {
00117 mForegroundColor = mIsExpired ? Qt::red :
QColor();
00118 mBackgroundColor =
QColor();
00119 mHasFont =
false;
00120 mFont =
QFont();
00121 mBold =
false;
00122 mItalic =
false;
00123 mStrikeOut =
false;
00124 mDirty =
true;
00125 }
00126
00127
bool isDirty()
const {
return mDirty; }
00128
bool isItalic()
const {
return mItalic; }
00129
bool isBold()
const {
return mBold; }
00130
bool isStrikeout()
const {
return mStrikeOut; }
00131
bool hasFont()
const {
return mHasFont; }
00132
00133
void toggleItalic() { mItalic = !mItalic;
if ( mHasFont ) mFont.setItalic( mItalic ); mDirty =
true; }
00134
void toggleBold() { mBold = !mBold;
if ( mHasFont ) mFont.setBold( mBold ); mDirty =
true; }
00135
void toggleStrikeout() { mStrikeOut = !mStrikeOut; mDirty =
true; }
00136
00137
private:
00138
void setName(
const QString& name ) {
00139 setText( 0, name );
00140 }
00141
00142
void paintCell(
QPainter * p,
const QColorGroup & cg,
int column,
int width,
int alignment );
00143
00144
private:
00145
QColor mForegroundColor, mBackgroundColor;
00146
QFont mFont;
00147
bool mHasFont;
00148
bool mIsExpired;
00149
bool mItalic;
00150
bool mBold;
00151
bool mStrikeOut;
00152
bool mDirty;
00153 };
00154
00155
void CategoryListViewItem::paintCell(
QPainter * p,
const QColorGroup & cg,
int column,
int width,
int alignment ) {
00156
QColorGroup _cg = cg;
00157
QFont font = p->font();
00158
if ( mHasFont )
00159 font = mFont;
00160
else {
00161
if ( mItalic )
00162 font.setItalic(
true );
00163
if ( mBold )
00164 font.setBold(
true );
00165 }
00166
if ( mStrikeOut )
00167 font.setStrikeOut(
true );
00168 p->setFont( font );
00169
00170
if ( mForegroundColor.isValid() )
00171 _cg.setColor( QColorGroup::Text, mForegroundColor );
00172
if ( mBackgroundColor.isValid() )
00173 _cg.setColor( QColorGroup::Base, mBackgroundColor );
00174
00175 QListViewItem::paintCell( p, _cg, column, width, alignment );
00176 }
00177
00179
00180 Kleo::AppearanceConfigWidget::AppearanceConfigWidget (
00181
QWidget* parent,
const char* name, WFlags fl )
00182 : AppearanceConfigWidgetBase( parent, name, fl )
00183 {
00184 categoriesLV->setSorting( -1 );
00185 load();
00186 }
00187
00188
00189
00190
00191
00192
00193 AppearanceConfigWidget::~AppearanceConfigWidget()
00194 {
00195
00196 }
00197
00198
00199
void AppearanceConfigWidget::slotSelectionChanged(
QListViewItem* item )
00200 {
00201
bool sel = item != 0;
00202 foregroundButton->setEnabled( sel );
00203 backgroundButton->setEnabled( sel );
00204 fontButton->setEnabled( sel );
00205 italicCB->setEnabled( item );
00206 boldCB->setEnabled( item );
00207 strikeoutCB->setEnabled( item );
00208 defaultLookPB->setEnabled( sel );
00209
if ( item ) {
00210 CategoryListViewItem* clvi = static_cast<CategoryListViewItem *>( item );
00211 italicCB->setChecked( clvi->isItalic() );
00212 boldCB->setChecked( clvi->isBold() );
00213 strikeoutCB->setChecked( clvi->isStrikeout() );
00214 }
else {
00215 italicCB->setChecked(
false );
00216 boldCB->setChecked(
false );
00217 strikeoutCB->setChecked(
false );
00218 }
00219 }
00220
00221
00222
00223
00224
void AppearanceConfigWidget::slotDefaultClicked()
00225 {
00226 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00227
if ( !item )
00228
return;
00229 item->setDefaultAppearance();
00230 item->repaint();
00231 slotSelectionChanged( item );
00232 emit changed();
00233 }
00234
00235
void AppearanceConfigWidget::load()
00236 {
00237 categoriesLV->clear();
00238 KConfig * config = Kleo::CryptoBackendFactory::instance()->configObject();
00239
if ( !config )
00240
return;
00241
QStringList groups = config->groupList().grep(
QRegExp(
"^Key Filter #\\d+$" ) );
00242
for ( QStringList::const_iterator it = groups.begin() ; it != groups.end() ; ++it ) {
00243 KConfigGroup cfg( config, *it );
00244 (
void)
new CategoryListViewItem( categoriesLV, categoriesLV->lastItem(), cfg );
00245 }
00246 }
00247
00248
void AppearanceConfigWidget::save()
00249 {
00250 KConfig * config = Kleo::CryptoBackendFactory::instance()->configObject();
00251
if ( !config )
00252
return;
00253
00254
00255
QStringList groups = config->groupList().grep(
QRegExp(
"^Key Filter #\\d+$" ) );
00256
if ( groups.isEmpty() ) {
00257
00258
QListViewItemIterator lvit( categoriesLV );
00259
for ( ; lvit.current() ; ++lvit )
00260 groups << lvit.current()->text( 0 );
00261 }
00262
00263
QListViewItemIterator lvit( categoriesLV );
00264
for ( QStringList::const_iterator it = groups.begin() ; it != groups.end() && lvit.current(); ++it, ++lvit ) {
00265 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(lvit.current() );
00266 KConfigGroup cfg( config, *it );
00267 item->save( cfg );
00268 }
00269 config->sync();
00270 Kleo::KeyFilterManager::instance()->reload();
00271 }
00272
00273
00274
void AppearanceConfigWidget::slotForegroundClicked() {
00275 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00276 Q_ASSERT( item );
00277
if( !item )
00278
return;
00279
QColor fg = item->foregroundColor();
00280
int result = KColorDialog::getColor( fg );
00281
if ( result == KColorDialog::Accepted ) {
00282 item->setForegroundColor( fg );
00283 item->repaint();
00284 emit changed();
00285 }
00286 }
00287
00288
void AppearanceConfigWidget::slotBackgroundClicked() {
00289 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00290 Q_ASSERT( item );
00291
if( !item )
00292
return;
00293
QColor bg = item->backgroundColor();
00294
int result = KColorDialog::getColor( bg );
00295
if ( result == KColorDialog::Accepted ) {
00296 item->setBackgroundColor( bg );
00297 item->repaint();
00298 emit changed();
00299 }
00300 }
00301
00302
void AppearanceConfigWidget::slotFontClicked() {
00303 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00304 Q_ASSERT( item );
00305
if( !item )
00306
return;
00307
QFont font = item->font();
00308
int result = KFontDialog::getFont( font );
00309
if ( result == KFontDialog::Accepted ) {
00310 item->setFont( font );
00311 item->repaint();
00312 emit changed();
00313 }
00314 }
00315
00316
void AppearanceConfigWidget::defaults()
00317 {
00318
00319
QListViewItemIterator lvit( categoriesLV );
00320
for ( ; lvit.current() ; ++lvit ) {
00321 CategoryListViewItem* item = static_cast<CategoryListViewItem *>( lvit.current() );
00322 item->setDefaultAppearance();
00323 item->repaint();
00324 }
00325 emit changed();
00326 }
00327
00328
void AppearanceConfigWidget::slotItalicClicked()
00329 {
00330 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00331
if ( item ) {
00332 item->toggleItalic();
00333 item->repaint();
00334 emit changed();
00335 }
00336 }
00337
00338
void AppearanceConfigWidget::slotBoldClicked()
00339 {
00340 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00341
if ( item ) {
00342 item->toggleBold();
00343 item->repaint();
00344 emit changed();
00345 }
00346 }
00347
00348
void AppearanceConfigWidget::slotStrikeoutClicked()
00349 {
00350 CategoryListViewItem* item = static_cast<CategoryListViewItem*>(categoriesLV->selectedItem() );
00351
if ( item ) {
00352 item->toggleStrikeout();
00353 item->repaint();
00354 emit changed();
00355 }
00356 }
00357
00358
#include "appearanceconfigwidget.moc"