-rw-r--r-- | core/pim/addressbook/TODO | 8 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.cpp | 30 | ||||
-rw-r--r-- | core/pim/addressbook/addressbook.h | 5 | ||||
-rw-r--r-- | core/pim/addressbook/contacteditor.cpp | 2 | ||||
-rw-r--r-- | core/pim/addressbook/version.h | 2 |
5 files changed, 38 insertions, 9 deletions
diff --git a/core/pim/addressbook/TODO b/core/pim/addressbook/TODO index da9b9c2..a3cffa7 100644 --- a/core/pim/addressbook/TODO +++ b/core/pim/addressbook/TODO | |||
@@ -1,116 +1,112 @@ | |||
1 | Stuff todo until OPIE 1.0 : | 1 | Stuff todo until OPIE 1.0 : |
2 | =========================== | 2 | =========================== |
3 | 3 | ||
4 | Feature requests: | 4 | Feature requests: |
5 | ----------------- | 5 | ----------------- |
6 | - Dial by mobile phone by tapping the number.. | 6 | - Dial by mobile phone by tapping the number.. |
7 | (Maybe using gsmtool. And we may | 7 | (Maybe using gsmtool. And we may |
8 | add a library class for this) | 8 | add a library class for this) |
9 | - dial with dtmfdial in case it's installed and there's no mobile | 9 | - dial with dtmfdial in case it's installed and there's no mobile |
10 | - 3rd column for 2. Contact | 10 | - 3rd column for 2. Contact |
11 | - Implementing additional Views (Phonebook, ...) | 11 | - Implementing additional Views (Phonebook, ...) |
12 | - Birthday & Anniversary Reminder | 12 | - Birthday & Anniversary Reminder |
13 | - Beaming of multiple contacts (current list/ by search or by category) | 13 | - Beaming of multiple contacts (current list/ by search or by category) |
14 | - Configure the letter-picker: lastname/fullname search | 14 | - Configure the letter-picker: lastname/fullname search |
15 | - User center of the joypad to switch back from card to listview ! | 15 | - Optionally put scrollbars left. |
16 | 16 | ||
17 | Known Bugs: | 17 | Known Bugs: |
18 | ----------- | 18 | ----------- |
19 | 19 | ||
20 | Bugs but not in addressbook: | ||
21 | ----------------------------- | ||
22 | - VCARD: If umlaut (äöüß) in address, the parser gets confused.. | ||
23 | |||
24 | |||
25 | Urgent: | 20 | Urgent: |
26 | -------- | 21 | -------- |
27 | - Category is on the wrong position after changing to personal and back to normal | 22 | - Category is on the wrong position after changing to personal and back to normal |
28 | ( Temporarily workaround: Category is never deactivated.. :S ) | 23 | ( Temporarily workaround: Category is never deactivated.. :S ) |
29 | 24 | ||
30 | 25 | ||
31 | Important: | 26 | Important: |
32 | ---------- | 27 | ---------- |
33 | 28 | ||
34 | - "What's this" should be added (Deleyed after Feature Freeze) | 29 | - "What's this" should be added (Deleyed after Feature Freeze) |
35 | 30 | ||
36 | Less important: | 31 | Less important: |
37 | --------------- | 32 | --------------- |
38 | - Reload if contacts were changed externally | 33 | - Reload if contacts were changed externally |
39 | - The picker (alphabetical sort widget) should be | 34 | - The picker (alphabetical sort widget) should be |
40 | placed verticaly or horizontally (configurable) | 35 | placed verticaly or horizontally (configurable) |
41 | - Find a smart solution for activating/deactivating the "send email" event | 36 | - Find a smart solution for activating/deactivating the "send email" event |
42 | - If new contact is added (contacteditor closed): focus (table, card) to | 37 | - If new contact is added (contacteditor closed): focus (table, card) to |
43 | this entry ! | 38 | this entry ! |
44 | - After search (Started with Return): KeyFocus should be on Tabelle | 39 | - After search (Started with Return): KeyFocus should be on Tabelle |
45 | 40 | ||
46 | ContactEditor: | 41 | ContactEditor: |
47 | - Redesign of Contacteditor | 42 | - Redesign of Contacteditor |
48 | 43 | ||
49 | Should be Fixed (not absolute sure, need further validation): | 44 | Should be Fixed (not absolute sure, need further validation): |
50 | ------------------------------------------------------------- | 45 | ------------------------------------------------------------- |
51 | 46 | ||
52 | 47 | ||
53 | Fixed/Ready: | 48 | Fixed/Ready: |
54 | ------- | 49 | ------- |
55 | - Syncing: abtable not reloaded after sync. | 50 | - Syncing: abtable not reloaded after sync. |
56 | - Find widget should be replaced by something like | 51 | - Find widget should be replaced by something like |
57 | qpdf has. | 52 | qpdf has. |
58 | - Adding a configuration dialog | 53 | - Adding a configuration dialog |
59 | - Picker: Activated letter schould be more visible | 54 | - Picker: Activated letter schould be more visible |
60 | - Advanced handling of cursor keys (search..) | 55 | - Advanced handling of cursor keys (search..) |
61 | - Mail-Icon is missing | 56 | - Mail-Icon is missing |
62 | - Use opie-mail insted of qt-mail if possible. | 57 | - Use opie-mail insted of qt-mail if possible. |
63 | - Font menu is invisible using german translation | 58 | - Font menu is invisible using german translation |
64 | - Personal contact editor: Disable categories | 59 | - Personal contact editor: Disable categories |
65 | - "Nonenglish" translation bug has to be fixed. | 60 | - "Nonenglish" translation bug has to be fixed. |
66 | - contacteditor: Birthday, annyversary, ... : Use Dateselector | 61 | - contacteditor: Birthday, annyversary, ... : Use Dateselector |
67 | - The names of the countries are sorted by there english names, only.. | 62 | - The names of the countries are sorted by there english names, only.. |
68 | Even if they are translated.. :S | 63 | Even if they are translated.. :S |
69 | - Cursor keys should work in detail-view (ablabel) | 64 | - Cursor keys should work in detail-view (ablabel) |
70 | -> Ablabel should be removed and Abtable should be increased with | 65 | -> Ablabel should be removed and Abtable should be increased with |
71 | different views (as started by darwin zins).. | 66 | different views (as started by darwin zins).. |
72 | - Use advanced database functions in abtable to decrease | 67 | - Use advanced database functions in abtable to decrease |
73 | memory footprint and to make everything more easy ! | 68 | memory footprint and to make everything more easy ! |
74 | (abtable should store Iterator for selected Category) | 69 | (abtable should store Iterator for selected Category) |
75 | - Abtable: Configure Contact column (internally already available, | 70 | - Abtable: Configure Contact column (internally already available, |
76 | need configuration) | 71 | need configuration) |
77 | - Select of primary contact (see #274 on mantis) | 72 | - Select of primary contact (see #274 on mantis) |
78 | - Category-select does not work completely: "Unfiled" is always in listview .. | 73 | - Category-select does not work completely: "Unfiled" is always in listview .. |
79 | - Return from Contacteditor: Category resettet to all | 74 | - Return from Contacteditor: Category resettet to all |
80 | - Personal Details not working | 75 | - Personal Details not working |
81 | - If category changed, the letterpicker should be resetted | 76 | - If category changed, the letterpicker should be resetted |
82 | - There should be some icons for List and Cardview | 77 | - There should be some icons for List and Cardview |
83 | - If in Cardview and a category change removes all entries: | 78 | - If in Cardview and a category change removes all entries: |
84 | There are already entries in Cardview after up/down | 79 | There are already entries in Cardview after up/down |
85 | - Personal Details: Anniversary zeigt Fantasie-Werte | 80 | - Personal Details: Anniversary zeigt Fantasie-Werte |
86 | - Unfiled shown just in Category "All" and "Unfiled". | 81 | - Unfiled shown just in Category "All" and "Unfiled". |
87 | - After finising search and after Edit: Clear Picker | 82 | - After finising search and after Edit: Clear Picker |
88 | - After Edit: Table position back to edited entry. | 83 | - After Edit: Table position back to edited entry. |
89 | - Optimize Table Update... | 84 | - Optimize Table Update... |
90 | - Change MyDialog to Config | 85 | - Change MyDialog to Config |
91 | - Store position and state of toolbar | 86 | - Store position and state of toolbar |
92 | - Searchwidget closed: Selected user is jumping | 87 | - Searchwidget closed: Selected user is jumping |
93 | - Wenn suchen beendet, dann dauert das Tabellenupdate (was überhaupt überflüssig ist) | 88 | - Wenn suchen beendet, dann dauert das Tabellenupdate (was überhaupt überflüssig ist) |
94 | zu lange.. | 89 | zu lange.. |
95 | - VCARD: Import of Anniversary does not work correctly (currently disabled) | 90 | - VCARD: Import of Anniversary does not work correctly (currently disabled) |
96 | - Name order selected in "contacteditor" not used in list view. | 91 | - Name order selected in "contacteditor" not used in list view. |
97 | - OK-Key does not switch from Detailview (ablable) to Listview | 92 | - OK-Key does not switch from Detailview (ablable) to Listview |
98 | - Receiving of beams should open a dialog | 93 | - Receiving of beams should open a dialog |
99 | - Fix start of opie-mail | 94 | - Fix start of opie-mail |
100 | - Implement Button Pics | 95 | - Implement Button Pics |
101 | - Add a dialog to accept and optionally edit received contacts by IRDA. | 96 | - Add a dialog to accept and optionally edit received contacts by IRDA. |
102 | - Language not English (tested with german opie-translation): | 97 | - Language not English (tested with german opie-translation): |
103 | 1. Configure nicht übersetzt (alles leer). | 98 | 1. Configure nicht übersetzt (alles leer). |
104 | 2. Contacteditor nur teilweise übersetzt. | 99 | 2. Contacteditor nur teilweise übersetzt. |
105 | 3. Kategorie-Picker geht nicht. | 100 | 3. Kategorie-Picker geht nicht. |
106 | - Plugin for Today for Birthdays and Anniversaries | 101 | - Plugin for Today for Birthdays and Anniversaries |
107 | - Implement a picker/combo for the default email. | 102 | - Implement a picker/combo for the default email. |
108 | - Overview window cleanup needed.. | 103 | - Overview window cleanup needed.. |
109 | - Store last settings of combo-boxes | 104 | - Store last settings of combo-boxes |
110 | - Personal and Business Web-page is not editable | 105 | - Personal and Business Web-page is not editable |
111 | - Default Email-button: A lot of problems: | 106 | - Default Email-button: A lot of problems: |
112 | If on second tab: The combo chooser is on the top left of the screen ! :( | 107 | If on second tab: The combo chooser is on the top left of the screen ! :( |
113 | - Default Email-Button: Sometimes not hiding the textfields completely | 108 | - Default Email-Button: Sometimes not hiding the textfields completely |
114 | - Fix handling of 3 Firstnames | 109 | - Fix handling of 3 Firstnames |
115 | - Cursor-UP/Down: Should additionally scroll cardview if it is too large | 110 | - Cursor-UP/Down: Should additionally scroll cardview if it is too large |
116 | (behaviour should be selectable by configuration) | 111 | (behaviour should be selectable by configuration) |
112 | - User center of the joypad to switch back from card to listview ! | ||
diff --git a/core/pim/addressbook/addressbook.cpp b/core/pim/addressbook/addressbook.cpp index a5bf19b..89a3312 100644 --- a/core/pim/addressbook/addressbook.cpp +++ b/core/pim/addressbook/addressbook.cpp | |||
@@ -164,96 +164,102 @@ AddressbookWindow::AddressbookWindow( QWidget *parent, const char *name, | |||
164 | a->addTo( listTools ); | 164 | a->addTo( listTools ); |
165 | 165 | ||
166 | // Much better search widget, taken from QTReader.. (se) | 166 | // Much better search widget, taken from QTReader.. (se) |
167 | searchBar = new OFloatBar( "Search", this, QMainWindow::Top, TRUE ); | 167 | searchBar = new OFloatBar( "Search", this, QMainWindow::Top, TRUE ); |
168 | searchBar->setHorizontalStretchable( TRUE ); | 168 | searchBar->setHorizontalStretchable( TRUE ); |
169 | searchBar->hide(); | 169 | searchBar->hide(); |
170 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); | 170 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); |
171 | 171 | ||
172 | // QFont f("unifont", 16 /*, QFont::Bold*/); | 172 | // QFont f("unifont", 16 /*, QFont::Bold*/); |
173 | // searchEdit->setFont( f ); | 173 | // searchEdit->setFont( f ); |
174 | 174 | ||
175 | searchBar->setStretchableWidget( searchEdit ); | 175 | searchBar->setStretchableWidget( searchEdit ); |
176 | connect( searchEdit, SIGNAL( returnPressed( ) ), | 176 | connect( searchEdit, SIGNAL( returnPressed( ) ), |
177 | this, SLOT( slotFind( ) ) ); | 177 | this, SLOT( slotFind( ) ) ); |
178 | 178 | ||
179 | a = new QAction( tr( "Start Search" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); | 179 | a = new QAction( tr( "Start Search" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); |
180 | connect( a, SIGNAL( activated() ), this, SLOT( slotFind() ) ); | 180 | connect( a, SIGNAL( activated() ), this, SLOT( slotFind() ) ); |
181 | a->addTo( searchBar ); | 181 | a->addTo( searchBar ); |
182 | 182 | ||
183 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 183 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); |
184 | connect( a, SIGNAL( activated() ), this, SLOT( slotFindClose() ) ); | 184 | connect( a, SIGNAL( activated() ), this, SLOT( slotFindClose() ) ); |
185 | a->addTo( searchBar ); | 185 | a->addTo( searchBar ); |
186 | 186 | ||
187 | a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "addressbook/sendmail" ), | 187 | a = new QAction( tr( "Write Mail To" ), Resource::loadPixmap( "addressbook/sendmail" ), |
188 | QString::null, 0, this, 0 ); | 188 | QString::null, 0, this, 0 ); |
189 | //a->setEnabled( FALSE ); we got support for it now :) zecke | 189 | //a->setEnabled( FALSE ); we got support for it now :) zecke |
190 | actionMail = a; | 190 | actionMail = a; |
191 | connect( a, SIGNAL( activated() ), this, SLOT( writeMail() ) ); | 191 | connect( a, SIGNAL( activated() ), this, SLOT( writeMail() ) ); |
192 | a->addTo( edit ); | 192 | a->addTo( edit ); |
193 | a->addTo( listTools ); | 193 | a->addTo( listTools ); |
194 | 194 | ||
195 | if ( Ir::supported() ) { | 195 | if ( Ir::supported() ) { |
196 | a = new QAction( tr ("Beam Entry" ), Resource::loadPixmap( "beam" ), QString::null, | 196 | a = new QAction( tr ("Beam Entry" ), Resource::loadPixmap( "beam" ), QString::null, |
197 | 0, this, 0 ); | 197 | 0, this, 0 ); |
198 | actionBeam = a; | 198 | actionBeam = a; |
199 | connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) ); | 199 | connect( a, SIGNAL( activated() ), this, SLOT( slotBeam() ) ); |
200 | a->addTo( edit ); | 200 | a->addTo( edit ); |
201 | a->addTo( listTools ); | 201 | a->addTo( listTools ); |
202 | } | 202 | } |
203 | 203 | ||
204 | edit->insertSeparator(); | 204 | edit->insertSeparator(); |
205 | 205 | ||
206 | a = new QAction( tr("Import vCard"), Resource::loadPixmap( "addressbook/fileimport"), QString::null, | 206 | a = new QAction( tr("Import vCard"), Resource::loadPixmap( "addressbook/fileimport"), QString::null, |
207 | 0, this, 0); | 207 | 0, this, 0); |
208 | actionPersonal = a; | 208 | actionPersonal = a; |
209 | connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) ); | 209 | connect( a, SIGNAL( activated() ), this, SLOT( importvCard() ) ); |
210 | a->addTo( edit ); | 210 | a->addTo( edit ); |
211 | 211 | ||
212 | a = new QAction( tr("Export vCard"), Resource::loadPixmap( "addressbook/fileexport"), QString::null, | ||
213 | 0, this, 0); | ||
214 | actionPersonal = a; | ||
215 | connect( a, SIGNAL( activated() ), this, SLOT( exportvCard() ) ); | ||
216 | a->addTo( edit ); | ||
217 | |||
212 | edit->insertSeparator(); | 218 | edit->insertSeparator(); |
213 | 219 | ||
214 | a = new QAction( tr("My Personal Details"), Resource::loadPixmap( "addressbook/identity" ), | 220 | a = new QAction( tr("My Personal Details"), Resource::loadPixmap( "addressbook/identity" ), |
215 | QString::null, 0, this, 0 , TRUE ); | 221 | QString::null, 0, this, 0 , TRUE ); |
216 | actionPersonal = a; | 222 | actionPersonal = a; |
217 | connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) ); | 223 | connect( a, SIGNAL( activated() ), this, SLOT( slotPersonalView() ) ); |
218 | a->addTo( edit ); | 224 | a->addTo( edit ); |
219 | 225 | ||
220 | 226 | ||
221 | #ifdef __DEBUG_RELEASE | 227 | #ifdef __DEBUG_RELEASE |
222 | // Remove this function for public Release ! This is only | 228 | // Remove this function for public Release ! This is only |
223 | // for debug purposes .. | 229 | // for debug purposes .. |
224 | a = new QAction( tr( "Save all Data"), QString::null, 0, 0 ); | 230 | a = new QAction( tr( "Save all Data"), QString::null, 0, 0 ); |
225 | connect( a, SIGNAL( activated() ), this , SLOT( slotSave() ) ); | 231 | connect( a, SIGNAL( activated() ), this , SLOT( slotSave() ) ); |
226 | a->addTo( edit ); | 232 | a->addTo( edit ); |
227 | #endif | 233 | #endif |
228 | a = new QAction( tr( "Config" ), Resource::loadPixmap( "SettingsIcon" ), QString::null, | 234 | a = new QAction( tr( "Config" ), Resource::loadPixmap( "SettingsIcon" ), QString::null, |
229 | 0, this, 0 ); | 235 | 0, this, 0 ); |
230 | connect( a, SIGNAL( activated() ), this, SLOT( slotConfig() ) ); | 236 | connect( a, SIGNAL( activated() ), this, SLOT( slotConfig() ) ); |
231 | a->addTo( edit ); | 237 | a->addTo( edit ); |
232 | 238 | ||
233 | // Create Views | 239 | // Create Views |
234 | listContainer = new QWidget( this ); | 240 | listContainer = new QWidget( this ); |
235 | QVBoxLayout *vb = new QVBoxLayout( listContainer ); | 241 | QVBoxLayout *vb = new QVBoxLayout( listContainer ); |
236 | 242 | ||
237 | m_abView = new AbView( listContainer, m_config.orderList() ); | 243 | m_abView = new AbView( listContainer, m_config.orderList() ); |
238 | vb->addWidget( m_abView ); | 244 | vb->addWidget( m_abView ); |
239 | // abList->setHScrollBarMode( QScrollView::AlwaysOff ); | 245 | // abList->setHScrollBarMode( QScrollView::AlwaysOff ); |
240 | connect( m_abView, SIGNAL( signalViewSwitched ( int ) ), | 246 | connect( m_abView, SIGNAL( signalViewSwitched ( int ) ), |
241 | this, SLOT( slotViewSwitched( int ) ) ); | 247 | this, SLOT( slotViewSwitched( int ) ) ); |
242 | 248 | ||
243 | 249 | ||
244 | QObject::connect( m_abView, SIGNAL(signalNotFound()), this, SLOT(slotNotFound()) ); | 250 | QObject::connect( m_abView, SIGNAL(signalNotFound()), this, SLOT(slotNotFound()) ); |
245 | 251 | ||
246 | m_abView->load(); | 252 | m_abView->load(); |
247 | 253 | ||
248 | // Letter Picker | 254 | // Letter Picker |
249 | pLabel = new LetterPicker( listContainer ); | 255 | pLabel = new LetterPicker( listContainer ); |
250 | connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char))); | 256 | connect(pLabel, SIGNAL(letterClicked(char)), this, SLOT(slotSetLetter(char))); |
251 | connect(m_abView, SIGNAL( signalClearLetterPicker() ), pLabel, SLOT( clear() ) ); | 257 | connect(m_abView, SIGNAL( signalClearLetterPicker() ), pLabel, SLOT( clear() ) ); |
252 | 258 | ||
253 | vb->addWidget( pLabel ); | 259 | vb->addWidget( pLabel ); |
254 | 260 | ||
255 | // All Categories into view-menu.. | 261 | // All Categories into view-menu.. |
256 | populateCategories(); | 262 | populateCategories(); |
257 | 263 | ||
258 | // Fontsize | 264 | // Fontsize |
259 | defaultFont = new QFont( m_abView->font() ); | 265 | defaultFont = new QFont( m_abView->font() ); |
@@ -286,96 +292,120 @@ void AddressbookWindow::slotConfig() | |||
286 | } | 292 | } |
287 | 293 | ||
288 | delete dlg; | 294 | delete dlg; |
289 | } | 295 | } |
290 | 296 | ||
291 | 297 | ||
292 | void AddressbookWindow::slotSetFont( int size ) | 298 | void AddressbookWindow::slotSetFont( int size ) |
293 | { | 299 | { |
294 | qWarning("void AddressbookWindow::slotSetFont( %d )", size); | 300 | qWarning("void AddressbookWindow::slotSetFont( %d )", size); |
295 | 301 | ||
296 | if (size > 2 || size < 0) | 302 | if (size > 2 || size < 0) |
297 | size = 1; | 303 | size = 1; |
298 | 304 | ||
299 | m_config.setFontSize( size ); | 305 | m_config.setFontSize( size ); |
300 | 306 | ||
301 | QFont *currentFont; | 307 | QFont *currentFont; |
302 | 308 | ||
303 | switch (size) { | 309 | switch (size) { |
304 | case 0: | 310 | case 0: |
305 | m_abView->setFont( QFont( defaultFont->family(), defaultFont->pointSize() - 2 ) ); | 311 | m_abView->setFont( QFont( defaultFont->family(), defaultFont->pointSize() - 2 ) ); |
306 | currentFont = new QFont (m_abView->font()); | 312 | currentFont = new QFont (m_abView->font()); |
307 | // abList->resizeRows(currentFont->pixelSize() + 7); :SX | 313 | // abList->resizeRows(currentFont->pixelSize() + 7); :SX |
308 | // abList->resizeRows(); | 314 | // abList->resizeRows(); |
309 | break; | 315 | break; |
310 | case 1: | 316 | case 1: |
311 | m_abView->setFont( *defaultFont ); | 317 | m_abView->setFont( *defaultFont ); |
312 | currentFont = new QFont (m_abView->font()); | 318 | currentFont = new QFont (m_abView->font()); |
313 | // // abList->resizeRows(currentFont->pixelSize() + 7); | 319 | // // abList->resizeRows(currentFont->pixelSize() + 7); |
314 | // abList->resizeRows(); | 320 | // abList->resizeRows(); |
315 | break; | 321 | break; |
316 | case 2: | 322 | case 2: |
317 | m_abView->setFont( QFont( defaultFont->family(), defaultFont->pointSize() + 2 ) ); | 323 | m_abView->setFont( QFont( defaultFont->family(), defaultFont->pointSize() + 2 ) ); |
318 | currentFont = new QFont (m_abView->font()); | 324 | currentFont = new QFont (m_abView->font()); |
319 | // //abList->resizeRows(currentFont->pixelSize() + 7); | 325 | // //abList->resizeRows(currentFont->pixelSize() + 7); |
320 | // abList->resizeRows(); | 326 | // abList->resizeRows(); |
321 | break; | 327 | break; |
322 | } | 328 | } |
323 | } | 329 | } |
324 | 330 | ||
325 | 331 | ||
326 | 332 | ||
327 | void AddressbookWindow::importvCard() { | 333 | void AddressbookWindow::importvCard() { |
328 | QString str = OFileDialog::getOpenFileName( 1,"/");//,"", "*", this ); | 334 | QString str = OFileDialog::getOpenFileName( 1,"/");//,"", "*", this ); |
329 | if(!str.isEmpty() ){ | 335 | if(!str.isEmpty() ){ |
330 | setDocument((const QString&) str ); | 336 | setDocument((const QString&) str ); |
331 | } | 337 | } |
332 | 338 | ||
333 | } | 339 | } |
340 | void AddressbookWindow::exportvCard() | ||
341 | { | ||
342 | qWarning(" void AddressbookWindow::exportvCard()"); | ||
343 | QString filename = OFileDialog::getSaveFileName( 1,"/home/"); //,"", "*", this ); | ||
344 | if( !filename.isEmpty() && ( filename[filename.length()-1] != '/' ) ){ | ||
345 | qWarning(" Save to file %s, (%d)", filename.latin1(), filename.length()-1 ); | ||
346 | OContact curCont = m_abView->currentEntry(); | ||
347 | if ( !curCont.isEmpty() ){ | ||
348 | OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, | ||
349 | filename ); | ||
350 | OContactAccess* access = new OContactAccess ( "addressbook_exp", QString::null , vcard_backend, true ); | ||
351 | if ( access ){ | ||
352 | access->add( curCont ); | ||
353 | access->save(); | ||
354 | } | ||
355 | delete access; | ||
356 | }else | ||
357 | QMessageBox::critical( 0, "Export VCard", | ||
358 | QString( tr( "You have to select a contact !") ) ); | ||
359 | |||
360 | }else | ||
361 | QMessageBox::critical( 0, "Export VCard", | ||
362 | QString( tr( "You have to set a filename !") ) ); | ||
363 | } | ||
334 | 364 | ||
335 | void AddressbookWindow::setDocument( const QString &filename ) | 365 | void AddressbookWindow::setDocument( const QString &filename ) |
336 | { | 366 | { |
337 | qWarning( "void AddressbookWindow::setDocument( %s )", filename.latin1() ); | 367 | qWarning( "void AddressbookWindow::setDocument( %s )", filename.latin1() ); |
338 | 368 | ||
339 | if ( filename.find(".vcf") != int(filename.length()) - 4 ){ | 369 | if ( filename.find(".vcf") != int(filename.length()) - 4 ){ |
340 | 370 | ||
341 | 371 | ||
342 | 372 | ||
343 | switch( QMessageBox::information( this, tr ( "Right file type ?" ), | 373 | switch( QMessageBox::information( this, tr ( "Right file type ?" ), |
344 | tr( "The selected file \n does not end with \".vcf\".\n Do you really want to open it?" ), | 374 | tr( "The selected file \n does not end with \".vcf\".\n Do you really want to open it?" ), |
345 | tr( "&Yes" ), tr( "&No" ), QString::null, | 375 | tr( "&Yes" ), tr( "&No" ), QString::null, |
346 | 0, // Enter == button 0 | 376 | 0, // Enter == button 0 |
347 | 2 ) ) { // Escape == button 2 | 377 | 2 ) ) { // Escape == button 2 |
348 | case 0: | 378 | case 0: |
349 | qWarning("YES clicked"); | 379 | qWarning("YES clicked"); |
350 | break; | 380 | break; |
351 | case 1: | 381 | case 1: |
352 | qWarning("NO clicked"); | 382 | qWarning("NO clicked"); |
353 | return; | 383 | return; |
354 | break; | 384 | break; |
355 | } | 385 | } |
356 | } | 386 | } |
357 | 387 | ||
358 | OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, | 388 | OContactAccessBackend* vcard_backend = new OContactAccessBackend_VCard( QString::null, |
359 | filename ); | 389 | filename ); |
360 | OContactAccess* access = new OContactAccess ( "addressbook", QString::null , vcard_backend, true ); | 390 | OContactAccess* access = new OContactAccess ( "addressbook", QString::null , vcard_backend, true ); |
361 | OContactAccess::List allList = access->allRecords(); | 391 | OContactAccess::List allList = access->allRecords(); |
362 | qWarning( "Found number of contacts in File: %d", allList.count() ); | 392 | qWarning( "Found number of contacts in File: %d", allList.count() ); |
363 | 393 | ||
364 | if ( !allList.count() ) { | 394 | if ( !allList.count() ) { |
365 | QMessageBox::information( this, "Import VCard", | 395 | QMessageBox::information( this, "Import VCard", |
366 | "It was impossible to import\nthe VCard.\n" | 396 | "It was impossible to import\nthe VCard.\n" |
367 | "The VCard may be corrupted!" ); | 397 | "The VCard may be corrupted!" ); |
368 | } | 398 | } |
369 | 399 | ||
370 | bool doAsk = true; | 400 | bool doAsk = true; |
371 | OContactAccess::List::Iterator it; | 401 | OContactAccess::List::Iterator it; |
372 | for ( it = allList.begin(); it != allList.end(); ++it ){ | 402 | for ( it = allList.begin(); it != allList.end(); ++it ){ |
373 | qWarning("Adding Contact from: %s", (*it).fullName().latin1() ); | 403 | qWarning("Adding Contact from: %s", (*it).fullName().latin1() ); |
374 | if ( doAsk ){ | 404 | if ( doAsk ){ |
375 | switch( QMessageBox::information( this, tr ( "Add Contact?" ), | 405 | switch( QMessageBox::information( this, tr ( "Add Contact?" ), |
376 | tr( "Do you really want add contact for \n%1?" ) | 406 | tr( "Do you really want add contact for \n%1?" ) |
377 | .arg( (*it).fullName().latin1() ), | 407 | .arg( (*it).fullName().latin1() ), |
378 | tr( "&Yes" ), tr( "&No" ), tr( "&All Yes"), | 408 | tr( "&Yes" ), tr( "&No" ), tr( "&All Yes"), |
379 | 0, // Enter == button 0 | 409 | 0, // Enter == button 0 |
380 | 2 ) ) { // Escape == button 2 | 410 | 2 ) ) { // Escape == button 2 |
381 | case 0: | 411 | case 0: |
diff --git a/core/pim/addressbook/addressbook.h b/core/pim/addressbook/addressbook.h index 69fe2f8..f7a560a 100644 --- a/core/pim/addressbook/addressbook.h +++ b/core/pim/addressbook/addressbook.h | |||
@@ -1,120 +1,121 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qt Palmtop Environment. | 4 | ** This file is part of Qt Palmtop Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | #ifndef Addressbook_H | 20 | #ifndef Addressbook_H |
21 | #define Addressbook_H | 21 | #define Addressbook_H |
22 | 22 | ||
23 | // Remove this for OPIE releae 1.0 ! | 23 | // Remove this for OPIE releae 1.0 ! |
24 | #define __DEBUG_RELEASE | 24 | // #define __DEBUG_RELEASE |
25 | 25 | ||
26 | #include <qmainwindow.h> | 26 | #include <qmainwindow.h> |
27 | #include <qvaluelist.h> | 27 | #include <qvaluelist.h> |
28 | #include <qstringlist.h> | 28 | #include <qstringlist.h> |
29 | #include <qlineedit.h> | 29 | #include <qlineedit.h> |
30 | #include "ofloatbar.h" | 30 | #include "ofloatbar.h" |
31 | #include "abview.h" | 31 | #include "abview.h" |
32 | #include "abconfig.h" | 32 | #include "abconfig.h" |
33 | 33 | ||
34 | class ContactEditor; | 34 | class ContactEditor; |
35 | class AbLabel; | 35 | class AbLabel; |
36 | class AbTable; | 36 | class AbTable; |
37 | class QPEToolBar; | 37 | class QPEToolBar; |
38 | class QPopupMenu; | 38 | class QPopupMenu; |
39 | class QToolButton; | 39 | class QToolButton; |
40 | class QDialog; | 40 | class QDialog; |
41 | class Ir; | 41 | class Ir; |
42 | class QAction; | 42 | class QAction; |
43 | class LetterPicker; | 43 | class LetterPicker; |
44 | 44 | ||
45 | class AddressbookWindow: public QMainWindow | 45 | class AddressbookWindow: public QMainWindow |
46 | { | 46 | { |
47 | Q_OBJECT | 47 | Q_OBJECT |
48 | public: | 48 | public: |
49 | enum EntryMode { NewEntry=0, EditEntry }; | 49 | enum EntryMode { NewEntry=0, EditEntry }; |
50 | 50 | ||
51 | AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); | 51 | AddressbookWindow( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); |
52 | ~AddressbookWindow(); | 52 | ~AddressbookWindow(); |
53 | 53 | ||
54 | protected: | 54 | protected: |
55 | void resizeEvent( QResizeEvent * e ); | 55 | void resizeEvent( QResizeEvent * e ); |
56 | 56 | ||
57 | void editPersonal(); | 57 | void editPersonal(); |
58 | void editEntry( EntryMode ); | 58 | void editEntry( EntryMode ); |
59 | void closeEvent( QCloseEvent *e ); | 59 | void closeEvent( QCloseEvent *e ); |
60 | bool save(); | 60 | bool save(); |
61 | 61 | ||
62 | public slots: | 62 | public slots: |
63 | void flush(); | 63 | void flush(); |
64 | void reload(); | 64 | void reload(); |
65 | void appMessage(const QCString &, const QByteArray &); | 65 | void appMessage(const QCString &, const QByteArray &); |
66 | void setDocument( const QString & ); | 66 | void setDocument( const QString & ); |
67 | #ifdef __DEBUG_RELEASE | 67 | #ifdef __DEBUG_RELEASE |
68 | void slotSave(); | 68 | // void slotSave(); |
69 | #endif | 69 | #endif |
70 | 70 | ||
71 | private slots: | 71 | private slots: |
72 | void importvCard(); | 72 | void importvCard(); |
73 | void exportvCard(); | ||
73 | void slotListNew(); | 74 | void slotListNew(); |
74 | /* void slotListView(); */ | 75 | /* void slotListView(); */ |
75 | void slotListDelete(); | 76 | void slotListDelete(); |
76 | void slotViewBack(); | 77 | void slotViewBack(); |
77 | void slotViewEdit(); | 78 | void slotViewEdit(); |
78 | void slotPersonalView(); | 79 | void slotPersonalView(); |
79 | void listIsEmpty( bool ); | 80 | void listIsEmpty( bool ); |
80 | /* void slotSettings(); */ | 81 | /* void slotSettings(); */ |
81 | void writeMail(); | 82 | void writeMail(); |
82 | void slotBeam(); | 83 | void slotBeam(); |
83 | void beamDone( Ir * ); | 84 | void beamDone( Ir * ); |
84 | void slotSetCategory( int ); | 85 | void slotSetCategory( int ); |
85 | void slotSetLetter( char ); | 86 | void slotSetLetter( char ); |
86 | void slotUpdateToolbar(); | 87 | void slotUpdateToolbar(); |
87 | void slotSetFont(int); | 88 | void slotSetFont(int); |
88 | 89 | ||
89 | void slotFindOpen(); | 90 | void slotFindOpen(); |
90 | void slotFindClose(); | 91 | void slotFindClose(); |
91 | void slotFind(); | 92 | void slotFind(); |
92 | void slotNotFound(); | 93 | void slotNotFound(); |
93 | void slotWrapAround(); | 94 | void slotWrapAround(); |
94 | 95 | ||
95 | void slotViewSwitched( int ); | 96 | void slotViewSwitched( int ); |
96 | void slotListView(); | 97 | void slotListView(); |
97 | void slotCardView(); | 98 | void slotCardView(); |
98 | 99 | ||
99 | void slotConfig(); | 100 | void slotConfig(); |
100 | 101 | ||
101 | private: | 102 | private: |
102 | void populateCategories(); | 103 | void populateCategories(); |
103 | 104 | ||
104 | QPopupMenu *catMenu; | 105 | QPopupMenu *catMenu; |
105 | QPEToolBar *listTools; | 106 | QPEToolBar *listTools; |
106 | QToolButton *deleteButton; | 107 | QToolButton *deleteButton; |
107 | enum Panes { paneList=0, paneView, paneEdit }; | 108 | enum Panes { paneList=0, paneView, paneEdit }; |
108 | ContactEditor *abEditor; | 109 | ContactEditor *abEditor; |
109 | LetterPicker *pLabel; | 110 | LetterPicker *pLabel; |
110 | AbView* m_abView; | 111 | AbView* m_abView; |
111 | QWidget *listContainer; | 112 | QWidget *listContainer; |
112 | 113 | ||
113 | // Searching stuff | 114 | // Searching stuff |
114 | OFloatBar* searchBar; | 115 | OFloatBar* searchBar; |
115 | QLineEdit* searchEdit; | 116 | QLineEdit* searchEdit; |
116 | 117 | ||
117 | QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, *actionPersonal, *actionMail; | 118 | QAction *actionNew, *actionEdit, *actionTrash, *actionFind, *actionBeam, *actionPersonal, *actionMail; |
118 | 119 | ||
119 | int viewMargin; | 120 | int viewMargin; |
120 | 121 | ||
diff --git a/core/pim/addressbook/contacteditor.cpp b/core/pim/addressbook/contacteditor.cpp index df97b85..f33ee0a 100644 --- a/core/pim/addressbook/contacteditor.cpp +++ b/core/pim/addressbook/contacteditor.cpp | |||
@@ -1211,97 +1211,99 @@ QString ContactEditor::parseName( const QString fullName, int type ) { | |||
1211 | 1211 | ||
1212 | } | 1212 | } |
1213 | return QString::null; | 1213 | return QString::null; |
1214 | } | 1214 | } |
1215 | 1215 | ||
1216 | void ContactEditor::cleanupFields() { | 1216 | void ContactEditor::cleanupFields() { |
1217 | QStringList::Iterator it = slChooserValues.begin(); | 1217 | QStringList::Iterator it = slChooserValues.begin(); |
1218 | 1218 | ||
1219 | for ( int i = 0; it != slChooserValues.end(); i++, ++it ) { | 1219 | for ( int i = 0; it != slChooserValues.end(); i++, ++it ) { |
1220 | (*it) = ""; | 1220 | (*it) = ""; |
1221 | } | 1221 | } |
1222 | 1222 | ||
1223 | for ( int i = 0; i < 7; i++ ) { | 1223 | for ( int i = 0; i < 7; i++ ) { |
1224 | slHomeAddress[i] = ""; | 1224 | slHomeAddress[i] = ""; |
1225 | slBusinessAddress[i] = ""; | 1225 | slBusinessAddress[i] = ""; |
1226 | } | 1226 | } |
1227 | 1227 | ||
1228 | QListIterator<QLineEdit> itLV( listValue ); | 1228 | QListIterator<QLineEdit> itLV( listValue ); |
1229 | for ( ; itLV.current(); ++itLV ) { | 1229 | for ( ; itLV.current(); ++itLV ) { |
1230 | (*itLV)->setText( "" ); | 1230 | (*itLV)->setText( "" ); |
1231 | } | 1231 | } |
1232 | 1232 | ||
1233 | txtFirstName->setText(""); | 1233 | txtFirstName->setText(""); |
1234 | txtMiddleName->setText(""); | 1234 | txtMiddleName->setText(""); |
1235 | txtLastName->setText(""); | 1235 | txtLastName->setText(""); |
1236 | txtSuffix->setText(""); | 1236 | txtSuffix->setText(""); |
1237 | txtNote->setText(""); | 1237 | txtNote->setText(""); |
1238 | txtFullName->setText(""); | 1238 | txtFullName->setText(""); |
1239 | txtJobTitle->setText(""); | 1239 | txtJobTitle->setText(""); |
1240 | txtOrganization->setText(""); | 1240 | txtOrganization->setText(""); |
1241 | txtChooserField1->setText(""); | 1241 | txtChooserField1->setText(""); |
1242 | txtChooserField2->setText(""); | 1242 | txtChooserField2->setText(""); |
1243 | txtChooserField3->setText(""); | 1243 | txtChooserField3->setText(""); |
1244 | txtAddress->setText(""); | 1244 | txtAddress->setText(""); |
1245 | txtCity->setText(""); | 1245 | txtCity->setText(""); |
1246 | txtState->setText(""); | 1246 | txtState->setText(""); |
1247 | txtZip->setText(""); | 1247 | txtZip->setText(""); |
1248 | QLineEdit *txtTmp = cmbCountry->lineEdit(); | 1248 | QLineEdit *txtTmp = cmbCountry->lineEdit(); |
1249 | txtTmp->setText(""); | 1249 | txtTmp->setText(""); |
1250 | txtTmp = cmbFileAs->lineEdit(); | 1250 | txtTmp = cmbFileAs->lineEdit(); |
1251 | txtTmp->setText(""); | 1251 | txtTmp->setText(""); |
1252 | 1252 | ||
1253 | } | 1253 | } |
1254 | 1254 | ||
1255 | void ContactEditor::setEntry( const OContact &entry ) { | 1255 | void ContactEditor::setEntry( const OContact &entry ) { |
1256 | 1256 | ||
1257 | initializing = true; | 1257 | initializing = true; |
1258 | 1258 | ||
1259 | // Cleanup and activate the general Page .. | ||
1259 | cleanupFields(); | 1260 | cleanupFields(); |
1261 | tabMain->setCurrentPage( 0 ); | ||
1260 | 1262 | ||
1261 | ent = entry; | 1263 | ent = entry; |
1262 | 1264 | ||
1263 | emails = QStringList(ent.emailList()); | 1265 | emails = QStringList(ent.emailList()); |
1264 | defaultEmail = ent.defaultEmail(); | 1266 | defaultEmail = ent.defaultEmail(); |
1265 | if (defaultEmail.isEmpty()) defaultEmail = emails[0]; | 1267 | if (defaultEmail.isEmpty()) defaultEmail = emails[0]; |
1266 | qDebug("default email=%s",defaultEmail.latin1()); | 1268 | qDebug("default email=%s",defaultEmail.latin1()); |
1267 | 1269 | ||
1268 | txtFirstName->setText( ent.firstName() ); | 1270 | txtFirstName->setText( ent.firstName() ); |
1269 | txtMiddleName->setText( ent.middleName() ); | 1271 | txtMiddleName->setText( ent.middleName() ); |
1270 | txtLastName->setText( ent.lastName() ); | 1272 | txtLastName->setText( ent.lastName() ); |
1271 | txtSuffix->setText( ent.suffix() ); | 1273 | txtSuffix->setText( ent.suffix() ); |
1272 | 1274 | ||
1273 | // QString *tmpString = new QString; | 1275 | // QString *tmpString = new QString; |
1274 | // *tmpString = ent.firstName() + " " + ent.middleName() + | 1276 | // *tmpString = ent.firstName() + " " + ent.middleName() + |
1275 | // + " " + ent.lastName() + " " + ent.suffix(); | 1277 | // + " " + ent.lastName() + " " + ent.suffix(); |
1276 | //txtFullName->setText( tmpString->simplifyWhiteSpace() ); | 1278 | //txtFullName->setText( tmpString->simplifyWhiteSpace() ); |
1277 | 1279 | ||
1278 | if ( !ent.isEmpty() ){ | 1280 | if ( !ent.isEmpty() ){ |
1279 | // Lastnames with multiple words need to be protected by a comma ! | 1281 | // Lastnames with multiple words need to be protected by a comma ! |
1280 | if ( ent.lastName().contains( ' ', TRUE ) ) | 1282 | if ( ent.lastName().contains( ' ', TRUE ) ) |
1281 | txtFullName->setText( ent.lastName() + ", " + ent.firstName() + " " + ent.middleName() ); | 1283 | txtFullName->setText( ent.lastName() + ", " + ent.firstName() + " " + ent.middleName() ); |
1282 | else | 1284 | else |
1283 | txtFullName->setText( ent.firstName() + " " + ent.middleName() + " " + ent.lastName() ); | 1285 | txtFullName->setText( ent.firstName() + " " + ent.middleName() + " " + ent.lastName() ); |
1284 | } | 1286 | } |
1285 | 1287 | ||
1286 | cmbFileAs->setEditText( ent.fileAs() ); | 1288 | cmbFileAs->setEditText( ent.fileAs() ); |
1287 | 1289 | ||
1288 | //if (hasTitle) | 1290 | //if (hasTitle) |
1289 | txtJobTitle->setText( ent.jobTitle() ); | 1291 | txtJobTitle->setText( ent.jobTitle() ); |
1290 | 1292 | ||
1291 | //if (hasCompany) | 1293 | //if (hasCompany) |
1292 | txtOrganization->setText( ent.company() ); | 1294 | txtOrganization->setText( ent.company() ); |
1293 | 1295 | ||
1294 | //if (hasNotes) | 1296 | //if (hasNotes) |
1295 | txtNote->setText( ent.notes() ); | 1297 | txtNote->setText( ent.notes() ); |
1296 | 1298 | ||
1297 | //if (hasStreet) { | 1299 | //if (hasStreet) { |
1298 | slHomeAddress[0] = ent.homeStreet(); | 1300 | slHomeAddress[0] = ent.homeStreet(); |
1299 | slBusinessAddress[0] = ent.businessStreet(); | 1301 | slBusinessAddress[0] = ent.businessStreet(); |
1300 | //} | 1302 | //} |
1301 | 1303 | ||
1302 | //if (hasCity) { | 1304 | //if (hasCity) { |
1303 | slHomeAddress[3] = ent.homeCity(); | 1305 | slHomeAddress[3] = ent.homeCity(); |
1304 | slBusinessAddress[3] = ent.businessCity(); | 1306 | slBusinessAddress[3] = ent.businessCity(); |
1305 | //} | 1307 | //} |
1306 | 1308 | ||
1307 | //if (hasState) { | 1309 | //if (hasState) { |
diff --git a/core/pim/addressbook/version.h b/core/pim/addressbook/version.h index d590a86..c0465b5 100644 --- a/core/pim/addressbook/version.h +++ b/core/pim/addressbook/version.h | |||
@@ -1,10 +1,10 @@ | |||
1 | #ifndef _VERSION_H_ | 1 | #ifndef _VERSION_H_ |
2 | #define _VERSION_H_ | 2 | #define _VERSION_H_ |
3 | 3 | ||
4 | #define MAINVERSION "0" | 4 | #define MAINVERSION "0" |
5 | #define SUBVERSION "9" | 5 | #define SUBVERSION "9" |
6 | #define PATCHVERSION "3" | 6 | #define PATCHVERSION "4" |
7 | 7 | ||
8 | #define APPNAME "OPIE_ADDRESSBOOK" | 8 | #define APPNAME "OPIE_ADDRESSBOOK" |
9 | 9 | ||
10 | #endif | 10 | #endif |