Diffstat (limited to 'core/pim/addressbook/abeditor.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/pim/addressbook/abeditor.cpp | 619 |
1 files changed, 619 insertions, 0 deletions
diff --git a/core/pim/addressbook/abeditor.cpp b/core/pim/addressbook/abeditor.cpp new file mode 100644 index 0000000..6354db9 --- a/dev/null +++ b/core/pim/addressbook/abeditor.cpp | |||
@@ -0,0 +1,619 @@ | |||
1 | /********************************************************************** | ||
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | ||
3 | ** | ||
4 | ** This file is part of Qt Palmtop Environment. | ||
5 | ** | ||
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 | ||
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | ||
9 | ** packaging of this file. | ||
10 | ** | ||
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. | ||
13 | ** | ||
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | ||
15 | ** | ||
16 | ** Contact info@trolltech.com if any conditions of this licensing are | ||
17 | ** not clear to you. | ||
18 | ** | ||
19 | **********************************************************************/ | ||
20 | |||
21 | #include "abeditor.h" | ||
22 | #include "addresspicker.h" | ||
23 | |||
24 | #include <qpe/categoryselect.h> | ||
25 | #include <qpe/qpeapplication.h> | ||
26 | #include <qpe/qpedialog.h> | ||
27 | |||
28 | #include <qcombobox.h> | ||
29 | #include <qlabel.h> | ||
30 | #include <qlayout.h> | ||
31 | #include <qlineedit.h> | ||
32 | #include <qmultilineedit.h> | ||
33 | #include <qscrollview.h> | ||
34 | #include <qtoolbutton.h> | ||
35 | #include <qpushbutton.h> | ||
36 | #include <qmainwindow.h> | ||
37 | |||
38 | |||
39 | static inline bool containsAlphaNum( const QString &str ); | ||
40 | static inline bool constainsWhiteSpace( const QString &str ); | ||
41 | |||
42 | |||
43 | // helper functions, convert our comma delimited list to proper | ||
44 | // file format... | ||
45 | void parseEmailFrom( const QString &txt, QString &strDefaultEmail, | ||
46 | QString &strAll ); | ||
47 | |||
48 | // helper convert from file format to comma delimited... | ||
49 | void parseEmailTo( const QString &strDefaultEmail, | ||
50 | const QString &strOtherEmail, QString &strBack ); | ||
51 | |||
52 | |||
53 | |||
54 | AbEditor::AbEditor( const Contact &entry, const QValueList<int> *newOrdered, | ||
55 | QStringList *slNewOrdered, | ||
56 | QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ) | ||
57 | : QDialog( parent, name, TRUE, fl ), | ||
58 | orderedValues( newOrdered ), | ||
59 | slOrdered( slNewOrdered ) | ||
60 | { | ||
61 | init(); | ||
62 | initMap(); | ||
63 | setEntry( entry ); | ||
64 | } | ||
65 | |||
66 | AbEditor::~AbEditor() | ||
67 | { | ||
68 | } | ||
69 | |||
70 | void AbEditor::init() | ||
71 | { | ||
72 | middleEdit = 0; | ||
73 | QVBoxLayout *vb = new QVBoxLayout( this ); | ||
74 | svPage = new QScrollView( this ); | ||
75 | svPage->setHScrollBarMode( QScrollView::AlwaysOff ); | ||
76 | vb->addWidget( svPage ); | ||
77 | svPage->setResizePolicy( QScrollView::AutoOneFit ); | ||
78 | svPage->setFrameStyle( QFrame::NoFrame ); | ||
79 | |||
80 | QWidget *container = new QWidget( svPage->viewport() ); | ||
81 | svPage->addChild( container ); | ||
82 | |||
83 | QGridLayout *gl = new QGridLayout( container, 20, 2, 4, 2 ); | ||
84 | |||
85 | QLabel *l = new QLabel( tr("First Name"), container ); | ||
86 | gl->addWidget( l, 0, 0 ); | ||
87 | firstEdit = new QLineEdit( container ); | ||
88 | gl->addWidget( firstEdit, 0, 1 ); | ||
89 | |||
90 | l = new QLabel( tr("Last Name"), container ); | ||
91 | gl->addWidget( l, 1, 0 ); | ||
92 | lastEdit = new QLineEdit( container ); | ||
93 | gl->addWidget( lastEdit, 1, 1 ); | ||
94 | |||
95 | l = new QLabel( tr("Categories"), container ); | ||
96 | gl->addWidget( l, 2, 0 ); | ||
97 | |||
98 | cmbCat = new CategorySelect( container ); | ||
99 | gl->addWidget( cmbCat, 2, 1 ); | ||
100 | |||
101 | int i; | ||
102 | bool foundGender, | ||
103 | foundNotes; | ||
104 | foundGender = foundNotes = false; | ||
105 | QStringList::ConstIterator it = slOrdered->begin(); | ||
106 | for ( i = 0; it != slOrdered->end(); i++, ++it ) { | ||
107 | if ( !foundGender && *it == tr("Gender") ) { | ||
108 | foundGender = true; | ||
109 | } else if ( !foundNotes && *it == tr("Notes") ) { | ||
110 | foundNotes = true; | ||
111 | } else { | ||
112 | l = new QLabel( *it, container ); | ||
113 | listName.append( l ); | ||
114 | gl->addWidget( l, i + 3, 0 ); | ||
115 | QLineEdit *e = new QLineEdit( container ); | ||
116 | listValue.append( e ); | ||
117 | gl->addWidget( e, i + 3, 1 ); | ||
118 | if ( *it == tr( "Middle Name" ) ) | ||
119 | middleEdit = e; | ||
120 | } | ||
121 | } | ||
122 | l = new QLabel( tr("Gender"), container ); | ||
123 | gl->addWidget( l, slOrdered->count() + 3, 0 ); | ||
124 | genderCombo = new QComboBox( container ); | ||
125 | genderCombo->insertItem( "", 0 ); | ||
126 | genderCombo->insertItem( tr( "Male" ), 1 ); | ||
127 | genderCombo->insertItem( tr( "Female" ), 2 ); | ||
128 | gl->addWidget( genderCombo, slOrdered->count() + 3, 1 ); | ||
129 | |||
130 | dlgNote = new QDialog( this, "Note Dialog", TRUE ); | ||
131 | dlgNote->setCaption( tr("Enter Note") ); | ||
132 | QVBoxLayout *vbNote = new QVBoxLayout( dlgNote ); | ||
133 | // lblNote = new QLabel( dlgNote ); | ||
134 | // lblNote->setMinimumSize( lblNote->sizeHint() + QSize( 0, 4 ) ); | ||
135 | // vbNote->addWidget( lblNote ); | ||
136 | txtNote = new QMultiLineEdit( dlgNote ); | ||
137 | vbNote->addWidget( txtNote ); | ||
138 | |||
139 | QHBoxLayout *hb = new QHBoxLayout( vb ); | ||
140 | hb->addStretch( 2 ); | ||
141 | QPushButton *pb = new QPushButton( tr("Notes..."), this ); | ||
142 | hb->addWidget( pb ); | ||
143 | connect( pb, SIGNAL(clicked()), this, SLOT(slotNote()) ); | ||
144 | |||
145 | new QPEDialogListener(this); | ||
146 | } | ||
147 | |||
148 | void AbEditor::initMap() | ||
149 | { | ||
150 | /* | ||
151 | // since the fields and the XML fields exist, create a map | ||
152 | // between them... | ||
153 | Config cfg1( "AddressBook" ); | ||
154 | Config cfg2( "AddressBook" ); | ||
155 | QString strCfg1, | ||
156 | strCfg2; | ||
157 | int i; | ||
158 | |||
159 | // This stuff better exist... | ||
160 | cfg1.setGroup( "AddressFields" ); | ||
161 | cfg2.setGroup( "XMLFields" ); | ||
162 | i = 0; | ||
163 | strCfg1 = cfg1.readEntry( "Field" + QString::number(i), QString::null ); | ||
164 | strCfg2 = cfg2.readEntry( "XMLField" + QString::number(i++), | ||
165 | QString::null ); | ||
166 | while ( !strCfg1.isNull() && !strCfg2.isNull() ) { | ||
167 | mapField.insert( strCfg1, strCfg2 ); | ||
168 | strCfg1 = cfg1.readEntry( "Field" + QString::number(i), | ||
169 | QString::null ); | ||
170 | strCfg2 = cfg2.readEntry( "XMLField" + QString::number(i++), | ||
171 | QString::null ); | ||
172 | } | ||
173 | */ | ||
174 | } | ||
175 | |||
176 | void AbEditor::loadFields() | ||
177 | { | ||
178 | QStringList::ConstIterator it; | ||
179 | QListIterator<QLabel> lit( listName ); | ||
180 | for ( it = slOrdered->begin(); *lit; ++lit, ++it ) { | ||
181 | (*lit)->setText( *it ); | ||
182 | } | ||
183 | } | ||
184 | |||
185 | void AbEditor::setEntry( const Contact &entry ) | ||
186 | { | ||
187 | ent = entry; | ||
188 | QListIterator<QLineEdit> it( listValue ); | ||
189 | firstEdit->setText( ent.firstName() ); | ||
190 | lastEdit->setText( ent.lastName() ); | ||
191 | cmbCat->setCategories( ent.categories(), "Contacts", tr("Contacts") ); | ||
192 | |||
193 | // ### Fix... | ||
194 | QValueList<int>::ConstIterator itVl; | ||
195 | for ( itVl = orderedValues->begin(); *it && itVl != orderedValues->end(); | ||
196 | ++itVl, ++it ) { | ||
197 | switch( *itVl ) { | ||
198 | case Qtopia::Title: | ||
199 | (*it)->setText(ent.title()); | ||
200 | break; | ||
201 | case Qtopia::MiddleName: | ||
202 | (*it)->setText( ent.middleName() ); | ||
203 | break; | ||
204 | case Qtopia::Suffix: | ||
205 | (*it)->setText( ent.suffix() ); | ||
206 | break; | ||
207 | |||
208 | |||
209 | case Qtopia::DefaultEmail: | ||
210 | case Qtopia::Emails: | ||
211 | { | ||
212 | QString strDefEmail = ent.defaultEmail(); | ||
213 | QString strAllEmail = ent.emails(); | ||
214 | QString strFinal; | ||
215 | parseEmailTo( strDefEmail, strAllEmail, strFinal ); | ||
216 | (*it)->setText( strFinal ); | ||
217 | // make sure we see the "default" | ||
218 | (*it)->home( false ); | ||
219 | break; | ||
220 | } | ||
221 | |||
222 | // home | ||
223 | case Qtopia::HomeStreet: | ||
224 | (*it)->setText(ent.homeStreet() ); | ||
225 | break; | ||
226 | case Qtopia::HomeCity: | ||
227 | (*it)->setText( ent.homeCity() ); | ||
228 | break; | ||
229 | case Qtopia::HomeState: | ||
230 | (*it)->setText( ent.homeState() ); | ||
231 | break; | ||
232 | case Qtopia::HomeZip: | ||
233 | (*it)->setText( ent.homeZip() ); | ||
234 | break; | ||
235 | case Qtopia::HomeCountry: | ||
236 | (*it)->setText( ent.homeCountry() ); | ||
237 | break; | ||
238 | case Qtopia::HomePhone: | ||
239 | (*it)->setText( ent.homePhone() ); | ||
240 | break; | ||
241 | case Qtopia::HomeFax: | ||
242 | (*it)->setText( ent.homeFax() ); | ||
243 | break; | ||
244 | case Qtopia::HomeMobile: | ||
245 | (*it)->setText( ent.homeMobile() ); | ||
246 | break; | ||
247 | case Qtopia::HomeWebPage: | ||
248 | (*it)->setText( ent.homeWebpage() ); | ||
249 | break; | ||
250 | |||
251 | // business | ||
252 | case Qtopia::Company: | ||
253 | (*it)->setText( ent.company() ); | ||
254 | break; | ||
255 | case Qtopia::BusinessStreet: | ||
256 | (*it)->setText( ent.businessStreet() ); | ||
257 | break; | ||
258 | case Qtopia::BusinessCity: | ||
259 | (*it)->setText( ent.businessCity() ); | ||
260 | break; | ||
261 | case Qtopia::BusinessState: | ||
262 | (*it)->setText( ent.businessState() ); | ||
263 | break; | ||
264 | case Qtopia::BusinessZip: | ||
265 | (*it)->setText( ent.businessZip() ); | ||
266 | break; | ||
267 | case Qtopia::BusinessCountry: | ||
268 | (*it)->setText( ent.businessCountry() ); | ||
269 | break; | ||
270 | case Qtopia::BusinessWebPage: | ||
271 | (*it)->setText( ent.businessWebpage() ); | ||
272 | break; | ||
273 | case Qtopia::JobTitle: | ||
274 | (*it)->setText( ent.jobTitle() ); | ||
275 | break; | ||
276 | case Qtopia::Department: | ||
277 | (*it)->setText( ent.department() ); | ||
278 | break; | ||
279 | case Qtopia::Office: | ||
280 | (*it)->setText( ent.office() ); | ||
281 | break; | ||
282 | case Qtopia::BusinessPhone: | ||
283 | (*it)->setText( ent.businessPhone() ); | ||
284 | break; | ||
285 | case Qtopia::BusinessFax: | ||
286 | (*it)->setText( ent.businessFax() ); | ||
287 | break; | ||
288 | case Qtopia::BusinessMobile: | ||
289 | (*it)->setText( ent.businessMobile() ); | ||
290 | break; | ||
291 | case Qtopia::BusinessPager: | ||
292 | (*it)->setText( ent.businessPager() ); | ||
293 | break; | ||
294 | case Qtopia::Profession: | ||
295 | (*it)->setText( ent.profession() ); | ||
296 | break; | ||
297 | case Qtopia::Assistant: | ||
298 | (*it)->setText( ent.assistant() ); | ||
299 | break; | ||
300 | case Qtopia::Manager: | ||
301 | (*it)->setText( ent.manager() ); | ||
302 | break; | ||
303 | |||
304 | // personal | ||
305 | case Qtopia::Spouse: | ||
306 | (*it)->setText( ent.spouse() ); | ||
307 | break; | ||
308 | case Qtopia::Children: | ||
309 | (*it)->setText( ent.children() ); | ||
310 | break; | ||
311 | case Qtopia::Birthday: | ||
312 | (*it)->setText( ent.birthday() ); | ||
313 | break; | ||
314 | case Qtopia::Anniversary: | ||
315 | (*it)->setText( ent.anniversary() ); | ||
316 | break; | ||
317 | case Qtopia::Nickname: | ||
318 | (*it)->setText( ent.nickname() ); | ||
319 | break; | ||
320 | |||
321 | } | ||
322 | } | ||
323 | |||
324 | QString gender = ent.gender(); | ||
325 | genderCombo->setCurrentItem( gender.toInt() ); | ||
326 | |||
327 | txtNote->setText( ent.notes() ); | ||
328 | } | ||
329 | |||
330 | void AbEditor::accept() | ||
331 | { | ||
332 | if ( isEmpty() ) | ||
333 | reject(); | ||
334 | else { | ||
335 | saveEntry(); | ||
336 | QDialog::accept(); | ||
337 | } | ||
338 | } | ||
339 | |||
340 | bool AbEditor::isEmpty() | ||
341 | { | ||
342 | // analyze all the fields and make sure there is _something_ there | ||
343 | // that warrants saving... | ||
344 | QString t = firstEdit->text(); | ||
345 | if ( !t.isEmpty() && containsAlphaNum( t ) ) | ||
346 | return false; | ||
347 | |||
348 | t = lastEdit->text(); | ||
349 | if ( !t.isEmpty() && containsAlphaNum( t ) ) | ||
350 | return false; | ||
351 | |||
352 | QListIterator<QLineEdit> it( listValue ); | ||
353 | for ( ; it.current(); ++it ) { | ||
354 | t = it.current()->text(); | ||
355 | if ( !t.isEmpty() && containsAlphaNum( t ) ) | ||
356 | return false; | ||
357 | } | ||
358 | |||
359 | t = txtNote->text(); | ||
360 | if ( !t.isEmpty() && containsAlphaNum( t ) ) | ||
361 | return false; | ||
362 | |||
363 | return true; | ||
364 | } | ||
365 | |||
366 | void AbEditor::saveEntry() | ||
367 | { | ||
368 | QString strDefaultEmail, strOtherEmail; | ||
369 | |||
370 | // determine if there has been a change in names | ||
371 | if ( ent.firstName() != firstEdit->text() || | ||
372 | ent.lastName() != lastEdit->text() | ||
373 | || (middleEdit && ent.middleName() != middleEdit->text()) ) { | ||
374 | // set the names | ||
375 | ent.setFirstName( firstEdit->text() ); | ||
376 | ent.setLastName( lastEdit->text() ); | ||
377 | if ( middleEdit ) | ||
378 | ent.setMiddleName( middleEdit->text() ); | ||
379 | ent.setFileAs(); | ||
380 | } | ||
381 | |||
382 | ent.setCategories( cmbCat->currentCategories() ); | ||
383 | |||
384 | QListIterator<QLineEdit> it( listValue ); | ||
385 | int i; | ||
386 | QValueList<int>::ConstIterator<int> vlIt; | ||
387 | for ( i = 0, vlIt = orderedValues->begin(); | ||
388 | it.current(); ++it, ++vlIt, i++ ) { | ||
389 | switch( *vlIt ) { | ||
390 | case Qtopia::Title: | ||
391 | ent.setTitle( it.current()->text() ); | ||
392 | break; | ||
393 | case Qtopia::MiddleName: | ||
394 | ent.setMiddleName( it.current()->text() ); | ||
395 | break; | ||
396 | case Qtopia::Suffix: | ||
397 | ent.setSuffix( it.current()->text() ); | ||
398 | break; | ||
399 | // case Qtopia::Category: | ||
400 | // { | ||
401 | // // QStringList slCat = QStringList::split( ";", value ); | ||
402 | // // QValueList<int> cat; | ||
403 | // // for ( QStringList::ConstIterator it = slCat.begin(); | ||
404 | // // it != slCat.end(); ++it ) | ||
405 | // // cat.append( (*it).toInt() ); | ||
406 | // // ent.setCategories( cat ); | ||
407 | // } | ||
408 | // break; | ||
409 | |||
410 | |||
411 | case Qtopia::DefaultEmail: | ||
412 | case Qtopia::Emails: | ||
413 | parseEmailFrom( it.current()->text(), strDefaultEmail, | ||
414 | strOtherEmail ); | ||
415 | ent.setDefaultEmail( strDefaultEmail ); | ||
416 | ent.setEmails( strOtherEmail ); | ||
417 | break; | ||
418 | |||
419 | // home | ||
420 | case Qtopia::HomeStreet: | ||
421 | ent.setHomeStreet( it.current()->text() ); | ||
422 | break; | ||
423 | case Qtopia::HomeCity: | ||
424 | ent.setHomeCity( it.current()->text() ); | ||
425 | break; | ||
426 | case Qtopia::HomeState: | ||
427 | ent.setHomeState( it.current()->text() ); | ||
428 | break; | ||
429 | case Qtopia::HomeZip: | ||
430 | ent.setHomeZip( it.current()->text() ); | ||
431 | break; | ||
432 | case Qtopia::HomeCountry: | ||
433 | ent.setHomeCountry( it.current()->text() ); | ||
434 | break; | ||
435 | case Qtopia::HomePhone: | ||
436 | ent.setHomePhone( it.current()->text() ); | ||
437 | break; | ||
438 | case Qtopia::HomeFax: | ||
439 | ent.setHomeFax( it.current()->text() ); | ||
440 | break; | ||
441 | case Qtopia::HomeMobile: | ||
442 | ent.setHomeMobile( it.current()->text() ); | ||
443 | break; | ||
444 | case Qtopia::HomeWebPage: | ||
445 | ent.setHomeWebpage( it.current()->text() ); | ||
446 | break; | ||
447 | |||
448 | // business | ||
449 | case Qtopia::Company: | ||
450 | ent.setCompany( it.current()->text() ); | ||
451 | break; | ||
452 | case Qtopia::BusinessStreet: | ||
453 | ent.setBusinessStreet( it.current()->text() ); | ||
454 | break; | ||
455 | case Qtopia::BusinessCity: | ||
456 | ent.setBusinessCity( it.current()->text() ); | ||
457 | break; | ||
458 | case Qtopia::BusinessState: | ||
459 | ent.setBusinessState( it.current()->text() ); | ||
460 | break; | ||
461 | case Qtopia::BusinessZip: | ||
462 | ent.setBusinessZip( it.current()->text() ); | ||
463 | break; | ||
464 | case Qtopia::BusinessCountry: | ||
465 | ent.setBusinessCountry( it.current()->text() ); | ||
466 | break; | ||
467 | case Qtopia::BusinessWebPage: | ||
468 | ent.setBusinessWebpage( it.current()->text() ); | ||
469 | break; | ||
470 | case Qtopia::JobTitle: | ||
471 | ent.setJobTitle( it.current()->text() ); | ||
472 | break; | ||
473 | case Qtopia::Department: | ||
474 | ent.setDepartment( it.current()->text() ); | ||
475 | break; | ||
476 | case Qtopia::Office: | ||
477 | ent.setOffice( it.current()->text() ); | ||
478 | break; | ||
479 | case Qtopia::BusinessPhone: | ||
480 | ent.setBusinessPhone( it.current()->text() ); | ||
481 | break; | ||
482 | case Qtopia::BusinessFax: | ||
483 | ent.setBusinessFax( it.current()->text() ); | ||
484 | break; | ||
485 | case Qtopia::BusinessMobile: | ||
486 | ent.setBusinessMobile( it.current()->text() ); | ||
487 | break; | ||
488 | case Qtopia::BusinessPager: | ||
489 | ent.setBusinessPager( it.current()->text() ); | ||
490 | break; | ||
491 | case Qtopia::Profession: | ||
492 | ent.setProfession( it.current()->text() ); | ||
493 | break; | ||
494 | case Qtopia::Assistant: | ||
495 | ent.setAssistant( it.current()->text() ); | ||
496 | break; | ||
497 | case Qtopia::Manager: | ||
498 | ent.setManager( it.current()->text() ); | ||
499 | break; | ||
500 | |||
501 | // personal | ||
502 | case Qtopia::Spouse: | ||
503 | ent.setSpouse( it.current()->text() ); | ||
504 | break; | ||
505 | case Qtopia::Children: | ||
506 | ent.setChildren( it.current()->text() ); | ||
507 | break; | ||
508 | case Qtopia::Birthday: | ||
509 | ent.setBirthday( it.current()->text() ); | ||
510 | break; | ||
511 | case Qtopia::Anniversary: | ||
512 | ent.setAnniversary( it.current()->text() ); | ||
513 | break; | ||
514 | case Qtopia::Nickname: | ||
515 | ent.setNickname( it.current()->text() ); | ||
516 | break; | ||
517 | default: | ||
518 | break; | ||
519 | |||
520 | } | ||
521 | } | ||
522 | |||
523 | int gender = genderCombo->currentItem(); | ||
524 | ent.setGender( QString::number( gender ) ); | ||
525 | |||
526 | QString str = txtNote->text(); | ||
527 | if ( !str.isNull() ) | ||
528 | ent.setNotes( str ); | ||
529 | } | ||
530 | |||
531 | void AbEditor::slotNote() | ||
532 | { | ||
533 | dlgNote->showMaximized(); | ||
534 | if ( !dlgNote->exec() ) { | ||
535 | // reset the note... | ||
536 | txtNote->setText( ent.notes() ); | ||
537 | } | ||
538 | } | ||
539 | |||
540 | void AbEditor::setNameFocus() | ||
541 | { | ||
542 | firstEdit->setFocus(); | ||
543 | } | ||
544 | |||
545 | void parseEmailFrom( const QString &txt, QString &strDefaultEmail, | ||
546 | QString &strAll ) | ||
547 | { | ||
548 | int where, | ||
549 | start; | ||
550 | if ( txt.isEmpty() ) | ||
551 | return; | ||
552 | // find the first | ||
553 | where = txt.find( ',' ); | ||
554 | if ( where < 0 ) { | ||
555 | strDefaultEmail = txt; | ||
556 | strAll = txt; | ||
557 | } else { | ||
558 | strDefaultEmail = txt.left( where ).stripWhiteSpace(); | ||
559 | strAll = strDefaultEmail; | ||
560 | while ( where > -1 ) { | ||
561 | strAll.append(" "); | ||
562 | start = where; | ||
563 | where = txt.find( ',', where + 1 ); | ||
564 | if ( where > - 1 ) | ||
565 | strAll.append( txt.mid(start + 1, where - start - 1).stripWhiteSpace() ); | ||
566 | else // grab until the end... | ||
567 | strAll.append( txt.right(txt.length() - start - 1).stripWhiteSpace() ); | ||
568 | } | ||
569 | } | ||
570 | } | ||
571 | |||
572 | void parseEmailTo( const QString &strDefaultEmail, | ||
573 | const QString &strOtherEmail, QString &strBack ) | ||
574 | { | ||
575 | // create a comma dilimeted set of emails... | ||
576 | // use the power of short circuiting... | ||
577 | bool foundDefault = false; | ||
578 | QString strTmp; | ||
579 | int start = 0; | ||
580 | int where; | ||
581 | // start at the beginng. | ||
582 | strBack = strDefaultEmail; | ||
583 | where = 0; | ||
584 | while ( where > -1 ) { | ||
585 | start = where; | ||
586 | where = strOtherEmail.find( ' ', where + 1 ); | ||
587 | if ( where > 0 ) { | ||
588 | strTmp = strOtherEmail.mid( start, where - start ).stripWhiteSpace(); | ||
589 | } else | ||
590 | strTmp = strOtherEmail.right( strOtherEmail.length() - start ).stripWhiteSpace(); | ||
591 | if ( foundDefault || strTmp != strDefaultEmail ) { | ||
592 | strBack.append( ", " ); | ||
593 | strBack.append( strTmp ); | ||
594 | } else | ||
595 | foundDefault = true; | ||
596 | } | ||
597 | } | ||
598 | |||
599 | |||
600 | static inline bool containsAlphaNum( const QString &str ) | ||
601 | { | ||
602 | int i, | ||
603 | count = str.length(); | ||
604 | for ( i = 0; i < count; i++ ) | ||
605 | if ( !str[i].isSpace() ) | ||
606 | return TRUE; | ||
607 | return FALSE; | ||
608 | } | ||
609 | |||
610 | static inline bool constainsWhiteSpace( const QString &str ) | ||
611 | { | ||
612 | int i, | ||
613 | count = str.length(); | ||
614 | for (i = 0; i < count; i++ ) | ||
615 | if ( str[i].isSpace() ) | ||
616 | return TRUE; | ||
617 | return FALSE; | ||
618 | } | ||
619 | |||