summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/kopiWhatsNew.txt74
-rw-r--r--kaddressbook/kabcore.cpp30
2 files changed, 93 insertions, 11 deletions
diff --git a/bin/kdepim/korganizer/kopiWhatsNew.txt b/bin/kdepim/korganizer/kopiWhatsNew.txt
index 8982a9c..20de933 100644
--- a/bin/kdepim/korganizer/kopiWhatsNew.txt
+++ b/bin/kdepim/korganizer/kopiWhatsNew.txt
@@ -1,220 +1,294 @@
1Info about the changes in new versions of KO/Pi 1Info about the changes in new versions of KO/Pi
2and KDE-Pim/Pi 2and KDE-Pim/Pi
3 3
4********** VERSION 1.9.4 ************
5
6This is the version 1.9.4 of KDE-Pim/Pi for the Zaurus.
7
8WARNING:
9PLEASE BACKUP ALL YOUR DATA!
10We have changed a lot and maybe there are some unknown problems.
11
12SYNC HANDLING HAS CHANGED!
13Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
14(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
15
16You need the kmicrokdelibs_1.9.4_arm.ipk as a base for the other programs.
17If you get the error: "Install only possible in main memory", just try it again to install it on SD card. That worked for me. And it was reported that rebooting Qtopia did help in this case as well.
18
19As programs are available:
20KO/Pi (korganizer ipk) - a calendar program.
21KA/Pi (kaddressbook ipk ) - an addressbook
22OM/Pi (kopiemail ipk ) an email program with pop/smtp and IMAP support.
23
24An alarm notification program ( korganizer-alarm ipk ) for KO/Pi that notifies you about alarms, even if the Zaurus is in suspend mode.
25(If you do not see an icon in the taskbar after installing korganizer-alarm, please restart Qtopia)
26
27All the applications are installed in a "Pim" TAB.
28If this TAB is new on your system, you can get an icon in this TAB by installing pim_TAB_icon_1.9.4_arm.ipk
29
30All the application are integrated.
31Such that you can choose in KO/Pi the attendees of a meeting from the addresses in KA/Pi. When you click in KA/Pi on the email address, OM/Pi is started to write the mail.
32
33HINT:
34If you install KPhone/Pi 0.9.7, it will be called, if you click in KA/Pi on a phone number.
35
36What's new?
37
38SYNC HANDLING HAS CHANGED!
39Such that, if you sync now with an already synded device, you will duplicated entries after the first sync.
40(This change was introduced to make it possible to sync with mobile phones, which will be available later (maybe in 4 weeks).
41
42New in OM/Pi:
43When copying(i.e. downloading mails) , you can specify, that only mails of a given size should be downloaded. Added mail copy possibility for selected mails.
44
45New in KO/Pi:
46French is now available for KO/Pi.
47Choose menu:Actions - Configure:TAB locale
48Syncing has changed.
49Phone sync available soon.
50Not much changes, I cannot remember them ...
51
52New in KA/Pi:
53Beaming possible.
54Sharp DTM readonly access possible( create a new DTM resource );
55Better searching possible.
56Search is performed only after pressing the return key.
57Use wildcard * to specify parts of a name.
58
59Better name/email selection dialog (called from KO/Pi or OM/Pi). In this dialog, now searching is possible. Like in KA/Pi, use return key and wildcard * .
60
61A big improvement is the new management of the contact access.
62In version 1.9.3, every application was using their own addressbook access data.
63That means, the addressbook was loaded up to three times in the memory, when accessed by KA/Pi, KO/Pi and OM/Pi.
64That was wasting of memory, if you had several hundreds of contacts.
65
66Now only KA/Pi accesses the addressbook.
67If KO/Pi or OM/Pi want to get some name/email data, they request KA/Pi to open the name/email selection dialog and send it back to them.
68If you click on an attendee in a meeting, its contact data is displayed in KA/Pi directly.
69That means, if KO/Pi or OM/Pi want to access contact data, KA/Pi is started first.
70
71New in the KO/Pi alarm applet:
72Configure your own timer popup menu!
73(Text and minutes for timer countdown)
74Just edit the file
75(yourhomedir)/.kopialarmtimerrc
76and start/stop a timer to get a new menu with the data of this file.
77
4********** VERSION 1.9.3 ************ 78********** VERSION 1.9.3 ************
51) 791)
6Now KO/Pi on Windows imports directly the calendar data of 80Now KO/Pi on Windows imports directly the calendar data of
7an installed Outlook. Should work with OL version >= 2000. 81an installed Outlook. Should work with OL version >= 2000.
8 82
9********** VERSION 1.9.2 ************ 83********** VERSION 1.9.2 ************
101) 841)
11KDE-Pim/Pi has got a new member: 85KDE-Pim/Pi has got a new member:
12KmicroMail (KM/Pi) is a mail program, 86KmicroMail (KM/Pi) is a mail program,
13which can handle IMAP and POP mail access. 87which can handle IMAP and POP mail access.
14It is based on Opie-Mail v3. 88It is based on Opie-Mail v3.
15All dependencies to the Opie libraries ar removed, 89All dependencies to the Opie libraries ar removed,
16such that no additional Opie lib is needed. 90such that no additional Opie lib is needed.
17It is already integrated in KO/Pi and KA/Pi. 91It is already integrated in KO/Pi and KA/Pi.
18It it now available for the Zaurus,probably it 92It it now available for the Zaurus,probably it
19will be available for other platforms later. 93will be available for other platforms later.
20Hint: 94Hint:
21Create your own contact (name + email) 95Create your own contact (name + email)
22in KA/Pi, select this contact and choose menu: 96in KA/Pi, select this contact and choose menu:
23Settings - Set Who Am I. 97Settings - Set Who Am I.
24Now the settings of this contact are used as 98Now the settings of this contact are used as
25the sender data in KM/Pi. 99the sender data in KM/Pi.
262) 1002)
27KDE-Pim/Pi is split up in five different 101KDE-Pim/Pi is split up in five different
28packages now precompiled for Sharp Zaurus: 102packages now precompiled for Sharp Zaurus:
29--kmicrokdelibs_1.9.2_arm.ipk 103--kmicrokdelibs_1.9.2_arm.ipk
30The libs are needed for any 104The libs are needed for any
31of the following programs: 105of the following programs:
32--kaddressbook_1.9.2_arm.ipk 106--kaddressbook_1.9.2_arm.ipk
33--kmicromail_1.9.2_arm.ipk 107--kmicromail_1.9.2_arm.ipk
34--korganizer_1.9.2_arm.ipk 108--korganizer_1.9.2_arm.ipk
35Independ from that, there is the alarm applet 109Independ from that, there is the alarm applet
36available for KO/Pi, which also offers 110available for KO/Pi, which also offers
37quick access for a new mail or 111quick access for a new mail or
38showing the addressbook.: 112showing the addressbook.:
39--korganizer-alarm_1.9.2_arm.ipk 113--korganizer-alarm_1.9.2_arm.ipk
40Independend means, that the alarm applet 114Independend means, that the alarm applet
41does not need any of the libs or programs above to run. 115does not need any of the libs or programs above to run.
42But it would be quite useless without these programs. 116But it would be quite useless without these programs.
43NOTE: 117NOTE:
44If you get a 118If you get a
45"This application depends on other programs" 119"This application depends on other programs"
46during installation of 120during installation of
47--kmicrokdelibs_1.9.2_arm.ipk 121--kmicrokdelibs_1.9.2_arm.ipk
48you probably do not have to care about that. 122you probably do not have to care about that.
49kmicrokdelibs_1.9.2 will come with some 123kmicrokdelibs_1.9.2 will come with some
50resource plugins, which needs additional libraries. 124resource plugins, which needs additional libraries.
51(E.g. libopie1, if you want to use the 125(E.g. libopie1, if you want to use the
52opie resource connector in KA/Pi). 126opie resource connector in KA/Pi).
53If you do not have this libraries installed, 127If you do not have this libraries installed,
54you simply cannot use the resource. 128you simply cannot use the resource.
55To make it clear: 129To make it clear:
56If the libraries are missing, the applications 130If the libraries are missing, the applications
57using kmicrokdelibs will start, 131using kmicrokdelibs will start,
58because the resources are plugins. 132because the resources are plugins.
593) 1333)
60KO/Pi and friends are now installable on SD-Card! 134KO/Pi and friends are now installable on SD-Card!
61It is recommended to install all libs and apps 135It is recommended to install all libs and apps
62on the SD card or all in the internal storage. 136on the SD card or all in the internal storage.
63There may be problems, if this is mixed. 137There may be problems, if this is mixed.
644) 1384)
65Fixed two bugs in the alarm notification on Windows. 139Fixed two bugs in the alarm notification on Windows.
665) 1405)
67Great improvement! 141Great improvement!
68KO/Pi uses now the latest version of libical. 142KO/Pi uses now the latest version of libical.
69Libical is the library which actually reads 143Libical is the library which actually reads
70the calendar files and extract the data from it. 144the calendar files and extract the data from it.
71With the old version, there were problems 145With the old version, there were problems
72(crashes or program hangs) when licical did read 146(crashes or program hangs) when licical did read
73files, which were not stored from KO/Pi. 147files, which were not stored from KO/Pi.
74I do not know, if the new libical works perfect, 148I do not know, if the new libical works perfect,
75but actually it works much better than 149but actually it works much better than
76the old version. 150the old version.
77There are no problems with compatibility with 151There are no problems with compatibility with
78old calendar files of KO/Pi, of course! 152old calendar files of KO/Pi, of course!
796) 1536)
80New in KA/Pi: 154New in KA/Pi:
81Opie addressbook resource connector available! 155Opie addressbook resource connector available!
82You will need libopie1 and the opie addressbook, 156You will need libopie1 and the opie addressbook,
83of course. 157of course.
84With the Opie addressbook resource connector, 158With the Opie addressbook resource connector,
85you can access the Opie addressbook readonly in KA/Pi. 159you can access the Opie addressbook readonly in KA/Pi.
86If you want to edit or import the data into KA/Pi, 160If you want to edit or import the data into KA/Pi,
87do this: 161do this:
88a) Create an Opie resource. 162a) Create an Opie resource.
89 (Menu: Settings-Configure Resources). 163 (Menu: Settings-Configure Resources).
90After configuration and restarting KA/Pi you should see 164After configuration and restarting KA/Pi you should see
91the Opie contacts in KA/Pi. 165the Opie contacts in KA/Pi.
92b) Select some or all Opie contacts. 166b) Select some or all Opie contacts.
93(NOTE: +++++ 167(NOTE: +++++
94To know exactly, what contacts are Opie contacts, 168To know exactly, what contacts are Opie contacts,
95do this: Choose menu: 169do this: Choose menu:
96View-Modify View - TAB Fields. 170View-Modify View - TAB Fields.
97Select in the above list "Resource" and click 171Select in the above list "Resource" and click
98down arrow to add it to the "Selected fields". 172down arrow to add it to the "Selected fields".
99Click OK. 173Click OK.
100Now you have a new column "Resource" in your list, 174Now you have a new column "Resource" in your list,
101where you can see, what an Opie resource is. 175where you can see, what an Opie resource is.
102++++ NOTE end.) 176++++ NOTE end.)
103Ok, we do have now some Opie contacts seleted. 177Ok, we do have now some Opie contacts seleted.
104(Use SHIFT or CTRL key in order to multiple select). 178(Use SHIFT or CTRL key in order to multiple select).
105c) Choose menu: Edit-Copy. 179c) Choose menu: Edit-Copy.
106d) Choose menu: Edit-Paste. 180d) Choose menu: Edit-Paste.
107e) Select the resource, you want to add the contacts to. 181e) Select the resource, you want to add the contacts to.
108Congrats! Now you have read/write access to the copied 182Congrats! Now you have read/write access to the copied
109opie contacts as "real" KA/Pi contacts. 183opie contacts as "real" KA/Pi contacts.
110 184
111 185
112********** VERSION 1.9.1 ************ 186********** VERSION 1.9.1 ************
1131) 1871)
114 +++ IMPORTANT 1 +++ 188 +++ IMPORTANT 1 +++
115 189
116The storing place of the default calendar 190The storing place of the default calendar
117file has changed! 191file has changed!
118The default calendar file was 192The default calendar file was
119Applications/korganizer/mycalendar.ics 193Applications/korganizer/mycalendar.ics
120on Zaurus and 194on Zaurus and
121(yourHomeDir)/korganizer/mycalendar.ics 195(yourHomeDir)/korganizer/mycalendar.ics
122on Windows/Linux desktop. Now it is 196on Windows/Linux desktop. Now it is
123(yourHomeDir)/kdepim/korganizer/mycalendar.ics 197(yourHomeDir)/kdepim/korganizer/mycalendar.ics
124on Zaurus, Windows and Linux. 198on Zaurus, Windows and Linux.
125To load the old file, choose menu 199To load the old file, choose menu
126File-Load calendar backup. 200File-Load calendar backup.
127(It should be loaded automatically 201(It should be loaded automatically
128at startup with a warning message displayed). 202at startup with a warning message displayed).
129The place of the configuration file has changed too. 203The place of the configuration file has changed too.
130If you want to use your old KO/Pi config, 204If you want to use your old KO/Pi config,
131copy it to 205copy it to
132(yourHomeDir)/kdepim/config/korganizerrc 206(yourHomeDir)/kdepim/config/korganizerrc
133Please read VERSION 1.9.0 - topic 3) as well! 207Please read VERSION 1.9.0 - topic 3) as well!
134 208
135 +++ IMPORTANT 2 +++ 209 +++ IMPORTANT 2 +++
136 210
137Because of the new paths, you will need 211Because of the new paths, you will need
138a new version of the KO/Pi alarm applet 212a new version of the KO/Pi alarm applet
139for Zaurus. 213for Zaurus.
140Use version >= 1.9.1 214Use version >= 1.9.1
141 215
1422) 2162)
143Now the QWhat'sThis Icon works for items 217Now the QWhat'sThis Icon works for items
144in the month view as well. 218in the month view as well.
145(See VERSION 1.7.8 Topic 1) ). 219(See VERSION 1.7.8 Topic 1) ).
1463) 2203)
147You can import birtsdays/anniversaries 221You can import birtsdays/anniversaries
148from KA/Pi into KO/Pi. 222from KA/Pi into KO/Pi.
149Choose menu File-Import birthdays. 223Choose menu File-Import birthdays.
150If you import twice, already imported items 224If you import twice, already imported items
151will not be imported again, if they 225will not be imported again, if they
152have not been changed in KO/Pi. 226have not been changed in KO/Pi.
1534) 2274)
154When syncing with sharp DTM, now a progress 228When syncing with sharp DTM, now a progress
155is shown, when the data is written back. 229is shown, when the data is written back.
156If there is much data in KO/Pi and no data 230If there is much data in KO/Pi and no data
157in DTM, that can take a long time. 231in DTM, that can take a long time.
158(But only for the first time ). 232(But only for the first time ).
1595) 2335)
160In the search dialog, you can search 234In the search dialog, you can search
161now for the name/email of an attendee 235now for the name/email of an attendee
162of an event/todo. 236of an event/todo.
163To get more space for displaying 237To get more space for displaying
164search results, the buttons 238search results, the buttons
165for "search" and "close" on the 239for "search" and "close" on the
166bottom are removed in the PDA version. 240bottom are removed in the PDA version.
167You have to click OK in the top right 241You have to click OK in the top right
168corner to do a search. 242corner to do a search.
1696) 2436)
170Now it is possible to disable the displaying 244Now it is possible to disable the displaying
171of todo items in the Allday part of the Agenda. 245of todo items in the Allday part of the Agenda.
172Choose Menu Action-Configure, 246Choose Menu Action-Configure,
173TAB Todo View, checkbox 247TAB Todo View, checkbox
174"Allday Agenda view shows todos" 248"Allday Agenda view shows todos"
1757) 2497)
176If FastLoad is enabled, now the settings and the 250If FastLoad is enabled, now the settings and the
177calendar data are saved, when KO/Pi is closed. 251calendar data are saved, when KO/Pi is closed.
178(If no Fastload is enabled, KO/Pi saves 252(If no Fastload is enabled, KO/Pi saves
179the data as well, of course) 253the data as well, of course)
1808) 2548)
181The Agenda View has a minimize-splitter now, 255The Agenda View has a minimize-splitter now,
182such that the height of the allday part can be 256such that the height of the allday part can be
183changed quickly. 257changed quickly.
184 258
185********** VERSION 1.9.0 ************ 259********** VERSION 1.9.0 ************
1861) 2601)
187KO/Pi is now merged with the new microKDE from KA/Pi. 261KO/Pi is now merged with the new microKDE from KA/Pi.
188KO/Pi accesses now KA/Pi as the addressbook. 262KO/Pi accesses now KA/Pi as the addressbook.
189The other ddressbook-plugins are not working any longer. 263The other ddressbook-plugins are not working any longer.
190(It is planned, that later KA/Pi itself uses these plugins) 264(It is planned, that later KA/Pi itself uses these plugins)
191New versions of KO/Pi are only available 265New versions of KO/Pi are only available
192together with KA/Pi as the KDE-Pim/Pi package. 266together with KA/Pi as the KDE-Pim/Pi package.
1932) 2672)
194If you click on an attendee of a meeting in the 268If you click on an attendee of a meeting in the
195event viewer, a detailed summary of the 269event viewer, a detailed summary of the
196attendee is shown. 270attendee is shown.
1973) 2713)
198The place of the configuration file has changed. 272The place of the configuration file has changed.
199If you want to use your old KO/Pi config, copy 273If you want to use your old KO/Pi config, copy
200Applications/korganizer/config_korganizerrc 274Applications/korganizer/config_korganizerrc
201to 275to
202Applications/korganizer/config/korganizerrc 276Applications/korganizer/config/korganizerrc
203 277
204********** VERSION 1.7.8 ************ 278********** VERSION 1.7.8 ************
2051) 2791)
206Now the QWhat'sThis ist working. 280Now the QWhat'sThis ist working.
207Enable the QWhat'sThis icon in the toolbar. 281Enable the QWhat'sThis icon in the toolbar.
208(You have to restart to reload the changed toolbar config). 282(You have to restart to reload the changed toolbar config).
209Now click on the QWhat'sThis Icon 283Now click on the QWhat'sThis Icon
210in the top right corner of KO/Pi. 284in the top right corner of KO/Pi.
211Then click on an item in the Agenda View: 285Then click on an item in the Agenda View:
212You will get a detailed display of the items content. 286You will get a detailed display of the items content.
2132) 2872)
214Some other very minor changes. 288Some other very minor changes.
215But I have forgotten the details ... 289But I have forgotten the details ...
216For that reason I start this log here: 290For that reason I start this log here:
217To document my changes, when I am doing it. 291To document my changes, when I am doing it.
218 292
219********** VERSION 1.7.7 ************ 293********** VERSION 1.7.7 ************
220Stable Version of KO/Pi \ No newline at end of file 294Stable Version of KO/Pi \ No newline at end of file
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 74e5cf7..1a1bcff 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -41,526 +41,534 @@ $Id$
41#include <qlayout.h> 41#include <qlayout.h>
42#include <qregexp.h> 42#include <qregexp.h>
43#include <qvbox.h> 43#include <qvbox.h>
44#include <kabc/addresseelist.h> 44#include <kabc/addresseelist.h>
45#include <kabc/errorhandler.h> 45#include <kabc/errorhandler.h>
46#include <kabc/resource.h> 46#include <kabc/resource.h>
47#include <kabc/vcardconverter.h> 47#include <kabc/vcardconverter.h>
48#include <kapplication.h> 48#include <kapplication.h>
49#include <kactionclasses.h> 49#include <kactionclasses.h>
50#include <kcmultidialog.h> 50#include <kcmultidialog.h>
51#include <kdebug.h> 51#include <kdebug.h>
52#include <kdeversion.h> 52#include <kdeversion.h>
53#include <kkeydialog.h> 53#include <kkeydialog.h>
54#include <kmessagebox.h> 54#include <kmessagebox.h>
55#include <kprinter.h> 55#include <kprinter.h>
56#include <kprotocolinfo.h> 56#include <kprotocolinfo.h>
57#include <kresources/selectdialog.h> 57#include <kresources/selectdialog.h>
58#include <kstandarddirs.h> 58#include <kstandarddirs.h>
59#include <ktempfile.h> 59#include <ktempfile.h>
60#include <kxmlguiclient.h> 60#include <kxmlguiclient.h>
61#include <kaboutdata.h> 61#include <kaboutdata.h>
62#include <libkdepim/categoryselectdialog.h> 62#include <libkdepim/categoryselectdialog.h>
63 63
64#include "addresseeutil.h" 64#include "addresseeutil.h"
65#include "addresseeeditordialog.h" 65#include "addresseeeditordialog.h"
66#include "extensionmanager.h" 66#include "extensionmanager.h"
67#include "kstdaction.h" 67#include "kstdaction.h"
68#include "kaddressbookservice.h" 68#include "kaddressbookservice.h"
69#include "ldapsearchdialog.h" 69#include "ldapsearchdialog.h"
70#include "printing/printingwizard.h" 70#include "printing/printingwizard.h"
71#else // KAB_EMBEDDED 71#else // KAB_EMBEDDED
72 72
73#include <kapplication.h> 73#include <kapplication.h>
74#include "KDGanttMinimizeSplitter.h" 74#include "KDGanttMinimizeSplitter.h"
75#include "kaddressbookmain.h" 75#include "kaddressbookmain.h"
76#include "kactioncollection.h" 76#include "kactioncollection.h"
77#include "addresseedialog.h" 77#include "addresseedialog.h"
78//US 78//US
79#include <libkdepim/addresseeview.h> 79#include <libkdepim/addresseeview.h>
80 80
81#include <qapp.h> 81#include <qapp.h>
82#include <qmenubar.h> 82#include <qmenubar.h>
83//#include <qtoolbar.h> 83//#include <qtoolbar.h>
84#include <qmessagebox.h> 84#include <qmessagebox.h>
85#include <kdebug.h> 85#include <kdebug.h>
86#include <kiconloader.h> // needed for SmallIcon 86#include <kiconloader.h> // needed for SmallIcon
87#include <kresources/kcmkresources.h> 87#include <kresources/kcmkresources.h>
88#include <ktoolbar.h> 88#include <ktoolbar.h>
89 89
90 90
91//#include <qlabel.h> 91//#include <qlabel.h>
92 92
93 93
94#ifndef DESKTOP_VERSION 94#ifndef DESKTOP_VERSION
95#include <qpe/ir.h> 95#include <qpe/ir.h>
96#include <qtopia/qcopenvelope_qws.h> 96#include <qtopia/qcopenvelope_qws.h>
97#else 97#else
98 98
99#endif 99#endif
100 100
101#endif // KAB_EMBEDDED 101#endif // KAB_EMBEDDED
102#include "kcmconfigs/kcmkabconfig.h" 102#include "kcmconfigs/kcmkabconfig.h"
103#include "kcmconfigs/kcmkdepimconfig.h" 103#include "kcmconfigs/kcmkdepimconfig.h"
104#include "kpimglobalprefs.h" 104#include "kpimglobalprefs.h"
105#include "externalapphandler.h" 105#include "externalapphandler.h"
106 106
107 107
108#include <kresources/selectdialog.h> 108#include <kresources/selectdialog.h>
109#include <kmessagebox.h> 109#include <kmessagebox.h>
110 110
111#include <picture.h> 111#include <picture.h>
112#include <resource.h> 112#include <resource.h>
113 113
114//US#include <qsplitter.h> 114//US#include <qsplitter.h>
115#include <qmap.h> 115#include <qmap.h>
116#include <qdir.h> 116#include <qdir.h>
117#include <qfile.h> 117#include <qfile.h>
118#include <qvbox.h> 118#include <qvbox.h>
119#include <qlayout.h> 119#include <qlayout.h>
120#include <qclipboard.h> 120#include <qclipboard.h>
121#include <qtextstream.h> 121#include <qtextstream.h>
122 122
123#include <libkdepim/categoryselectdialog.h> 123#include <libkdepim/categoryselectdialog.h>
124#include <kabc/vcardconverter.h> 124#include <kabc/vcardconverter.h>
125 125
126 126
127#include "addresseeutil.h" 127#include "addresseeutil.h"
128#include "undocmds.h" 128#include "undocmds.h"
129#include "addresseeeditordialog.h" 129#include "addresseeeditordialog.h"
130#include "viewmanager.h" 130#include "viewmanager.h"
131#include "details/detailsviewcontainer.h" 131#include "details/detailsviewcontainer.h"
132#include "kabprefs.h" 132#include "kabprefs.h"
133#include "xxportmanager.h" 133#include "xxportmanager.h"
134#include "incsearchwidget.h" 134#include "incsearchwidget.h"
135#include "jumpbuttonbar.h" 135#include "jumpbuttonbar.h"
136#include "extensionmanager.h" 136#include "extensionmanager.h"
137#include "addresseeconfig.h" 137#include "addresseeconfig.h"
138#include <kcmultidialog.h> 138#include <kcmultidialog.h>
139 139
140#ifdef _WIN32_ 140#ifdef _WIN32_
141 141
142#include "kaimportoldialog.h" 142#include "kaimportoldialog.h"
143#endif 143#endif
144 144
145bool pasteWithNewUid = true; 145bool pasteWithNewUid = true;
146 146
147#ifdef KAB_EMBEDDED 147#ifdef KAB_EMBEDDED
148KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name ) 148KABCore::KABCore( KAddressBookMain *client, bool readWrite, QWidget *parent, const char *name )
149 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 149 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
150 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/ 150 mExtensionManager( 0 ),mConfigureDialog( 0 ),/*US mLdapSearchDialog( 0 ),*/
151 mReadWrite( readWrite ), mModified( false ), mMainWindow(client) 151 mReadWrite( readWrite ), mModified( false ), mMainWindow(client)
152#else //KAB_EMBEDDED 152#else //KAB_EMBEDDED
153KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name ) 153KABCore::KABCore( KXMLGUIClient *client, bool readWrite, QWidget *parent, const char *name )
154 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ), 154 : QWidget( parent, name ), mGUIClient( client ), mViewManager( 0 ),
155 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ), 155 mExtensionManager( 0 ), mConfigureDialog( 0 ), mLdapSearchDialog( 0 ),
156 mReadWrite( readWrite ), mModified( false ) 156 mReadWrite( readWrite ), mModified( false )
157#endif //KAB_EMBEDDED 157#endif //KAB_EMBEDDED
158{ 158{
159 159
160 mExtensionBarSplitter = 0; 160 mExtensionBarSplitter = 0;
161 mIsPart = !parent->inherits( "KAddressBookMain" ); 161 mIsPart = !parent->inherits( "KAddressBookMain" );
162 162
163 mAddressBook = KABC::StdAddressBook::self(); 163 mAddressBook = KABC::StdAddressBook::self();
164 KABC::StdAddressBook::setAutomaticSave( false ); 164 KABC::StdAddressBook::setAutomaticSave( false );
165 165
166#ifndef KAB_EMBEDDED 166#ifndef KAB_EMBEDDED
167 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler ); 167 mAddressBook->setErrorHandler( new KABC::GUIErrorHandler );
168#endif //KAB_EMBEDDED 168#endif //KAB_EMBEDDED
169 169
170 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ), 170 connect( mAddressBook, SIGNAL( addressBookChanged( AddressBook * ) ),
171 SLOT( addressBookChanged() ) ); 171 SLOT( addressBookChanged() ) );
172 172
173 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization, 173 mAddressBook->addCustomField( i18n( "Department" ), KABC::Field::Organization,
174 "X-Department", "KADDRESSBOOK" ); 174 "X-Department", "KADDRESSBOOK" );
175 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization, 175 mAddressBook->addCustomField( i18n( "Profession" ), KABC::Field::Organization,
176 "X-Profession", "KADDRESSBOOK" ); 176 "X-Profession", "KADDRESSBOOK" );
177 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization, 177 mAddressBook->addCustomField( i18n( "Assistant's Name" ), KABC::Field::Organization,
178 "X-AssistantsName", "KADDRESSBOOK" ); 178 "X-AssistantsName", "KADDRESSBOOK" );
179 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization, 179 mAddressBook->addCustomField( i18n( "Manager's Name" ), KABC::Field::Organization,
180 "X-ManagersName", "KADDRESSBOOK" ); 180 "X-ManagersName", "KADDRESSBOOK" );
181 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal, 181 mAddressBook->addCustomField( i18n( "Spouse's Name" ), KABC::Field::Personal,
182 "X-SpousesName", "KADDRESSBOOK" ); 182 "X-SpousesName", "KADDRESSBOOK" );
183 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal, 183 mAddressBook->addCustomField( i18n( "Office" ), KABC::Field::Personal,
184 "X-Office", "KADDRESSBOOK" ); 184 "X-Office", "KADDRESSBOOK" );
185 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal, 185 mAddressBook->addCustomField( i18n( "IM Address" ), KABC::Field::Personal,
186 "X-IMAddress", "KADDRESSBOOK" ); 186 "X-IMAddress", "KADDRESSBOOK" );
187 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal, 187 mAddressBook->addCustomField( i18n( "Anniversary" ), KABC::Field::Personal,
188 "X-Anniversary", "KADDRESSBOOK" ); 188 "X-Anniversary", "KADDRESSBOOK" );
189 189
190 //US added this field to become compatible with Opie/qtopia addressbook 190 //US added this field to become compatible with Opie/qtopia addressbook
191 // values can be "female" or "male" or "". An empty field represents undefined. 191 // values can be "female" or "male" or "". An empty field represents undefined.
192 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal, 192 mAddressBook->addCustomField( i18n( "Gender" ), KABC::Field::Personal,
193 "X-Gender", "KADDRESSBOOK" ); 193 "X-Gender", "KADDRESSBOOK" );
194 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal, 194 mAddressBook->addCustomField( i18n( "Children" ), KABC::Field::Personal,
195 "X-Children", "KADDRESSBOOK" ); 195 "X-Children", "KADDRESSBOOK" );
196 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal, 196 mAddressBook->addCustomField( i18n( "FreeBusyUrl" ), KABC::Field::Personal,
197 "X-FreeBusyUrl", "KADDRESSBOOK" ); 197 "X-FreeBusyUrl", "KADDRESSBOOK" );
198 198
199 initGUI(); 199 initGUI();
200 200
201 mIncSearchWidget->setFocus(); 201 mIncSearchWidget->setFocus();
202 202
203 203
204 connect( mViewManager, SIGNAL( selected( const QString& ) ), 204 connect( mViewManager, SIGNAL( selected( const QString& ) ),
205 SLOT( setContactSelected( const QString& ) ) ); 205 SLOT( setContactSelected( const QString& ) ) );
206 connect( mViewManager, SIGNAL( executed( const QString& ) ), 206 connect( mViewManager, SIGNAL( executed( const QString& ) ),
207 SLOT( executeContact( const QString& ) ) ); 207 SLOT( executeContact( const QString& ) ) );
208 208
209 connect( mViewManager, SIGNAL( deleteRequest( ) ), 209 connect( mViewManager, SIGNAL( deleteRequest( ) ),
210 SLOT( deleteContacts( ) ) ); 210 SLOT( deleteContacts( ) ) );
211 connect( mViewManager, SIGNAL( modified() ), 211 connect( mViewManager, SIGNAL( modified() ),
212 SLOT( setModified() ) ); 212 SLOT( setModified() ) );
213 213
214 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) ); 214 connect( mExtensionManager, SIGNAL( modified( const KABC::Addressee::List& ) ), this, SLOT( extensionModified( const KABC::Addressee::List& ) ) );
215 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) ); 215 connect( mExtensionManager, SIGNAL( changedActiveExtension( int ) ), this, SLOT( extensionChanged( int ) ) );
216 216
217 connect( mXXPortManager, SIGNAL( modified() ), 217 connect( mXXPortManager, SIGNAL( modified() ),
218 SLOT( setModified() ) ); 218 SLOT( setModified() ) );
219 219
220 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ), 220 connect( mJumpButtonBar, SIGNAL( jumpToLetter( const QString& ) ),
221 SLOT( incrementalSearch( const QString& ) ) ); 221 SLOT( incrementalSearch( const QString& ) ) );
222 connect( mIncSearchWidget, SIGNAL( fieldChanged() ), 222 connect( mIncSearchWidget, SIGNAL( fieldChanged() ),
223 mJumpButtonBar, SLOT( recreateButtons() ) ); 223 mJumpButtonBar, SLOT( recreateButtons() ) );
224 224
225 connect( mDetails, SIGNAL( sendEmail( const QString& ) ), 225 connect( mDetails, SIGNAL( sendEmail( const QString& ) ),
226 SLOT( sendMail( const QString& ) ) ); 226 SLOT( sendMail( const QString& ) ) );
227 227
228 228
229 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&))); 229 connect( ExternalAppHandler::instance(), SIGNAL (requestForNameEmailUidList(const QString&, const QString&)),this, SLOT(requestForNameEmailUidList(const QString&, const QString&)));
230 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&))); 230 connect( ExternalAppHandler::instance(), SIGNAL (requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)),this, SLOT(requestForDetails(const QString&, const QString&, const QString&, const QString&, const QString&)));
231 231
232 232
233#ifndef KAB_EMBEDDED 233#ifndef KAB_EMBEDDED
234 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ), 234 connect( mViewManager, SIGNAL( urlDropped( const KURL& ) ),
235 mXXPortManager, SLOT( importVCard( const KURL& ) ) ); 235 mXXPortManager, SLOT( importVCard( const KURL& ) ) );
236 236
237 connect( mDetails, SIGNAL( browse( const QString& ) ), 237 connect( mDetails, SIGNAL( browse( const QString& ) ),
238 SLOT( browse( const QString& ) ) ); 238 SLOT( browse( const QString& ) ) );
239 239
240 240
241 mAddressBookService = new KAddressBookService( this ); 241 mAddressBookService = new KAddressBookService( this );
242 242
243#endif //KAB_EMBEDDED 243#endif //KAB_EMBEDDED
244 mEditorDialog = 0; 244 mEditorDialog = 0;
245 createAddresseeEditorDialog( this ); 245 createAddresseeEditorDialog( this );
246 setModified( false ); 246 setModified( false );
247} 247}
248 248
249KABCore::~KABCore() 249KABCore::~KABCore()
250{ 250{
251 // save(); 251 // save();
252 //saveSettings(); 252 //saveSettings();
253 //KABPrefs::instance()->writeConfig(); 253 //KABPrefs::instance()->writeConfig();
254 delete AddresseeConfig::instance(); 254 delete AddresseeConfig::instance();
255 mAddressBook = 0; 255 mAddressBook = 0;
256 KABC::StdAddressBook::close(); 256 KABC::StdAddressBook::close();
257} 257}
258 258
259void KABCore::restoreSettings() 259void KABCore::restoreSettings()
260{ 260{
261 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce; 261 mMultipleViewsAtOnce = KABPrefs::instance()->mMultipleViewsAtOnce;
262 262
263 bool state; 263 bool state;
264 264
265 if (mMultipleViewsAtOnce) 265 if (mMultipleViewsAtOnce)
266 state = KABPrefs::instance()->mDetailsPageVisible; 266 state = KABPrefs::instance()->mDetailsPageVisible;
267 else 267 else
268 state = false; 268 state = false;
269 269
270 mActionDetails->setChecked( state ); 270 mActionDetails->setChecked( state );
271 setDetailsVisible( state ); 271 setDetailsVisible( state );
272 272
273 state = KABPrefs::instance()->mJumpButtonBarVisible; 273 state = KABPrefs::instance()->mJumpButtonBarVisible;
274 274
275 mActionJumpBar->setChecked( state ); 275 mActionJumpBar->setChecked( state );
276 setJumpButtonBarVisible( state ); 276 setJumpButtonBarVisible( state );
277/*US 277/*US
278 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 278 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter;
279 if ( splitterSize.count() == 0 ) { 279 if ( splitterSize.count() == 0 ) {
280 splitterSize.append( width() / 2 ); 280 splitterSize.append( width() / 2 );
281 splitterSize.append( width() / 2 ); 281 splitterSize.append( width() / 2 );
282 } 282 }
283 mMiniSplitter->setSizes( splitterSize ); 283 mMiniSplitter->setSizes( splitterSize );
284 if ( mExtensionBarSplitter ) { 284 if ( mExtensionBarSplitter ) {
285 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 285 splitterSize = KABPrefs::instance()->mExtensionsSplitter;
286 if ( splitterSize.count() == 0 ) { 286 if ( splitterSize.count() == 0 ) {
287 splitterSize.append( width() / 2 ); 287 splitterSize.append( width() / 2 );
288 splitterSize.append( width() / 2 ); 288 splitterSize.append( width() / 2 );
289 } 289 }
290 mExtensionBarSplitter->setSizes( splitterSize ); 290 mExtensionBarSplitter->setSizes( splitterSize );
291 291
292 } 292 }
293*/ 293*/
294 mViewManager->restoreSettings(); 294 mViewManager->restoreSettings();
295 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField ); 295 mIncSearchWidget->setCurrentItem( KABPrefs::instance()->mCurrentIncSearchField );
296 mExtensionManager->restoreSettings(); 296 mExtensionManager->restoreSettings();
297 297#ifdef DESKTOP_VERSION
298 QValueList<int> splitterSize = KABPrefs::instance()->mDetailsSplitter; 298 int wid = width();
299 if ( splitterSize.count() == 0 ) { 299 if ( wid < 10 )
300 splitterSize.append( width() / 2 ); 300 wid = 400;
301 splitterSize.append( width() / 2 ); 301#else
302 int wid = QApplication::desktop()->width();
303 if ( wid < 640 )
304 wid = QApplication::desktop()->height();
305#endif
306 QValueList<int> splitterSize;// = KABPrefs::instance()->mDetailsSplitter;
307 if ( true /*splitterSize.count() == 0*/ ) {
308 splitterSize.append( wid / 2 );
309 splitterSize.append( wid / 2 );
302 } 310 }
303 mMiniSplitter->setSizes( splitterSize ); 311 mMiniSplitter->setSizes( splitterSize );
304 if ( mExtensionBarSplitter ) { 312 if ( mExtensionBarSplitter ) {
305 splitterSize = KABPrefs::instance()->mExtensionsSplitter; 313 //splitterSize = KABPrefs::instance()->mExtensionsSplitter;
306 if ( splitterSize.count() == 0 ) { 314 if ( true /*splitterSize.count() == 0*/ ) {
307 splitterSize.append( width() / 2 ); 315 splitterSize.append( wid / 2 );
308 splitterSize.append( width() / 2 ); 316 splitterSize.append( wid / 2 );
309 } 317 }
310 mExtensionBarSplitter->setSizes( splitterSize ); 318 mExtensionBarSplitter->setSizes( splitterSize );
311 319
312 } 320 }
313 321
314 322
315} 323}
316 324
317void KABCore::saveSettings() 325void KABCore::saveSettings()
318{ 326{
319 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked(); 327 KABPrefs::instance()->mJumpButtonBarVisible = mActionJumpBar->isChecked();
320 if ( mExtensionBarSplitter ) 328 if ( mExtensionBarSplitter )
321 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 329 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
322 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked(); 330 KABPrefs::instance()->mDetailsPageVisible = mActionDetails->isChecked();
323 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes(); 331 KABPrefs::instance()->mDetailsSplitter = mMiniSplitter->sizes();
324#ifndef KAB_EMBEDDED 332#ifndef KAB_EMBEDDED
325 333
326 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes(); 334 KABPrefs::instance()->mExtensionsSplitter = mExtensionBarSplitter->sizes();
327 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes(); 335 KABPrefs::instance()->mDetailsSplitter = mDetailsSplitter->sizes();
328#endif //KAB_EMBEDDED 336#endif //KAB_EMBEDDED
329 mExtensionManager->saveSettings(); 337 mExtensionManager->saveSettings();
330 mViewManager->saveSettings(); 338 mViewManager->saveSettings();
331 339
332 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem(); 340 KABPrefs::instance()->mCurrentIncSearchField = mIncSearchWidget->currentItem();
333} 341}
334 342
335KABC::AddressBook *KABCore::addressBook() const 343KABC::AddressBook *KABCore::addressBook() const
336{ 344{
337 return mAddressBook; 345 return mAddressBook;
338} 346}
339 347
340KConfig *KABCore::config() 348KConfig *KABCore::config()
341{ 349{
342#ifndef KAB_EMBEDDED 350#ifndef KAB_EMBEDDED
343 return KABPrefs::instance()->config(); 351 return KABPrefs::instance()->config();
344#else //KAB_EMBEDDED 352#else //KAB_EMBEDDED
345 return KABPrefs::instance()->getConfig(); 353 return KABPrefs::instance()->getConfig();
346#endif //KAB_EMBEDDED 354#endif //KAB_EMBEDDED
347} 355}
348 356
349KActionCollection *KABCore::actionCollection() const 357KActionCollection *KABCore::actionCollection() const
350{ 358{
351 return mGUIClient->actionCollection(); 359 return mGUIClient->actionCollection();
352} 360}
353 361
354KABC::Field *KABCore::currentSearchField() const 362KABC::Field *KABCore::currentSearchField() const
355{ 363{
356 if (mIncSearchWidget) 364 if (mIncSearchWidget)
357 return mIncSearchWidget->currentField(); 365 return mIncSearchWidget->currentField();
358 else 366 else
359 return 0; 367 return 0;
360} 368}
361 369
362QStringList KABCore::selectedUIDs() const 370QStringList KABCore::selectedUIDs() const
363{ 371{
364 return mViewManager->selectedUids(); 372 return mViewManager->selectedUids();
365} 373}
366 374
367KABC::Resource *KABCore::requestResource( QWidget *parent ) 375KABC::Resource *KABCore::requestResource( QWidget *parent )
368{ 376{
369 QPtrList<KABC::Resource> kabcResources = addressBook()->resources(); 377 QPtrList<KABC::Resource> kabcResources = addressBook()->resources();
370 378
371 QPtrList<KRES::Resource> kresResources; 379 QPtrList<KRES::Resource> kresResources;
372 QPtrListIterator<KABC::Resource> resIt( kabcResources ); 380 QPtrListIterator<KABC::Resource> resIt( kabcResources );
373 KABC::Resource *resource; 381 KABC::Resource *resource;
374 while ( ( resource = resIt.current() ) != 0 ) { 382 while ( ( resource = resIt.current() ) != 0 ) {
375 ++resIt; 383 ++resIt;
376 if ( !resource->readOnly() ) { 384 if ( !resource->readOnly() ) {
377 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 385 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
378 if ( res ) 386 if ( res )
379 kresResources.append( res ); 387 kresResources.append( res );
380 } 388 }
381 } 389 }
382 390
383 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent ); 391 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, parent );
384 return static_cast<KABC::Resource*>( res ); 392 return static_cast<KABC::Resource*>( res );
385} 393}
386 394
387#ifndef KAB_EMBEDDED 395#ifndef KAB_EMBEDDED
388KAboutData *KABCore::createAboutData() 396KAboutData *KABCore::createAboutData()
389#else //KAB_EMBEDDED 397#else //KAB_EMBEDDED
390void KABCore::createAboutData() 398void KABCore::createAboutData()
391#endif //KAB_EMBEDDED 399#endif //KAB_EMBEDDED
392{ 400{
393#ifndef KAB_EMBEDDED 401#ifndef KAB_EMBEDDED
394 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ), 402 KAboutData *about = new KAboutData( "kaddressbook", I18N_NOOP( "KAddressBook" ),
395 "3.1", I18N_NOOP( "The KDE Address Book" ), 403 "3.1", I18N_NOOP( "The KDE Address Book" ),
396 KAboutData::License_GPL_V2, 404 KAboutData::License_GPL_V2,
397 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) ); 405 I18N_NOOP( "(c) 1997-2003, The KDE PIM Team" ) );
398 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" ); 406 about->addAuthor( "Tobias Koenig", I18N_NOOP( "Current maintainer " ), "tokoe@kde.org" );
399 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) ); 407 about->addAuthor( "Don Sanders", I18N_NOOP( "Original author " ) );
400 about->addAuthor( "Cornelius Schumacher", 408 about->addAuthor( "Cornelius Schumacher",
401 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ), 409 I18N_NOOP( "Co-maintainer, libkabc port, CSV import/export " ),
402 "schumacher@kde.org" ); 410 "schumacher@kde.org" );
403 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ), 411 about->addAuthor( "Mike Pilone", I18N_NOOP( "GUI and framework redesign " ),
404 "mpilone@slac.com" ); 412 "mpilone@slac.com" );
405 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) ); 413 about->addAuthor( "Greg Stern", I18N_NOOP( "DCOP interface" ) );
406 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) ); 414 about->addAuthor( "Mark Westcott", I18N_NOOP( "Contact pinning" ) );
407 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ), 415 about->addAuthor( "Michel Boyer de la Giroday", I18N_NOOP( "LDAP Lookup\n" ),
408 "michel@klaralvdalens-datakonsult.se" ); 416 "michel@klaralvdalens-datakonsult.se" );
409 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ), 417 about->addAuthor( "Steffen Hansen", I18N_NOOP( "LDAP Lookup " ),
410 "hansen@kde.org" ); 418 "hansen@kde.org" );
411 419
412 return about; 420 return about;
413#endif //KAB_EMBEDDED 421#endif //KAB_EMBEDDED
414 422
415 QString version; 423 QString version;
416#include <../version> 424#include <../version>
417 QMessageBox::about( this, "About KAddressbook/Pi", 425 QMessageBox::about( this, "About KAddressbook/Pi",
418 "KAddressbook/Platform-independent\n" 426 "KAddressbook/Platform-independent\n"
419 "(KA/Pi) " +version + " - " + 427 "(KA/Pi) " +version + " - " +
420#ifdef DESKTOP_VERSION 428#ifdef DESKTOP_VERSION
421 "Desktop Edition\n" 429 "Desktop Edition\n"
422#else 430#else
423 "PDA-Edition\n" 431 "PDA-Edition\n"
424 "for: Zaurus 5500 / 7x0 / 8x0\n" 432 "for: Zaurus 5500 / 7x0 / 8x0\n"
425#endif 433#endif
426 434
427 "(c) 2004 Ulf Schenk\n" 435 "(c) 2004 Ulf Schenk\n"
428 "(c) 2004 Lutz Rogowski\n" 436 "(c) 2004 Lutz Rogowski\n"
429 "(c) 1997-2003, The KDE PIM Team\n" 437 "(c) 1997-2003, The KDE PIM Team\n"
430 "Tobias Koenig Current maintainer\ntokoe@kde.org\n" 438 "Tobias Koenig Current maintainer\ntokoe@kde.org\n"
431 "Don Sanders Original author\n" 439 "Don Sanders Original author\n"
432 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n" 440 "Cornelius Schumacher Co-maintainer\nschumacher@kde.org\n"
433 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n" 441 "Mike Pilone GUI and framework redesign\nmpilone@slac.com\n"
434 "Greg Stern DCOP interface\n" 442 "Greg Stern DCOP interface\n"
435 "Mark Westcot Contact pinning\n" 443 "Mark Westcot Contact pinning\n"
436 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n" 444 "Michel Boyer de la Giroday LDAP Lookup\n" "michel@klaralvdalens-datakonsult.se\n"
437 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n" 445 "Steffen Hansen LDAP Lookup\nhansen@kde.org\n"
438#ifdef _WIN32_ 446#ifdef _WIN32_
439 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n" 447 "(c) 2004 Lutz Rogowski Import from OL\nrogowski@kde.org\n"
440#endif 448#endif
441 ); 449 );
442} 450}
443 451
444void KABCore::setContactSelected( const QString &uid ) 452void KABCore::setContactSelected( const QString &uid )
445{ 453{
446 KABC::Addressee addr = mAddressBook->findByUid( uid ); 454 KABC::Addressee addr = mAddressBook->findByUid( uid );
447 if ( !mDetails->isHidden() ) 455 if ( !mDetails->isHidden() )
448 mDetails->setAddressee( addr ); 456 mDetails->setAddressee( addr );
449 457
450 if ( !addr.isEmpty() ) { 458 if ( !addr.isEmpty() ) {
451 emit contactSelected( addr.formattedName() ); 459 emit contactSelected( addr.formattedName() );
452 KABC::Picture pic = addr.photo(); 460 KABC::Picture pic = addr.photo();
453 if ( pic.isIntern() ) { 461 if ( pic.isIntern() ) {
454//US emit contactSelected( pic.data() ); 462//US emit contactSelected( pic.data() );
455//US instead use: 463//US instead use:
456 QPixmap px; 464 QPixmap px;
457 if (pic.data().isNull() != true) 465 if (pic.data().isNull() != true)
458 { 466 {
459 px.convertFromImage(pic.data()); 467 px.convertFromImage(pic.data());
460 } 468 }
461 469
462 emit contactSelected( px ); 470 emit contactSelected( px );
463 } 471 }
464 } 472 }
465 473
466 474
467 mExtensionManager->setSelectionChanged(); 475 mExtensionManager->setSelectionChanged();
468 476
469 // update the actions 477 // update the actions
470 bool selected = !uid.isEmpty(); 478 bool selected = !uid.isEmpty();
471 479
472 if ( mReadWrite ) { 480 if ( mReadWrite ) {
473 mActionCut->setEnabled( selected ); 481 mActionCut->setEnabled( selected );
474 mActionPaste->setEnabled( selected ); 482 mActionPaste->setEnabled( selected );
475 } 483 }
476 484
477 mActionCopy->setEnabled( selected ); 485 mActionCopy->setEnabled( selected );
478 mActionDelete->setEnabled( selected ); 486 mActionDelete->setEnabled( selected );
479 mActionEditAddressee->setEnabled( selected ); 487 mActionEditAddressee->setEnabled( selected );
480 mActionMail->setEnabled( selected ); 488 mActionMail->setEnabled( selected );
481 mActionMailVCard->setEnabled( selected ); 489 mActionMailVCard->setEnabled( selected );
482 //if (mActionBeam) 490 //if (mActionBeam)
483 //mActionBeam->setEnabled( selected ); 491 //mActionBeam->setEnabled( selected );
484 492
485 if (mActionBeamVCard) 493 if (mActionBeamVCard)
486 mActionBeamVCard->setEnabled( selected ); 494 mActionBeamVCard->setEnabled( selected );
487 495
488 mActionWhoAmI->setEnabled( selected ); 496 mActionWhoAmI->setEnabled( selected );
489 mActionCategories->setEnabled( selected ); 497 mActionCategories->setEnabled( selected );
490} 498}
491 499
492void KABCore::sendMail() 500void KABCore::sendMail()
493{ 501{
494 sendMail( mViewManager->selectedEmails().join( ", " ) ); 502 sendMail( mViewManager->selectedEmails().join( ", " ) );
495} 503}
496 504
497void KABCore::sendMail( const QString& emaillist ) 505void KABCore::sendMail( const QString& emaillist )
498{ 506{
499 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 507 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
500 if (emaillist.contains(",") > 0) 508 if (emaillist.contains(",") > 0)
501 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 509 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
502 else 510 else
503 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 511 ExternalAppHandler::instance()->mailToOneContact( emaillist );
504} 512}
505 513
506 514
507 515
508void KABCore::mailVCard() 516void KABCore::mailVCard()
509{ 517{
510 QStringList uids = mViewManager->selectedUids(); 518 QStringList uids = mViewManager->selectedUids();
511 if ( !uids.isEmpty() ) 519 if ( !uids.isEmpty() )
512 mailVCard( uids ); 520 mailVCard( uids );
513} 521}
514 522
515void KABCore::mailVCard( const QStringList& uids ) 523void KABCore::mailVCard( const QStringList& uids )
516{ 524{
517 QStringList urls; 525 QStringList urls;
518 526
519// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 527// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
520 528
521 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 529 QString dirName = "/tmp/" + KApplication::randomString( 8 );
522 530
523 531
524 532
525 QDir().mkdir( dirName, true ); 533 QDir().mkdir( dirName, true );
526 534
527 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 535 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
528 KABC::Addressee a = mAddressBook->findByUid( *it ); 536 KABC::Addressee a = mAddressBook->findByUid( *it );
529 537
530 if ( a.isEmpty() ) 538 if ( a.isEmpty() )
531 continue; 539 continue;
532 540
533 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 541 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
534 542
535 QString fileName = dirName + "/" + name; 543 QString fileName = dirName + "/" + name;
536 544
537 QFile outFile(fileName); 545 QFile outFile(fileName);
538 546
539 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 547 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
540 KABC::VCardConverter converter; 548 KABC::VCardConverter converter;
541 QString vcard; 549 QString vcard;
542 550
543 converter.addresseeToVCard( a, vcard ); 551 converter.addresseeToVCard( a, vcard );
544 552
545 QTextStream t( &outFile ); // use a text stream 553 QTextStream t( &outFile ); // use a text stream
546 t.setEncoding( QTextStream::UnicodeUTF8 ); 554 t.setEncoding( QTextStream::UnicodeUTF8 );
547 t << vcard; 555 t << vcard;
548 556
549 outFile.close(); 557 outFile.close();
550 558
551 urls.append( fileName ); 559 urls.append( fileName );
552 } 560 }
553 } 561 }
554 562
555 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 563 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
556 564
557 565
558/*US 566/*US
559 kapp->invokeMailer( QString::null, QString::null, QString::null, 567 kapp->invokeMailer( QString::null, QString::null, QString::null,
560 QString::null, // subject 568 QString::null, // subject
561 QString::null, // body 569 QString::null, // body
562 QString::null, 570 QString::null,
563 urls ); // attachments 571 urls ); // attachments
564*/ 572*/
565 573
566} 574}