summaryrefslogtreecommitdiffabout
path: root/kaddressbook/views/kaddressbooktableview.cpp
Unidiff
Diffstat (limited to 'kaddressbook/views/kaddressbooktableview.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--kaddressbook/views/kaddressbooktableview.cpp337
1 files changed, 337 insertions, 0 deletions
diff --git a/kaddressbook/views/kaddressbooktableview.cpp b/kaddressbook/views/kaddressbooktableview.cpp
new file mode 100644
index 0000000..ee2fcf8
--- a/dev/null
+++ b/kaddressbook/views/kaddressbooktableview.cpp
@@ -0,0 +1,337 @@
1// $Id$
2
3#include <qvbox.h>
4#include <qlistbox.h>
5#include <qwidget.h>
6#include <qfile.h>
7#include <qimage.h>
8#include <qcombobox.h>
9#include <qapplication.h>
10#include <qdragobject.h>
11#include <qevent.h>
12#include <qurl.h>
13#include <qpixmap.h>
14
15#include <kabc/addressbook.h>
16#include <kapplication.h>
17#include <kconfig.h>
18#include <kcolorbutton.h>
19#include <kdebug.h>
20#include <kglobal.h>
21#include <kiconloader.h>
22#include <klineedit.h>
23#include <klocale.h>
24#include <kmessagebox.h>
25#include <kurl.h>
26#include <kurlrequester.h>
27
28//US#include "configuretableviewdialog.h"
29#include "contactlistview.h"
30#include "kabprefs.h"
31#include "undocmds.h"
32#include "viewmanager.h"
33
34#include <qlayout.h>
35
36
37#include "kaddressbooktableview.h"
38
39
40KAddressBookTableView::KAddressBookTableView( KABC::AddressBook *ab,
41 QWidget *parent, const char *name )
42 : KAddressBookView( ab, parent, name )
43{
44 mainLayout = new QVBoxLayout( viewWidget(), 2 );
45
46 // The list view will be created when the config is read.
47 mListView = 0;
48}
49
50KAddressBookTableView::~KAddressBookTableView()
51{
52}
53
54void KAddressBookTableView::reconstructListView()
55{
56 if (mListView)
57 {
58 disconnect(mListView, SIGNAL(selectionChanged()),
59 this, SLOT(addresseeSelected()));
60 disconnect(mListView, SIGNAL(executed(QListViewItem*)),
61 this, SLOT(addresseeExecuted(QListViewItem*)));
62 disconnect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
63 this, SLOT(addresseeExecuted(QListViewItem*)));
64 disconnect(mListView, SIGNAL(startAddresseeDrag()), this,
65 SIGNAL(startDrag()));
66 disconnect(mListView, SIGNAL(returnPressed(QListViewItem*)),
67 this, SLOT(addresseeExecuted(QListViewItem*)));
68
69 disconnect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
70 SIGNAL(dropped(QDropEvent*)));
71 delete mListView;
72 }
73
74 mListView = new ContactListView( this, addressBook(), viewWidget() );
75
76 // Add the columns
77 KABC::Field::List fieldList = fields();
78 KABC::Field::List::ConstIterator it;
79
80 int c = 0;
81 for( it = fieldList.begin(); it != fieldList.end(); ++it ) {
82 mListView->addColumn( (*it)->label() );
83 mListView->setColumnWidthMode(c++, QListView::Manual);
84//US
85 // qDebug("KAddressBookTableView::reconstructListView: field %s", (*it)->label().latin1());
86 }
87
88 connect(mListView, SIGNAL(selectionChanged()),
89 this, SLOT(addresseeSelected()));
90 connect(mListView, SIGNAL(startAddresseeDrag()), this,
91 SIGNAL(startDrag()));
92 connect(mListView, SIGNAL(addresseeDropped(QDropEvent*)), this,
93 SIGNAL(dropped(QDropEvent*)));
94
95 if (KABPrefs::instance()->mHonorSingleClick)
96 connect(mListView, SIGNAL(executed(QListViewItem*)),
97 this, SLOT(addresseeExecuted(QListViewItem*)));
98 else
99 connect(mListView, SIGNAL(doubleClicked(QListViewItem*)),
100 this, SLOT(addresseeExecuted(QListViewItem*)));
101 connect(mListView, SIGNAL(returnPressed(QListViewItem*)),
102 this, SLOT(addresseeExecuted(QListViewItem*)));
103 connect(mListView, SIGNAL(signalDelete()),
104 this, SLOT(addresseeDeleted()));
105
106 refresh();
107
108 mListView->setSorting( 0, true );
109 mainLayout->addWidget( mListView );
110 mainLayout->activate();
111 mListView->show();
112}
113
114void KAddressBookTableView::writeConfig(KConfig *config)
115{
116 KAddressBookView::writeConfig(config);
117
118 mListView->saveLayout(config, config->group());
119}
120
121void KAddressBookTableView::readConfig(KConfig *config)
122{
123 KAddressBookView::readConfig( config );
124
125 // The config could have changed the fields, so we need to reconstruct
126 // the listview.
127 reconstructListView();
128
129 // Set the list view options
130 mListView->setAlternateBackgroundEnabled(config->readBoolEntry("ABackground",
131 true));
132 mListView->setSingleLineEnabled(config->readBoolEntry("SingleLine", false));
133 mListView->setToolTipsEnabled(config->readBoolEntry("ToolTips", true));
134
135 if (config->readBoolEntry("Background", false))
136 mListView->setBackgroundPixmap(config->readEntry("BackgroundName"));
137
138 // Restore the layout of the listview
139 mListView->restoreLayout(config, config->group());
140}
141
142void KAddressBookTableView::refresh(QString uid)
143{
144 // For now just repopulate. In reality this method should
145 // check the value of uid, and if valid iterate through
146 // the listview to find the entry, then tell it to refresh.
147
148 if (uid.isNull()) {
149 // Clear the list view
150 QString currentUID, nextUID;
151#ifndef KAB_EMBEDDED
152 ContactListViewItem *currentItem = dynamic_cast<ContactListViewItem*>( mListView->currentItem() );
153#else //KAB_EMBEDDED
154 ContactListViewItem *currentItem = (ContactListViewItem*)( mListView->currentItem() );
155#endif //KAB_EMBEDDED
156
157 if ( currentItem ) {
158#ifndef KAB_EMBEDDED
159 ContactListViewItem *nextItem = dynamic_cast<ContactListViewItem*>( currentItem->itemBelow() );
160#else //KAB_EMBEDDED
161 ContactListViewItem *nextItem = (ContactListViewItem*)( currentItem->itemBelow() );
162#endif //KAB_EMBEDDED
163 if ( nextItem )
164 nextUID = nextItem->addressee().uid();
165 currentUID = currentItem->addressee().uid();
166 }
167
168 mListView->clear();
169
170 currentItem = 0;
171 KABC::Addressee::List addresseeList = addressees();
172 KABC::Addressee::List::Iterator it;
173 for (it = addresseeList.begin(); it != addresseeList.end(); ++it ) {
174 ContactListViewItem *item = new ContactListViewItem(*it, mListView, addressBook(), fields());
175 if ( (*it).uid() == currentUID )
176 currentItem = item;
177 else if ( (*it).uid() == nextUID && !currentItem )
178 currentItem = item;
179 }
180
181 // Sometimes the background pixmap gets messed up when we add lots
182 // of items.
183 mListView->repaint();
184
185 if ( currentItem ) {
186 mListView->setCurrentItem( currentItem );
187 mListView->ensureItemVisible( currentItem );
188 }
189 } else {
190 // Only need to update on entry. Iterate through and try to find it
191 ContactListViewItem *ceItem;
192 QListViewItemIterator it( mListView );
193 while ( it.current() ) {
194#ifndef KAB_EMBEDDED
195 ceItem = dynamic_cast<ContactListViewItem*>( it.current() );
196#else //KAB_EMBEDDED
197 ceItem = (ContactListViewItem*)( it.current() );
198#endif //KAB_EMBEDDED
199
200 if ( ceItem && ceItem->addressee().uid() == uid ) {
201 ceItem->refresh();
202 return;
203 }
204 ++it;
205 }
206
207 refresh( QString::null );
208 }
209}
210
211QStringList KAddressBookTableView::selectedUids()
212{
213 QStringList uidList;
214 QListViewItem *item;
215 ContactListViewItem *ceItem;
216
217 for(item = mListView->firstChild(); item; item = item->itemBelow())
218 {
219 if (mListView->isSelected( item ))
220 {
221#ifndef KAB_EMBEDDED
222 ceItem = dynamic_cast<ContactListViewItem*>(item);
223#else //KAB_EMBEDDED
224 ceItem = (ContactListViewItem*)(item);
225#endif //KAB_EMBEDDED
226
227 if (ceItem != 0L)
228 uidList << ceItem->addressee().uid();
229 }
230 }
231 if ( uidList.count() == 0 )
232 if ( mListView->currentItem() ) {
233 ceItem = (ContactListViewItem*)(mListView->currentItem()) ;
234 uidList << ceItem->addressee().uid();
235 }
236
237 return uidList;
238}
239
240void KAddressBookTableView::setSelected(QString uid, bool selected)
241{
242 QListViewItem *item;
243 ContactListViewItem *ceItem;
244
245 if (uid.isNull())
246 {
247 mListView->selectAll(selected);
248 }
249 else
250 {
251 for(item = mListView->firstChild(); item; item = item->itemBelow())
252 {
253#ifndef KAB_EMBEDDED
254 ceItem = dynamic_cast<ContactListViewItem*>(item);
255#else //KAB_EMBEDDED
256 ceItem = (ContactListViewItem*)(item);
257#endif //KAB_EMBEDDED
258
259
260 if ((ceItem != 0L) && (ceItem->addressee().uid() == uid))
261 {
262 mListView->setSelected(item, selected);
263
264 if (selected)
265 mListView->ensureItemVisible(item);
266 }
267 }
268 }
269}
270
271void KAddressBookTableView::addresseeSelected()
272{
273 // We need to try to find the first selected item. This might not be the
274 // last selected item, but when QListView is in multiselection mode,
275 // there is no way to figure out which one was
276 // selected last.
277 QListViewItem *item;
278 bool found =false;
279 for (item = mListView->firstChild(); item && !found;
280 item = item->nextSibling())
281 {
282 if (item->isSelected())
283 {
284 found = true;
285#ifndef KAB_EMBEDDED
286 ContactListViewItem *ceItem
287 = dynamic_cast<ContactListViewItem*>(item);
288#else //KAB_EMBEDDED
289 ContactListViewItem *ceItem
290 = (ContactListViewItem*)(item);
291#endif //KAB_EMBEDDED
292
293 if ( ceItem ) emit selected(ceItem->addressee().uid());
294 }
295 }
296
297 if (!found)
298 emit selected(QString::null);
299}
300
301void KAddressBookTableView::addresseeExecuted(QListViewItem *item)
302{
303 if (item)
304 {
305#ifndef KAB_EMBEDDED
306 ContactListViewItem *ceItem
307 = dynamic_cast<ContactListViewItem*>(item);
308#else //KAB_EMBEDDED
309 ContactListViewItem *ceItem
310 = (ContactListViewItem*)(item);
311#endif //KAB_EMBEDDED
312
313 if (ceItem)
314 {
315 emit executed(ceItem->addressee().uid());
316 }
317 }
318 else
319 {
320 emit executed(QString::null);
321 }
322}
323
324void KAddressBookTableView::addresseeDeleted()
325{
326
327 emit deleteRequest();
328
329}
330
331
332
333
334
335#ifndef KAB_EMBEDDED
336#include "kaddressbooktableview.moc"
337#endif //KAB_EMBEDDED