summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/kaddressbook/germantranslation.txt4
-rw-r--r--kabc/addressee.cpp4
-rw-r--r--kabc/addresseeview.cpp2
-rw-r--r--kaddressbook/phoneeditwidget.cpp112
-rw-r--r--kaddressbook/phoneeditwidget.h87
5 files changed, 193 insertions, 16 deletions
diff --git a/bin/kdepim/kaddressbook/germantranslation.txt b/bin/kdepim/kaddressbook/germantranslation.txt
index dcf43c1..f12f880 100644
--- a/bin/kdepim/kaddressbook/germantranslation.txt
+++ b/bin/kdepim/kaddressbook/germantranslation.txt
@@ -632,206 +632,206 @@
632{ "View Type","Typ der Ansicht" }, 632{ "View Type","Typ der Ansicht" },
633{ "Icons represent contacts. Very simple view.","Icons repräsentieren Kontakte. Sehr einfache Ansicht." }, 633{ "Icons represent contacts. Very simple view.","Icons repräsentieren Kontakte. Sehr einfache Ansicht." },
634{ "A listing of contacts in a table. Each cell of the table holds a field of the contact.","Eine Kontaktliste in einer Tabelle." }, 634{ "A listing of contacts in a table. Each cell of the table holds a field of the contact.","Eine Kontaktliste in einer Tabelle." },
635{ "Rolodex style cards represent contacts.","Rolodex Stil Karten repräsentieren Kontakte." }, 635{ "Rolodex style cards represent contacts.","Rolodex Stil Karten repräsentieren Kontakte." },
636{ "Draw &separators","Zeichne &Trennlinie" }, 636{ "Draw &separators","Zeichne &Trennlinie" },
637{ "Separator &width:","Trennlinien &Breite:" }, 637{ "Separator &width:","Trennlinien &Breite:" },
638{ "&Padding:","Füllung:" }, 638{ "&Padding:","Füllung:" },
639{ "Cards","Karten" }, 639{ "Cards","Karten" },
640{ "&Margin:","&Rand:" }, 640{ "&Margin:","&Rand:" },
641{ "Draw &borders","Zeichne Ränder" }, 641{ "Draw &borders","Zeichne Ränder" },
642{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." }, 642{ "The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data.","The item margin is the distance (in pixels) between the item edge and the item data. Most noticeably, incrementing the item margin will add space between the focus rectangle and the item data." },
643{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." }, 643{ "The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators.","The Item Spacing decides the distance (in pixels) between the items and anything else: the view borders, other items or column separators." },
644{ "Sets the width of column separators","Sets the width of column separators" }, 644{ "Sets the width of column separators","Sets the width of column separators" },
645{ "&Layout","&Layout" }, 645{ "&Layout","&Layout" },
646{ "Show &empty fields","Zeige leere Felder" }, 646{ "Show &empty fields","Zeige leere Felder" },
647{ "Show field &labels","Zeige Feld Label" }, 647{ "Show field &labels","Zeige Feld Label" },
648{ "Be&havior","Ver&halten" }, 648{ "Be&havior","Ver&halten" },
649{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" }, 649{ "Header, Border and Separator Color","Kopf, Rand und Trennlinien Farbe" },
650{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" }, 650{ "<qt>Are you sure that you want to delete the view <b>%1</b>?</qt>","<qt>Sind Sie sicher, dass Sie die Ansicht <b>%1</b> löschen möchten?</qt>" },
651{ "Confirm Delete","Bestätige Löschen" }, 651{ "Confirm Delete","Bestätige Löschen" },
652{ "Edit Address Book Filter","Editiere Adressbuch Filter" }, 652{ "Edit Address Book Filter","Editiere Adressbuch Filter" },
653{ "Category rule","Kategorie Regel" }, 653{ "Category rule","Kategorie Regel" },
654{ "Include categories","Inklusive" }, 654{ "Include categories","Inklusive" },
655{ "Exclude categories","Exclusive" }, 655{ "Exclude categories","Exclusive" },
656{ "Include contacts, that are:","Schließe folgende Kontakte ein:" }, 656{ "Include contacts, that are:","Schließe folgende Kontakte ein:" },
657{ "public","Öffentlich" }, 657{ "public","Öffentlich" },
658{ "private","Privat" }, 658{ "private","Privat" },
659{ "confidential","Vertraulich" }, 659{ "confidential","Vertraulich" },
660{ "Configure Resources","Konfiguriere Resourcen" }, 660{ "Configure Resources","Konfiguriere Resourcen" },
661{ "Resource Configuration","Resource Konfiguration" }, 661{ "Resource Configuration","Resource Konfiguration" },
662{ "Resources","Resourcen" }, 662{ "Resources","Resourcen" },
663{ "Standard","Standard" }, 663{ "Standard","Standard" },
664{ "&Use as Standard","Setze als Standard" }, 664{ "&Use as Standard","Setze als Standard" },
665{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" }, 665{ "Select type of the new resource:","Selektiere Typ der neuen Resource:" },
666{ "General Settings","Allgemeine Einstellungen" }, 666{ "General Settings","Allgemeine Einstellungen" },
667{ "Read-only","Nur-Lesen" }, 667{ "Read-only","Nur-Lesen" },
668{ "Include in sync","Schließe in Sync mit ein" }, 668{ "Include in sync","Schließe in Sync mit ein" },
669{ "%1 Resource Settings","%1 Resource Einstellungen" }, 669{ "%1 Resource Settings","%1 Resource Einstellungen" },
670{ "Format:","Format:" }, 670{ "Format:","Format:" },
671{ "Location:","Ort:" }, 671{ "Location:","Ort:" },
672{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" }, 672{ "Full Menu bar (restart)","Volle Menu Leiste (Neustart!)" },
673{ "Language","Sprache" }, 673{ "Language","Sprache" },
674{ "Time Format","Zeit Format" }, 674{ "Time Format","Zeit Format" },
675{ "Time Zone","Zeit Zone" }, 675{ "Time Zone","Zeit Zone" },
676{ "Data storage path","Daten Speicherpfad" }, 676{ "Data storage path","Daten Speicherpfad" },
677{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" }, 677{ "Your current storage dir is:\n%1\nYour mail is stored in:\n(storagedir)/apps/kopiemail/localmail","Aktuelles Speicherverzeichnis ist:\n%1\nIhre Mail wird gespeichert in:\n(speicherverz.)/apps/kopiemail/localmail" },
678{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" }, 678{ "<b>New data storage dir:</b>","<b>Neues Datenspeicherverzeichnis:</b>" },
679{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" }, 679{ "New dirs are created automatically","Neue Verzeichnisse werden aut. erstellt" },
680{ "Save settings","Speichere Einstellungen" }, 680{ "Save settings","Speichere Einstellungen" },
681{ "Save standard","Speichere Standard" }, 681{ "Save standard","Speichere Standard" },
682{ "Save","Speichern" }, 682{ "Save","Speichern" },
683{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" }, 683{ "<b>New settings are used\nafter a restart</b>","<b>Neue Einstellungen werden nach\neinem Neustart genutzt</b>" },
684{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" }, 684{ "Settings are stored in\n%1","Einstellungen werden gespeichert in:\n%1" },
685{ "Multiple Sync options","Multi Sync Optionen" }, 685{ "Multiple Sync options","Multi Sync Optionen" },
686{ "Sync algo options","Sync Ablauf Optionen" }, 686{ "Sync algo options","Sync Ablauf Optionen" },
687{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" }, 687{ "Apply filter when adding data to local:","Filter für das Hinzufügen von Daten zu Lokal:" },
688{ "Incoming calendar filter:","Eingehender Kalender Filter:" }, 688{ "Incoming calendar filter:","Eingehender Kalender Filter:" },
689{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" }, 689{ "Incoming addressbook filter:","Eingehender Adressbuch Filter:" },
690{ "Write back options","Optionen zum Zurückschreiben" }, 690{ "Write back options","Optionen zum Zurückschreiben" },
691{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" }, 691{ "Write back (on remote) existing entries only","Schreibe nur existierende (auf Entfernt) Einträge zurück" },
692{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" }, 692{ "Apply filter when adding data to remote:","Filter für das Hinzufügen von Daten zu Entfernt:" },
693{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" }, 693{ "Outgoing calendar filter:","Ausgehender Kalender Filter:" },
694{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" }, 694{ "Outgoing addressbook filter:","Ausgehender Adressbuch Filter:" },
695{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" }, 695{ "Write back (calendar) entries for time period only","Schreibe nur Kalender Einträge für Zeitspanne zurück" },
696{ "Time period","Zeitspanne" }, 696{ "Time period","Zeitspanne" },
697{ "From ","Von " }, 697{ "From ","Von " },
698{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " }, 698{ " weeks in the past to "," Wochen in der Vergangenheit bis zu " },
699{ " weeks in the future "," Wochen in der Zukunft " }, 699{ " weeks in the future "," Wochen in der Zukunft " },
700{ "Profile kind specific settings","Profil Art abhängige Einstellungen" }, 700{ "Profile kind specific settings","Profil Art abhängige Einstellungen" },
701{ "Local temp file:","Lokale temp Datei:" }, 701{ "Local temp file:","Lokale temp Datei:" },
702{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" }, 702{ "Multiple profiles with same name!\nPlease use unique profile names!","Mehrere Profile mit demselben Namen!\nBitte verschiedene Namen benutzen!" },
703{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" }, 703{ "Aborted! Nothing synced!","Abgebrochen! Nichts wurde gesynct!" },
704{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." }, 704{ "You cannot remove your standard resource!\n Please select a new standard resource first.","Standard Resource kann\nnicht entfernt werden!\nBitte eine andere Resource\nals Standard setzen." },
705{ "Sorry","Tut mir leid" }, 705{ "Sorry","Tut mir leid" },
706{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" }, 706{ "You cannot use a read-only<br> resource as standard!","Man kann nicht eine read-only<br> Resource als Standard setzen!" },
707{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" }, 707{ "Please restart to get the \nchanged resources (re)loaded!\n","Bitte starten Sie jetzt\ndas Programm neu, um die geänderten\nResourcen neu zu laden!\n" },
708{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" }, 708{ "The selected file does not\ninclude a valid vCard.\nPlease check the file and try again.\n","Die gewählte Datei enthält\nkeine gültige vCard.\nBitte prüfen Sie die Datei\nund versuchen es erneut.\n" },
709{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" }, 709{ "Unable to load resource '%1'","Resource kann nicht geladen werden: '%1'" },
710{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" }, 710{ "Some changes are only\neffective after a restart!\n","Einige Änderungen werden erst\nnach einem Neustart übernommen!\n" },
711{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." }, 711{ "Syncing aborted. Nothing synced.","Syncing abgebrochen.Nichts wurde gesynct." },
712{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." }, 712{ "Connected! Sending request for remote file ...","Verbunden! Sende Daten Anfrage..." },
713{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." }, 713{ "Trying to connect to remote...","Versuche mit Gegenstelle zu verbinden..." },
714{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" }, 714{ "Connection to remote\nhost timed out!\nDid you forgot to enable\nsyncing on remote host?","Verbindungsversuch wegen\nZeitüberschreitung gescheitert!\nWurde vergessen Pi-Sync auf\nder Gegenstelle anzuschalten?" },
715{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." }, 715{ "ERROR: Receiving remote file failed.","FEHLER: Empfang der entfernten Daten fehlgeschlagen." },
716{ "Error","Fehler" }, 716{ "Error","Fehler" },
717{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." }, 717{ ""You entered an invalid date!\n Date changed to current date.","Ungültiges Datum eingegeben.\nSetze heutiges Datum." },
718{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." }, 718{ "You entered an invalid date!\n Will use current date instead.","Ungültiges Datum eingegeben.\nSetze stattdessen heutiges Datum." },
719{ "Warning","Warnung" }, 719{ "Warning","Warnung" },
720{ "Select week number","Wähle Wochen Nummer" }, 720{ "Select week number","Wähle Wochen Nummer" },
721{ "Februar","Februar" }, 721{ "Februar","Februar" },
722{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " }, 722{ "Pi-Sync options for device: ","Pi-Sync Einstellungen für Gerät: " },
723{ "Password for remote access:","Passwort für fernen Zugriff:" }, 723{ "Password for remote access:","Passwort für fernen Zugriff:" },
724{ "Remote IP address:","Ferne IP Adresse:" }, 724{ "Remote IP address:","Ferne IP Adresse:" },
725{ "Remote port number:","Ferne Port Nummer:" }, 725{ "Remote port number:","Ferne Port Nummer:" },
726{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." }, 726{ "Remote file saved to temp file.","Ferne Daten in temp Datei gespeichert." },
727{ "Remote from: ","Fern von: " }, 727{ "Remote from: ","Fern von: " },
728{ "Local from: ","Lokal von: " }, 728{ "Local from: ","Lokal von: " },
729{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" }, 729{ "Synchronization summary:\n\n %d items added to local\n %d items added to remote\n %d items updated on local\n %d items updated on remote\n %d items deleted on local\n %d items deleted on remote\n %d incoming filtered out\n %d outgoing filtered out\n","Synchronisationsübersicht:\n\n %d lokal hinzugefügt\n %d fern hinzugefügt\n %d lokal geändert\n %d fern geändert\n %d lokal gelöscht\n %d fern gelöscht\n %d eingehende ausgefiltert\n %d ausgehende ausgefiltert\n" },
730{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" }, 730{ "Local calendar changed!\n","Lokaler Kalender geändert!\n" },
731{ "Write back","Schreibe zurück" }, 731{ "Write back","Schreibe zurück" },
732{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" }, 732{ "Pi-Sync succesful!","Pi-Sync erfolgreich!" },
733{ "Received sync request","Sync Anfrage erhalten" }, 733{ "Received sync request","Sync Anfrage erhalten" },
734{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." }, 734{ "Synchronizing from remote ...\n\nDo not use this application!\n\nIf syncing fails\nyou can close this dialog.","Ferne Synchronisation ...\n\nBenutze diese Anwendung nicht!\n\nWenn das Syncen fehlschlägt kann\ndieser Dialog geschlossen werden." },
735{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." }, 735{ "Saving Data to temp file ...","Speichere Daten in temp Datei..." },
736{ "Data saved to temp file!","Daten in temp Datei gespeichert!" }, 736{ "Data saved to temp file!","Daten in temp Datei gespeichert!" },
737{ "Sending file...","Sende Datei..." }, 737{ "Sending file...","Sende Datei..." },
738{ "Waiting for synced file...","Warte auf gesyncte Daten..." }, 738{ "Waiting for synced file...","Warte auf gesyncte Daten..." },
739{ "Receiving synced file...","Gesyncte Daten erhalten..." }, 739{ "Receiving synced file...","Gesyncte Daten erhalten..." },
740{ "Received %1 bytes","%1 Bytes erhalten" }, 740{ "Received %1 bytes","%1 Bytes erhalten" },
741{ "Writing file to disk...","Speichere Datei..." }, 741{ "Writing file to disk...","Speichere Datei..." },
742{ "Pi-Sync successful!","Pi-Sync erfolgreich!" }, 742{ "Pi-Sync successful!","Pi-Sync erfolgreich!" },
743{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" }, 743{ "Clock skew of\nsyncing devices\nis %1 seconds!","Uhrzeitunterschied der\nsyncenden Geräte\nist %1 Sekunden!" },
744{ "Synchronize!","Synchronisiere!" }, 744{ "Synchronize!","Synchronisiere!" },
745{ "High clock skew!","Großer Uhrzeitunterschied!" }, 745{ "High clock skew!","Großer Uhrzeitunterschied!" },
746{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" }, 746{ "ADJUST\nYOUR\nCLOCKS!","JUSTIERE\nDIE\nUHREN!" },
747{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" }, 747{ "The clocks of the syncing\ndevices have a difference\nof more than 5 minutes.\nPlease adjust your clocks.\nYou may get wrong syncing results!\nPlease confirm synchronization!","Die Uhren der syncenden Geräte\nhaben einen Unterschied von\nmehr als 5 Minuten. Bitte die\nUhrzeiten anpassen. Sie können\nfalsche Sync-Resultate erhalten!\nBitte das Syncen bestätigen!" },
748{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" }, 748{ "Change search field enable jump bar","Ändere Suchfeld um Jumpbar anzuzeigen" },
749{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" }, 749{ "Search with '*' prefix (wildcard)","Suche mit '*' Prefix (Wildcard)" },
750{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" }, 750{ "Shrink searchfield in portrait view","Verkleinere Suchfeld im Portraitmodus" },
751{ "Edit new contact","Bearbeite neuen Kontakt" }, 751{ "Edit new contact","Bearbeite neuen Kontakt" },
752{ "Edit ","Bearbeite " }, 752{ "Edit ","Bearbeite " },
753{ "No contact changed!","Kein Kontakt verändert" }, 753{ "No contact changed!","Kein Kontakt verändert" },
754{ "%1 contacts changed!","%1 Kontakte geändert!" }, 754{ "%1 contacts changed!","%1 Kontakte geändert!" },
755{ "Mobile (home)","Handy (Privat)" }, 755{ "Mobile (home)","Handy (Privat)" },
756{ "Mobile (work)","Handy (Arbeit)" }, 756{ "Mobile (work)","Handy (Arbeit)" },
757{ "Def.Formatted Name","Def. Format. Name" }, 757{ "Def.Formatted Name","Def. Format. Name" },
758{ "Colors","Farben" }, 758{ "Colors","Farben" },
759{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" }, 759{ "Alternating background of list views","Abwechselnder Hintergrund für Listen" },
760{ "Backup enabled","Backup angeschaltet" }, 760{ "Backup enabled","Backup angeschaltet" },
761{ "Use standard backup dir","Standard Backupverzeichnis" }, 761{ "Use standard backup dir","Standard Backupverzeichnis" },
762{ "Number of Backups:","Anzahl der Backups" }, 762{ "Number of Backups:","Anzahl der Backups" },
763{ "Make backup every ","Mache ein Backup alle " }, 763{ "Make backup every ","Mache ein Backup alle " },
764{ " days"," Tage" }, 764{ " days"," Tage" },
765{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." }, 765{ "Creating backup ... please wait ...","Erzeuge Backup ... bitte warten ..." },
766{ "Backup Failed!","Backup Problem!" }, 766{ "Backup Failed!","Backup Problem!" },
767{ "Try again now","Versuche jetzt nochmal" }, 767{ "Try again now","Versuche jetzt nochmal" },
768{ "Try again later","Versuche später nochmal" }, 768{ "Try again later","Versuche später nochmal" },
769{ "Try again tomorrow","Versuche morgen nochmal" }, 769{ "Try again tomorrow","Versuche morgen nochmal" },
770{ "Disable backup","Schalte Backup ab" }, 770{ "Disable backup","Schalte Backup ab" },
771{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" }, 771{ "<b>Backup directory does not exist: </b>","<b>Backup Verzeichnis existiert nicht: </b>" },
772{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" }, 772{ "<b>The backup copy command failed!</b>","<b>Das Backup Kopierkommando is fehlgeschlagen!</b>" },
773{ "Choose action","Wähle Aktion" }, 773{ "Choose action","Wähle Aktion" },
774{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." }, 774{ "&Configure KA/Pi...","Konfiguriere KA/Pi..." },
775{ "Global Settings...","Globale Einstellungen..." }, 775{ "Global Settings...","Globale Einstellungen..." },
776{ "Spouse","Ehegatte" }, 776{ "Spouse","Ehegatte" },
777{ "Notes","Notizen" }, 777{ "Notes","Notizen" },
778{ "Messanger","Messanger" }, 778{ "Messanger","Messanger" },
779{ "Assistant","Assistent" }, 779{ "Assistant","Assistent" },
780{ "Manager","Manager" }, 780{ "Manager","Manager" },
781{ "Secrecy","Sichtbar" }, 781{ "Secrecy","Sichtbar" },
782{ "male","männlich" }, 782{ "male","männlich" },
783{ "female","weiblich" }, 783{ "female","weiblich" },
784{ "Hide!","Verbergen!" }, 784{ "Hide!","Verbergen!" },
785{ "Show!","Anzeigen!" }, 785{ "Show!","Anzeigen!" },
786{ "Details","Details" }, 786{ "Details","Details" },
787{ "Search:","Suche:" }, 787{ "Search:","Suche:" },
788{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" }, 788{ "Automatically sync with KDE-Desktop\nwhen receiving sync request","Synce automatisch mit KDE-Desktop\nwenn eine Sync-Anforderung kommt" },
789{ "Pi-Sync Port Error","Pi-Sync Port Fehler" }, 789{ "Pi-Sync Port Error","Pi-Sync Port Fehler" },
790{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" }, 790{ "<b>Enabling Pi-Sync failed!</b> Failed to bind or listen to the port %1! Is another instance already listening to that port?","<b>Anschalten von Pi-Sync fehlgeschlagen!</b> Fehler beim Ansprechen des Ports %1! Ist bereits eine andere Anwendung dabei diesen Port zu nutzen?" },
791{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" }, 791{ "No valid port number:\n%1","Keine gültige Port Nummer:\n%1" },
792{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" }, 792{ "Port number (Default: %1)\nValid range from 1 to 65535","Port Nummer (Standard: %1)\nGültiger Bereich von 1 bis 65535" },
793{ "Pi-Sync Error","Pi-Sync Fehler" }, 793{ "Pi-Sync Error","Pi-Sync Fehler" },
794{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" }, 794{ "Got send file request\nwith invalid password","Erhielt "sende Datei" Anfrage\nmit ungültigem Passwort" },
795{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" }, 795{ "Got receive file request\nwith invalid password","Erhielt "empfange Datei" Anfrage\nmit ungültigem Passwort" },
796{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." }, 796{ "Wrong password: Receiving remote file failed.","Falsches Passwort: Empfangen von entfernter Datei fehlgeschlagen." },
797{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" }, 797{ "Please close error dialog on remote.","Bitte schließe Fehler-Dialog am entfernten Rechner" },
798{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" }, 798{ "Unknown error on remote.","Unbekannter Fehler am entfernten Rechner" },
799{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" }, 799{ "Pi-Sync: Connected!","Pi-Sync: Verbunden!" },
800{ "Receiving file from remote...","Empfange entfernte Datei..." }, 800{ "Receiving file from remote...","Empfange entfernte Datei..." },
801{ "Sending back synced file...","Sende synchronisierte Datei zurück..." }, 801{ "Sending back synced file...","Sende synchronisierte Datei zurück..." },
802{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" }, 802{ "Do you want to\nclear all sync info\nof all profiles?","Möchten Sie wirklich\ndie Sync-Info\nfür alle Profile\nlöschen?" },
803{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" }, 803{ "Do you want to\nclear the sync\ninfo of profile\n%1?\n","Möchten Sie wirklich\ndie Sync-Info für Profil\n%1?\nlöschen" },
804{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." }, 804{ "Sorry, no valid port.Syncing cancelled.","Sorry, kein gültiger Port. Syncing abgebrochen." },
805{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" }, 805{ "Remote port number:\n(May be: 1 - 65535)","Ferne Port Nummer:\n(Darf sein: 1 - 65535)" },
806{ "Writing back file ...","Schreibe Datei zurück..." }, 806{ "Writing back file ...","Schreibe Datei zurück..." },
807{ "Sending back file ...","Sende Datei zurück..." }, 807{ "Sending back file ...","Sende Datei zurück..." },
808{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" }, 808{ "Eeek, there I am ticklish!","Huch, da bin ich kitzlig!" },
809{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" }, 809{ "Save using LOCAL storage","Speichere nutze LOCAL Pfad" },
810{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" }, 810{ "...and %1 more\ncontact(s) selected","...und noch %1 Kontakte\n mehr ausgewählt" },
811{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" }, 811{ "Do you really\nwant to delete the\nsetected contact(s)?\n\n","Möchten Sie wirklich\ndie ausgewählten\nKontakte löschen?\n\n" },
812{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." }, 812{ "%1 contacts\nsuccessfully\nimported.","%1 Kontakte\nerfolgreich\nimportiert." },
813{ "Import this contact?","Importiere diesen Kontakt?" }, 813{ "Import this contact?","Importiere diesen Kontakt?" },
814{ "Import all!","Importiere alle!" }, 814{ "Import all!","Importiere alle!" },
815{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" }, 815{ "Loading addressbook data ... please wait","Lade Adressbuchdaten ... bitte warten" },
816{ "Import Format","Import Format" }, 816{ "Import Format","Import Format" },
817{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." }, 817{ "Select import format!\nDefault and standard is Utf8.\nLatin1 may be the right\nfor some West Europian languages.","Wähle Import Format!\nDefault und Standard ist Utf8.\nLatin1 kann das richtige für\nWesteuropäische Sprachen sein." },
818{ "Home2","Privat2" }, 818{ "Home2","Privat2" },
819{ "Work2","Arbeit2" }, 819{ "Work2","Arbeit2" },
820{ "Fax (Work)","Fax (Arbeit)" }, 820{ "Fax (Work)","Fax (Arbeit)" },
821{ "Fax (Home)","Fax (Privat)" }, 821{ "Fax (Home)","Fax (Privat)" },
822{ "Assistent","Sekretär(in)" }, 822{ "Assistent","Sekretär(in)" },
823{ "Company","Firma" }, 823{ "Company","Firma" },
824{ "Mobile2 (work)","Handy2 (Arbeit)" }, 824{ "Mobile2 (Work)","Handy2 (Arbeit)" },
825{ "Mobile2 (car)","Handy2 (Auto)" }, 825{ "Mobile2 (Car)","Handy2 (Auto)" },
826{ "Callback","Rückruf" }, 826{ "Callback","Rückruf" },
827{ "Fax (Other)","Fax (Anderes)" }, 827{ "Fax (Other)","Fax (Anderes)" },
828{ "Primary","Bevorzugt" }, 828{ "Primary","Bevorzugt" },
829{ "Mobile (Home)","Handy (Privat)" }, 829{ "Mobile (Home)","Handy (Privat)" },
830{ "Unfiled","Nicht zugeordnet" }, 830{ "Unfiled","Nicht zugeordnet" },
831{ "Format.n.:","Format.N.:" }, 831{ "Format.n.:","Format.N.:" },
832{ "","" }, 832{ "","" },
833{ "","" }, 833{ "","" },
834{ "","" }, 834{ "","" },
835{ "","" }, 835{ "","" },
836{ "","" }, 836{ "","" },
837{ "","" }, \ No newline at end of file 837{ "","" }, \ No newline at end of file
diff --git a/kabc/addressee.cpp b/kabc/addressee.cpp
index 19c78ee..789a694 100644
--- a/kabc/addressee.cpp
+++ b/kabc/addressee.cpp
@@ -870,407 +870,407 @@ QString Addressee::givenName() const
870 870
871QString Addressee::givenNameLabel() 871QString Addressee::givenNameLabel()
872{ 872{
873 return i18n("Given Name"); 873 return i18n("Given Name");
874} 874}
875 875
876 876
877void Addressee::setAdditionalName( const QString &additionalName ) 877void Addressee::setAdditionalName( const QString &additionalName )
878{ 878{
879 if ( additionalName == mData->additionalName ) return; 879 if ( additionalName == mData->additionalName ) return;
880 detach(); 880 detach();
881 mData->empty = false; 881 mData->empty = false;
882 mData->additionalName = additionalName; 882 mData->additionalName = additionalName;
883} 883}
884 884
885QString Addressee::additionalName() const 885QString Addressee::additionalName() const
886{ 886{
887 return mData->additionalName; 887 return mData->additionalName;
888} 888}
889 889
890QString Addressee::additionalNameLabel() 890QString Addressee::additionalNameLabel()
891{ 891{
892 return i18n("Additional Names"); 892 return i18n("Additional Names");
893} 893}
894 894
895 895
896void Addressee::setPrefix( const QString &prefix ) 896void Addressee::setPrefix( const QString &prefix )
897{ 897{
898 if ( prefix == mData->prefix ) return; 898 if ( prefix == mData->prefix ) return;
899 detach(); 899 detach();
900 mData->empty = false; 900 mData->empty = false;
901 mData->prefix = prefix; 901 mData->prefix = prefix;
902} 902}
903 903
904QString Addressee::prefix() const 904QString Addressee::prefix() const
905{ 905{
906 return mData->prefix; 906 return mData->prefix;
907} 907}
908 908
909QString Addressee::prefixLabel() 909QString Addressee::prefixLabel()
910{ 910{
911 return i18n("Honorific Prefixes"); 911 return i18n("Honorific Prefixes");
912} 912}
913 913
914 914
915void Addressee::setSuffix( const QString &suffix ) 915void Addressee::setSuffix( const QString &suffix )
916{ 916{
917 if ( suffix == mData->suffix ) return; 917 if ( suffix == mData->suffix ) return;
918 detach(); 918 detach();
919 mData->empty = false; 919 mData->empty = false;
920 mData->suffix = suffix; 920 mData->suffix = suffix;
921} 921}
922 922
923QString Addressee::suffix() const 923QString Addressee::suffix() const
924{ 924{
925 return mData->suffix; 925 return mData->suffix;
926} 926}
927 927
928QString Addressee::suffixLabel() 928QString Addressee::suffixLabel()
929{ 929{
930 return i18n("Honorific Suffixes"); 930 return i18n("Honorific Suffixes");
931} 931}
932 932
933 933
934void Addressee::setNickName( const QString &nickName ) 934void Addressee::setNickName( const QString &nickName )
935{ 935{
936 if ( nickName == mData->nickName ) return; 936 if ( nickName == mData->nickName ) return;
937 detach(); 937 detach();
938 mData->empty = false; 938 mData->empty = false;
939 mData->nickName = nickName; 939 mData->nickName = nickName;
940} 940}
941 941
942QString Addressee::nickName() const 942QString Addressee::nickName() const
943{ 943{
944 return mData->nickName; 944 return mData->nickName;
945} 945}
946 946
947QString Addressee::nickNameLabel() 947QString Addressee::nickNameLabel()
948{ 948{
949 return i18n("Nick Name"); 949 return i18n("Nick Name");
950} 950}
951 951
952 952
953void Addressee::setBirthday( const QDateTime &birthday ) 953void Addressee::setBirthday( const QDateTime &birthday )
954{ 954{
955 if ( birthday == mData->birthday ) return; 955 if ( birthday == mData->birthday ) return;
956 detach(); 956 detach();
957 mData->empty = false; 957 mData->empty = false;
958 mData->birthday = birthday; 958 mData->birthday = birthday;
959} 959}
960 960
961QDateTime Addressee::birthday() const 961QDateTime Addressee::birthday() const
962{ 962{
963 return mData->birthday; 963 return mData->birthday;
964} 964}
965 965
966QString Addressee::birthdayLabel() 966QString Addressee::birthdayLabel()
967{ 967{
968 return i18n("Birthday"); 968 return i18n("Birthday");
969} 969}
970 970
971 971
972QString Addressee::homeAddressStreetLabel() 972QString Addressee::homeAddressStreetLabel()
973{ 973{
974 return i18n("Home Address Street"); 974 return i18n("Home Address Street");
975} 975}
976 976
977 977
978QString Addressee::homeAddressLocalityLabel() 978QString Addressee::homeAddressLocalityLabel()
979{ 979{
980 return i18n("Home Address Locality"); 980 return i18n("Home Address Locality");
981} 981}
982 982
983 983
984QString Addressee::homeAddressRegionLabel() 984QString Addressee::homeAddressRegionLabel()
985{ 985{
986 return i18n("Home Address Region"); 986 return i18n("Home Address Region");
987} 987}
988 988
989 989
990QString Addressee::homeAddressPostalCodeLabel() 990QString Addressee::homeAddressPostalCodeLabel()
991{ 991{
992 return i18n("Home Address Postal Code"); 992 return i18n("Home Address Postal Code");
993} 993}
994 994
995 995
996QString Addressee::homeAddressCountryLabel() 996QString Addressee::homeAddressCountryLabel()
997{ 997{
998 return i18n("Home Address Country"); 998 return i18n("Home Address Country");
999} 999}
1000 1000
1001 1001
1002QString Addressee::homeAddressLabelLabel() 1002QString Addressee::homeAddressLabelLabel()
1003{ 1003{
1004 return i18n("Home Address Label"); 1004 return i18n("Home Address Label");
1005} 1005}
1006 1006
1007 1007
1008QString Addressee::businessAddressStreetLabel() 1008QString Addressee::businessAddressStreetLabel()
1009{ 1009{
1010 return i18n("Business Address Street"); 1010 return i18n("Business Address Street");
1011} 1011}
1012 1012
1013 1013
1014QString Addressee::businessAddressLocalityLabel() 1014QString Addressee::businessAddressLocalityLabel()
1015{ 1015{
1016 return i18n("Business Address Locality"); 1016 return i18n("Business Address Locality");
1017} 1017}
1018 1018
1019 1019
1020QString Addressee::businessAddressRegionLabel() 1020QString Addressee::businessAddressRegionLabel()
1021{ 1021{
1022 return i18n("Business Address Region"); 1022 return i18n("Business Address Region");
1023} 1023}
1024 1024
1025 1025
1026QString Addressee::businessAddressPostalCodeLabel() 1026QString Addressee::businessAddressPostalCodeLabel()
1027{ 1027{
1028 return i18n("Business Address Postal Code"); 1028 return i18n("Business Address Postal Code");
1029} 1029}
1030 1030
1031 1031
1032QString Addressee::businessAddressCountryLabel() 1032QString Addressee::businessAddressCountryLabel()
1033{ 1033{
1034 return i18n("Business Address Country"); 1034 return i18n("Business Address Country");
1035} 1035}
1036 1036
1037 1037
1038QString Addressee::businessAddressLabelLabel() 1038QString Addressee::businessAddressLabelLabel()
1039{ 1039{
1040 return i18n("Business Address Label"); 1040 return i18n("Business Address Label");
1041} 1041}
1042 1042
1043 1043
1044QString Addressee::homePhoneLabel() 1044QString Addressee::homePhoneLabel()
1045{ 1045{
1046 return i18n("Home Phone"); 1046 return i18n("Home Phone");
1047} 1047}
1048 1048
1049 1049
1050QString Addressee::businessPhoneLabel() 1050QString Addressee::businessPhoneLabel()
1051{ 1051{
1052 return i18n("Work Phone"); 1052 return i18n("Work Phone");
1053} 1053}
1054 1054
1055 1055
1056QString Addressee::mobilePhoneLabel() 1056QString Addressee::mobilePhoneLabel()
1057{ 1057{
1058 return i18n("Mobile Phone"); 1058 return i18n("Mobile Phone");
1059} 1059}
1060QString Addressee::mobileWorkPhoneLabel() 1060QString Addressee::mobileWorkPhoneLabel()
1061{ 1061{
1062 return i18n("Mobile2 (work)"); 1062 return i18n("Mobile2 (Work)");
1063} 1063}
1064QString Addressee::mobileHomePhoneLabel() 1064QString Addressee::mobileHomePhoneLabel()
1065{ 1065{
1066 return i18n("Mobile (Home)"); 1066 return i18n("Mobile (Home)");
1067} 1067}
1068 1068
1069 1069
1070QString Addressee::homeFaxLabel() 1070QString Addressee::homeFaxLabel()
1071{ 1071{
1072 return i18n("Fax (Home)"); 1072 return i18n("Fax (Home)");
1073} 1073}
1074 1074
1075 1075
1076QString Addressee::businessFaxLabel() 1076QString Addressee::businessFaxLabel()
1077{ 1077{
1078 return i18n("Fax (Work)"); 1078 return i18n("Fax (Work)");
1079} 1079}
1080 1080
1081 1081
1082QString Addressee::carPhoneLabel() 1082QString Addressee::carPhoneLabel()
1083{ 1083{
1084 return i18n("Mobile2 (car)"); 1084 return i18n("Mobile2 (Car)");
1085} 1085}
1086 1086
1087 1087
1088QString Addressee::isdnLabel() 1088QString Addressee::isdnLabel()
1089{ 1089{
1090 return i18n("ISDN"); 1090 return i18n("ISDN");
1091} 1091}
1092 1092
1093 1093
1094QString Addressee::pagerLabel() 1094QString Addressee::pagerLabel()
1095{ 1095{
1096 return i18n("Pager"); 1096 return i18n("Pager");
1097} 1097}
1098 1098
1099QString Addressee::sipLabel() 1099QString Addressee::sipLabel()
1100{ 1100{
1101 return i18n("SIP"); 1101 return i18n("SIP");
1102} 1102}
1103 1103
1104QString Addressee::emailLabel() 1104QString Addressee::emailLabel()
1105{ 1105{
1106 return i18n("Email Address"); 1106 return i18n("Email Address");
1107} 1107}
1108 1108
1109 1109
1110void Addressee::setMailer( const QString &mailer ) 1110void Addressee::setMailer( const QString &mailer )
1111{ 1111{
1112 if ( mailer == mData->mailer ) return; 1112 if ( mailer == mData->mailer ) return;
1113 detach(); 1113 detach();
1114 mData->empty = false; 1114 mData->empty = false;
1115 mData->mailer = mailer; 1115 mData->mailer = mailer;
1116} 1116}
1117 1117
1118QString Addressee::mailer() const 1118QString Addressee::mailer() const
1119{ 1119{
1120 return mData->mailer; 1120 return mData->mailer;
1121} 1121}
1122 1122
1123QString Addressee::mailerLabel() 1123QString Addressee::mailerLabel()
1124{ 1124{
1125 return i18n("Mail Client"); 1125 return i18n("Mail Client");
1126} 1126}
1127 1127
1128 1128
1129void Addressee::setTimeZone( const TimeZone &timeZone ) 1129void Addressee::setTimeZone( const TimeZone &timeZone )
1130{ 1130{
1131 if ( timeZone == mData->timeZone ) return; 1131 if ( timeZone == mData->timeZone ) return;
1132 detach(); 1132 detach();
1133 mData->empty = false; 1133 mData->empty = false;
1134 mData->timeZone = timeZone; 1134 mData->timeZone = timeZone;
1135} 1135}
1136 1136
1137TimeZone Addressee::timeZone() const 1137TimeZone Addressee::timeZone() const
1138{ 1138{
1139 return mData->timeZone; 1139 return mData->timeZone;
1140} 1140}
1141 1141
1142QString Addressee::timeZoneLabel() 1142QString Addressee::timeZoneLabel()
1143{ 1143{
1144 return i18n("Time Zone"); 1144 return i18n("Time Zone");
1145} 1145}
1146 1146
1147 1147
1148void Addressee::setGeo( const Geo &geo ) 1148void Addressee::setGeo( const Geo &geo )
1149{ 1149{
1150 if ( geo == mData->geo ) return; 1150 if ( geo == mData->geo ) return;
1151 detach(); 1151 detach();
1152 mData->empty = false; 1152 mData->empty = false;
1153 mData->geo = geo; 1153 mData->geo = geo;
1154} 1154}
1155 1155
1156Geo Addressee::geo() const 1156Geo Addressee::geo() const
1157{ 1157{
1158 return mData->geo; 1158 return mData->geo;
1159} 1159}
1160 1160
1161QString Addressee::geoLabel() 1161QString Addressee::geoLabel()
1162{ 1162{
1163 return i18n("Geographic Position"); 1163 return i18n("Geographic Position");
1164} 1164}
1165 1165
1166 1166
1167void Addressee::setTitle( const QString &title ) 1167void Addressee::setTitle( const QString &title )
1168{ 1168{
1169 if ( title == mData->title ) return; 1169 if ( title == mData->title ) return;
1170 detach(); 1170 detach();
1171 mData->empty = false; 1171 mData->empty = false;
1172 mData->title = title; 1172 mData->title = title;
1173} 1173}
1174 1174
1175QString Addressee::title() const 1175QString Addressee::title() const
1176{ 1176{
1177 return mData->title; 1177 return mData->title;
1178} 1178}
1179 1179
1180QString Addressee::titleLabel() 1180QString Addressee::titleLabel()
1181{ 1181{
1182 return i18n("Title"); 1182 return i18n("Title");
1183} 1183}
1184 1184
1185 1185
1186void Addressee::setRole( const QString &role ) 1186void Addressee::setRole( const QString &role )
1187{ 1187{
1188 if ( role == mData->role ) return; 1188 if ( role == mData->role ) return;
1189 detach(); 1189 detach();
1190 mData->empty = false; 1190 mData->empty = false;
1191 mData->role = role; 1191 mData->role = role;
1192} 1192}
1193 1193
1194QString Addressee::role() const 1194QString Addressee::role() const
1195{ 1195{
1196 return mData->role; 1196 return mData->role;
1197} 1197}
1198 1198
1199QString Addressee::roleLabel() 1199QString Addressee::roleLabel()
1200{ 1200{
1201 return i18n("Role"); 1201 return i18n("Role");
1202} 1202}
1203 1203
1204 1204
1205void Addressee::setOrganization( const QString &organization ) 1205void Addressee::setOrganization( const QString &organization )
1206{ 1206{
1207 if ( organization == mData->organization ) return; 1207 if ( organization == mData->organization ) return;
1208 detach(); 1208 detach();
1209 mData->empty = false; 1209 mData->empty = false;
1210 mData->organization = organization; 1210 mData->organization = organization;
1211} 1211}
1212 1212
1213QString Addressee::organization() const 1213QString Addressee::organization() const
1214{ 1214{
1215 return mData->organization; 1215 return mData->organization;
1216} 1216}
1217 1217
1218QString Addressee::organizationLabel() 1218QString Addressee::organizationLabel()
1219{ 1219{
1220 return i18n("Organization"); 1220 return i18n("Organization");
1221} 1221}
1222 1222
1223 1223
1224void Addressee::setNote( const QString &note ) 1224void Addressee::setNote( const QString &note )
1225{ 1225{
1226 if ( note == mData->note ) return; 1226 if ( note == mData->note ) return;
1227 detach(); 1227 detach();
1228 mData->empty = false; 1228 mData->empty = false;
1229 mData->note = note; 1229 mData->note = note;
1230} 1230}
1231 1231
1232QString Addressee::note() const 1232QString Addressee::note() const
1233{ 1233{
1234 return mData->note; 1234 return mData->note;
1235} 1235}
1236 1236
1237QString Addressee::noteLabel() 1237QString Addressee::noteLabel()
1238{ 1238{
1239 return i18n("Note"); 1239 return i18n("Note");
1240} 1240}
1241 1241
1242 1242
1243void Addressee::setProductId( const QString &productId ) 1243void Addressee::setProductId( const QString &productId )
1244{ 1244{
1245 if ( productId == mData->productId ) return; 1245 if ( productId == mData->productId ) return;
1246 detach(); 1246 detach();
1247 mData->empty = false; 1247 mData->empty = false;
1248 mData->productId = productId; 1248 mData->productId = productId;
1249} 1249}
1250 1250
1251QString Addressee::productId() const 1251QString Addressee::productId() const
1252{ 1252{
1253 return mData->productId; 1253 return mData->productId;
1254} 1254}
1255 1255
1256QString Addressee::productIdLabel() 1256QString Addressee::productIdLabel()
1257{ 1257{
1258 return i18n("Product Identifier"); 1258 return i18n("Product Identifier");
1259} 1259}
1260 1260
1261 1261
1262void Addressee::setRevision( const QDateTime &revision ) 1262void Addressee::setRevision( const QDateTime &revision )
1263{ 1263{
1264 if ( revision == mData->revision ) return; 1264 if ( revision == mData->revision ) return;
1265 detach(); 1265 detach();
1266 mData->empty = false; 1266 mData->empty = false;
1267 mData->revision = QDateTime( revision.date(), 1267 mData->revision = QDateTime( revision.date(),
1268 QTime (revision.time().hour(), 1268 QTime (revision.time().hour(),
1269 revision.time().minute(), 1269 revision.time().minute(),
1270 revision.time().second())); 1270 revision.time().second()));
1271} 1271}
1272 1272
1273QDateTime Addressee::revision() const 1273QDateTime Addressee::revision() const
1274{ 1274{
1275 return mData->revision; 1275 return mData->revision;
1276} 1276}
diff --git a/kabc/addresseeview.cpp b/kabc/addresseeview.cpp
index 05d604f..aae923c 100644
--- a/kabc/addresseeview.cpp
+++ b/kabc/addresseeview.cpp
@@ -395,316 +395,318 @@ void AddresseeView::setAddressee( const KABC::Addressee& mAddressee )
395 bool picAvailUrl = false; 395 bool picAvailUrl = false;
396 if (! picture.undefined() ) { 396 if (! picture.undefined() ) {
397 picAvailintern = (picture.isIntern() && !picture.data().isNull()); 397 picAvailintern = (picture.isIntern() && !picture.data().isNull());
398 picAvailUrl = !picture.isIntern() && QFile::exists(picture.url() ); 398 picAvailUrl = !picture.isIntern() && QFile::exists(picture.url() );
399 } 399 }
400 if ( picAvailUrl || picAvailintern || QApplication::desktop()->width() > 320 ) { 400 if ( picAvailUrl || picAvailintern || QApplication::desktop()->width() > 320 ) {
401 picString = "<img src=\"myimage\" width=\"50\" height=\"70\">"; 401 picString = "<img src=\"myimage\" width=\"50\" height=\"70\">";
402 if ( picAvailintern ) { 402 if ( picAvailintern ) {
403 QMimeSourceFactory::defaultFactory()->setImage( "myimage", picture.data() ); 403 QMimeSourceFactory::defaultFactory()->setImage( "myimage", picture.data() );
404 int wid = picture.data().width(); 404 int wid = picture.data().width();
405 int hei = picture.data().height(); 405 int hei = picture.data().height();
406 if ( wid > 128 || hei > 128 ) { 406 if ( wid > 128 || hei > 128 ) {
407 if ( wid > hei ) { 407 if ( wid > hei ) {
408 hei = (hei*128)/wid; 408 hei = (hei*128)/wid;
409 wid = 128; 409 wid = 128;
410 } else { 410 } else {
411 wid = (wid*128)/hei; 411 wid = (wid*128)/hei;
412 hei = 128; 412 hei = 128;
413 } 413 }
414 } 414 }
415 picString = QString("<img src=\"myimage\" width=\"%1\" height=\"%2\">").arg(wid).arg(hei); 415 picString = QString("<img src=\"myimage\" width=\"%1\" height=\"%2\">").arg(wid).arg(hei);
416 } else { 416 } else {
417 if ( picAvailUrl ) { 417 if ( picAvailUrl ) {
418 QPixmap picPix( picture.url() ); 418 QPixmap picPix( picture.url() );
419 QMimeSourceFactory::defaultFactory()->setPixmap( "myimage", picPix ); 419 QMimeSourceFactory::defaultFactory()->setPixmap( "myimage", picPix );
420 int wid = picPix.width(); 420 int wid = picPix.width();
421 int hei = picPix.height(); 421 int hei = picPix.height();
422 if ( wid > 128 || hei > 128 ) { 422 if ( wid > 128 || hei > 128 ) {
423 if ( wid > hei ) { 423 if ( wid > hei ) {
424 hei = (hei*128)/wid; 424 hei = (hei*128)/wid;
425 wid = 128; 425 wid = 128;
426 } else { 426 } else {
427 wid = (wid*128)/hei; 427 wid = (wid*128)/hei;
428 hei = 128; 428 hei = 128;
429 } 429 }
430 } 430 }
431 picString = QString("<img src=\"myimage\" width=\"%1\" height=\"%2\">").arg(wid).arg(hei); 431 picString = QString("<img src=\"myimage\" width=\"%1\" height=\"%2\">").arg(wid).arg(hei);
432 } else { 432 } else {
433 if ( !mAddressee.custom( "KADDRESSBOOK", "X-Children" ).isEmpty() ) { 433 if ( !mAddressee.custom( "KADDRESSBOOK", "X-Children" ).isEmpty() ) {
434 static bool setDefaultImageChildren = false; 434 static bool setDefaultImageChildren = false;
435 if ( !setDefaultImageChildren ) { 435 if ( !setDefaultImageChildren ) {
436 QMimeSourceFactory::defaultFactory()->setPixmap( "familyIcon", KGlobal::iconLoader()->loadIcon( "ic_kids", KIcon::Desktop, 128 ) ); 436 QMimeSourceFactory::defaultFactory()->setPixmap( "familyIcon", KGlobal::iconLoader()->loadIcon( "ic_kids", KIcon::Desktop, 128 ) );
437 setDefaultImageChildren = true; 437 setDefaultImageChildren = true;
438 } 438 }
439 picString = "<img src=\"familyIcon\" width=\"64\" height=\"64\">"; 439 picString = "<img src=\"familyIcon\" width=\"64\" height=\"64\">";
440 440
441 } else if ( !mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ).isEmpty() ) { 441 } else if ( !mAddressee.custom( "KADDRESSBOOK", "X-SpousesName" ).isEmpty() ) {
442 static bool setDefaultImagepouses = false; 442 static bool setDefaultImagepouses = false;
443 if ( !setDefaultImagepouses ) { 443 if ( !setDefaultImagepouses ) {
444 QMimeSourceFactory::defaultFactory()->setPixmap( "SpousesIcon", KGlobal::iconLoader()->loadIcon( "ic_family", KIcon::Desktop, 128 ) ); 444 QMimeSourceFactory::defaultFactory()->setPixmap( "SpousesIcon", KGlobal::iconLoader()->loadIcon( "ic_family", KIcon::Desktop, 128 ) );
445 setDefaultImagepouses = true; 445 setDefaultImagepouses = true;
446 } 446 }
447 picString = "<img src=\"SpousesIcon\" width=\"64\" height=\"64\">"; 447 picString = "<img src=\"SpousesIcon\" width=\"64\" height=\"64\">";
448 } else { 448 } else {
449 QString gen = mAddressee.custom( "KADDRESSBOOK", "X-Gender" ); 449 QString gen = mAddressee.custom( "KADDRESSBOOK", "X-Gender" );
450 if ( gen == "male" ) { 450 if ( gen == "male" ) {
451 static bool setDefaultImageMale = false; 451 static bool setDefaultImageMale = false;
452 if ( !setDefaultImageMale ) { 452 if ( !setDefaultImageMale ) {
453 QMimeSourceFactory::defaultFactory()->setPixmap( "MaleIcon", KGlobal::iconLoader()->loadIcon( "ic_male", KIcon::Desktop, 128 ) ); 453 QMimeSourceFactory::defaultFactory()->setPixmap( "MaleIcon", KGlobal::iconLoader()->loadIcon( "ic_male", KIcon::Desktop, 128 ) );
454 setDefaultImageMale = true; 454 setDefaultImageMale = true;
455 } 455 }
456 picString = "<img src=\"MaleIcon\" width=\"64\" height=\"64\">"; 456 picString = "<img src=\"MaleIcon\" width=\"64\" height=\"64\">";
457 457
458 } else if ( gen == "female" ) { 458 } else if ( gen == "female" ) {
459 static bool setDefaultImageFemale = false; 459 static bool setDefaultImageFemale = false;
460 if ( !setDefaultImageFemale ) { 460 if ( !setDefaultImageFemale ) {
461 QMimeSourceFactory::defaultFactory()->setPixmap( "FemaleIcon", KGlobal::iconLoader()->loadIcon( "ic_female", KIcon::Desktop, 128 ) ); 461 QMimeSourceFactory::defaultFactory()->setPixmap( "FemaleIcon", KGlobal::iconLoader()->loadIcon( "ic_female", KIcon::Desktop, 128 ) );
462 setDefaultImageFemale = true; 462 setDefaultImageFemale = true;
463 } 463 }
464 picString = "<img src=\"FemaleIcon\" width=\"64\" height=\"64\">"; 464 picString = "<img src=\"FemaleIcon\" width=\"64\" height=\"64\">";
465 465
466 } else { 466 } else {
467 static bool setDefaultImage = false; 467 static bool setDefaultImage = false;
468 if ( !setDefaultImage ) { 468 if ( !setDefaultImage ) {
469 //qDebug("Setting default pixmap "); 469 //qDebug("Setting default pixmap ");
470 QMimeSourceFactory::defaultFactory()->setPixmap( "defaultIcon", KGlobal::iconLoader()->loadIcon( "ic_penguin", KIcon::Desktop, 128 ) ); 470 QMimeSourceFactory::defaultFactory()->setPixmap( "defaultIcon", KGlobal::iconLoader()->loadIcon( "ic_penguin", KIcon::Desktop, 128 ) );
471 setDefaultImage = true; 471 setDefaultImage = true;
472 } 472 }
473 picString = "<img src=\"defaultIcon\" width=\"64\" height=\"64\">"; 473 picString = "<img src=\"defaultIcon\" width=\"64\" height=\"64\">";
474 } 474 }
475 } 475 }
476 } 476 }
477 } 477 }
478 mText = QString::fromLatin1( 478 mText = QString::fromLatin1(
479 "<html>" 479 "<html>"
480 "<body text=\"%1\" bgcolor=\"%2\">" // text and background color 480 "<body text=\"%1\" bgcolor=\"%2\">" // text and background color
481 "<table>" 481 "<table>"
482 "<tr>" 482 "<tr>"
483 "<td rowspan=\"3\" align=\"right\" valign=\"top\">" 483 "<td rowspan=\"3\" align=\"right\" valign=\"top\">"
484 "%3" 484 "%3"
485 "</td>" 485 "</td>"
486 "<td align=\"left\"><font size=\"+2\"><b>%4</b></font></td>" // name 486 "<td align=\"left\"><font size=\"+2\"><b>%4</b></font></td>" // name
487 "</tr>" 487 "</tr>"
488 "%5" // role 488 "%5" // role
489 "%6" // organization 489 "%6" // organization
490 "<td colspan=\"2\">&nbsp;</td>" 490 "<td colspan=\"2\">&nbsp;</td>"
491 "%7" // dynamic part 491 "%7" // dynamic part
492 "%8" // notes 492 "%8" // notes
493 "</table>" 493 "</table>"
494 "</body>" 494 "</body>"
495 "</html>") 495 "</html>")
496//US 496//US
497 .arg( /*KGlobalSettings::textColor().name()*/ "black" ) 497 .arg( /*KGlobalSettings::textColor().name()*/ "black" )
498//US 498//US
499 .arg( /*KGlobalSettings::baseColor().name()*/ "white" ) 499 .arg( /*KGlobalSettings::baseColor().name()*/ "white" )
500 .arg( picString ) 500 .arg( picString )
501 .arg( name ) 501 .arg( name )
502 .arg( aRole ) 502 .arg( aRole )
503 .arg( aOrga ) 503 .arg( aOrga )
504 .arg( dynamicPart ) 504 .arg( dynamicPart )
505 .arg( notes ); 505 .arg( notes );
506 506
507 } else { // no picture! 507 } else { // no picture!
508 508
509mText = "<table width=\"100%\">\n"; 509mText = "<table width=\"100%\">\n";
510 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>"; 510 //mText += "<tr bgcolor=\"#3679AD\"><td><h2>";
511#ifdef DESKTOP_VERSION 511#ifdef DESKTOP_VERSION
512 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h1>"; 512 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h1>";
513 mText += "<font color=\"#FFFFFF\">" + name +"</font></h1>"; 513 mText += "<font color=\"#FFFFFF\">" + name +"</font></h1>";
514#else 514#else
515 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h3>"; 515 mText += "<tr bgcolor=\"#5699CD\"><td align=\"left\"><h3>";
516 mText += "<font color=\"#FFFFFF\"> " + name +"</font></h3>"; 516 mText += "<font color=\"#FFFFFF\"> " + name +"</font></h3>";
517#endif 517#endif
518 518
519 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>"; 519 mText += "</td></tr>\n<tr bgcolor=\"#EAF8FA\"><td>";
520 520
521 mText += "<table><td colspan=\"2\">&nbsp;</td>"; 521 mText += "<table><td colspan=\"2\">&nbsp;</td>";
522 /* 522 /*
523 mText += QString("<tr><td align=\"right\"><b2>%1</b2></td>" 523 mText += QString("<tr><td align=\"right\"><b2>%1</b2></td>"
524 "<td align=\"left\"><b>%2</b></td></tr>" ) 524 "<td align=\"left\"><b>%2</b></td></tr>" )
525 .arg( i18n(" ") ) 525 .arg( i18n(" ") )
526 .arg( name ); 526 .arg( name );
527 */ 527 */
528 if ( ! mAddressee.role().isEmpty() ) 528 if ( ! mAddressee.role().isEmpty() )
529 mText += QString("<tr><td align=\"right\"><b>%1</b></td>" 529 mText += QString("<tr><td align=\"right\"><b>%1</b></td>"
530 "<td align=\"left\">%2</td></tr>" ) 530 "<td align=\"left\">%2</td></tr>" )
531 .arg( i18n(" ") ) 531 .arg( i18n(" ") )
532 .arg( mAddressee.role()); 532 .arg( mAddressee.role());
533 if ( ! mAddressee.organization().isEmpty() ) 533 if ( ! mAddressee.organization().isEmpty() )
534 mText += QString("<tr><td align=\"right\"><b>%1</b></td>" 534 mText += QString("<tr><td align=\"right\"><b>%1</b></td>"
535 "<td align=\"left\">%2</td></tr>" ) 535 "<td align=\"left\">%2</td></tr>" )
536 .arg( i18n(" ") ) 536 .arg( i18n(" ") )
537 .arg( mAddressee.organization()); 537 .arg( mAddressee.organization());
538 mText += dynamicPart; 538 mText += dynamicPart;
539 mText += notes; 539 mText += notes;
540 mText += "</table>"; 540 mText += "</table>";
541 541
542 } 542 }
543 543
544 // at last display it... 544 // at last display it...
545 setText( mText ); 545 setText( mText );
546 546
547} 547}
548 548
549QString AddresseeView::getPhoneNumbers( KABC::PhoneNumber::List phones ,bool preferred ) 549QString AddresseeView::getPhoneNumbers( KABC::PhoneNumber::List phones ,bool preferred )
550{ 550{
551 ExternalAppHandler* eah = ExternalAppHandler::instance(); 551 ExternalAppHandler* eah = ExternalAppHandler::instance();
552 bool kphoneAvail = eah->isPhoneAppAvailable(); 552 bool kphoneAvail = eah->isPhoneAppAvailable();
553 bool kfaxAvail = eah->isFaxAppAvailable(); 553 bool kfaxAvail = eah->isFaxAppAvailable();
554 bool ksmsAvail = eah->isSMSAppAvailable(); 554 bool ksmsAvail = eah->isSMSAppAvailable();
555 bool kpagerAvail = eah->isPagerAppAvailable(); 555 bool kpagerAvail = eah->isPagerAppAvailable();
556 bool ksipAvail = eah->isSIPAppAvailable(); 556 bool ksipAvail = eah->isSIPAppAvailable();
557 QString dynamicPart; 557 QString dynamicPart;
558 KABC::PhoneNumber::List::ConstIterator phoneIt; 558 KABC::PhoneNumber::List::ConstIterator phoneIt;
559 QString extension; 559 QString extension;
560 int phonetype; 560 int phonetype;
561 QString sms; 561 QString sms;
562 for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) { 562 for ( phoneIt = phones.begin(); phoneIt != phones.end(); ++phoneIt ) {
563 phonetype = (*phoneIt).type(); 563 phonetype = (*phoneIt).type();
564 if ( ((phonetype & KABC::PhoneNumber::Pref) == 0 ) == preferred ) 564 if ( ((phonetype & KABC::PhoneNumber::Pref) == 0 ) == preferred )
565 continue; 565 continue;
566 if (ksmsAvail && 566 if (ksmsAvail &&
567 ( 567 (
568 ((phonetype & KABC::PhoneNumber::Car) == KABC::PhoneNumber::Car) || 568 ((phonetype & KABC::PhoneNumber::Car) == KABC::PhoneNumber::Car) ||
569 ((phonetype & KABC::PhoneNumber::Cell) == KABC::PhoneNumber::Cell) 569 ((phonetype & KABC::PhoneNumber::Cell) == KABC::PhoneNumber::Cell)
570 ) 570 )
571 ) 571 )
572 { 572 {
573 sms = QString("<a href=\"smsto:%1 \">(sms)</a>" ) 573 sms = QString("<a href=\"smsto:%1 \">(sms)</a>" )
574 .arg( (*phoneIt).number() ); 574 .arg( (*phoneIt).number() );
575 575
576 } 576 }
577 else 577 else
578 sms = ""; 578 sms = "";
579 579
580 extension = QString::null; 580 extension = QString::null;
581 if ((phonetype & KABC::PhoneNumber::Fax) == KABC::PhoneNumber::Fax) { 581 if ((phonetype & KABC::PhoneNumber::Fax) == KABC::PhoneNumber::Fax) {
582 if (kfaxAvail) extension = "faxto:"; 582 if (kfaxAvail) extension = "faxto:";
583 } 583 }
584 else if ((phonetype & KABC::PhoneNumber::Pager) == KABC::PhoneNumber::Pager) { 584 else if ((phonetype & KABC::PhoneNumber::Pager) == KABC::PhoneNumber::Pager) {
585 if (kpagerAvail) extension = "pagerto:"; 585 if (kpagerAvail) extension = "pagerto:";
586 } 586 }
587#if 0
587 else if ((phonetype & KABC::PhoneNumber::Sip) == KABC::PhoneNumber::Sip) { 588 else if ((phonetype & KABC::PhoneNumber::Sip) == KABC::PhoneNumber::Sip) {
588 if (ksipAvail) extension = "sipto:"; 589 if (ksipAvail) extension = "sipto:";
589 } 590 }
591#endif
590 else if (kphoneAvail) { 592 else if (kphoneAvail) {
591 extension = "phoneto:"; 593 extension = "phoneto:";
592 } 594 }
593 else 595 else
594 extension = QString::null; 596 extension = QString::null;
595 597
596 if ( !extension.isEmpty() ) { 598 if ( !extension.isEmpty() ) {
597 dynamicPart += QString( 599 dynamicPart += QString(
598 "<tr><td align=\"right\"><b>%1</b></td>" 600 "<tr><td align=\"right\"><b>%1</b></td>"
599 "<td align=\"left\"><a href=\"%2%3 \">%4</a> %5</td></tr>" ) 601 "<td align=\"left\"><a href=\"%2%3 \">%4</a> %5</td></tr>" )
600 .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) 602 .arg( KABC::PhoneNumber::typeLabel( phonetype ) )
601 .arg( extension ) 603 .arg( extension )
602 .arg( (*phoneIt).number() ) 604 .arg( (*phoneIt).number() )
603 .arg( (*phoneIt).number() ) 605 .arg( (*phoneIt).number() )
604 .arg( sms ); 606 .arg( sms );
605 607
606 } else { 608 } else {
607 dynamicPart += QString( 609 dynamicPart += QString(
608 "<tr><td align=\"right\"><b>%1</b></td>" 610 "<tr><td align=\"right\"><b>%1</b></td>"
609 "<td align=\"left\">%2 %3</td></tr>" ) 611 "<td align=\"left\">%2 %3</td></tr>" )
610 .arg( KABC::PhoneNumber::typeLabel( phonetype ) ) 612 .arg( KABC::PhoneNumber::typeLabel( phonetype ) )
611 .arg( (*phoneIt).number() ) 613 .arg( (*phoneIt).number() )
612 .arg( sms ); 614 .arg( sms );
613 } 615 }
614 } 616 }
615 return dynamicPart; 617 return dynamicPart;
616} 618}
617/* 619/*
618KABC::Addressee AddresseeView::addressee() const 620KABC::Addressee AddresseeView::addressee() const
619{ 621{
620 return mAddressee; 622 return mAddressee;
621} 623}
622*/ 624*/
623void AddresseeView::addTag(const QString & tag,const QString & text) 625void AddresseeView::addTag(const QString & tag,const QString & text)
624{ 626{
625 if ( text.isEmpty() ) 627 if ( text.isEmpty() )
626 return; 628 return;
627 int number=text.contains("\n"); 629 int number=text.contains("\n");
628 QString str = "<" + tag + ">"; 630 QString str = "<" + tag + ">";
629 QString tmpText=text; 631 QString tmpText=text;
630 QString tmpStr=str; 632 QString tmpStr=str;
631 if(number !=-1) 633 if(number !=-1)
632 { 634 {
633 if (number > 0) { 635 if (number > 0) {
634 int pos=0; 636 int pos=0;
635 QString tmp; 637 QString tmp;
636 for(int i=0;i<=number;i++) { 638 for(int i=0;i<=number;i++) {
637 pos=tmpText.find("\n"); 639 pos=tmpText.find("\n");
638 tmp=tmpText.left(pos); 640 tmp=tmpText.left(pos);
639 tmpText=tmpText.right(tmpText.length()-pos-1); 641 tmpText=tmpText.right(tmpText.length()-pos-1);
640 tmpStr+=tmp+"<br>"; 642 tmpStr+=tmp+"<br>";
641 } 643 }
642 } 644 }
643 else tmpStr += tmpText; 645 else tmpStr += tmpText;
644 tmpStr+="</" + tag + ">"; 646 tmpStr+="</" + tag + ">";
645 mText.append(tmpStr); 647 mText.append(tmpStr);
646 } 648 }
647 else 649 else
648 { 650 {
649 str += text + "</" + tag + ">"; 651 str += text + "</" + tag + ">";
650 mText.append(str); 652 mText.append(str);
651 } 653 }
652} 654}
653 655
654AddresseeChooser::AddresseeChooser( KABC::Addressee loc, KABC::Addressee rem, bool takeloc, QWidget *parent, const char *name ) : KDialogBase(parent,name, 656AddresseeChooser::AddresseeChooser( KABC::Addressee loc, KABC::Addressee rem, bool takeloc, QWidget *parent, const char *name ) : KDialogBase(parent,name,
655 true ,i18n("Conflict! Please choose Adressee!"),Ok|User1|Close,Close, false) 657 true ,i18n("Conflict! Please choose Adressee!"),Ok|User1|Close,Close, false)
656{ 658{
657 findButton( Close )->setText( i18n("Cancel Sync")); 659 findButton( Close )->setText( i18n("Cancel Sync"));
658 findButton( Ok )->setText( i18n("Remote")); 660 findButton( Ok )->setText( i18n("Remote"));
659 findButton( User1 )->setText( i18n("Local")); 661 findButton( User1 )->setText( i18n("Local"));
660 QWidget* topframe = new QWidget( this ); 662 QWidget* topframe = new QWidget( this );
661 setMainWidget( topframe ); 663 setMainWidget( topframe );
662 QBoxLayout* bl; 664 QBoxLayout* bl;
663 if ( QApplication::desktop()->width() < 640 ) { 665 if ( QApplication::desktop()->width() < 640 ) {
664 bl = new QVBoxLayout( topframe ); 666 bl = new QVBoxLayout( topframe );
665 } else { 667 } else {
666 bl = new QHBoxLayout( topframe ); 668 bl = new QHBoxLayout( topframe );
667 } 669 }
668 QVBox* subframe = new QVBox( topframe ); 670 QVBox* subframe = new QVBox( topframe );
669 bl->addWidget(subframe ); 671 bl->addWidget(subframe );
670 QLabel* lab = new QLabel( i18n("Local Addressee"), subframe ); 672 QLabel* lab = new QLabel( i18n("Local Addressee"), subframe );
671 if ( takeloc ) 673 if ( takeloc )
672 lab->setBackgroundColor(Qt::green.light() ); 674 lab->setBackgroundColor(Qt::green.light() );
673 AddresseeView * av = new AddresseeView( subframe ); 675 AddresseeView * av = new AddresseeView( subframe );
674 av->setAddressee( loc ); 676 av->setAddressee( loc );
675 subframe = new QVBox( topframe ); 677 subframe = new QVBox( topframe );
676 bl->addWidget(subframe ); 678 bl->addWidget(subframe );
677 lab = new QLabel( i18n("Remote Addressee"), subframe ); 679 lab = new QLabel( i18n("Remote Addressee"), subframe );
678 if ( !takeloc ) 680 if ( !takeloc )
679 lab->setBackgroundColor(Qt::green.light() ); 681 lab->setBackgroundColor(Qt::green.light() );
680 av = new AddresseeView( subframe ); 682 av = new AddresseeView( subframe );
681 av->setAddressee( rem ); 683 av->setAddressee( rem );
682 QObject::connect(findButton( Ok ),SIGNAL(clicked()),this, SLOT(slot_remote())); 684 QObject::connect(findButton( Ok ),SIGNAL(clicked()),this, SLOT(slot_remote()));
683 QObject::connect(this,SIGNAL(user1Clicked()),this, SLOT(slot_local())); 685 QObject::connect(this,SIGNAL(user1Clicked()),this, SLOT(slot_local()));
684#ifndef DESKTOP_VERSION 686#ifndef DESKTOP_VERSION
685 showMaximized(); 687 showMaximized();
686#else 688#else
687 resize ( 640, 400 ); 689 resize ( 640, 400 );
688#endif 690#endif
689} 691}
690 692
691int AddresseeChooser::executeD( bool local ) 693int AddresseeChooser::executeD( bool local )
692{ 694{
693 mSyncResult = 3; 695 mSyncResult = 3;
694 if ( local ) 696 if ( local )
695 findButton( User1 )->setFocus(); 697 findButton( User1 )->setFocus();
696 else 698 else
697 findButton( Ok )->setFocus(); 699 findButton( Ok )->setFocus();
698 exec(); 700 exec();
699 return mSyncResult; 701 return mSyncResult;
700} 702}
701void AddresseeChooser::slot_remote() 703void AddresseeChooser::slot_remote()
702{ 704{
703 mSyncResult = 2; 705 mSyncResult = 2;
704 accept(); 706 accept();
705} 707}
706void AddresseeChooser::slot_local() 708void AddresseeChooser::slot_local()
707{ 709{
708 mSyncResult = 1; 710 mSyncResult = 1;
709 accept(); 711 accept();
710} 712}
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp
index 2bce39a..b20275d 100644
--- a/kaddressbook/phoneeditwidget.cpp
+++ b/kaddressbook/phoneeditwidget.cpp
@@ -1,244 +1,354 @@
1/* 1/*
2 This file is part of KAddressBook. 2 This file is part of KAddressBook.
3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 3 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qlayout.h> 24#include <qlayout.h>
25#include <qlabel.h> 25#include <qlabel.h>
26#include <qtooltip.h> 26#include <qtooltip.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28#include <qcheckbox.h> 28#include <qcheckbox.h>
29#include <qstring.h> 29#include <qstring.h>
30#include <qlistbox.h> 30#include <qlistbox.h>
31#include <qlistview.h> 31#include <qlistview.h>
32#include <qbuttongroup.h> 32#include <qbuttongroup.h>
33#include <qhbox.h>
33 34
34#include <kbuttonbox.h> 35#include <kbuttonbox.h>
35#include <klistview.h> 36#include <klistview.h>
36#include <kapplication.h> 37#include <kapplication.h>
37#include <qapplication.h> 38#include <qapplication.h>
38#include <kconfig.h> 39#include <kconfig.h>
39#include <klineedit.h> 40#include <klineedit.h>
40#include <kcombobox.h> 41#include <kcombobox.h>
41#include <klocale.h> 42#include <klocale.h>
42#include <kdebug.h> 43#include <kdebug.h>
43#include <kglobal.h> 44#include <kglobal.h>
44#include <kiconloader.h> 45#include <kiconloader.h>
45 46
46#include <kabc/phonenumber.h> 47#include <kabc/phonenumber.h>
47 48
48#include "typecombo.h" 49#include "typecombo.h"
49 50
50#include "phoneeditwidget.h" 51#include "phoneeditwidget.h"
51 52
52PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name ) 53PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
54 : QScrollView(parent,name)
55{
56 setFrameStyle ( QFrame::Panel | QFrame::Plain );
57 setLineWidth ( 1 );
58 setMidLineWidth ( 1 );
59 mw = new QWidget ( viewport() );
60 addChild(mw);
61 setResizePolicy( AutoOneFit );
62 mainLayout = new QVBoxLayout ( mw );
63 mainLayout->setMargin( 2 );
64 mainLayout->setSpacing( 2 );
65 QWidget* hb = new QWidget ( mw );
66 mainLayout->add( hb );
67 QHBoxLayout* hbLayout = new QHBoxLayout ( hb );
68 QPushButton *addBut = new QPushButton ( "add", hb );
69 hbLayout->add( addBut );
70 addBut->setPixmap ( SmallIcon("plus"));
71 addBut->setMaximumSize( addBut->sizeHint().height(),addBut->sizeHint().height() );
72 connect(addBut,SIGNAL(clicked()),SLOT(addNumber()));
73 //QLabel * temp = new QLabel( i18n("Phone Type"), hb );
74 QLabel *temp = new QLabel( i18n("Phone Number"),hb );
75 temp->setAlignment( Qt::AlignCenter );
76 temp->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
77 hbLayout->add( temp );
78 appendEditCombo();
79 appendEditCombo();
80 appendEditCombo();
81 setDefaults();
82}
83
84PhoneEditWidget::~PhoneEditWidget()
85{
86}
87void PhoneEditWidget::setDefaults()
88{
89 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
90 KABC::PhoneNumber phoneNumber;
91 phoneNumber.setType( KABC::PhoneNumber::Home | KABC::PhoneNumber::Pref );
92 edit->setPhoneNumber( phoneNumber );
93 edit = mTypeNumberEditList.next();
94 phoneNumber.setType( KABC::PhoneNumber::Work | KABC::PhoneNumber::Pref );
95 edit->setPhoneNumber( phoneNumber );
96 edit = mTypeNumberEditList.next();
97 phoneNumber.setType( KABC::PhoneNumber::Cell );
98 edit->setPhoneNumber( phoneNumber );
99 edit = mTypeNumberEditList.next();
100 while ( edit ) {
101 edit->hide();
102 edit = mTypeNumberEditList.next();
103 }
104}
105void PhoneEditWidget::addNumber()
106{
107
108}
109PhoneTypeNumberEdit* PhoneEditWidget::appendEditCombo()
110{
111 PhoneTypeNumberEdit* edit = new PhoneTypeNumberEdit( mw );
112 connect ( edit, SIGNAL ( typeChange( int , int) ), this, SIGNAL ( typeChange( int , int)) );
113 connect ( edit, SIGNAL ( modified() ), this, SIGNAL ( modified() ) );
114 connect ( this, SIGNAL ( typeChange( int , int)), edit, SLOT ( typeExternalChanged( int, int)) );
115
116 mainLayout->add( edit );
117 mTypeNumberEditList.append( edit );
118 return edit;
119}
120
121void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &li )
122{
123 if ( li.isEmpty() ) {
124 setDefaults();
125 return;
126 }
127 KABC::PhoneNumber::List::Iterator it;
128 KABC::PhoneNumber::List list = li;
129 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
130 for ( it = list.begin(); it != list.end(); ++it ) {
131 if ( edit ) {
132 edit->setPhoneNumber( (*it ) );
133 edit = mTypeNumberEditList.next();
134 } else {
135 PhoneTypeNumberEdit* editNew = appendEditCombo();
136 editNew->setPhoneNumber( (*it ) );
137 }
138 }
139 while ( edit ) {
140 edit->hide();
141 edit = mTypeNumberEditList.next();
142 }
143 //mainLayout->invalidate ();
144 mw->update();
145}
146KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
147{
148 KABC::PhoneNumber::List retList;
149
150 PhoneTypeNumberEdit* edit = mTypeNumberEditList.first();
151 while ( edit ) {
152 if ( edit->isValid() ) {
153 retList.append( edit->phoneNumber());
154 }
155 edit = mTypeNumberEditList.next();
156
157 }
158 return retList;
159}
160
161#if 0
162PhoneEditWidget::PhoneEditWidget( QWidget *parent, const char *name )
53 : QWidget( parent, name ) 163 : QWidget( parent, name )
54{ 164{
55 QGridLayout *layout = new QGridLayout( this, 4, 1 ); 165 QGridLayout *layout = new QGridLayout( this, 4, 1 );
56//US layout->setSpacing( KDialog::spacingHint() ); 166//US layout->setSpacing( KDialog::spacingHint() );
57 layout->setSpacing( KDialogBase::spacingHintSmall() ); 167 layout->setSpacing( KDialogBase::spacingHintSmall() );
58 168
59 169
60 170
61 QLabel* label = new QLabel( this ); 171 QLabel* label = new QLabel( this );
62//US loadIcon call is ambiguous. Add one more parameter 172//US loadIcon call is ambiguous. Add one more parameter
63//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) ); 173//US label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop ) );
64 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) ); 174 label->setPixmap( KGlobal::iconLoader()->loadIcon( "kaddressbook", KIcon::Desktop, 0 ) );
65 label->setAlignment( AlignCenter ); 175 label->setAlignment( AlignCenter );
66//US layout->addMultiCellWidget( label, 0, 1, 3, 3 ); 176//US layout->addMultiCellWidget( label, 0, 1, 3, 3 );
67 layout->addWidget( label, 0, 0 ); 177 layout->addWidget( label, 0, 0 );
68 178
69 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ), 179 QPushButton *editButton = new QPushButton( i18n( "Edit Phone Numbers..." ),
70 this ); 180 this );
71 if ( QApplication::desktop()->width() < 640 ) 181 if ( QApplication::desktop()->width() < 640 )
72 layout->addWidget( editButton, 0, 1 ); 182 layout->addWidget( editButton, 0, 1 );
73 else 183 else
74 layout->addMultiCellWidget( editButton, 0, 0, 1, 3); 184 layout->addMultiCellWidget( editButton, 0, 0, 1, 3);
75 185
76 mPrefCombo = new PhoneTypeCombo( mPhoneList, this ); 186 mPrefCombo = new PhoneTypeCombo( mPhoneList, this );
77 mPrefEdit = new KLineEdit( this ); 187 mPrefEdit = new KLineEdit( this );
78 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) ); 188 //mPrefEdit->setMinimumWidth( int(mPrefEdit->sizeHint().width() * 1.5) );
79 mPrefCombo->setLineEdit( mPrefEdit ); 189 mPrefCombo->setLineEdit( mPrefEdit );
80 layout->addWidget( mPrefCombo, 1, 0 ); 190 layout->addWidget( mPrefCombo, 1, 0 );
81 layout->addWidget( mPrefEdit, 1, 1 ); 191 layout->addWidget( mPrefEdit, 1, 1 );
82 int x = 1, y = 2; 192 int x = 1, y = 2;
83 if ( QApplication::desktop()->width() < 640 ) { 193 if ( QApplication::desktop()->width() < 640 ) {
84 ++x; 194 ++x;
85 y = 0; 195 y = 0;
86 } 196 }
87 mSecondCombo = new PhoneTypeCombo( mPhoneList, this ); 197 mSecondCombo = new PhoneTypeCombo( mPhoneList, this );
88 mSecondEdit = new KLineEdit( this ); 198 mSecondEdit = new KLineEdit( this );
89 mSecondCombo->setLineEdit( mSecondEdit ); 199 mSecondCombo->setLineEdit( mSecondEdit );
90 layout->addWidget( mSecondCombo, x, y++ ); 200 layout->addWidget( mSecondCombo, x, y++ );
91 layout->addWidget( mSecondEdit, x, y++ ); 201 layout->addWidget( mSecondEdit, x, y++ );
92 202
93 y = 0; 203 y = 0;
94 ++x; 204 ++x;
95 mThirdCombo = new PhoneTypeCombo( mPhoneList, this ); 205 mThirdCombo = new PhoneTypeCombo( mPhoneList, this );
96 mThirdEdit = new KLineEdit( this ); 206 mThirdEdit = new KLineEdit( this );
97 mThirdCombo->setLineEdit( mThirdEdit ); 207 mThirdCombo->setLineEdit( mThirdEdit );
98 layout->addWidget( mThirdCombo, x, y++ ); 208 layout->addWidget( mThirdCombo, x, y++ );
99 layout->addWidget( mThirdEdit, x, y++ ); 209 layout->addWidget( mThirdEdit, x, y++ );
100 if ( QApplication::desktop()->width() < 640 ) { 210 if ( QApplication::desktop()->width() < 640 ) {
101 ++x; 211 ++x;
102 y = 0; 212 y = 0;
103 } 213 }
104 mFourthCombo = new PhoneTypeCombo( mPhoneList, this ); 214 mFourthCombo = new PhoneTypeCombo( mPhoneList, this );
105 mFourthEdit = new KLineEdit( this ); 215 mFourthEdit = new KLineEdit( this );
106 mFourthCombo->setLineEdit( mFourthEdit ); 216 mFourthCombo->setLineEdit( mFourthEdit );
107 layout->addWidget( mFourthCombo, x, y++ ); 217 layout->addWidget( mFourthCombo, x, y++ );
108 layout->addWidget( mFourthEdit, x, y++ ); 218 layout->addWidget( mFourthEdit, x, y++ );
109 219
110 // Four numbers don't fit in the current dialog 220 // Four numbers don't fit in the current dialog
111 if ( QApplication::desktop()->width() < 640 ) { 221 if ( QApplication::desktop()->width() < 640 ) {
112 mFourthCombo->hide(); 222 mFourthCombo->hide();
113 mFourthEdit->hide(); 223 mFourthEdit->hide();
114 } else { 224 } else {
115 QFontMetrics fm ( font () ) ; 225 QFontMetrics fm ( font () ) ;
116 int wid = fm.width( "Messenger" ) +60; 226 int wid = fm.width( "Messenger" ) +60;
117 mPrefCombo->setMaximumWidth( wid ); 227 mPrefCombo->setMaximumWidth( wid );
118 mSecondCombo->setMaximumWidth( wid ); 228 mSecondCombo->setMaximumWidth( wid );
119 mThirdCombo->setMaximumWidth( wid ); 229 mThirdCombo->setMaximumWidth( wid );
120 mFourthCombo->setMaximumWidth( wid ); 230 mFourthCombo->setMaximumWidth( wid );
121 } 231 }
122 232
123 233
124 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ), 234 connect( mPrefEdit, SIGNAL( textChanged( const QString& ) ),
125 SLOT( slotPrefEditChanged() ) ); 235 SLOT( slotPrefEditChanged() ) );
126 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ), 236 connect( mSecondEdit, SIGNAL( textChanged( const QString& ) ),
127 SLOT( slotSecondEditChanged() ) ); 237 SLOT( slotSecondEditChanged() ) );
128 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ), 238 connect( mThirdEdit, SIGNAL( textChanged( const QString& ) ),
129 SLOT( slotThirdEditChanged() ) ); 239 SLOT( slotThirdEditChanged() ) );
130 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ), 240 connect( mFourthEdit, SIGNAL( textChanged( const QString& ) ),
131 SLOT( slotFourthEditChanged() ) ); 241 SLOT( slotFourthEditChanged() ) );
132 242
133 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) ); 243 connect( editButton, SIGNAL( clicked() ), SLOT( edit() ) );
134 244
135 connect( mPrefCombo, SIGNAL( activated( int ) ), 245 connect( mPrefCombo, SIGNAL( activated( int ) ),
136 SLOT( updatePrefEdit() ) ); 246 SLOT( updatePrefEdit() ) );
137 connect( mSecondCombo, SIGNAL( activated( int ) ), 247 connect( mSecondCombo, SIGNAL( activated( int ) ),
138 SLOT( updateSecondEdit() ) ); 248 SLOT( updateSecondEdit() ) );
139 connect( mThirdCombo, SIGNAL( activated( int ) ), 249 connect( mThirdCombo, SIGNAL( activated( int ) ),
140 SLOT( updateThirdEdit() ) ); 250 SLOT( updateThirdEdit() ) );
141 connect( mFourthCombo, SIGNAL( activated( int ) ), 251 connect( mFourthCombo, SIGNAL( activated( int ) ),
142 SLOT( updateFourthEdit() ) ); 252 SLOT( updateFourthEdit() ) );
143} 253}
144 254
145PhoneEditWidget::~PhoneEditWidget() 255PhoneEditWidget::~PhoneEditWidget()
146{ 256{
147} 257}
148 258
149void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list ) 259void PhoneEditWidget::setPhoneNumbers( const KABC::PhoneNumber::List &list )
150{ 260{
151 mPhoneList.clear(); 261 mPhoneList.clear();
152 262
153 // Insert types for existing numbers. 263 // Insert types for existing numbers.
154 mPrefCombo->insertTypeList( list ); 264 mPrefCombo->insertTypeList( list );
155 265
156 QValueList<int> defaultTypes; 266 QValueList<int> defaultTypes;
157 defaultTypes << KABC::PhoneNumber::Home; 267 defaultTypes << KABC::PhoneNumber::Home;
158 defaultTypes << KABC::PhoneNumber::Work; 268 defaultTypes << KABC::PhoneNumber::Work;
159 defaultTypes << KABC::PhoneNumber::Cell; 269 defaultTypes << KABC::PhoneNumber::Cell;
160 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax ); 270 defaultTypes << ( KABC::PhoneNumber::Work | KABC::PhoneNumber::Fax );
161 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax ); 271 defaultTypes << ( KABC::PhoneNumber::Home | KABC::PhoneNumber::Fax );
162 272
163 // Insert default types. 273 // Insert default types.
164 // Doing this for mPrefCombo is enough because the list is shared by all 274 // Doing this for mPrefCombo is enough because the list is shared by all
165 // combos. 275 // combos.
166 QValueList<int>::ConstIterator it; 276 QValueList<int>::ConstIterator it;
167 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) { 277 for( it = defaultTypes.begin(); it != defaultTypes.end(); ++it ) {
168 if ( !mPrefCombo->hasType( *it ) ) 278 if ( !mPrefCombo->hasType( *it ) )
169 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) ); 279 mPrefCombo->insertType( list, *it, PhoneNumber( "", *it ) );
170 } 280 }
171 281
172 updateCombos(); 282 updateCombos();
173 283
174 mPrefCombo->selectType( defaultTypes[ 0 ] ); 284 mPrefCombo->selectType( defaultTypes[ 0 ] );
175 mSecondCombo->selectType( defaultTypes[ 1 ] ); 285 mSecondCombo->selectType( defaultTypes[ 1 ] );
176 mThirdCombo->selectType( defaultTypes[ 2 ] ); 286 mThirdCombo->selectType( defaultTypes[ 2 ] );
177 mFourthCombo->selectType( defaultTypes[ 3 ] ); 287 mFourthCombo->selectType( defaultTypes[ 3 ] );
178 288
179 updateLineEdits(); 289 updateLineEdits();
180} 290}
181 291
182void PhoneEditWidget::updateLineEdits() 292void PhoneEditWidget::updateLineEdits()
183{ 293{
184 updatePrefEdit(); 294 updatePrefEdit();
185 updateSecondEdit(); 295 updateSecondEdit();
186 updateThirdEdit(); 296 updateThirdEdit();
187 updateFourthEdit(); 297 updateFourthEdit();
188} 298}
189 299
190void PhoneEditWidget::updateCombos() 300void PhoneEditWidget::updateCombos()
191{ 301{
192 mPrefCombo->updateTypes(); 302 mPrefCombo->updateTypes();
193 mSecondCombo->updateTypes(); 303 mSecondCombo->updateTypes();
194 mThirdCombo->updateTypes(); 304 mThirdCombo->updateTypes();
195 mFourthCombo->updateTypes(); 305 mFourthCombo->updateTypes();
196} 306}
197 307
198KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers() 308KABC::PhoneNumber::List PhoneEditWidget::phoneNumbers()
199{ 309{
200 KABC::PhoneNumber::List retList; 310 KABC::PhoneNumber::List retList;
201 311
202 KABC::PhoneNumber::List::Iterator it; 312 KABC::PhoneNumber::List::Iterator it;
203 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it ) 313 for ( it = mPhoneList.begin(); it != mPhoneList.end(); ++it )
204 if ( !(*it).number().isEmpty() ) 314 if ( !(*it).number().isEmpty() )
205 retList.append( *it ); 315 retList.append( *it );
206 316
207 return retList; 317 return retList;
208} 318}
209 319
210void PhoneEditWidget::edit() 320void PhoneEditWidget::edit()
211{ 321{
212 PhoneEditDialog dlg( mPhoneList, this ); 322 PhoneEditDialog dlg( mPhoneList, this );
213 323
214 if ( dlg.exec() ) { 324 if ( dlg.exec() ) {
215 if ( dlg.changed() ) { 325 if ( dlg.changed() ) {
216 KABC::PhoneNumber::List list = dlg.phoneNumbers(); 326 KABC::PhoneNumber::List list = dlg.phoneNumbers();
217 setPhoneNumbers( list ); 327 setPhoneNumbers( list );
218 updateCombos(); 328 updateCombos();
219 updateLineEdits(); 329 updateLineEdits();
220 emit modified(); 330 emit modified();
221 } 331 }
222 } 332 }
223} 333}
224 334
225void PhoneEditWidget::updatePrefEdit() 335void PhoneEditWidget::updatePrefEdit()
226{ 336{
227 updateEdit( mPrefCombo ); 337 updateEdit( mPrefCombo );
228} 338}
229 339
230void PhoneEditWidget::updateSecondEdit() 340void PhoneEditWidget::updateSecondEdit()
231{ 341{
232 updateEdit( mSecondCombo ); 342 updateEdit( mSecondCombo );
233} 343}
234 344
235void PhoneEditWidget::updateThirdEdit() 345void PhoneEditWidget::updateThirdEdit()
236{ 346{
237 updateEdit( mThirdCombo ); 347 updateEdit( mThirdCombo );
238} 348}
239 349
240void PhoneEditWidget::updateFourthEdit() 350void PhoneEditWidget::updateFourthEdit()
241{ 351{
242 updateEdit( mFourthCombo ); 352 updateEdit( mFourthCombo );
243} 353}
244 354
@@ -361,196 +471,196 @@ void PhoneViewItem::makeText()
361 setText( 1, mPhoneNumber.typeLabel() ); 471 setText( 1, mPhoneNumber.typeLabel() );
362} 472}
363 473
364PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name ) 474PhoneEditDialog::PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name )
365 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ), 475 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Numbers" ),
366 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 476 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
367 parent, name, true) 477 parent, name, true)
368{ 478{
369 mPhoneNumberList = list; 479 mPhoneNumberList = list;
370 480
371 QWidget *page = plainPage(); 481 QWidget *page = plainPage();
372 482
373 QGridLayout *layout = new QGridLayout( page, 1, 2 ); 483 QGridLayout *layout = new QGridLayout( page, 1, 2 );
374 layout->setSpacing( spacingHint() ); 484 layout->setSpacing( spacingHint() );
375 485
376 mListView = new KListView( page ); 486 mListView = new KListView( page );
377 mListView->setAllColumnsShowFocus( true ); 487 mListView->setAllColumnsShowFocus( true );
378 mListView->addColumn( i18n( "Number" ) ); 488 mListView->addColumn( i18n( "Number" ) );
379 mListView->addColumn( i18n( "Type" ) ); 489 mListView->addColumn( i18n( "Type" ) );
380 490
381 KButtonBox *buttonBox = new KButtonBox( page, Vertical ); 491 KButtonBox *buttonBox = new KButtonBox( page, Vertical );
382 492
383 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) ); 493 buttonBox->addButton( i18n( "&Add..." ), this, SLOT( slotAddPhoneNumber() ) );
384 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) ); 494 mEditButton = buttonBox->addButton( i18n( "&Edit..." ), this, SLOT( slotEditPhoneNumber() ) );
385 mEditButton->setEnabled( false ); 495 mEditButton->setEnabled( false );
386 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) ); 496 mRemoveButton = buttonBox->addButton( i18n( "&Remove" ), this, SLOT( slotRemovePhoneNumber() ) );
387 mRemoveButton->setEnabled( false ); 497 mRemoveButton->setEnabled( false );
388 buttonBox->layout(); 498 buttonBox->layout();
389 499
390 layout->addWidget( mListView, 0, 0 ); 500 layout->addWidget( mListView, 0, 0 );
391 layout->addWidget( buttonBox, 0, 1 ); 501 layout->addWidget( buttonBox, 0, 1 );
392 502
393 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) ); 503 connect( mListView, SIGNAL(selectionChanged()), SLOT(slotSelectionChanged()) );
394 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber())); 504 connect( mListView, SIGNAL(doubleClicked( QListViewItem *, const QPoint &, int )), this, SLOT( slotEditPhoneNumber()));
395 505
396 KABC::PhoneNumber::List::Iterator it; 506 KABC::PhoneNumber::List::Iterator it;
397 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it ) 507 for ( it = mPhoneNumberList.begin(); it != mPhoneNumberList.end(); ++it )
398 new PhoneViewItem( mListView, *it ); 508 new PhoneViewItem( mListView, *it );
399 if (QApplication::desktop()->width() < 480 ) 509 if (QApplication::desktop()->width() < 480 )
400 showMaximized(); 510 showMaximized();
401 else 511 else
402 resize( 400, 400 ); 512 resize( 400, 400 );
403 mChanged = false; 513 mChanged = false;
404} 514}
405 515
406PhoneEditDialog::~PhoneEditDialog() 516PhoneEditDialog::~PhoneEditDialog()
407{ 517{
408} 518}
409 519
410void PhoneEditDialog::slotAddPhoneNumber() 520void PhoneEditDialog::slotAddPhoneNumber()
411{ 521{
412 KABC::PhoneNumber tmp( "", 0 ); 522 KABC::PhoneNumber tmp( "", 0 );
413 PhoneTypeDialog dlg( tmp, this ); 523 PhoneTypeDialog dlg( tmp, this );
414 524
415 if ( dlg.exec() ) { 525 if ( dlg.exec() ) {
416 QListViewItem* i = mListView->firstChild(); 526 QListViewItem* i = mListView->firstChild();
417 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 527 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
418 bool insert = true; 528 bool insert = true;
419 while ( i ) { 529 while ( i ) {
420 PhoneViewItem* p = ( PhoneViewItem* ) i; 530 PhoneViewItem* p = ( PhoneViewItem* ) i;
421 KABC::PhoneNumber pn = p->phoneNumber(); 531 KABC::PhoneNumber pn = p->phoneNumber();
422 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) { 532 if ( (pn.type() | KABC::PhoneNumber::Pref) == (phoneNumber.type() | KABC::PhoneNumber::Pref) ) {
423 if ( p->text(0).isEmpty()) { 533 if ( p->text(0).isEmpty()) {
424 p->setPhoneNumber( phoneNumber ); 534 p->setPhoneNumber( phoneNumber );
425 mPhoneNumberList.remove( pn ); 535 mPhoneNumberList.remove( pn );
426 mPhoneNumberList.append( phoneNumber ); 536 mPhoneNumberList.append( phoneNumber );
427 insert = false; 537 insert = false;
428 break; 538 break;
429 } 539 }
430 } 540 }
431 i = i->nextSibling(); 541 i = i->nextSibling();
432 } 542 }
433 if ( insert ) { 543 if ( insert ) {
434 mPhoneNumberList.append( phoneNumber ); 544 mPhoneNumberList.append( phoneNumber );
435 new PhoneViewItem( mListView, phoneNumber ); 545 new PhoneViewItem( mListView, phoneNumber );
436 } 546 }
437 mChanged = true; 547 mChanged = true;
438 } 548 }
439} 549}
440 550
441void PhoneEditDialog::slotRemovePhoneNumber() 551void PhoneEditDialog::slotRemovePhoneNumber()
442{ 552{
443 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 553 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
444 if ( !item ) 554 if ( !item )
445 return; 555 return;
446 556
447 mPhoneNumberList.remove( item->phoneNumber() ); 557 mPhoneNumberList.remove( item->phoneNumber() );
448 QListViewItem *currItem = mListView->currentItem(); 558 QListViewItem *currItem = mListView->currentItem();
449 mListView->takeItem( currItem ); 559 mListView->takeItem( currItem );
450 delete currItem; 560 delete currItem;
451 561
452 mChanged = true; 562 mChanged = true;
453} 563}
454 564
455void PhoneEditDialog::slotEditPhoneNumber() 565void PhoneEditDialog::slotEditPhoneNumber()
456{ 566{
457 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() ); 567 PhoneViewItem *item = static_cast<PhoneViewItem*>( mListView->currentItem() );
458 if ( !item ) 568 if ( !item )
459 return; 569 return;
460 570
461 PhoneTypeDialog dlg( item->phoneNumber(), this ); 571 PhoneTypeDialog dlg( item->phoneNumber(), this );
462 572
463 if ( dlg.exec() ) { 573 if ( dlg.exec() ) {
464 slotRemovePhoneNumber(); 574 slotRemovePhoneNumber();
465 KABC::PhoneNumber phoneNumber = dlg.phoneNumber(); 575 KABC::PhoneNumber phoneNumber = dlg.phoneNumber();
466 mPhoneNumberList.append( phoneNumber ); 576 mPhoneNumberList.append( phoneNumber );
467 new PhoneViewItem( mListView, phoneNumber ); 577 new PhoneViewItem( mListView, phoneNumber );
468 578
469 mChanged = true; 579 mChanged = true;
470 } 580 }
471} 581}
472 582
473void PhoneEditDialog::slotSelectionChanged() 583void PhoneEditDialog::slotSelectionChanged()
474{ 584{
475 bool state = ( mListView->currentItem() != 0 ); 585 bool state = ( mListView->currentItem() != 0 );
476 586
477 mRemoveButton->setEnabled( state ); 587 mRemoveButton->setEnabled( state );
478 mEditButton->setEnabled( state ); 588 mEditButton->setEnabled( state );
479} 589}
480 590
481const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers() 591const KABC::PhoneNumber::List &PhoneEditDialog::phoneNumbers()
482{ 592{
483 return mPhoneNumberList; 593 return mPhoneNumberList;
484} 594}
485 595
486bool PhoneEditDialog::changed() const 596bool PhoneEditDialog::changed() const
487{ 597{
488 return mChanged; 598 return mChanged;
489} 599}
490 600
491/////////////////////////////////////////// 601///////////////////////////////////////////
492// PhoneTypeDialog 602// PhoneTypeDialog
493PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, 603PhoneTypeDialog::PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber,
494 QWidget *parent, const char *name) 604 QWidget *parent, const char *name)
495 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ), 605 : KDialogBase( KDialogBase::Plain, i18n( "Edit Phone Number" ),
496 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok, 606 KDialogBase::Ok | KDialogBase::Cancel, KDialogBase::Ok,
497 parent, name, true), mPhoneNumber( phoneNumber ) 607 parent, name, true), mPhoneNumber( phoneNumber )
498{ 608{
499 QWidget *page = plainPage(); 609 QWidget *page = plainPage();
500 QLabel *label = 0; 610 QLabel *label = 0;
501 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() ); 611 QGridLayout *layout = new QGridLayout( page, 3, 2, marginHint(), spacingHint() );
502 612
503 label = new QLabel( i18n( "Number:" ), page ); 613 label = new QLabel( i18n( "Number:" ), page );
504 layout->addWidget( label, 0, 0 ); 614 layout->addWidget( label, 0, 0 );
505 mNumber = new KLineEdit( page ); 615 mNumber = new KLineEdit( page );
506 layout->addWidget( mNumber, 0, 1 ); 616 layout->addWidget( mNumber, 0, 1 );
507 617
508 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page ); 618 mPreferredBox = new QCheckBox( i18n( "This is the preferred phone number" ), page );
509 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 ); 619 layout->addMultiCellWidget( mPreferredBox, 1, 1, 0, 1 );
510 620
511 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page ); 621 mGroup = new QButtonGroup( 2, Horizontal, i18n( "Types" ), page );
512 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 ); 622 layout->addMultiCellWidget( mGroup, 2, 2, 0, 1 );
513 623
514 // fill widgets 624 // fill widgets
515 mNumber->setText( mPhoneNumber.number() ); 625 mNumber->setText( mPhoneNumber.number() );
516 626
517 mTypeList = KABC::PhoneNumber::typeList(); 627 mTypeList = KABC::PhoneNumber::typeList();
518 mTypeList.remove( KABC::PhoneNumber::Pref ); 628 mTypeList.remove( KABC::PhoneNumber::Pref );
519 629
520 KABC::PhoneNumber::TypeList::Iterator it; 630 KABC::PhoneNumber::TypeList::Iterator it;
521 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it ) 631 for ( it = mTypeList.begin(); it != mTypeList.end(); ++it )
522 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup ); 632 new QCheckBox( KABC::PhoneNumber::typeLabel( *it ), mGroup );
523 633
524 for ( int i = 0; i < mGroup->count(); ++i ) { 634 for ( int i = 0; i < mGroup->count(); ++i ) {
525 int type = mPhoneNumber.type(); 635 int type = mPhoneNumber.type();
526 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 636 QCheckBox *box = (QCheckBox*)mGroup->find( i );
527 box->setChecked( type & mTypeList[ i ] ); 637 box->setChecked( type & mTypeList[ i ] );
528 } 638 }
529 639
530 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref ); 640 mPreferredBox->setChecked( mPhoneNumber.type() & KABC::PhoneNumber::Pref );
531 mNumber->setFocus(); 641 mNumber->setFocus();
532 mNumber->setSelection( 0, 1024); 642 mNumber->setSelection( 0, 1024);
533} 643}
534 644
535KABC::PhoneNumber PhoneTypeDialog::phoneNumber() 645KABC::PhoneNumber PhoneTypeDialog::phoneNumber()
536{ 646{
537 mPhoneNumber.setNumber( mNumber->text() ); 647 mPhoneNumber.setNumber( mNumber->text() );
538 648
539 int type = 0; 649 int type = 0;
540 for ( int i = 0; i < mGroup->count(); ++i ) { 650 for ( int i = 0; i < mGroup->count(); ++i ) {
541 QCheckBox *box = (QCheckBox*)mGroup->find( i ); 651 QCheckBox *box = (QCheckBox*)mGroup->find( i );
542 if ( box->isChecked() ) 652 if ( box->isChecked() )
543 type += mTypeList[ i ]; 653 type += mTypeList[ i ];
544 } 654 }
545 655
546 if ( mPreferredBox->isChecked() ) 656 if ( mPreferredBox->isChecked() )
547 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref ); 657 mPhoneNumber.setType( type | KABC::PhoneNumber::Pref );
548 else 658 else
549 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref ); 659 mPhoneNumber.setType( type & ~KABC::PhoneNumber::Pref );
550 660
551 return mPhoneNumber; 661 return mPhoneNumber;
552} 662}
553 663#endif
554#ifndef KAB_EMBEDDED 664#ifndef KAB_EMBEDDED
555#include "phoneeditwidget.moc" 665#include "phoneeditwidget.moc"
556#endif //KAB_EMBEDDED 666#endif //KAB_EMBEDDED
diff --git a/kaddressbook/phoneeditwidget.h b/kaddressbook/phoneeditwidget.h
index 0241cf0..6a514ed 100644
--- a/kaddressbook/phoneeditwidget.h
+++ b/kaddressbook/phoneeditwidget.h
@@ -1,222 +1,287 @@
1#ifndef PHONEEDITWIDGET_H 1#ifndef PHONEEDITWIDGET_H
2#define PHONEEDITWIDGET_H 2#define PHONEEDITWIDGET_H
3/* 3/*
4 This file is part of KAddressBook. 4 This file is part of KAddressBook.
5 Copyright (c) 2002 Mike Pilone <mpilone@slac.com> 5 Copyright (c) 2002 Mike Pilone <mpilone@slac.com>
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or 9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
11 11
12 This program is distributed in the hope that it will be useful, 12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details. 15 GNU General Public License for more details.
16 16
17 You should have received a copy of the GNU General Public License 17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 20
21 As a special exception, permission is given to link this program 21 As a special exception, permission is given to link this program
22 with any edition of Qt, and distribute the resulting executable, 22 with any edition of Qt, and distribute the resulting executable,
23 without including the source code for Qt in the source distribution. 23 without including the source code for Qt in the source distribution.
24*/ 24*/
25 25
26#include <kdialogbase.h> 26#include <kdialogbase.h>
27#include <kiconloader.h> 27#include <kiconloader.h>
28#include <qpushbutton.h> 28#include <qpushbutton.h>
29#include <qlayout.h> 29#include <qlayout.h>
30 30
31#include <qptrlist.h>
32#include <qscrollview.h>
31 33
32#include "addresseeconfig.h" 34#include "addresseeconfig.h"
33#include "typecombo.h" 35#include "typecombo.h"
34 36
35class QButtonGroup; 37class QButtonGroup;
36class QCheckBox; 38class QCheckBox;
39class PhoneTypeNumberEdit;
37 40
38#include <klineedit.h> 41#include <klineedit.h>
39#include <kcombobox.h> 42#include <kcombobox.h>
40class KListView; 43#include <kabc/phonenumber.h>
41 44
42typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo; 45typedef TypeCombo<KABC::PhoneNumber> PhoneTypeCombo;
43 46
44/** 47/**
45 Widget for editing phone numbers. 48 Widget for editing phone numbers.
46*/ 49*/
47class PhoneEditWidget : public QWidget 50class PhoneEditWidget : public QScrollView
48{ 51{
49 Q_OBJECT 52 Q_OBJECT
50 53
51 public: 54 public:
52 PhoneEditWidget( QWidget *parent, const char *name = 0 ); 55 PhoneEditWidget( QWidget *parent, const char *name = 0 );
53 ~PhoneEditWidget(); 56 ~PhoneEditWidget();
54 57
55 void setPhoneNumbers( const KABC::PhoneNumber::List &list ); 58 void setPhoneNumbers( const KABC::PhoneNumber::List &list );
56 KABC::PhoneNumber::List phoneNumbers(); 59 KABC::PhoneNumber::List phoneNumbers();
57 60
58 void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* ); 61 // void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* );
59 KABC::PhoneNumber currentPhoneNumber( KComboBox*, int ); 62 //KABC::PhoneNumber currentPhoneNumber( KComboBox*, int );
60 63
61 signals: 64 signals:
62 void modified(); 65 void modified();
66 void typeChange( int oldType, int newType );
63 67
64 private slots: 68 private slots:
69 void addNumber();
70 protected:
71
72 private:
73 void setDefaults();
74 PhoneTypeNumberEdit* appendEditCombo();
75 QWidget* mw;
76 QVBoxLayout* mainLayout;
77 QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList;
78
79 KABC::PhoneNumber::List mPhoneList;
80};
81
82
83
84
85
86#if 0
87class PhoneEditWidget : public QWidget
88{
89 Q___OBJECT
90
91 public:
92 PhoneEditWidget( QWidget *parent, const char *name = 0 );
93 ~PhoneEditWidget();
94
95 void setPhoneNumbers( const KABC::PhoneNumber::List &list );
96 KABC::PhoneNumber::List phoneNumbers();
97
98 void updateTypeCombo( const KABC::PhoneNumber::List&, KComboBox* );
99 KABC::PhoneNumber currentPhoneNumber( KComboBox*, int );
100
101 sig_nals:
102 void modified();
103 void typeChange( int oldType, int newType );
104
105 private sl_ots:
65 void edit(); 106 void edit();
66 107
67 void updatePrefEdit(); 108 void updatePrefEdit();
68 void updateSecondEdit(); 109 void updateSecondEdit();
69 void updateThirdEdit(); 110 void updateThirdEdit();
70 void updateFourthEdit(); 111 void updateFourthEdit();
71 112
72 void slotPrefEditChanged(); 113 void slotPrefEditChanged();
73 void slotSecondEditChanged(); 114 void slotSecondEditChanged();
74 void slotThirdEditChanged(); 115 void slotThirdEditChanged();
75 void slotFourthEditChanged(); 116 void slotFourthEditChanged();
76 117
77 protected: 118 protected:
78 void updateLineEdits(); 119 void updateLineEdits();
79 void updateCombos(); 120 void updateCombos();
80 121
81 private: 122 private:
123 QPtrList <PhoneTypeNumberEdit> mTypeNumberEditList;
82 void updateEdit( PhoneTypeCombo *combo ); 124 void updateEdit( PhoneTypeCombo *combo );
83 void updatePhoneNumber( PhoneTypeCombo *combo ); 125 void updatePhoneNumber( PhoneTypeCombo *combo );
84 void updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo ); 126 void updateOtherEdit( PhoneTypeCombo *combo, PhoneTypeCombo *otherCombo );
85 127
86 PhoneTypeCombo *mPrefCombo; 128 PhoneTypeCombo *mPrefCombo;
87 PhoneTypeCombo *mSecondCombo; 129 PhoneTypeCombo *mSecondCombo;
88 PhoneTypeCombo *mThirdCombo; 130 PhoneTypeCombo *mThirdCombo;
89 PhoneTypeCombo *mFourthCombo; 131 PhoneTypeCombo *mFourthCombo;
90 132
91 KLineEdit *mPrefEdit; 133 KLineEdit *mPrefEdit;
92 KLineEdit *mSecondEdit; 134 KLineEdit *mSecondEdit;
93 KLineEdit *mThirdEdit; 135 KLineEdit *mThirdEdit;
94 KLineEdit *mFourthEdit; 136 KLineEdit *mFourthEdit;
95 137
96 KABC::PhoneNumber::List mPhoneList; 138 KABC::PhoneNumber::List mPhoneList;
97}; 139};
98 140
99/** 141/**
100 Dialog for editing lists of phonenumbers. 142 Dialog for editing lists of phonenumbers.
101*/ 143*/
102class PhoneEditDialog : public KDialogBase 144class PhoneEditDialog : public KDialogBase
103{ 145{
104 Q_OBJECT 146 Q___OBJECT
105 147
106 public: 148 public:
107 PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name = 0 ); 149 PhoneEditDialog( const KABC::PhoneNumber::List &list, QWidget *parent, const char *name = 0 );
108 ~PhoneEditDialog(); 150 ~PhoneEditDialog();
109 151
110 const KABC::PhoneNumber::List &phoneNumbers(); 152 const KABC::PhoneNumber::List &phoneNumbers();
111 bool changed() const; 153 bool changed() const;
112 154
113 protected slots: 155 protected s__lots:
114 void slotAddPhoneNumber(); 156 void slotAddPhoneNumber();
115 void slotRemovePhoneNumber(); 157 void slotRemovePhoneNumber();
116 void slotEditPhoneNumber(); 158 void slotEditPhoneNumber();
117 void slotSelectionChanged(); 159 void slotSelectionChanged();
118 160
119 private: 161 private:
120 KABC::PhoneNumber::List mPhoneNumberList; 162 KABC::PhoneNumber::List mPhoneNumberList;
121 KABC::PhoneNumber::TypeList mTypeList; 163 KABC::PhoneNumber::TypeList mTypeList;
122 KComboBox *mTypeBox; 164 KComboBox *mTypeBox;
123 KListView *mListView; 165 KListView *mListView;
124 166
125 QPushButton *mRemoveButton; 167 QPushButton *mRemoveButton;
126 QPushButton *mEditButton; 168 QPushButton *mEditButton;
127 169
128 bool mChanged; 170 bool mChanged;
129}; 171};
130 172
131/** 173/**
132 Dialog for editing phone number types. 174 Dialog for editing phone number types.
133*/ 175*/
134class PhoneTypeDialog : public KDialogBase 176class PhoneTypeDialog : public KDialogBase
135{ 177{
136 Q_OBJECT 178 Q___OBJECT
137public: 179public:
138 PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, QWidget *parent, const char *name = 0 ); 180 PhoneTypeDialog( const KABC::PhoneNumber &phoneNumber, QWidget *parent, const char *name = 0 );
139 181
140 KABC::PhoneNumber phoneNumber(); 182 KABC::PhoneNumber phoneNumber();
141 183
142private: 184private:
143 KABC::PhoneNumber mPhoneNumber; 185 KABC::PhoneNumber mPhoneNumber;
144 KABC::PhoneNumber::TypeList mTypeList; 186 KABC::PhoneNumber::TypeList mTypeList;
145 187
146 QButtonGroup *mGroup; 188 QButtonGroup *mGroup;
147 QCheckBox *mPreferredBox; 189 QCheckBox *mPreferredBox;
148 KLineEdit *mNumber; 190 KLineEdit *mNumber;
149}; 191};
192#endif
193
150class PhoneTypeNumberEdit : public QWidget 194class PhoneTypeNumberEdit : public QWidget
151{ 195{
152 Q_OBJECT 196 Q_OBJECT
153public: 197public:
154 PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) 198 PhoneTypeNumberEdit( QWidget *parent, const char *name = 0 ) :QWidget( parent )
155 { 199 {
156 QHBoxLayout * lay = new QHBoxLayout( this ); 200 QHBoxLayout * lay = new QHBoxLayout( this );
157 lay->setSpacing( KDialogBase::spacingHintSmall() ); 201 lay->setSpacing( KDialogBase::spacingHintSmall() );
158 lay->setMargin( KDialogBase::marginHintSmall() ); 202 lay->setMargin( KDialogBase::marginHintSmall() );
159 mMinusButton = new QPushButton ( this ); 203 mMinusButton = new QPushButton ( this );
160 mMinusButton->setPixmap ( SmallIcon("minus")); 204 mMinusButton->setPixmap ( SmallIcon("minus"));
161 mCombo = new KComboBox( this ); 205 mCombo = new KComboBox( this );
162 mNumber = new KLineEdit( this ); 206 mNumber = new KLineEdit( this );
163 lay->addWidget( mMinusButton ); 207 lay->addWidget( mMinusButton );
164 lay->addWidget( mCombo ); 208 lay->addWidget( mCombo );
165 lay->addWidget( mNumber ); 209 lay->addWidget( mNumber );
166 connect( mMinusButton , SIGNAL ( clicked() ), this, SLOT ( deleteNumber() ) ); 210 connect( mMinusButton , SIGNAL ( clicked() ), this, SLOT ( deleteNumber() ) );
167 connect( mCombo , SIGNAL ( activated ( int ) ), this, SLOT ( comboTypeChange( int ) ) ); 211 connect( mCombo , SIGNAL ( activated ( int ) ), this, SLOT ( comboTypeChange( int ) ) );
212 connect( mNumber , SIGNAL ( textChanged ( const QString & ) ),
213 this, SLOT ( textChanged ( const QString & ) ) );
168 mCombo->insertStringList( PhoneNumber::supportedTypeListNames() ); 214 mCombo->insertStringList( PhoneNumber::supportedTypeListNames() );
215 mIsValid = true;
169 } 216 }
170 217
171 void setPhoneNumber( const KABC::PhoneNumber &phoneNumber ) 218 void setPhoneNumber( const KABC::PhoneNumber &phoneNumber )
172 { 219 {
173 mPhoneNumber = phoneNumber; 220 mPhoneNumber = phoneNumber;
174 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); 221 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() );
175 mCombo->setCurrentItem( index ); 222 mCombo->setCurrentItem( index );
176 mNumber->setText( mPhoneNumber.number() ); 223 mNumber->setText( mPhoneNumber.number() );
224 mIsValid = true;
177 show(); 225 show();
178 226
179 } 227 }
180 KABC::PhoneNumber phoneNumber() 228 KABC::PhoneNumber phoneNumber()
181 { 229 {
182 mPhoneNumber.setNumber( mNumber->text() ); 230 mPhoneNumber.setNumber( mNumber->text() );
183 int index = mCombo->currentItem(); 231 int index = mCombo->currentItem();
184 mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] ); 232 mPhoneNumber.setType( PhoneNumber::supportedTypeList()[index] );
185 return mPhoneNumber; 233 return mPhoneNumber;
186
187 } 234 }
235 bool isValid()
236 {
237 if ( !mIsValid ) return false;
238 if ( mNumber->text().isEmpty() )return false;
239 return true;
240 }
188 private slots: 241 private slots:
189 void typeExternalChanged( int oldType, int newType ) 242 void typeExternalChanged( int oldType, int newType )
190 { 243 {
191 if ( mPhoneNumber.type() == newType ) { 244 if ( mPhoneNumber.type() == newType ) {
192 mPhoneNumber.setType(oldType); 245 mPhoneNumber.setType(oldType);
193 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() ); 246 int index = PhoneNumber::typeListIndex4Type( mPhoneNumber.type() );
194 mCombo->setCurrentItem( index ); 247 mCombo->setCurrentItem( index );
195 } 248 }
196
197 } 249 }
198 void deleteNumber() 250 void deleteNumber()
199 { 251 {
252 emit modified();
200 hide(); 253 hide();
254 mIsValid = false;
201 } 255 }
202 void comboTypeChange( int index ) 256 void comboTypeChange( int index )
203 { 257 {
204 int old = mPhoneNumber.type(); 258 int old = mPhoneNumber.type();
205 int newT = PhoneNumber::supportedTypeList()[index]; 259 int newT = PhoneNumber::supportedTypeList()[index];
206 if ( old != newT ) { 260 if ( old != newT ) {
207 mPhoneNumber.setType(newT ); 261 emit modified();
208 emit typeChange ( old, newT ); 262 emit typeChange ( old, newT );
263 mPhoneNumber.setType(newT );
209 } 264 }
210 265
211 } 266 }
267 int currentType()
268 {
269 return mCombo->currentItem();
270 }
271 void textChanged ( const QString & )
272 {
273 emit modified();
274 }
212 signals: 275 signals:
213void typeChange( int oldType, int newType ); 276void typeChange( int oldType, int newType );
277 void modified();
214 278
215private: 279private:
280 bool mIsValid;
216 KABC::PhoneNumber mPhoneNumber; 281 KABC::PhoneNumber mPhoneNumber;
217 QPushButton* mMinusButton; 282 QPushButton* mMinusButton;
218 KComboBox *mCombo; 283 KComboBox *mCombo;
219 KLineEdit *mNumber; 284 KLineEdit *mNumber;
220}; 285};
221 286
222#endif 287#endif