summaryrefslogtreecommitdiff
path: root/core/pim/addressbook/abtable.cpp
Unidiff
Diffstat (limited to 'core/pim/addressbook/abtable.cpp') (more/less context) (show whitespace changes)
-rw-r--r--core/pim/addressbook/abtable.cpp25
1 files changed, 12 insertions, 13 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 29f4383..cd77b13 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -1,52 +1,51 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** Copyright (c) 2002 Stefan Eilers (eilers.stefan@epost.de) 3** Copyright (c) 2002 Stefan Eilers (eilers.stefan@epost.de)
4** 4**
5** This file is part of Qt Palmtop Environment. 5** This file is part of Qt Palmtop Environment.
6** 6**
7** This file may be distributed and/or modified under the terms of the 7** This file may be distributed and/or modified under the terms of the
8** GNU General Public License version 2 as published by the Free Software 8** GNU General Public License version 2 as published by the Free Software
9** Foundation and appearing in the file LICENSE.GPL included in the 9** Foundation and appearing in the file LICENSE.GPL included in the
10** packaging of this file. 10** packaging of this file.
11** 11**
12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 12** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 13** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
14** 14**
15** See http://www.trolltech.com/gpl/ for GPL licensing information. 15** See http://www.trolltech.com/gpl/ for GPL licensing information.
16** 16**
17** Contact info@trolltech.com if any conditions of this licensing are 17** Contact info@trolltech.com if any conditions of this licensing are
18** not clear to you. 18** not clear to you.
19** 19**
20**********************************************************************/ 20**********************************************************************/
21 21
22 22
23#include <opie2/opimrecordlist.h>
24
23#include <qpe/timestring.h> 25#include <qpe/timestring.h>
24#include <qpe/resource.h> 26#include <qpe/resource.h>
25 27
26#include <opie/orecordlist.h>
27
28
29#include "abtable.h" 28#include "abtable.h"
30 29
31#include <errno.h> 30#include <errno.h>
32#include <fcntl.h> 31#include <fcntl.h>
33#include <unistd.h> 32#include <unistd.h>
34#include <stdlib.h> 33#include <stdlib.h>
35 34
36#include <ctype.h> //toupper() for key hack 35#include <ctype.h> //toupper() for key hack
37 36
38#if 0 37#if 0
39 38
40/*! 39/*!
41 \class AbTableItem abtable.h 40 \class AbTableItem abtable.h
42 41
43 \brief QTableItem based class for showing a field of an entry 42 \brief QTableItem based class for showing a field of an entry
44*/ 43*/
45 44
46AbTableItem::AbTableItem( QTable *t, EditType et, const QString &s, 45AbTableItem::AbTableItem( QTable *t, EditType et, const QString &s,
47 const QString &secondSortKey) 46 const QString &secondSortKey)
48 : QTableItem( t, et, s ) 47 : QTableItem( t, et, s )
49{ 48{
50 // sortKey = s.lower() + QChar( '\0' ) + secondSortKey.lower(); 49 // sortKey = s.lower() + QChar( '\0' ) + secondSortKey.lower();
51 sortKey = Qtopia::buildSortKey( s, secondSortKey ); 50 sortKey = Qtopia::buildSortKey( s, secondSortKey );
52} 51}
@@ -130,113 +129,113 @@ AbTable::AbTable( const QValueList<int> order, QWidget *parent, const char *name
130 connect( this, SIGNAL(clicked(int,int,int,const QPoint&)), 129 connect( this, SIGNAL(clicked(int,int,int,const QPoint&)),
131 this, SLOT(itemClicked(int,int)) ); 130 this, SLOT(itemClicked(int,int)) );
132 131
133 // contactList.clear(); 132 // contactList.clear();
134 //qWarning("C'tor end"); 133 //qWarning("C'tor end");
135} 134}
136 135
137AbTable::~AbTable() 136AbTable::~AbTable()
138{ 137{
139} 138}
140 139
141void AbTable::init() 140void AbTable::init()
142{ 141{
143 // :SX showChar = '\0'; 142 // :SX showChar = '\0';
144 setNumRows( 0 ); 143 setNumRows( 0 );
145 setNumCols( 2 ); 144 setNumCols( 2 );
146 145
147 horizontalHeader()->setLabel( 0, tr( "Full Name" )); 146 horizontalHeader()->setLabel( 0, tr( "Full Name" ));
148 horizontalHeader()->setLabel( 1, tr( "Contact" )); 147 horizontalHeader()->setLabel( 1, tr( "Contact" ));
149 setLeftMargin( 0 ); 148 setLeftMargin( 0 );
150 verticalHeader()->hide(); 149 verticalHeader()->hide();
151 columnVisible = true; 150 columnVisible = true;
152} 151}
153 152
154void AbTable::setContacts( const OContactAccess::List& viewList ) 153void AbTable::setContacts( const Opie::OPimContactAccess::List& viewList )
155{ 154{
156 qWarning("AbTable::setContacts()"); 155 qWarning("AbTable::setContacts()");
157 156
158 clear(); 157 clear();
159 m_viewList = viewList; 158 m_viewList = viewList;
160 159
161 setSorting( false ); 160 setSorting( false );
162 setPaintingEnabled( FALSE ); 161 setPaintingEnabled( FALSE );
163 162
164 OContactAccess::List::Iterator it; 163 Opie::OPimContactAccess::List::Iterator it;
165 setNumRows( m_viewList.count() ); 164 setNumRows( m_viewList.count() );
166 //int row = 0; 165 //int row = 0;
167 // for ( it = m_viewList.begin(); it != m_viewList.end(); ++it ) 166 // for ( it = m_viewList.begin(); it != m_viewList.end(); ++it )
168 // insertIntoTable( *it, row++ ); 167 // insertIntoTable( *it, row++ );
169 168
170 // setSorting( true ); 169 // setSorting( true );
171 170
172 // resort(); 171 // resort();
173 172
174 updateVisible(); 173 updateVisible();
175 174
176 setPaintingEnabled( TRUE ); 175 setPaintingEnabled( TRUE );
177 176
178} 177}
179 178
180void AbTable::setOrderedList( const QValueList<int> ordered ) 179void AbTable::setOrderedList( const QValueList<int> ordered )
181{ 180{
182 intFields = ordered; 181 intFields = ordered;
183} 182}
184 183
185 184
186bool AbTable::selectContact( int UID ) 185bool AbTable::selectContact( int UID )
187{ 186{
188 qWarning( "AbTable::selectContact( %d )", UID ); 187 qWarning( "AbTable::selectContact( %d )", UID );
189 int rows = numRows(); 188 int rows = numRows();
190 OContact* foundContact = 0l; 189 Opie::OPimContact* foundContact = 0l;
191 bool found = false; 190 bool found = false;
192 191
193 setPaintingEnabled( FALSE ); 192 setPaintingEnabled( FALSE );
194 qWarning( "search start" ); 193 qWarning( "search start" );
195 for ( int r = 0; r < rows; ++r ) { 194 for ( int r = 0; r < rows; ++r ) {
196 if ( m_viewList.uidAt( r ) == UID ){ 195 if ( m_viewList.uidAt( r ) == UID ){
197 ensureCellVisible( r, 0 ); 196 ensureCellVisible( r, 0 );
198 setCurrentCell( r, 0 ); 197 setCurrentCell( r, 0 );
199 found = true; 198 found = true;
200 break; 199 break;
201 } 200 }
202 } 201 }
203 qWarning( "search end" ); 202 qWarning( "search end" );
204 203
205 if ( !found ){ 204 if ( !found ){
206 ensureCellVisible( 0,0 ); 205 ensureCellVisible( 0,0 );
207 setCurrentCell( 0, 0 ); 206 setCurrentCell( 0, 0 );
208 } 207 }
209 208
210 setPaintingEnabled( TRUE ); 209 setPaintingEnabled( TRUE );
211 210
212 return true; 211 return true;
213} 212}
214 213
215#if 0 214#if 0
216void AbTable::insertIntoTable( const OContact& cnt, int row ) 215void AbTable::insertIntoTable( const Opie::OPimContact& cnt, int row )
217{ 216{
218 qWarning( "void AbTable::insertIntoTable( const OContact& cnt, %d )", row ); 217 qWarning( "void AbTable::insertIntoTable( const Opie::OPimContact& cnt, %d )", row );
219 QString strName; 218 QString strName;
220 ContactItem contactItem; 219 ContactItem contactItem;
221 220
222 strName = findContactName( cnt ); 221 strName = findContactName( cnt );
223 contactItem = findContactContact( cnt, row ); 222 contactItem = findContactContact( cnt, row );
224 223
225 AbTableItem *ati; 224 AbTableItem *ati;
226 ati = new AbTableItem( this, QTableItem::Never, strName, contactItem.value ); 225 ati = new AbTableItem( this, QTableItem::Never, strName, contactItem.value );
227 contactList.insert( ati, cnt ); 226 contactList.insert( ati, cnt );
228 setItem( row, 0, ati ); 227 setItem( row, 0, ati );
229 ati = new AbTableItem( this, QTableItem::Never, contactItem.value, strName); 228 ati = new AbTableItem( this, QTableItem::Never, contactItem.value, strName);
230 if ( !contactItem.icon.isNull() ) 229 if ( !contactItem.icon.isNull() )
231 ati->setPixmap( contactItem.icon ); 230 ati->setPixmap( contactItem.icon );
232 setItem( row, 1, ati ); 231 setItem( row, 1, ati );
233 232
234 //### cannot do this; table only has two columns at this point 233 //### cannot do this; table only has two columns at this point
235 // setItem( row, 2, new AbPickItem( this ) ); 234 // setItem( row, 2, new AbPickItem( this ) );
236 235
237} 236}
238#endif 237#endif
239 238
240 239
241void AbTable::columnClicked( int col ) 240void AbTable::columnClicked( int col )
242{ 241{
@@ -251,49 +250,49 @@ void AbTable::columnClicked( int col )
251 } else { 250 } else {
252 lastSortCol = col; 251 lastSortCol = col;
253 asc = TRUE; 252 asc = TRUE;
254 } 253 }
255 //QMessageBox::information( this, "resort", "columnClicked" ); 254 //QMessageBox::information( this, "resort", "columnClicked" );
256 resort(); 255 resort();
257} 256}
258 257
259void AbTable::resort() 258void AbTable::resort()
260{ 259{
261 qWarning( "void AbTable::resort() NOT POSSIBLE !!" ); 260 qWarning( "void AbTable::resort() NOT POSSIBLE !!" );
262#if 0 261#if 0
263 setPaintingEnabled( FALSE ); 262 setPaintingEnabled( FALSE );
264 if ( sorting() ) { 263 if ( sorting() ) {
265 if ( lastSortCol == -1 ) 264 if ( lastSortCol == -1 )
266 lastSortCol = 0; 265 lastSortCol = 0;
267 sortColumn( lastSortCol, asc, TRUE ); 266 sortColumn( lastSortCol, asc, TRUE );
268 //QMessageBox::information( this, "resort", "resort" ); 267 //QMessageBox::information( this, "resort", "resort" );
269 updateVisible(); 268 updateVisible();
270 } 269 }
271 setPaintingEnabled( TRUE ); 270 setPaintingEnabled( TRUE );
272#endif 271#endif
273} 272}
274 273
275OContact AbTable::currentEntry() 274Opie::OPimContact AbTable::currentEntry()
276 { 275 {
277 return m_viewList[currentRow()]; 276 return m_viewList[currentRow()];
278} 277}
279 278
280int AbTable::currentEntry_UID() 279int AbTable::currentEntry_UID()
281{ 280{
282 return ( currentEntry().uid() ); 281 return ( currentEntry().uid() );
283} 282}
284 283
285void AbTable::clear() 284void AbTable::clear()
286{ 285{
287 qWarning( "void AbTable::clear()" ); 286 qWarning( "void AbTable::clear()" );
288 // contactList.clear(); 287 // contactList.clear();
289 288
290 setPaintingEnabled( FALSE ); 289 setPaintingEnabled( FALSE );
291 for ( int r = 0; r < numRows(); ++r ) { 290 for ( int r = 0; r < numRows(); ++r ) {
292 for ( int c = 0; c < numCols(); ++c ) { 291 for ( int c = 0; c < numCols(); ++c ) {
293 if ( cellWidget( r, c ) ) 292 if ( cellWidget( r, c ) )
294 clearCellWidget( r, c ); 293 clearCellWidget( r, c );
295 clearCell( r, c ); 294 clearCell( r, c );
296 } 295 }
297 } 296 }
298 setNumRows( 0 ); 297 setNumRows( 0 );
299 setPaintingEnabled( TRUE ); 298 setPaintingEnabled( TRUE );
@@ -373,49 +372,49 @@ void AbTable::moveTo( char c )
373 //### is there a bug in QChar to char comparison??? 372 //### is there a bug in QChar to char comparison???
374 if ( first.row() || first.cell() >= c ) 373 if ( first.row() || first.cell() >= c )
375 break; 374 break;
376 r++; 375 r++;
377 } 376 }
378 } else { 377 } else {
379 //### should probably disable reverse sorting instead 378 //### should probably disable reverse sorting instead
380 r = rows - 1; 379 r = rows - 1;
381 while ( r > 0 ) { 380 while ( r > 0 ) {
382 abi = static_cast<AbTableItem*>( item(r, 0) ); 381 abi = static_cast<AbTableItem*>( item(r, 0) );
383 QChar first = abi->key()[0]; 382 QChar first = abi->key()[0];
384 //### is there a bug in QChar to char comparison??? 383 //### is there a bug in QChar to char comparison???
385 if ( first.row() || first.cell() >= c ) 384 if ( first.row() || first.cell() >= c )
386 break; 385 break;
387 r--; 386 r--;
388 } 387 }
389 } 388 }
390 setCurrentCell( r, currentColumn() ); 389 setCurrentCell( r, currentColumn() );
391 390
392#endif 391#endif
393} 392}
394 393
395#if 0 394#if 0
396// Useless.. Nobody uses it .. (se) 395// Useless.. Nobody uses it .. (se)
397QString AbTable::findContactName( const OContact &entry ) 396QString AbTable::findContactName( const Opie::OPimContact &entry )
398{ 397{
399 // We use the fileAs, then company, defaultEmail 398 // We use the fileAs, then company, defaultEmail
400 QString str; 399 QString str;
401 str = entry.fileAs(); 400 str = entry.fileAs();
402 if ( str.isEmpty() ) { 401 if ( str.isEmpty() ) {
403 str = entry.company(); 402 str = entry.company();
404 if ( str.isEmpty() ) { 403 if ( str.isEmpty() ) {
405 str = entry.defaultEmail(); 404 str = entry.defaultEmail();
406 } 405 }
407 } 406 }
408 return str; 407 return str;
409} 408}
410#endif 409#endif
411 410
412 411
413void AbTable::resizeRows() { 412void AbTable::resizeRows() {
414 /* 413 /*
415 if (numRows()) { 414 if (numRows()) {
416 for (int i = 0; i < numRows(); i++) { 415 for (int i = 0; i < numRows(); i++) {
417 setRowHeight( i, size ); 416 setRowHeight( i, size );
418 } 417 }
419 } 418 }
420 updateVisible(); 419 updateVisible();
421 */ 420 */
@@ -529,49 +528,49 @@ void AbTable::itemClicked(int,int col)
529 // qWarning ("Emitting signalSwitch()"); 528 // qWarning ("Emitting signalSwitch()");
530 emit signalSwitch(); 529 emit signalSwitch();
531 } 530 }
532} 531}
533 532
534#if 0 533#if 0
535QStringList AbTable::choiceNames() const 534QStringList AbTable::choiceNames() const
536{ 535{
537 return choicenames; 536 return choicenames;
538} 537}
539 538
540#endif 539#endif
541void AbTable::setChoiceSelection( const QValueList<int>& list ) 540void AbTable::setChoiceSelection( const QValueList<int>& list )
542{ 541{
543 intFields = list; 542 intFields = list;
544} 543}
545 544
546QStringList AbTable::choiceSelection(int /*index*/) const 545QStringList AbTable::choiceSelection(int /*index*/) const
547{ 546{
548 QStringList r; 547 QStringList r;
549 /* ###### 548 /* ######
550 549
551 QString selname = choicenames.at(index); 550 QString selname = choicenames.at(index);
552 for (each row) { 551 for (each row) {
553 OContact *c = contactForRow(row); 552 Opie::OPimContact *c = contactForRow(row);
554 if ( text(row,2) == selname ) { 553 if ( text(row,2) == selname ) {
555 r.append(c->email); 554 r.append(c->email);
556 } 555 }
557 } 556 }
558 557
559 */ 558 */
560 return r; 559 return r;
561} 560}
562 561
563 562
564void AbTable::updateVisible() 563void AbTable::updateVisible()
565{ 564{
566 //qWarning("void AbTable::updateVisible()"); 565 //qWarning("void AbTable::updateVisible()");
567 566
568 int visible, 567 int visible,
569 totalRows, 568 totalRows,
570 row, 569 row,
571 selectedRow = 0; 570 selectedRow = 0;
572 571
573 visible = 0; 572 visible = 0;
574 573
575 setPaintingEnabled( FALSE ); 574 setPaintingEnabled( FALSE );
576 575
577 realignTable(); 576 realignTable();
@@ -610,49 +609,49 @@ void AbTable::setPaintingEnabled( bool e )
610 rowHeightChanged( 0 ); 609 rowHeightChanged( 0 );
611 viewport()->update(); 610 viewport()->update();
612 } 611 }
613 } else { 612 } else {
614 ++countNested; 613 ++countNested;
615 enablePainting = false; 614 enablePainting = false;
616 setUpdatesEnabled( false ); 615 setUpdatesEnabled( false );
617 } 616 }
618 //qWarning("OUT void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested ); 617 //qWarning("OUT void AbTable::setPaintingEnabled( %d )->Nested: %d", e, countNested );
619} 618}
620 619
621void AbTable::viewportPaintEvent( QPaintEvent* e ) { 620void AbTable::viewportPaintEvent( QPaintEvent* e ) {
622 //qWarning(" void AbTable::viewportPaintEvent( QPaintEvent* e ) -> %d", enablePainting); 621 //qWarning(" void AbTable::viewportPaintEvent( QPaintEvent* e ) -> %d", enablePainting);
623 if ( enablePainting ) 622 if ( enablePainting )
624 QTable::viewportPaintEvent( e ); 623 QTable::viewportPaintEvent( e );
625} 624}
626 625
627void AbTable::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) { 626void AbTable::paintCell(QPainter* p, int row, int col, const QRect& cr, bool ) {
628 const QColorGroup &cg = colorGroup(); 627 const QColorGroup &cg = colorGroup();
629 628
630 p->save(); 629 p->save();
631 630
632 //qWarning( "Paint row: %d", row ); 631 //qWarning( "Paint row: %d", row );
633 632
634 OContact act_contact = m_viewList[row]; 633 Opie::OPimContact act_contact = m_viewList[row];
635 634
636 // Paint alternating background bars 635 // Paint alternating background bars
637 if ( (row % 2 ) == 0 ) { 636 if ( (row % 2 ) == 0 ) {
638 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); 637 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) );
639 p->setPen( QPen( cg.text() ) ); 638 p->setPen( QPen( cg.text() ) );
640 } 639 }
641 else { 640 else {
642 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Background ) ); 641 p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Background ) );
643 p->setPen( QPen( cg.buttonText() ) ); 642 p->setPen( QPen( cg.buttonText() ) );
644 } 643 }
645 644
646 QFont f = p->font(); 645 QFont f = p->font();
647 QFontMetrics fm(f); 646 QFontMetrics fm(f);
648 647
649 int marg = 2; 648 int marg = 2;
650 int x = 0; 649 int x = 0;
651 int y = ( cr.height() - 14 ) / 2; 650 int y = ( cr.height() - 14 ) / 2;
652 651
653 QString nameText = act_contact.fileAs(); 652 QString nameText = act_contact.fileAs();
654 653
655 switch( col ){ 654 switch( col ){
656 case 0: 655 case 0:
657 p->drawText( x + marg,2 + fm.ascent(), nameText ); 656 p->drawText( x + marg,2 + fm.ascent(), nameText );
658 break; 657 break;
@@ -663,49 +662,49 @@ void AbTable::paintCell(QPainter* p, int row, int col, const QRect& cr, bool )
663 QString contactText = contactItem.value; 662 QString contactText = contactItem.value;
664 663
665 if ( !contactPic.isNull() ) 664 if ( !contactPic.isNull() )
666 { 665 {
667 p->drawPixmap( x + marg, y, contactPic ); 666 p->drawPixmap( x + marg, y, contactPic );
668 p->drawText( x + marg + contactPic.width() 667 p->drawText( x + marg + contactPic.width()
669 + 4,2 + fm.ascent(), contactText ); 668 + 4,2 + fm.ascent(), contactText );
670 } 669 }
671 else 670 else
672 { 671 {
673 p->drawText( x + marg,2 + fm.ascent(), contactText ); 672 p->drawText( x + marg,2 + fm.ascent(), contactText );
674 } 673 }
675 } 674 }
676 break; 675 break;
677 676
678 } 677 }
679 p->restore(); 678 p->restore();
680} 679}
681 680
682void AbTable::rowHeightChanged( int row ) 681void AbTable::rowHeightChanged( int row )
683{ 682{
684 if ( enablePainting ) 683 if ( enablePainting )
685 QTable::rowHeightChanged( row ); 684 QTable::rowHeightChanged( row );
686} 685}
687ContactItem AbTable::findContactContact( const OContact &entry, int /* row */ ) 686ContactItem AbTable::findContactContact( const Opie::OPimContact &entry, int /* row */ )
688{ 687{
689 688
690 ContactItem item; 689 ContactItem item;
691 690
692 item.value = ""; 691 item.value = "";
693 692
694 for ( QValueList<int>::ConstIterator it = intFields.begin(); 693 for ( QValueList<int>::ConstIterator it = intFields.begin();
695 it != intFields.end(); ++it ) { 694 it != intFields.end(); ++it ) {
696 switch ( *it ) { 695 switch ( *it ) {
697 default: 696 default:
698 break; 697 break;
699 case Qtopia::Title: 698 case Qtopia::Title:
700 item.value = entry.title(); 699 item.value = entry.title();
701 break; 700 break;
702 case Qtopia::Suffix: 701 case Qtopia::Suffix:
703 item.value = entry.suffix(); 702 item.value = entry.suffix();
704 break; 703 break;
705 case Qtopia::FileAs: 704 case Qtopia::FileAs:
706 item.value = entry.fileAs(); 705 item.value = entry.fileAs();
707 break; 706 break;
708 case Qtopia::DefaultEmail: 707 case Qtopia::DefaultEmail:
709 item.value = entry.defaultEmail(); 708 item.value = entry.defaultEmail();
710 if ( !item.value.isEmpty() ) 709 if ( !item.value.isEmpty() )
711 item.icon = Resource::loadPixmap( "addressbook/email" ); 710 item.icon = Resource::loadPixmap( "addressbook/email" );