summaryrefslogtreecommitdiff
path: root/core
authortux_mike <tux_mike>2002-04-17 19:45:48 (UTC)
committer tux_mike <tux_mike>2002-04-17 19:45:48 (UTC)
commitc2c343110573bd8b4d59fbff577969ff23d5c544 (patch) (unidiff)
tree79cff133d04fa7df83783482e27557191ee2e199 /core
parentb94bcfb586b838885d7d0503623ea36ee0054464 (diff)
downloadopie-c2c343110573bd8b4d59fbff577969ff23d5c544.zip
opie-c2c343110573bd8b4d59fbff577969ff23d5c544.tar.gz
opie-c2c343110573bd8b4d59fbff577969ff23d5c544.tar.bz2
Added preliminary version of the Picker
Diffstat (limited to 'core') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/addressbook/abtable.cpp26
-rw-r--r--core/pim/addressbook/abtable.h2
-rw-r--r--core/pim/addressbook/addressbook.cpp12
-rw-r--r--core/pim/addressbook/addressbook.h3
-rw-r--r--core/pim/addressbook/addressbook.pro6
-rw-r--r--core/pim/addressbook/picker.cpp234
-rw-r--r--core/pim/addressbook/picker.h65
7 files changed, 344 insertions, 4 deletions
diff --git a/core/pim/addressbook/abtable.cpp b/core/pim/addressbook/abtable.cpp
index 17277b4..759cb48 100644
--- a/core/pim/addressbook/abtable.cpp
+++ b/core/pim/addressbook/abtable.cpp
@@ -141,24 +141,25 @@ AbTable::AbTable( const QValueList<int> *order, QWidget *parent, const char *nam
141 init(); 141 init();
142 setSorting( TRUE ); 142 setSorting( TRUE );
143 connect( this, SIGNAL(clicked(int,int,int,const QPoint &)), 143 connect( this, SIGNAL(clicked(int,int,int,const QPoint &)),
144 this, SLOT(itemClicked(int,int)) ); 144 this, SLOT(itemClicked(int,int)) );
145} 145}
146 146
147AbTable::~AbTable() 147AbTable::~AbTable()
148{ 148{
149} 149}
150 150
151void AbTable::init() 151void AbTable::init()
152{ 152{
153 showChar = '\0';
153 setNumRows( 0 ); 154 setNumRows( 0 );
154 setNumCols( 2 ); 155 setNumCols( 2 );
155 156
156 horizontalHeader()->setLabel( 0, tr( "Full Name" )); 157 horizontalHeader()->setLabel( 0, tr( "Full Name" ));
157 horizontalHeader()->setLabel( 1, tr( "Contact" )); 158 horizontalHeader()->setLabel( 1, tr( "Contact" ));
158 setLeftMargin( 0 ); 159 setLeftMargin( 0 );
159 verticalHeader()->hide(); 160 verticalHeader()->hide();
160} 161}
161 162
162void AbTable::columnClicked( int col ) 163void AbTable::columnClicked( int col )
163{ 164{
164 if ( !sorting() ) 165 if ( !sorting() )
@@ -443,30 +444,31 @@ QString AbTable::findContactContact( const Contact &entry )
443 444
444void AbTable::addEntry( const Contact &newCnt ) 445void AbTable::addEntry( const Contact &newCnt )
445{ 446{
446 int row = numRows(); 447 int row = numRows();
447 setNumRows( row + 1 ); 448 setNumRows( row + 1 );
448 updateJournal( newCnt, Contact::ACTION_ADD ); 449 updateJournal( newCnt, Contact::ACTION_ADD );
449 insertIntoTable( newCnt, row ); 450 insertIntoTable( newCnt, row );
450 setCurrentCell( row, 0 ); 451 setCurrentCell( row, 0 );
451 updateVisible(); 452 updateVisible();
452} 453}
453 454
454void AbTable::resizeRows( int size ) { 455void AbTable::resizeRows( int size ) {
455 456/*
456 if (numRows()) { 457 if (numRows()) {
457 for (int i = 0; i < numRows(); i++) { 458 for (int i = 0; i < numRows(); i++) {
458 setRowHeight( i, size ); 459 setRowHeight( i, size );
459 } 460 }
460 } 461 }*/
462 updateVisible();
461} 463}
462 464
463void AbTable::updateJournal( const Contact &cnt, 465void AbTable::updateJournal( const Contact &cnt,
464 Contact::journal_action action, int row ) 466 Contact::journal_action action, int row )
465{ 467{
466 QFile f( journalFileName() ); 468 QFile f( journalFileName() );
467 if ( !f.open(IO_WriteOnly|IO_Append) ) 469 if ( !f.open(IO_WriteOnly|IO_Append) )
468 return; 470 return;
469 QString buf; 471 QString buf;
470 QCString str; 472 QCString str;
471 buf = "<Contact "; 473 buf = "<Contact ";
472 cnt.save( buf ); 474 cnt.save( buf );
@@ -999,78 +1001,98 @@ QStringList AbTable::choiceSelection(int /*index*/) const
999 } 1001 }
1000 1002
1001 */ 1003 */
1002 return r; 1004 return r;
1003} 1005}
1004 1006
1005void AbTable::setShowCategory( const QString &c ) 1007void AbTable::setShowCategory( const QString &c )
1006{ 1008{
1007 showCat = c; 1009 showCat = c;
1008 updateVisible(); 1010 updateVisible();
1009} 1011}
1010 1012
1013void AbTable::setShowByLetter( char c )
1014{
1015 showChar = tolower(c);
1016 qDebug( "AbTable::setShowByLetter %c", showChar);
1017 updateVisible();
1018}
1019
1011QString AbTable::showCategory() const 1020QString AbTable::showCategory() const
1012{ 1021{
1013 return showCat; 1022 return showCat;
1014} 1023}
1015 1024
1016 1025
1017QStringList AbTable::categories() 1026QStringList AbTable::categories()
1018{ 1027{
1019 mCat.load( categoryFileName() ); 1028 mCat.load( categoryFileName() );
1020 QStringList categoryList = mCat.labels( "Contacts" ); 1029 QStringList categoryList = mCat.labels( "Contacts" );
1021 return categoryList; 1030 return categoryList;
1022} 1031}
1023 1032
1024void AbTable::updateVisible() 1033void AbTable::updateVisible()
1025{ 1034{
1026 int visible, 1035 int visible,
1027 totalRows, 1036 totalRows,
1028 id, 1037 id,
1029 totalCats, 1038 totalCats,
1030 it, 1039 it,
1031 row; 1040 row;
1032 bool hide; 1041 bool hide;
1033 AbTableItem *ati; 1042 AbTableItem *ati;
1034 Contact *cnt; 1043 Contact *cnt;
1044 QString fileAsName;
1045 QString tmpStr;
1035 visible = 0; 1046 visible = 0;
1036 1047
1037 setPaintingEnabled( FALSE ); 1048 setPaintingEnabled( FALSE );
1038 1049
1039 totalRows = numRows(); 1050 totalRows = numRows();
1040 id = mCat.id( "Contacts", showCat ); 1051 id = mCat.id( "Contacts", showCat );
1041 QArray<int> cats; 1052 QArray<int> cats;
1042 for ( row = 0; row < totalRows; row++ ) { 1053 for ( row = 0; row < totalRows; row++ ) {
1043 ati = static_cast<AbTableItem*>( item(row, 0) ); 1054 ati = static_cast<AbTableItem*>( item(row, 0) );
1044 cnt = &contactList[ati]; 1055 cnt = &contactList[ati];
1045 cats = cnt->categories(); 1056 cats = cnt->categories();
1057 fileAsName = cnt->fileAs();
1046 hide = false; 1058 hide = false;
1047 if ( !showCat.isEmpty() ) { 1059 if ( !showCat.isEmpty() ) {
1048 if ( showCat == tr( "Unfiled" ) ) { 1060 if ( showCat == tr( "Unfiled" ) ) {
1049 if ( cats.count() > 0 ) 1061 if ( cats.count() > 0 )
1050 hide = true; 1062 hide = true;
1051 } else { 1063 } else {
1052 // do some comparing 1064 // do some comparing
1053 if ( !hide ) { 1065 if ( !hide ) {
1054 hide = true; 1066 hide = true;
1055 totalCats = int(cats.count()); 1067 totalCats = int(cats.count());
1056 for ( it = 0; it < totalCats; it++ ) { 1068 for ( it = 0; it < totalCats; it++ ) {
1057 if ( cats[it] == id ) { 1069 if ( cats[it] == id ) {
1058 hide = false; 1070 hide = false;
1059 break; 1071 break;
1060 } 1072 }
1061 } 1073 }
1062 } 1074 }
1063 } 1075 }
1064 } 1076 }
1077 if ( showChar != '\0' ) {
1078 tmpStr = fileAsName.left(1);
1079 tmpStr = tmpStr.lower();
1080 qDebug( "updateVisible ");
1081 qDebug( tmpStr );
1082 qDebug( "updateVisible2 %c", showChar );
1083 if ( tmpStr != QString(QChar(showChar)) ) {
1084 hide = true;
1085 }
1086 }
1065 if ( hide ) { 1087 if ( hide ) {
1066 if ( currentRow() == row ) 1088 if ( currentRow() == row )
1067 setCurrentCell( -1, 0 ); 1089 setCurrentCell( -1, 0 );
1068 if ( rowHeight(row) > 0 ) 1090 if ( rowHeight(row) > 0 )
1069 hideRow( row ); 1091 hideRow( row );
1070 } else { 1092 } else {
1071 if ( rowHeight(row) == 0 ) { 1093 if ( rowHeight(row) == 0 ) {
1072 showRow( row ); 1094 showRow( row );
1073 adjustRow( row ); 1095 adjustRow( row );
1074 } 1096 }
1075 visible++; 1097 visible++;
1076 } 1098 }
diff --git a/core/pim/addressbook/abtable.h b/core/pim/addressbook/abtable.h
index 53635ee..d5ff279 100644
--- a/core/pim/addressbook/abtable.h
+++ b/core/pim/addressbook/abtable.h
@@ -75,24 +75,25 @@ public:
75 void clearFindRow() { currFindRow = -2; } 75 void clearFindRow() { currFindRow = -2; }
76 void loadFields(); 76 void loadFields();
77 void refresh(); 77 void refresh();
78 bool save( const QString &fn ); 78 bool save( const QString &fn );
79 void load( const QString &fn ); 79 void load( const QString &fn );
80 80
81 // addresspicker mode 81 // addresspicker mode
82 void setChoiceNames( const QStringList& list); 82 void setChoiceNames( const QStringList& list);
83 QStringList choiceNames() const; 83 QStringList choiceNames() const;
84 void setChoiceSelection(int index, const QStringList& list); 84 void setChoiceSelection(int index, const QStringList& list);
85 QStringList choiceSelection(int index) const; 85 QStringList choiceSelection(int index) const;
86 void setShowCategory( const QString &c ); 86 void setShowCategory( const QString &c );
87 void setShowByLetter( char c );
87 QString showCategory() const; 88 QString showCategory() const;
88 QStringList categories(); 89 QStringList categories();
89 void resizeRows( int size ); 90 void resizeRows( int size );
90 91
91 void show(); 92 void show();
92 void setPaintingEnabled( bool e ); 93 void setPaintingEnabled( bool e );
93 94
94public slots: 95public slots:
95 void slotDoFind( const QString &str, bool caseSensitive, bool backwards, 96 void slotDoFind( const QString &str, bool caseSensitive, bool backwards,
96 int category ); 97 int category );
97signals: 98signals:
98 void empty( bool ); 99 void empty( bool );
@@ -121,21 +122,22 @@ private:
121 void updateJournal( const Contact &contact, Contact::journal_action action, 122 void updateJournal( const Contact &contact, Contact::journal_action action,
122 int row = -1 ); 123 int row = -1 );
123 void insertIntoTable( const Contact &contact, int row ); 124 void insertIntoTable( const Contact &contact, int row );
124 void internalAddEntries( QList<Contact> &list ); 125 void internalAddEntries( QList<Contact> &list );
125 QString findContactName( const Contact &entry ); 126 QString findContactName( const Contact &entry );
126 QString findContactContact( const Contact &entry ); 127 QString findContactContact( const Contact &entry );
127 void journalFreeReplace( const Contact &cnt, int row ); 128 void journalFreeReplace( const Contact &cnt, int row );
128 void journalFreeRemove( int row ); 129 void journalFreeRemove( int row );
129 void realignTable( int ); 130 void realignTable( int );
130 void updateVisible(); 131 void updateVisible();
131 int lastSortCol; 132 int lastSortCol;
132 bool asc; 133 bool asc;
134 char showChar;
133 QMap<AbTableItem*, Contact> contactList; 135 QMap<AbTableItem*, Contact> contactList;
134 const QValueList<int> *intFields; 136 const QValueList<int> *intFields;
135 int currFindRow; 137 int currFindRow;
136 QString showCat; 138 QString showCat;
137 QStringList choicenames; 139 QStringList choicenames;
138 bool enablePainting; 140 bool enablePainting;
139 Categories mCat; 141 Categories mCat;
140}; 142};
141#endif // ABTABLE_H 143#endif // ABTABLE_H
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp
index 360aa7e..e502cf6 100644
--- a/core/pim/addressbook/addressbook.cpp
+++ b/core/pim/addressbook/addressbook.cpp
@@ -54,24 +54,25 @@
54#include <qstringlist.h> 54#include <qstringlist.h>
55#include <qtoolbutton.h> 55#include <qtoolbutton.h>
56#include <qwhatsthis.h> 56#include <qwhatsthis.h>
57 57
58#include <stdlib.h> 58#include <stdlib.h>
59#include <sys/stat.h> 59#include <sys/stat.h>
60#include <sys/types.h> 60#include <sys/types.h>
61#include <fcntl.h> 61#include <fcntl.h>
62#include <unistd.h> 62#include <unistd.h>
63 63
64#include <qdatetime.h> 64#include <qdatetime.h>
65 65
66#include "picker.h"
66static QString addressbookOldXMLFilename() 67static QString addressbookOldXMLFilename()
67{ 68{
68 QString filename = QPEApplication::documentDir() + "addressbook.xml"; 69 QString filename = QPEApplication::documentDir() + "addressbook.xml";
69 return filename; 70 return filename;
70} 71}
71 72
72static QString addressbookXMLFilename() 73static QString addressbookXMLFilename()
73{ 74{
74 QString filename = Global::applicationFileName("addressbook", 75 QString filename = Global::applicationFileName("addressbook",
75 "addressbook.xml"); 76 "addressbook.xml");
76 return filename; 77 return filename;
77} 78}
@@ -89,24 +90,25 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
89 : QMainWindow( parent, name, f ), 90 : QMainWindow( parent, name, f ),
90 abEditor(0), 91 abEditor(0),
91 bAbEditFirstTime(TRUE), 92 bAbEditFirstTime(TRUE),
92 syncing(FALSE) 93 syncing(FALSE)
93{ 94{
94 initFields(); 95 initFields();
95 96
96 setCaption( tr("Contacts") ); 97 setCaption( tr("Contacts") );
97 setIcon( Resource::loadPixmap( "AddressBook" ) ); 98 setIcon( Resource::loadPixmap( "AddressBook" ) );
98 99
99 setToolBarsMovable( FALSE ); 100 setToolBarsMovable( FALSE );
100 101
102 QBoxLayout *vb = new QVBoxLayout( this, 0, 0 );
101 // Create Toolbars 103 // Create Toolbars
102 104
103 QPEToolBar *bar = new QPEToolBar( this ); 105 QPEToolBar *bar = new QPEToolBar( this );
104 bar->setHorizontalStretchable( TRUE ); 106 bar->setHorizontalStretchable( TRUE );
105 107
106 QPEMenuBar *mbList = new QPEMenuBar( bar ); 108 QPEMenuBar *mbList = new QPEMenuBar( bar );
107 mbList->setMargin( 0 ); 109 mbList->setMargin( 0 );
108 110
109 QPopupMenu *edit = new QPopupMenu( this ); 111 QPopupMenu *edit = new QPopupMenu( this );
110 mbList->insertItem( tr( "Contact" ), edit ); 112 mbList->insertItem( tr( "Contact" ), edit );
111 113
112 listTools = new QPEToolBar( this, "list operations" ); 114 listTools = new QPEToolBar( this, "list operations" );
@@ -180,40 +182,44 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name,
180 // not to mention it also does the necessary stuff for the 182 // not to mention it also does the necessary stuff for the
181 // journaling... 183 // journaling...
182 QString str = addressbookXMLFilename(); 184 QString str = addressbookXMLFilename();
183 if ( str.isNull() ) { 185 if ( str.isNull() ) {
184 QMessageBox::warning( this, tr("Out of Space"), 186 QMessageBox::warning( this, tr("Out of Space"),
185 tr("There is not enough space to create\n" 187 tr("There is not enough space to create\n"
186 "neccessary startup files.\n" 188 "neccessary startup files.\n"
187 "\nFree up some space before\nentering data!") 189 "\nFree up some space before\nentering data!")
188 ); 190 );
189 } 191 }
190 192
191 abList = new AbTable( &orderedFields, this, "table" ); 193 abList = new AbTable( &orderedFields, this, "table" );
194 vb->insertWidget(0,abList);
192 abList->setHScrollBarMode( QScrollView::AlwaysOff ); 195 abList->setHScrollBarMode( QScrollView::AlwaysOff );
193 connect( abList, SIGNAL( empty( bool ) ), 196 connect( abList, SIGNAL( empty( bool ) ),
194 this, SLOT( listIsEmpty( bool ) ) ); 197 this, SLOT( listIsEmpty( bool ) ) );
195 connect( abList, SIGNAL( details() ), 198 connect( abList, SIGNAL( details() ),
196 this, SLOT( slotListView() ) ); 199 this, SLOT( slotListView() ) );
197 connect( abList, SIGNAL(currentChanged(int,int)), 200 connect( abList, SIGNAL(currentChanged(int,int)),
198 this, SLOT(slotUpdateToolbar()) ); 201 this, SLOT(slotUpdateToolbar()) );
199 202
200 mView = 0; 203 mView = 0;
201 204
202 abList->load( addressbookXMLFilename() ); 205 abList->load( addressbookXMLFilename() );
203 if ( QFile::exists(addressbookOldXMLFilename()) ) { 206 if ( QFile::exists(addressbookOldXMLFilename()) ) {
204 abList->load( addressbookOldXMLFilename() ); 207 abList->load( addressbookOldXMLFilename() );
205 QFile::remove(addressbookOldXMLFilename()); 208 QFile::remove(addressbookOldXMLFilename());
206 } 209 }
207 210
211 pLabel = new LetterPicker( abList );
212 connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char)));
213 vb->insertWidget(1,pLabel);
208 catMenu = new QPopupMenu( this ); 214 catMenu = new QPopupMenu( this );
209 catMenu->setCheckable( TRUE ); 215 catMenu->setCheckable( TRUE );
210 connect( catMenu, SIGNAL(activated(int)), this, SLOT(slotSetCategory(int)) ); 216 connect( catMenu, SIGNAL(activated(int)), this, SLOT(slotSetCategory(int)) );
211 populateCategories(); 217 populateCategories();
212 218
213 mbList->insertItem( tr("View"), catMenu ); 219 mbList->insertItem( tr("View"), catMenu );
214 setCentralWidget( abList ); 220 setCentralWidget( abList );
215 221
216 fontMenu = new QPopupMenu(this); 222 fontMenu = new QPopupMenu(this);
217 fontMenu->setCheckable( true ); 223 fontMenu->setCheckable( true );
218 connect( fontMenu, SIGNAL(activated(int)), this, SLOT(slotSetFont(int))); 224 connect( fontMenu, SIGNAL(activated(int)), this, SLOT(slotSetFont(int)));
219 225
@@ -875,24 +881,30 @@ void AddressbookWindow::slotSetCategory( int c )
875 abList->setShowCategory( QString::null ); 881 abList->setShowCategory( QString::null );
876 setCaption( tr("Contacts") + " - " + tr ( "All" ) ); 882 setCaption( tr("Contacts") + " - " + tr ( "All" ) );
877 } else if ( c == (int)catMenu->count() ) { 883 } else if ( c == (int)catMenu->count() ) {
878 abList->setShowCategory( tr( "Unfiled" ) ); 884 abList->setShowCategory( tr( "Unfiled" ) );
879 setCaption( tr("Contacts") + " - " + tr( "Unfiled" ) ); 885 setCaption( tr("Contacts") + " - " + tr( "Unfiled" ) );
880 } else { 886 } else {
881 QString cat = abList->categories()[c - 2]; 887 QString cat = abList->categories()[c - 2];
882 abList->setShowCategory( cat ); 888 abList->setShowCategory( cat );
883 setCaption( tr("Contacts") + " - " + cat ); 889 setCaption( tr("Contacts") + " - " + cat );
884 } 890 }
885} 891}
886 892
893void AddressbookWindow::slotSetLetter( char c ) {
894
895 abList->setShowByLetter( c );
896
897}
898
887void AddressbookWindow::populateCategories() 899void AddressbookWindow::populateCategories()
888{ 900{
889 catMenu->clear(); 901 catMenu->clear();
890 902
891 int id, 903 int id,
892 rememberId; 904 rememberId;
893 id = 1; 905 id = 1;
894 catMenu->insertItem( tr( "All" ), id++ ); 906 catMenu->insertItem( tr( "All" ), id++ );
895 QStringList categories = abList->categories(); 907 QStringList categories = abList->categories();
896 categories.append( tr( "Unfiled" ) ); 908 categories.append( tr( "Unfiled" ) );
897 for ( QStringList::Iterator it = categories.begin(); 909 for ( QStringList::Iterator it = categories.begin();
898 it != categories.end(); ++it ) { 910 it != categories.end(); ++it ) {
diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h
index e2a7100..31c4660 100644
--- a/core/pim/addressbook/addressbook.h
+++ b/core/pim/addressbook/addressbook.h
@@ -22,24 +22,25 @@
22 22
23#include <qmainwindow.h> 23#include <qmainwindow.h>
24 24
25class ContactEditor; 25class ContactEditor;
26class AbLabel; 26class AbLabel;
27class AbTable; 27class AbTable;
28class QPEToolBar; 28class QPEToolBar;
29class QPopupMenu; 29class QPopupMenu;
30class QToolButton; 30class QToolButton;
31class QDialog; 31class QDialog;
32class Ir; 32class Ir;
33class QAction; 33class QAction;
34class LetterPicker;
34 35
35class AddressbookWindow: public QMainWindow 36class AddressbookWindow: public QMainWindow
36{ 37{
37 Q_OBJECT 38 Q_OBJECT
38public: 39public:
39 AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 40 AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
40 ~AddressbookWindow(); 41 ~AddressbookWindow();
41 42
42protected: 43protected:
43 void resizeEvent( QResizeEvent * e ); 44 void resizeEvent( QResizeEvent * e );
44 void showList(); 45 void showList();
45 void showView(); 46 void showView();
@@ -60,40 +61,42 @@ private slots:
60 void slotListView(); 61 void slotListView();
61 void slotListDelete(); 62 void slotListDelete();
62 void slotViewBack(); 63 void slotViewBack();
63 void slotViewEdit(); 64 void slotViewEdit();
64 void slotPersonalView(); 65 void slotPersonalView();
65 void listIsEmpty( bool ); 66 void listIsEmpty( bool );
66 void slotSettings(); 67 void slotSettings();
67 void writeMail(); 68 void writeMail();
68 void slotBeam(); 69 void slotBeam();
69 void beamDone( Ir * ); 70 void beamDone( Ir * );
70 void slotFind(); 71 void slotFind();
71 void slotSetCategory( int ); 72 void slotSetCategory( int );
73 void slotSetLetter( char );
72 void slotUpdateToolbar(); 74 void slotUpdateToolbar();
73 void slotSetFont(int); 75 void slotSetFont(int);
74private: 76private:
75 void initFields();// inititialize our fields... 77 void initFields();// inititialize our fields...
76 AbLabel *abView(); 78 AbLabel *abView();
77 void populateCategories(); 79 void populateCategories();
78 80
79 QPopupMenu *catMenu, *fontMenu; 81 QPopupMenu *catMenu, *fontMenu;
80 QPEToolBar *listTools; 82 QPEToolBar *listTools;
81 QToolButton *deleteButton; 83 QToolButton *deleteButton;
82 QValueList<int> allFields, 84 QValueList<int> allFields,
83 orderedFields; 85 orderedFields;
84 QStringList slOrderedFields; 86 QStringList slOrderedFields;
85 enum Panes { paneList=0, paneView, paneEdit }; 87 enum Panes { paneList=0, paneView, paneEdit };
86 ContactEditor *abEditor; 88 ContactEditor *abEditor;
87 AbLabel *mView; 89 AbLabel *mView;
90 LetterPicker *pLabel;
88 AbTable *abList; 91 AbTable *abList;
89 92
90 QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, 93 QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam,
91 *actionPersonal, *actionMail; 94 *actionPersonal, *actionMail;
92 95
93 bool bAbEditFirstTime; 96 bool bAbEditFirstTime;
94 int viewMargin; 97 int viewMargin;
95 98
96 bool syncing; 99 bool syncing;
97 QFont *defaultFont; 100 QFont *defaultFont;
98 int startFontSize; 101 int startFontSize;
99}; 102};
diff --git a/core/pim/addressbook/addressbook.pro b/core/pim/addressbook/addressbook.pro
index 53cf030..0d65c74 100644
--- a/core/pim/addressbook/addressbook.pro
+++ b/core/pim/addressbook/addressbook.pro
@@ -1,26 +1,28 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 CONFIG = qt warn_on release 2 CONFIG = qt warn_on release
3 DESTDIR = $(OPIEDIR)/bin 3 DESTDIR = $(OPIEDIR)/bin
4 HEADERS= addressbook.h \ 4 HEADERS= addressbook.h \
5 contacteditor.h \ 5 contacteditor.h \
6 ablabel.h \ 6 ablabel.h \
7 abtable.h \ 7 abtable.h \
8 addresssettings.h 8 addresssettings.h \
9 picker.h
9 SOURCES= main.cpp \ 10 SOURCES= main.cpp \
10 addressbook.cpp \ 11 addressbook.cpp \
11 contacteditor.cpp \ 12 contacteditor.cpp \
12 ablabel.cpp \ 13 ablabel.cpp \
13 abtable.cpp \ 14 abtable.cpp \
14 addresssettings.cpp 15 addresssettings.cpp \
16 picker.cpp
15 INTERFACES= addresssettingsbase.ui 17 INTERFACES= addresssettingsbase.ui
16 18
17 TARGET = addressbook 19 TARGET = addressbook
18INCLUDEPATH += $(OPIEDIR)/include 20INCLUDEPATH += $(OPIEDIR)/include
19 DEPENDPATH+= $(OPIEDIR)/include 21 DEPENDPATH+= $(OPIEDIR)/include
20LIBS += -lqpe 22LIBS += -lqpe
21 23
22TRANSLATIONS = ../../i18n/pt_BR/addressbook.ts 24TRANSLATIONS = ../../i18n/pt_BR/addressbook.ts
23TRANSLATIONS += ../../i18n/de/addressbook.ts 25TRANSLATIONS += ../../i18n/de/addressbook.ts
24TRANSLATIONS += ../../i18n/en/addressbook.ts 26TRANSLATIONS += ../../i18n/en/addressbook.ts
25TRANSLATIONS += ../../i18n/hu/addressbook.ts 27TRANSLATIONS += ../../i18n/hu/addressbook.ts
26TRANSLATIONS += ../../i18n/sl/addressbook.ts 28TRANSLATIONS += ../../i18n/sl/addressbook.ts
diff --git a/core/pim/addressbook/picker.cpp b/core/pim/addressbook/picker.cpp
new file mode 100644
index 0000000..06dcc7d
--- a/dev/null
+++ b/core/pim/addressbook/picker.cpp
@@ -0,0 +1,234 @@
1#include "picker.h"
2
3#include <qfont.h>
4#include <qstring.h>
5#include <qtimer.h>
6#include <qlayout.h>
7
8char PickerLabel::lastLetter = '\0';
9
10PickerLabel::PickerLabel( QWidget *parent, const char *name )
11 : QLabel ( parent, name )
12{
13 currentLetter = 0;
14 //lastLetter = 0;
15
16 letter1 = '\0';
17 letter2 = '\0';
18 letter3 = '\0';
19
20 setFont( QFont( "smallsmooth", 9 ) );
21 setTextFormat( Qt::RichText );
22
23}
24
25PickerLabel::~PickerLabel()
26{
27
28}
29
30void PickerLabel::setLetters( char ch1, char ch2, char ch3 )
31{
32 QString tmpStr;
33
34 if (ch1 != '\0')
35 letter1 = ch1;
36 else
37 letter1 = ' ';
38
39 if (ch2 != '\0')
40 letter2 = ch2;
41 else
42 letter2 = ' ';
43
44 if (ch3 != '\0')
45 letter3 = ch3;
46 else
47 letter3 = ' ';
48
49 tmpStr = "<qt>";
50 tmpStr += letter1;
51 tmpStr += letter2;
52 tmpStr += letter3;
53 tmpStr += "</qt>";
54
55 setText(tmpStr);
56
57 currentLetter = 0;
58
59}
60
61void PickerLabel::clearLetter()
62{
63
64 QString tmpStr;
65
66 tmpStr = "<qt>";
67 tmpStr += letter1;
68 tmpStr += letter2;
69 tmpStr += letter3;
70 tmpStr += "</qt>";
71
72 setText(tmpStr);
73
74 currentLetter = 0;
75
76}
77
78void PickerLabel::mouseReleaseEvent( QMouseEvent *e )
79{
80 QString tmpStr;
81
82 if (lastLetter != letter1 && lastLetter != letter2 && lastLetter != letter3)
83 QTimer::singleShot( 0, this, SLOT(emitClearSignal()) );
84
85 qDebug( "a" );
86 switch (currentLetter) {
87 case 0:
88 tmpStr = "<qt><font color=\"#7F0000\">";
89 tmpStr += letter1;
90 tmpStr += "</font>";
91 tmpStr += letter2;
92 tmpStr += letter3;
93 tmpStr += "</qt>";
94
95 setText(tmpStr);
96
97 currentLetter++;
98 lastLetter = letter1;
99 emit selectedLetter( letter1 );
100 qDebug( "PickerLabel::mouseReleaseEvent %c", letter1 );
101 break;
102
103 case 1:
104 tmpStr = "<qt>";
105 tmpStr += letter1;
106 tmpStr += "<font color=\"#7F0000\">";
107 tmpStr += letter2;
108 tmpStr += "</font>";
109 tmpStr += letter3;
110 tmpStr += "</qt>";
111
112 setText(tmpStr);
113
114 currentLetter++;
115 lastLetter = letter2;
116 emit selectedLetter( letter2 );
117 qDebug( "PickerLabel::mouseReleaseEvent %c", letter2 );
118 break;
119
120 case 2:
121 tmpStr = "<qt>";
122 tmpStr += letter1;
123 tmpStr += letter2;
124 tmpStr += "<font color=\"#7F0000\">";
125 tmpStr += letter3;
126 tmpStr += "</font></qt>";
127
128 setText(tmpStr);
129
130 currentLetter++;
131 lastLetter = letter3;
132 emit selectedLetter( letter3 );
133 qDebug( "PickerLabel::mouseReleaseEvent %c", letter3 );
134 break;
135
136 default:
137 clearLetter();
138 lastLetter = '\0';
139 emit selectedLetter( '\0' );
140
141
142 }
143}
144
145void PickerLabel::emitClearSignal() {
146 emit clearAll();
147}
148
149LetterPicker::LetterPicker( QWidget *parent, const char *name )
150 : QFrame( parent, name )
151{
152 QHBoxLayout *l = new QHBoxLayout(this);
153
154 lblABC = new PickerLabel( this );
155 l->addWidget( lblABC );
156
157 lblDEF = new PickerLabel( this );
158 l->addWidget( lblDEF );
159
160 lblGHI = new PickerLabel( this );
161 l->addWidget( lblGHI );
162
163 lblJKL = new PickerLabel( this );
164 l->addWidget( lblJKL );
165
166 lblMNO = new PickerLabel( this );
167 l->addWidget( lblMNO );
168
169 lblPQR = new PickerLabel( this );
170 l->addWidget( lblPQR );
171
172 lblSTU = new PickerLabel( this );
173 l->addWidget( lblSTU );
174
175 lblVWX = new PickerLabel( this );
176 l->addWidget( lblVWX );
177
178 lblYZ = new PickerLabel( this );
179 l->addWidget( lblYZ );
180
181 lblABC->setLetters( 'A', 'B', 'C' );
182 lblDEF->setLetters( 'D', 'E', 'F' );
183 lblGHI->setLetters( 'G', 'H', 'I' );
184 lblJKL->setLetters( 'J', 'K', 'L' );
185 lblMNO->setLetters( 'M', 'N', 'O' );
186 lblPQR->setLetters( 'P', 'Q', 'R' );
187 lblSTU->setLetters( 'S', 'T', 'U' );
188 lblVWX->setLetters( 'V', 'W', 'X' );
189 lblYZ->setLetters( 'Y', 'Z', '#' );
190
191 connect(lblABC, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
192 connect(lblDEF, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
193 connect(lblGHI, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
194 connect(lblJKL, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
195 connect(lblMNO, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
196 connect(lblPQR, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
197 connect(lblSTU, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
198 connect(lblVWX, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
199 connect(lblYZ, SIGNAL(selectedLetter(char)), this, SLOT(newLetter(char)));
200 connect(lblABC, SIGNAL(clearAll()), this, SLOT(clear()));
201 connect(lblDEF, SIGNAL(clearAll()), this, SLOT(clear()));
202 connect(lblGHI, SIGNAL(clearAll()), this, SLOT(clear()));
203 connect(lblJKL, SIGNAL(clearAll()), this, SLOT(clear()));
204 connect(lblMNO, SIGNAL(clearAll()), this, SLOT(clear()));
205 connect(lblPQR, SIGNAL(clearAll()), this, SLOT(clear()));
206 connect(lblSTU, SIGNAL(clearAll()), this, SLOT(clear()));
207 connect(lblVWX, SIGNAL(clearAll()), this, SLOT(clear()));
208 connect(lblYZ, SIGNAL(clearAll()), this, SLOT(clear()));
209
210}
211
212LetterPicker::~LetterPicker()
213{
214}
215
216void LetterPicker::clear()
217{
218 lblABC->clearLetter();
219 lblDEF->clearLetter();
220 lblGHI->clearLetter();
221 lblJKL->clearLetter();
222 lblMNO->clearLetter();
223 lblPQR->clearLetter();
224 lblSTU->clearLetter();
225 lblVWX->clearLetter();
226 lblYZ->clearLetter();
227}
228
229void LetterPicker::newLetter( char letter )
230{
231 qDebug( "LetterPicker::newLetter %c", letter );
232 emit letterClicked( letter );
233
234}
diff --git a/core/pim/addressbook/picker.h b/core/pim/addressbook/picker.h
new file mode 100644
index 0000000..de5bd9d
--- a/dev/null
+++ b/core/pim/addressbook/picker.h
@@ -0,0 +1,65 @@
1/*
2 * Letter Chooser Widget.
3 *
4 * (c) 2002 Mike Crawford
5 *
6 * This file is FREE SOFTWARE covered under the GUN General Public License.
7 *
8 *
9*/
10#ifndef PICKER_H
11#define PICKER_H
12
13#include <qlabel.h>
14#include <qframe.h>
15#include <qevent.h>
16
17class PickerLabel: public QLabel {
18Q_OBJECT
19 public:
20 PickerLabel( QWidget *parent = 0, const char *name = 0 );
21 ~PickerLabel();
22
23 void setLetters( char ch1, char ch2, char ch3 );
24 void clearLetter();
25
26 signals:
27
28 void selectedLetter( char );
29 void clearAll();
30
31 protected:
32
33 void mouseReleaseEvent( QMouseEvent *e );
34
35 private:
36
37 int currentLetter;
38 static char lastLetter;
39 char letter1, letter2, letter3;
40
41 private slots:
42
43 void emitClearSignal();
44
45};
46class LetterPicker: public QFrame {
47Q_OBJECT
48 public:
49 LetterPicker( QWidget *parent = 0, const char *name = 0 );
50 ~LetterPicker();
51
52 public slots:
53 void clear();
54
55 signals:
56 void letterClicked( char );
57
58 private:
59 PickerLabel *lblABC, *lblDEF, *lblGHI, *lblJKL, *lblMNO, *lblPQR, *lblSTU, *lblVWX, *lblYZ;
60
61 private slots:
62 void newLetter( char letter );
63};
64
65#endif