summaryrefslogtreecommitdiffabout
path: root/kaddressbook/views
Unidiff
Diffstat (limited to 'kaddressbook/views') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/views/kaddressbookcardview.cpp20
-rw-r--r--kaddressbook/views/kaddressbookcardview.h2
-rw-r--r--kaddressbook/views/kaddressbookiconview.cpp17
-rw-r--r--kaddressbook/views/kaddressbookiconview.h2
-rw-r--r--kaddressbook/views/kaddressbooktableview.cpp18
-rw-r--r--kaddressbook/views/kaddressbooktableview.h2
6 files changed, 57 insertions, 4 deletions
diff --git a/kaddressbook/views/kaddressbookcardview.cpp b/kaddressbook/views/kaddressbookcardview.cpp
index 4babf67..a7bf6c9 100644
--- a/kaddressbook/views/kaddressbookcardview.cpp
+++ b/kaddressbook/views/kaddressbookcardview.cpp
@@ -1,448 +1,464 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4 4
5 This program is free software; you can redistribute it and/or modify 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 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 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 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 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. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qdragobject.h> 24#include <qdragobject.h>
25#include <qevent.h> 25#include <qevent.h>
26#include <qiconview.h> 26#include <qiconview.h>
27#include <qlayout.h> 27#include <qlayout.h>
28#include <qstringlist.h> 28#include <qstringlist.h>
29#include <qregexp.h> 29#include <qregexp.h>
30#include <qapplication.h>
30 31
31#include <kabc/addressbook.h> 32#include <kabc/addressbook.h>
32#include <kabc/addressee.h> 33#include <kabc/addressee.h>
33#include <kconfig.h> 34#include <kconfig.h>
34#include <kdebug.h> 35#include <kdebug.h>
35#include <klocale.h> 36#include <klocale.h>
36 37
37#include "kabprefs.h" 38#include "kabprefs.h"
38#include "viewmanager.h" 39#include "viewmanager.h"
39 40
40#include "kaddressbookcardview.h" 41#include "kaddressbookcardview.h"
41 42
42#ifndef KAB_EMBEDDED 43#ifndef KAB_EMBEDDED
43extern "C" { 44extern "C" {
44 void *init_libkaddrbk_cardview() 45 void *init_libkaddrbk_cardview()
45 { 46 {
46 return ( new CardViewFactory ); 47 return ( new CardViewFactory );
47 } 48 }
48} 49}
49#endif //KAB_EMBEDDED 50#endif //KAB_EMBEDDED
50 51
51//////////////////////////////// 52////////////////////////////////
52// AddresseeCardViewItem (internal class) 53// AddresseeCardViewItem (internal class)
53class AddresseeCardViewItem : public CardViewItem 54class AddresseeCardViewItem : public CardViewItem
54{ 55{
55 public: 56 public:
56 AddresseeCardViewItem(const KABC::Field::List &fields, 57 AddresseeCardViewItem(const KABC::Field::List &fields,
57 bool showEmptyFields, 58 bool showEmptyFields,
58 KABC::AddressBook *doc, const KABC::Addressee &a, 59 KABC::AddressBook *doc, const KABC::Addressee &a,
59 CardView *parent) 60 CardView *parent)
60 : CardViewItem(parent, a.formattedName()), 61 : CardViewItem(parent, a.formattedName()),
61 mFields( fields ), mShowEmptyFields(showEmptyFields), 62 mFields( fields ), mShowEmptyFields(showEmptyFields),
62 mDocument(doc), mAddressee(a) 63 mDocument(doc), mAddressee(a)
63 { 64 {
64 if ( mFields.isEmpty() ) { 65 if ( mFields.isEmpty() ) {
65 mFields = KABC::Field::defaultFields(); 66 mFields = KABC::Field::defaultFields();
66 } 67 }
67 refresh(); 68 refresh();
68 } 69 }
69 70
70 const KABC::Addressee &addressee() const { return mAddressee; } 71 const KABC::Addressee &addressee() const { return mAddressee; }
71 72
72 void refresh() 73 void refresh()
73 { 74 {
74 // Update our addressee, since it may have changed elsewhere 75 // Update our addressee, since it may have changed elsewhere
75 mAddressee = mDocument->findByUid(mAddressee.uid()); 76 mAddressee = mDocument->findByUid(mAddressee.uid());
76 77
77 if (!mAddressee.isEmpty()) 78 if (!mAddressee.isEmpty())
78 { 79 {
79 clearFields(); 80 clearFields();
80 81
81 // Try all the selected fields until we find one with text. 82 // Try all the selected fields until we find one with text.
82 // This will limit the number of unlabeled icons in the view 83 // This will limit the number of unlabeled icons in the view
83 KABC::Field::List::Iterator iter; 84 KABC::Field::List::Iterator iter;
84 for (iter = mFields.begin(); iter != mFields.end(); ++iter) 85 for (iter = mFields.begin(); iter != mFields.end(); ++iter)
85 { 86 {
86 // insert empty fields or not? not doing so saves a bit of memory and CPU 87 // insert empty fields or not? not doing so saves a bit of memory and CPU
87 // (during geometry calculations), but prevents having equally 88 // (during geometry calculations), but prevents having equally
88 // wide label columns in all cards, unless CardViewItem/CardView search 89 // wide label columns in all cards, unless CardViewItem/CardView search
89 // globally for the widest label. (anders) 90 // globally for the widest label. (anders)
90 //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty()) 91 //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty())
91 insertField((*iter)->label(), (*iter)->value( mAddressee )); 92 insertField((*iter)->label(), (*iter)->value( mAddressee ));
92 } 93 }
93 94
94 // We might want to make this the first field. hmm... -mpilone 95 // We might want to make this the first field. hmm... -mpilone
95 setCaption( mAddressee.realName() ); 96 setCaption( mAddressee.realName() );
96 } 97 }
97 } 98 }
98 99
99 private: 100 private:
100 KABC::Field::List mFields; 101 KABC::Field::List mFields;
101 bool mShowEmptyFields; 102 bool mShowEmptyFields;
102 KABC::AddressBook *mDocument; 103 KABC::AddressBook *mDocument;
103 KABC::Addressee mAddressee; 104 KABC::Addressee mAddressee;
104}; 105};
105 106
106/////////////////////////////// 107///////////////////////////////
107// AddresseeCardView 108// AddresseeCardView
108 109
109AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name) 110AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name)
110 : CardView(parent, name) 111 : CardView(parent, name)
111{ 112{
112 setAcceptDrops(true); 113 setAcceptDrops(true);
113} 114}
114 115
115AddresseeCardView::~AddresseeCardView() 116AddresseeCardView::~AddresseeCardView()
116{ 117{
117} 118}
118 119
119 120
120void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e) 121void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e)
121{ 122{
122#ifndef KAB_EMBEDDED 123#ifndef KAB_EMBEDDED
123 if (QTextDrag::canDecode(e)) 124 if (QTextDrag::canDecode(e))
124 e->accept(); 125 e->accept();
125#else //KAB_EMBEDDED 126#else //KAB_EMBEDDED
126qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented"); 127qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented");
127#endif //KAB_EMBEDDED 128#endif //KAB_EMBEDDED
128} 129}
129 130
130void AddresseeCardView::dropEvent(QDropEvent *e) 131void AddresseeCardView::dropEvent(QDropEvent *e)
131{ 132{
132 emit addresseeDropped(e); 133 emit addresseeDropped(e);
133} 134}
134 135
135void AddresseeCardView::startDrag() 136void AddresseeCardView::startDrag()
136{ 137{
137 emit startAddresseeDrag(); 138 emit startAddresseeDrag();
138} 139}
139 140
140 141
141/////////////////////////////// 142///////////////////////////////
142// KAddressBookCardView 143// KAddressBookCardView
143 144
144KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab, 145KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab,
145 QWidget *parent, const char *name ) 146 QWidget *parent, const char *name )
146 : KAddressBookView( ab, parent, name ) 147 : KAddressBookView( ab, parent, name )
147{ 148{
148 mShowEmptyFields = false; 149 mShowEmptyFields = false;
149 150
150 // Init the GUI 151 // Init the GUI
151 QVBoxLayout *layout = new QVBoxLayout(viewWidget()); 152 QVBoxLayout *layout = new QVBoxLayout(viewWidget());
152 153
153 mCardView = new AddresseeCardView(viewWidget(), "mCardView"); 154 mCardView = new AddresseeCardView(viewWidget(), "mCardView");
154 mCardView->setSelectionMode(CardView::Extended); 155 mCardView->setSelectionMode(CardView::Extended);
155 layout->addWidget(mCardView); 156 layout->addWidget(mCardView);
156 157
157 // Connect up the signals 158 // Connect up the signals
158 connect(mCardView, SIGNAL(executed(CardViewItem *)), 159 connect(mCardView, SIGNAL(executed(CardViewItem *)),
159 this, SLOT(addresseeExecuted(CardViewItem *))); 160 this, SLOT(addresseeExecuted(CardViewItem *)));
160 connect(mCardView, SIGNAL(selectionChanged()), 161 connect(mCardView, SIGNAL(selectionChanged()),
161 this, SLOT(addresseeSelected())); 162 this, SLOT(addresseeSelected()));
162 connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)), 163 connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)),
163 this, SIGNAL(dropped(QDropEvent*))); 164 this, SIGNAL(dropped(QDropEvent*)));
164 connect(mCardView, SIGNAL(startAddresseeDrag()), 165 connect(mCardView, SIGNAL(startAddresseeDrag()),
165 this, SIGNAL(startDrag())); 166 this, SIGNAL(startDrag()));
166} 167}
167 168
168KAddressBookCardView::~KAddressBookCardView() 169KAddressBookCardView::~KAddressBookCardView()
169{ 170{
170} 171}
171 172
173void KAddressBookCardView::scrollUP()
174{
175 QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 );
176 QApplication::postEvent( mCardView, ev );
177
178}
179void KAddressBookCardView::scrollDOWN()
180{
181 QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 );
182 QApplication::postEvent( mCardView, ev );
183}
172void KAddressBookCardView::readConfig(KConfig *config) 184void KAddressBookCardView::readConfig(KConfig *config)
173{ 185{
174 KAddressBookView::readConfig(config); 186 KAddressBookView::readConfig(config);
175 187
176 // costum colors? 188 // costum colors?
177 if ( config->readBoolEntry( "EnableCustomColors", false ) ) 189 if ( config->readBoolEntry( "EnableCustomColors", false ) )
178 { 190 {
179 QPalette p( mCardView->palette() ); 191 QPalette p( mCardView->palette() );
180 QColor c = p.color(QPalette::Normal, QColorGroup::Base ); 192 QColor c = p.color(QPalette::Normal, QColorGroup::Base );
181 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); 193 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) );
182 c = p.color(QPalette::Normal, QColorGroup::Text ); 194 c = p.color(QPalette::Normal, QColorGroup::Text );
183 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); 195 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) );
184 c = p.color(QPalette::Normal, QColorGroup::Button ); 196 c = p.color(QPalette::Normal, QColorGroup::Button );
185 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); 197 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) );
186 c = p.color(QPalette::Normal, QColorGroup::ButtonText ); 198 c = p.color(QPalette::Normal, QColorGroup::ButtonText );
187 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); 199 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) );
188 c = p.color(QPalette::Normal, QColorGroup::Highlight ); 200 c = p.color(QPalette::Normal, QColorGroup::Highlight );
189 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); 201 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) );
190 c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); 202 c = p.color(QPalette::Normal, QColorGroup::HighlightedText );
191 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); 203 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) );
192 mCardView->viewport()->setPalette( p ); 204 mCardView->viewport()->setPalette( p );
193 } 205 }
194 else 206 else
195 { 207 {
196 // needed if turned off during a session. 208 // needed if turned off during a session.
197 mCardView->viewport()->setPalette( mCardView->palette() ); 209 mCardView->viewport()->setPalette( mCardView->palette() );
198 } 210 }
199 211
200 //custom fonts? 212 //custom fonts?
201 QFont f( font() ); 213 QFont f( font() );
202 if ( config->readBoolEntry( "EnableCustomFonts", false ) ) 214 if ( config->readBoolEntry( "EnableCustomFonts", false ) )
203 { 215 {
204 mCardView->setFont( config->readFontEntry( "TextFont", &f) ); 216 mCardView->setFont( config->readFontEntry( "TextFont", &f) );
205 f.setBold( true ); 217 f.setBold( true );
206 mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); 218 mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) );
207 } 219 }
208 else 220 else
209 { 221 {
210 mCardView->setFont( f ); 222 mCardView->setFont( f );
211 f.setBold( true ); 223 f.setBold( true );
212 mCardView->setHeaderFont( f ); 224 mCardView->setHeaderFont( f );
213 } 225 }
214 226
215 mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true)); 227 mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true));
216 mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators", 228 mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators",
217 true)); 229 true));
218 mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false)); 230 mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false));
219 mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false); 231 mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false);
220 232
221 mCardView->setShowEmptyFields( mShowEmptyFields ); 233 mCardView->setShowEmptyFields( mShowEmptyFields );
222 234
223 mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) ); 235 mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) );
224 mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) ); 236 mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) );
225 mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) ); 237 mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) );
226 mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) ); 238 mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) );
227 239
228 disconnect(mCardView, SIGNAL(executed(CardViewItem *)), 240 disconnect(mCardView, SIGNAL(executed(CardViewItem *)),
229 this, SLOT(addresseeExecuted(CardViewItem *))); 241 this, SLOT(addresseeExecuted(CardViewItem *)));
230 242
231 if (KABPrefs::instance()->mHonorSingleClick) 243 if (KABPrefs::instance()->mHonorSingleClick)
232 connect(mCardView, SIGNAL(executed(CardViewItem *)), 244 connect(mCardView, SIGNAL(executed(CardViewItem *)),
233 this, SLOT(addresseeExecuted(CardViewItem *))); 245 this, SLOT(addresseeExecuted(CardViewItem *)));
234 else 246 else
235 connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), 247 connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)),
236 this, SLOT(addresseeExecuted(CardViewItem *))); 248 this, SLOT(addresseeExecuted(CardViewItem *)));
237 249
238} 250}
239 251
240void KAddressBookCardView::writeConfig( KConfig *config ) 252void KAddressBookCardView::writeConfig( KConfig *config )
241{ 253{
242 config->writeEntry( "ItemWidth", mCardView->itemWidth() ); 254 config->writeEntry( "ItemWidth", mCardView->itemWidth() );
243 KAddressBookView::writeConfig( config ); 255 KAddressBookView::writeConfig( config );
244} 256}
245void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field ) 257void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field )
246{ 258{
247 mCardView->clear(); 259 mCardView->clear();
248 if ( s.isEmpty() || s == "*" ) { 260 if ( s.isEmpty() || s == "*" ) {
249 refresh(); 261 refresh();
250 return; 262 return;
251 } 263 }
252 QString pattern = s.lower()+"*"; 264 QString pattern = s.lower()+"*";
253 QRegExp re; 265 QRegExp re;
254 re.setWildcard(true); // most people understand these better. 266 re.setWildcard(true); // most people understand these better.
255 re.setCaseSensitive(false); 267 re.setCaseSensitive(false);
256 re.setPattern( pattern ); 268 re.setPattern( pattern );
257 if (!re.isValid()) 269 if (!re.isValid())
258 return; 270 return;
259 mCardView->viewport()->setUpdatesEnabled( false ); 271 mCardView->viewport()->setUpdatesEnabled( false );
260 KABC::Addressee::List addresseeList = addressees(); 272 KABC::Addressee::List addresseeList = addressees();
261 KABC::Addressee::List::Iterator it; 273 KABC::Addressee::List::Iterator it;
262 if ( field ) { 274 if ( field ) {
263 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 275 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
264#if QT_VERSION >= 300 276#if QT_VERSION >= 300
265 if (re.search(field->value( *it ).lower()) != -1) 277 if (re.search(field->value( *it ).lower()) != -1)
266#else 278#else
267 if (re.match(field->value( *it ).lower()) != -1) 279 if (re.match(field->value( *it ).lower()) != -1)
268#endif 280#endif
269 new AddresseeCardViewItem(fields(), mShowEmptyFields, 281 new AddresseeCardViewItem(fields(), mShowEmptyFields,
270 addressBook(), *it, mCardView); 282 addressBook(), *it, mCardView);
271 283
272 } 284 }
273 } else { 285 } else {
274 KABC::Field::List fieldList = fields(); 286 KABC::Field::List fieldList = fields();
275 KABC::Field::List::ConstIterator fieldIt; 287 KABC::Field::List::ConstIterator fieldIt;
276 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 288 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
277 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { 289 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
278#if QT_VERSION >= 300 290#if QT_VERSION >= 300
279 if (re.search((*fieldIt)->value( *it ).lower()) != -1) 291 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
280#else 292#else
281 if (re.match((*fieldIt)->value( *it ).lower()) != -1) 293 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
282#endif 294#endif
283 { 295 {
284 new AddresseeCardViewItem(fields(), mShowEmptyFields, 296 new AddresseeCardViewItem(fields(), mShowEmptyFields,
285 addressBook(), *it, mCardView); 297 addressBook(), *it, mCardView);
286 continue; 298 continue;
287 } 299 }
288 } 300 }
289 } 301 }
290 } 302 }
291 mCardView->viewport()->setUpdatesEnabled( true ); 303 mCardView->viewport()->setUpdatesEnabled( true );
292 mCardView->viewport()->update(); 304 mCardView->viewport()->update();
293 // by default nothing is selected 305 if ( mCardView->firstItem() ) {
294 emit selected(QString::null); 306 mCardView->setCurrentItem ( mCardView->firstItem() );
307 mCardView->setSelected ( mCardView->firstItem() , true );
308 }
309 else
310 emit selected(QString::null);
295} 311}
296QStringList KAddressBookCardView::selectedUids() 312QStringList KAddressBookCardView::selectedUids()
297{ 313{
298 QStringList uidList; 314 QStringList uidList;
299 CardViewItem *item; 315 CardViewItem *item;
300 AddresseeCardViewItem *aItem; 316 AddresseeCardViewItem *aItem;
301 317
302 for (item = mCardView->firstItem(); item; item = item->nextItem()) 318 for (item = mCardView->firstItem(); item; item = item->nextItem())
303 { 319 {
304 if (item->isSelected()) 320 if (item->isSelected())
305 { 321 {
306#ifndef KAB_EMBEDDED 322#ifndef KAB_EMBEDDED
307 aItem = dynamic_cast<AddresseeCardViewItem*>(item); 323 aItem = dynamic_cast<AddresseeCardViewItem*>(item);
308#else //KAB_EMBEDDED 324#else //KAB_EMBEDDED
309 aItem = (AddresseeCardViewItem*)(item); 325 aItem = (AddresseeCardViewItem*)(item);
310#endif //KAB_EMBEDDED 326#endif //KAB_EMBEDDED
311 if (aItem) 327 if (aItem)
312 uidList << aItem->addressee().uid(); 328 uidList << aItem->addressee().uid();
313 } 329 }
314 } 330 }
315 331
316 return uidList; 332 return uidList;
317} 333}
318 334
319void KAddressBookCardView::refresh(QString uid) 335void KAddressBookCardView::refresh(QString uid)
320{ 336{
321 CardViewItem *item; 337 CardViewItem *item;
322 AddresseeCardViewItem *aItem; 338 AddresseeCardViewItem *aItem;
323 339
324 if (uid.isNull()) 340 if (uid.isNull())
325 { 341 {
326 // Rebuild the view 342 // Rebuild the view
327 mCardView->viewport()->setUpdatesEnabled( false ); 343 mCardView->viewport()->setUpdatesEnabled( false );
328 mCardView->clear(); 344 mCardView->clear();
329 345
330 KABC::Addressee::List addresseeList = addressees(); 346 KABC::Addressee::List addresseeList = addressees();
331 KABC::Addressee::List::Iterator iter; 347 KABC::Addressee::List::Iterator iter;
332 for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter) 348 for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter)
333 { 349 {
334 if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") ) 350 if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") )
335 continue; 351 continue;
336 aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields, 352 aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields,
337 addressBook(), *iter, mCardView); 353 addressBook(), *iter, mCardView);
338 } 354 }
339 mCardView->viewport()->setUpdatesEnabled( true ); 355 mCardView->viewport()->setUpdatesEnabled( true );
340 mCardView->viewport()->update(); 356 mCardView->viewport()->update();
341 357
342 // by default nothing is selected 358 // by default nothing is selected
343 emit selected(QString::null); 359 emit selected(QString::null);
344 } 360 }
345 else 361 else
346 { 362 {
347 // Try to find the one to refresh 363 // Try to find the one to refresh
348 bool found = false; 364 bool found = false;
349 for (item = mCardView->firstItem(); item && !found; 365 for (item = mCardView->firstItem(); item && !found;
350 item = item->nextItem()) 366 item = item->nextItem())
351 { 367 {
352#ifndef KAB_EMBEDDED 368#ifndef KAB_EMBEDDED
353 aItem = dynamic_cast<AddresseeCardViewItem*>(item); 369 aItem = dynamic_cast<AddresseeCardViewItem*>(item);
354#else //KAB_EMBEDDED 370#else //KAB_EMBEDDED
355 aItem = (AddresseeCardViewItem*)(item); 371 aItem = (AddresseeCardViewItem*)(item);
356#endif //KAB_EMBEDDED 372#endif //KAB_EMBEDDED
357 373
358 if ((aItem) && (aItem->addressee().uid() == uid)) 374 if ((aItem) && (aItem->addressee().uid() == uid))
359 { 375 {
360 aItem->refresh(); 376 aItem->refresh();
361 found = true; 377 found = true;
362 } 378 }
363 } 379 }
364 } 380 }
365} 381}
366 382
367void KAddressBookCardView::setSelected(QString uid, bool selected) 383void KAddressBookCardView::setSelected(QString uid, bool selected)
368{ 384{
369 CardViewItem *item; 385 CardViewItem *item;
370 AddresseeCardViewItem *aItem; 386 AddresseeCardViewItem *aItem;
371 387
372 if (uid.isNull()) 388 if (uid.isNull())
373 { 389 {
374 mCardView->selectAll(selected); 390 mCardView->selectAll(selected);
375 } 391 }
376 else 392 else
377 { 393 {
378 bool found = false; 394 bool found = false;
379 for (item = mCardView->firstItem(); item && !found; 395 for (item = mCardView->firstItem(); item && !found;
380 item = item->nextItem()) 396 item = item->nextItem())
381 { 397 {
382#ifndef KAB_EMBEDDED 398#ifndef KAB_EMBEDDED
383 aItem = dynamic_cast<AddresseeCardViewItem*>(item); 399 aItem = dynamic_cast<AddresseeCardViewItem*>(item);
384#else //KAB_EMBEDDED 400#else //KAB_EMBEDDED
385 aItem = (AddresseeCardViewItem*)(item); 401 aItem = (AddresseeCardViewItem*)(item);
386#endif //KAB_EMBEDDED 402#endif //KAB_EMBEDDED
387 403
388 if ((aItem) && (aItem->addressee().uid() == uid)) 404 if ((aItem) && (aItem->addressee().uid() == uid))
389 { 405 {
390 mCardView->setSelected(aItem, selected); 406 mCardView->setSelected(aItem, selected);
391 mCardView->ensureItemVisible(item); 407 mCardView->ensureItemVisible(item);
392 found = true; 408 found = true;
393 } 409 }
394 } 410 }
395 } 411 }
396} 412}
397 413
398//US added an additional method without parameter 414//US added an additional method without parameter
399void KAddressBookCardView::setSelected() 415void KAddressBookCardView::setSelected()
400{ 416{
401 setSelected(QString::null, true); 417 setSelected(QString::null, true);
402} 418}
403 419
404void KAddressBookCardView::addresseeExecuted(CardViewItem *item) 420void KAddressBookCardView::addresseeExecuted(CardViewItem *item)
405{ 421{
406#ifndef KAB_EMBEDDED 422#ifndef KAB_EMBEDDED
407 AddresseeCardViewItem *aItem = dynamic_cast<AddresseeCardViewItem*>(item); 423 AddresseeCardViewItem *aItem = dynamic_cast<AddresseeCardViewItem*>(item);
408#else //KAB_EMBEDDED 424#else //KAB_EMBEDDED
409 AddresseeCardViewItem *aItem = (AddresseeCardViewItem*)(item); 425 AddresseeCardViewItem *aItem = (AddresseeCardViewItem*)(item);
410#endif //KAB_EMBEDDED 426#endif //KAB_EMBEDDED
411 if (aItem) 427 if (aItem)
412 { 428 {
413 //kdDebug()<<"... even has a valid item:)"<<endl; 429 //kdDebug()<<"... even has a valid item:)"<<endl;
414 emit executed(aItem->addressee().uid()); 430 emit executed(aItem->addressee().uid());
415 } 431 }
416} 432}
417 433
418void KAddressBookCardView::addresseeSelected() 434void KAddressBookCardView::addresseeSelected()
419{ 435{
420 CardViewItem *item; 436 CardViewItem *item;
421 AddresseeCardViewItem *aItem; 437 AddresseeCardViewItem *aItem;
422 438
423 bool found = false; 439 bool found = false;
424 for (item = mCardView->firstItem(); item && !found; 440 for (item = mCardView->firstItem(); item && !found;
425 item = item->nextItem()) 441 item = item->nextItem())
426 { 442 {
427 if (item->isSelected()) 443 if (item->isSelected())
428 { 444 {
429#ifndef KAB_EMBEDDED 445#ifndef KAB_EMBEDDED
430 aItem = dynamic_cast<AddresseeCardViewItem*>(item); 446 aItem = dynamic_cast<AddresseeCardViewItem*>(item);
431#else //KAB_EMBEDDED 447#else //KAB_EMBEDDED
432 aItem = (AddresseeCardViewItem*)(item); 448 aItem = (AddresseeCardViewItem*)(item);
433#endif //KAB_EMBEDDED 449#endif //KAB_EMBEDDED
434 if ( aItem ) 450 if ( aItem )
435 { 451 {
436 emit selected(aItem->addressee().uid()); 452 emit selected(aItem->addressee().uid());
437 found = true; 453 found = true;
438 } 454 }
439 } 455 }
440 } 456 }
441 457
442 if (!found) 458 if (!found)
443 emit selected(QString::null); 459 emit selected(QString::null);
444 460
445} 461}
446#ifndef KAB_EMBEDDED 462#ifndef KAB_EMBEDDED
447#include "kaddressbookcardview.moc" 463#include "kaddressbookcardview.moc"
448#endif //KAB_EMBEDDED 464#endif //KAB_EMBEDDED
diff --git a/kaddressbook/views/kaddressbookcardview.h b/kaddressbook/views/kaddressbookcardview.h
index b8efb01..45a9781 100644
--- a/kaddressbook/views/kaddressbookcardview.h
+++ b/kaddressbook/views/kaddressbookcardview.h
@@ -1,117 +1,119 @@
1#ifndef KADDRESSBOOKCARDVIEW_H 1#ifndef KADDRESSBOOKCARDVIEW_H
2#define KADDRESSBOOKCARDVIEW_H 2#define KADDRESSBOOKCARDVIEW_H
3 3
4/* 4/*
5 This file is part of KAddressBook. 5 This file is part of KAddressBook.
6 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 6 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or 10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version. 11 (at your option) any later version.
12 12
13 This program is distributed in the hope that it will be useful, 13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 GNU General Public License for more details.
17 17
18 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 21
22 As a special exception, permission is given to link this program 22 As a special exception, permission is given to link this program
23 with any edition of Qt, and distribute the resulting executable, 23 with any edition of Qt, and distribute the resulting executable,
24 without including the source code for Qt in the source distribution. 24 without including the source code for Qt in the source distribution.
25*/ 25*/
26 26
27#include <qstring.h> 27#include <qstring.h>
28#ifndef KAB_EMBEDDED 28#ifndef KAB_EMBEDDED
29#include <kiconview.h> 29#include <kiconview.h>
30#else //KAB_EMBEDDED 30#else //KAB_EMBEDDED
31#include <klocale.h> 31#include <klocale.h>
32#endif //KAB_EMBEDDED 32#endif //KAB_EMBEDDED
33 33
34#include "cardview.h" 34#include "cardview.h"
35#include "kaddressbookview.h" 35#include "kaddressbookview.h"
36#include "configurecardviewdialog.h" 36#include "configurecardviewdialog.h"
37 37
38class QDragEnterEvent; 38class QDragEnterEvent;
39class QDragEntryEvent; 39class QDragEntryEvent;
40class QDropEvent; 40class QDropEvent;
41class KConfig; 41class KConfig;
42class AddresseeCardView; 42class AddresseeCardView;
43 43
44/** 44/**
45 This view uses the CardView class to create a card view. At some 45 This view uses the CardView class to create a card view. At some
46 point in the future I think this will be the default view of 46 point in the future I think this will be the default view of
47 KAddressBook. 47 KAddressBook.
48 */ 48 */
49class KAddressBookCardView : public KAddressBookView 49class KAddressBookCardView : public KAddressBookView
50{ 50{
51 Q_OBJECT 51 Q_OBJECT
52 52
53 public: 53 public:
54 KAddressBookCardView( KABC::AddressBook *ab, QWidget *parent, 54 KAddressBookCardView( KABC::AddressBook *ab, QWidget *parent,
55 const char *name = 0 ); 55 const char *name = 0 );
56 virtual ~KAddressBookCardView(); 56 virtual ~KAddressBookCardView();
57 void doSearch( const QString& s,KABC::Field *field ); 57 void doSearch( const QString& s,KABC::Field *field );
58 virtual QStringList selectedUids(); 58 virtual QStringList selectedUids();
59 virtual QString type() const { return "Card"; } 59 virtual QString type() const { return "Card"; }
60 60
61 virtual void readConfig(KConfig *config); 61 virtual void readConfig(KConfig *config);
62 virtual void writeConfig(KConfig *); 62 virtual void writeConfig(KConfig *);
63 virtual void scrollUP();
64 virtual void scrollDOWN();
63 65
64 public slots: 66 public slots:
65 void refresh(QString uid = QString::null); 67 void refresh(QString uid = QString::null);
66 void setSelected(QString uid/*US = QString::null*/, bool selected/*US = true*/); 68 void setSelected(QString uid/*US = QString::null*/, bool selected/*US = true*/);
67//US added an additional method without parameter 69//US added an additional method without parameter
68 void setSelected(); 70 void setSelected();
69 71
70 protected slots: 72 protected slots:
71 void addresseeExecuted(CardViewItem *item); 73 void addresseeExecuted(CardViewItem *item);
72 void addresseeSelected(); 74 void addresseeSelected();
73 75
74 private: 76 private:
75 AddresseeCardView *mCardView; 77 AddresseeCardView *mCardView;
76 bool mShowEmptyFields; 78 bool mShowEmptyFields;
77}; 79};
78 80
79class AddresseeCardView : public CardView 81class AddresseeCardView : public CardView
80{ 82{
81 Q_OBJECT 83 Q_OBJECT
82 public: 84 public:
83 AddresseeCardView(QWidget *parent, const char *name = 0); 85 AddresseeCardView(QWidget *parent, const char *name = 0);
84 ~AddresseeCardView(); 86 ~AddresseeCardView();
85 87
86 signals: 88 signals:
87 void startAddresseeDrag(); 89 void startAddresseeDrag();
88 void addresseeDropped(QDropEvent *); 90 void addresseeDropped(QDropEvent *);
89 91
90 protected: 92 protected:
91 virtual void dragEnterEvent(QDragEnterEvent *); 93 virtual void dragEnterEvent(QDragEnterEvent *);
92 virtual void dropEvent(QDropEvent *); 94 virtual void dropEvent(QDropEvent *);
93 virtual void startDrag(); 95 virtual void startDrag();
94}; 96};
95 97
96 98
97class CardViewFactory : public ViewFactory 99class CardViewFactory : public ViewFactory
98{ 100{
99 public: 101 public:
100 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) 102 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
101 { 103 {
102 return new KAddressBookCardView( ab, parent, name ); 104 return new KAddressBookCardView( ab, parent, name );
103 } 105 }
104 106
105 QString type() const { return "Card"; } 107 QString type() const { return "Card"; }
106 108
107 QString description() const { return i18n( "Rolodex style cards represent contacts." ); } 109 QString description() const { return i18n( "Rolodex style cards represent contacts." ); }
108 110
109 ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent, 111 ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent,
110 const char *name = 0 ) 112 const char *name = 0 )
111 { 113 {
112 return new ConfigureCardViewWidget( ab, parent, name ); 114 return new ConfigureCardViewWidget( ab, parent, name );
113 } 115 }
114}; 116};
115 117
116 118
117#endif 119#endif
diff --git a/kaddressbook/views/kaddressbookiconview.cpp b/kaddressbook/views/kaddressbookiconview.cpp
index fdc0db9..f4c68b8 100644
--- a/kaddressbook/views/kaddressbookiconview.cpp
+++ b/kaddressbook/views/kaddressbookiconview.cpp
@@ -1,429 +1,446 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4 4
5 This program is free software; you can redistribute it and/or modify 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 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 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 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 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. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#ifndef KAB_EMBEDDED 24#ifndef KAB_EMBEDDED
25#include <qiconview.h> 25#include <qiconview.h>
26#include <qstringlist.h> 26#include <qstringlist.h>
27 27
28#include <kabc/addressee.h> 28#include <kabc/addressee.h>
29#include <kconfig.h> 29#include <kconfig.h>
30#include <kdebug.h> 30#include <kdebug.h>
31#include <kglobal.h> 31#include <kglobal.h>
32#include <kiconloader.h> 32#include <kiconloader.h>
33#include <klocale.h> 33#include <klocale.h>
34 34
35#else //KAB_EMBEDDED 35#else //KAB_EMBEDDED
36#endif //KAB_EMBEDDED 36#endif //KAB_EMBEDDED
37 37
38#include <kabc/addressbook.h> 38#include <kabc/addressbook.h>
39#include "kabprefs.h" 39#include "kabprefs.h"
40#include "viewmanager.h" 40#include "viewmanager.h"
41#include "kaddressbookiconview.h" 41#include "kaddressbookiconview.h"
42#include <qlayout.h> 42#include <qlayout.h>
43#include <qregexp.h> 43#include <qregexp.h>
44#include <qapplication.h>
44#include <kglobal.h> 45#include <kglobal.h>
45/*US transfered to the headerfile 46/*US transfered to the headerfile
46class IconViewFactory : public ViewFactory 47class IconViewFactory : public ViewFactory
47{ 48{
48 public: 49 public:
49 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) 50 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
50 { 51 {
51 return new KAddressBookIconView( ab, parent, name ); 52 return new KAddressBookIconView( ab, parent, name );
52 } 53 }
53 54
54 QString type() const { return "Icon"; } 55 QString type() const { return "Icon"; }
55 56
56 QString description() const { return i18n( "Icons represent contacts. Very simple view." ); } 57 QString description() const { return i18n( "Icons represent contacts. Very simple view." ); }
57}; 58};
58 59
59*/ 60*/
60 61
61extern "C" { 62extern "C" {
62 void *init_libkaddrbk_iconview() 63 void *init_libkaddrbk_iconview()
63 { 64 {
64 return ( new IconViewFactory ); 65 return ( new IconViewFactory );
65 } 66 }
66} 67}
67 68
68//////////////////////////////// 69////////////////////////////////
69// AddresseeIconView (internal class) 70// AddresseeIconView (internal class)
70#ifndef KAB_EMBEDDED 71#ifndef KAB_EMBEDDED
71AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name) 72AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name)
72 : KIconView(parent, name) 73 : KIconView(parent, name)
73#else //KAB_EMBEDDED 74#else //KAB_EMBEDDED
74AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name) 75AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name)
75 : QIconView(parent, name) 76 : QIconView(parent, name)
76#endif //KAB_EMBEDDED 77#endif //KAB_EMBEDDED
77 78
78{ 79{
79 setSelectionMode( QIconView::Extended ); 80 setSelectionMode( QIconView::Extended );
80 setResizeMode( QIconView::Adjust ); 81 setResizeMode( QIconView::Adjust );
81 setWordWrapIconText( true ); 82 setWordWrapIconText( true );
82 setGridX( 100 ); 83 setGridX( 100 );
83 setItemsMovable(false); 84 setItemsMovable(false);
84 setSorting(true, true); 85 setSorting(true, true);
85 86
86 87
87//US ??? setMode( KIconView::Select ); 88//US ??? setMode( KIconView::Select );
88 89
89#ifndef KAB_EMBEDDED 90#ifndef KAB_EMBEDDED
90 91
91 connect(this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)), 92 connect(this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)),
92 this, SLOT(itemDropped(QDropEvent*, const QValueList<QIconDragItem>&))); 93 this, SLOT(itemDropped(QDropEvent*, const QValueList<QIconDragItem>&)));
93#endif //KAB_EMBEDDED 94#endif //KAB_EMBEDDED
94} 95}
95 96
96AddresseeIconView::~AddresseeIconView() 97AddresseeIconView::~AddresseeIconView()
97{ 98{
98} 99}
99 100
100 101
101void AddresseeIconView::itemDropped(QDropEvent *e, 102void AddresseeIconView::itemDropped(QDropEvent *e,
102 const QValueList<QIconDragItem> &) 103 const QValueList<QIconDragItem> &)
103{ 104{
104 emit addresseeDropped(e); 105 emit addresseeDropped(e);
105} 106}
106 107
107QDragObject *AddresseeIconView::dragObject() 108QDragObject *AddresseeIconView::dragObject()
108{ 109{
109 emit startAddresseeDrag(); 110 emit startAddresseeDrag();
110 111
111 // We never want IconView to start the drag 112 // We never want IconView to start the drag
112 return 0; 113 return 0;
113} 114}
114//////////////////////////////// 115////////////////////////////////
115// AddresseeIconViewItem (internal class) 116// AddresseeIconViewItem (internal class)
116#ifndef KAB_EMBEDDED 117#ifndef KAB_EMBEDDED
117class AddresseeIconViewItem : public KIconViewItem 118class AddresseeIconViewItem : public KIconViewItem
118#else //KAB_EMBEDDED 119#else //KAB_EMBEDDED
119class AddresseeIconViewItem : public QIconViewItem 120class AddresseeIconViewItem : public QIconViewItem
120#endif //KAB_EMBEDDED 121#endif //KAB_EMBEDDED
121{ 122{
122 public: 123 public:
123#ifndef KAB_EMBEDDED 124#ifndef KAB_EMBEDDED
124 AddresseeIconViewItem(const KABC::Field::List &fields, 125 AddresseeIconViewItem(const KABC::Field::List &fields,
125 KABC::AddressBook *doc, const KABC::Addressee &a, 126 KABC::AddressBook *doc, const KABC::Addressee &a,
126 QIconView *parent) 127 QIconView *parent)
127 : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) 128 : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a)
128#else //KAB_EMBEDDED 129#else //KAB_EMBEDDED
129 AddresseeIconViewItem(const KABC::Field::List &fields, 130 AddresseeIconViewItem(const KABC::Field::List &fields,
130 KABC::AddressBook *doc, const KABC::Addressee &a, 131 KABC::AddressBook *doc, const KABC::Addressee &a,
131 QIconView *parent) 132 QIconView *parent)
132 : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) 133 : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a)
133#endif //KAB_EMBEDDED 134#endif //KAB_EMBEDDED
134 { 135 {
135 if ( mFields.isEmpty() ) { 136 if ( mFields.isEmpty() ) {
136 mFields = KABC::Field::defaultFields(); 137 mFields = KABC::Field::defaultFields();
137 } 138 }
138 refresh(); 139 refresh();
139 } 140 }
140 141
141 const KABC::Addressee &addressee() const { return mAddressee; } 142 const KABC::Addressee &addressee() const { return mAddressee; }
142 143
143 void refresh() 144 void refresh()
144 { 145 {
145 // Update our addressee, since it may have changed elsewhere 146 // Update our addressee, since it may have changed elsewhere
146 mAddressee = mDocument->findByUid(mAddressee.uid()); 147 mAddressee = mDocument->findByUid(mAddressee.uid());
147 148
148 if (!mAddressee.isEmpty()) 149 if (!mAddressee.isEmpty())
149 setText( mAddressee.givenName() + " " + mAddressee.familyName() ); 150 setText( mAddressee.givenName() + " " + mAddressee.familyName() );
150 151
151 QPixmap icon; 152 QPixmap icon;
152 QPixmap defaultIcon( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop, 128 ) ); 153 QPixmap defaultIcon( KGlobal::iconLoader()->loadIcon( "vcard", KIcon::Desktop, 128 ) );
153 KABC::Picture pic = mAddressee.photo(); 154 KABC::Picture pic = mAddressee.photo();
154 if ( pic.data().isNull() ) 155 if ( pic.data().isNull() )
155 pic = mAddressee.logo(); 156 pic = mAddressee.logo();
156 157
157 if ( pic.isIntern() && !pic.data().isNull() ) { 158 if ( pic.isIntern() && !pic.data().isNull() ) {
158 QImage img = pic.data(); 159 QImage img = pic.data();
159#ifndef KAB_EMBEDDED 160#ifndef KAB_EMBEDDED
160 if ( img.width() > img.height() ) 161 if ( img.width() > img.height() )
161 icon = img.scaleWidth( 32 ); 162 icon = img.scaleWidth( 32 );
162 else 163 else
163 icon = img.scaleHeight( 32 ); 164 icon = img.scaleHeight( 32 );
164#else //KAB_EMBEDDED 165#else //KAB_EMBEDDED
165 qDebug("AddresseeIconViewItem::refresh - scale here dependend of the displaysize and the right factor"); 166 qDebug("AddresseeIconViewItem::refresh - scale here dependend of the displaysize and the right factor");
166 icon.convertFromImage(img.smoothScale(32, 32)); 167 icon.convertFromImage(img.smoothScale(32, 32));
167#endif //KAB_EMBEDDED 168#endif //KAB_EMBEDDED
168 169
169 } else 170 } else
170 icon = defaultIcon; 171 icon = defaultIcon;
171 172
172 setPixmap( icon ); 173 setPixmap( icon );
173 } 174 }
174 175
175 private: 176 private:
176 KABC::Field::List mFields; 177 KABC::Field::List mFields;
177 KABC::AddressBook *mDocument; 178 KABC::AddressBook *mDocument;
178 KABC::Addressee mAddressee; 179 KABC::Addressee mAddressee;
179}; 180};
180 181
181/////////////////////////////// 182///////////////////////////////
182// KAddressBookView 183// KAddressBookView
183 184
184KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab, 185KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab,
185 QWidget *parent, const char *name) 186 QWidget *parent, const char *name)
186 : KAddressBookView( ab, parent, name ) 187 : KAddressBookView( ab, parent, name )
187{ 188{
188 // Init the GUI 189 // Init the GUI
189 QVBoxLayout *layout = new QVBoxLayout(viewWidget()); 190 QVBoxLayout *layout = new QVBoxLayout(viewWidget());
190 191
191 mIconView = new AddresseeIconView(viewWidget(), "mIconView"); 192 mIconView = new AddresseeIconView(viewWidget(), "mIconView");
192 layout->addWidget(mIconView); 193 layout->addWidget(mIconView);
193 194
194 // Connect up the signals 195 // Connect up the signals
195 196
196//US method executed is part of KIconView 197//US method executed is part of KIconView
197//US connect(mIconView, SIGNAL(executed(QIconViewItem *)), 198//US connect(mIconView, SIGNAL(executed(QIconViewItem *)),
198//US this, SLOT(addresseeExecuted(QIconViewItem *))); 199//US this, SLOT(addresseeExecuted(QIconViewItem *)));
199 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), 200 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
200 this, SLOT(addresseeExecuted(QIconViewItem *))); 201 this, SLOT(addresseeExecuted(QIconViewItem *)));
201 202
202 connect(mIconView, SIGNAL(selectionChanged()), 203 connect(mIconView, SIGNAL(selectionChanged()),
203 this, SLOT(addresseeSelected())); 204 this, SLOT(addresseeSelected()));
204 connect(mIconView, SIGNAL(addresseeDropped(QDropEvent*)), 205 connect(mIconView, SIGNAL(addresseeDropped(QDropEvent*)),
205 this, SIGNAL(dropped(QDropEvent*))); 206 this, SIGNAL(dropped(QDropEvent*)));
206 connect(mIconView, SIGNAL(startAddresseeDrag()), 207 connect(mIconView, SIGNAL(startAddresseeDrag()),
207 this, SIGNAL(startDrag())); 208 this, SIGNAL(startDrag()));
208} 209}
209 210
210KAddressBookIconView::~KAddressBookIconView() 211KAddressBookIconView::~KAddressBookIconView()
211{ 212{
212} 213}
213 214
215void KAddressBookIconView::scrollUP()
216{
217 QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 );
218 QApplication::postEvent( mIconView, ev );
219}
220void KAddressBookIconView::scrollDOWN()
221{
222 QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 );
223 QApplication::postEvent( mIconView, ev );
224}
214void KAddressBookIconView::readConfig(KConfig *config) 225void KAddressBookIconView::readConfig(KConfig *config)
215{ 226{
216 KAddressBookView::readConfig(config); 227 KAddressBookView::readConfig(config);
217 228
218//US method executed is part of KIconView 229//US method executed is part of KIconView
219//US disconnect(mIconView, SIGNAL(executed(QIconViewItem *)), 230//US disconnect(mIconView, SIGNAL(executed(QIconViewItem *)),
220//US this, SLOT(addresseeExecuted(QIconViewItem *))); 231//US this, SLOT(addresseeExecuted(QIconViewItem *)));
221 disconnect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), 232 disconnect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
222 this, SLOT(addresseeExecuted(QIconViewItem *))); 233 this, SLOT(addresseeExecuted(QIconViewItem *)));
223 234
224//US method executed is part of KIconView. Use selectionChanged instead 235//US method executed is part of KIconView. Use selectionChanged instead
225/*US 236/*US
226 if (KABPrefs::instance()->mHonorSingleClick) 237 if (KABPrefs::instance()->mHonorSingleClick)
227 connect(mIconView, SIGNAL(executed(QIconViewItem *)), 238 connect(mIconView, SIGNAL(executed(QIconViewItem *)),
228 this, SLOT(addresseeExecuted(QIconViewItem *))); 239 this, SLOT(addresseeExecuted(QIconViewItem *)));
229 else 240 else
230 connect(mIconView, SIGNAL(doubleClicked(QIconViewItem *)), 241 connect(mIconView, SIGNAL(doubleClicked(QIconViewItem *)),
231 this, SLOT(addresseeExecuted(QIconViewItem *))); 242 this, SLOT(addresseeExecuted(QIconViewItem *)));
232*/ 243*/
233 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), 244 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
234 this, SLOT(addresseeExecuted(QIconViewItem *))); 245 this, SLOT(addresseeExecuted(QIconViewItem *)));
235 246
236} 247}
237void KAddressBookIconView::doSearch( const QString& s ,KABC::Field *field ) 248void KAddressBookIconView::doSearch( const QString& s ,KABC::Field *field )
238{ 249{
239 mIconView->clear(); 250 mIconView->clear();
240 mIconList.clear(); 251 mIconList.clear();
241 if ( s.isEmpty() || s == "*" ) { 252 if ( s.isEmpty() || s == "*" ) {
242 refresh(); 253 refresh();
243 return; 254 return;
244 } 255 }
245 QString pattern = s.lower()+"*"; 256 QString pattern = s.lower()+"*";
246 QRegExp re; 257 QRegExp re;
247 re.setWildcard(true); // most people understand these better. 258 re.setWildcard(true); // most people understand these better.
248 re.setCaseSensitive(false); 259 re.setCaseSensitive(false);
249 re.setPattern( pattern ); 260 re.setPattern( pattern );
250 if (!re.isValid()) 261 if (!re.isValid())
251 return; 262 return;
252 KABC::Addressee::List addresseeList = addressees(); 263 KABC::Addressee::List addresseeList = addressees();
253 KABC::Addressee::List::Iterator it; 264 KABC::Addressee::List::Iterator it;
254 if ( field ) { 265 if ( field ) {
255 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 266 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
256#if QT_VERSION >= 300 267#if QT_VERSION >= 300
257 if (re.search(field->value( *it ).lower()) != -1) 268 if (re.search(field->value( *it ).lower()) != -1)
258#else 269#else
259 if (re.match(field->value( *it ).lower()) != -1) 270 if (re.match(field->value( *it ).lower()) != -1)
260#endif 271#endif
261 mIconList.append(new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); 272 mIconList.append(new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView ));
262 273
263 274
264 } 275 }
265 } else { 276 } else {
266 KABC::Field::List fieldList = fields(); 277 KABC::Field::List fieldList = fields();
267 KABC::Field::List::ConstIterator fieldIt; 278 KABC::Field::List::ConstIterator fieldIt;
268 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 279 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
269 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { 280 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
270#if QT_VERSION >= 300 281#if QT_VERSION >= 300
271 if (re.search((*fieldIt)->value( *it ).lower()) != -1) 282 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
272#else 283#else
273 if (re.match((*fieldIt)->value( *it ).lower()) != -1) 284 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
274#endif 285#endif
275 { 286 {
276 mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView )); 287 mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView ));
277 continue; 288 continue;
278 } 289 }
279 } 290 }
280 } 291 }
281 } 292 }
282 mIconView->arrangeItemsInGrid( true ); 293 mIconView->arrangeItemsInGrid( true );
294 if ( mIconView->firstItem() ) {
295 mIconView->setCurrentItem ( mIconView->firstItem() );
296 mIconView->setSelected ( mIconView->firstItem() , true );
297 }
298 else
299 emit selected(QString::null);
283} 300}
284QStringList KAddressBookIconView::selectedUids() 301QStringList KAddressBookIconView::selectedUids()
285{ 302{
286 QStringList uidList; 303 QStringList uidList;
287 QIconViewItem *item; 304 QIconViewItem *item;
288 AddresseeIconViewItem *aItem; 305 AddresseeIconViewItem *aItem;
289 306
290 for (item = mIconView->firstItem(); item; item = item->nextItem()) 307 for (item = mIconView->firstItem(); item; item = item->nextItem())
291 { 308 {
292 if (item->isSelected()) 309 if (item->isSelected())
293 { 310 {
294#ifndef KAB_EMBEDDED 311#ifndef KAB_EMBEDDED
295 aItem = dynamic_cast<AddresseeIconViewItem*>(item); 312 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
296#else //KAB_EMBEDDED 313#else //KAB_EMBEDDED
297 aItem = (AddresseeIconViewItem*)(item); 314 aItem = (AddresseeIconViewItem*)(item);
298#endif //KAB_EMBEDDED 315#endif //KAB_EMBEDDED
299 if (aItem) 316 if (aItem)
300 uidList << aItem->addressee().uid(); 317 uidList << aItem->addressee().uid();
301 } 318 }
302 } 319 }
303 320
304 return uidList; 321 return uidList;
305} 322}
306 323
307void KAddressBookIconView::refresh(QString uid) 324void KAddressBookIconView::refresh(QString uid)
308{ 325{
309 QIconViewItem *item; 326 QIconViewItem *item;
310 AddresseeIconViewItem *aItem; 327 AddresseeIconViewItem *aItem;
311 328
312 if ( uid.isNull() ) { 329 if ( uid.isNull() ) {
313 // Rebuild the view 330 // Rebuild the view
314 mIconView->clear(); 331 mIconView->clear();
315 mIconList.clear(); 332 mIconList.clear();
316 333
317 KABC::Addressee::List addresseeList = addressees(); 334 KABC::Addressee::List addresseeList = addressees();
318 KABC::Addressee::List::Iterator iter; 335 KABC::Addressee::List::Iterator iter;
319 for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter ) { 336 for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter ) {
320 if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") ) 337 if ( (*iter).uid().left(2) == "la" && (*iter).uid().left(19) == QString("last-syncAddressee-") )
321 continue; 338 continue;
322 aItem = new AddresseeIconViewItem( fields(), addressBook(), *iter, mIconView ); 339 aItem = new AddresseeIconViewItem( fields(), addressBook(), *iter, mIconView );
323 } 340 }
324 341
325 mIconView->arrangeItemsInGrid( true ); 342 mIconView->arrangeItemsInGrid( true );
326 343
327 for ( item = mIconView->firstItem(); item; item = item->nextItem() ) 344 for ( item = mIconView->firstItem(); item; item = item->nextItem() )
328 { 345 {
329#ifndef KAB_EMBEDDED 346#ifndef KAB_EMBEDDED
330 AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item ); 347 AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item );
331#else //KAB_EMBEDDED 348#else //KAB_EMBEDDED
332 AddresseeIconViewItem* aivi = (AddresseeIconViewItem*)( item ); 349 AddresseeIconViewItem* aivi = (AddresseeIconViewItem*)( item );
333#endif //KAB_EMBEDDED 350#endif //KAB_EMBEDDED
334 mIconList.append( aivi ); 351 mIconList.append( aivi );
335 } 352 }
336 353
337 } else { 354 } else {
338 // Try to find the one to refresh 355 // Try to find the one to refresh
339 for ( item = mIconView->firstItem(); item; item = item->nextItem() ) { 356 for ( item = mIconView->firstItem(); item; item = item->nextItem() ) {
340#ifndef KAB_EMBEDDED 357#ifndef KAB_EMBEDDED
341 aItem = dynamic_cast<AddresseeIconViewItem*>(item); 358 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
342#else //KAB_EMBEDDED 359#else //KAB_EMBEDDED
343 aItem = (AddresseeIconViewItem*)(item); 360 aItem = (AddresseeIconViewItem*)(item);
344#endif //KAB_EMBEDDED 361#endif //KAB_EMBEDDED
345 if ((aItem) && (aItem->addressee().uid() == uid)) { 362 if ((aItem) && (aItem->addressee().uid() == uid)) {
346 aItem->refresh(); 363 aItem->refresh();
347 mIconView->arrangeItemsInGrid( true ); 364 mIconView->arrangeItemsInGrid( true );
348 return; 365 return;
349 } 366 }
350 } 367 }
351 refresh( QString::null ); 368 refresh( QString::null );
352 } 369 }
353} 370}
354 371
355void KAddressBookIconView::setSelected(QString uid, bool selected) 372void KAddressBookIconView::setSelected(QString uid, bool selected)
356{ 373{
357 QIconViewItem *item; 374 QIconViewItem *item;
358 AddresseeIconViewItem *aItem; 375 AddresseeIconViewItem *aItem;
359 376
360 if (uid.isNull()) 377 if (uid.isNull())
361 { 378 {
362 mIconView->selectAll(selected); 379 mIconView->selectAll(selected);
363 } 380 }
364 else 381 else
365 { 382 {
366 bool found = false; 383 bool found = false;
367 for (item = mIconView->firstItem(); item && !found; 384 for (item = mIconView->firstItem(); item && !found;
368 item = item->nextItem()) 385 item = item->nextItem())
369 { 386 {
370#ifndef KAB_EMBEDDED 387#ifndef KAB_EMBEDDED
371 aItem = dynamic_cast<AddresseeIconViewItem*>(item); 388 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
372#else //KAB_EMBEDDED 389#else //KAB_EMBEDDED
373 aItem = (AddresseeIconViewItem*)(item); 390 aItem = (AddresseeIconViewItem*)(item);
374#endif //KAB_EMBEDDED 391#endif //KAB_EMBEDDED
375 392
376 if ((aItem) && (aItem->addressee().uid() == uid)) 393 if ((aItem) && (aItem->addressee().uid() == uid))
377 { 394 {
378 mIconView->setSelected(aItem, selected); 395 mIconView->setSelected(aItem, selected);
379 mIconView->ensureItemVisible( aItem ); 396 mIconView->ensureItemVisible( aItem );
380 found = true; 397 found = true;
381 } 398 }
382 } 399 }
383 } 400 }
384} 401}
385 402
386void KAddressBookIconView::addresseeExecuted(QIconViewItem *item) 403void KAddressBookIconView::addresseeExecuted(QIconViewItem *item)
387{ 404{
388#ifndef KAB_EMBEDDED 405#ifndef KAB_EMBEDDED
389 AddresseeIconViewItem *aItem = dynamic_cast<AddresseeIconViewItem*>(item); 406 AddresseeIconViewItem *aItem = dynamic_cast<AddresseeIconViewItem*>(item);
390#else //KAB_EMBEDDED 407#else //KAB_EMBEDDED
391 AddresseeIconViewItem *aItem = (AddresseeIconViewItem*)(item); 408 AddresseeIconViewItem *aItem = (AddresseeIconViewItem*)(item);
392#endif //KAB_EMBEDDED 409#endif //KAB_EMBEDDED
393 410
394 if (aItem) { 411 if (aItem) {
395 emit executed(aItem->addressee().uid()); 412 emit executed(aItem->addressee().uid());
396 } 413 }
397} 414}
398 415
399void KAddressBookIconView::addresseeSelected() 416void KAddressBookIconView::addresseeSelected()
400{ 417{
401 QIconViewItem *item; 418 QIconViewItem *item;
402 AddresseeIconViewItem *aItem; 419 AddresseeIconViewItem *aItem;
403 420
404 bool found = false; 421 bool found = false;
405 for (item = mIconView->firstItem(); item && !found; 422 for (item = mIconView->firstItem(); item && !found;
406 item = item->nextItem()) 423 item = item->nextItem())
407 { 424 {
408 if (item->isSelected()) 425 if (item->isSelected())
409 { 426 {
410#ifndef KAB_EMBEDDED 427#ifndef KAB_EMBEDDED
411 aItem = dynamic_cast<AddresseeIconViewItem*>(item); 428 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
412#else //KAB_EMBEDDED 429#else //KAB_EMBEDDED
413 aItem = (AddresseeIconViewItem*)(item); 430 aItem = (AddresseeIconViewItem*)(item);
414#endif //KAB_EMBEDDED 431#endif //KAB_EMBEDDED
415 if (aItem) 432 if (aItem)
416 { 433 {
417 emit selected(aItem->addressee().uid()); 434 emit selected(aItem->addressee().uid());
418 found = true; 435 found = true;
419 } 436 }
420 } 437 }
421 } 438 }
422 439
423 if (!found) 440 if (!found)
424 emit selected(QString::null); 441 emit selected(QString::null);
425} 442}
426 443
427#ifndef KAB_EMBEDDED 444#ifndef KAB_EMBEDDED
428#include "kaddressbookiconview.moc" 445#include "kaddressbookiconview.moc"
429#endif //KAB_EMBEDDED 446#endif //KAB_EMBEDDED
diff --git a/kaddressbook/views/kaddressbookiconview.h b/kaddressbook/views/kaddressbookiconview.h
index 963ee7c..acfcd71 100644
--- a/kaddressbook/views/kaddressbookiconview.h
+++ b/kaddressbook/views/kaddressbookiconview.h
@@ -1,131 +1,133 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4 4
5 This program is free software; you can redistribute it and/or modify 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 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 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 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 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. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#ifndef KADDRESSBOOKICONVIEW_H 24#ifndef KADDRESSBOOKICONVIEW_H
25#define KADDRESSBOOKICONVIEW_H 25#define KADDRESSBOOKICONVIEW_H
26 26
27#include <qstring.h> 27#include <qstring.h>
28#ifndef KAB_EMBEDDED 28#ifndef KAB_EMBEDDED
29#include <kiconview.h> 29#include <kiconview.h>
30#else //KAB_EMBEDDED 30#else //KAB_EMBEDDED
31#include <qiconview.h> 31#include <qiconview.h>
32#include <qptrlist.h> 32#include <qptrlist.h>
33#include <klocale.h> 33#include <klocale.h>
34#endif //KAB_EMBEDDED 34#endif //KAB_EMBEDDED
35#include "kaddressbookview.h" 35#include "kaddressbookview.h"
36 36
37class QIconViewItem; 37class QIconViewItem;
38class KConfig; 38class KConfig;
39class AddresseeIconView; 39class AddresseeIconView;
40class AddresseeIconViewItem; 40class AddresseeIconViewItem;
41class QIconDragItem; 41class QIconDragItem;
42class KAddressBookIconView; 42class KAddressBookIconView;
43 43
44namespace KABC { class AddressBook; } 44namespace KABC { class AddressBook; }
45 45
46/** This is an example kaddressbook view that is implemented using 46/** This is an example kaddressbook view that is implemented using
47* KIconView. This view is not the most useful view, but it displays 47* KIconView. This view is not the most useful view, but it displays
48* how simple implementing a new view can be. 48* how simple implementing a new view can be.
49*/ 49*/
50class KAddressBookIconView : public KAddressBookView 50class KAddressBookIconView : public KAddressBookView
51{ 51{
52 Q_OBJECT 52 Q_OBJECT
53 53
54 public: 54 public:
55 KAddressBookIconView( KABC::AddressBook *ab, QWidget *parent, 55 KAddressBookIconView( KABC::AddressBook *ab, QWidget *parent,
56 const char *name = 0 ); 56 const char *name = 0 );
57 virtual ~KAddressBookIconView(); 57 virtual ~KAddressBookIconView();
58 58
59 virtual QStringList selectedUids(); 59 virtual QStringList selectedUids();
60 virtual QString type() const { return "Icon"; } 60 virtual QString type() const { return "Icon"; }
61 void doSearch( const QString& s ,KABC::Field *field ); 61 void doSearch( const QString& s ,KABC::Field *field );
62 62
63 virtual void readConfig(KConfig *config); 63 virtual void readConfig(KConfig *config);
64 virtual void scrollUP();
65 virtual void scrollDOWN();
64 66
65 public slots: 67 public slots:
66 void refresh(QString uid = QString::null); 68 void refresh(QString uid = QString::null);
67#ifndef KAB_EMBEDDED 69#ifndef KAB_EMBEDDED
68//MOC_SKIP_BEGIN 70//MOC_SKIP_BEGIN
69 void setSelected(QString uid = QString::null, bool selected = true); 71 void setSelected(QString uid = QString::null, bool selected = true);
70//MOC_SKIP_END 72//MOC_SKIP_END
71#else //KAB_EMBEDDED 73#else //KAB_EMBEDDED
72//US my MOC do not like default parameters ??? 74//US my MOC do not like default parameters ???
73 void setSelected(QString uid, bool selected); 75 void setSelected(QString uid, bool selected);
74#endif //KAB_EMBEDDED 76#endif //KAB_EMBEDDED
75 77
76 protected slots: 78 protected slots:
77 void addresseeExecuted(QIconViewItem *item); 79 void addresseeExecuted(QIconViewItem *item);
78 void addresseeSelected(); 80 void addresseeSelected();
79 81
80 private: 82 private:
81 AddresseeIconView *mIconView; 83 AddresseeIconView *mIconView;
82 QPtrList<AddresseeIconViewItem> mIconList; 84 QPtrList<AddresseeIconViewItem> mIconList;
83}; 85};
84 86
85 87
86#ifndef KAB_EMBEDDED 88#ifndef KAB_EMBEDDED
87//MOC_SKIP_BEGIN 89//MOC_SKIP_BEGIN
88class AddresseeIconView : public KIconView 90class AddresseeIconView : public KIconView
89//MOC_SKIP_END 91//MOC_SKIP_END
90#else //KAB_EMBEDDED 92#else //KAB_EMBEDDED
91class AddresseeIconView : public QIconView 93class AddresseeIconView : public QIconView
92#endif //KAB_EMBEDDED 94#endif //KAB_EMBEDDED
93{ 95{
94 Q_OBJECT 96 Q_OBJECT
95 97
96 public: 98 public:
97 AddresseeIconView(QWidget *parent, const char *name); 99 AddresseeIconView(QWidget *parent, const char *name);
98 ~AddresseeIconView(); 100 ~AddresseeIconView();
99 101
100 signals: 102 signals:
101 void addresseeDropped(QDropEvent *); 103 void addresseeDropped(QDropEvent *);
102 void startAddresseeDrag(); 104 void startAddresseeDrag();
103 105
104 protected: 106 protected:
105 virtual QDragObject *dragObject(); 107 virtual QDragObject *dragObject();
106 108
107 protected slots: 109 protected slots:
108 void itemDropped(QDropEvent *, const QValueList<QIconDragItem> &); 110 void itemDropped(QDropEvent *, const QValueList<QIconDragItem> &);
109}; 111};
110 112
111class IconViewFactory : public ViewFactory 113class IconViewFactory : public ViewFactory
112{ 114{
113 public: 115 public:
114 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) 116 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
115 { 117 {
116 return new KAddressBookIconView( ab, parent, name ); 118 return new KAddressBookIconView( ab, parent, name );
117 } 119 }
118 120
119 QString type() const { return "Icon"; } 121 QString type() const { return "Icon"; }
120 122
121 QString description() const { return i18n( "Icons represent contacts. Very simple view." ); } 123 QString description() const { return i18n( "Icons represent contacts. Very simple view." ); }
122}; 124};
123/* 125/*
124extern "C" { 126extern "C" {
125 void *init_libkaddrbk_iconview() 127 void *init_libkaddrbk_iconview()
126 { 128 {
127 return ( new IconViewFactory ); 129 return ( new IconViewFactory );
128 } 130 }
129} 131}
130*/ 132*/
131#endif 133#endif
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp
index fbfddba..2412170 100644
--- a/kaddressbook/views/kaddressbooktableview.cpp
+++ b/kaddressbook/views/kaddressbooktableview.cpp
@@ -1,445 +1,459 @@
1// $Id$ 1// $Id$
2 2
3#include <qvbox.h> 3#include <qvbox.h>
4#include <qlistbox.h> 4#include <qlistbox.h>
5#include <qwidget.h> 5#include <qwidget.h>
6#include <qfile.h> 6#include <qfile.h>
7#include <qimage.h> 7#include <qimage.h>
8#include <qcombobox.h> 8#include <qcombobox.h>
9#include <qapplication.h> 9#include <qapplication.h>
10#include <qdragobject.h> 10#include <qdragobject.h>
11#include <qevent.h> 11#include <qevent.h>
12#include <qurl.h> 12#include <qurl.h>
13#include <qpixmap.h> 13#include <qpixmap.h>
14 14
15#include <kabc/addressbook.h> 15#include <kabc/addressbook.h>
16#include <kapplication.h> 16#include <kapplication.h>
17#include <kconfig.h> 17#include <kconfig.h>
18#include <kcolorbutton.h> 18#include <kcolorbutton.h>
19#include <kdebug.h> 19#include <kdebug.h>
20#include <kglobal.h> 20#include <kglobal.h>
21#include <kiconloader.h> 21#include <kiconloader.h>
22#include <klineedit.h> 22#include <klineedit.h>
23#include <klocale.h> 23#include <klocale.h>
24#include <kmessagebox.h> 24#include <kmessagebox.h>
25#include <kurl.h> 25#include <kurl.h>
26#include <kurlrequester.h> 26#include <kurlrequester.h>
27 27
28//US#include "configuretableviewdialog.h" 28//US#include "configuretableviewdialog.h"
29#include "contactlistview.h" 29#include "contactlistview.h"
30#include "kabprefs.h" 30#include "kabprefs.h"
31#include "undocmds.h" 31#include "undocmds.h"
32#include "viewmanager.h" 32#include "viewmanager.h"
33 33
34#include <qlayout.h> 34#include <qlayout.h>
35#include <qheader.h> 35#include <qheader.h>
36#include <qregexp.h> 36#include <qregexp.h>
37 37
38#include "kaddressbooktableview.h" 38#include "kaddressbooktableview.h"
39 39
40 40
41KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab, 41KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab,
42 QWidget *parent, const char *name ) 42 QWidget *parent, const char *name )
43 : KAddressBookView( ab, parent, name ) 43 : KAddressBookView( ab, parent, name )
44{ 44{
45 mainLayout = new QVBoxLayout( viewWidget(), 2 ); 45 mainLayout = new QVBoxLayout( viewWidget(), 2 );
46 46
47 // The list view will be created when the config is read. 47 // The list view will be created when the config is read.
48 mListView = 0; 48 mListView = 0;
49} 49}
50 50
51KAddressBookTableView::~KAddressBookTableView() 51KAddressBookTableView::~KAddressBookTableView()
52{ 52{
53} 53}
54 54void KAddressBookTableView::scrollUP()
55{
56 QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Up, 0,0 );
57 QApplication::postEvent( mListView, ev );
58}
59void KAddressBookTableView::scrollDOWN()
60{
61 QKeyEvent * ev = new QKeyEvent ( QEvent::KeyPress, Qt::Key_Down, 0,0 );
62 QApplication::postEvent( mListView, ev );
63}
55void KAddressBookTableView::reconstructListView() 64void KAddressBookTableView::reconstructListView()
56{ 65{
57 if (mListView) 66 if (mListView)
58 { 67 {
59 disconnect(mListView, SIGNAL(selectionChanged()), 68 disconnect(mListView, SIGNAL(selectionChanged()),
60 this, SLOT(addresseeSelected())); 69 this, SLOT(addresseeSelected()));
61 disconnect(mListView, SIGNAL(executed(QListViewItem*)), 70 disconnect(mListView, SIGNAL(executed(QListViewItem*)),
62 this, SLOT(addresseeExecuted(QListViewItem*))); 71 this, SLOT(addresseeExecuted(QListViewItem*)));
63 disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)), 72 disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
64 this, SLOT(addresseeExecuted(QListViewItem*))); 73 this, SLOT(addresseeExecuted(QListViewItem*)));
65 disconnect(mListView, SIGNAL(startAddresseeDrag()), this, 74 disconnect(mListView, SIGNAL(startAddresseeDrag()), this,
66 SIGNAL(startDrag())); 75 SIGNAL(startDrag()));
67 disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)), 76 disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)),
68 this, SLOT(addresseeExecuted(QListViewItem*))); 77 this, SLOT(addresseeExecuted(QListViewItem*)));
69 78
70 disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, 79 disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
71 SIGNAL(dropped(QDropEvent*))); 80 SIGNAL(dropped(QDropEvent*)));
72 delete mListView; 81 delete mListView;
73 } 82 }
74 83
75 mListView = new ContactListView( this, addressBook(), viewWidget() ); 84 mListView = new ContactListView( this, addressBook(), viewWidget() );
76 85
77 // Add the columns 86 // Add the columns
78 KABC::Field::List fieldList = fields(); 87 KABC::Field::List fieldList = fields();
79 KABC::Field::List::ConstIterator it; 88 KABC::Field::List::ConstIterator it;
80 89
81 int c = 0; 90 int c = 0;
82 for( it = fieldList.begin(); it != fieldList.end(); ++it ) { 91 for( it = fieldList.begin(); it != fieldList.end(); ++it ) {
83 mListView->addColumn( (*it)->label() ); 92 mListView->addColumn( (*it)->label() );
84 mListView->setColumnWidthMode(c++, QListView::Manual); 93 mListView->setColumnWidthMode(c++, QListView::Manual);
85//US 94//US
86 // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1()); 95 // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1());
87 } 96 }
88 97
89 connect(mListView, SIGNAL(selectionChanged()), 98 connect(mListView, SIGNAL(selectionChanged()),
90 this, SLOT(addresseeSelected())); 99 this, SLOT(addresseeSelected()));
91 connect(mListView, SIGNAL(startAddresseeDrag()), this, 100 connect(mListView, SIGNAL(startAddresseeDrag()), this,
92 SIGNAL(startDrag())); 101 SIGNAL(startDrag()));
93 connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, 102 connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
94 SIGNAL(dropped(QDropEvent*))); 103 SIGNAL(dropped(QDropEvent*)));
95 104
96 if (KABPrefs::instance()->mHonorSingleClick) 105 if (KABPrefs::instance()->mHonorSingleClick)
97 connect(mListView, SIGNAL(executed(QListViewItem*)), 106 connect(mListView, SIGNAL(executed(QListViewItem*)),
98 this, SLOT(addresseeExecuted(QListViewItem*))); 107 this, SLOT(addresseeExecuted(QListViewItem*)));
99 else 108 else
100 connect(mListView, SIGNAL(doubleClicked(QListViewItem*)), 109 connect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
101 this, SLOT(addresseeExecuted(QListViewItem*))); 110 this, SLOT(addresseeExecuted(QListViewItem*)));
102 connect(mListView, SIGNAL(returnPressed(QListViewItem*)), 111 connect(mListView, SIGNAL(returnPressed(QListViewItem*)),
103 this, SLOT(addresseeExecuted(QListViewItem*))); 112 this, SLOT(addresseeExecuted(QListViewItem*)));
104 connect(mListView, SIGNAL(signalDelete()), 113 connect(mListView, SIGNAL(signalDelete()),
105 this, SLOT(addresseeDeleted())); 114 this, SLOT(addresseeDeleted()));
106 115
107//US performceimprovement. Refresh is done from the outside 116//US performceimprovement. Refresh is done from the outside
108//US refresh(); 117//US refresh();
109 118
110 mListView->setSorting( 0, true ); 119 mListView->setSorting( 0, true );
111 mainLayout->addWidget( mListView ); 120 mainLayout->addWidget( mListView );
112 mainLayout->activate(); 121 mainLayout->activate();
113 mListView->show(); 122 mListView->show();
114} 123}
115 124
116void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field ) 125void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field )
117{ 126{
118 mListView->clear(); 127 mListView->clear();
119 if ( s.isEmpty() || s == "*" ) { 128 if ( s.isEmpty() || s == "*" ) {
120 refresh(); 129 refresh();
121 return; 130 return;
122 } 131 }
123 QString pattern = s.lower()+"*"; 132 QString pattern = s.lower()+"*";
124 QRegExp re; 133 QRegExp re;
125 re.setWildcard(true); // most people understand these better. 134 re.setWildcard(true); // most people understand these better.
126 re.setCaseSensitive(false); 135 re.setCaseSensitive(false);
127 re.setPattern( pattern ); 136 re.setPattern( pattern );
128 if (!re.isValid()) 137 if (!re.isValid())
129 return; 138 return;
130 KABC::Addressee::List addresseeList = addressees(); 139 KABC::Addressee::List addresseeList = addressees();
131 KABC::Addressee::List::Iterator it; 140 KABC::Addressee::List::Iterator it;
132 if ( field ) { 141 if ( field ) {
133 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 142 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
134#if QT_VERSION >= 300 143#if QT_VERSION >= 300
135 if (re.search(field->value( *it ).lower()) != -1) 144 if (re.search(field->value( *it ).lower()) != -1)
136#else 145#else
137 if (re.match(field->value( *it ).lower()) != -1) 146 if (re.match(field->value( *it ).lower()) != -1)
138#endif 147#endif
139 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); 148 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
140 149
141 } 150 }
142 } else { 151 } else {
143 KABC::Field::List fieldList = fields(); 152 KABC::Field::List fieldList = fields();
144 KABC::Field::List::ConstIterator fieldIt; 153 KABC::Field::List::ConstIterator fieldIt;
145 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 154 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
146 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) { 155 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
147#if QT_VERSION >= 300 156#if QT_VERSION >= 300
148 if (re.search((*fieldIt)->value( *it ).lower()) != -1) 157 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
149#else 158#else
150 if (re.match((*fieldIt)->value( *it ).lower()) != -1) 159 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
151#endif 160#endif
152 { 161 {
153 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); 162 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
154 break; 163 break;
155 } 164 }
156 } 165 }
157 } 166 }
158 } 167 }
159 // Sometimes the background pixmap gets messed up when we add lots 168 // Sometimes the background pixmap gets messed up when we add lots
160 // of items. 169 // of items.
161 mListView->repaint(); 170 mListView->repaint();
162 emit selected(QString::null); 171 if ( mListView->firstChild() ) {
172 mListView->setCurrentItem ( mListView->firstChild() );
173 mListView->setSelected ( mListView->firstChild(), true );
174 }
175 else
176 emit selected(QString::null);
163 177
164} 178}
165void KAddressBookTableView::writeConfig(KConfig *config) 179void KAddressBookTableView::writeConfig(KConfig *config)
166{ 180{
167 KAddressBookView::writeConfig(config); 181 KAddressBookView::writeConfig(config);
168 182
169 mListView->saveLayout(config, config->group()); 183 mListView->saveLayout(config, config->group());
170} 184}
171 185
172void KAddressBookTableView::readConfig(KConfig *config) 186void KAddressBookTableView::readConfig(KConfig *config)
173{ 187{
174 KAddressBookView::readConfig( config ); 188 KAddressBookView::readConfig( config );
175 // The config could have changed the fields, so we need to reconstruct 189 // The config could have changed the fields, so we need to reconstruct
176 // the listview. 190 // the listview.
177 reconstructListView(); 191 reconstructListView();
178 192
179 // costum colors? 193 // costum colors?
180 if ( config->readBoolEntry( "EnableCustomColors", false ) ) 194 if ( config->readBoolEntry( "EnableCustomColors", false ) )
181 { 195 {
182 QPalette p( mListView->palette() ); 196 QPalette p( mListView->palette() );
183 QColor c = p.color(QPalette::Normal, QColorGroup::Base ); 197 QColor c = p.color(QPalette::Normal, QColorGroup::Base );
184 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); 198 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) );
185 c = p.color(QPalette::Normal, QColorGroup::Text ); 199 c = p.color(QPalette::Normal, QColorGroup::Text );
186 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); 200 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) );
187 c = p.color(QPalette::Normal, QColorGroup::Button ); 201 c = p.color(QPalette::Normal, QColorGroup::Button );
188 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); 202 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) );
189 c = p.color(QPalette::Normal, QColorGroup::ButtonText ); 203 c = p.color(QPalette::Normal, QColorGroup::ButtonText );
190 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); 204 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) );
191 c = p.color(QPalette::Normal, QColorGroup::Highlight ); 205 c = p.color(QPalette::Normal, QColorGroup::Highlight );
192 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); 206 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) );
193 c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); 207 c = p.color(QPalette::Normal, QColorGroup::HighlightedText );
194 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); 208 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) );
195#ifndef KAB_EMBEDDED 209#ifndef KAB_EMBEDDED
196 c = KGlobalSettings::alternateBackgroundColor(); 210 c = KGlobalSettings::alternateBackgroundColor();
197#else //KAB_EMBEDDED 211#else //KAB_EMBEDDED
198 c = QColor(240, 240, 240); 212 c = QColor(240, 240, 240);
199#endif //KAB_EMBEDDED 213#endif //KAB_EMBEDDED
200 c = config->readColorEntry ("AlternatingBackgroundColor", &c); 214 c = config->readColorEntry ("AlternatingBackgroundColor", &c);
201 mListView->setAlternateColor(c); 215 mListView->setAlternateColor(c);
202 216
203 217
204 //US mListView->viewport()->setPalette( p ); 218 //US mListView->viewport()->setPalette( p );
205 mListView->setPalette( p ); 219 mListView->setPalette( p );
206 } 220 }
207 else 221 else
208 { 222 {
209 // needed if turned off during a session. 223 // needed if turned off during a session.
210 //US mListView->viewport()->setPalette( mListView->palette() ); 224 //US mListView->viewport()->setPalette( mListView->palette() );
211 mListView->setPalette( mListView->palette() ); 225 mListView->setPalette( mListView->palette() );
212 } 226 }
213 227
214 //custom fonts? 228 //custom fonts?
215 QFont f( font() ); 229 QFont f( font() );
216 if ( config->readBoolEntry( "EnableCustomFonts", false ) ) 230 if ( config->readBoolEntry( "EnableCustomFonts", false ) )
217 { 231 {
218 mListView->setFont( config->readFontEntry( "TextFont", &f) ); 232 mListView->setFont( config->readFontEntry( "TextFont", &f) );
219 f.setBold( true ); 233 f.setBold( true );
220 //US mListView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); 234 //US mListView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) );
221 mListView->header()->setFont( config->readFontEntry( "HeaderFont", &f ) ); 235 mListView->header()->setFont( config->readFontEntry( "HeaderFont", &f ) );
222 } 236 }
223 else 237 else
224 { 238 {
225 mListView->setFont( f ); 239 mListView->setFont( f );
226 f.setBold( true ); 240 f.setBold( true );
227 //US mListView->setHeaderFont( f ); 241 //US mListView->setHeaderFont( f );
228 mListView->header()->setFont( f ); 242 mListView->header()->setFont( f );
229 } 243 }
230 244
231 245
232 246
233 247
234 248
235 // Set the list view options 249 // Set the list view options
236 mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground", 250 mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground",
237 true)); 251 true));
238 mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false)); 252 mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false));
239 mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true)); 253 mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true));
240 254
241 if (config->readBoolEntry("Background", false)) 255 if (config->readBoolEntry("Background", false))
242 mListView->setBackgroundPixmap(config->readEntry("BackgroundName")); 256 mListView->setBackgroundPixmap(config->readEntry("BackgroundName"));
243 257
244 // Restore the layout of the listview 258 // Restore the layout of the listview
245 mListView->restoreLayout(config, config->group()); 259 mListView->restoreLayout(config, config->group());
246} 260}
247 261
248void KAddressBookTableView::refresh(QString uid) 262void KAddressBookTableView::refresh(QString uid)
249{ 263{
250 // For now just repopulate. In reality this method should 264 // For now just repopulate. In reality this method should
251 // check the value of uid, and if valid iterate through 265 // check the value of uid, and if valid iterate through
252 // the listview to find the entry, then tell it to refresh. 266 // the listview to find the entry, then tell it to refresh.
253 267
254 if (uid.isNull()) { 268 if (uid.isNull()) {
255 // Clear the list view 269 // Clear the list view
256 QString currentUID, nextUID; 270 QString currentUID, nextUID;
257#ifndef KAB_EMBEDDED 271#ifndef KAB_EMBEDDED
258 ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() ); 272 ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() );
259#else //KAB_EMBEDDED 273#else //KAB_EMBEDDED
260 ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() ); 274 ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() );
261#endif //KAB_EMBEDDED 275#endif //KAB_EMBEDDED
262 276
263 if ( currentItem ) { 277 if ( currentItem ) {
264#ifndef KAB_EMBEDDED 278#ifndef KAB_EMBEDDED
265 ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() ); 279 ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() );
266#else //KAB_EMBEDDED 280#else //KAB_EMBEDDED
267 ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() ); 281 ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() );
268#endif //KAB_EMBEDDED 282#endif //KAB_EMBEDDED
269 if ( nextItem ) 283 if ( nextItem )
270 nextUID = nextItem->addressee().uid(); 284 nextUID = nextItem->addressee().uid();
271 currentUID = currentItem->addressee().uid(); 285 currentUID = currentItem->addressee().uid();
272 } 286 }
273 287
274 mListView->clear(); 288 mListView->clear();
275 289
276 currentItem = 0; 290 currentItem = 0;
277 KABC::Addressee::List addresseeList = addressees(); 291 KABC::Addressee::List addresseeList = addressees();
278 KABC::Addressee::List::Iterator it; 292 KABC::Addressee::List::Iterator it;
279 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) { 293 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
280 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") ) 294 if ( (*it).uid().left(2) == "la" && (*it).uid().left(19) == QString("last-syncAddressee-") )
281 continue; 295 continue;
282 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields()); 296 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
283 if ( (*it).uid() == currentUID ) 297 if ( (*it).uid() == currentUID )
284 currentItem = item; 298 currentItem = item;
285 else if ( (*it).uid() == nextUID && !currentItem ) 299 else if ( (*it).uid() == nextUID && !currentItem )
286 currentItem = item; 300 currentItem = item;
287 } 301 }
288 302
289 // Sometimes the background pixmap gets messed up when we add lots 303 // Sometimes the background pixmap gets messed up when we add lots
290 // of items. 304 // of items.
291 mListView->repaint(); 305 mListView->repaint();
292 306
293 if ( currentItem ) { 307 if ( currentItem ) {
294 mListView->setCurrentItem( currentItem ); 308 mListView->setCurrentItem( currentItem );
295 mListView->ensureItemVisible( currentItem ); 309 mListView->ensureItemVisible( currentItem );
296 } 310 }
297 } else { 311 } else {
298 // Only need to update on entry. Iterate through and try to find it 312 // Only need to update on entry. Iterate through and try to find it
299 ContactListViewItem *ceItem; 313 ContactListViewItem *ceItem;
300 QListViewItemIterator it( mListView ); 314 QListViewItemIterator it( mListView );
301 while ( it.current() ) { 315 while ( it.current() ) {
302#ifndef KAB_EMBEDDED 316#ifndef KAB_EMBEDDED
303 ceItem = dynamic_cast<ContactListViewItem*>( it.current() ); 317 ceItem = dynamic_cast<ContactListViewItem*>( it.current() );
304#else //KAB_EMBEDDED 318#else //KAB_EMBEDDED
305 ceItem = (ContactListViewItem*)( it.current() ); 319 ceItem = (ContactListViewItem*)( it.current() );
306#endif //KAB_EMBEDDED 320#endif //KAB_EMBEDDED
307 321
308 if ( ceItem && ceItem->addressee().uid() == uid ) { 322 if ( ceItem && ceItem->addressee().uid() == uid ) {
309 ceItem->refresh(); 323 ceItem->refresh();
310 return; 324 return;
311 } 325 }
312 ++it; 326 ++it;
313 } 327 }
314 328
315 refresh( QString::null ); 329 refresh( QString::null );
316 } 330 }
317} 331}
318 332
319QStringList KAddressBookTableView::selectedUids() 333QStringList KAddressBookTableView::selectedUids()
320{ 334{
321 QStringList uidList; 335 QStringList uidList;
322 QListViewItem *item; 336 QListViewItem *item;
323 ContactListViewItem *ceItem; 337 ContactListViewItem *ceItem;
324 338
325 for(item = mListView->firstChild(); item; item = item->itemBelow()) 339 for(item = mListView->firstChild(); item; item = item->itemBelow())
326 { 340 {
327 if (mListView->isSelected( item )) 341 if (mListView->isSelected( item ))
328 { 342 {
329#ifndef KAB_EMBEDDED 343#ifndef KAB_EMBEDDED
330 ceItem = dynamic_cast<ContactListViewItem*>(item); 344 ceItem = dynamic_cast<ContactListViewItem*>(item);
331#else //KAB_EMBEDDED 345#else //KAB_EMBEDDED
332 ceItem = (ContactListViewItem*)(item); 346 ceItem = (ContactListViewItem*)(item);
333#endif //KAB_EMBEDDED 347#endif //KAB_EMBEDDED
334 348
335 if (ceItem != 0L) 349 if (ceItem != 0L)
336 uidList << ceItem->addressee().uid(); 350 uidList << ceItem->addressee().uid();
337 } 351 }
338 } 352 }
339 if ( uidList.count() == 0 ) 353 if ( uidList.count() == 0 )
340 if ( mListView->currentItem() ) { 354 if ( mListView->currentItem() ) {
341 ceItem = (ContactListViewItem*)(mListView->currentItem()) ; 355 ceItem = (ContactListViewItem*)(mListView->currentItem()) ;
342 uidList << ceItem->addressee().uid(); 356 uidList << ceItem->addressee().uid();
343 } 357 }
344 358
345 return uidList; 359 return uidList;
346} 360}
347 361
348void KAddressBookTableView::setSelected(QString uid, bool selected) 362void KAddressBookTableView::setSelected(QString uid, bool selected)
349{ 363{
350 QListViewItem *item; 364 QListViewItem *item;
351 ContactListViewItem *ceItem; 365 ContactListViewItem *ceItem;
352 366
353 if (uid.isNull()) 367 if (uid.isNull())
354 { 368 {
355 mListView->selectAll(selected); 369 mListView->selectAll(selected);
356 } 370 }
357 else 371 else
358 { 372 {
359 for(item = mListView->firstChild(); item; item = item->itemBelow()) 373 for(item = mListView->firstChild(); item; item = item->itemBelow())
360 { 374 {
361#ifndef KAB_EMBEDDED 375#ifndef KAB_EMBEDDED
362 ceItem = dynamic_cast<ContactListViewItem*>(item); 376 ceItem = dynamic_cast<ContactListViewItem*>(item);
363#else //KAB_EMBEDDED 377#else //KAB_EMBEDDED
364 ceItem = (ContactListViewItem*)(item); 378 ceItem = (ContactListViewItem*)(item);
365#endif //KAB_EMBEDDED 379#endif //KAB_EMBEDDED
366 380
367 381
368 if ((ceItem != 0L) && (ceItem->addressee().uid() == uid)) 382 if ((ceItem != 0L) && (ceItem->addressee().uid() == uid))
369 { 383 {
370 mListView->setSelected(item, selected); 384 mListView->setSelected(item, selected);
371 385
372 if (selected) 386 if (selected)
373 mListView->ensureItemVisible(item); 387 mListView->ensureItemVisible(item);
374 } 388 }
375 } 389 }
376 } 390 }
377} 391}
378 392
379void KAddressBookTableView::addresseeSelected() 393void KAddressBookTableView::addresseeSelected()
380{ 394{
381 // We need to try to find the first selected item. This might not be the 395 // We need to try to find the first selected item. This might not be the
382 // last selected item, but when QListView is in multiselection mode, 396 // last selected item, but when QListView is in multiselection mode,
383 // there is no way to figure out which one was 397 // there is no way to figure out which one was
384 // selected last. 398 // selected last.
385 QListViewItem *item; 399 QListViewItem *item;
386 bool found =false; 400 bool found =false;
387 for (item = mListView->firstChild(); item && !found; 401 for (item = mListView->firstChild(); item && !found;
388 item = item->nextSibling()) 402 item = item->nextSibling())
389 { 403 {
390 if (item->isSelected()) 404 if (item->isSelected())
391 { 405 {
392 found = true; 406 found = true;
393#ifndef KAB_EMBEDDED 407#ifndef KAB_EMBEDDED
394 ContactListViewItem *ceItem 408 ContactListViewItem *ceItem
395 = dynamic_cast<ContactListViewItem*>(item); 409 = dynamic_cast<ContactListViewItem*>(item);
396#else //KAB_EMBEDDED 410#else //KAB_EMBEDDED
397 ContactListViewItem *ceItem 411 ContactListViewItem *ceItem
398 = (ContactListViewItem*)(item); 412 = (ContactListViewItem*)(item);
399#endif //KAB_EMBEDDED 413#endif //KAB_EMBEDDED
400 414
401 if ( ceItem ) emit selected(ceItem->addressee().uid()); 415 if ( ceItem ) emit selected(ceItem->addressee().uid());
402 } 416 }
403 } 417 }
404 418
405 if (!found) 419 if (!found)
406 emit selected(QString::null); 420 emit selected(QString::null);
407} 421}
408 422
409void KAddressBookTableView::addresseeExecuted(QListViewItem *item) 423void KAddressBookTableView::addresseeExecuted(QListViewItem *item)
410{ 424{
411 if (item) 425 if (item)
412 { 426 {
413#ifndef KAB_EMBEDDED 427#ifndef KAB_EMBEDDED
414 ContactListViewItem *ceItem 428 ContactListViewItem *ceItem
415 = dynamic_cast<ContactListViewItem*>(item); 429 = dynamic_cast<ContactListViewItem*>(item);
416#else //KAB_EMBEDDED 430#else //KAB_EMBEDDED
417 ContactListViewItem *ceItem 431 ContactListViewItem *ceItem
418 = (ContactListViewItem*)(item); 432 = (ContactListViewItem*)(item);
419#endif //KAB_EMBEDDED 433#endif //KAB_EMBEDDED
420 434
421 if (ceItem) 435 if (ceItem)
422 { 436 {
423 emit executed(ceItem->addressee().uid()); 437 emit executed(ceItem->addressee().uid());
424 } 438 }
425 } 439 }
426 else 440 else
427 { 441 {
428 emit executed(QString::null); 442 emit executed(QString::null);
429 } 443 }
430} 444}
431 445
432void KAddressBookTableView::addresseeDeleted() 446void KAddressBookTableView::addresseeDeleted()
433{ 447{
434 448
435 emit deleteRequest(); 449 emit deleteRequest();
436 450
437} 451}
438 452
439 453
440 454
441 455
442 456
443#ifndef KAB_EMBEDDED 457#ifndef KAB_EMBEDDED
444#include "kaddressbooktableview.moc" 458#include "kaddressbooktableview.moc"
445#endif //KAB_EMBEDDED 459#endif //KAB_EMBEDDED
diff --git a/kaddressbook/views/kaddressbooktableview.h b/kaddressbook/views/kaddressbooktableview.h
index ecfe7a1..865f8d5 100644
--- a/kaddressbook/views/kaddressbooktableview.h
+++ b/kaddressbook/views/kaddressbooktableview.h
@@ -1,115 +1,117 @@
1#ifndef KADDRESSBOOKTABLEVIEW_H 1#ifndef KADDRESSBOOKTABLEVIEW_H
2#define KADDRESSBOOKTABLEVIEW_H 2#define KADDRESSBOOKTABLEVIEW_H
3 3
4 4
5#ifndef KAB_EMBEDDED 5#ifndef KAB_EMBEDDED
6 6
7 7
8#ifdef HAVE_CONFIG_H 8#ifdef HAVE_CONFIG_H
9#include <config.h> 9#include <config.h>
10#endif 10#endif
11 11
12#include <qwidget.h> 12#include <qwidget.h>
13#include <qlistview.h> 13#include <qlistview.h>
14#include <qstring.h> 14#include <qstring.h>
15#include <qdialog.h> 15#include <qdialog.h>
16#include <qtabdialog.h> 16#include <qtabdialog.h>
17#include <qstringlist.h> 17#include <qstringlist.h>
18#include <qvaluelist.h> 18#include <qvaluelist.h>
19 19
20#include "undo.h" 20#include "undo.h"
21 21
22#else //KAB_EMBEDDED 22#else //KAB_EMBEDDED
23#include "views/configuretableviewdialog.h" 23#include "views/configuretableviewdialog.h"
24#endif //KAB_EMBEDDED 24#endif //KAB_EMBEDDED
25 25
26#include "klocale.h" 26#include "klocale.h"
27#include "kaddressbookview.h" 27#include "kaddressbookview.h"
28 28
29class QListViewItem; 29class QListViewItem;
30class QListBox; 30class QListBox;
31class QVBoxLayout; 31class QVBoxLayout;
32class KConfig; 32class KConfig;
33 33
34class ContactListViewItem; 34class ContactListViewItem;
35class ContactListView; 35class ContactListView;
36 36
37 37
38namespace KABC { class AddressBook; } 38namespace KABC { class AddressBook; }
39 39
40/** 40/**
41 * This class is the table view for kaddressbook. This view is a KListView 41 * This class is the table view for kaddressbook. This view is a KListView
42 * with multiple columns for the selected fields. 42 * with multiple columns for the selected fields.
43 * 43 *
44 * @short Table View 44 * @short Table View
45 * @author Don Sanders <dsanders@kde.org> 45 * @author Don Sanders <dsanders@kde.org>
46 * @version 0.1 46 * @version 0.1
47 */ 47 */
48class KAddressBookTableView : public KAddressBookView 48class KAddressBookTableView : public KAddressBookView
49{ 49{
50friend class ContactListView; 50friend class ContactListView;
51 51
52 Q_OBJECT 52 Q_OBJECT
53 53
54 public: 54 public:
55 KAddressBookTableView( KABC::AddressBook *ab, QWidget *parent, 55 KAddressBookTableView( KABC::AddressBook *ab, QWidget *parent,
56 const char *name = 0 ); 56 const char *name = 0 );
57 virtual ~KAddressBookTableView(); 57 virtual ~KAddressBookTableView();
58 58
59 virtual void refresh(QString uid = QString::null); 59 virtual void refresh(QString uid = QString::null);
60 virtual QStringList selectedUids(); 60 virtual QStringList selectedUids();
61 virtual void setSelected(QString uid = QString::null, bool selected = false); 61 virtual void setSelected(QString uid = QString::null, bool selected = false);
62 virtual void readConfig(KConfig *config); 62 virtual void readConfig(KConfig *config);
63 virtual void writeConfig(KConfig *config); 63 virtual void writeConfig(KConfig *config);
64 virtual QString type() const { return "Table"; } 64 virtual QString type() const { return "Table"; }
65 void doSearch( const QString& s ,KABC::Field *field ); 65 void doSearch( const QString& s ,KABC::Field *field );
66 virtual void scrollUP();
67 virtual void scrollDOWN();
66 68
67 public slots: 69 public slots:
68 virtual void reconstructListView(); 70 virtual void reconstructListView();
69 71
70 protected slots: 72 protected slots:
71 /** Called whenever the user selects an addressee in the list view. 73 /** Called whenever the user selects an addressee in the list view.
72 */ 74 */
73 void addresseeSelected(); 75 void addresseeSelected();
74 void addresseeDeleted(); 76 void addresseeDeleted();
75 77
76 /** Called whenever the user executes an addressee. In terms of the 78 /** Called whenever the user executes an addressee. In terms of the
77 * list view, this is probably a double click 79 * list view, this is probably a double click
78 */ 80 */
79 void addresseeExecuted(QListViewItem*); 81 void addresseeExecuted(QListViewItem*);
80 82
81 private: 83 private:
82 QVBoxLayout *mainLayout; 84 QVBoxLayout *mainLayout;
83 ContactListView *mListView; 85 ContactListView *mListView;
84}; 86};
85 87
86 88
87class TableViewFactory : public ViewFactory 89class TableViewFactory : public ViewFactory
88{ 90{
89 public: 91 public:
90 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) 92 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
91 { 93 {
92 return new KAddressBookTableView( ab, parent, name ); 94 return new KAddressBookTableView( ab, parent, name );
93 } 95 }
94 96
95 QString type() const { return "Table"; } 97 QString type() const { return "Table"; }
96 98
97 QString description() const { return i18n( "A listing of contacts in a table. Each cell of " 99 QString description() const { return i18n( "A listing of contacts in a table. Each cell of "
98 "the table holds a field of the contact." ); } 100 "the table holds a field of the contact." ); }
99 101
100 ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent, 102 ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent,
101 const char *name = 0 ) 103 const char *name = 0 )
102 { 104 {
103 return new ConfigureTableViewWidget( ab, parent, name ); 105 return new ConfigureTableViewWidget( ab, parent, name );
104 } 106 }
105}; 107};
106/*US 108/*US
107extern "C" { 109extern "C" {
108 void *init_libkaddrbk_tableview() 110 void *init_libkaddrbk_tableview()
109 { 111 {
110 return ( new TableViewFactory ); 112 return ( new TableViewFactory );
111 } 113 }
112} 114}
113*/ 115*/
114 116
115#endif 117#endif