summaryrefslogtreecommitdiffabout
path: root/kaddressbook/views
Unidiff
Diffstat (limited to 'kaddressbook/views') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/views/kaddressbookcardview.cpp53
-rw-r--r--kaddressbook/views/kaddressbookcardview.h2
-rw-r--r--kaddressbook/views/kaddressbookiconview.cpp47
-rw-r--r--kaddressbook/views/kaddressbookiconview.h1
-rw-r--r--kaddressbook/views/kaddressbooktableview.cpp49
-rw-r--r--kaddressbook/views/kaddressbooktableview.h1
6 files changed, 151 insertions, 2 deletions
diff --git a/kaddressbook/views/kaddressbookcardview.cpp b/kaddressbook/views/kaddressbookcardview.cpp
index 239429f..49c0691 100644
--- a/kaddressbook/views/kaddressbookcardview.cpp
+++ b/kaddressbook/views/kaddressbookcardview.cpp
@@ -70,96 +70,97 @@ class AddresseeCardViewItem : public CardViewItem
70 70
71 void refresh() 71 void refresh()
72 { 72 {
73 // Update our addressee, since it may have changed elsewhere 73 // Update our addressee, since it may have changed elsewhere
74 mAddressee = mDocument->findByUid(mAddressee.uid()); 74 mAddressee = mDocument->findByUid(mAddressee.uid());
75 75
76 if (!mAddressee.isEmpty()) 76 if (!mAddressee.isEmpty())
77 { 77 {
78 clearFields(); 78 clearFields();
79 79
80 // Try all the selected fields until we find one with text. 80 // Try all the selected fields until we find one with text.
81 // This will limit the number of unlabeled icons in the view 81 // This will limit the number of unlabeled icons in the view
82 KABC::Field::List::Iterator iter; 82 KABC::Field::List::Iterator iter;
83 for (iter = mFields.begin(); iter != mFields.end(); ++iter) 83 for (iter = mFields.begin(); iter != mFields.end(); ++iter)
84 { 84 {
85 // insert empty fields or not? not doing so saves a bit of memory and CPU 85 // insert empty fields or not? not doing so saves a bit of memory and CPU
86 // (during geometry calculations), but prevents having equally 86 // (during geometry calculations), but prevents having equally
87 // wide label columns in all cards, unless CardViewItem/CardView search 87 // wide label columns in all cards, unless CardViewItem/CardView search
88 // globally for the widest label. (anders) 88 // globally for the widest label. (anders)
89 //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty()) 89 //if (mShowEmptyFields || !(*iter)->value( mAddressee ).isEmpty())
90 insertField((*iter)->label(), (*iter)->value( mAddressee )); 90 insertField((*iter)->label(), (*iter)->value( mAddressee ));
91 } 91 }
92 92
93 // We might want to make this the first field. hmm... -mpilone 93 // We might want to make this the first field. hmm... -mpilone
94 setCaption( mAddressee.realName() ); 94 setCaption( mAddressee.realName() );
95 } 95 }
96 } 96 }
97 97
98 private: 98 private:
99 KABC::Field::List mFields; 99 KABC::Field::List mFields;
100 bool mShowEmptyFields; 100 bool mShowEmptyFields;
101 KABC::AddressBook *mDocument; 101 KABC::AddressBook *mDocument;
102 KABC::Addressee mAddressee; 102 KABC::Addressee mAddressee;
103}; 103};
104 104
105/////////////////////////////// 105///////////////////////////////
106// AddresseeCardView 106// AddresseeCardView
107 107
108AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name) 108AddresseeCardView::AddresseeCardView(QWidget *parent, const char *name)
109 : CardView(parent, name) 109 : CardView(parent, name)
110{ 110{
111 setAcceptDrops(true); 111 setAcceptDrops(true);
112} 112}
113 113
114AddresseeCardView::~AddresseeCardView() 114AddresseeCardView::~AddresseeCardView()
115{ 115{
116} 116}
117 117
118
118void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e) 119void AddresseeCardView::dragEnterEvent(QDragEnterEvent *e)
119{ 120{
120#ifndef KAB_EMBEDDED 121#ifndef KAB_EMBEDDED
121 if (QTextDrag::canDecode(e)) 122 if (QTextDrag::canDecode(e))
122 e->accept(); 123 e->accept();
123#else //KAB_EMBEDDED 124#else //KAB_EMBEDDED
124qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented"); 125qDebug("AddresseeCardView::dragEnterEvent drag&drop is not implemented");
125#endif //KAB_EMBEDDED 126#endif //KAB_EMBEDDED
126} 127}
127 128
128void AddresseeCardView::dropEvent(QDropEvent *e) 129void AddresseeCardView::dropEvent(QDropEvent *e)
129{ 130{
130 emit addresseeDropped(e); 131 emit addresseeDropped(e);
131} 132}
132 133
133void AddresseeCardView::startDrag() 134void AddresseeCardView::startDrag()
134{ 135{
135 emit startAddresseeDrag(); 136 emit startAddresseeDrag();
136} 137}
137 138
138 139
139/////////////////////////////// 140///////////////////////////////
140// KAddressBookCardView 141// KAddressBookCardView
141 142
142KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab, 143KAddressBookCardView::KAddressBookCardView( KABC::AddressBook *ab,
143 QWidget *parent, const char *name ) 144 QWidget *parent, const char *name )
144 : KAddressBookView( ab, parent, name ) 145 : KAddressBookView( ab, parent, name )
145{ 146{
146 mShowEmptyFields = false; 147 mShowEmptyFields = false;
147 148
148 // Init the GUI 149 // Init the GUI
149 QVBoxLayout *layout = new QVBoxLayout(viewWidget()); 150 QVBoxLayout *layout = new QVBoxLayout(viewWidget());
150 151
151 mCardView = new AddresseeCardView(viewWidget(), "mCardView"); 152 mCardView = new AddresseeCardView(viewWidget(), "mCardView");
152 mCardView->setSelectionMode(CardView::Extended); 153 mCardView->setSelectionMode(CardView::Extended);
153 layout->addWidget(mCardView); 154 layout->addWidget(mCardView);
154 155
155 // Connect up the signals 156 // Connect up the signals
156 connect(mCardView, SIGNAL(executed(CardViewItem *)), 157 connect(mCardView, SIGNAL(executed(CardViewItem *)),
157 this, SLOT(addresseeExecuted(CardViewItem *))); 158 this, SLOT(addresseeExecuted(CardViewItem *)));
158 connect(mCardView, SIGNAL(selectionChanged()), 159 connect(mCardView, SIGNAL(selectionChanged()),
159 this, SLOT(addresseeSelected())); 160 this, SLOT(addresseeSelected()));
160 connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)), 161 connect(mCardView, SIGNAL(addresseeDropped(QDropEvent*)),
161 this, SIGNAL(dropped(QDropEvent*))); 162 this, SIGNAL(dropped(QDropEvent*)));
162 connect(mCardView, SIGNAL(startAddresseeDrag()), 163 connect(mCardView, SIGNAL(startAddresseeDrag()),
163 this, SIGNAL(startDrag())); 164 this, SIGNAL(startDrag()));
164} 165}
165 166
@@ -195,97 +196,147 @@ void KAddressBookCardView::readConfig(KConfig *config)
195 mCardView->viewport()->setPalette( mCardView->palette() ); 196 mCardView->viewport()->setPalette( mCardView->palette() );
196 } 197 }
197 198
198 //custom fonts? 199 //custom fonts?
199 QFont f( font() ); 200 QFont f( font() );
200 if ( config->readBoolEntry( "EnableCustomFonts", false ) ) 201 if ( config->readBoolEntry( "EnableCustomFonts", false ) )
201 { 202 {
202 mCardView->setFont( config->readFontEntry( "TextFont", &f) ); 203 mCardView->setFont( config->readFontEntry( "TextFont", &f) );
203 f.setBold( true ); 204 f.setBold( true );
204 mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) ); 205 mCardView->setHeaderFont( config->readFontEntry( "HeaderFont", &f ) );
205 } 206 }
206 else 207 else
207 { 208 {
208 mCardView->setFont( f ); 209 mCardView->setFont( f );
209 f.setBold( true ); 210 f.setBold( true );
210 mCardView->setHeaderFont( f ); 211 mCardView->setHeaderFont( f );
211 } 212 }
212 213
213 mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true)); 214 mCardView->setDrawCardBorder(config->readBoolEntry("DrawBorder", true));
214 mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators", 215 mCardView->setDrawColSeparators(config->readBoolEntry("DrawSeparators",
215 true)); 216 true));
216 mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false)); 217 mCardView->setDrawFieldLabels(config->readBoolEntry("DrawFieldLabels",false));
217 mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false); 218 mShowEmptyFields = config->readBoolEntry("ShowEmptyFields", false);
218 219
219 mCardView->setShowEmptyFields( mShowEmptyFields ); 220 mCardView->setShowEmptyFields( mShowEmptyFields );
220 221
221 mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) ); 222 mCardView->setItemWidth( config->readNumEntry( "ItemWidth", 200 ) );
222 mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) ); 223 mCardView->setItemMargin( config->readNumEntry( "ItemMargin", 0 ) );
223 mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) ); 224 mCardView->setItemSpacing( config->readNumEntry( "ItemSpacing", 10 ) );
224 mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) ); 225 mCardView->setSeparatorWidth( config->readNumEntry( "SeparatorWidth", 2 ) );
225 226
226 disconnect(mCardView, SIGNAL(executed(CardViewItem *)), 227 disconnect(mCardView, SIGNAL(executed(CardViewItem *)),
227 this, SLOT(addresseeExecuted(CardViewItem *))); 228 this, SLOT(addresseeExecuted(CardViewItem *)));
228 229
229 if (KABPrefs::instance()->mHonorSingleClick) 230 if (KABPrefs::instance()->mHonorSingleClick)
230 connect(mCardView, SIGNAL(executed(CardViewItem *)), 231 connect(mCardView, SIGNAL(executed(CardViewItem *)),
231 this, SLOT(addresseeExecuted(CardViewItem *))); 232 this, SLOT(addresseeExecuted(CardViewItem *)));
232 else 233 else
233 connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)), 234 connect(mCardView, SIGNAL(doubleClicked(CardViewItem *)),
234 this, SLOT(addresseeExecuted(CardViewItem *))); 235 this, SLOT(addresseeExecuted(CardViewItem *)));
235 236
236} 237}
237 238
238void KAddressBookCardView::writeConfig( KConfig *config ) 239void KAddressBookCardView::writeConfig( KConfig *config )
239{ 240{
240 config->writeEntry( "ItemWidth", mCardView->itemWidth() ); 241 config->writeEntry( "ItemWidth", mCardView->itemWidth() );
241 KAddressBookView::writeConfig( config ); 242 KAddressBookView::writeConfig( config );
242} 243}
243 244void KAddressBookCardView::doSearch( const QString& s,KABC::Field *field )
245{
246 mCardView->clear();
247 if ( s.isEmpty() || s == "*" ) {
248 refresh();
249 return;
250 }
251 QString pattern = s.lower()+"*";
252 QRegExp re;
253 re.setWildcard(true); // most people understand these better.
254 re.setCaseSensitive(false);
255 re.setPattern( pattern );
256 if (!re.isValid())
257 return;
258 mCardView->viewport()->setUpdatesEnabled( false );
259 KABC::Addressee::List addresseeList = addressees();
260 KABC::Addressee::List::Iterator it;
261 if ( field ) {
262 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
263#if QT_VERSION >= 300
264 if (re.search(field->value( *it ).lower()) != -1)
265#else
266 if (re.match(field->value( *it ).lower()) != -1)
267#endif
268 new AddresseeCardViewItem(fields(), mShowEmptyFields,
269 addressBook(), *it, mCardView);
270
271 }
272 } else {
273 KABC::Field::List fieldList = fields();
274 KABC::Field::List::ConstIterator fieldIt;
275 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
276 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
277#if QT_VERSION >= 300
278 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
279#else
280 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
281#endif
282 {
283 new AddresseeCardViewItem(fields(), mShowEmptyFields,
284 addressBook(), *it, mCardView);
285 continue;
286 }
287 }
288 }
289 }
290 mCardView->viewport()->setUpdatesEnabled( true );
291 mCardView->viewport()->update();
292 // by default nothing is selected
293 emit selected(QString::null);
294}
244QStringList KAddressBookCardView::selectedUids() 295QStringList KAddressBookCardView::selectedUids()
245{ 296{
246 QStringList uidList; 297 QStringList uidList;
247 CardViewItem *item; 298 CardViewItem *item;
248 AddresseeCardViewItem *aItem; 299 AddresseeCardViewItem *aItem;
249 300
250 for (item = mCardView->firstItem(); item; item = item->nextItem()) 301 for (item = mCardView->firstItem(); item; item = item->nextItem())
251 { 302 {
252 if (item->isSelected()) 303 if (item->isSelected())
253 { 304 {
254#ifndef KAB_EMBEDDED 305#ifndef KAB_EMBEDDED
255 aItem = dynamic_cast<AddresseeCardViewItem*>(item); 306 aItem = dynamic_cast<AddresseeCardViewItem*>(item);
256#else //KAB_EMBEDDED 307#else //KAB_EMBEDDED
257 aItem = (AddresseeCardViewItem*)(item); 308 aItem = (AddresseeCardViewItem*)(item);
258#endif //KAB_EMBEDDED 309#endif //KAB_EMBEDDED
259 if (aItem) 310 if (aItem)
260 uidList << aItem->addressee().uid(); 311 uidList << aItem->addressee().uid();
261 } 312 }
262 } 313 }
263 314
264 return uidList; 315 return uidList;
265} 316}
266 317
267void KAddressBookCardView::refresh(QString uid) 318void KAddressBookCardView::refresh(QString uid)
268{ 319{
269 CardViewItem *item; 320 CardViewItem *item;
270 AddresseeCardViewItem *aItem; 321 AddresseeCardViewItem *aItem;
271 322
272 if (uid.isNull()) 323 if (uid.isNull())
273 { 324 {
274 // Rebuild the view 325 // Rebuild the view
275 mCardView->viewport()->setUpdatesEnabled( false ); 326 mCardView->viewport()->setUpdatesEnabled( false );
276 mCardView->clear(); 327 mCardView->clear();
277 328
278 KABC::Addressee::List addresseeList = addressees(); 329 KABC::Addressee::List addresseeList = addressees();
279 KABC::Addressee::List::Iterator iter; 330 KABC::Addressee::List::Iterator iter;
280 for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter) 331 for (iter = addresseeList.begin(); iter != addresseeList.end(); ++iter)
281 { 332 {
282 aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields, 333 aItem = new AddresseeCardViewItem(fields(), mShowEmptyFields,
283 addressBook(), *iter, mCardView); 334 addressBook(), *iter, mCardView);
284 } 335 }
285 mCardView->viewport()->setUpdatesEnabled( true ); 336 mCardView->viewport()->setUpdatesEnabled( true );
286 mCardView->viewport()->update(); 337 mCardView->viewport()->update();
287 338
288 // by default nothing is selected 339 // by default nothing is selected
289 emit selected(QString::null); 340 emit selected(QString::null);
290 } 341 }
291 else 342 else
diff --git a/kaddressbook/views/kaddressbookcardview.h b/kaddressbook/views/kaddressbookcardview.h
index cd70371..b8efb01 100644
--- a/kaddressbook/views/kaddressbookcardview.h
+++ b/kaddressbook/views/kaddressbookcardview.h
@@ -9,97 +9,97 @@
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 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 63
64 public slots: 64 public slots:
65 void refresh(QString uid = QString::null); 65 void refresh(QString uid = QString::null);
66 void setSelected(QString uid/*US = QString::null*/, bool selected/*US = true*/); 66 void setSelected(QString uid/*US = QString::null*/, bool selected/*US = true*/);
67//US added an additional method without parameter 67//US added an additional method without parameter
68 void setSelected(); 68 void setSelected();
69 69
70 protected slots: 70 protected slots:
71 void addresseeExecuted(CardViewItem *item); 71 void addresseeExecuted(CardViewItem *item);
72 void addresseeSelected(); 72 void addresseeSelected();
73 73
74 private: 74 private:
75 AddresseeCardView *mCardView; 75 AddresseeCardView *mCardView;
76 bool mShowEmptyFields; 76 bool mShowEmptyFields;
77}; 77};
78 78
79class AddresseeCardView : public CardView 79class AddresseeCardView : public CardView
80{ 80{
81 Q_OBJECT 81 Q_OBJECT
82 public: 82 public:
83 AddresseeCardView(QWidget *parent, const char *name = 0); 83 AddresseeCardView(QWidget *parent, const char *name = 0);
84 ~AddresseeCardView(); 84 ~AddresseeCardView();
85 85
86 signals: 86 signals:
87 void startAddresseeDrag(); 87 void startAddresseeDrag();
88 void addresseeDropped(QDropEvent *); 88 void addresseeDropped(QDropEvent *);
89 89
90 protected: 90 protected:
91 virtual void dragEnterEvent(QDragEnterEvent *); 91 virtual void dragEnterEvent(QDragEnterEvent *);
92 virtual void dropEvent(QDropEvent *); 92 virtual void dropEvent(QDropEvent *);
93 virtual void startDrag(); 93 virtual void startDrag();
94}; 94};
95 95
96 96
97class CardViewFactory : public ViewFactory 97class CardViewFactory : public ViewFactory
98{ 98{
99 public: 99 public:
100 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) 100 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
101 { 101 {
102 return new KAddressBookCardView( ab, parent, name ); 102 return new KAddressBookCardView( ab, parent, name );
103 } 103 }
104 104
105 QString type() const { return "Card"; } 105 QString type() const { return "Card"; }
diff --git a/kaddressbook/views/kaddressbookiconview.cpp b/kaddressbook/views/kaddressbookiconview.cpp
index 50ff285..78d63b0 100644
--- a/kaddressbook/views/kaddressbookiconview.cpp
+++ b/kaddressbook/views/kaddressbookiconview.cpp
@@ -51,96 +51,97 @@ class IconViewFactory : public ViewFactory
51 } 51 }
52 52
53 QString type() const { return "Icon"; } 53 QString type() const { return "Icon"; }
54 54
55 QString description() const { return i18n( "Icons represent contacts. Very simple view." ); } 55 QString description() const { return i18n( "Icons represent contacts. Very simple view." ); }
56}; 56};
57 57
58*/ 58*/
59 59
60extern "C" { 60extern "C" {
61 void *init_libkaddrbk_iconview() 61 void *init_libkaddrbk_iconview()
62 { 62 {
63 return ( new IconViewFactory ); 63 return ( new IconViewFactory );
64 } 64 }
65} 65}
66 66
67//////////////////////////////// 67////////////////////////////////
68// AddresseeIconView (internal class) 68// AddresseeIconView (internal class)
69#ifndef KAB_EMBEDDED 69#ifndef KAB_EMBEDDED
70AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name) 70AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name)
71 : KIconView(parent, name) 71 : KIconView(parent, name)
72#else //KAB_EMBEDDED 72#else //KAB_EMBEDDED
73AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name) 73AddresseeIconView::AddresseeIconView(QWidget *parent, const char *name)
74 : QIconView(parent, name) 74 : QIconView(parent, name)
75#endif //KAB_EMBEDDED 75#endif //KAB_EMBEDDED
76 76
77{ 77{
78 setSelectionMode( QIconView::Extended ); 78 setSelectionMode( QIconView::Extended );
79 setResizeMode( QIconView::Adjust ); 79 setResizeMode( QIconView::Adjust );
80 setWordWrapIconText( true ); 80 setWordWrapIconText( true );
81 setGridX( 100 ); 81 setGridX( 100 );
82 setItemsMovable(false); 82 setItemsMovable(false);
83 setSorting(true, true); 83 setSorting(true, true);
84 84
85 85
86//US ??? setMode( KIconView::Select ); 86//US ??? setMode( KIconView::Select );
87 87
88#ifndef KAB_EMBEDDED 88#ifndef KAB_EMBEDDED
89 89
90 connect(this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)), 90 connect(this, SIGNAL(dropped(QDropEvent*, const QValueList<QIconDragItem>&)),
91 this, SLOT(itemDropped(QDropEvent*, const QValueList<QIconDragItem>&))); 91 this, SLOT(itemDropped(QDropEvent*, const QValueList<QIconDragItem>&)));
92#endif //KAB_EMBEDDED 92#endif //KAB_EMBEDDED
93} 93}
94 94
95AddresseeIconView::~AddresseeIconView() 95AddresseeIconView::~AddresseeIconView()
96{ 96{
97} 97}
98 98
99
99void AddresseeIconView::itemDropped(QDropEvent *e, 100void AddresseeIconView::itemDropped(QDropEvent *e,
100 const QValueList<QIconDragItem> &) 101 const QValueList<QIconDragItem> &)
101{ 102{
102 emit addresseeDropped(e); 103 emit addresseeDropped(e);
103} 104}
104 105
105QDragObject *AddresseeIconView::dragObject() 106QDragObject *AddresseeIconView::dragObject()
106{ 107{
107 emit startAddresseeDrag(); 108 emit startAddresseeDrag();
108 109
109 // We never want IconView to start the drag 110 // We never want IconView to start the drag
110 return 0; 111 return 0;
111} 112}
112//////////////////////////////// 113////////////////////////////////
113// AddresseeIconViewItem (internal class) 114// AddresseeIconViewItem (internal class)
114#ifndef KAB_EMBEDDED 115#ifndef KAB_EMBEDDED
115class AddresseeIconViewItem : public KIconViewItem 116class AddresseeIconViewItem : public KIconViewItem
116#else //KAB_EMBEDDED 117#else //KAB_EMBEDDED
117class AddresseeIconViewItem : public QIconViewItem 118class AddresseeIconViewItem : public QIconViewItem
118#endif //KAB_EMBEDDED 119#endif //KAB_EMBEDDED
119{ 120{
120 public: 121 public:
121#ifndef KAB_EMBEDDED 122#ifndef KAB_EMBEDDED
122 AddresseeIconViewItem(const KABC::Field::List &fields, 123 AddresseeIconViewItem(const KABC::Field::List &fields,
123 KABC::AddressBook *doc, const KABC::Addressee &a, 124 KABC::AddressBook *doc, const KABC::Addressee &a,
124 QIconView *parent) 125 QIconView *parent)
125 : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) 126 : KIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a)
126#else //KAB_EMBEDDED 127#else //KAB_EMBEDDED
127 AddresseeIconViewItem(const KABC::Field::List &fields, 128 AddresseeIconViewItem(const KABC::Field::List &fields,
128 KABC::AddressBook *doc, const KABC::Addressee &a, 129 KABC::AddressBook *doc, const KABC::Addressee &a,
129 QIconView *parent) 130 QIconView *parent)
130 : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a) 131 : QIconViewItem(parent), mFields( fields ), mDocument(doc), mAddressee(a)
131#endif //KAB_EMBEDDED 132#endif //KAB_EMBEDDED
132 { 133 {
133 if ( mFields.isEmpty() ) { 134 if ( mFields.isEmpty() ) {
134 mFields = KABC::Field::defaultFields(); 135 mFields = KABC::Field::defaultFields();
135 } 136 }
136 refresh(); 137 refresh();
137 } 138 }
138 139
139 const KABC::Addressee &addressee() const { return mAddressee; } 140 const KABC::Addressee &addressee() const { return mAddressee; }
140 141
141 void refresh() 142 void refresh()
142 { 143 {
143 // Update our addressee, since it may have changed elsewhere 144 // Update our addressee, since it may have changed elsewhere
144 mAddressee = mDocument->findByUid(mAddressee.uid()); 145 mAddressee = mDocument->findByUid(mAddressee.uid());
145 146
146 if (!mAddressee.isEmpty()) 147 if (!mAddressee.isEmpty())
@@ -187,97 +188,143 @@ KAddressBookIconView::KAddressBookIconView( KABC::AddressBook *ab,
187 QVBoxLayout *layout = new QVBoxLayout(viewWidget()); 188 QVBoxLayout *layout = new QVBoxLayout(viewWidget());
188 189
189 mIconView = new AddresseeIconView(viewWidget(), "mIconView"); 190 mIconView = new AddresseeIconView(viewWidget(), "mIconView");
190 layout->addWidget(mIconView); 191 layout->addWidget(mIconView);
191 192
192 // Connect up the signals 193 // Connect up the signals
193 194
194//US method executed is part of KIconView 195//US method executed is part of KIconView
195//US connect(mIconView, SIGNAL(executed(QIconViewItem *)), 196//US connect(mIconView, SIGNAL(executed(QIconViewItem *)),
196//US this, SLOT(addresseeExecuted(QIconViewItem *))); 197//US this, SLOT(addresseeExecuted(QIconViewItem *)));
197 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), 198 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
198 this, SLOT(addresseeExecuted(QIconViewItem *))); 199 this, SLOT(addresseeExecuted(QIconViewItem *)));
199 200
200 connect(mIconView, SIGNAL(selectionChanged()), 201 connect(mIconView, SIGNAL(selectionChanged()),
201 this, SLOT(addresseeSelected())); 202 this, SLOT(addresseeSelected()));
202 connect(mIconView, SIGNAL(addresseeDropped(QDropEvent*)), 203 connect(mIconView, SIGNAL(addresseeDropped(QDropEvent*)),
203 this, SIGNAL(dropped(QDropEvent*))); 204 this, SIGNAL(dropped(QDropEvent*)));
204 connect(mIconView, SIGNAL(startAddresseeDrag()), 205 connect(mIconView, SIGNAL(startAddresseeDrag()),
205 this, SIGNAL(startDrag())); 206 this, SIGNAL(startDrag()));
206} 207}
207 208
208KAddressBookIconView::~KAddressBookIconView() 209KAddressBookIconView::~KAddressBookIconView()
209{ 210{
210} 211}
211 212
212void KAddressBookIconView::readConfig(KConfig *config) 213void KAddressBookIconView::readConfig(KConfig *config)
213{ 214{
214 KAddressBookView::readConfig(config); 215 KAddressBookView::readConfig(config);
215 216
216//US method executed is part of KIconView 217//US method executed is part of KIconView
217//US disconnect(mIconView, SIGNAL(executed(QIconViewItem *)), 218//US disconnect(mIconView, SIGNAL(executed(QIconViewItem *)),
218//US this, SLOT(addresseeExecuted(QIconViewItem *))); 219//US this, SLOT(addresseeExecuted(QIconViewItem *)));
219 disconnect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), 220 disconnect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
220 this, SLOT(addresseeExecuted(QIconViewItem *))); 221 this, SLOT(addresseeExecuted(QIconViewItem *)));
221 222
222//US method executed is part of KIconView. Use selectionChanged instead 223//US method executed is part of KIconView. Use selectionChanged instead
223/*US 224/*US
224 if (KABPrefs::instance()->mHonorSingleClick) 225 if (KABPrefs::instance()->mHonorSingleClick)
225 connect(mIconView, SIGNAL(executed(QIconViewItem *)), 226 connect(mIconView, SIGNAL(executed(QIconViewItem *)),
226 this, SLOT(addresseeExecuted(QIconViewItem *))); 227 this, SLOT(addresseeExecuted(QIconViewItem *)));
227 else 228 else
228 connect(mIconView, SIGNAL(doubleClicked(QIconViewItem *)), 229 connect(mIconView, SIGNAL(doubleClicked(QIconViewItem *)),
229 this, SLOT(addresseeExecuted(QIconViewItem *))); 230 this, SLOT(addresseeExecuted(QIconViewItem *)));
230*/ 231*/
231 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)), 232 connect(mIconView, SIGNAL(selectionChanged(QIconViewItem *)),
232 this, SLOT(addresseeExecuted(QIconViewItem *))); 233 this, SLOT(addresseeExecuted(QIconViewItem *)));
233 234
234} 235}
236void KAddressBookIconView::doSearch( const QString& s ,KABC::Field *field )
237{
238 mIconView->clear();
239 mIconList.clear();
240 if ( s.isEmpty() || s == "*" ) {
241 refresh();
242 return;
243 }
244 QString pattern = s.lower()+"*";
245 QRegExp re;
246 re.setWildcard(true); // most people understand these better.
247 re.setCaseSensitive(false);
248 re.setPattern( pattern );
249 if (!re.isValid())
250 return;
251 KABC::Addressee::List addresseeList = addressees();
252 KABC::Addressee::List::Iterator it;
253 if ( field ) {
254 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
255#if QT_VERSION >= 300
256 if (re.search(field->value( *it ).lower()) != -1)
257#else
258 if (re.match(field->value( *it ).lower()) != -1)
259#endif
260 mIconList.append(new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView ));
261
235 262
263 }
264 } else {
265 KABC::Field::List fieldList = fields();
266 KABC::Field::List::ConstIterator fieldIt;
267 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
268 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
269#if QT_VERSION >= 300
270 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
271#else
272 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
273#endif
274 {
275 mIconList.append( new AddresseeIconViewItem( fields(), addressBook(), *it, mIconView ));
276 continue;
277 }
278 }
279 }
280 }
281 mIconView->arrangeItemsInGrid( true );
282}
236QStringList KAddressBookIconView::selectedUids() 283QStringList KAddressBookIconView::selectedUids()
237{ 284{
238 QStringList uidList; 285 QStringList uidList;
239 QIconViewItem *item; 286 QIconViewItem *item;
240 AddresseeIconViewItem *aItem; 287 AddresseeIconViewItem *aItem;
241 288
242 for (item = mIconView->firstItem(); item; item = item->nextItem()) 289 for (item = mIconView->firstItem(); item; item = item->nextItem())
243 { 290 {
244 if (item->isSelected()) 291 if (item->isSelected())
245 { 292 {
246#ifndef KAB_EMBEDDED 293#ifndef KAB_EMBEDDED
247 aItem = dynamic_cast<AddresseeIconViewItem*>(item); 294 aItem = dynamic_cast<AddresseeIconViewItem*>(item);
248#else //KAB_EMBEDDED 295#else //KAB_EMBEDDED
249 aItem = (AddresseeIconViewItem*)(item); 296 aItem = (AddresseeIconViewItem*)(item);
250#endif //KAB_EMBEDDED 297#endif //KAB_EMBEDDED
251 if (aItem) 298 if (aItem)
252 uidList << aItem->addressee().uid(); 299 uidList << aItem->addressee().uid();
253 } 300 }
254 } 301 }
255 302
256 return uidList; 303 return uidList;
257} 304}
258 305
259void KAddressBookIconView::refresh(QString uid) 306void KAddressBookIconView::refresh(QString uid)
260{ 307{
261 QIconViewItem *item; 308 QIconViewItem *item;
262 AddresseeIconViewItem *aItem; 309 AddresseeIconViewItem *aItem;
263 310
264 if ( uid.isNull() ) { 311 if ( uid.isNull() ) {
265 // Rebuild the view 312 // Rebuild the view
266 mIconView->clear(); 313 mIconView->clear();
267 mIconList.clear(); 314 mIconList.clear();
268 315
269 KABC::Addressee::List addresseeList = addressees(); 316 KABC::Addressee::List addresseeList = addressees();
270 KABC::Addressee::List::Iterator iter; 317 KABC::Addressee::List::Iterator iter;
271 for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter ) 318 for ( iter = addresseeList.begin(); iter != addresseeList.end(); ++iter )
272 aItem = new AddresseeIconViewItem( fields(), addressBook(), *iter, mIconView ); 319 aItem = new AddresseeIconViewItem( fields(), addressBook(), *iter, mIconView );
273 320
274 mIconView->arrangeItemsInGrid( true ); 321 mIconView->arrangeItemsInGrid( true );
275 322
276 for ( item = mIconView->firstItem(); item; item = item->nextItem() ) 323 for ( item = mIconView->firstItem(); item; item = item->nextItem() )
277 { 324 {
278#ifndef KAB_EMBEDDED 325#ifndef KAB_EMBEDDED
279 AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item ); 326 AddresseeIconViewItem* aivi = dynamic_cast<AddresseeIconViewItem*>( item );
280#else //KAB_EMBEDDED 327#else //KAB_EMBEDDED
281 AddresseeIconViewItem* aivi = (AddresseeIconViewItem*)( item ); 328 AddresseeIconViewItem* aivi = (AddresseeIconViewItem*)( item );
282#endif //KAB_EMBEDDED 329#endif //KAB_EMBEDDED
283 mIconList.append( aivi ); 330 mIconList.append( aivi );
diff --git a/kaddressbook/views/kaddressbookiconview.h b/kaddressbook/views/kaddressbookiconview.h
index 3afada3..963ee7c 100644
--- a/kaddressbook/views/kaddressbookiconview.h
+++ b/kaddressbook/views/kaddressbookiconview.h
@@ -13,96 +13,97 @@
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 62
62 virtual void readConfig(KConfig *config); 63 virtual void readConfig(KConfig *config);
63 64
64 public slots: 65 public slots:
65 void refresh(QString uid = QString::null); 66 void refresh(QString uid = QString::null);
66#ifndef KAB_EMBEDDED 67#ifndef KAB_EMBEDDED
67//MOC_SKIP_BEGIN 68//MOC_SKIP_BEGIN
68 void setSelected(QString uid = QString::null, bool selected = true); 69 void setSelected(QString uid = QString::null, bool selected = true);
69//MOC_SKIP_END 70//MOC_SKIP_END
70#else //KAB_EMBEDDED 71#else //KAB_EMBEDDED
71//US my MOC do not like default parameters ??? 72//US my MOC do not like default parameters ???
72 void setSelected(QString uid, bool selected); 73 void setSelected(QString uid, bool selected);
73#endif //KAB_EMBEDDED 74#endif //KAB_EMBEDDED
74 75
75 protected slots: 76 protected slots:
76 void addresseeExecuted(QIconViewItem *item); 77 void addresseeExecuted(QIconViewItem *item);
77 void addresseeSelected(); 78 void addresseeSelected();
78 79
79 private: 80 private:
80 AddresseeIconView *mIconView; 81 AddresseeIconView *mIconView;
81 QPtrList<AddresseeIconViewItem> mIconList; 82 QPtrList<AddresseeIconViewItem> mIconList;
82}; 83};
83 84
84 85
85#ifndef KAB_EMBEDDED 86#ifndef KAB_EMBEDDED
86//MOC_SKIP_BEGIN 87//MOC_SKIP_BEGIN
87class AddresseeIconView : public KIconView 88class AddresseeIconView : public KIconView
88//MOC_SKIP_END 89//MOC_SKIP_END
89#else //KAB_EMBEDDED 90#else //KAB_EMBEDDED
90class AddresseeIconView : public QIconView 91class AddresseeIconView : public QIconView
91#endif //KAB_EMBEDDED 92#endif //KAB_EMBEDDED
92{ 93{
93 Q_OBJECT 94 Q_OBJECT
94 95
95 public: 96 public:
96 AddresseeIconView(QWidget *parent, const char *name); 97 AddresseeIconView(QWidget *parent, const char *name);
97 ~AddresseeIconView(); 98 ~AddresseeIconView();
98 99
99 signals: 100 signals:
100 void addresseeDropped(QDropEvent *); 101 void addresseeDropped(QDropEvent *);
101 void startAddresseeDrag(); 102 void startAddresseeDrag();
102 103
103 protected: 104 protected:
104 virtual QDragObject *dragObject(); 105 virtual QDragObject *dragObject();
105 106
106 protected slots: 107 protected slots:
107 void itemDropped(QDropEvent *, const QValueList<QIconDragItem> &); 108 void itemDropped(QDropEvent *, const QValueList<QIconDragItem> &);
108}; 109};
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp
index ab11e2a..12f7c27 100644
--- a/kaddressbook/views/kaddressbooktableview.cpp
+++ b/kaddressbook/views/kaddressbooktableview.cpp
@@ -67,96 +67,145 @@ void KAddressBookTableView::reconstructListView()
67 this, SLOT(addresseeExecuted(QListViewItem*))); 67 this, SLOT(addresseeExecuted(QListViewItem*)));
68 68
69 disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, 69 disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
70 SIGNAL(dropped(QDropEvent*))); 70 SIGNAL(dropped(QDropEvent*)));
71 delete mListView; 71 delete mListView;
72 } 72 }
73 73
74 mListView = new ContactListView( this, addressBook(), viewWidget() ); 74 mListView = new ContactListView( this, addressBook(), viewWidget() );
75 75
76 // Add the columns 76 // Add the columns
77 KABC::Field::List fieldList = fields(); 77 KABC::Field::List fieldList = fields();
78 KABC::Field::List::ConstIterator it; 78 KABC::Field::List::ConstIterator it;
79 79
80 int c = 0; 80 int c = 0;
81 for( it = fieldList.begin(); it != fieldList.end(); ++it ) { 81 for( it = fieldList.begin(); it != fieldList.end(); ++it ) {
82 mListView->addColumn( (*it)->label() ); 82 mListView->addColumn( (*it)->label() );
83 mListView->setColumnWidthMode(c++, QListView::Manual); 83 mListView->setColumnWidthMode(c++, QListView::Manual);
84//US 84//US
85 // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1()); 85 // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1());
86 } 86 }
87 87
88 connect(mListView, SIGNAL(selectionChanged()), 88 connect(mListView, SIGNAL(selectionChanged()),
89 this, SLOT(addresseeSelected())); 89 this, SLOT(addresseeSelected()));
90 connect(mListView, SIGNAL(startAddresseeDrag()), this, 90 connect(mListView, SIGNAL(startAddresseeDrag()), this,
91 SIGNAL(startDrag())); 91 SIGNAL(startDrag()));
92 connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this, 92 connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
93 SIGNAL(dropped(QDropEvent*))); 93 SIGNAL(dropped(QDropEvent*)));
94 94
95 if (KABPrefs::instance()->mHonorSingleClick) 95 if (KABPrefs::instance()->mHonorSingleClick)
96 connect(mListView, SIGNAL(executed(QListViewItem*)), 96 connect(mListView, SIGNAL(executed(QListViewItem*)),
97 this, SLOT(addresseeExecuted(QListViewItem*))); 97 this, SLOT(addresseeExecuted(QListViewItem*)));
98 else 98 else
99 connect(mListView, SIGNAL(doubleClicked(QListViewItem*)), 99 connect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
100 this, SLOT(addresseeExecuted(QListViewItem*))); 100 this, SLOT(addresseeExecuted(QListViewItem*)));
101 connect(mListView, SIGNAL(returnPressed(QListViewItem*)), 101 connect(mListView, SIGNAL(returnPressed(QListViewItem*)),
102 this, SLOT(addresseeExecuted(QListViewItem*))); 102 this, SLOT(addresseeExecuted(QListViewItem*)));
103 connect(mListView, SIGNAL(signalDelete()), 103 connect(mListView, SIGNAL(signalDelete()),
104 this, SLOT(addresseeDeleted())); 104 this, SLOT(addresseeDeleted()));
105 105
106//US performceimprovement. Refresh is done from the outside 106//US performceimprovement. Refresh is done from the outside
107//US refresh(); 107//US refresh();
108 108
109 mListView->setSorting( 0, true ); 109 mListView->setSorting( 0, true );
110 mainLayout->addWidget( mListView ); 110 mainLayout->addWidget( mListView );
111 mainLayout->activate(); 111 mainLayout->activate();
112 mListView->show(); 112 mListView->show();
113} 113}
114 114
115void KAddressBookTableView::doSearch( const QString& s, KABC::Field *field )
116{
117 mListView->clear();
118 if ( s.isEmpty() || s == "*" ) {
119 refresh();
120 return;
121 }
122 QString pattern = s.lower()+"*";
123 QRegExp re;
124 re.setWildcard(true); // most people understand these better.
125 re.setCaseSensitive(false);
126 re.setPattern( pattern );
127 if (!re.isValid())
128 return;
129 KABC::Addressee::List addresseeList = addressees();
130 KABC::Addressee::List::Iterator it;
131 if ( field ) {
132 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
133#if QT_VERSION >= 300
134 if (re.search(field->value( *it ).lower()) != -1)
135#else
136 if (re.match(field->value( *it ).lower()) != -1)
137#endif
138 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
139
140 }
141 } else {
142 KABC::Field::List fieldList = fields();
143 KABC::Field::List::ConstIterator fieldIt;
144 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
145 for ( fieldIt = fieldList.begin(); fieldIt != fieldList.end(); ++fieldIt ) {
146#if QT_VERSION >= 300
147 if (re.search((*fieldIt)->value( *it ).lower()) != -1)
148#else
149 if (re.match((*fieldIt)->value( *it ).lower()) != -1)
150#endif
151 {
152 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
153 continue;
154 }
155 }
156 }
157 }
158 // Sometimes the background pixmap gets messed up when we add lots
159 // of items.
160 mListView->repaint();
161 emit selected(QString::null);
162
163}
115void KAddressBookTableView::writeConfig(KConfig *config) 164void KAddressBookTableView::writeConfig(KConfig *config)
116{ 165{
117 KAddressBookView::writeConfig(config); 166 KAddressBookView::writeConfig(config);
118 167
119 mListView->saveLayout(config, config->group()); 168 mListView->saveLayout(config, config->group());
120} 169}
121 170
122void KAddressBookTableView::readConfig(KConfig *config) 171void KAddressBookTableView::readConfig(KConfig *config)
123{ 172{
124 KAddressBookView::readConfig( config ); 173 KAddressBookView::readConfig( config );
125 // The config could have changed the fields, so we need to reconstruct 174 // The config could have changed the fields, so we need to reconstruct
126 // the listview. 175 // the listview.
127 reconstructListView(); 176 reconstructListView();
128 177
129 // costum colors? 178 // costum colors?
130 if ( config->readBoolEntry( "EnableCustomColors", false ) ) 179 if ( config->readBoolEntry( "EnableCustomColors", false ) )
131 { 180 {
132 QPalette p( mListView->palette() ); 181 QPalette p( mListView->palette() );
133 QColor c = p.color(QPalette::Normal, QColorGroup::Base ); 182 QColor c = p.color(QPalette::Normal, QColorGroup::Base );
134 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) ); 183 p.setColor( QPalette::Normal, QColorGroup::Base, config->readColorEntry( "BackgroundColor", &c ) );
135 c = p.color(QPalette::Normal, QColorGroup::Text ); 184 c = p.color(QPalette::Normal, QColorGroup::Text );
136 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) ); 185 p.setColor( QPalette::Normal, QColorGroup::Text, config->readColorEntry( "TextColor", &c ) );
137 c = p.color(QPalette::Normal, QColorGroup::Button ); 186 c = p.color(QPalette::Normal, QColorGroup::Button );
138 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) ); 187 p.setColor( QPalette::Normal, QColorGroup::Button, config->readColorEntry( "HeaderColor", &c ) );
139 c = p.color(QPalette::Normal, QColorGroup::ButtonText ); 188 c = p.color(QPalette::Normal, QColorGroup::ButtonText );
140 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) ); 189 p.setColor( QPalette::Normal, QColorGroup::ButtonText, config->readColorEntry( "HeaderTextColor", &c ) );
141 c = p.color(QPalette::Normal, QColorGroup::Highlight ); 190 c = p.color(QPalette::Normal, QColorGroup::Highlight );
142 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) ); 191 p.setColor( QPalette::Normal, QColorGroup::Highlight, config->readColorEntry( "HighlightColor", &c ) );
143 c = p.color(QPalette::Normal, QColorGroup::HighlightedText ); 192 c = p.color(QPalette::Normal, QColorGroup::HighlightedText );
144 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) ); 193 p.setColor( QPalette::Normal, QColorGroup::HighlightedText, config->readColorEntry( "HighlightedTextColor", &c ) );
145#ifndef KAB_EMBEDDED 194#ifndef KAB_EMBEDDED
146 c = KGlobalSettings::alternateBackgroundColor(); 195 c = KGlobalSettings::alternateBackgroundColor();
147#else //KAB_EMBEDDED 196#else //KAB_EMBEDDED
148 c = QColor(240, 240, 240); 197 c = QColor(240, 240, 240);
149#endif //KAB_EMBEDDED 198#endif //KAB_EMBEDDED
150 c = config->readColorEntry ("AlternatingBackgroundColor", &c); 199 c = config->readColorEntry ("AlternatingBackgroundColor", &c);
151 mListView->setAlternateColor(c); 200 mListView->setAlternateColor(c);
152 201
153 202
154 //US mListView->viewport()->setPalette( p ); 203 //US mListView->viewport()->setPalette( p );
155 mListView->setPalette( p ); 204 mListView->setPalette( p );
156 } 205 }
157 else 206 else
158 { 207 {
159 // needed if turned off during a session. 208 // needed if turned off during a session.
160 //US mListView->viewport()->setPalette( mListView->palette() ); 209 //US mListView->viewport()->setPalette( mListView->palette() );
161 mListView->setPalette( mListView->palette() ); 210 mListView->setPalette( mListView->palette() );
162 } 211 }
diff --git a/kaddressbook/views/kaddressbooktableview.h b/kaddressbook/views/kaddressbooktableview.h
index bb991bc..ecfe7a1 100644
--- a/kaddressbook/views/kaddressbooktableview.h
+++ b/kaddressbook/views/kaddressbooktableview.h
@@ -17,96 +17,97 @@
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 66
66 public slots: 67 public slots:
67 virtual void reconstructListView(); 68 virtual void reconstructListView();
68 69
69 protected slots: 70 protected slots:
70 /** Called whenever the user selects an addressee in the list view. 71 /** Called whenever the user selects an addressee in the list view.
71 */ 72 */
72 void addresseeSelected(); 73 void addresseeSelected();
73 void addresseeDeleted(); 74 void addresseeDeleted();
74 75
75 /** Called whenever the user executes an addressee. In terms of the 76 /** Called whenever the user executes an addressee. In terms of the
76 * list view, this is probably a double click 77 * list view, this is probably a double click
77 */ 78 */
78 void addresseeExecuted(QListViewItem*); 79 void addresseeExecuted(QListViewItem*);
79 80
80 private: 81 private:
81 QVBoxLayout *mainLayout; 82 QVBoxLayout *mainLayout;
82 ContactListView *mListView; 83 ContactListView *mListView;
83}; 84};
84 85
85 86
86class TableViewFactory : public ViewFactory 87class TableViewFactory : public ViewFactory
87{ 88{
88 public: 89 public:
89 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name ) 90 KAddressBookView *view( KABC::AddressBook *ab, QWidget *parent, const char *name )
90 { 91 {
91 return new KAddressBookTableView( ab, parent, name ); 92 return new KAddressBookTableView( ab, parent, name );
92 } 93 }
93 94
94 QString type() const { return "Table"; } 95 QString type() const { return "Table"; }
95 96
96 QString description() const { return i18n( "A listing of contacts in a table. Each cell of " 97 QString description() const { return i18n( "A listing of contacts in a table. Each cell of "
97 "the table holds a field of the contact." ); } 98 "the table holds a field of the contact." ); }
98 99
99 ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent, 100 ViewConfigureWidget *configureWidget( KABC::AddressBook *ab, QWidget *parent,
100 const char *name = 0 ) 101 const char *name = 0 )
101 { 102 {
102 return new ConfigureTableViewWidget( ab, parent, name ); 103 return new ConfigureTableViewWidget( ab, parent, name );
103 } 104 }
104}; 105};
105/*US 106/*US
106extern "C" { 107extern "C" {
107 void *init_libkaddrbk_tableview() 108 void *init_libkaddrbk_tableview()
108 { 109 {
109 return ( new TableViewFactory ); 110 return ( new TableViewFactory );
110 } 111 }
111} 112}
112*/ 113*/