summaryrefslogtreecommitdiffabout
path: root/kaddressbook/details
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (unidiff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /kaddressbook/details
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'kaddressbook/details') (more/less context) (show 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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include <qcombobox.h>
25#include <qframe.h>
26#include <qlabel.h>
27#include <qlayout.h>
28#include <qwidgetstack.h>
29
30#include <kapplication.h>
31#include <kdebug.h>
32#include <kdialog.h>
33
34#include "look_basic.h"
35//#include "look_details.h"
36#include "look_html.h"
37
38#ifdef KAB_EMBEDDED
39#include "kabprefs.h"
40#endif //KAB_EMBEDDED
41
42
43#include "detailsviewcontainer.h"
44
45ViewContainer::ViewContainer( QWidget *parent, const char* name )
46 : QWidget( parent, name ), mCurrentLook( 0 )
47{
48 QBoxLayout *topLayout = new QVBoxLayout( this );
49 //topLayout->setMargin( KDialog::marginHint() );
50 //topLayout->setSpacing( KDialog::spacingHint() );
51 topLayout->setMargin( 0 );
52 topLayout->setSpacing( 0 );
53
54 QBoxLayout *styleLayout = new QHBoxLayout( topLayout );
55
56 QLabel *label = new QLabel( i18n("Style:"), this );
57 styleLayout->addWidget( label );
58
59 mStyleCombo = new QComboBox( this );
60 styleLayout->addWidget( mStyleCombo );
61
62 QFrame *frameRuler = new QFrame( this );
63//US frameRuler->setFrameShape( QFrame::HLine );
64//US frameRuler->setFrameShadow( QFrame::Sunken );
65//US topLayout->addWidget( frameRuler );
66
67 mDetailsStack = new QWidgetStack( this );
68 topLayout->addWidget( mDetailsStack, 1 );
69
70 registerLooks();
71
72#if 1
73 // Hide detailed view selection combo box, because we currently have
74 // only one. Reenable it when there are more detailed views.
75 label->hide();
76 mStyleCombo->hide();
77 frameRuler->hide();
78#endif
79}
80
81KABBasicLook *ViewContainer::currentLook()
82{
83 return mCurrentLook;
84}
85
86void ViewContainer::registerLooks()
87{
88 mLookFactories.append( new KABHtmlViewFactory( mDetailsStack ) );
89// mLookFactories.append( new KABDetailedViewFactory( mDetailsStack ) );
90 mStyleCombo->clear();
91
92 for ( uint i = 0; i < mLookFactories.count(); ++i )
93 mStyleCombo->insertItem( mLookFactories.at( i )->description() );
94
95 if ( !mLookFactories.isEmpty() )
96 slotStyleSelected( 0 );
97}
98
99void ViewContainer::slotStyleSelected( int index )
100{
101#ifndef KAB_EMBEDDED
102 KConfig *config = kapp->config();
103#else //KAB_EMBEDDED
104 //US I hope I got the same config object as above expected.
105 KConfig *config = KABPrefs::instance()->getConfig();
106#endif //KAB_EMBEDDED
107 KABC::Addressee addr;
108
109 if ( index >= 0 && index < mStyleCombo->count() ) {
110 if ( mCurrentLook != 0 ) {
111 mCurrentLook->saveSettings( config );
112 addr = mCurrentLook->addressee();
113
114 delete mCurrentLook;
115 mCurrentLook = 0;
116 }
117
118 KABLookFactory *factory = mLookFactories.at( index );
119 kdDebug(5720) << "ViewContainer::slotStyleSelected: "
120 << "creating look "
121 << factory->description() << endl;
122
123 mCurrentLook = factory->create();
124 mDetailsStack->raiseWidget( mCurrentLook );
125
126 connect( mCurrentLook, SIGNAL( sendEmail( const QString& ) ), this,
127 SIGNAL( sendEmail( const QString& ) ) );
128 connect( mCurrentLook, SIGNAL( browse( const QString& ) ), this,
129 SIGNAL( browse( const QString& ) ) );
130 }
131
132 mCurrentLook->restoreSettings( config );
133 mCurrentLook->setAddressee( addr );
134}
135void ViewContainer::refreshView()
136{
137 if ( mCurrentLook )
138 mCurrentLook->setAddressee( mCurrentAddressee );
139}
140
141void ViewContainer::setAddressee( const KABC::Addressee& addressee )
142{
143 if ( mCurrentLook != 0 ) {
144 if ( addressee == mCurrentAddressee )
145 return;
146 else {
147 mCurrentAddressee = addressee;
148 mCurrentLook->setAddressee( mCurrentAddressee );
149 }
150 }
151}
152
153KABC::Addressee ViewContainer::addressee()
154{
155 static KABC::Addressee empty; // do not use!
156
157 if ( !mCurrentLook )
158 return empty;
159 else
160 return mCurrentLook->addressee();
161}
162
163void ViewContainer::setReadOnly( bool state )
164{
165 if ( mCurrentLook )
166 mCurrentLook->setReadOnly( state );
167}
168
169#ifndef KAB_EMBEDDED
170#include "detailsviewcontainer.moc"
171#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#ifndef DETAILSVIEWCONTAINER_H
25#define DETAILSVIEWCONTAINER_H
26
27#include <qptrlist.h>
28
29#include "look_basic.h"
30
31class QComboBox;
32class QWidgetStack;
33
34class ViewContainer : public QWidget
35{
36 Q_OBJECT
37
38 public:
39 ViewContainer( QWidget *parent = 0, const char* name = 0 );
40
41 /**
42 Return the look currently selected. If there is none, it
43 returns zero. Do not use this pointer to store a reference
44 to a look, the user might select another one (e.g., create
45 a new object) at any time.
46 */
47 KABBasicLook *currentLook();
48 void refreshView();
49 /**
50 Return the contact currently displayed.
51 */
52 KABC::Addressee addressee();
53
54 public slots:
55 /**
56 Set the contact currently displayed.
57 */
58 void setAddressee( const KABC::Addressee& addressee );
59
60 /**
61 Set read-write state.
62 */
63 void setReadOnly( bool state );
64
65 signals:
66 /**
67 The contact has been changed.
68 */
69 void addresseeChanged();
70
71 /**
72 The user acticated the email address displayed. This may happen
73 by, for example, clicking on the displayed mailto-URL.
74 */
75 void sendEmail( const QString& );
76
77 /**
78 The user activated one of the displayed HTTP URLs. For example
79 by clicking on the displayed homepage address.
80 */
81 void browse( const QString& );
82
83 protected:
84 /**
85 A style has been selected. Overloaded from base class.
86 */
87 void slotStyleSelected( int );
88
89 /**
90 Register the available looks.
91 */
92 void registerLooks();
93
94 private:
95 KABC::Addressee mCurrentAddressee;
96 KABBasicLook *mCurrentLook;
97 QPtrList<KABLookFactory> mLookFactories;
98
99 QComboBox *mStyleCombo;
100 QWidgetStack *mDetailsStack;
101};
102
103#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 @@
1#ifndef KAB3_GLOBAL_H
2#define KAB3_GLOBAL_H
3
4// keys of configuration file settings:
5
6#define ConfigGeneral "General"
7
8#define ConfigGeneral_RememberLastContact "RememberLastContact"
9#define ConfigGeneral_ShowContactInHeader "ShowContactInHeader"
10
11#define ConfigView "View"
12
13#define ConfigView_View "ConfigView"
14
15#define ConfigView_UseKDEDefaultFonts "UseKDEDefaultFonts"
16#define ConfigView_DefaultBackgroundImage "DefaultBackgroundImage"
17#define ConfigView_DefaultBackgroundColor "DefaultBackgroundColor"
18#define ConfigView_UseDefaultBackground "UseDefaultBackground"
19
20#define ConfigView_HeadlineBGColor "HeadlineBGColor"
21#define ConfigView_UseHeadlineBGColor "UseHeadlineBGColor"
22#define ConfigView_HeadlineTextColor "HeadlineTextColor"
23#define ConfigView_HeadlineFont "HeadlineFont"
24#define ConfigView_BodyFont "BodyFont"
25#define ConfigView_DetailsFont "DetailsFont"
26
27
28#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include <kdebug.h>
25
26#include "look_basic.h"
27
28KABBasicLook::KABBasicLook( QWidget *parent, const char *name )
29 : QVBox( parent, name ), mReadOnly( false )
30{
31}
32
33void KABBasicLook::setReadOnly( bool state )
34{
35 mReadOnly = state;
36}
37
38bool KABBasicLook::isReadOnly() const
39{
40 return mReadOnly;
41}
42
43void KABBasicLook::setAddressee( const KABC::Addressee &addr )
44{
45 if ( mAddressee == addr )
46 return;
47
48 mAddressee = addr;
49 repaint( false );
50}
51
52KABC::Addressee KABBasicLook::addressee()
53{
54 return mAddressee;
55}
56
57void KABBasicLook::restoreSettings( KConfig* )
58{
59}
60
61void KABBasicLook::saveSettings( KConfig* )
62{
63}
64
65KABLookFactory::KABLookFactory( QWidget *parent, const char *name )
66 : mParent( parent ), mName( name )
67{
68}
69
70KABLookFactory::~KABLookFactory()
71{
72}
73#ifndef KAB_EMBEDDED
74#include "look_basic.moc"
75#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#ifndef LOOK_KABBASIC_H
25#define LOOK_KABBASIC_H
26
27#include <kabc/addressbook.h>
28#include <qvbox.h>
29
30class KConfig;
31
32/**
33 This is a pure virtual base class that defines the
34 interface for how to display and change entries of
35 the KDE addressbook.
36
37 This basic widget does not show anything in its client space.
38 Derive it and implement its look and how the user may edit the
39 entry.
40
41 The paintEvent() has to paint the whole widget, since repaint()
42 calls will not delete the widgets background.
43 */
44class KABBasicLook : public QVBox
45{
46 Q_OBJECT
47
48 public:
49 /**
50 The constructor.
51 */
52 KABBasicLook( QWidget *parent = 0, const char *name = 0 );
53
54 /**
55 Set the entry. It will be displayed automatically.
56 */
57 virtual void setAddressee( const KABC::Addressee& addressee );
58
59 /**
60 Get the current entry.
61 */
62 virtual KABC::Addressee addressee();
63
64 /**
65 Configure the view from the configuration file.
66 */
67 virtual void restoreSettings( KConfig* );
68
69 /**
70 Save the view settings to the configuration file.
71 */
72 virtual void saveSettings( KConfig* );
73
74 /**
75 Retrieve read-write state.
76 */
77 bool isReadOnly() const;
78
79 signals:
80 /**
81 This signal is emitted when the user changed the entry.
82 */
83 void entryChanged();
84
85 /**
86 This signal indicates that the entry needs to be changed
87 immidiately in the database. This might be due to changes in
88 values that are available in menus.
89 */
90 void saveMe();
91
92 /**
93 The user acticated the email address displayed. This may happen
94 by, for example, clicking on the displayed mailto-URL.
95 */
96 void sendEmail( const QString &email );
97
98 /**
99 The user activated one of the displayed HTTP URLs. For example
100 by clicking on the displayed homepage address.
101 */
102 void browse( const QString &url );
103
104 public slots:
105 /**
106 Set read-write state.
107 */
108 virtual void setReadOnly( bool state );
109
110 private:
111 KABC::Addressee mAddressee;
112 bool mReadOnly;
113};
114
115class KABLookFactory
116{
117 public:
118 KABLookFactory( QWidget *parent = 0, const char *name = 0 );
119 virtual ~KABLookFactory();
120
121 virtual KABBasicLook *create() = 0;
122
123 /**
124 Overload this method to provide a one-liner description
125 for your look.
126 */
127 virtual QString description() = 0;
128
129 protected:
130 QWidget *mParent;
131 const char* mName;
132};
133
134#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include <kconfig.h>
25#include <kdebug.h>
26#include <kglobalsettings.h>
27#include <kinstance.h>
28#include <klocale.h>
29#include <kstandarddirs.h>
30
31#include <qcursor.h>
32#include <qdir.h>
33#include <qpainter.h>
34#include <qpopupmenu.h>
35
36#include "global.h"
37#include "kabentrypainter.h"
38
39#include "look_details.h"
40
41#define GRID 5
42
43const QString KABDetailedView::mBorderedBGDir = "kab3part/backgrounds/bordered/";
44const QString KABDetailedView::mTiledBGDir = "kab3part/backgrounds/tiled/";
45
46KABDetailedView::KABDetailedView( QWidget *parent, const char *name )
47 : KABBasicLook( parent, name ), mPainter( 0 ), mBackgroundStyle( None ),
48 mDefaultBGColor( white ), mHeadLineBGColor( darkBlue ),
49 mHeadLineTextColor( yellow ), mGrid( 3 ), mMenuBorderedBG( 0 ),
50 mMenuTiledBG( 0 )
51{
52 KToggleAction** actions[] = {
53 &mActionShowAddresses,
54 &mActionShowEmails,
55 &mActionShowPhones,
56 &mActionShowURLs
57 };
58
59 QString actionTexts[] = {
60 i18n( "Show Postal Addresses" ),
61 i18n( "Show Email Addresses" ),
62 i18n( "Show Telephone Numbers" ),
63 i18n( "Show Web Pages (URLs)" )
64 };
65
66 QFont general = KGlobalSettings::generalFont();
67 QFont fixed = KGlobalSettings::fixedFont();
68 QString gfont = general.family();
69 QString ffont = fixed.family();
70
71 int gpointsize = general.pixelSize();
72 if ( gpointsize == -1 )
73 gpointsize = general.pointSize();
74
75 int fpointsize = fixed.pixelSize();
76 if ( fpointsize == -1 )
77 fpointsize = fixed.pointSize();
78
79 mPainter = new KABEntryPainter;
80
81 mPainter->setForegroundColor( black );
82 mPainter->setHeaderColor( mHeadLineTextColor );
83 mPainter->setUseHeaderColor( mUseHeadLineBGColor );
84 mPainter->setBackgroundColor( mHeadLineBGColor );
85
86 mPainter->setHeaderFont( QFont( gfont, gpointsize + 4, QFont::Bold, true ) );
87 mPainter->setHeadLineFont( QFont( gfont, gpointsize + 2, QFont::Bold, true ) );
88 mPainter->setBodyFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
89 mPainter->setFixedFont( QFont( ffont, fpointsize, QFont::Normal, false ) );
90 mPainter->setCommentFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
91
92 const int numActions = sizeof( actions ) / sizeof( actions[ 0 ] );
93
94 for ( int count = 0; count < numActions; ++count ) {
95 *actions[ count ] = new KToggleAction( actionTexts[ count ] );
96 (*actions[ count ])->setChecked( true );
97 }
98
99 setMouseTracking( true );
100
101 setBackgroundMode( NoBackground );
102}
103
104KABDetailedView::~KABDetailedView()
105{
106 delete mPainter;
107 mPainter = 0;
108}
109
110bool KABDetailedView::getBackground( QString path, QPixmap& image )
111{
112 QMap<QString, QPixmap>::iterator pos;
113
114 pos = mBackgroundMap.find( path );
115 if ( pos == mBackgroundMap.end() ) { // the image has not been loaded previously
116 if ( image.load( path ) ) {
117 mBackgroundMap[ path ] = image;
118 return true;
119 } else
120 return false;
121 } else { // image found in cache
122 image = pos.data();
123 return true;
124 }
125}
126
127void KABDetailedView::paintEvent( QPaintEvent* )
128{
129 const int BorderSpace = mGrid;
130 QPixmap pm( width(), height() );
131 QPainter p;
132
133 QRect entryArea = QRect( BorderSpace, mGrid, width() - mGrid - BorderSpace,
134 height() - 2 * mGrid );
135 p.begin( &pm );
136
137 p.setPen( darkBlue );
138 p.setBrush( mDefaultBGColor );
139 p.drawRect( 0, 0, width(), height() );
140 switch ( mBackgroundStyle ) {
141 case Tiled:
142 p.drawTiledPixmap( 1, 1, width() - 2, height() - 2, mCurrentBackground );
143 break;
144 case Bordered:
145 p.drawTiledPixmap( 1, 1, QMIN( width() - 2, mCurrentBackground.width() ),
146 height() - 2, mCurrentBackground );
147 break;
148 case None: // no BG image defined for this entry:
149 default:
150 if ( mUseDefaultBGImage )
151 p.drawTiledPixmap( 1, 1, width() - 2, height() - 2, mDefaultBGImage );
152 break;
153 };
154
155 p.setViewport( entryArea );
156
157 mPainter->setShowAddresses( mActionShowAddresses->isChecked() );
158 mPainter->setShowEmails( mActionShowEmails->isChecked() );
159 mPainter->setShowPhones( mActionShowPhones->isChecked() );
160 mPainter->setShowURLs( mActionShowURLs->isChecked() );
161 mPainter->printAddressee( addressee(), QRect( 0, 0, entryArea.width(),
162 entryArea.height() ), &p );
163 p.end();
164 bitBlt( this, 0, 0, &pm );
165}
166
167void KABDetailedView::mouseMoveEvent( QMouseEvent *e )
168{
169 QPoint bias( mGrid, mGrid );
170 int rc;
171 bool hit = false;
172
173 if ( ( rc = mPainter->hitsEmail( e->pos() - bias ) ) != -1 )
174 hit = true;
175 else if ( ( rc = mPainter->hitsURL( e->pos() - bias ) ) != -1 )
176 hit = true;
177 else if ( ( rc = mPainter->hitsPhone( e->pos() - bias ) ) != -1 )
178 hit = true;
179 else if ( ( rc = mPainter->hitsTalk( e->pos() - bias ) ) != -1 )
180 hit = true;
181
182 if ( hit ) {
183 if ( cursor().shape() != PointingHandCursor )
184 setCursor( PointingHandCursor );
185 else if( cursor().shape() != ArrowCursor )
186 setCursor(ArrowCursor);
187 }
188}
189
190void KABDetailedView::mousePressEvent( QMouseEvent *e )
191{
192 QPopupMenu menu( this );
193 QPopupMenu *menuBG = new QPopupMenu( &menu );
194 mMenuBorderedBG = new QPopupMenu( &menu );
195 mMenuTiledBG = new QPopupMenu( &menu );
196
197 menu.insertItem( i18n( "Select Background" ), menuBG );
198 menuBG->insertItem( i18n( "Bordered Backgrounds" ), mMenuBorderedBG );
199 menuBG->insertItem( i18n( "Tiled Backgrounds" ), mMenuTiledBG );
200 menu.insertSeparator();
201
202 QPoint point = e->pos() - QPoint( mGrid, mGrid );
203 int rc;
204 QStringList dirsBorderedBG, dirsTiledBG;
205 QDir dir;
206
207 switch( e->button() ) {
208 case QMouseEvent::RightButton:
209 if ( isReadOnly() )
210 menu.setItemEnabled( menu.idAt( 0 ), false );
211 else {
212 // TODO: settings need to be saved in view options
213 dirsBorderedBG = KGlobal::instance()->dirs()->findDirs( "data", mBorderedBGDir );
214 if ( dirsBorderedBG.count() > 0 ) {
215 dir.setPath( dirsBorderedBG[ 0 ] );
216 mBorders = dir.entryList( QDir::Files );
217 for ( uint count = 0; count < mBorders.count(); ++count )
218 mMenuBorderedBG->insertItem( mBorders[ count ], count );
219
220 connect( mMenuBorderedBG, SIGNAL( activated( int ) ),
221 SLOT( slotBorderedBGSelected( int ) ) );
222 } else
223 menuBG->setItemEnabled( menuBG->idAt( 0 ), false );
224
225 dirsTiledBG = KGlobal::instance()->dirs()->findDirs( "data", mTiledBGDir );
226 if ( dirsTiledBG.count() > 0 ) {
227 dir.setPath( dirsTiledBG[ 0 ] );
228 mTiles = dir.entryList( QDir::Files );
229 for ( uint count = 0; count < mTiles.count(); ++count )
230 mMenuTiledBG->insertItem( mTiles[ count ], count );
231
232 connect( mMenuTiledBG, SIGNAL( activated( int ) ),
233 SLOT( slotTiledBGSelected( int ) ) );
234 } else
235 menuBG->setItemEnabled( menuBG->idAt( 1 ), false );
236 }
237
238 mActionShowAddresses->plug( &menu );
239 mActionShowEmails->plug( &menu );
240 mActionShowPhones->plug( &menu );
241 mActionShowURLs->plug( &menu );
242
243 menu.exec( e->globalPos() );
244 break;
245
246 case QMouseEvent::LeftButton:
247 // find whether the pointer touches an email address, URL,
248 // talk address or telephone number:
249 if ( ( rc = mPainter->hitsEmail( point ) ) != -1 ) {
250 emit sendEmail( addressee().emails()[ rc ] );
251 break;
252 }
253 if ( ( rc = mPainter->hitsURL( point ) ) != -1 ) {
254 emit browse( addressee().url().prettyURL() );
255 break;
256 }
257 if ( ( rc = mPainter->hitsPhone( point ) ) != -1 ) {
258 // not implemented yet
259 break;
260 }
261 if ( ( rc = mPainter->hitsTalk( point ) ) != -1 ) {
262 // not implemented yet
263 break;
264 }
265 break;
266 default:
267 break;
268 }
269
270 mMenuBorderedBG = 0;
271 mMenuTiledBG = 0;
272}
273
274void KABDetailedView::setAddressee( const KABC::Addressee &addr )
275{
276 BackgroundStyle style = None;
277 QString dir, file, styleSetting;
278 KABBasicLook::setAddressee( addr );
279
280 // TODO: preload path and styleSetting with possible preference values
281 styleSetting = addressee().custom( "kab", "BackgroundStyle" );
282 style = (BackgroundStyle)styleSetting.toInt();
283 file = addressee().custom( "kab", "BackgroundImage" );
284 if ( !file.isEmpty() ) {
285 switch ( style ) {
286 case Tiled:
287 dir = mTiledBGDir;
288 break;
289 case Bordered:
290 dir = mBorderedBGDir;
291 break;
292 case None:
293 default:
294 break;
295 }
296
297 QStringList dirs = KGlobal::instance()->dirs()->findDirs( "data", dir );
298 mBackgroundStyle = None;
299 if ( !dirs.isEmpty() ) {
300 uint count = 0;
301 for ( ; count < dirs.count(); ++count ) {
302 QDir folder;
303 folder.setPath( dirs[ count ] );
304 file = folder.absPath() + "/" + file;
305 if ( getBackground( file, mCurrentBackground ) ) {
306 mBackgroundStyle = style;
307 break;
308 }
309 }
310
311 if ( count == dirs.count() ) {
312 kdDebug(5720) << "KABDetailedView::setEntry: " << file
313 << " not locatable." << endl;
314 }
315 }
316 } else { // no background here
317 mBackgroundStyle = None;
318 mCurrentBackground.resize( 0, 0 );
319 }
320
321 repaint( false );
322}
323
324void KABDetailedView::slotBorderedBGSelected( int index )
325{
326 if ( index >= 0 && (uint)index < mBorders.count() && !isReadOnly() ) {
327 // get the selection and make it a full path
328 QString path = mBorders[ index ];
329 mBackgroundStyle = Bordered;
330 addressee().insertCustom( "kab", "BackgroundStyle",
331 QString().setNum( mBackgroundStyle ) );
332 addressee().insertCustom( "kab", "BackgroundImage", path );
333 setAddressee( addressee() );
334 }
335}
336
337void KABDetailedView::slotTiledBGSelected( int index )
338{
339 if ( index >= 0 && (uint)index < mTiles.count() && !isReadOnly() ) {
340 QString path = mTiles[ index ];
341 mBackgroundStyle = Tiled;
342 addressee().insertCustom( "kab", "BackgroundStyle",
343 QString().setNum( mBackgroundStyle ) );
344 addressee().insertCustom( "kab", "BackgroundImage", path );
345 setAddressee( addressee() );
346 }
347}
348
349void KABDetailedView::setReadOnly( bool state )
350{
351 KABBasicLook::setReadOnly( state );
352 repaint( false );
353}
354
355void KABDetailedView::restoreSettings( KConfig *config )
356{
357 QFont general = KGlobalSettings::generalFont();
358 QFont fixed = KGlobalSettings::fixedFont();
359 QString gfont = general.family();
360 QString ffont = fixed.family();
361
362 int gpointsize = general.pixelSize();
363 if ( gpointsize == -1 )
364 gpointsize = general.pointSize();
365
366 int fpointsize = fixed.pixelSize();
367 if ( fpointsize == -1 )
368 fpointsize = fixed.pointSize();
369
370 config->setGroup( ConfigView );
371
372 // load the default background image:
373 QString bgImage;
374 mUseDefaultBGImage = config->readBoolEntry( ConfigView_UseDefaultBackground, true );
375 mDefaultBGColor = config->readColorEntry( ConfigView_DefaultBackgroundColor, &white );
376 bgImage = config->readEntry( ConfigView_DefaultBackgroundImage, "konqueror/tiles/kenwimer.png" );
377
378 if ( mUseDefaultBGImage ) {
379 uint count = 0;
380 QStringList dirs = KGlobal::instance()->dirs()->findDirs( "data", "/" );
381 if ( !dirs.isEmpty() ) {
382 for ( count = 0; count < dirs.count(); ++count ) {
383 if ( getBackground( dirs[ count ] + "/" + bgImage, mDefaultBGImage ) )
384 break;
385 }
386 }
387
388 if ( count == dirs.count() ) {
389 mUseDefaultBGImage = getBackground( bgImage, mDefaultBGImage );
390 if ( !mUseDefaultBGImage )
391 kdDebug(5720) << "KABDetailedView::configure: "
392 << "default BG image selected, but could not be loaded."
393 << endl;
394 }
395 }
396
397 mDefaultBGColor = config->readColorEntry( ConfigView_DefaultBackgroundColor, &white );
398 mHeadLineBGColor = config->readColorEntry( ConfigView_HeadlineBGColor, &darkBlue );
399 mHeadLineTextColor = config->readColorEntry( ConfigView_HeadlineTextColor, &yellow );
400 mUseHeadLineBGColor = config->readBoolEntry( ConfigView_UseHeadlineBGColor, true );
401
402 if ( !mPainter )
403 mPainter = new KABEntryPainter;
404
405 mPainter->setForegroundColor( black );
406 mPainter->setHeaderColor( mHeadLineTextColor );
407 mPainter->setUseHeaderColor( mUseHeadLineBGColor );
408 mPainter->setBackgroundColor( mHeadLineBGColor );
409
410 mPainter->setHeaderFont( QFont( gfont, gpointsize + 4, QFont::Bold, true ) );
411 mPainter->setHeadLineFont( QFont( gfont, gpointsize + 2, QFont::Bold, true ) );
412 mPainter->setBodyFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
413 mPainter->setFixedFont( QFont( ffont, fpointsize, QFont::Normal, false ) );
414 mPainter->setCommentFont( QFont( gfont, gpointsize, QFont::Normal, false ) );
415}
416
417#ifndef KAB_EMBEDDED
418#include "look_details.moc"
419#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 1996-2002 Mirko Boehm <mirko@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#ifndef LOOK_DETAILS_H
25#define LOOK_DETAILS_H
26
27#include <kabc/addressbook.h>
28#include <kaction.h>
29#include <klocale.h>
30
31#include <qmap.h>
32#include <qpixmap.h>
33#include <qptrlist.h>
34#include <qrect.h>
35
36#include "look_basic.h"
37
38class KABEntryPainter;
39class QComboBox;
40
41/**
42 This class implements the detailed view.
43 Currently, there is no possibility to change the entry in this
44 view.
45 */
46
47class KABDetailedView : public KABBasicLook
48{
49 Q_OBJECT
50
51 public:
52 /**
53 Enum to select how the background is drawn.
54 */
55 enum BackgroundStyle
56 {
57 None,
58 Tiled,
59 Bordered
60 };
61
62 /**
63 The constructor.
64 */
65 KABDetailedView( QWidget *parent = 0, const char* name = 0 );
66
67 /**
68 The virtual destructor.
69 */
70 virtual ~KABDetailedView();
71
72 /**
73 Set the addressee.
74 */
75 void setAddressee( const KABC::Addressee& );
76
77 /**
78 Overloaded from KABBasicLook.
79 */
80 void setReadOnly( bool );
81
82 /**
83 Overloaded from KABBasicLook.
84 */
85 void restoreSettings( KConfig* );
86
87 public slots:
88 void slotBorderedBGSelected( int index );
89 void slotTiledBGSelected( int index );
90
91 protected:
92 void paintEvent( QPaintEvent* );
93 void mousePressEvent( QMouseEvent* );
94 void mouseMoveEvent( QMouseEvent* );
95
96 /**
97 A method to retrieve a background image according to the path
98 stored in the entry. It is either loaded
99 from backgrounds, that acts as a cache, or from the file
100 and added to @see backgrounds.
101 */
102 bool getBackground( QString path, QPixmap& image );
103
104 private:
105 QPtrList<QRect> mURLRects;
106 QPtrList<QRect> mEmailRects;
107 QPtrList<QRect> mPhoneRects;
108 KABEntryPainter *mPainter;
109
110 QMap<QString, QPixmap> mBackgroundMap;
111 QPixmap mCurrentBackground;
112
113 BackgroundStyle mBackgroundStyle;
114
115 bool mUseDefaultBGImage;
116 bool mUseHeadLineBGColor;
117
118 QColor mDefaultBGColor;
119 QColor mHeadLineBGColor;
120 QColor mHeadLineTextColor;
121
122 QPixmap mDefaultBGImage;
123
124 KToggleAction *mActionShowAddresses;
125 KToggleAction *mActionShowEmails;
126 KToggleAction *mActionShowPhones;
127 KToggleAction *mActionShowURLs;
128
129 const int mGrid;
130 QStringList mBorders;
131 QStringList mTiles;
132
133 QPopupMenu *mMenuBorderedBG;
134 QPopupMenu *mMenuTiledBG;
135
136 static const QString mBorderedBGDir;
137 static const QString mTiledBGDir;
138};
139
140class KABDetailedViewFactory : public KABLookFactory
141{
142 public:
143 KABDetailedViewFactory( QWidget *parent = 0, const char *name = 0 )
144 : KABLookFactory( parent, name ) {}
145
146 KABBasicLook *create()
147 {
148 return new KABDetailedView( mParent, mName );
149 }
150
151 QString description()
152 {
153 return i18n( "Detailed Style: Display all details, no modifications." );
154 }
155};
156
157#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include <libkdepim/addresseeview.h>
25
26#include "look_html.h"
27#include <qscrollview.h>
28KABHtmlView::KABHtmlView( QWidget *parent, const char *name )
29 : KABBasicLook( parent, name )
30{
31 mView = new KPIM::AddresseeView( this );
32}
33
34KABHtmlView::~KABHtmlView()
35{
36}
37
38void KABHtmlView::setAddressee( const KABC::Addressee &addr )
39{
40 mView->setAddressee( addr );
41}
42
43#ifndef KAB_EMBEDDED
44#include "look_html.moc"
45#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 @@
1/*
2 This file is part of KAddressBook.
3 Copyright (c) 2003 Tobias Koenig <tokoe@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#ifndef LOOK_HTML_H
25#define LOOK_HTML_H
26
27#include <klocale.h>
28
29#include "look_basic.h"
30
31namespace KABC { class Addressee; }
32namespace KPIM { class AddresseeView; }
33
34class KABHtmlView : public KABBasicLook
35{
36 Q_OBJECT
37
38 public:
39 /**
40 The constructor.
41 */
42 KABHtmlView( QWidget *parent = 0, const char* name = 0 );
43
44 /**
45 The virtual destructor.
46 */
47 virtual ~KABHtmlView();
48
49 /**
50 Set the addressee.
51 */
52 void setAddressee( const KABC::Addressee& );
53
54 private:
55 KPIM::AddresseeView *mView;
56};
57
58class KABHtmlViewFactory : public KABLookFactory
59{
60 public:
61 KABHtmlViewFactory( QWidget *parent = 0, const char *name = 0 )
62 : KABLookFactory( parent, name ) {}
63
64 KABBasicLook *create()
65 {
66 return new KABHtmlView( mParent, mName );
67 }
68
69 QString description()
70 {
71 return i18n( "HTML table style." );
72 }
73};
74
75#endif