summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--kaddressbook/viewmanager.cpp5
-rw-r--r--kaddressbook/views/configuretableviewdialog.cpp214
-rw-r--r--kaddressbook/views/configuretableviewdialog.h17
3 files changed, 220 insertions, 16 deletions
diff --git a/kaddressbook/viewmanager.cpp b/kaddressbook/viewmanager.cpp
index bec1862..45c7b55 100644
--- a/kaddressbook/viewmanager.cpp
+++ b/kaddressbook/viewmanager.cpp
@@ -241,192 +241,197 @@ void ViewManager::setActiveView( const QString &name )
mActiveView = view;
mViewWidgetStack->raiseWidget( view );
// Set the proper filter in the view. By setting the combo
// box, the activated slot will be called, which will push
// the filter to the view and refresh it.
if ( view->defaultFilterType() == KAddressBookView::None ) {
mActionSelectFilter->setCurrentItem( 0 );
setActiveFilter( 0 );
} else if ( view->defaultFilterType() == KAddressBookView::Active ) {
setActiveFilter( mActionSelectFilter->currentItem() );
} else {
uint pos = filterPosition( view->defaultFilterName() );
mActionSelectFilter->setCurrentItem( pos );
setActiveFilter( pos );
}
//US qDebug("ViewManager::setActiveView 6" );
// Update the inc search widget to show the fields in the new active
// view.
mCore->setSearchFields( mActiveView->fields() );
//US performance optimization. setActiveFilter calls also mActiveView->refresh()
//US mActiveView->refresh();
}
else
{
qDebug("ViewManager::setActiveView: unable to find view" );
kdDebug(5720) << "ViewManager::setActiveView: unable to find view\n";
}
}
//US added another method with no parameter, since my moc compiler does not support default parameters.
void ViewManager::refreshView()
{
refreshView( QString::null );
}
void ViewManager::refreshView( const QString &uid )
{
if ( mActiveView )
mActiveView->refresh( uid );
}
void ViewManager::editView()
{
if ( !mActiveView )
return;
ViewFactory *factory = mViewFactoryDict.find( mActiveView->type() );
ViewConfigureWidget *wdg = 0;
ViewConfigureDialog* dlg = 0;
if ( factory ) {
// Save the filters so the dialog has the latest set
Filter::save( mCore->config(), "Filter", mFilterList );
dlg = new ViewConfigureDialog( 0, mActiveView->caption(), this, "conf_dlg" );
wdg = factory->configureWidget( mCore->addressBook(), dlg,"conf_wid" );
} else {
qDebug("ViewManager::editView()::cannot find viewfactory ");
return;
}
if ( wdg ) {
dlg->setWidget( wdg );
#ifndef DESKTOP_VERSION
//dlg.setMaximumSize( 640, 480 );
//dlg->setGeometry( 40,40, 400, 300);
dlg->showMaximized();
#endif
KConfigGroupSaver saver( mCore->config(), mActiveView->caption() );
dlg->restoreSettings( mCore->config() );
if ( dlg->exec() ) {
dlg->saveSettings( mCore->config() );
mActiveView->readConfig( mCore->config() );
// Set the proper filter in the view. By setting the combo
// box, the activated slot will be called, which will push
// the filter to the view and refresh it.
if ( mActiveView->defaultFilterType() == KAddressBookView::None ) {
mActionSelectFilter->setCurrentItem( 0 );
setActiveFilter( 0 );
} else if ( mActiveView->defaultFilterType() == KAddressBookView::Active ) {
setActiveFilter( mActionSelectFilter->currentItem() );
} else {
uint pos = filterPosition( mActiveView->defaultFilterName() );
mActionSelectFilter->setCurrentItem( pos );
setActiveFilter( pos );
}
mCore->setSearchFields( mActiveView->fields() );
//US performance optimization. setActiveFilter calls also mActiveView->refresh()
//US mActiveView->refresh();
+
+
+ //US this is a bugfix, that we get notified if we change a views configuration
+ emit modified();
+
}
}
delete dlg;
}
void ViewManager::deleteView()
{
QString text = i18n( "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>" )
.arg( mActiveView->caption() );
QString caption = i18n( "Confirm Delete" );
if (QMessageBox::information( this, caption,
text,
i18n("Yes!"), i18n("No"), 0, 0 ) == 0)
{
mViewNameList.remove( mActiveView->caption() );
// remove the view from the config file
KConfig *config = mCore->config();
config->deleteGroup( mActiveView->caption() );
mViewDict.remove( mActiveView->caption() );
mActiveView = 0;
// we are in an invalid state now, but that should be fixed after
// we emit the signal
mActionSelectView->setItems( mViewNameList );
if ( mViewNameList.count() > 0 ) {
mActionSelectView->setCurrentItem( 0 );
setActiveView( mViewNameList[ 0 ] );
}
mActionDeleteView->setEnabled( mViewNameList.count() > 1 );
}
}
void ViewManager::addView()
{
AddViewDialog dialog( &mViewFactoryDict, this );
if ( dialog.exec() ) {
QString newName = dialog.viewName();
QString type = dialog.viewType();
// Check for name conflicts
bool firstConflict = true;
int numTries = 1;
while ( mViewNameList.contains( newName ) > 0 ) {
if ( !firstConflict ) {
newName = newName.left( newName.length() - 4 );
firstConflict = false;
}
newName = QString( "%1 <%2>" ).arg( newName ).arg( numTries );
numTries++;
}
// Add the new one to the list
mViewNameList.append( newName );
// write the view to the config file,
KConfig *config = mCore->config();
config->deleteGroup( newName );
KConfigGroupSaver saver( config, newName );
config->writeEntry( "Type", type );
// try to set the active view
mActionSelectView->setItems( mViewNameList );
mActionSelectView->setCurrentItem( mViewNameList.findIndex( newName ) );
setActiveView( newName );
editView();
mActionDeleteView->setEnabled( mViewNameList.count() > 1 );
}
}
void ViewManager::createViewFactories()
{
#ifndef KAB_EMBEDDED
KTrader::OfferList plugins = KTrader::self()->query( "KAddressBook/View" );
KTrader::OfferList::ConstIterator it;
for ( it = plugins.begin(); it != plugins.end(); ++it ) {
if ( !(*it)->hasServiceType( "KAddressBook/View" ) )
continue;
KLibFactory *factory = KLibLoader::self()->factory( (*it)->library().latin1() );
if ( !factory ) {
kdDebug(5720) << "ViewManager::createViewFactories(): Factory creation failed" << endl;
continue;
}
diff --git a/kaddressbook/views/configuretableviewdialog.cpp b/kaddressbook/views/configuretableviewdialog.cpp
index e1cc63e..cd09bcf 100644
--- a/kaddressbook/views/configuretableviewdialog.cpp
+++ b/kaddressbook/views/configuretableviewdialog.cpp
@@ -1,155 +1,339 @@
/*
This file is part of KAddressBook.
Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#include <qstring.h>
#include <qwidget.h>
#include <qlayout.h>
+#include <qlabel.h>
#include <qradiobutton.h>
#include <qcheckbox.h>
#include <qvbox.h>
#include <qbuttongroup.h>
+#include <qtabwidget.h>
+#include <qwhatsthis.h>
+#include <qpushbutton.h>
#include <kglobal.h>
#include <klocale.h>
#include <klineedit.h>
#include <kurlrequester.h>
#include <kiconloader.h>
+#include <kfontdialog.h>
#ifndef KAB_EMBEDDED
#include <kimageio.h>
#else //KAB_EMBEDDED
#endif //KAB_EMBEDDED
#include <kconfig.h>
+#include "colorlistbox.h"
+
#include "configuretableviewdialog.h"
ConfigureTableViewWidget::ConfigureTableViewWidget( KABC::AddressBook *ab,
QWidget *parent,
const char *name )
: ViewConfigureWidget( ab, parent, name )
{
QWidget *page = addPage( i18n( "Look & Feel" ), QString::null,
KGlobal::iconLoader()->loadIcon( "looknfeel",
KIcon::Panel ) );
mPage = new LookAndFeelPage( page );
}
ConfigureTableViewWidget::~ConfigureTableViewWidget()
{
}
void ConfigureTableViewWidget::restoreSettings( KConfig *config )
{
ViewConfigureWidget::restoreSettings( config );
mPage->restoreSettings( config );
}
void ConfigureTableViewWidget::saveSettings( KConfig *config )
{
ViewConfigureWidget::saveSettings( config );
mPage->saveSettings( config );
}
LookAndFeelPage::LookAndFeelPage(QWidget *parent, const char *name)
- : QWidget(parent, name)
+ : QVBox(parent, name)
{
initGUI();
// Set initial state
enableBackgroundToggled(mBackgroundBox->isChecked());
}
void LookAndFeelPage::restoreSettings( KConfig *config )
{
mAlternateButton->setChecked(config->readBoolEntry("ABackground", true));
mLineButton->setChecked(config->readBoolEntry("SingleLine", false));
mToolTipBox->setChecked(config->readBoolEntry("ToolTips", true));
if (!mAlternateButton->isChecked() & !mLineButton->isChecked())
mNoneButton->setChecked(true);
mBackgroundBox->setChecked(config->readBoolEntry("Background", false));
mBackgroundName->lineEdit()->setText(config->readEntry("BackgroundName"));
+
+ // colors
+ cbEnableCustomColors->setChecked( config->readBoolEntry( "EnableCustomColors", false ) );
+ QColor c;
+qDebug("LookAndFeelPage::restoreSettings make base color configurable");
+
+#ifndef KAB_EMBEDDED
+ c = KGlobalSettings::baseColor();
+#else //KAB_EMBEDDED
+ c = QColor(0,0,0);
+#endif //KAB_EMBEDDED
+
+ lbColors->insertItem( new ColorListItem( i18n("Background Color"),
+ config->readColorEntry( "BackgroundColor", &c ) ) );
+ c = colorGroup().foreground();
+ lbColors->insertItem( new ColorListItem( i18n("Text Color"),
+ config->readColorEntry( "TextColor", &c ) ) );
+ c = colorGroup().button();
+ lbColors->insertItem( new ColorListItem( i18n("Header Background Color"),
+ config->readColorEntry( "HeaderBackgroundColor", &c ) ) );
+ c = colorGroup().buttonText();
+ lbColors->insertItem( new ColorListItem( i18n("Header Text Color"),
+ config->readColorEntry( "HeaderTextColor", &c ) ) );
+ c = colorGroup().highlight();
+ lbColors->insertItem( new ColorListItem( i18n("Highlight Color"),
+ config->readColorEntry( "HighlightColor", &c ) ) );
+ c = colorGroup().highlightedText();
+ lbColors->insertItem( new ColorListItem( i18n("Highlighted Text Color"),
+ config->readColorEntry( "HighlightedTextColor", &c ) ) );
+ c = colorGroup().background();
+ lbColors->insertItem( new ColorListItem( i18n("Alternating Background Color"),
+ config->readColorEntry( "AlternatingBackgroundColor", &c ) ) );
+
+ enableColors();
+
+ // fonts
+ QFont fnt = font();
+ updateFontLabel( config->readFontEntry( "TextFont", &fnt ), (QLabel*)lTextFont );
+ fnt.setBold( true );
+ updateFontLabel( config->readFontEntry( "HeaderFont", &fnt ), (QLabel*)lHeaderFont );
+ cbEnableCustomFonts->setChecked( config->readBoolEntry( "EnableCustomFonts", false ) );
+ enableFonts();
+
}
void LookAndFeelPage::saveSettings( KConfig *config )
{
config->writeEntry("ABackground", mAlternateButton->isChecked());
config->writeEntry("SingleLine", mLineButton->isChecked());
config->writeEntry("ToolTips", mToolTipBox->isChecked());
config->writeEntry("Background", mBackgroundBox->isChecked());
config->writeEntry("BackgroundName", mBackgroundName->lineEdit()->text());
+
+ // colors
+ config->writeEntry( "EnableCustomColors", cbEnableCustomColors->isChecked() );
+ if ( cbEnableCustomColors->isChecked() ) // ?? - Hmmm.
+ {
+ config->writeEntry( "BackgroundColor", lbColors->color( 0 ) );
+ config->writeEntry( "TextColor", lbColors->color( 1 ) );
+ config->writeEntry( "HeaderBackgroundColor", lbColors->color( 2 ) );
+ config->writeEntry( "HeaderTextColor", lbColors->color( 3 ) );
+ config->writeEntry( "HighlightColor", lbColors->color( 4 ) );
+ config->writeEntry( "HighlightedTextColor", lbColors->color( 5 ) );
+ config->writeEntry( "AlternatingBackgroundColor", lbColors->color( 6 ) );
+ }
+ // fonts
+ config->writeEntry( "EnableCustomFonts", cbEnableCustomFonts->isChecked() );
+ if ( cbEnableCustomFonts->isChecked() )
+ {
+ config->writeEntry( "TextFont", lTextFont->font() );
+ config->writeEntry( "HeaderFont", lHeaderFont->font() );
+ }
+
+}
+
+void LookAndFeelPage::setTextFont()
+{
+ QFont f( lTextFont->font() );
+#ifndef KAB_EMBEDDED
+ if ( KFontDialog::getFont( f, false, this ) == QDialog::Accepted )
+ updateFontLabel( f, lTextFont );
+#else //KAB_EMBEDDED
+ bool ok;
+ QFont fout = KFontDialog::getFont( f, ok);
+ if ( ok )
+ updateFontLabel( fout, lTextFont );
+#endif //KAB_EMBEDDED
+}
+
+void LookAndFeelPage::setHeaderFont()
+{
+ QFont f( lHeaderFont->font() );
+#ifndef KAB_EMBEDDED
+ if ( KFontDialog::getFont( f,false, this ) == QDialog::Accepted )
+ updateFontLabel( f, lHeaderFont );
+#else //KAB_EMBEDDED
+ bool ok;
+ QFont fout = KFontDialog::getFont( f, ok);
+ if ( ok )
+ updateFontLabel( fout, lHeaderFont );
+#endif //KAB_EMBEDDED
+}
+
+void LookAndFeelPage::enableFonts()
+{
+ vbFonts->setEnabled( cbEnableCustomFonts->isChecked() );
+}
+
+void LookAndFeelPage::enableColors()
+{
+ lbColors->setEnabled( cbEnableCustomColors->isChecked() );
}
void LookAndFeelPage::initGUI()
{
- QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialogBase::spacingHint());
+ int spacing = KDialog::spacingHint();
+ int margin = KDialog::marginHint();
+
+ QTabWidget *tabs = new QTabWidget( this );
+
+ // General
+ QVBox *generalTab = new QVBox( this, "generaltab" );
+
+ generalTab->setSpacing( spacing );
+ generalTab->setMargin( margin );
QButtonGroup *group = new QButtonGroup(1, Qt::Horizontal,
- i18n("Row Separator"), this);
- layout->addWidget(group);
+ i18n("Row Separator"), generalTab);
mAlternateButton = new QRadioButton(i18n("Alternating backgrounds"),
group, "mAlternateButton");
mLineButton = new QRadioButton(i18n("Single line"), group, "mLineButton");
mNoneButton = new QRadioButton(i18n("None"), group, "mNoneButton");
- // Background Checkbox/Selector
- QHBoxLayout *backgroundLayout = new QHBoxLayout();
- layout->addLayout(backgroundLayout);
-
- mBackgroundBox = new QCheckBox(i18n("Enable background image:"), this,
+ mBackgroundBox = new QCheckBox(i18n("Enable background image:"), generalTab,
"mBackgroundBox");
connect(mBackgroundBox, SIGNAL(toggled(bool)),
SLOT(enableBackgroundToggled(bool)));
- backgroundLayout->addWidget(mBackgroundBox);
- mBackgroundName = new KURLRequester(this, "mBackgroundName");
+ mBackgroundName = new KURLRequester(generalTab, "mBackgroundName");
#ifndef KAB_EMBEDDED
mBackgroundName->setMode(KFile::File | KFile::ExistingOnly |
KFile::LocalOnly);
mBackgroundName->setFilter(KImageIO::pattern(KImageIO::Reading));
#endif //KAB_EMBEDDED
- backgroundLayout->addWidget(mBackgroundName);
-
// ToolTip Checkbox
- mToolTipBox = new QCheckBox(i18n("Enable contact tooltips"), this,
+ mToolTipBox = new QCheckBox(i18n("Enable contact tooltips"), generalTab,
"mToolTipBox");
- layout->addWidget(mToolTipBox);
+
+ tabs->addTab( generalTab, i18n("&General") );
+
+ // Colors
+ QVBox *colorTab = new QVBox( this, "colortab" );
+ colorTab->setSpacing( spacing );
+ colorTab->setMargin( spacing );
+ cbEnableCustomColors = new QCheckBox( i18n("&Enable custom Colors"), colorTab );
+ connect( cbEnableCustomColors, SIGNAL(clicked()), this, SLOT(enableColors()) );
+ lbColors = new ColorListBox( colorTab );
+ tabs->addTab( colorTab, i18n("&Colors") );
+
+ QWhatsThis::add( cbEnableCustomColors, i18n(
+ "If custom colors are enabled, you may choose the colors for the view below. "
+ "Otherwise colors from your current KDE color scheme are used."
+ ) );
+ QWhatsThis::add( lbColors, i18n(
+ "Double click or press RETURN on a item to select a color for the related strings in the view."
+ ) );
+
+ // Fonts
+ QVBox *fntTab = new QVBox( this, "fonttab" );
+
+ fntTab->setSpacing( spacing );
+ fntTab->setMargin( spacing );
+
+ cbEnableCustomFonts = new QCheckBox( i18n("&Enable custom fonts"), fntTab );
+ connect( cbEnableCustomFonts, SIGNAL(clicked()), this, SLOT(enableFonts()) );
+
+ vbFonts = new QWidget( fntTab );
+ QGridLayout *gFnts = new QGridLayout( vbFonts, 2, 3 );
+ gFnts->setSpacing( spacing );
+ gFnts->setAutoAdd( true );
+ gFnts->setColStretch( 1, 1 );
+ QLabel *lTFnt = new QLabel( i18n("&Text font:"), vbFonts );
+ lTextFont = new QLabel( vbFonts );
+ lTextFont->setFrameStyle( QFrame::Panel|QFrame::Sunken );
+#ifndef KAB_EMBEDDED
+ btnFont = new KPushButton( i18n("Choose..."), vbFonts );
+#else //KAB_EMBEDDED
+ btnFont = new QPushButton( i18n("Choose..."), vbFonts );
+#endif //KAB_EMBEDDED
+
+ lTFnt->setBuddy( btnFont );
+
+ connect( btnFont, SIGNAL(clicked()), this, SLOT(setTextFont()) );
+
+ QLabel *lHFnt = new QLabel( i18n("&Header font:"), vbFonts );
+ lHeaderFont = new QLabel( vbFonts );
+ lHeaderFont->setFrameStyle( QFrame::Panel|QFrame::Sunken );
+#ifndef KAB_EMBEDDED
+ btnHeaderFont = new KPushButton( i18n("Choose..."), vbFonts );
+#else //KAB_EMBEDDED
+ btnHeaderFont = new QPushButton( i18n("Choose..."), vbFonts );
+#endif //KAB_EMBEDDED
+ lHFnt->setBuddy( btnHeaderFont );
+ connect( btnHeaderFont, SIGNAL(clicked()), this, SLOT(setHeaderFont()) );
+
+ fntTab->setStretchFactor( new QWidget( fntTab ), 1 );
+
+ QWhatsThis::add( cbEnableCustomFonts, i18n(
+ "If custom fonts are enabled, you may choose which fonts to use for this view below. "
+ "Otherwise the default KDE font will be used, in bold style for the header and "
+ "normal style for the data."
+ ) );
+
+ tabs->addTab( fntTab, i18n("&Fonts") );
+
}
void LookAndFeelPage::enableBackgroundToggled(bool enabled)
{
mBackgroundName->setEnabled(enabled);
}
+
+void LookAndFeelPage::updateFontLabel( QFont fnt, QLabel *l )
+{
+ l->setFont( fnt );
+ l->setText( QString( fnt.family() + " %1" ).arg( fnt.pointSize() ) );
+}
+
#ifndef KAB_EMBEDDED
#include "configuretableviewdialog.moc"
#endif //KAB_EMBEDDED
diff --git a/kaddressbook/views/configuretableviewdialog.h b/kaddressbook/views/configuretableviewdialog.h
index 8392710..003ccf8 100644
--- a/kaddressbook/views/configuretableviewdialog.h
+++ b/kaddressbook/views/configuretableviewdialog.h
@@ -1,88 +1,103 @@
/*
This file is part of KAddressBook.
Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#ifndef CONFIGURETABLEVIEWDIALOG_H
#define CONFIGURETABLEVIEWDIALOG_H
#include "viewconfigurewidget.h"
+#include <qvbox.h>
+
class QString;
class QWidget;
class QRadioButton;
class QCheckBox;
class KURLRequester;
class KConfig;
+class QLabel;
namespace KABC { class AddressBook; }
class LookAndFeelPage;
/**
Configure dialog for the table view. This dialog inherits from the
standard view dialog in order to add a custom page for the table
view.
*/
class ConfigureTableViewWidget : public ViewConfigureWidget
{
public:
ConfigureTableViewWidget( KABC::AddressBook *ab, QWidget *parent, const char *name );
virtual ~ConfigureTableViewWidget();
virtual void restoreSettings( KConfig* );
virtual void saveSettings( KConfig* );
private:
void initGUI();
LookAndFeelPage *mPage;
};
/**
Internal class. It is only defined here for moc
*/
-class LookAndFeelPage : public QWidget
+class LookAndFeelPage : public QVBox
{
Q_OBJECT
public:
LookAndFeelPage( QWidget *parent, const char *name = 0 );
~LookAndFeelPage() {}
void restoreSettings( KConfig* );
void saveSettings( KConfig* );
protected slots:
void enableBackgroundToggled( bool );
+ void setTextFont();
+ void setHeaderFont();
+ void enableFonts();
+ void enableColors();
private:
void initGUI();
+ void updateFontLabel( QFont, QLabel * );
+
+ QCheckBox *cbEnableCustomFonts,
+ *cbEnableCustomColors;
+ class ColorListBox *lbColors;
+ QLabel *lTextFont, *lHeaderFont;
+ class QPushButton *btnFont, *btnHeaderFont;
+ class QWidget* vbFonts;
QRadioButton *mAlternateButton;
QRadioButton *mLineButton;
QRadioButton *mNoneButton;
QCheckBox *mToolTipBox;
KURLRequester *mBackgroundName;
QCheckBox *mBackgroundBox;
};
#endif