summaryrefslogtreecommitdiffabout
path: root/kaddressbook/details
Side-by-side diff
Diffstat (limited to 'kaddressbook/details') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/details/detailsviewcontainer.cpp171
-rw-r--r--kaddressbook/details/detailsviewcontainer.h103
-rw-r--r--kaddressbook/details/global.h28
-rw-r--r--kaddressbook/details/look_basic.cpp75
-rw-r--r--kaddressbook/details/look_basic.h134
-rw-r--r--kaddressbook/details/look_details.cpp419
-rw-r--r--kaddressbook/details/look_details.h157
-rw-r--r--kaddressbook/details/look_html.cpp45
-rw-r--r--kaddressbook/details/look_html.h75
9 files changed, 1207 insertions, 0 deletions
diff --git a/kaddressbook/details/detailsviewcontainer.cpp b/kaddressbook/details/detailsviewcontainer.cpp
new file mode 100644
index 0000000..8f566cf
--- a/dev/null
+++ b/kaddressbook/details/detailsviewcontainer.cpp
@@ -0,0 +1,171 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
+
+ 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 <qcombobox.h>
+#include <qframe.h>
+#include <qlabel.h>
+#include <qlayout.h>
+#include <qwidgetstack.h>
+
+#include <kapplication.h>
+#include <kdebug.h>
+#include <kdialog.h>
+
+#include "look_basic.h"
+//#include "look_details.h"
+#include "look_html.h"
+
+#ifdef KAB_EMBEDDED
+#include "kabprefs.h"
+#endif //KAB_EMBEDDED
+
+
+#include "detailsviewcontainer.h"
+
+ViewContainer::ViewContainer( QWidget *parent, const char* name )
+ : QWidget( parent, name ), mCurrentLook( 0 )
+{
+ QBoxLayout *topLayout = new QVBoxLayout( this );
+ //topLayout->setMargin( KDialog::marginHint() );
+ //topLayout->setSpacing( KDialog::spacingHint() );
+ topLayout->setMargin( 0 );
+ topLayout->setSpacing( 0 );
+
+ QBoxLayout *styleLayout = new QHBoxLayout( topLayout );
+
+ QLabel *label = new QLabel( i18n("Style:"), this );
+ styleLayout->addWidget( label );
+
+ mStyleCombo = new QComboBox( this );
+ styleLayout->addWidget( mStyleCombo );
+
+ QFrame *frameRuler = new QFrame( this );
+//US frameRuler->setFrameShape( QFrame::HLine );
+//US frameRuler->setFrameShadow( QFrame::Sunken );
+//US topLayout->addWidget( frameRuler );
+
+ mDetailsStack = new QWidgetStack( this );
+ topLayout->addWidget( mDetailsStack, 1 );
+
+ registerLooks();
+
+#if 1
+ // Hide detailed view selection combo box, because we currently have
+ // only one. Reenable it when there are more detailed views.
+ label->hide();
+ mStyleCombo->hide();
+ frameRuler->hide();
+#endif
+}
+
+KABBasicLook *ViewContainer::currentLook()
+{
+ return mCurrentLook;
+}
+
+void ViewContainer::registerLooks()
+{
+ mLookFactories.append( new KABHtmlViewFactory( mDetailsStack ) );
+// mLookFactories.append( new KABDetailedViewFactory( mDetailsStack ) );
+ mStyleCombo->clear();
+
+ for ( uint i = 0; i < mLookFactories.count(); ++i )
+ mStyleCombo->insertItem( mLookFactories.at( i )->description() );
+
+ if ( !mLookFactories.isEmpty() )
+ slotStyleSelected( 0 );
+}
+
+void ViewContainer::slotStyleSelected( int index )
+{
+#ifndef KAB_EMBEDDED
+ KConfig *config = kapp->config();
+#else //KAB_EMBEDDED
+ //US I hope I got the same config object as above expected.
+ KConfig *config = KABPrefs::instance()->getConfig();
+#endif //KAB_EMBEDDED
+ KABC::Addressee addr;
+
+ if ( index >= 0 && index < mStyleCombo->count() ) {
+ if ( mCurrentLook != 0 ) {
+ mCurrentLook->saveSettings( config );
+ addr = mCurrentLook->addressee();
+
+ delete mCurrentLook;
+ mCurrentLook = 0;
+ }
+
+ KABLookFactory *factory = mLookFactories.at( index );
+ kdDebug(5720) << "ViewContainer::slotStyleSelected: "
+ << "creating look "
+ << factory->description() << endl;
+
+ mCurrentLook = factory->create();
+ mDetailsStack->raiseWidget( mCurrentLook );
+
+ connect( mCurrentLook, SIGNAL( sendEmail( const QString& ) ), this,
+ SIGNAL( sendEmail( const QString& ) ) );
+ connect( mCurrentLook, SIGNAL( browse( const QString& ) ), this,
+ SIGNAL( browse( const QString& ) ) );
+ }
+
+ mCurrentLook->restoreSettings( config );
+ mCurrentLook->setAddressee( addr );
+}
+void ViewContainer::refreshView()
+{
+ if ( mCurrentLook )
+ mCurrentLook->setAddressee( mCurrentAddressee );
+}
+
+void ViewContainer::setAddressee( const KABC::Addressee& addressee )
+{
+ if ( mCurrentLook != 0 ) {
+ if ( addressee == mCurrentAddressee )
+ return;
+ else {
+ mCurrentAddressee = addressee;
+ mCurrentLook->setAddressee( mCurrentAddressee );
+ }
+ }
+}
+
+KABC::Addressee ViewContainer::addressee()
+{
+ static KABC::Addressee empty; // do not use!
+
+ if ( !mCurrentLook )
+ return empty;
+ else
+ return mCurrentLook->addressee();
+}
+
+void ViewContainer::setReadOnly( bool state )
+{
+ if ( mCurrentLook )
+ mCurrentLook->setReadOnly( state );
+}
+
+#ifndef KAB_EMBEDDED
+#include "detailsviewcontainer.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/details/detailsviewcontainer.h b/kaddressbook/details/detailsviewcontainer.h
new file mode 100644
index 0000000..b561d12
--- a/dev/null
+++ b/kaddressbook/details/detailsviewcontainer.h
@@ -0,0 +1,103 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
+
+ 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 DETAILSVIEWCONTAINER_H
+#define DETAILSVIEWCONTAINER_H
+
+#include <qptrlist.h>
+
+#include "look_basic.h"
+
+class QComboBox;
+class QWidgetStack;
+
+class ViewContainer : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ ViewContainer( QWidget *parent = 0, const char* name = 0 );
+
+ /**
+ Return the look currently selected. If there is none, it
+ returns zero. Do not use this pointer to store a reference
+ to a look, the user might select another one (e.g., create
+ a new object) at any time.
+ */
+ KABBasicLook *currentLook();
+ void refreshView();
+ /**
+ Return the contact currently displayed.
+ */
+ KABC::Addressee addressee();
+
+ public slots:
+ /**
+ Set the contact currently displayed.
+ */
+ void setAddressee( const KABC::Addressee& addressee );
+
+ /**
+ Set read-write state.
+ */
+ void setReadOnly( bool state );
+
+ signals:
+ /**
+ The contact has been changed.
+ */
+ void addresseeChanged();
+
+ /**
+ The user acticated the email address displayed. This may happen
+ by, for example, clicking on the displayed mailto-URL.
+ */
+ void sendEmail( const QString& );
+
+ /**
+ The user activated one of the displayed HTTP URLs. For example
+ by clicking on the displayed homepage address.
+ */
+ void browse( const QString& );
+
+ protected:
+ /**
+ A style has been selected. Overloaded from base class.
+ */
+ void slotStyleSelected( int );
+
+ /**
+ Register the available looks.
+ */
+ void registerLooks();
+
+ private:
+ KABC::Addressee mCurrentAddressee;
+ KABBasicLook *mCurrentLook;
+ QPtrList<KABLookFactory> mLookFactories;
+
+ QComboBox *mStyleCombo;
+ QWidgetStack *mDetailsStack;
+};
+
+#endif
diff --git a/kaddressbook/details/global.h b/kaddressbook/details/global.h
new file mode 100644
index 0000000..3c52bc2
--- a/dev/null
+++ b/kaddressbook/details/global.h
@@ -0,0 +1,28 @@
+#ifndef KAB3_GLOBAL_H
+#define KAB3_GLOBAL_H
+
+// keys of configuration file settings:
+
+#define ConfigGeneral "General"
+
+#define ConfigGeneral_RememberLastContact "RememberLastContact"
+#define ConfigGeneral_ShowContactInHeader "ShowContactInHeader"
+
+#define ConfigView "View"
+
+#define ConfigView_View "ConfigView"
+
+#define ConfigView_UseKDEDefaultFonts "UseKDEDefaultFonts"
+#define ConfigView_DefaultBackgroundImage "DefaultBackgroundImage"
+#define ConfigView_DefaultBackgroundColor "DefaultBackgroundColor"
+#define ConfigView_UseDefaultBackground "UseDefaultBackground"
+
+#define ConfigView_HeadlineBGColor "HeadlineBGColor"
+#define ConfigView_UseHeadlineBGColor "UseHeadlineBGColor"
+#define ConfigView_HeadlineTextColor "HeadlineTextColor"
+#define ConfigView_HeadlineFont "HeadlineFont"
+#define ConfigView_BodyFont "BodyFont"
+#define ConfigView_DetailsFont "DetailsFont"
+
+
+#endif
diff --git a/kaddressbook/details/look_basic.cpp b/kaddressbook/details/look_basic.cpp
new file mode 100644
index 0000000..0245686
--- a/dev/null
+++ b/kaddressbook/details/look_basic.cpp
@@ -0,0 +1,75 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
+
+ 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 <kdebug.h>
+
+#include "look_basic.h"
+
+KABBasicLook::KABBasicLook( QWidget *parent, const char *name )
+ : QVBox( parent, name ), mReadOnly( false )
+{
+}
+
+void KABBasicLook::setReadOnly( bool state )
+{
+ mReadOnly = state;
+}
+
+bool KABBasicLook::isReadOnly() const
+{
+ return mReadOnly;
+}
+
+void KABBasicLook::setAddressee( const KABC::Addressee &addr )
+{
+ if ( mAddressee == addr )
+ return;
+
+ mAddressee = addr;
+ repaint( false );
+}
+
+KABC::Addressee KABBasicLook::addressee()
+{
+ return mAddressee;
+}
+
+void KABBasicLook::restoreSettings( KConfig* )
+{
+}
+
+void KABBasicLook::saveSettings( KConfig* )
+{
+}
+
+KABLookFactory::KABLookFactory( QWidget *parent, const char *name )
+ : mParent( parent ), mName( name )
+{
+}
+
+KABLookFactory::~KABLookFactory()
+{
+}
+#ifndef KAB_EMBEDDED
+#include "look_basic.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/details/look_basic.h b/kaddressbook/details/look_basic.h
new file mode 100644
index 0000000..7e8baff
--- a/dev/null
+++ b/kaddressbook/details/look_basic.h
@@ -0,0 +1,134 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
+
+ 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 LOOK_KABBASIC_H
+#define LOOK_KABBASIC_H
+
+#include <kabc/addressbook.h>
+#include <qvbox.h>
+
+class KConfig;
+
+/**
+ This is a pure virtual base class that defines the
+ interface for how to display and change entries of
+ the KDE addressbook.
+
+ This basic widget does not show anything in its client space.
+ Derive it and implement its look and how the user may edit the
+ entry.
+
+ The paintEvent() has to paint the whole widget, since repaint()
+ calls will not delete the widgets background.
+ */
+class KABBasicLook : public QVBox
+{
+ Q_OBJECT
+
+ public:
+ /**
+ The constructor.
+ */
+ KABBasicLook( QWidget *parent = 0, const char *name = 0 );
+
+ /**
+ Set the entry. It will be displayed automatically.
+ */
+ virtual void setAddressee( const KABC::Addressee& addressee );
+
+ /**
+ Get the current entry.
+ */
+ virtual KABC::Addressee addressee();
+
+ /**
+ Configure the view from the configuration file.
+ */
+ virtual void restoreSettings( KConfig* );
+
+ /**
+ Save the view settings to the configuration file.
+ */
+ virtual void saveSettings( KConfig* );
+
+ /**
+ Retrieve read-write state.
+ */
+ bool isReadOnly() const;
+
+ signals:
+ /**
+ This signal is emitted when the user changed the entry.
+ */
+ void entryChanged();
+
+ /**
+ This signal indicates that the entry needs to be changed
+ immidiately in the database. This might be due to changes in
+ values that are available in menus.
+ */
+ void saveMe();
+
+ /**
+ The user acticated the email address displayed. This may happen
+ by, for example, clicking on the displayed mailto-URL.
+ */
+ void sendEmail( const QString &email );
+
+ /**
+ The user activated one of the displayed HTTP URLs. For example
+ by clicking on the displayed homepage address.
+ */
+ void browse( const QString &url );
+
+ public slots:
+ /**
+ Set read-write state.
+ */
+ virtual void setReadOnly( bool state );
+
+ private:
+ KABC::Addressee mAddressee;
+ bool mReadOnly;
+};
+
+class KABLookFactory
+{
+ public:
+ KABLookFactory( QWidget *parent = 0, const char *name = 0 );
+ virtual ~KABLookFactory();
+
+ virtual KABBasicLook *create() = 0;
+
+ /**
+ Overload this method to provide a one-liner description
+ for your look.
+ */
+ virtual QString description() = 0;
+
+ protected:
+ QWidget *mParent;
+ const char* mName;
+};
+
+#endif
diff --git a/kaddressbook/details/look_details.cpp b/kaddressbook/details/look_details.cpp
new file mode 100644
index 0000000..51ec0c0
--- a/dev/null
+++ b/kaddressbook/details/look_details.cpp
@@ -0,0 +1,419 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
+
+ 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 <kconfig.h>
+#include <kdebug.h>
+#include <kglobalsettings.h>
+#include <kinstance.h>
+#include <klocale.h>
+#include <kstandarddirs.h>
+
+#include <qcursor.h>
+#include <qdir.h>
+#include <qpainter.h>
+#include <qpopupmenu.h>
+
+#include "global.h"
+#include "kabentrypainter.h"
+
+#include "look_details.h"
+
+#define GRID 5
+
+const QString KABDetailedView::mBorderedBGDir = "kab3part/backgrounds/bordered/";
+const QString KABDetailedView::mTiledBGDir = "kab3part/backgrounds/tiled/";
+
+KABDetailedView::KABDetailedView( QWidget *parent, const char *name )
+ : KABBasicLook( parent, name ), mPainter( 0 ), mBackgroundStyle( None ),
+ mDefaultBGColor( white ), mHeadLineBGColor( darkBlue ),
+ mHeadLineTextColor( yellow ), mGrid( 3 ), mMenuBorderedBG( 0 ),
+ mMenuTiledBG( 0 )
+{
+ KToggleAction** actions[] = {
+ &mActionShowAddresses,
+ &mActionShowEmails,
+ &mActionShowPhones,
+ &mActionShowURLs
+ };
+
+ QString actionTexts[] = {
+ i18n( "Show Postal Addresses" ),
+ i18n( "Show Email Addresses" ),
+ i18n( "Show Telephone Numbers" ),
+ i18n( "Show Web Pages (URLs)" )
+ };
+
+ QFont general = KGlobalSettings::generalFont();
+ QFont fixed = KGlobalSettings::fixedFont();
+ QString gfont = general.family();
+ QString ffont = fixed.family();
+
+ int gpointsize = general.pixelSize();
+ if ( gpointsize == -1 )
+ gpointsize = general.pointSize();
+
+ int fpointsize = fixed.pixelSize();
+ if ( fpointsize == -1 )
+ fpointsize = fixed.pointSize();
+
+ mPainter = new KABEntryPainter;
+
+ mPainter->setForegroundColor( black );
+ mPainter->setHeaderColor( mHeadLineTextColor );
+ mPainter->setUseHeaderColor( mUseHeadLineBGColor );
+ mPainter->setBackgroundColor( mHeadLineBGColor );
+
+ mPainter->setHeaderFont( QFont( gfont, gpointsize + 4, QFont::Bold, true ) );
+ mPainter->setHeadLineFont( QFont( gfont, gpointsize + 2, QFont::Bold, true ) );
+ mPainter->setBodyFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
+ mPainter->setFixedFont( QFont( ffont, fpointsize, QFont::Normal, false ) );
+ mPainter->setCommentFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
+
+ const int numActions = sizeof( actions ) / sizeof( actions[ 0 ] );
+
+ for ( int count = 0; count < numActions; ++count ) {
+ *actions[ count ] = new KToggleAction( actionTexts[ count ] );
+ (*actions[ count ])->setChecked( true );
+ }
+
+ setMouseTracking( true );
+
+ setBackgroundMode( NoBackground );
+}
+
+KABDetailedView::~KABDetailedView()
+{
+ delete mPainter;
+ mPainter = 0;
+}
+
+bool KABDetailedView::getBackground( QString path, QPixmap& image )
+{
+ QMap<QString, QPixmap>::iterator pos;
+
+ pos = mBackgroundMap.find( path );
+ if ( pos == mBackgroundMap.end() ) { // the image has not been loaded previously
+ if ( image.load( path ) ) {
+ mBackgroundMap[ path ] = image;
+ return true;
+ } else
+ return false;
+ } else { // image found in cache
+ image = pos.data();
+ return true;
+ }
+}
+
+void KABDetailedView::paintEvent( QPaintEvent* )
+{
+ const int BorderSpace = mGrid;
+ QPixmap pm( width(), height() );
+ QPainter p;
+
+ QRect entryArea = QRect( BorderSpace, mGrid, width() - mGrid - BorderSpace,
+ height() - 2 * mGrid );
+ p.begin( &pm );
+
+ p.setPen( darkBlue );
+ p.setBrush( mDefaultBGColor );
+ p.drawRect( 0, 0, width(), height() );
+ switch ( mBackgroundStyle ) {
+ case Tiled:
+ p.drawTiledPixmap( 1, 1, width() - 2, height() - 2, mCurrentBackground );
+ break;
+ case Bordered:
+ p.drawTiledPixmap( 1, 1, QMIN( width() - 2, mCurrentBackground.width() ),
+ height() - 2, mCurrentBackground );
+ break;
+ case None: // no BG image defined for this entry:
+ default:
+ if ( mUseDefaultBGImage )
+ p.drawTiledPixmap( 1, 1, width() - 2, height() - 2, mDefaultBGImage );
+ break;
+ };
+
+ p.setViewport( entryArea );
+
+ mPainter->setShowAddresses( mActionShowAddresses->isChecked() );
+ mPainter->setShowEmails( mActionShowEmails->isChecked() );
+ mPainter->setShowPhones( mActionShowPhones->isChecked() );
+ mPainter->setShowURLs( mActionShowURLs->isChecked() );
+ mPainter->printAddressee( addressee(), QRect( 0, 0, entryArea.width(),
+ entryArea.height() ), &p );
+ p.end();
+ bitBlt( this, 0, 0, &pm );
+}
+
+void KABDetailedView::mouseMoveEvent( QMouseEvent *e )
+{
+ QPoint bias( mGrid, mGrid );
+ int rc;
+ bool hit = false;
+
+ if ( ( rc = mPainter->hitsEmail( e->pos() - bias ) ) != -1 )
+ hit = true;
+ else if ( ( rc = mPainter->hitsURL( e->pos() - bias ) ) != -1 )
+ hit = true;
+ else if ( ( rc = mPainter->hitsPhone( e->pos() - bias ) ) != -1 )
+ hit = true;
+ else if ( ( rc = mPainter->hitsTalk( e->pos() - bias ) ) != -1 )
+ hit = true;
+
+ if ( hit ) {
+ if ( cursor().shape() != PointingHandCursor )
+ setCursor( PointingHandCursor );
+ else if( cursor().shape() != ArrowCursor )
+ setCursor(ArrowCursor);
+ }
+}
+
+void KABDetailedView::mousePressEvent( QMouseEvent *e )
+{
+ QPopupMenu menu( this );
+ QPopupMenu *menuBG = new QPopupMenu( &menu );
+ mMenuBorderedBG = new QPopupMenu( &menu );
+ mMenuTiledBG = new QPopupMenu( &menu );
+
+ menu.insertItem( i18n( "Select Background" ), menuBG );
+ menuBG->insertItem( i18n( "Bordered Backgrounds" ), mMenuBorderedBG );
+ menuBG->insertItem( i18n( "Tiled Backgrounds" ), mMenuTiledBG );
+ menu.insertSeparator();
+
+ QPoint point = e->pos() - QPoint( mGrid, mGrid );
+ int rc;
+ QStringList dirsBorderedBG, dirsTiledBG;
+ QDir dir;
+
+ switch( e->button() ) {
+ case QMouseEvent::RightButton:
+ if ( isReadOnly() )
+ menu.setItemEnabled( menu.idAt( 0 ), false );
+ else {
+ // TODO: settings need to be saved in view options
+ dirsBorderedBG = KGlobal::instance()->dirs()->findDirs( "data", mBorderedBGDir );
+ if ( dirsBorderedBG.count() > 0 ) {
+ dir.setPath( dirsBorderedBG[ 0 ] );
+ mBorders = dir.entryList( QDir::Files );
+ for ( uint count = 0; count < mBorders.count(); ++count )
+ mMenuBorderedBG->insertItem( mBorders[ count ], count );
+
+ connect( mMenuBorderedBG, SIGNAL( activated( int ) ),
+ SLOT( slotBorderedBGSelected( int ) ) );
+ } else
+ menuBG->setItemEnabled( menuBG->idAt( 0 ), false );
+
+ dirsTiledBG = KGlobal::instance()->dirs()->findDirs( "data", mTiledBGDir );
+ if ( dirsTiledBG.count() > 0 ) {
+ dir.setPath( dirsTiledBG[ 0 ] );
+ mTiles = dir.entryList( QDir::Files );
+ for ( uint count = 0; count < mTiles.count(); ++count )
+ mMenuTiledBG->insertItem( mTiles[ count ], count );
+
+ connect( mMenuTiledBG, SIGNAL( activated( int ) ),
+ SLOT( slotTiledBGSelected( int ) ) );
+ } else
+ menuBG->setItemEnabled( menuBG->idAt( 1 ), false );
+ }
+
+ mActionShowAddresses->plug( &menu );
+ mActionShowEmails->plug( &menu );
+ mActionShowPhones->plug( &menu );
+ mActionShowURLs->plug( &menu );
+
+ menu.exec( e->globalPos() );
+ break;
+
+ case QMouseEvent::LeftButton:
+ // find whether the pointer touches an email address, URL,
+ // talk address or telephone number:
+ if ( ( rc = mPainter->hitsEmail( point ) ) != -1 ) {
+ emit sendEmail( addressee().emails()[ rc ] );
+ break;
+ }
+ if ( ( rc = mPainter->hitsURL( point ) ) != -1 ) {
+ emit browse( addressee().url().prettyURL() );
+ break;
+ }
+ if ( ( rc = mPainter->hitsPhone( point ) ) != -1 ) {
+ // not implemented yet
+ break;
+ }
+ if ( ( rc = mPainter->hitsTalk( point ) ) != -1 ) {
+ // not implemented yet
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ mMenuBorderedBG = 0;
+ mMenuTiledBG = 0;
+}
+
+void KABDetailedView::setAddressee( const KABC::Addressee &addr )
+{
+ BackgroundStyle style = None;
+ QString dir, file, styleSetting;
+ KABBasicLook::setAddressee( addr );
+
+ // TODO: preload path and styleSetting with possible preference values
+ styleSetting = addressee().custom( "kab", "BackgroundStyle" );
+ style = (BackgroundStyle)styleSetting.toInt();
+ file = addressee().custom( "kab", "BackgroundImage" );
+ if ( !file.isEmpty() ) {
+ switch ( style ) {
+ case Tiled:
+ dir = mTiledBGDir;
+ break;
+ case Bordered:
+ dir = mBorderedBGDir;
+ break;
+ case None:
+ default:
+ break;
+ }
+
+ QStringList dirs = KGlobal::instance()->dirs()->findDirs( "data", dir );
+ mBackgroundStyle = None;
+ if ( !dirs.isEmpty() ) {
+ uint count = 0;
+ for ( ; count < dirs.count(); ++count ) {
+ QDir folder;
+ folder.setPath( dirs[ count ] );
+ file = folder.absPath() + "/" + file;
+ if ( getBackground( file, mCurrentBackground ) ) {
+ mBackgroundStyle = style;
+ break;
+ }
+ }
+
+ if ( count == dirs.count() ) {
+ kdDebug(5720) << "KABDetailedView::setEntry: " << file
+ << " not locatable." << endl;
+ }
+ }
+ } else { // no background here
+ mBackgroundStyle = None;
+ mCurrentBackground.resize( 0, 0 );
+ }
+
+ repaint( false );
+}
+
+void KABDetailedView::slotBorderedBGSelected( int index )
+{
+ if ( index >= 0 && (uint)index < mBorders.count() && !isReadOnly() ) {
+ // get the selection and make it a full path
+ QString path = mBorders[ index ];
+ mBackgroundStyle = Bordered;
+ addressee().insertCustom( "kab", "BackgroundStyle",
+ QString().setNum( mBackgroundStyle ) );
+ addressee().insertCustom( "kab", "BackgroundImage", path );
+ setAddressee( addressee() );
+ }
+}
+
+void KABDetailedView::slotTiledBGSelected( int index )
+{
+ if ( index >= 0 && (uint)index < mTiles.count() && !isReadOnly() ) {
+ QString path = mTiles[ index ];
+ mBackgroundStyle = Tiled;
+ addressee().insertCustom( "kab", "BackgroundStyle",
+ QString().setNum( mBackgroundStyle ) );
+ addressee().insertCustom( "kab", "BackgroundImage", path );
+ setAddressee( addressee() );
+ }
+}
+
+void KABDetailedView::setReadOnly( bool state )
+{
+ KABBasicLook::setReadOnly( state );
+ repaint( false );
+}
+
+void KABDetailedView::restoreSettings( KConfig *config )
+{
+ QFont general = KGlobalSettings::generalFont();
+ QFont fixed = KGlobalSettings::fixedFont();
+ QString gfont = general.family();
+ QString ffont = fixed.family();
+
+ int gpointsize = general.pixelSize();
+ if ( gpointsize == -1 )
+ gpointsize = general.pointSize();
+
+ int fpointsize = fixed.pixelSize();
+ if ( fpointsize == -1 )
+ fpointsize = fixed.pointSize();
+
+ config->setGroup( ConfigView );
+
+ // load the default background image:
+ QString bgImage;
+ mUseDefaultBGImage = config->readBoolEntry( ConfigView_UseDefaultBackground, true );
+ mDefaultBGColor = config->readColorEntry( ConfigView_DefaultBackgroundColor, &white );
+ bgImage = config->readEntry( ConfigView_DefaultBackgroundImage, "konqueror/tiles/kenwimer.png" );
+
+ if ( mUseDefaultBGImage ) {
+ uint count = 0;
+ QStringList dirs = KGlobal::instance()->dirs()->findDirs( "data", "/" );
+ if ( !dirs.isEmpty() ) {
+ for ( count = 0; count < dirs.count(); ++count ) {
+ if ( getBackground( dirs[ count ] + "/" + bgImage, mDefaultBGImage ) )
+ break;
+ }
+ }
+
+ if ( count == dirs.count() ) {
+ mUseDefaultBGImage = getBackground( bgImage, mDefaultBGImage );
+ if ( !mUseDefaultBGImage )
+ kdDebug(5720) << "KABDetailedView::configure: "
+ << "default BG image selected, but could not be loaded."
+ << endl;
+ }
+ }
+
+ mDefaultBGColor = config->readColorEntry( ConfigView_DefaultBackgroundColor, &white );
+ mHeadLineBGColor = config->readColorEntry( ConfigView_HeadlineBGColor, &darkBlue );
+ mHeadLineTextColor = config->readColorEntry( ConfigView_HeadlineTextColor, &yellow );
+ mUseHeadLineBGColor = config->readBoolEntry( ConfigView_UseHeadlineBGColor, true );
+
+ if ( !mPainter )
+ mPainter = new KABEntryPainter;
+
+ mPainter->setForegroundColor( black );
+ mPainter->setHeaderColor( mHeadLineTextColor );
+ mPainter->setUseHeaderColor( mUseHeadLineBGColor );
+ mPainter->setBackgroundColor( mHeadLineBGColor );
+
+ mPainter->setHeaderFont( QFont( gfont, gpointsize + 4, QFont::Bold, true ) );
+ mPainter->setHeadLineFont( QFont( gfont, gpointsize + 2, QFont::Bold, true ) );
+ mPainter->setBodyFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
+ mPainter->setFixedFont( QFont( ffont, fpointsize, QFont::Normal, false ) );
+ mPainter->setCommentFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
+}
+
+#ifndef KAB_EMBEDDED
+#include "look_details.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/details/look_details.h b/kaddressbook/details/look_details.h
new file mode 100644
index 0000000..e8d50a9
--- a/dev/null
+++ b/kaddressbook/details/look_details.h
@@ -0,0 +1,157 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
+
+ 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 LOOK_DETAILS_H
+#define LOOK_DETAILS_H
+
+#include <kabc/addressbook.h>
+#include <kaction.h>
+#include <klocale.h>
+
+#include <qmap.h>
+#include <qpixmap.h>
+#include <qptrlist.h>
+#include <qrect.h>
+
+#include "look_basic.h"
+
+class KABEntryPainter;
+class QComboBox;
+
+/**
+ This class implements the detailed view.
+ Currently, there is no possibility to change the entry in this
+ view.
+ */
+
+class KABDetailedView : public KABBasicLook
+{
+ Q_OBJECT
+
+ public:
+ /**
+ Enum to select how the background is drawn.
+ */
+ enum BackgroundStyle
+ {
+ None,
+ Tiled,
+ Bordered
+ };
+
+ /**
+ The constructor.
+ */
+ KABDetailedView( QWidget *parent = 0, const char* name = 0 );
+
+ /**
+ The virtual destructor.
+ */
+ virtual ~KABDetailedView();
+
+ /**
+ Set the addressee.
+ */
+ void setAddressee( const KABC::Addressee& );
+
+ /**
+ Overloaded from KABBasicLook.
+ */
+ void setReadOnly( bool );
+
+ /**
+ Overloaded from KABBasicLook.
+ */
+ void restoreSettings( KConfig* );
+
+ public slots:
+ void slotBorderedBGSelected( int index );
+ void slotTiledBGSelected( int index );
+
+ protected:
+ void paintEvent( QPaintEvent* );
+ void mousePressEvent( QMouseEvent* );
+ void mouseMoveEvent( QMouseEvent* );
+
+ /**
+ A method to retrieve a background image according to the path
+ stored in the entry. It is either loaded
+ from backgrounds, that acts as a cache, or from the file
+ and added to @see backgrounds.
+ */
+ bool getBackground( QString path, QPixmap& image );
+
+ private:
+ QPtrList<QRect> mURLRects;
+ QPtrList<QRect> mEmailRects;
+ QPtrList<QRect> mPhoneRects;
+ KABEntryPainter *mPainter;
+
+ QMap<QString, QPixmap> mBackgroundMap;
+ QPixmap mCurrentBackground;
+
+ BackgroundStyle mBackgroundStyle;
+
+ bool mUseDefaultBGImage;
+ bool mUseHeadLineBGColor;
+
+ QColor mDefaultBGColor;
+ QColor mHeadLineBGColor;
+ QColor mHeadLineTextColor;
+
+ QPixmap mDefaultBGImage;
+
+ KToggleAction *mActionShowAddresses;
+ KToggleAction *mActionShowEmails;
+ KToggleAction *mActionShowPhones;
+ KToggleAction *mActionShowURLs;
+
+ const int mGrid;
+ QStringList mBorders;
+ QStringList mTiles;
+
+ QPopupMenu *mMenuBorderedBG;
+ QPopupMenu *mMenuTiledBG;
+
+ static const QString mBorderedBGDir;
+ static const QString mTiledBGDir;
+};
+
+class KABDetailedViewFactory : public KABLookFactory
+{
+ public:
+ KABDetailedViewFactory( QWidget *parent = 0, const char *name = 0 )
+ : KABLookFactory( parent, name ) {}
+
+ KABBasicLook *create()
+ {
+ return new KABDetailedView( mParent, mName );
+ }
+
+ QString description()
+ {
+ return i18n( "Detailed Style: Display all details, no modifications." );
+ }
+};
+
+#endif
diff --git a/kaddressbook/details/look_html.cpp b/kaddressbook/details/look_html.cpp
new file mode 100644
index 0000000..2a70273
--- a/dev/null
+++ b/kaddressbook/details/look_html.cpp
@@ -0,0 +1,45 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ 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 <libkdepim/addresseeview.h>
+
+#include "look_html.h"
+#include <qscrollview.h>
+KABHtmlView::KABHtmlView( QWidget *parent, const char *name )
+ : KABBasicLook( parent, name )
+{
+ mView = new KPIM::AddresseeView( this );
+}
+
+KABHtmlView::~KABHtmlView()
+{
+}
+
+void KABHtmlView::setAddressee( const KABC::Addressee &addr )
+{
+ mView->setAddressee( addr );
+}
+
+#ifndef KAB_EMBEDDED
+#include "look_html.moc"
+#endif //KAB_EMBEDDED
diff --git a/kaddressbook/details/look_html.h b/kaddressbook/details/look_html.h
new file mode 100644
index 0000000..68a02d9
--- a/dev/null
+++ b/kaddressbook/details/look_html.h
@@ -0,0 +1,75 @@
+/*
+ This file is part of KAddressBook.
+ Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
+
+ 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 LOOK_HTML_H
+#define LOOK_HTML_H
+
+#include <klocale.h>
+
+#include "look_basic.h"
+
+namespace KABC { class Addressee; }
+namespace KPIM { class AddresseeView; }
+
+class KABHtmlView : public KABBasicLook
+{
+ Q_OBJECT
+
+ public:
+ /**
+ The constructor.
+ */
+ KABHtmlView( QWidget *parent = 0, const char* name = 0 );
+
+ /**
+ The virtual destructor.
+ */
+ virtual ~KABHtmlView();
+
+ /**
+ Set the addressee.
+ */
+ void setAddressee( const KABC::Addressee& );
+
+ private:
+ KPIM::AddresseeView *mView;
+};
+
+class KABHtmlViewFactory : public KABLookFactory
+{
+ public:
+ KABHtmlViewFactory( QWidget *parent = 0, const char *name = 0 )
+ : KABLookFactory( parent, name ) {}
+
+ KABBasicLook *create()
+ {
+ return new KABHtmlView( mParent, mName );
+ }
+
+ QString description()
+ {
+ return i18n( "HTML table style." );
+ }
+};
+
+#endif