summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-10-28 11:31:59 (UTC)
committer zautrix <zautrix>2005-10-28 11:31:59 (UTC)
commitb27cb619bb9005ad4345d38bbee3b1c3d0eda1b2 (patch) (unidiff)
treea7ac6002208ddedcd9dc13cd0e91294519883007
parent5ceebb8563f134c789e9082d1bc49723beb28c8c (diff)
downloadkdepimpi-b27cb619bb9005ad4345d38bbee3b1c3d0eda1b2.zip
kdepimpi-b27cb619bb9005ad4345d38bbee3b1c3d0eda1b2.tar.gz
kdepimpi-b27cb619bb9005ad4345d38bbee3b1c3d0eda1b2.tar.bz2
commit
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
@@ -728,110 +728,110 @@
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
@@ -966,215 +966,215 @@ QDateTime Addressee::birthday() const
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()
diff --git a/kabc/addresseeview.cpp b/kabc/addresseeview.cpp
index 05d604f..aae923c 100644
--- a/kabc/addresseeview.cpp
+++ b/kabc/addresseeview.cpp
@@ -491,195 +491,197 @@ void AddresseeView::setAddressee( const KABC::Addressee& mAddressee )
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();
diff --git a/kaddressbook/phoneeditwidget.cpp b/kaddressbook/phoneeditwidget.cpp
index 2bce39a..b20275d 100644
--- a/kaddressbook/phoneeditwidget.cpp
+++ b/kaddressbook/phoneeditwidget.cpp
@@ -1,148 +1,258 @@
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
@@ -457,100 +567,100 @@ void PhoneEditDialog::slotEditPhoneNumber()
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