summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--gammu/emb/common/service/gsmcal.c15
-rw-r--r--gammu/emb/common/service/gsmcal.h1
-rw-r--r--kaddressbook/kabcore.cpp6
-rw-r--r--korganizer/calendarview.cpp12
-rw-r--r--microkde/kapplication.cpp22
-rw-r--r--microkde/kapplication.h1
6 files changed, 50 insertions, 7 deletions
diff --git a/gammu/emb/common/service/gsmcal.c b/gammu/emb/common/service/gsmcal.c
index 0ea8e06..0375fee 100644
--- a/gammu/emb/common/service/gsmcal.c
+++ b/gammu/emb/common/service/gsmcal.c
@@ -1,512 +1,521 @@
1/* (c) 2002-2003 by Marcin Wiacek */ 1/* (c) 2002-2003 by Marcin Wiacek */
2 2
3#include <string.h> 3#include <string.h>
4 4
5#include "gsmcal.h" 5#include "gsmcal.h"
6#include "gsmmisc.h" 6#include "gsmmisc.h"
7#include "../misc/coding/coding.h" 7#include "../misc/coding/coding.h"
8 8
9bool IsCalendarNoteFromThePast(GSM_CalendarEntry *note) 9bool IsCalendarNoteFromThePast(GSM_CalendarEntry *note)
10{ 10{
11 bool Past = true; 11 bool Past = true;
12 int i; 12 int i;
13 GSM_DateTimeDT; 13 GSM_DateTimeDT;
14 14
15 GSM_GetCurrentDateTime (&DT); 15 GSM_GetCurrentDateTime (&DT);
16 for (i = 0; i < note->EntriesNum; i++) { 16 for (i = 0; i < note->EntriesNum; i++) {
17 switch (note->Entries[i].EntryType) { 17 switch (note->Entries[i].EntryType) {
18 case CAL_RECURRANCE: 18 case CAL_RECURRANCE:
19 Past = false; 19 Past = false;
20 break; 20 break;
21 case CAL_START_DATETIME : 21 case CAL_START_DATETIME :
22 if (note->Entries[i].Date.Year > DT.Year) Past = false; 22 if (note->Entries[i].Date.Year > DT.Year) Past = false;
23 if (note->Entries[i].Date.Year == DT.Year && 23 if (note->Entries[i].Date.Year == DT.Year &&
24 note->Entries[i].Date.Month > DT.Month) Past = false; 24 note->Entries[i].Date.Month > DT.Month) Past = false;
25 if (note->Entries[i].Date.Year == DT.Year && 25 if (note->Entries[i].Date.Year == DT.Year &&
26 note->Entries[i].Date.Month == DT.Month && 26 note->Entries[i].Date.Month == DT.Month &&
27 note->Entries[i].Date.Day > DT.Day) Past = false; 27 note->Entries[i].Date.Day > DT.Day) Past = false;
28 break; 28 break;
29 default: 29 default:
30 break; 30 break;
31 } 31 }
32 if (!Past) break; 32 if (!Past) break;
33 } 33 }
34 switch (note->Type) { 34 switch (note->Type) {
35 case GSM_CAL_BIRTHDAY: 35 case GSM_CAL_BIRTHDAY:
36 Past = false; 36 Past = false;
37 break; 37 break;
38 default: 38 default:
39 break; 39 break;
40 } 40 }
41 return Past; 41 return Past;
42} 42}
43 43
44void GSM_CalendarFindDefaultTextTimeAlarmPhoneRecurrance(GSM_CalendarEntry *entry, int *Text, int *Time, int *Alarm, int *Phone, int *Recurrance, int *EndTime, int *Location) 44void GSM_CalendarFindDefaultTextTimeAlarmPhoneRecurrance(GSM_CalendarEntry *entry, int *Text, int *Time, int *Alarm, int *Phone, int *Recurrance, int *EndTime, int *Location)
45{ 45{
46 int i; 46 int i;
47 47
48 *Text = -1; 48 *Text = -1;
49 *Time = -1; 49 *Time = -1;
50 *Alarm = -1; 50 *Alarm = -1;
51 *Phone = -1; 51 *Phone = -1;
52 *Recurrance= -1; 52 *Recurrance= -1;
53 *EndTime= -1; 53 *EndTime= -1;
54 *Location= -1; 54 *Location= -1;
55 for (i = 0; i < entry->EntriesNum; i++) { 55 for (i = 0; i < entry->EntriesNum; i++) {
56 switch (entry->Entries[i].EntryType) { 56 switch (entry->Entries[i].EntryType) {
57 case CAL_START_DATETIME : 57 case CAL_START_DATETIME :
58 if (*Time == -1) *Time = i; 58 if (*Time == -1) *Time = i;
59 break; 59 break;
60 case CAL_END_DATETIME : 60 case CAL_END_DATETIME :
61 if (*EndTime == -1) *EndTime = i; 61 if (*EndTime == -1) *EndTime = i;
62 break; 62 break;
63 case CAL_ALARM_DATETIME : 63 case CAL_ALARM_DATETIME :
64 case CAL_SILENT_ALARM_DATETIME: 64 case CAL_SILENT_ALARM_DATETIME:
65 if (*Alarm == -1) *Alarm = i; 65 if (*Alarm == -1) *Alarm = i;
66 break; 66 break;
67 case CAL_RECURRANCE: 67 case CAL_RECURRANCE:
68 if (*Recurrance == -1) *Recurrance = i; 68 if (*Recurrance == -1) *Recurrance = i;
69 break; 69 break;
70 case CAL_TEXT: 70 case CAL_TEXT:
71 *Text = i;
72 break;
73 case CAL_DESCRIPTION:
71 if (*Text == -1) *Text = i; 74 if (*Text == -1) *Text = i;
72 break; 75 break;
73 case CAL_PHONE: 76 case CAL_PHONE:
74 if (*Phone == -1) *Phone = i; 77 if (*Phone == -1) *Phone = i;
75 break; 78 break;
76 case CAL_LOCATION: 79 case CAL_LOCATION:
77 if (*Location == -1) *Location = i; 80 if (*Location == -1) *Location = i;
78 break; 81 break;
79 default: 82 default:
80 break; 83 break;
81 } 84 }
82 } 85 }
83} 86}
84 87
85GSM_Error GSM_EncodeVCALENDAR(char *Buffer, int *Length, GSM_CalendarEntry *note, bool header, GSM_VCalendarVersion Version) 88GSM_Error GSM_EncodeVCALENDAR(char *Buffer, int *Length, GSM_CalendarEntry *note, bool header, GSM_VCalendarVersion Version)
86{ 89{
87 int Text, Time, Alarm, Phone, Recurrance, EndTime, Location; 90 int Text, Time, Alarm, Phone, Recurrance, EndTime, Location;
88 char buffer[2000]; 91 char buffer[2000];
89 92
90 GSM_CalendarFindDefaultTextTimeAlarmPhoneRecurrance(note, &Text, &Time, &Alarm, &Phone, &Recurrance, &EndTime, &Location); 93 GSM_CalendarFindDefaultTextTimeAlarmPhoneRecurrance(note, &Text, &Time, &Alarm, &Phone, &Recurrance, &EndTime, &Location);
91 94
92 if (header) { 95 if (header) {
93 *Length+=sprintf(Buffer, "BEGIN:VCALENDAR%c%c",13,10); 96 *Length+=sprintf(Buffer, "BEGIN:VCALENDAR%c%c",13,10);
94 *Length+=sprintf(Buffer+(*Length), "VERSION:1.0%c%c",13,10); 97 *Length+=sprintf(Buffer+(*Length), "VERSION:1.0%c%c",13,10);
95 } 98 }
96 *Length+=sprintf(Buffer+(*Length), "BEGIN:VEVENT%c%c",13,10); 99 *Length+=sprintf(Buffer+(*Length), "BEGIN:VEVENT%c%c",13,10);
97 100
98 if (Version == Nokia_VCalendar) { 101 if (Version == Nokia_VCalendar) {
99 *Length+=sprintf(Buffer+(*Length), "CATEGORIES:"); 102 *Length+=sprintf(Buffer+(*Length), "CATEGORIES:");
100 switch (note->Type) { 103 switch (note->Type) {
101 case GSM_CAL_REMINDER: 104 case GSM_CAL_REMINDER:
102 *Length+=sprintf(Buffer+(*Length), "Reminder%c%c",13,10); 105 *Length+=sprintf(Buffer+(*Length), "Reminder%c%c",13,10);
103 break; 106 break;
104 case GSM_CAL_MEMO: 107 case GSM_CAL_MEMO:
105 *Length+=sprintf(Buffer+(*Length), "Miscellaneous%c%c",13,10); 108 *Length+=sprintf(Buffer+(*Length), "Miscellaneous%c%c",13,10);
106 break; 109 break;
107 case GSM_CAL_CALL: 110 case GSM_CAL_CALL:
108 *Length+=sprintf(Buffer+(*Length), "Phone Call%c%c",13,10); 111 *Length+=sprintf(Buffer+(*Length), "Phone Call%c%c",13,10);
109 break; 112 break;
110 case GSM_CAL_BIRTHDAY: 113 case GSM_CAL_BIRTHDAY:
111 *Length+=sprintf(Buffer+(*Length), "Special Occasion%c%c",13,10); 114 *Length+=sprintf(Buffer+(*Length), "Special Occasion%c%c",13,10);
112 break; 115 break;
113 case GSM_CAL_MEETING: 116 case GSM_CAL_MEETING:
114 default: 117 default:
115 *Length+=sprintf(Buffer+(*Length), "MeetingDEF%c%c",13,10); 118 *Length+=sprintf(Buffer+(*Length), "MeetingDEF%c%c",13,10);
116 break; 119 break;
117 } 120 }
118 if (note->Type == GSM_CAL_CALL) { 121 if (note->Type == GSM_CAL_CALL) {
119 buffer[0] = 0; 122 buffer[0] = 0;
120 buffer[1] = 0; 123 buffer[1] = 0;
121 if (Phone != -1) CopyUnicodeString(buffer,note->Entries[Phone].Text); 124 if (Phone != -1) CopyUnicodeString(buffer,note->Entries[Phone].Text);
122 if (Text != -1) { 125 if (Text != -1) {
123 if (Phone != -1) EncodeUnicode(buffer+UnicodeLength(buffer)*2," ",1); 126 if (Phone != -1) EncodeUnicode(buffer+UnicodeLength(buffer)*2," ",1);
124 CopyUnicodeString(buffer+UnicodeLength(buffer)*2,note->Entries[Text].Text); 127 CopyUnicodeString(buffer+UnicodeLength(buffer)*2,note->Entries[Text].Text);
125 } 128 }
126 SaveVCALText(Buffer, Length, buffer, "SUMMARY"); 129 SaveVCALText(Buffer, Length, buffer, "SUMMARY");
127 } else { 130 } else {
128 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY"); 131 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY");
129 } 132 }
130 if (note->Type == GSM_CAL_MEETING && Location != -1) { 133 if (note->Type == GSM_CAL_MEETING && Location != -1) {
131 SaveVCALText(Buffer, Length, note->Entries[Location].Text, "LOCATION"); 134 SaveVCALText(Buffer, Length, note->Entries[Location].Text, "LOCATION");
132 } 135 }
133 136
134 if (Time == -1) return ERR_UNKNOWN; 137 if (Time == -1) return ERR_UNKNOWN;
135 SaveVCALDateTime(Buffer, Length, &note->Entries[Time].Date, "DTSTART"); 138 SaveVCALDateTime(Buffer, Length, &note->Entries[Time].Date, "DTSTART");
136 139
137 if (EndTime != -1) { 140 if (EndTime != -1) {
138 SaveVCALDateTime(Buffer, Length, &note->Entries[EndTime].Date, "DTEND"); 141 SaveVCALDateTime(Buffer, Length, &note->Entries[EndTime].Date, "DTEND");
139 } 142 }
140 143
141 if (Alarm != -1) { 144 if (Alarm != -1) {
142 if (note->Entries[Alarm].EntryType == CAL_SILENT_ALARM_DATETIME) { 145 if (note->Entries[Alarm].EntryType == CAL_SILENT_ALARM_DATETIME) {
143 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM"); 146 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM");
144 } else { 147 } else {
145 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM"); 148 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM");
146 } 149 }
147 } 150 }
148 151
149 /* Birthday is known to be recurranced */ 152 /* Birthday is known to be recurranced */
150 if (Recurrance != -1 && note->Type != GSM_CAL_BIRTHDAY) { 153 if (Recurrance != -1 && note->Type != GSM_CAL_BIRTHDAY) {
151 switch(note->Entries[Recurrance].Number/24) { 154 switch(note->Entries[Recurrance].Number/24) {
152 case 1 : *Length+=sprintf(Buffer+(*Length), "RRULE:D1 #0%c%c",13,10); break; 155 case 1 : *Length+=sprintf(Buffer+(*Length), "RRULE:D1 #0%c%c",13,10); break;
153 case 7 : *Length+=sprintf(Buffer+(*Length), "RRULE:W1 #0%c%c",13,10); break; 156 case 7 : *Length+=sprintf(Buffer+(*Length), "RRULE:W1 #0%c%c",13,10); break;
154 case 14 : *Length+=sprintf(Buffer+(*Length), "RRULE:W2 #0%c%c",13,10); break; 157 case 14 : *Length+=sprintf(Buffer+(*Length), "RRULE:W2 #0%c%c",13,10); break;
155 case 365 : *Length+=sprintf(Buffer+(*Length), "RRULE:YD1 #0%c%c",13,10); break; 158 case 365 : *Length+=sprintf(Buffer+(*Length), "RRULE:YD1 #0%c%c",13,10); break;
156 } 159 }
157 } 160 }
158 } else if (Version == Siemens_VCalendar) { 161 } else if (Version == Siemens_VCalendar) {
159 *Length+=sprintf(Buffer+(*Length), "CATEGORIES:"); 162 *Length+=sprintf(Buffer+(*Length), "CATEGORIES:");
160 switch (note->Type) { 163 switch (note->Type) {
161 case GSM_CAL_MEETING: 164 case GSM_CAL_MEETING:
162 *Length+=sprintf(Buffer+(*Length), "Meeting%c%c",13,10); 165 *Length+=sprintf(Buffer+(*Length), "Meeting%c%c",13,10);
163 break; 166 break;
164 case GSM_CAL_CALL: 167 case GSM_CAL_CALL:
165 *Length+=sprintf(Buffer+(*Length), "Phone Call%c%c",13,10); 168 *Length+=sprintf(Buffer+(*Length), "Phone Call%c%c",13,10);
166 break; 169 break;
167 case GSM_CAL_BIRTHDAY: 170 case GSM_CAL_BIRTHDAY:
168 *Length+=sprintf(Buffer+(*Length), "Anniversary%c%c",13,10); 171 *Length+=sprintf(Buffer+(*Length), "Anniversary%c%c",13,10);
169 break; 172 break;
170 case GSM_CAL_MEMO: 173 case GSM_CAL_MEMO:
171 default: 174 default:
172 *Length+=sprintf(Buffer+(*Length), "Miscellaneous%c%c",13,10); 175 *Length+=sprintf(Buffer+(*Length), "Miscellaneous%c%c",13,10);
173 break; 176 break;
174 } 177 }
175 178
176 if (Time == -1) return ERR_UNKNOWN; 179 if (Time == -1) return ERR_UNKNOWN;
177 SaveVCALDateTime(Buffer, Length, &note->Entries[Time].Date, "DTSTART"); 180 SaveVCALDateTime(Buffer, Length, &note->Entries[Time].Date, "DTSTART");
178 181
179 if (Alarm != -1) { 182 if (Alarm != -1) {
180 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM"); 183 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM");
181 } 184 }
182 185
183 if (Recurrance != -1) { 186 if (Recurrance != -1) {
184 switch(note->Entries[Recurrance].Number/24) { 187 switch(note->Entries[Recurrance].Number/24) {
185 case 1 : *Length+=sprintf(Buffer+(*Length), "RRULE:D1%c%c",13,10);break; 188 case 1 : *Length+=sprintf(Buffer+(*Length), "RRULE:D1%c%c",13,10);break;
186 case 7 : *Length+=sprintf(Buffer+(*Length), "RRULE:D7%c%c",13,10);break; 189 case 7 : *Length+=sprintf(Buffer+(*Length), "RRULE:D7%c%c",13,10);break;
187 case 30 : *Length+=sprintf(Buffer+(*Length), "RRULE:MD1%c%c",13,10);break; 190 case 30 : *Length+=sprintf(Buffer+(*Length), "RRULE:MD1%c%c",13,10);break;
188 case 365 : *Length+=sprintf(Buffer+(*Length), "RRULE:YD1%c%c",13,10);break; 191 case 365 : *Length+=sprintf(Buffer+(*Length), "RRULE:YD1%c%c",13,10);break;
189 } 192 }
190 } 193 }
191 194
192 if (note->Type == GSM_CAL_CALL) { 195 if (note->Type == GSM_CAL_CALL) {
193 buffer[0] = 0; 196 buffer[0] = 0;
194 buffer[1] = 0; 197 buffer[1] = 0;
195 if (Phone != -1) CopyUnicodeString(buffer,note->Entries[Phone].Text); 198 if (Phone != -1) CopyUnicodeString(buffer,note->Entries[Phone].Text);
196 if (Text != -1) { 199 if (Text != -1) {
197 if (Phone != -1) EncodeUnicode(buffer+UnicodeLength(buffer)*2," ",1); 200 if (Phone != -1) EncodeUnicode(buffer+UnicodeLength(buffer)*2," ",1);
198 CopyUnicodeString(buffer+UnicodeLength(buffer)*2,note->Entries[Text].Text); 201 CopyUnicodeString(buffer+UnicodeLength(buffer)*2,note->Entries[Text].Text);
199 } 202 }
200 SaveVCALText(Buffer, Length, buffer, "DESCRIPTION"); 203 SaveVCALText(Buffer, Length, buffer, "SUMMARY");
201 } else { 204 } else {
202 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "DESCRIPTION"); 205 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY");
203 } 206 }
204 } else if (Version == SonyEricsson_VCalendar) { 207 } else if (Version == SonyEricsson_VCalendar) {
205 *Length+=sprintf(Buffer+(*Length), "CATEGORIES:"); 208 *Length+=sprintf(Buffer+(*Length), "CATEGORIES:");
206 switch (note->Type) { 209 switch (note->Type) {
207 case GSM_CAL_MEETING: 210 case GSM_CAL_MEETING:
208 *Length+=sprintf(Buffer+(*Length), "Meeting%c%c",13,10); 211 *Length+=sprintf(Buffer+(*Length), "Meeting%c%c",13,10);
209 break; 212 break;
210 case GSM_CAL_REMINDER: 213 case GSM_CAL_REMINDER:
211 *Length+=sprintf(Buffer+(*Length), "Date%c%c",13,10); 214 *Length+=sprintf(Buffer+(*Length), "Date%c%c",13,10);
212 break; 215 break;
213 case GSM_CAL_TRAVEL: 216 case GSM_CAL_TRAVEL:
214 *Length+=sprintf(Buffer+(*Length), "Travel%c%c",13,10); 217 *Length+=sprintf(Buffer+(*Length), "Travel%c%c",13,10);
215 break; 218 break;
216 case GSM_CAL_VACATION: 219 case GSM_CAL_VACATION:
217 *Length+=sprintf(Buffer+(*Length), "Vacation%c%c",13,10); 220 *Length+=sprintf(Buffer+(*Length), "Vacation%c%c",13,10);
218 break; 221 break;
219 case GSM_CAL_BIRTHDAY: 222 case GSM_CAL_BIRTHDAY:
220 *Length+=sprintf(Buffer+(*Length), "Anninversary%c%c",13,10); 223 *Length+=sprintf(Buffer+(*Length), "Anninversary%c%c",13,10);
221 break; 224 break;
222 case GSM_CAL_MEMO: 225 case GSM_CAL_MEMO:
223 default: 226 default:
224 *Length+=sprintf(Buffer+(*Length), "Miscellaneous%c%c",13,10); 227 *Length+=sprintf(Buffer+(*Length), "Miscellaneous%c%c",13,10);
225 break; 228 break;
226 } 229 }
227 230
228 if (Time == -1) return ERR_UNKNOWN; 231 if (Time == -1) return ERR_UNKNOWN;
229 SaveVCALDateTime(Buffer, Length, &note->Entries[Time].Date, "DTSTART"); 232 SaveVCALDateTime(Buffer, Length, &note->Entries[Time].Date, "DTSTART");
230 233
231 if (EndTime != -1) { 234 if (EndTime != -1) {
232 SaveVCALDateTime(Buffer, Length, &note->Entries[EndTime].Date, "DTEND"); 235 SaveVCALDateTime(Buffer, Length, &note->Entries[EndTime].Date, "DTEND");
233 } 236 }
234 237
235 if (Alarm != -1) { 238 if (Alarm != -1) {
236 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "AALARM"); 239 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "AALARM");
237 } 240 }
238 241
239 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY"); 242 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY");
240 243
241 if (Location != -1) { 244 if (Location != -1) {
242 SaveVCALText(Buffer, Length, note->Entries[Location].Text, "LOCATION"); 245 SaveVCALText(Buffer, Length, note->Entries[Location].Text, "LOCATION");
243 } 246 }
244 } 247 }
245 248
246 *Length+=sprintf(Buffer+(*Length), "X-PILOTID:%d%c%c",note->Location,13,10); 249 *Length+=sprintf(Buffer+(*Length), "X-PILOTID:%d%c%c",note->Location,13,10);
247 *Length+=sprintf(Buffer+(*Length), "END:VEVENT%c%c",13,10); 250 *Length+=sprintf(Buffer+(*Length), "END:VEVENT%c%c",13,10);
248 if (header) *Length+=sprintf(Buffer+(*Length), "END:VCALENDAR%c%c",13,10); 251 if (header) *Length+=sprintf(Buffer+(*Length), "END:VCALENDAR%c%c",13,10);
249 252
250 return ERR_NONE; 253 return ERR_NONE;
251} 254}
252 255
253void GSM_ToDoFindDefaultTextTimeAlarmCompleted(GSM_ToDoEntry *entry, int *Text, int *Alarm, int *Completed, int *EndTime, int *Phone) 256void GSM_ToDoFindDefaultTextTimeAlarmCompleted(GSM_ToDoEntry *entry, int *Text, int *Alarm, int *Completed, int *EndTime, int *Phone)
254{ 257{
255 int i; 258 int i;
256 259
257 *Text = -1; 260 *Text = -1;
258 *EndTime= -1; 261 *EndTime= -1;
259 *Alarm = -1; 262 *Alarm = -1;
260 *Completed= -1; 263 *Completed= -1;
261 *Phone = -1; 264 *Phone = -1;
262 for (i = 0; i < entry->EntriesNum; i++) { 265 for (i = 0; i < entry->EntriesNum; i++) {
263 switch (entry->Entries[i].EntryType) { 266 switch (entry->Entries[i].EntryType) {
264 case TODO_END_DATETIME : 267 case TODO_END_DATETIME :
265 if (*EndTime == -1) *EndTime = i; 268 if (*EndTime == -1) *EndTime = i;
266 break; 269 break;
267 case TODO_ALARM_DATETIME : 270 case TODO_ALARM_DATETIME :
268 case TODO_SILENT_ALARM_DATETIME: 271 case TODO_SILENT_ALARM_DATETIME:
269 if (*Alarm == -1) *Alarm = i; 272 if (*Alarm == -1) *Alarm = i;
270 break; 273 break;
271 case TODO_TEXT: 274 case TODO_TEXT:
272 if (*Text == -1) *Text = i; 275 if (*Text == -1) *Text = i;
273 break; 276 break;
274 case TODO_COMPLETED: 277 case TODO_COMPLETED:
275 if (*Completed == -1) *Completed = i; 278 if (*Completed == -1) *Completed = i;
276 break; 279 break;
277 case TODO_PHONE: 280 case TODO_PHONE:
278 if (*Phone == -1) *Phone = i; 281 if (*Phone == -1) *Phone = i;
279 break; 282 break;
280 default: 283 default:
281 break; 284 break;
282 } 285 }
283 } 286 }
284} 287}
285 288
286GSM_Error GSM_EncodeVTODO(char *Buffer, int *Length, GSM_ToDoEntry *note, bool header, GSM_VToDoVersion Version) 289GSM_Error GSM_EncodeVTODO(char *Buffer, int *Length, GSM_ToDoEntry *note, bool header, GSM_VToDoVersion Version)
287{ 290{
288 int Text, Alarm, Completed, EndTime, Phone; 291 int Text, Alarm, Completed, EndTime, Phone;
289 292
290 GSM_ToDoFindDefaultTextTimeAlarmCompleted(note, &Text, &Alarm, &Completed, &EndTime, &Phone); 293 GSM_ToDoFindDefaultTextTimeAlarmCompleted(note, &Text, &Alarm, &Completed, &EndTime, &Phone);
291 294
292 if (header) { 295 if (header) {
293 *Length+=sprintf(Buffer, "BEGIN:VCALENDAR%c%c",13,10); 296 *Length+=sprintf(Buffer, "BEGIN:VCALENDAR%c%c",13,10);
294 *Length+=sprintf(Buffer+(*Length), "VERSION:1.0%c%c",13,10); 297 *Length+=sprintf(Buffer+(*Length), "VERSION:1.0%c%c",13,10);
295 } 298 }
296 299
297 *Length+=sprintf(Buffer+(*Length), "BEGIN:VTODO%c%c",13,10); 300 *Length+=sprintf(Buffer+(*Length), "BEGIN:VTODO%c%c",13,10);
298 301
299 if (Version == Nokia_VToDo) { 302 if (Version == Nokia_VToDo) {
300 if (Text == -1) return ERR_UNKNOWN; 303 if (Text == -1) return ERR_UNKNOWN;
301 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY"); 304 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY");
302 305
303 if (Completed == -1) { 306 if (Completed == -1) {
304 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:0%c%c",13,10); 307 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:0%c%c",13,10);
305 } else { 308 } else {
306 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:100%c%c",13,10); 309 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:100%c%c",13,10);
307 } 310 }
308 311
309 switch (note->Priority) { 312 switch (note->Priority) {
310 case GSM_Priority_Low: *Length+=sprintf(Buffer+(*Length), "PRIORITY:5%c%c",13,10); break; 313 case GSM_Priority_Low: *Length+=sprintf(Buffer+(*Length), "PRIORITY:5%c%c",13,10); break;
311 case GSM_Priority_Medium: *Length+=sprintf(Buffer+(*Length), "PRIORITY:3%c%c",13,10); break; 314 case GSM_Priority_Medium: *Length+=sprintf(Buffer+(*Length), "PRIORITY:3%c%c",13,10); break;
312 case GSM_Priority_High: *Length+=sprintf(Buffer+(*Length), "PRIORITY:1%c%c",13,10); break; 315 case GSM_Priority_High: *Length+=sprintf(Buffer+(*Length), "PRIORITY:1%c%c",13,10); break;
313 } 316 }
314 317
315 if (EndTime != -1) { 318 if (EndTime != -1) {
316 SaveVCALDateTime(Buffer, Length, &note->Entries[EndTime].Date, "DUE"); 319 SaveVCALDateTime(Buffer, Length, &note->Entries[EndTime].Date, "DUE");
317 } 320 }
318 321
319 if (Alarm != -1) { 322 if (Alarm != -1) {
320 if (note->Entries[Alarm].EntryType == CAL_SILENT_ALARM_DATETIME) { 323 if (note->Entries[Alarm].EntryType == CAL_SILENT_ALARM_DATETIME) {
321 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM"); 324 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "DALARM");
322 } else { 325 } else {
323 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "AALARM"); 326 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "AALARM");
324 } 327 }
325 } 328 }
326 } else if (Version == SonyEricsson_VToDo) { 329 } else if (Version == SonyEricsson_VToDo) {
327 if (Text == -1) return ERR_UNKNOWN; 330 if (Text == -1) return ERR_UNKNOWN;
328 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY"); 331 SaveVCALText(Buffer, Length, note->Entries[Text].Text, "SUMMARY");
329 332
330 if (Completed == -1) { 333 if (Completed == -1) {
331 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:0%c%c",13,10); 334 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:0%c%c",13,10);
332 } else { 335 } else {
333 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:100%c%c",13,10); 336 *Length+=sprintf(Buffer+(*Length), "PERCENT-COMPLETE:100%c%c",13,10);
334 } 337 }
335 338
336 switch (note->Priority) { 339 switch (note->Priority) {
337 case GSM_Priority_Low: *Length+=sprintf(Buffer+(*Length), "PRIORITY:5%c%c",13,10); break; 340 case GSM_Priority_Low: *Length+=sprintf(Buffer+(*Length), "PRIORITY:5%c%c",13,10); break;
338 case GSM_Priority_Medium: *Length+=sprintf(Buffer+(*Length), "PRIORITY:3%c%c",13,10); break; 341 case GSM_Priority_Medium: *Length+=sprintf(Buffer+(*Length), "PRIORITY:3%c%c",13,10); break;
339 case GSM_Priority_High: *Length+=sprintf(Buffer+(*Length), "PRIORITY:1%c%c",13,10); break; 342 case GSM_Priority_High: *Length+=sprintf(Buffer+(*Length), "PRIORITY:1%c%c",13,10); break;
340 } 343 }
341 344
342 if (Alarm != -1) { 345 if (Alarm != -1) {
343 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "AALARM"); 346 SaveVCALDateTime(Buffer, Length, &note->Entries[Alarm].Date, "AALARM");
344 } 347 }
345 } 348 }
346 349
347 *Length+=sprintf(Buffer+(*Length), "X-PILOTID:%d%c%c",note->Location,13,10); 350 *Length+=sprintf(Buffer+(*Length), "X-PILOTID:%d%c%c",note->Location,13,10);
348 *Length+=sprintf(Buffer+(*Length), "END:VTODO%c%c",13,10); 351 *Length+=sprintf(Buffer+(*Length), "END:VTODO%c%c",13,10);
349 352
350 if (header) { 353 if (header) {
351 *Length+=sprintf(Buffer+(*Length), "END:VCALENDAR%c%c",13,10); 354 *Length+=sprintf(Buffer+(*Length), "END:VCALENDAR%c%c",13,10);
352 } 355 }
353 return ERR_NONE; 356 return ERR_NONE;
354} 357}
355 358
356GSM_Error GSM_DecodeVCALENDAR_VTODO(unsigned char *Buffer, int *Pos, GSM_CalendarEntry *Calendar, GSM_ToDoEntry *ToDo, GSM_VCalendarVersion CalVer, GSM_VToDoVersion ToDoVer) 359GSM_Error GSM_DecodeVCALENDAR_VTODO(unsigned char *Buffer, int *Pos, GSM_CalendarEntry *Calendar, GSM_ToDoEntry *ToDo, GSM_VCalendarVersion CalVer, GSM_VToDoVersion ToDoVer)
357{ 360{
358 unsigned char Line[2000],Buff[2000]; 361 unsigned char Line[2000],Buff[2000];
359 int Level = 0; 362 int Level = 0;
360 363
361 Calendar->EntriesNum = 0; 364 Calendar->EntriesNum = 0;
362 ToDo->EntriesNum = 0; 365 ToDo->EntriesNum = 0;
363 366
364 while (1) { 367 while (1) {
365 MyGetLine(Buffer, Pos, Line, strlen(Buffer)); 368 MyGetLine(Buffer, Pos, Line, strlen(Buffer));
366 if (strlen(Line) == 0) break; 369 if (strlen(Line) == 0) break;
367 switch (Level) { 370 switch (Level) {
368 case 0: 371 case 0:
369 if (strstr(Line,"BEGIN:VEVENT")) { 372 if (strstr(Line,"BEGIN:VEVENT")) {
370 Calendar->Type = GSM_CAL_MEMO; 373 Calendar->Type = GSM_CAL_MEMO;
371 Level = 1; 374 Level = 1;
372 } 375 }
373 if (strstr(Line,"BEGIN:VTODO")) { 376 if (strstr(Line,"BEGIN:VTODO")) {
374 ToDo->Priority = GSM_Priority_Medium; 377 ToDo->Priority = GSM_Priority_Medium;
375 Level = 2; 378 Level = 2;
376 } 379 }
377 break; 380 break;
378 case 1: /* Calendar note */ 381 case 1: /* Calendar note */
379 if (strstr(Line,"END:VEVENT")) { 382 if (strstr(Line,"END:VEVENT")) {
380 if (Calendar->EntriesNum == 0) return ERR_EMPTY; 383 if (Calendar->EntriesNum == 0) return ERR_EMPTY;
381 return ERR_NONE; 384 return ERR_NONE;
382 } 385 }
383 Calendar->Type = GSM_CAL_MEETING; 386 Calendar->Type = GSM_CAL_MEETING;
384 if (strstr(Line,"CATEGORIES:Reminder")) Calendar->Type = GSM_CAL_REMINDER; 387 if (strstr(Line,"CATEGORIES:Reminder")) Calendar->Type = GSM_CAL_REMINDER;
385 if (strstr(Line,"CATEGORIES:Date")) Calendar->Type = GSM_CAL_REMINDER;//SE 388 if (strstr(Line,"CATEGORIES:Date")) Calendar->Type = GSM_CAL_REMINDER;//SE
386 if (strstr(Line,"CATEGORIES:Travel")) Calendar->Type = GSM_CAL_TRAVEL; //SE 389 if (strstr(Line,"CATEGORIES:Travel")) Calendar->Type = GSM_CAL_TRAVEL; //SE
387 if (strstr(Line,"CATEGORIES:Vacation")) Calendar->Type = GSM_CAL_VACATION;//SE 390 if (strstr(Line,"CATEGORIES:Vacation")) Calendar->Type = GSM_CAL_VACATION;//SE
388 if (strstr(Line,"CATEGORIES:Miscellaneous")) Calendar->Type = GSM_CAL_MEMO; 391 if (strstr(Line,"CATEGORIES:Miscellaneous")) Calendar->Type = GSM_CAL_MEMO;
389 if (strstr(Line,"CATEGORIES:Phone Call")) Calendar->Type = GSM_CAL_CALL; 392 if (strstr(Line,"CATEGORIES:Phone Call")) Calendar->Type = GSM_CAL_CALL;
390 if (strstr(Line,"CATEGORIES:Special Occasion")) Calendar->Type = GSM_CAL_BIRTHDAY; 393 if (strstr(Line,"CATEGORIES:Special Occasion")) Calendar->Type = GSM_CAL_BIRTHDAY;
391 if (strstr(Line,"CATEGORIES:Anniversary")) Calendar->Type = GSM_CAL_BIRTHDAY; 394 if (strstr(Line,"CATEGORIES:Anniversary")) Calendar->Type = GSM_CAL_BIRTHDAY;
392 if (strstr(Line,"CATEGORIES:Meeting")) Calendar->Type = GSM_CAL_MEETING; 395 if (strstr(Line,"CATEGORIES:Meeting")) Calendar->Type = GSM_CAL_MEETING;
393 if (strstr(Line,"CATEGORIES:Appointment")) Calendar->Type = GSM_CAL_MEETING; 396 if (strstr(Line,"CATEGORIES:Appointment")) Calendar->Type = GSM_CAL_MEETING;
394 if (strstr(Line,"RRULE:D1")) { 397 if (strstr(Line,"RRULE:D1")) {
395 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE; 398 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE;
396 Calendar->Entries[Calendar->EntriesNum].Number = 1*24; 399 Calendar->Entries[Calendar->EntriesNum].Number = 1*24;
397 Calendar->EntriesNum++; 400 Calendar->EntriesNum++;
398 } 401 }
399 if ((strstr(Line,"RRULE:W1")) || (strstr(Line,"RRULE:D7"))) { 402 if ((strstr(Line,"RRULE:W1")) || (strstr(Line,"RRULE:D7"))) {
400 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE; 403 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE;
401 Calendar->Entries[Calendar->EntriesNum].Number = 7*24; 404 Calendar->Entries[Calendar->EntriesNum].Number = 7*24;
402 Calendar->EntriesNum++; 405 Calendar->EntriesNum++;
403 } 406 }
404 if (strstr(Line,"RRULE:W2")) { 407 if (strstr(Line,"RRULE:W2")) {
405 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE; 408 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE;
406 Calendar->Entries[Calendar->EntriesNum].Number = 14*24; 409 Calendar->Entries[Calendar->EntriesNum].Number = 14*24;
407 Calendar->EntriesNum++; 410 Calendar->EntriesNum++;
408 } 411 }
409 if (strstr(Line,"RRULE:MD1")) { 412 if (strstr(Line,"RRULE:MD1")) {
410 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE; 413 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE;
411 Calendar->Entries[Calendar->EntriesNum].Number = 30*24; 414 Calendar->Entries[Calendar->EntriesNum].Number = 30*24;
412 Calendar->EntriesNum++; 415 Calendar->EntriesNum++;
413 } 416 }
414 if (strstr(Line,"RRULE:YD1")) { 417 if (strstr(Line,"RRULE:YD1")) {
415 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE; 418 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_RECURRANCE;
416 Calendar->Entries[Calendar->EntriesNum].Number = 365*24; 419 Calendar->Entries[Calendar->EntriesNum].Number = 365*24;
417 Calendar->EntriesNum++; 420 Calendar->EntriesNum++;
418 } 421 }
419 if ((ReadVCALText(Line, "SUMMARY", Buff)) || (ReadVCALText(Line, "DESCRIPTION", Buff))) { 422 // LR
423 if ((ReadVCALText(Line, "SUMMARY", Buff)) ) {
420 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_TEXT; 424 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_TEXT;
421 CopyUnicodeString(Calendar->Entries[Calendar->EntriesNum].Text,Buff); 425 CopyUnicodeString(Calendar->Entries[Calendar->EntriesNum].Text,Buff);
422 Calendar->EntriesNum++; 426 Calendar->EntriesNum++;
423 } 427 }
428 if (ReadVCALText(Line, "DESCRIPTION", Buff)) {
429 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_DESCRIPTION;
430 CopyUnicodeString(Calendar->Entries[Calendar->EntriesNum].Text,Buff);
431 Calendar->EntriesNum++;
432 }
424 if (ReadVCALText(Line, "LOCATION", Buff)) { 433 if (ReadVCALText(Line, "LOCATION", Buff)) {
425 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_LOCATION; 434 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_LOCATION;
426 CopyUnicodeString(Calendar->Entries[Calendar->EntriesNum].Text,Buff); 435 CopyUnicodeString(Calendar->Entries[Calendar->EntriesNum].Text,Buff);
427 Calendar->EntriesNum++; 436 Calendar->EntriesNum++;
428 } 437 }
429 if (ReadVCALText(Line, "DTSTART", Buff)) { 438 if (ReadVCALText(Line, "DTSTART", Buff)) {
430 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_START_DATETIME; 439 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_START_DATETIME;
431 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date); 440 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date);
432 Calendar->EntriesNum++; 441 Calendar->EntriesNum++;
433 } 442 }
434 if (ReadVCALText(Line, "DTEND", Buff)) { 443 if (ReadVCALText(Line, "DTEND", Buff)) {
435 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_END_DATETIME; 444 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_END_DATETIME;
436 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date); 445 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date);
437 Calendar->EntriesNum++; 446 Calendar->EntriesNum++;
438 } 447 }
439 if (ReadVCALText(Line, "DALARM", Buff)) { 448 if (ReadVCALText(Line, "DALARM", Buff)) {
440 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_SILENT_ALARM_DATETIME; 449 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_SILENT_ALARM_DATETIME;
441 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date); 450 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date);
442 Calendar->EntriesNum++; 451 Calendar->EntriesNum++;
443 } 452 }
444 if (ReadVCALText(Line, "AALARM", Buff)) { 453 if (ReadVCALText(Line, "AALARM", Buff)) {
445 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_ALARM_DATETIME; 454 Calendar->Entries[Calendar->EntriesNum].EntryType = CAL_ALARM_DATETIME;
446 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date); 455 ReadVCALDateTime(DecodeUnicodeString(Buff), &Calendar->Entries[Calendar->EntriesNum].Date);
447 Calendar->EntriesNum++; 456 Calendar->EntriesNum++;
448 } 457 }
449 break; 458 break;
450 case 2: /* ToDo note */ 459 case 2: /* ToDo note */
451 if (strstr(Line,"END:VTODO")) { 460 if (strstr(Line,"END:VTODO")) {
452 if (ToDo->EntriesNum == 0) return ERR_EMPTY; 461 if (ToDo->EntriesNum == 0) return ERR_EMPTY;
453 return ERR_NONE; 462 return ERR_NONE;
454 } 463 }
455 if (ReadVCALText(Line, "DUE", Buff)) { 464 if (ReadVCALText(Line, "DUE", Buff)) {
456 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_END_DATETIME; 465 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_END_DATETIME;
457 ReadVCALDateTime(DecodeUnicodeString(Buff), &ToDo->Entries[ToDo->EntriesNum].Date); 466 ReadVCALDateTime(DecodeUnicodeString(Buff), &ToDo->Entries[ToDo->EntriesNum].Date);
458 ToDo->EntriesNum++; 467 ToDo->EntriesNum++;
459 } 468 }
460 if (ReadVCALText(Line, "DALARM", Buff)) { 469 if (ReadVCALText(Line, "DALARM", Buff)) {
461 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_SILENT_ALARM_DATETIME; 470 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_SILENT_ALARM_DATETIME;
462 ReadVCALDateTime(DecodeUnicodeString(Buff), &ToDo->Entries[ToDo->EntriesNum].Date); 471 ReadVCALDateTime(DecodeUnicodeString(Buff), &ToDo->Entries[ToDo->EntriesNum].Date);
463 ToDo->EntriesNum++; 472 ToDo->EntriesNum++;
464 } 473 }
465 if (ReadVCALText(Line, "AALARM", Buff)) { 474 if (ReadVCALText(Line, "AALARM", Buff)) {
466 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_ALARM_DATETIME; 475 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_ALARM_DATETIME;
467 ReadVCALDateTime(DecodeUnicodeString(Buff), &ToDo->Entries[ToDo->EntriesNum].Date); 476 ReadVCALDateTime(DecodeUnicodeString(Buff), &ToDo->Entries[ToDo->EntriesNum].Date);
468 ToDo->EntriesNum++; 477 ToDo->EntriesNum++;
469 } 478 }
470 if (ReadVCALText(Line, "SUMMARY", Buff)) { 479 if (ReadVCALText(Line, "SUMMARY", Buff)) {
471 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_TEXT; 480 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_TEXT;
472 CopyUnicodeString(ToDo->Entries[ToDo->EntriesNum].Text,Buff); 481 CopyUnicodeString(ToDo->Entries[ToDo->EntriesNum].Text,Buff);
473 ToDo->EntriesNum++; 482 ToDo->EntriesNum++;
474 } 483 }
475 if (ReadVCALText(Line, "PRIORITY", Buff)) { 484 if (ReadVCALText(Line, "PRIORITY", Buff)) {
476 if (ToDoVer == SonyEricsson_VToDo) { 485 if (ToDoVer == SonyEricsson_VToDo) {
477 ToDo->Priority = GSM_Priority_Medium; 486 ToDo->Priority = GSM_Priority_Medium;
478 if (atoi(DecodeUnicodeString(Buff))>3) ToDo->Priority = GSM_Priority_Low; 487 if (atoi(DecodeUnicodeString(Buff))>3) ToDo->Priority = GSM_Priority_Low;
479 if (atoi(DecodeUnicodeString(Buff))<3) ToDo->Priority = GSM_Priority_High; 488 if (atoi(DecodeUnicodeString(Buff))<3) ToDo->Priority = GSM_Priority_High;
480 dbgprintf("atoi is %i %s\n",atoi(DecodeUnicodeString(Buff)),DecodeUnicodeString(Buff)); 489 dbgprintf("atoi is %i %s\n",atoi(DecodeUnicodeString(Buff)),DecodeUnicodeString(Buff));
481 } else if (ToDoVer == Nokia_VToDo) { 490 } else if (ToDoVer == Nokia_VToDo) {
482 ToDo->Priority = GSM_Priority_Medium; 491 ToDo->Priority = GSM_Priority_Medium;
483 if (atoi(DecodeUnicodeString(Buff))>3) ToDo->Priority = GSM_Priority_Low; 492 if (atoi(DecodeUnicodeString(Buff))>3) ToDo->Priority = GSM_Priority_Low;
484 if (atoi(DecodeUnicodeString(Buff))<3) ToDo->Priority = GSM_Priority_High; 493 if (atoi(DecodeUnicodeString(Buff))<3) ToDo->Priority = GSM_Priority_High;
485 } 494 }
486 } 495 }
487 if (strstr(Line,"PERCENT-COMPLETE:100")) { 496 if (strstr(Line,"PERCENT-COMPLETE:100")) {
488 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_COMPLETED; 497 ToDo->Entries[ToDo->EntriesNum].EntryType = TODO_COMPLETED;
489 ToDo->Entries[ToDo->EntriesNum].Number = 1; 498 ToDo->Entries[ToDo->EntriesNum].Number = 1;
490 ToDo->EntriesNum++; 499 ToDo->EntriesNum++;
491 } 500 }
492 break; 501 break;
493 } 502 }
494 } 503 }
495 504
496 if (Calendar->EntriesNum == 0 && ToDo->EntriesNum == 0) return ERR_EMPTY; 505 if (Calendar->EntriesNum == 0 && ToDo->EntriesNum == 0) return ERR_EMPTY;
497 return ERR_NONE; 506 return ERR_NONE;
498} 507}
499 508
500GSM_Error GSM_EncodeVNTFile(unsigned char *Buffer, int *Length, GSM_NoteEntry *Note) 509GSM_Error GSM_EncodeVNTFile(unsigned char *Buffer, int *Length, GSM_NoteEntry *Note)
501{ 510{
502 *Length+=sprintf(Buffer+(*Length), "BEGIN:VNOTE%c%c",13,10); 511 *Length+=sprintf(Buffer+(*Length), "BEGIN:VNOTE%c%c",13,10);
503 *Length+=sprintf(Buffer+(*Length), "VERSION:1.1%c%c",13,10); 512 *Length+=sprintf(Buffer+(*Length), "VERSION:1.1%c%c",13,10);
504 SaveVCALText(Buffer, Length, Note->Text, "BODY"); 513 SaveVCALText(Buffer, Length, Note->Text, "BODY");
505 *Length+=sprintf(Buffer+(*Length), "END:VNOTE%c%c",13,10); 514 *Length+=sprintf(Buffer+(*Length), "END:VNOTE%c%c",13,10);
506 515
507 return ERR_NONE; 516 return ERR_NONE;
508} 517}
509 518
510/* How should editor hadle tabs in this file? Add editor commands here. 519/* How should editor hadle tabs in this file? Add editor commands here.
511 * vim: noexpandtab sw=8 ts=8 sts=8: 520 * vim: noexpandtab sw=8 ts=8 sts=8:
512 */ 521 */
diff --git a/gammu/emb/common/service/gsmcal.h b/gammu/emb/common/service/gsmcal.h
index 0a41b7b..c69fdbe 100644
--- a/gammu/emb/common/service/gsmcal.h
+++ b/gammu/emb/common/service/gsmcal.h
@@ -1,415 +1,416 @@
1/* (c) 2002-2004 by Marcin Wiacek */ 1/* (c) 2002-2004 by Marcin Wiacek */
2/* 5210 calendar IDs by Frederick Ros */ 2/* 5210 calendar IDs by Frederick Ros */
3 3
4#ifndef __gsm_cal_h 4#ifndef __gsm_cal_h
5#define __gsm_cal_h 5#define __gsm_cal_h
6 6
7#include "../gsmcomon.h" 7#include "../gsmcomon.h"
8 8
9/* ---------------------------- calendar ----------------------------------- */ 9/* ---------------------------- calendar ----------------------------------- */
10 10
11 #define GSM_CALENDAR_ENTRIES 16 11 #define GSM_CALENDAR_ENTRIES 16
12 #define MAX_CALENDAR_TEXT_LENGTH256 /* In 6310 max. 256 chars */ 12 #define MAX_CALENDAR_TEXT_LENGTH256 /* In 6310 max. 256 chars */
13 13
14/** 14/**
15 * Enum defines types of calendar notes 15 * Enum defines types of calendar notes
16 */ 16 */
17typedef enum { 17typedef enum {
18 /** 18 /**
19 * Reminder or Date 19 * Reminder or Date
20 */ 20 */
21 GSM_CAL_REMINDER=1, 21 GSM_CAL_REMINDER=1,
22 /** 22 /**
23 * Call 23 * Call
24 */ 24 */
25 GSM_CAL_CALL, 25 GSM_CAL_CALL,
26 /** 26 /**
27 * Meeting 27 * Meeting
28 */ 28 */
29 GSM_CAL_MEETING, 29 GSM_CAL_MEETING,
30 /** 30 /**
31 * Birthday or Anniversary or Special Occasion 31 * Birthday or Anniversary or Special Occasion
32 */ 32 */
33 GSM_CAL_BIRTHDAY, 33 GSM_CAL_BIRTHDAY,
34 /** 34 /**
35 * Memo or Miscellaneous 35 * Memo or Miscellaneous
36 */ 36 */
37 GSM_CAL_MEMO, 37 GSM_CAL_MEMO,
38 /** 38 /**
39 * Travel 39 * Travel
40 */ 40 */
41 GSM_CAL_TRAVEL, 41 GSM_CAL_TRAVEL,
42 /** 42 /**
43 * Vacation 43 * Vacation
44 */ 44 */
45 GSM_CAL_VACATION, 45 GSM_CAL_VACATION,
46 /** 46 /**
47 * Training - Athletism 47 * Training - Athletism
48 */ 48 */
49 GSM_CAL_T_ATHL, 49 GSM_CAL_T_ATHL,
50 /** 50 /**
51 * Training - Ball Games 51 * Training - Ball Games
52 */ 52 */
53 GSM_CAL_T_BALL, 53 GSM_CAL_T_BALL,
54 /** 54 /**
55 * Training - Cycling 55 * Training - Cycling
56 */ 56 */
57 GSM_CAL_T_CYCL, 57 GSM_CAL_T_CYCL,
58 /** 58 /**
59 * Training - Budo 59 * Training - Budo
60 */ 60 */
61 GSM_CAL_T_BUDO, 61 GSM_CAL_T_BUDO,
62 /** 62 /**
63 * Training - Dance 63 * Training - Dance
64 */ 64 */
65 GSM_CAL_T_DANC, 65 GSM_CAL_T_DANC,
66 /** 66 /**
67 * Training - Extreme Sports 67 * Training - Extreme Sports
68 */ 68 */
69 GSM_CAL_T_EXTR, 69 GSM_CAL_T_EXTR,
70 /** 70 /**
71 * Training - Football 71 * Training - Football
72 */ 72 */
73 GSM_CAL_T_FOOT, 73 GSM_CAL_T_FOOT,
74 /** 74 /**
75 * Training - Golf 75 * Training - Golf
76 */ 76 */
77 GSM_CAL_T_GOLF, 77 GSM_CAL_T_GOLF,
78 /** 78 /**
79 * Training - Gym 79 * Training - Gym
80 */ 80 */
81 GSM_CAL_T_GYM, 81 GSM_CAL_T_GYM,
82 /** 82 /**
83 * Training - Horse Race 83 * Training - Horse Race
84 */ 84 */
85 GSM_CAL_T_HORS, 85 GSM_CAL_T_HORS,
86 /** 86 /**
87 * Training - Hockey 87 * Training - Hockey
88 */ 88 */
89 GSM_CAL_T_HOCK, 89 GSM_CAL_T_HOCK,
90 /** 90 /**
91 * Training - Races 91 * Training - Races
92 */ 92 */
93 GSM_CAL_T_RACE, 93 GSM_CAL_T_RACE,
94 /** 94 /**
95 * Training - Rugby 95 * Training - Rugby
96 */ 96 */
97 GSM_CAL_T_RUGB, 97 GSM_CAL_T_RUGB,
98 /** 98 /**
99 * Training - Sailing 99 * Training - Sailing
100 */ 100 */
101 GSM_CAL_T_SAIL, 101 GSM_CAL_T_SAIL,
102 /** 102 /**
103 * Training - Street Games 103 * Training - Street Games
104 */ 104 */
105 GSM_CAL_T_STRE, 105 GSM_CAL_T_STRE,
106 /** 106 /**
107 * Training - Swimming 107 * Training - Swimming
108 */ 108 */
109 GSM_CAL_T_SWIM, 109 GSM_CAL_T_SWIM,
110 /** 110 /**
111 * Training - Tennis 111 * Training - Tennis
112 */ 112 */
113 GSM_CAL_T_TENN, 113 GSM_CAL_T_TENN,
114 /** 114 /**
115 * Training - Travels 115 * Training - Travels
116 */ 116 */
117 GSM_CAL_T_TRAV, 117 GSM_CAL_T_TRAV,
118 /** 118 /**
119 * Training - Winter Games 119 * Training - Winter Games
120 */ 120 */
121 GSM_CAL_T_WINT, 121 GSM_CAL_T_WINT,
122 /** 122 /**
123 * Alarm 123 * Alarm
124 */ 124 */
125 GSM_CAL_ALARM, 125 GSM_CAL_ALARM,
126 /** 126 /**
127 * Alarm repeating each day. 127 * Alarm repeating each day.
128 */ 128 */
129 GSM_CAL_DAILY_ALARM 129 GSM_CAL_DAILY_ALARM
130} GSM_CalendarNoteType; 130} GSM_CalendarNoteType;
131 131
132/** 132/**
133 * One value of calendar event. 133 * One value of calendar event.
134 */ 134 */
135typedef enum { 135typedef enum {
136 /** 136 /**
137 * Date and time of event start. 137 * Date and time of event start.
138 */ 138 */
139 CAL_START_DATETIME = 1, 139 CAL_START_DATETIME = 1,
140 /** 140 /**
141 * Date and time of event end. 141 * Date and time of event end.
142 */ 142 */
143 CAL_END_DATETIME, 143 CAL_END_DATETIME,
144 /** 144 /**
145 * Alarm date and time. 145 * Alarm date and time.
146 */ 146 */
147 CAL_ALARM_DATETIME, 147 CAL_ALARM_DATETIME,
148 /** 148 /**
149 * Date and time of silent alarm. 149 * Date and time of silent alarm.
150 */ 150 */
151 CAL_SILENT_ALARM_DATETIME, 151 CAL_SILENT_ALARM_DATETIME,
152 /** 152 /**
153 * Recurrance. 153 * Recurrance.
154 */ 154 */
155 CAL_RECURRANCE, 155 CAL_RECURRANCE,
156 /** 156 /**
157 * Text. 157 * Text.
158 */ 158 */
159 CAL_TEXT, 159 CAL_TEXT,
160 CAL_DESCRIPTION, // LR added
160 /** 161 /**
161 * Location. 162 * Location.
162 */ 163 */
163 CAL_LOCATION, 164 CAL_LOCATION,
164 /** 165 /**
165 * Phone number. 166 * Phone number.
166 */ 167 */
167 CAL_PHONE, 168 CAL_PHONE,
168 /** 169 /**
169 * Whether this entry is private. 170 * Whether this entry is private.
170 */ 171 */
171 CAL_PRIVATE, 172 CAL_PRIVATE,
172 /** 173 /**
173 * Related contact id. 174 * Related contact id.
174 */ 175 */
175 CAL_CONTACTID, 176 CAL_CONTACTID,
176 /** 177 /**
177 * Repeat each x'th day of week. 178 * Repeat each x'th day of week.
178 */ 179 */
179 CAL_REPEAT_DAYOFWEEK, 180 CAL_REPEAT_DAYOFWEEK,
180 /** 181 /**
181 * Repeat each x'th day of month. 182 * Repeat each x'th day of month.
182 */ 183 */
183 CAL_REPEAT_DAY, 184 CAL_REPEAT_DAY,
184 /** 185 /**
185 * Repeat x'th week of month. 186 * Repeat x'th week of month.
186 */ 187 */
187 CAL_REPEAT_WEEKOFMONTH, 188 CAL_REPEAT_WEEKOFMONTH,
188 /** 189 /**
189 * Repeat x'th month. 190 * Repeat x'th month.
190 */ 191 */
191 CAL_REPEAT_MONTH, 192 CAL_REPEAT_MONTH,
192 /** 193 /**
193 * Repeating frequency. 194 * Repeating frequency.
194 */ 195 */
195 CAL_REPEAT_FREQUENCY, 196 CAL_REPEAT_FREQUENCY,
196 /** 197 /**
197 * Repeating start. 198 * Repeating start.
198 */ 199 */
199 CAL_REPEAT_STARTDATE, 200 CAL_REPEAT_STARTDATE,
200 /** 201 /**
201 * Repeating end. 202 * Repeating end.
202 */ 203 */
203 CAL_REPEAT_STOPDATE 204 CAL_REPEAT_STOPDATE
204} GSM_CalendarType; 205} GSM_CalendarType;
205 206
206/** 207/**
207 * One value of calendar event. 208 * One value of calendar event.
208 */ 209 */
209typedef struct { 210typedef struct {
210 /** 211 /**
211 * Type of value. 212 * Type of value.
212 */ 213 */
213 GSM_CalendarTypeEntryType; 214 GSM_CalendarTypeEntryType;
214 /** 215 /**
215 * Text of value, if applicable. 216 * Text of value, if applicable.
216 */ 217 */
217 unsigned char Text[(MAX_CALENDAR_TEXT_LENGTH + 1)*2]; 218 unsigned char Text[(MAX_CALENDAR_TEXT_LENGTH + 1)*2];
218 /** 219 /**
219 * Date and time of value, if applicable. 220 * Date and time of value, if applicable.
220 */ 221 */
221 GSM_DateTime Date; 222 GSM_DateTime Date;
222 /** 223 /**
223 * Number of value, if applicable. 224 * Number of value, if applicable.
224 */ 225 */
225 unsigned int Number; 226 unsigned int Number;
226} GSM_SubCalendarEntry; 227} GSM_SubCalendarEntry;
227 228
228/** 229/**
229 * Calendar note values. 230 * Calendar note values.
230 */ 231 */
231typedef struct { 232typedef struct {
232 /** 233 /**
233 * Type of calendar note. 234 * Type of calendar note.
234 */ 235 */
235 GSM_CalendarNoteType Type; 236 GSM_CalendarNoteType Type;
236 /** 237 /**
237 * Location in memory. 238 * Location in memory.
238 */ 239 */
239 int Location; 240 int Location;
240 /** 241 /**
241 * Number of entries. 242 * Number of entries.
242 */ 243 */
243 int EntriesNum; 244 int EntriesNum;
244 /** 245 /**
245 * Values of entries. 246 * Values of entries.
246 */ 247 */
247 GSM_SubCalendarEntry Entries[GSM_CALENDAR_ENTRIES]; 248 GSM_SubCalendarEntry Entries[GSM_CALENDAR_ENTRIES];
248} GSM_CalendarEntry; 249} GSM_CalendarEntry;
249 250
250void GSM_CalendarFindDefaultTextTimeAlarmPhoneRecurrance(GSM_CalendarEntry *entry, int *Text, int *Time, int *Alarm, int *Phone, int *Recurrance, int *EndTime, int *Location); 251void GSM_CalendarFindDefaultTextTimeAlarmPhoneRecurrance(GSM_CalendarEntry *entry, int *Text, int *Time, int *Alarm, int *Phone, int *Recurrance, int *EndTime, int *Location);
251 252
252typedef enum { 253typedef enum {
253 Nokia_VCalendar = 1, 254 Nokia_VCalendar = 1,
254 Siemens_VCalendar, 255 Siemens_VCalendar,
255 SonyEricsson_VCalendar 256 SonyEricsson_VCalendar
256} GSM_VCalendarVersion; 257} GSM_VCalendarVersion;
257 258
258GSM_Error GSM_EncodeVCALENDAR(char *Buffer, int *Length, GSM_CalendarEntry *note, bool header, GSM_VCalendarVersion Version); 259GSM_Error GSM_EncodeVCALENDAR(char *Buffer, int *Length, GSM_CalendarEntry *note, bool header, GSM_VCalendarVersion Version);
259 260
260bool IsCalendarNoteFromThePast(GSM_CalendarEntry *note); 261bool IsCalendarNoteFromThePast(GSM_CalendarEntry *note);
261 262
262typedef struct { 263typedef struct {
263 /** 264 /**
264 * Monday = 1, Tuesday = 2,... 265 * Monday = 1, Tuesday = 2,...
265 */ 266 */
266 int StartDay; 267 int StartDay;
267 /** 268 /**
268 * 0 = no delete, 1 = after day,... 269 * 0 = no delete, 1 = after day,...
269 */ 270 */
270 int AutoDelete; 271 int AutoDelete;
271} GSM_CalendarSettings; 272} GSM_CalendarSettings;
272 273
273/** 274/**
274 * Structure used for returning calendar status. 275 * Structure used for returning calendar status.
275 */ 276 */
276typedef struct { 277typedef struct {
277 /** 278 /**
278 * Number of used positions. 279 * Number of used positions.
279 */ 280 */
280 int Used; 281 int Used;
281} GSM_CalendarStatus; 282} GSM_CalendarStatus;
282 283
283 284
284/* ------------------------------ to-do ------------------------------------ */ 285/* ------------------------------ to-do ------------------------------------ */
285 286
286 #define GSM_TODO_ENTRIES 7 287 #define GSM_TODO_ENTRIES 7
287 #define MAX_TODO_TEXT_LENGTH 50 /* Alcatel BE5 50 chars */ 288 #define MAX_TODO_TEXT_LENGTH 50 /* Alcatel BE5 50 chars */
288 289
289/** 290/**
290 * Types of to do values. In parenthesis is member of @ref GSM_SubToDoEntry, 291 * Types of to do values. In parenthesis is member of @ref GSM_SubToDoEntry,
291 * where value is stored. 292 * where value is stored.
292 */ 293 */
293typedef enum { 294typedef enum {
294 /** 295 /**
295 * Due date. (Date) 296 * Due date. (Date)
296 */ 297 */
297 TODO_END_DATETIME = 1, 298 TODO_END_DATETIME = 1,
298 /** 299 /**
299 * Whether is completed. (Number) 300 * Whether is completed. (Number)
300 */ 301 */
301 TODO_COMPLETED, 302 TODO_COMPLETED,
302 /** 303 /**
303 * When should alarm be fired (Date). 304 * When should alarm be fired (Date).
304 */ 305 */
305 TODO_ALARM_DATETIME, 306 TODO_ALARM_DATETIME,
306 /** 307 /**
307 * When should silent alarm be fired (Date). 308 * When should silent alarm be fired (Date).
308 */ 309 */
309 TODO_SILENT_ALARM_DATETIME, 310 TODO_SILENT_ALARM_DATETIME,
310 /** 311 /**
311 * Text of to do (Text). 312 * Text of to do (Text).
312 */ 313 */
313 TODO_TEXT, 314 TODO_TEXT,
314 /** 315 /**
315 * Whether entry is private (Number). 316 * Whether entry is private (Number).
316 */ 317 */
317 TODO_PRIVATE, 318 TODO_PRIVATE,
318 /** 319 /**
319 * Category of entry (Number). 320 * Category of entry (Number).
320 */ 321 */
321 TODO_CATEGORY, 322 TODO_CATEGORY,
322 /** 323 /**
323 * Related contact ID (Number). 324 * Related contact ID (Number).
324 */ 325 */
325 TODO_CONTACTID, 326 TODO_CONTACTID,
326 /** 327 /**
327 * Number to call (Text). 328 * Number to call (Text).
328 */ 329 */
329 TODO_PHONE 330 TODO_PHONE
330} GSM_ToDoType; 331} GSM_ToDoType;
331 332
332/** 333/**
333 * Priority of to do. 334 * Priority of to do.
334 */ 335 */
335typedef enum { 336typedef enum {
336 GSM_Priority_High = 1, 337 GSM_Priority_High = 1,
337 GSM_Priority_Medium, 338 GSM_Priority_Medium,
338 GSM_Priority_Low 339 GSM_Priority_Low
339} GSM_ToDo_Priority; 340} GSM_ToDo_Priority;
340 341
341/** 342/**
342 * Value of to do entry. 343 * Value of to do entry.
343 */ 344 */
344typedef struct { 345typedef struct {
345 /** 346 /**
346 * Type of entry. 347 * Type of entry.
347 */ 348 */
348 GSM_ToDoType EntryType; 349 GSM_ToDoType EntryType;
349 /** 350 /**
350 * Text of value, if appropriate, see @ref GSM_ToDoType. 351 * Text of value, if appropriate, see @ref GSM_ToDoType.
351 */ 352 */
352 unsigned char Text[(MAX_TODO_TEXT_LENGTH + 1)*2]; 353 unsigned char Text[(MAX_TODO_TEXT_LENGTH + 1)*2];
353 /** 354 /**
354 * Date of value, if appropriate, see @ref GSM_ToDoType. 355 * Date of value, if appropriate, see @ref GSM_ToDoType.
355 */ 356 */
356 GSM_DateTime Date; 357 GSM_DateTime Date;
357 /** 358 /**
358 * Number of value, if appropriate, see @ref GSM_ToDoType. 359 * Number of value, if appropriate, see @ref GSM_ToDoType.
359 */ 360 */
360 unsigned int Number; 361 unsigned int Number;
361} GSM_SubToDoEntry; 362} GSM_SubToDoEntry;
362 363
363/** 364/**
364 * To do entry. 365 * To do entry.
365 */ 366 */
366typedef struct { 367typedef struct {
367 /** 368 /**
368 * Priority of entry. 369 * Priority of entry.
369 */ 370 */
370 GSM_ToDo_Priority Priority; 371 GSM_ToDo_Priority Priority;
371 /** 372 /**
372 * Location in memory. 373 * Location in memory.
373 */ 374 */
374 int Location; 375 int Location;
375 /** 376 /**
376 * Number of entries. 377 * Number of entries.
377 */ 378 */
378 int EntriesNum; 379 int EntriesNum;
379 /** 380 /**
380 * Values of current entry. 381 * Values of current entry.
381 */ 382 */
382 GSM_SubToDoEntryEntries[GSM_TODO_ENTRIES]; 383 GSM_SubToDoEntryEntries[GSM_TODO_ENTRIES];
383} GSM_ToDoEntry; 384} GSM_ToDoEntry;
384 385
385void GSM_ToDoFindDefaultTextTimeAlarmCompleted(GSM_ToDoEntry *entry, int *Text, int *Alarm, int *Completed, int *EndTime, int *Phone); 386void GSM_ToDoFindDefaultTextTimeAlarmCompleted(GSM_ToDoEntry *entry, int *Text, int *Alarm, int *Completed, int *EndTime, int *Phone);
386 387
387typedef enum { 388typedef enum {
388 Nokia_VToDo = 1, 389 Nokia_VToDo = 1,
389 SonyEricsson_VToDo 390 SonyEricsson_VToDo
390} GSM_VToDoVersion; 391} GSM_VToDoVersion;
391 392
392GSM_Error GSM_EncodeVTODO(char *Buffer, int *Length, GSM_ToDoEntry *note, bool header, GSM_VToDoVersion Version); 393GSM_Error GSM_EncodeVTODO(char *Buffer, int *Length, GSM_ToDoEntry *note, bool header, GSM_VToDoVersion Version);
393 394
394/** 395/**
395 * Status of to do entries. 396 * Status of to do entries.
396 */ 397 */
397typedef struct { 398typedef struct {
398 /** 399 /**
399 * Number of used positions. 400 * Number of used positions.
400 */ 401 */
401 int Used; 402 int Used;
402} GSM_ToDoStatus; 403} GSM_ToDoStatus;
403 404
404/* --------------------------- note ---------------------------------------- */ 405/* --------------------------- note ---------------------------------------- */
405 406
406typedef struct { 407typedef struct {
407 int Location; 408 int Location;
408 char Text[3000*2]; 409 char Text[3000*2];
409} GSM_NoteEntry; 410} GSM_NoteEntry;
410 411
411GSM_Error GSM_EncodeVNTFile(unsigned char *Buffer, int *Length, GSM_NoteEntry *Note); 412GSM_Error GSM_EncodeVNTFile(unsigned char *Buffer, int *Length, GSM_NoteEntry *Note);
412 413
413/* --------------------------- alarm --------------------------------------- */ 414/* --------------------------- alarm --------------------------------------- */
414 415
415/** 416/**
diff --git a/kaddressbook/kabcore.cpp b/kaddressbook/kabcore.cpp
index 47ed858..dae9cd2 100644
--- a/kaddressbook/kabcore.cpp
+++ b/kaddressbook/kabcore.cpp
@@ -560,531 +560,533 @@ void KABCore::setContactSelected( const QString &uid )
560 560
561 mActionCopy->setEnabled( selected ); 561 mActionCopy->setEnabled( selected );
562 mActionDelete->setEnabled( selected ); 562 mActionDelete->setEnabled( selected );
563 mActionEditAddressee->setEnabled( selected ); 563 mActionEditAddressee->setEnabled( selected );
564 mActionMail->setEnabled( selected ); 564 mActionMail->setEnabled( selected );
565 mActionMailVCard->setEnabled( selected ); 565 mActionMailVCard->setEnabled( selected );
566 //if (mActionBeam) 566 //if (mActionBeam)
567 //mActionBeam->setEnabled( selected ); 567 //mActionBeam->setEnabled( selected );
568 568
569 if (mActionBeamVCard) 569 if (mActionBeamVCard)
570 mActionBeamVCard->setEnabled( selected ); 570 mActionBeamVCard->setEnabled( selected );
571 571
572 mActionExport2phone->setEnabled( selected ); 572 mActionExport2phone->setEnabled( selected );
573 mActionWhoAmI->setEnabled( selected ); 573 mActionWhoAmI->setEnabled( selected );
574 mActionCategories->setEnabled( selected ); 574 mActionCategories->setEnabled( selected );
575} 575}
576 576
577void KABCore::sendMail() 577void KABCore::sendMail()
578{ 578{
579 sendMail( mViewManager->selectedEmails().join( ", " ) ); 579 sendMail( mViewManager->selectedEmails().join( ", " ) );
580} 580}
581 581
582void KABCore::sendMail( const QString& emaillist ) 582void KABCore::sendMail( const QString& emaillist )
583{ 583{
584 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... " 584 // the parameter has the form "name1 <abc@aol.com>,name2 <abc@aol.com>;... "
585 if (emaillist.contains(",") > 0) 585 if (emaillist.contains(",") > 0)
586 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null ); 586 ExternalAppHandler::instance()->mailToMultipleContacts( emaillist, QString::null );
587 else 587 else
588 ExternalAppHandler::instance()->mailToOneContact( emaillist ); 588 ExternalAppHandler::instance()->mailToOneContact( emaillist );
589} 589}
590 590
591 591
592 592
593void KABCore::mailVCard() 593void KABCore::mailVCard()
594{ 594{
595 QStringList uids = mViewManager->selectedUids(); 595 QStringList uids = mViewManager->selectedUids();
596 if ( !uids.isEmpty() ) 596 if ( !uids.isEmpty() )
597 mailVCard( uids ); 597 mailVCard( uids );
598} 598}
599 599
600void KABCore::mailVCard( const QStringList& uids ) 600void KABCore::mailVCard( const QStringList& uids )
601{ 601{
602 QStringList urls; 602 QStringList urls;
603 603
604// QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 604// QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
605 605
606 QString dirName = "/tmp/" + KApplication::randomString( 8 ); 606 QString dirName = "/tmp/" + KApplication::randomString( 8 );
607 607
608 608
609 609
610 QDir().mkdir( dirName, true ); 610 QDir().mkdir( dirName, true );
611 611
612 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 612 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
613 KABC::Addressee a = mAddressBook->findByUid( *it ); 613 KABC::Addressee a = mAddressBook->findByUid( *it );
614 614
615 if ( a.isEmpty() ) 615 if ( a.isEmpty() )
616 continue; 616 continue;
617 617
618 QString name = a.givenName() + "_" + a.familyName() + ".vcf"; 618 QString name = a.givenName() + "_" + a.familyName() + ".vcf";
619 619
620 QString fileName = dirName + "/" + name; 620 QString fileName = dirName + "/" + name;
621 621
622 QFile outFile(fileName); 622 QFile outFile(fileName);
623 623
624 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully 624 if ( outFile.open(IO_WriteOnly) ) { // file opened successfully
625 KABC::VCardConverter converter; 625 KABC::VCardConverter converter;
626 QString vcard; 626 QString vcard;
627 627
628 converter.addresseeToVCard( a, vcard ); 628 converter.addresseeToVCard( a, vcard );
629 629
630 QTextStream t( &outFile ); // use a text stream 630 QTextStream t( &outFile ); // use a text stream
631 t.setEncoding( QTextStream::UnicodeUTF8 ); 631 t.setEncoding( QTextStream::UnicodeUTF8 );
632 t << vcard; 632 t << vcard;
633 633
634 outFile.close(); 634 outFile.close();
635 635
636 urls.append( fileName ); 636 urls.append( fileName );
637 } 637 }
638 } 638 }
639 639
640 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") ); 640 bool result = ExternalAppHandler::instance()->mailToMultipleContacts( QString::null, urls.join(", ") );
641 641
642 642
643/*US 643/*US
644 kapp->invokeMailer( QString::null, QString::null, QString::null, 644 kapp->invokeMailer( QString::null, QString::null, QString::null,
645 QString::null, // subject 645 QString::null, // subject
646 QString::null, // body 646 QString::null, // body
647 QString::null, 647 QString::null,
648 urls ); // attachments 648 urls ); // attachments
649*/ 649*/
650 650
651} 651}
652 652
653/** 653/**
654 Beams the "WhoAmI contact. 654 Beams the "WhoAmI contact.
655*/ 655*/
656void KABCore::beamMySelf() 656void KABCore::beamMySelf()
657{ 657{
658 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI(); 658 KABC::Addressee a = KABC::StdAddressBook::self()->whoAmI();
659 if (!a.isEmpty()) 659 if (!a.isEmpty())
660 { 660 {
661 QStringList uids; 661 QStringList uids;
662 uids << a.uid(); 662 uids << a.uid();
663 663
664 beamVCard(uids); 664 beamVCard(uids);
665 } else { 665 } else {
666 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) ); 666 KMessageBox::information( this, i18n( "Your personal contact is\nnot set! Please select it\nand set it with menu:\nSettings - Set Who Am I\n" ) );
667 667
668 668
669 } 669 }
670} 670}
671 671
672void KABCore::export2phone() 672void KABCore::export2phone()
673{ 673{
674 674
675 KAex2phonePrefs ex2phone; 675 KAex2phonePrefs ex2phone;
676 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection ); 676 ex2phone.mPhoneConnection->setText( KPimGlobalPrefs::instance()->mEx2PhoneConnection );
677 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice ); 677 ex2phone.mPhoneDevice->setText( KPimGlobalPrefs::instance()->mEx2PhoneDevice );
678 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel ); 678 ex2phone.mPhoneModel->setText( KPimGlobalPrefs::instance()->mEx2PhoneModel );
679 679
680 if ( !ex2phone.exec() ) { 680 if ( !ex2phone.exec() ) {
681 return; 681 return;
682 } 682 }
683 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text(); 683 KPimGlobalPrefs::instance()->mEx2PhoneConnection = ex2phone.mPhoneConnection->text();
684 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text(); 684 KPimGlobalPrefs::instance()->mEx2PhoneDevice = ex2phone.mPhoneDevice->text();
685 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text(); 685 KPimGlobalPrefs::instance()->mEx2PhoneModel = ex2phone.mPhoneModel->text();
686 686
687 687
688 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice, 688 PhoneAccess::writeConfig( KPimGlobalPrefs::instance()->mEx2PhoneDevice,
689 KPimGlobalPrefs::instance()->mEx2PhoneConnection, 689 KPimGlobalPrefs::instance()->mEx2PhoneConnection,
690 KPimGlobalPrefs::instance()->mEx2PhoneModel ); 690 KPimGlobalPrefs::instance()->mEx2PhoneModel );
691 691
692 QStringList uids = mViewManager->selectedUids(); 692 QStringList uids = mViewManager->selectedUids();
693 if ( uids.isEmpty() ) 693 if ( uids.isEmpty() )
694 return; 694 return;
695 695
696#ifdef _WIN32_ 696#ifdef _WIN32_
697 QString fileName = locateLocal("tmp", "phonefile.vcf"); 697 QString fileName = locateLocal("tmp", "phonefile.vcf");
698#else 698#else
699 QString fileName = "/tmp/phonefile.vcf"; 699 QString fileName = "/tmp/phonefile.vcf";
700#endif 700#endif
701 701
702 if ( ! mAddressBook->export2PhoneFormat( uids ,fileName ) ) 702 if ( ! mAddressBook->export2PhoneFormat( uids ,fileName ) )
703 return; 703 return;
704 704
705 if ( PhoneAccess::writeToPhone( fileName ) ) 705 if ( PhoneAccess::writeToPhone( fileName ) )
706 qDebug("Export okay "); 706 qDebug("Export okay ");
707 else 707 else
708 qDebug("Error export contacts "); 708 qDebug("Error export contacts ");
709 709
710 710
711#if 0 711#if 0
712 712
713 setCaption( i18n("Writing to phone...")); 713 setCaption( i18n("Writing to phone..."));
714 if ( PhoneFormat::writeToPhone( cal ) ) 714 if ( PhoneFormat::writeToPhone( cal ) )
715 setCaption( i18n("Export to phone successful!")); 715 setCaption( i18n("Export to phone successful!"));
716 else 716 else
717 setCaption( i18n("Error exporting to phone!")); 717 setCaption( i18n("Error exporting to phone!"));
718#endif 718#endif
719 719
720 720
721} 721}
722void KABCore::beamVCard() 722void KABCore::beamVCard()
723{ 723{
724 QStringList uids = mViewManager->selectedUids(); 724 QStringList uids = mViewManager->selectedUids();
725 if ( !uids.isEmpty() ) 725 if ( !uids.isEmpty() )
726 beamVCard( uids ); 726 beamVCard( uids );
727} 727}
728 728
729 729
730void KABCore::beamVCard(const QStringList& uids) 730void KABCore::beamVCard(const QStringList& uids)
731{ 731{
732/*US 732/*US
733 QString beamFilename; 733 QString beamFilename;
734 Opie::OPimContact c; 734 Opie::OPimContact c;
735 if ( actionPersonal->isOn() ) { 735 if ( actionPersonal->isOn() ) {
736 beamFilename = addressbookPersonalVCardName(); 736 beamFilename = addressbookPersonalVCardName();
737 if ( !QFile::exists( beamFilename ) ) 737 if ( !QFile::exists( beamFilename ) )
738 return; // can't beam a non-existent file 738 return; // can't beam a non-existent file
739 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 739 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
740 beamFilename ); 740 beamFilename );
741 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 741 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
742 Opie::OPimContactAccess::List allList = access->allRecords(); 742 Opie::OPimContactAccess::List allList = access->allRecords();
743 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first 743 Opie::OPimContactAccess::List::Iterator it = allList.begin(); // Just take first
744 c = *it; 744 c = *it;
745 745
746 delete access; 746 delete access;
747 } else { 747 } else {
748 unlink( beamfile ); // delete if exists 748 unlink( beamfile ); // delete if exists
749 mkdir("/tmp/obex/", 0755); 749 mkdir("/tmp/obex/", 0755);
750 c = m_abView -> currentEntry(); 750 c = m_abView -> currentEntry();
751 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null, 751 Opie::OPimContactAccessBackend* vcard_backend = new Opie::OPimContactAccessBackend_VCard( QString::null,
752 beamfile ); 752 beamfile );
753 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true ); 753 Opie::OPimContactAccess* access = new Opie::OPimContactAccess ( "addressbook", QString::null , vcard_backend, true );
754 access->add( c ); 754 access->add( c );
755 access->save(); 755 access->save();
756 delete access; 756 delete access;
757 757
758 beamFilename = beamfile; 758 beamFilename = beamfile;
759 } 759 }
760 760
761 owarn << "Beaming: " << beamFilename << oendl; 761 owarn << "Beaming: " << beamFilename << oendl;
762*/ 762*/
763 763
764#if 0 764#if 0
765 QString tmpdir = locateLocal("tmp", KGlobal::getAppName()); 765 QString tmpdir = locateLocal("tmp", KGlobal::getAppName());
766 766
767 QString dirName = tmpdir + "/" + KApplication::randomString( 8 ); 767 QString dirName = tmpdir + "/" + KApplication::randomString( 8 );
768 768
769 QString name = "contact.vcf"; 769 QString name = "contact.vcf";
770 770
771 QString fileName = dirName + "/" + name; 771 QString fileName = dirName + "/" + name;
772#endif 772#endif
773 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory 773 // LR: we should use the /tmp dir, because: /tmp = RAM, (HOME)/kdepim = flash memory
774 // 774 //
775 QString fileName = "/tmp/kapibeamfile.vcf"; 775 QString fileName = "/tmp/kapibeamfile.vcf";
776 776
777 777
778 //QDir().mkdir( dirName, true ); 778 //QDir().mkdir( dirName, true );
779 779
780 780
781 KABC::VCardConverter converter; 781 KABC::VCardConverter converter;
782 QString description; 782 QString description;
783 QString datastream; 783 QString datastream;
784 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) { 784 for( QStringList::ConstIterator it = uids.begin(); it != uids.end(); ++it ) {
785 KABC::Addressee a = mAddressBook->findByUid( *it ); 785 KABC::Addressee a = mAddressBook->findByUid( *it );
786 786
787 if ( a.isEmpty() ) 787 if ( a.isEmpty() )
788 continue; 788 continue;
789 789
790 if (description.isEmpty()) 790 if (description.isEmpty())
791 description = a.formattedName(); 791 description = a.formattedName();
792 792
793 QString vcard; 793 QString vcard;
794 converter.addresseeToVCard( a, vcard ); 794 converter.addresseeToVCard( a, vcard );
795 int start = 0; 795 int start = 0;
796 int next; 796 int next;
797 while ( (next = vcard.find("TYPE=", start) )>= 0 ) { 797 while ( (next = vcard.find("TYPE=", start) )>= 0 ) {
798 int semi = vcard.find(";", next); 798 int semi = vcard.find(";", next);
799 int dopp = vcard.find(":", next); 799 int dopp = vcard.find(":", next);
800 int sep; 800 int sep;
801 if ( semi < dopp && semi >= 0 ) 801 if ( semi < dopp && semi >= 0 )
802 sep = semi ; 802 sep = semi ;
803 else 803 else
804 sep = dopp; 804 sep = dopp;
805 datastream +=vcard.mid( start, next - start); 805 datastream +=vcard.mid( start, next - start);
806 datastream +=vcard.mid( next+5,sep -next -5 ).upper(); 806 datastream +=vcard.mid( next+5,sep -next -5 ).upper();
807 start = sep; 807 start = sep;
808 } 808 }
809 datastream += vcard.mid( start,vcard.length() ); 809 datastream += vcard.mid( start,vcard.length() );
810 } 810 }
811#ifndef DESKTOP_VERSION 811#ifndef DESKTOP_VERSION
812 QFile outFile(fileName); 812 QFile outFile(fileName);
813 if ( outFile.open(IO_WriteOnly) ) { 813 if ( outFile.open(IO_WriteOnly) ) {
814 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" ); 814 datastream.replace ( QRegExp("VERSION:3.0") , "VERSION:2.1" );
815 QTextStream t( &outFile ); // use a text stream 815 QTextStream t( &outFile ); // use a text stream
816 t.setEncoding( QTextStream::UnicodeUTF8 ); 816 //t.setEncoding( QTextStream::UnicodeUTF8 );
817 t <<datastream; 817 t.setEncoding( QTextStream::Latin1 );
818 t <<datastream.latin1();
818 outFile.close(); 819 outFile.close();
819 Ir *ir = new Ir( this ); 820 Ir *ir = new Ir( this );
820 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) ); 821 connect( ir, SIGNAL( done(Ir*) ), this, SLOT( beamDone(Ir*) ) );
821 ir->send( fileName, description, "text/x-vCard" ); 822 ir->send( fileName, description, "text/x-vCard" );
822 } else { 823 } else {
823 qDebug("Error open temp beam file "); 824 qDebug("Error open temp beam file ");
824 return; 825 return;
825 } 826 }
826#endif 827#endif
827 828
828} 829}
829 830
830void KABCore::beamDone( Ir *ir ) 831void KABCore::beamDone( Ir *ir )
831{ 832{
832#ifndef DESKTOP_VERSION 833#ifndef DESKTOP_VERSION
833 delete ir; 834 delete ir;
834#endif 835#endif
836 topLevelWidget()->raise();
835} 837}
836 838
837 839
838void KABCore::browse( const QString& url ) 840void KABCore::browse( const QString& url )
839{ 841{
840#ifndef KAB_EMBEDDED 842#ifndef KAB_EMBEDDED
841 kapp->invokeBrowser( url ); 843 kapp->invokeBrowser( url );
842#else //KAB_EMBEDDED 844#else //KAB_EMBEDDED
843 qDebug("KABCore::browse must be fixed"); 845 qDebug("KABCore::browse must be fixed");
844#endif //KAB_EMBEDDED 846#endif //KAB_EMBEDDED
845} 847}
846 848
847void KABCore::selectAllContacts() 849void KABCore::selectAllContacts()
848{ 850{
849 mViewManager->setSelected( QString::null, true ); 851 mViewManager->setSelected( QString::null, true );
850} 852}
851 853
852void KABCore::deleteContacts() 854void KABCore::deleteContacts()
853{ 855{
854 QStringList uidList = mViewManager->selectedUids(); 856 QStringList uidList = mViewManager->selectedUids();
855 deleteContacts( uidList ); 857 deleteContacts( uidList );
856} 858}
857 859
858void KABCore::deleteContacts( const QStringList &uids ) 860void KABCore::deleteContacts( const QStringList &uids )
859{ 861{
860 if ( uids.count() > 0 ) { 862 if ( uids.count() > 0 ) {
861 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids ); 863 PwDeleteCommand *command = new PwDeleteCommand( mAddressBook, uids );
862 UndoStack::instance()->push( command ); 864 UndoStack::instance()->push( command );
863 RedoStack::instance()->clear(); 865 RedoStack::instance()->clear();
864 866
865 // now if we deleted anything, refresh 867 // now if we deleted anything, refresh
866 setContactSelected( QString::null ); 868 setContactSelected( QString::null );
867 setModified( true ); 869 setModified( true );
868 } 870 }
869} 871}
870 872
871void KABCore::copyContacts() 873void KABCore::copyContacts()
872{ 874{
873 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 875 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
874 876
875 QString clipText = AddresseeUtil::addresseesToClipboard( addrList ); 877 QString clipText = AddresseeUtil::addresseesToClipboard( addrList );
876 878
877 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl; 879 kdDebug(5720) << "KABCore::copyContacts: " << clipText << endl;
878 880
879 QClipboard *cb = QApplication::clipboard(); 881 QClipboard *cb = QApplication::clipboard();
880 cb->setText( clipText ); 882 cb->setText( clipText );
881} 883}
882 884
883void KABCore::cutContacts() 885void KABCore::cutContacts()
884{ 886{
885 QStringList uidList = mViewManager->selectedUids(); 887 QStringList uidList = mViewManager->selectedUids();
886 888
887//US if ( uidList.size() > 0 ) { 889//US if ( uidList.size() > 0 ) {
888 if ( uidList.count() > 0 ) { 890 if ( uidList.count() > 0 ) {
889 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList ); 891 PwCutCommand *command = new PwCutCommand( mAddressBook, uidList );
890 UndoStack::instance()->push( command ); 892 UndoStack::instance()->push( command );
891 RedoStack::instance()->clear(); 893 RedoStack::instance()->clear();
892 894
893 setModified( true ); 895 setModified( true );
894 } 896 }
895} 897}
896 898
897void KABCore::pasteContacts() 899void KABCore::pasteContacts()
898{ 900{
899 QClipboard *cb = QApplication::clipboard(); 901 QClipboard *cb = QApplication::clipboard();
900 902
901 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() ); 903 KABC::Addressee::List list = AddresseeUtil::clipboardToAddressees( cb->text() );
902 904
903 pasteContacts( list ); 905 pasteContacts( list );
904} 906}
905 907
906void KABCore::pasteContacts( KABC::Addressee::List &list ) 908void KABCore::pasteContacts( KABC::Addressee::List &list )
907{ 909{
908 KABC::Resource *resource = requestResource( this ); 910 KABC::Resource *resource = requestResource( this );
909 KABC::Addressee::List::Iterator it; 911 KABC::Addressee::List::Iterator it;
910 for ( it = list.begin(); it != list.end(); ++it ) 912 for ( it = list.begin(); it != list.end(); ++it )
911 (*it).setResource( resource ); 913 (*it).setResource( resource );
912 914
913 PwPasteCommand *command = new PwPasteCommand( this, list ); 915 PwPasteCommand *command = new PwPasteCommand( this, list );
914 UndoStack::instance()->push( command ); 916 UndoStack::instance()->push( command );
915 RedoStack::instance()->clear(); 917 RedoStack::instance()->clear();
916 918
917 setModified( true ); 919 setModified( true );
918} 920}
919 921
920void KABCore::setWhoAmI() 922void KABCore::setWhoAmI()
921{ 923{
922 KABC::Addressee::List addrList = mViewManager->selectedAddressees(); 924 KABC::Addressee::List addrList = mViewManager->selectedAddressees();
923 925
924 if ( addrList.count() > 1 ) { 926 if ( addrList.count() > 1 ) {
925 KMessageBox::sorry( this, i18n( "Please select only one contact." ) ); 927 KMessageBox::sorry( this, i18n( "Please select only one contact." ) );
926 return; 928 return;
927 } 929 }
928 930
929 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) ); 931 QString text( i18n( "<qt>Do you really want to use <b>%1</b> as your new personal contact?</qt>" ) );
930 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes ) 932 if ( KMessageBox::questionYesNo( this, text.arg( addrList[ 0 ].assembledName() ) ) == KMessageBox::Yes )
931 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] ); 933 static_cast<KABC::StdAddressBook*>( KABC::StdAddressBook::self() )->setWhoAmI( addrList[ 0 ] );
932} 934}
933 935
934void KABCore::setCategories() 936void KABCore::setCategories()
935{ 937{
936 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true ); 938 KPIM::CategorySelectDialog dlg( KABPrefs::instance(), this, "", true );
937 if ( !dlg.exec() ) 939 if ( !dlg.exec() )
938 return; 940 return;
939 941
940 bool merge = false; 942 bool merge = false;
941 QString msg = i18n( "Merge with existing categories?" ); 943 QString msg = i18n( "Merge with existing categories?" );
942 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes ) 944 if ( KMessageBox::questionYesNo( this, msg ) == KMessageBox::Yes )
943 merge = true; 945 merge = true;
944 946
945 QStringList categories = dlg.selectedCategories(); 947 QStringList categories = dlg.selectedCategories();
946 948
947 QStringList uids = mViewManager->selectedUids(); 949 QStringList uids = mViewManager->selectedUids();
948 QStringList::Iterator it; 950 QStringList::Iterator it;
949 for ( it = uids.begin(); it != uids.end(); ++it ) { 951 for ( it = uids.begin(); it != uids.end(); ++it ) {
950 KABC::Addressee addr = mAddressBook->findByUid( *it ); 952 KABC::Addressee addr = mAddressBook->findByUid( *it );
951 if ( !addr.isEmpty() ) { 953 if ( !addr.isEmpty() ) {
952 if ( !merge ) 954 if ( !merge )
953 addr.setCategories( categories ); 955 addr.setCategories( categories );
954 else { 956 else {
955 QStringList addrCategories = addr.categories(); 957 QStringList addrCategories = addr.categories();
956 QStringList::Iterator catIt; 958 QStringList::Iterator catIt;
957 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) { 959 for ( catIt = categories.begin(); catIt != categories.end(); ++catIt ) {
958 if ( !addrCategories.contains( *catIt ) ) 960 if ( !addrCategories.contains( *catIt ) )
959 addrCategories.append( *catIt ); 961 addrCategories.append( *catIt );
960 } 962 }
961 addr.setCategories( addrCategories ); 963 addr.setCategories( addrCategories );
962 } 964 }
963 965
964 mAddressBook->insertAddressee( addr ); 966 mAddressBook->insertAddressee( addr );
965 } 967 }
966 } 968 }
967 969
968 if ( uids.count() > 0 ) 970 if ( uids.count() > 0 )
969 setModified( true ); 971 setModified( true );
970} 972}
971 973
972void KABCore::setSearchFields( const KABC::Field::List &fields ) 974void KABCore::setSearchFields( const KABC::Field::List &fields )
973{ 975{
974 mIncSearchWidget->setFields( fields ); 976 mIncSearchWidget->setFields( fields );
975} 977}
976 978
977void KABCore::incrementalSearch( const QString& text ) 979void KABCore::incrementalSearch( const QString& text )
978{ 980{
979 mViewManager->doSearch( text, mIncSearchWidget->currentField() ); 981 mViewManager->doSearch( text, mIncSearchWidget->currentField() );
980} 982}
981 983
982void KABCore::setModified() 984void KABCore::setModified()
983{ 985{
984 setModified( true ); 986 setModified( true );
985} 987}
986 988
987void KABCore::setModifiedWOrefresh() 989void KABCore::setModifiedWOrefresh()
988{ 990{
989 // qDebug("KABCore::setModifiedWOrefresh() "); 991 // qDebug("KABCore::setModifiedWOrefresh() ");
990 mModified = true; 992 mModified = true;
991 mActionSave->setEnabled( mModified ); 993 mActionSave->setEnabled( mModified );
992#ifdef DESKTOP_VERSION 994#ifdef DESKTOP_VERSION
993 mDetails->refreshView(); 995 mDetails->refreshView();
994#endif 996#endif
995 997
996} 998}
997void KABCore::setModified( bool modified ) 999void KABCore::setModified( bool modified )
998{ 1000{
999 mModified = modified; 1001 mModified = modified;
1000 mActionSave->setEnabled( mModified ); 1002 mActionSave->setEnabled( mModified );
1001 1003
1002 if ( modified ) 1004 if ( modified )
1003 mJumpButtonBar->recreateButtons(); 1005 mJumpButtonBar->recreateButtons();
1004 1006
1005 mViewManager->refreshView(); 1007 mViewManager->refreshView();
1006 mDetails->refreshView(); 1008 mDetails->refreshView();
1007 1009
1008} 1010}
1009 1011
1010bool KABCore::modified() const 1012bool KABCore::modified() const
1011{ 1013{
1012 return mModified; 1014 return mModified;
1013} 1015}
1014 1016
1015void KABCore::contactModified( const KABC::Addressee &addr ) 1017void KABCore::contactModified( const KABC::Addressee &addr )
1016{ 1018{
1017 1019
1018 Command *command = 0; 1020 Command *command = 0;
1019 QString uid; 1021 QString uid;
1020 1022
1021 // check if it exists already 1023 // check if it exists already
1022 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() ); 1024 KABC::Addressee origAddr = mAddressBook->findByUid( addr.uid() );
1023 if ( origAddr.isEmpty() ) 1025 if ( origAddr.isEmpty() )
1024 command = new PwNewCommand( mAddressBook, addr ); 1026 command = new PwNewCommand( mAddressBook, addr );
1025 else { 1027 else {
1026 command = new PwEditCommand( mAddressBook, origAddr, addr ); 1028 command = new PwEditCommand( mAddressBook, origAddr, addr );
1027 uid = addr.uid(); 1029 uid = addr.uid();
1028 } 1030 }
1029 1031
1030 UndoStack::instance()->push( command ); 1032 UndoStack::instance()->push( command );
1031 RedoStack::instance()->clear(); 1033 RedoStack::instance()->clear();
1032 1034
1033 setModified( true ); 1035 setModified( true );
1034} 1036}
1035 1037
1036void KABCore::newContact() 1038void KABCore::newContact()
1037{ 1039{
1038 1040
1039 1041
1040 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources(); 1042 QPtrList<KABC::Resource> kabcResources = mAddressBook->resources();
1041 1043
1042 QPtrList<KRES::Resource> kresResources; 1044 QPtrList<KRES::Resource> kresResources;
1043 QPtrListIterator<KABC::Resource> it( kabcResources ); 1045 QPtrListIterator<KABC::Resource> it( kabcResources );
1044 KABC::Resource *resource; 1046 KABC::Resource *resource;
1045 while ( ( resource = it.current() ) != 0 ) { 1047 while ( ( resource = it.current() ) != 0 ) {
1046 ++it; 1048 ++it;
1047 if ( !resource->readOnly() ) { 1049 if ( !resource->readOnly() ) {
1048 KRES::Resource *res = static_cast<KRES::Resource*>( resource ); 1050 KRES::Resource *res = static_cast<KRES::Resource*>( resource );
1049 if ( res ) 1051 if ( res )
1050 kresResources.append( res ); 1052 kresResources.append( res );
1051 } 1053 }
1052 } 1054 }
1053 1055
1054 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this ); 1056 KRES::Resource *res = KRES::SelectDialog::getResource( kresResources, this );
1055 resource = static_cast<KABC::Resource*>( res ); 1057 resource = static_cast<KABC::Resource*>( res );
1056 1058
1057 if ( resource ) { 1059 if ( resource ) {
1058 KABC::Addressee addr; 1060 KABC::Addressee addr;
1059 addr.setResource( resource ); 1061 addr.setResource( resource );
1060 mEditorDialog->setAddressee( addr ); 1062 mEditorDialog->setAddressee( addr );
1061 KApplication::execDialog ( mEditorDialog ); 1063 KApplication::execDialog ( mEditorDialog );
1062 1064
1063 } else 1065 } else
1064 return; 1066 return;
1065 1067
1066 // mEditorDict.insert( dialog->addressee().uid(), dialog ); 1068 // mEditorDict.insert( dialog->addressee().uid(), dialog );
1067 1069
1068 1070
1069} 1071}
1070 1072
1071void KABCore::addEmail( QString aStr ) 1073void KABCore::addEmail( QString aStr )
1072{ 1074{
1073#ifndef KAB_EMBEDDED 1075#ifndef KAB_EMBEDDED
1074 QString fullName, email; 1076 QString fullName, email;
1075 1077
1076 KABC::Addressee::parseEmailAddress( aStr, fullName, email ); 1078 KABC::Addressee::parseEmailAddress( aStr, fullName, email );
1077 1079
1078 // Try to lookup the addressee matching the email address 1080 // Try to lookup the addressee matching the email address
1079 bool found = false; 1081 bool found = false;
1080 QStringList emailList; 1082 QStringList emailList;
1081 KABC::AddressBook::Iterator it; 1083 KABC::AddressBook::Iterator it;
1082 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) { 1084 for ( it = mAddressBook->begin(); !found && (it != mAddressBook->end()); ++it ) {
1083 emailList = (*it).emails(); 1085 emailList = (*it).emails();
1084 if ( emailList.contains( email ) > 0 ) { 1086 if ( emailList.contains( email ) > 0 ) {
1085 found = true; 1087 found = true;
1086 (*it).setNameFromString( fullName ); 1088 (*it).setNameFromString( fullName );
1087 editContact( (*it).uid() ); 1089 editContact( (*it).uid() );
1088 } 1090 }
1089 } 1091 }
1090 1092
diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 1f2c6da..3e0a27d 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -2070,542 +2070,550 @@ void CalendarView::changeEventDisplay(Event *which, int action)
2070 //mDialogManager->updateSearchDialog(); 2070 //mDialogManager->updateSearchDialog();
2071 2071
2072 if (which) { 2072 if (which) {
2073 // If there is an event view visible update the display 2073 // If there is an event view visible update the display
2074 mViewManager->currentView()->changeEventDisplay(which,action); 2074 mViewManager->currentView()->changeEventDisplay(which,action);
2075 // TODO: check, if update needed 2075 // TODO: check, if update needed
2076 // if (which->getTodoStatus()) { 2076 // if (which->getTodoStatus()) {
2077 mTodoList->updateView(); 2077 mTodoList->updateView();
2078 // } 2078 // }
2079 } else { 2079 } else {
2080 mViewManager->currentView()->updateView(); 2080 mViewManager->currentView()->updateView();
2081 } 2081 }
2082} 2082}
2083 2083
2084 2084
2085void CalendarView::updateTodoViews() 2085void CalendarView::updateTodoViews()
2086{ 2086{
2087 2087
2088 mTodoList->updateView(); 2088 mTodoList->updateView();
2089 mViewManager->currentView()->updateView(); 2089 mViewManager->currentView()->updateView();
2090 2090
2091} 2091}
2092 2092
2093 2093
2094void CalendarView::updateView(const QDate &start, const QDate &end) 2094void CalendarView::updateView(const QDate &start, const QDate &end)
2095{ 2095{
2096 mTodoList->updateView(); 2096 mTodoList->updateView();
2097 mViewManager->updateView(start, end); 2097 mViewManager->updateView(start, end);
2098 //mDateNavigator->updateView(); 2098 //mDateNavigator->updateView();
2099} 2099}
2100 2100
2101void CalendarView::updateView() 2101void CalendarView::updateView()
2102{ 2102{
2103 DateList tmpList = mNavigator->selectedDates(); 2103 DateList tmpList = mNavigator->selectedDates();
2104 2104
2105 // We assume that the navigator only selects consecutive days. 2105 // We assume that the navigator only selects consecutive days.
2106 updateView( tmpList.first(), tmpList.last() ); 2106 updateView( tmpList.first(), tmpList.last() );
2107} 2107}
2108 2108
2109void CalendarView::updateUnmanagedViews() 2109void CalendarView::updateUnmanagedViews()
2110{ 2110{
2111 mDateNavigator->updateDayMatrix(); 2111 mDateNavigator->updateDayMatrix();
2112} 2112}
2113 2113
2114int CalendarView::msgItemDelete() 2114int CalendarView::msgItemDelete()
2115{ 2115{
2116 return KMessageBox::warningContinueCancel(this, 2116 return KMessageBox::warningContinueCancel(this,
2117 i18n("This item will be\npermanently deleted."), 2117 i18n("This item will be\npermanently deleted."),
2118 i18n("KO/Pi Confirmation"),i18n("Delete")); 2118 i18n("KO/Pi Confirmation"),i18n("Delete"));
2119} 2119}
2120 2120
2121 2121
2122void CalendarView::edit_cut() 2122void CalendarView::edit_cut()
2123{ 2123{
2124 Event *anEvent=0; 2124 Event *anEvent=0;
2125 2125
2126 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2126 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2127 2127
2128 if (mViewManager->currentView()->isEventView()) { 2128 if (mViewManager->currentView()->isEventView()) {
2129 if ( incidence && incidence->type() == "Event" ) { 2129 if ( incidence && incidence->type() == "Event" ) {
2130 anEvent = static_cast<Event *>(incidence); 2130 anEvent = static_cast<Event *>(incidence);
2131 } 2131 }
2132 } 2132 }
2133 2133
2134 if (!anEvent) { 2134 if (!anEvent) {
2135 KNotifyClient::beep(); 2135 KNotifyClient::beep();
2136 return; 2136 return;
2137 } 2137 }
2138 DndFactory factory( mCalendar ); 2138 DndFactory factory( mCalendar );
2139 factory.cutEvent(anEvent); 2139 factory.cutEvent(anEvent);
2140 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED); 2140 changeEventDisplay(anEvent, KOGlobals::EVENTDELETED);
2141} 2141}
2142 2142
2143void CalendarView::edit_copy() 2143void CalendarView::edit_copy()
2144{ 2144{
2145 Event *anEvent=0; 2145 Event *anEvent=0;
2146 2146
2147 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first(); 2147 Incidence *incidence = mViewManager->currentView()->selectedIncidences().first();
2148 2148
2149 if (mViewManager->currentView()->isEventView()) { 2149 if (mViewManager->currentView()->isEventView()) {
2150 if ( incidence && incidence->type() == "Event" ) { 2150 if ( incidence && incidence->type() == "Event" ) {
2151 anEvent = static_cast<Event *>(incidence); 2151 anEvent = static_cast<Event *>(incidence);
2152 } 2152 }
2153 } 2153 }
2154 2154
2155 if (!anEvent) { 2155 if (!anEvent) {
2156 KNotifyClient::beep(); 2156 KNotifyClient::beep();
2157 return; 2157 return;
2158 } 2158 }
2159 DndFactory factory( mCalendar ); 2159 DndFactory factory( mCalendar );
2160 factory.copyEvent(anEvent); 2160 factory.copyEvent(anEvent);
2161} 2161}
2162 2162
2163void CalendarView::edit_paste() 2163void CalendarView::edit_paste()
2164{ 2164{
2165 QDate date = mNavigator->selectedDates().first(); 2165 QDate date = mNavigator->selectedDates().first();
2166 2166
2167 DndFactory factory( mCalendar ); 2167 DndFactory factory( mCalendar );
2168 Event *pastedEvent = factory.pasteEvent( date ); 2168 Event *pastedEvent = factory.pasteEvent( date );
2169 2169
2170 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED ); 2170 changeEventDisplay( pastedEvent, KOGlobals::EVENTADDED );
2171} 2171}
2172 2172
2173void CalendarView::edit_options() 2173void CalendarView::edit_options()
2174{ 2174{
2175 mDialogManager->showOptionsDialog(); 2175 mDialogManager->showOptionsDialog();
2176 //writeSettings(); 2176 //writeSettings();
2177} 2177}
2178 2178
2179void CalendarView::slotSelectPickerDate( QDate d) 2179void CalendarView::slotSelectPickerDate( QDate d)
2180{ 2180{
2181 mDateFrame->hide(); 2181 mDateFrame->hide();
2182 if ( mDatePickerMode == 1 ) { 2182 if ( mDatePickerMode == 1 ) {
2183 mNavigator->slotDaySelect( d ); 2183 mNavigator->slotDaySelect( d );
2184 } else if ( mDatePickerMode == 2 ) { 2184 } else if ( mDatePickerMode == 2 ) {
2185 if ( mMoveIncidence->type() == "Todo" ) { 2185 if ( mMoveIncidence->type() == "Todo" ) {
2186 Todo * to = (Todo *) mMoveIncidence; 2186 Todo * to = (Todo *) mMoveIncidence;
2187 QTime tim; 2187 QTime tim;
2188 if ( to->hasDueDate() ) 2188 if ( to->hasDueDate() )
2189 tim = to->dtDue().time(); 2189 tim = to->dtDue().time();
2190 else { 2190 else {
2191 tim = QTime ( 0,0,0 ); 2191 tim = QTime ( 0,0,0 );
2192 to->setFloats( true ); 2192 to->setFloats( true );
2193 to->setHasDueDate( true ); 2193 to->setHasDueDate( true );
2194 } 2194 }
2195 QDateTime dt ( d,tim ); 2195 QDateTime dt ( d,tim );
2196 to->setDtDue( dt ); 2196 to->setDtDue( dt );
2197 todoChanged( to ); 2197 todoChanged( to );
2198 } else { 2198 } else {
2199 QTime tim = mMoveIncidence->dtStart().time(); 2199 QTime tim = mMoveIncidence->dtStart().time();
2200 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd()); 2200 int secs = mMoveIncidence->dtStart().secsTo( mMoveIncidence->dtEnd());
2201 QDateTime dt ( d,tim ); 2201 QDateTime dt ( d,tim );
2202 mMoveIncidence->setDtStart( dt ); 2202 mMoveIncidence->setDtStart( dt );
2203 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) ); 2203 ((Event*)mMoveIncidence)->setDtEnd( dt.addSecs( secs ) );
2204 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED); 2204 changeEventDisplay((Event*)mMoveIncidence, KOGlobals::EVENTEDITED);
2205 } 2205 }
2206 2206
2207 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 ); 2207 mMoveIncidence->setRevision( mMoveIncidence->revision()+1 );
2208 } 2208 }
2209} 2209}
2210 2210
2211void CalendarView::removeCategories() 2211void CalendarView::removeCategories()
2212{ 2212{
2213 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2213 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2214 QStringList catList = KOPrefs::instance()->mCustomCategories; 2214 QStringList catList = KOPrefs::instance()->mCustomCategories;
2215 QStringList catIncList; 2215 QStringList catIncList;
2216 QStringList newCatList; 2216 QStringList newCatList;
2217 Incidence* inc = incList.first(); 2217 Incidence* inc = incList.first();
2218 int i; 2218 int i;
2219 int count = 0; 2219 int count = 0;
2220 while ( inc ) { 2220 while ( inc ) {
2221 newCatList.clear(); 2221 newCatList.clear();
2222 catIncList = inc->categories() ; 2222 catIncList = inc->categories() ;
2223 for( i = 0; i< catIncList.count(); ++i ) { 2223 for( i = 0; i< catIncList.count(); ++i ) {
2224 if ( catList.contains (catIncList[i])) 2224 if ( catList.contains (catIncList[i]))
2225 newCatList.append( catIncList[i] ); 2225 newCatList.append( catIncList[i] );
2226 } 2226 }
2227 newCatList.sort(); 2227 newCatList.sort();
2228 inc->setCategories( newCatList.join(",") ); 2228 inc->setCategories( newCatList.join(",") );
2229 inc = incList.next(); 2229 inc = incList.next();
2230 } 2230 }
2231} 2231}
2232 2232
2233int CalendarView::addCategories() 2233int CalendarView::addCategories()
2234{ 2234{
2235 QPtrList<Incidence> incList = mCalendar->rawIncidences(); 2235 QPtrList<Incidence> incList = mCalendar->rawIncidences();
2236 QStringList catList = KOPrefs::instance()->mCustomCategories; 2236 QStringList catList = KOPrefs::instance()->mCustomCategories;
2237 QStringList catIncList; 2237 QStringList catIncList;
2238 Incidence* inc = incList.first(); 2238 Incidence* inc = incList.first();
2239 int i; 2239 int i;
2240 int count = 0; 2240 int count = 0;
2241 while ( inc ) { 2241 while ( inc ) {
2242 catIncList = inc->categories() ; 2242 catIncList = inc->categories() ;
2243 for( i = 0; i< catIncList.count(); ++i ) { 2243 for( i = 0; i< catIncList.count(); ++i ) {
2244 if ( !catList.contains (catIncList[i])) { 2244 if ( !catList.contains (catIncList[i])) {
2245 catList.append( catIncList[i] ); 2245 catList.append( catIncList[i] );
2246 //qDebug("add cat %s ", catIncList[i].latin1()); 2246 //qDebug("add cat %s ", catIncList[i].latin1());
2247 ++count; 2247 ++count;
2248 } 2248 }
2249 } 2249 }
2250 inc = incList.next(); 2250 inc = incList.next();
2251 } 2251 }
2252 catList.sort(); 2252 catList.sort();
2253 KOPrefs::instance()->mCustomCategories = catList; 2253 KOPrefs::instance()->mCustomCategories = catList;
2254 return count; 2254 return count;
2255} 2255}
2256 2256
2257void CalendarView::manageCategories() 2257void CalendarView::manageCategories()
2258{ 2258{
2259 KOCatPrefs* cp = new KOCatPrefs(); 2259 KOCatPrefs* cp = new KOCatPrefs();
2260 cp->show(); 2260 cp->show();
2261 int w =cp->sizeHint().width() ; 2261 int w =cp->sizeHint().width() ;
2262 int h = cp->sizeHint().height() ; 2262 int h = cp->sizeHint().height() ;
2263 int dw = QApplication::desktop()->width(); 2263 int dw = QApplication::desktop()->width();
2264 int dh = QApplication::desktop()->height(); 2264 int dh = QApplication::desktop()->height();
2265 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2265 cp->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2266 if ( !cp->exec() ) { 2266 if ( !cp->exec() ) {
2267 delete cp; 2267 delete cp;
2268 return; 2268 return;
2269 } 2269 }
2270 int count = 0; 2270 int count = 0;
2271 if ( cp->addCat() ) { 2271 if ( cp->addCat() ) {
2272 count = addCategories(); 2272 count = addCategories();
2273 if ( count ) { 2273 if ( count ) {
2274 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! ")); 2274 topLevelWidget()->setCaption(QString::number( count )+ i18n(" Categories added to list! "));
2275 writeSettings(); 2275 writeSettings();
2276 } 2276 }
2277 } else { 2277 } else {
2278 removeCategories(); 2278 removeCategories();
2279 updateView(); 2279 updateView();
2280 } 2280 }
2281 delete cp; 2281 delete cp;
2282} 2282}
2283 2283
2284void CalendarView::beamIncidence(Incidence * Inc) 2284void CalendarView::beamIncidence(Incidence * Inc)
2285{ 2285{
2286 QPtrList<Incidence> delSel ; 2286 QPtrList<Incidence> delSel ;
2287 delSel.append(Inc); 2287 delSel.append(Inc);
2288 beamIncidenceList( delSel ); 2288 beamIncidenceList( delSel );
2289} 2289}
2290void CalendarView::beamCalendar() 2290void CalendarView::beamCalendar()
2291{ 2291{
2292 QPtrList<Incidence> delSel = mCalendar->rawIncidences(); 2292 QPtrList<Incidence> delSel = mCalendar->rawIncidences();
2293 //qDebug("beamCalendar() "); 2293 //qDebug("beamCalendar() ");
2294 beamIncidenceList( delSel ); 2294 beamIncidenceList( delSel );
2295} 2295}
2296void CalendarView::beamFilteredCalendar() 2296void CalendarView::beamFilteredCalendar()
2297{ 2297{
2298 QPtrList<Incidence> delSel = mCalendar->incidences(); 2298 QPtrList<Incidence> delSel = mCalendar->incidences();
2299 //qDebug("beamFilteredCalendar() "); 2299 //qDebug("beamFilteredCalendar() ");
2300 beamIncidenceList( delSel ); 2300 beamIncidenceList( delSel );
2301} 2301}
2302void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel ) 2302void CalendarView::beamIncidenceList(QPtrList<Incidence> delSel )
2303{ 2303{
2304 if ( beamDialog->exec () == QDialog::Rejected ) 2304 if ( beamDialog->exec () == QDialog::Rejected )
2305 return; 2305 return;
2306 2306
2307 QString fn = "/tmp/kopibeamfile"; 2307 QString fn = "/tmp/kopibeamfile";
2308 QString mes; 2308 QString mes;
2309 bool createbup = true; 2309 bool createbup = true;
2310 if ( createbup ) { 2310 if ( createbup ) {
2311 QString description = "\n"; 2311 QString description = "\n";
2312 CalendarLocal* cal = new CalendarLocal(); 2312 CalendarLocal* cal = new CalendarLocal();
2313 if ( beamDialog->beamLocal() ) 2313 if ( beamDialog->beamLocal() )
2314 cal->setLocalTime(); 2314 cal->setLocalTime();
2315 else 2315 else
2316 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId); 2316 cal->setTimeZoneId(KOPrefs::instance()->mTimeZoneId);
2317 Incidence *incidence = delSel.first(); 2317 Incidence *incidence = delSel.first();
2318 bool addText = false; 2318 bool addText = false;
2319 if ( delSel.count() < 10 ) 2319 if ( delSel.count() < 10 )
2320 addText = true; 2320 addText = true;
2321 else { 2321 else {
2322 description.sprintf(i18n(" %d items?"),delSel.count() ); 2322 description.sprintf(i18n(" %d items?"),delSel.count() );
2323 } 2323 }
2324 while ( incidence ) { 2324 while ( incidence ) {
2325 Incidence *in = incidence->clone(); 2325 Incidence *in = incidence->clone();
2326 if ( ! in->summary().isEmpty() ) {
2327 in->setDescription("");
2328 } else {
2329 in->setSummary( in->description().left(20));
2330 in->setDescription("");
2331 }
2326 if ( addText ) 2332 if ( addText )
2327 description += in->summary() + "\n"; 2333 description += in->summary() + "\n";
2328 cal->addIncidence( in ); 2334 cal->addIncidence( in );
2329 incidence = delSel.next(); 2335 incidence = delSel.next();
2330 } 2336 }
2331 if ( beamDialog->beamVcal() ) { 2337 if ( beamDialog->beamVcal() ) {
2332 fn += ".vcs"; 2338 fn += ".vcs";
2333 FileStorage storage( cal, fn, new VCalFormat ); 2339 FileStorage storage( cal, fn, new VCalFormat );
2334 storage.save(); 2340 storage.save();
2335 } else { 2341 } else {
2336 fn += ".ics"; 2342 fn += ".ics";
2337 FileStorage storage( cal, fn, new ICalFormat( ) ); 2343 FileStorage storage( cal, fn, new ICalFormat( ) );
2338 storage.save(); 2344 storage.save();
2339 } 2345 }
2340 delete cal; 2346 delete cal;
2341 mes = i18n("KO/Pi: Ready for beaming"); 2347 mes = i18n("KO/Pi: Ready for beaming");
2342 setCaption(mes); 2348 topLevelWidget()->setCaption(mes);
2343 2349 KApplication::convert2latin1( fn );
2344#ifndef DESKTOP_VERSION 2350#ifndef DESKTOP_VERSION
2345 Ir *ir = new Ir( this ); 2351 Ir *ir = new Ir( this );
2346 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) ); 2352 connect( ir, SIGNAL( done( Ir * ) ), this, SLOT( beamDone( Ir * ) ) );
2347 ir->send( fn, description, "text/x-vCalendar" ); 2353 ir->send( fn, description, "text/x-vCalendar" );
2348#endif 2354#endif
2349 } 2355 }
2350} 2356}
2351void CalendarView::beamDone( Ir *ir ) 2357void CalendarView::beamDone( Ir *ir )
2352{ 2358{
2353#ifndef DESKTOP_VERSION 2359#ifndef DESKTOP_VERSION
2354 delete ir; 2360 delete ir;
2355#endif 2361#endif
2362 topLevelWidget()->setCaption( i18n("KO/Pi: Beaming done.") );
2363 topLevelWidget()->raise();
2356} 2364}
2357 2365
2358void CalendarView::moveIncidence(Incidence * inc ) 2366void CalendarView::moveIncidence(Incidence * inc )
2359{ 2367{
2360 if ( !inc ) return; 2368 if ( !inc ) return;
2361 // qDebug("showDatePickerForIncidence( ) "); 2369 // qDebug("showDatePickerForIncidence( ) ");
2362 if ( mDateFrame->isVisible() ) 2370 if ( mDateFrame->isVisible() )
2363 mDateFrame->hide(); 2371 mDateFrame->hide();
2364 else { 2372 else {
2365 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ; 2373 int w =mDatePicker->sizeHint().width()+2*mDateFrame->lineWidth() ;
2366 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ; 2374 int h = mDatePicker->sizeHint().height()+2*mDateFrame->lineWidth() ;
2367 int dw = QApplication::desktop()->width(); 2375 int dw = QApplication::desktop()->width();
2368 int dh = QApplication::desktop()->height(); 2376 int dh = QApplication::desktop()->height();
2369 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2377 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2370 mDateFrame->show(); 2378 mDateFrame->show();
2371 } 2379 }
2372 mDatePickerMode = 2; 2380 mDatePickerMode = 2;
2373 mMoveIncidence = inc ; 2381 mMoveIncidence = inc ;
2374 QDate da; 2382 QDate da;
2375 if ( mMoveIncidence->type() == "Todo" ) { 2383 if ( mMoveIncidence->type() == "Todo" ) {
2376 Todo * to = (Todo *) mMoveIncidence; 2384 Todo * to = (Todo *) mMoveIncidence;
2377 if ( to->hasDueDate() ) 2385 if ( to->hasDueDate() )
2378 da = to->dtDue().date(); 2386 da = to->dtDue().date();
2379 else 2387 else
2380 da = QDate::currentDate(); 2388 da = QDate::currentDate();
2381 } else { 2389 } else {
2382 da = mMoveIncidence->dtStart().date(); 2390 da = mMoveIncidence->dtStart().date();
2383 } 2391 }
2384 mDatePicker->setDate( da ); 2392 mDatePicker->setDate( da );
2385} 2393}
2386void CalendarView::showDatePicker( ) 2394void CalendarView::showDatePicker( )
2387{ 2395{
2388 //qDebug("CalendarView::showDatePicker( ) "); 2396 //qDebug("CalendarView::showDatePicker( ) ");
2389 if ( mDateFrame->isVisible() ) 2397 if ( mDateFrame->isVisible() )
2390 mDateFrame->hide(); 2398 mDateFrame->hide();
2391 else { 2399 else {
2392 int w =mDatePicker->sizeHint().width() ; 2400 int w =mDatePicker->sizeHint().width() ;
2393 int h = mDatePicker->sizeHint().height() ; 2401 int h = mDatePicker->sizeHint().height() ;
2394 int dw = QApplication::desktop()->width(); 2402 int dw = QApplication::desktop()->width();
2395 int dh = QApplication::desktop()->height(); 2403 int dh = QApplication::desktop()->height();
2396 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h ); 2404 mDateFrame->setGeometry( (dw-w)/2, (dh - h )/2 ,w,h );
2397 mDateFrame->show(); 2405 mDateFrame->show();
2398 } 2406 }
2399 mDatePickerMode = 1; 2407 mDatePickerMode = 1;
2400 mDatePicker->setDate( mNavigator->selectedDates().first() ); 2408 mDatePicker->setDate( mNavigator->selectedDates().first() );
2401} 2409}
2402 2410
2403void CalendarView::showEventEditor() 2411void CalendarView::showEventEditor()
2404{ 2412{
2405#ifdef DESKTOP_VERSION 2413#ifdef DESKTOP_VERSION
2406 mEventEditor->show(); 2414 mEventEditor->show();
2407#else 2415#else
2408 mEventEditor->showMaximized(); 2416 mEventEditor->showMaximized();
2409#endif 2417#endif
2410} 2418}
2411void CalendarView::showTodoEditor() 2419void CalendarView::showTodoEditor()
2412{ 2420{
2413#ifdef DESKTOP_VERSION 2421#ifdef DESKTOP_VERSION
2414 mTodoEditor->show(); 2422 mTodoEditor->show();
2415#else 2423#else
2416 mTodoEditor->showMaximized(); 2424 mTodoEditor->showMaximized();
2417#endif 2425#endif
2418} 2426}
2419 2427
2420void CalendarView::cloneIncidence() 2428void CalendarView::cloneIncidence()
2421{ 2429{
2422 Incidence *incidence = currentSelection(); 2430 Incidence *incidence = currentSelection();
2423 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2431 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2424 if ( incidence ) { 2432 if ( incidence ) {
2425 cloneIncidence(incidence); 2433 cloneIncidence(incidence);
2426 } 2434 }
2427} 2435}
2428void CalendarView::moveIncidence() 2436void CalendarView::moveIncidence()
2429{ 2437{
2430 Incidence *incidence = currentSelection(); 2438 Incidence *incidence = currentSelection();
2431 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2439 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2432 if ( incidence ) { 2440 if ( incidence ) {
2433 moveIncidence(incidence); 2441 moveIncidence(incidence);
2434 } 2442 }
2435} 2443}
2436void CalendarView::beamIncidence() 2444void CalendarView::beamIncidence()
2437{ 2445{
2438 Incidence *incidence = currentSelection(); 2446 Incidence *incidence = currentSelection();
2439 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2447 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2440 if ( incidence ) { 2448 if ( incidence ) {
2441 beamIncidence(incidence); 2449 beamIncidence(incidence);
2442 } 2450 }
2443} 2451}
2444void CalendarView::toggleCancelIncidence() 2452void CalendarView::toggleCancelIncidence()
2445{ 2453{
2446 Incidence *incidence = currentSelection(); 2454 Incidence *incidence = currentSelection();
2447 if ( !incidence ) incidence = mTodoList->selectedIncidences().first(); 2455 if ( !incidence ) incidence = mTodoList->selectedIncidences().first();
2448 if ( incidence ) { 2456 if ( incidence ) {
2449 cancelIncidence(incidence); 2457 cancelIncidence(incidence);
2450 } 2458 }
2451} 2459}
2452 2460
2453 2461
2454void CalendarView::cancelIncidence(Incidence * inc ) 2462void CalendarView::cancelIncidence(Incidence * inc )
2455{ 2463{
2456 inc->setCancelled( ! inc->cancelled() ); 2464 inc->setCancelled( ! inc->cancelled() );
2457 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED ); 2465 changeIncidenceDisplay( inc,KOGlobals::EVENTEDITED );
2458 updateView(); 2466 updateView();
2459} 2467}
2460void CalendarView::cloneIncidence(Incidence * orgInc ) 2468void CalendarView::cloneIncidence(Incidence * orgInc )
2461{ 2469{
2462 Incidence * newInc = orgInc->clone(); 2470 Incidence * newInc = orgInc->clone();
2463 newInc->recreate(); 2471 newInc->recreate();
2464 2472
2465 if ( newInc->type() == "Todo" ) { 2473 if ( newInc->type() == "Todo" ) {
2466 Todo* t = (Todo*) newInc; 2474 Todo* t = (Todo*) newInc;
2467 mTodoEditor->editTodo( t ); 2475 mTodoEditor->editTodo( t );
2468 showTodoEditor(); 2476 showTodoEditor();
2469 if ( mTodoEditor->exec() ) { 2477 if ( mTodoEditor->exec() ) {
2470 mCalendar->addTodo( t ); 2478 mCalendar->addTodo( t );
2471 updateView(); 2479 updateView();
2472 } else { 2480 } else {
2473 delete t; 2481 delete t;
2474 } 2482 }
2475 } 2483 }
2476 else { 2484 else {
2477 Event* e = (Event*) newInc; 2485 Event* e = (Event*) newInc;
2478 mEventEditor->editEvent( e ); 2486 mEventEditor->editEvent( e );
2479 showEventEditor(); 2487 showEventEditor();
2480 if ( mEventEditor->exec() ) { 2488 if ( mEventEditor->exec() ) {
2481 mCalendar->addEvent( e ); 2489 mCalendar->addEvent( e );
2482 updateView(); 2490 updateView();
2483 } else { 2491 } else {
2484 delete e; 2492 delete e;
2485 } 2493 }
2486 } 2494 }
2487} 2495}
2488 2496
2489void CalendarView::newEvent() 2497void CalendarView::newEvent()
2490{ 2498{
2491 // TODO: Replace this code by a common eventDurationHint of KOBaseView. 2499 // TODO: Replace this code by a common eventDurationHint of KOBaseView.
2492 KOAgendaView *aView = mViewManager->agendaView(); 2500 KOAgendaView *aView = mViewManager->agendaView();
2493 if (aView) { 2501 if (aView) {
2494 if (aView->selectionStart().isValid()) { 2502 if (aView->selectionStart().isValid()) {
2495 if (aView->selectedIsAllDay()) { 2503 if (aView->selectedIsAllDay()) {
2496 newEvent(aView->selectionStart(),aView->selectionEnd(),true); 2504 newEvent(aView->selectionStart(),aView->selectionEnd(),true);
2497 } else { 2505 } else {
2498 newEvent(aView->selectionStart(),aView->selectionEnd()); 2506 newEvent(aView->selectionStart(),aView->selectionEnd());
2499 } 2507 }
2500 return; 2508 return;
2501 } 2509 }
2502 } 2510 }
2503 2511
2504 QDate date = mNavigator->selectedDates().first(); 2512 QDate date = mNavigator->selectedDates().first();
2505 QDateTime current = QDateTime::currentDateTime(); 2513 QDateTime current = QDateTime::currentDateTime();
2506 if ( date <= current.date() ) { 2514 if ( date <= current.date() ) {
2507 int hour = current.time().hour() +1; 2515 int hour = current.time().hour() +1;
2508 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ), 2516 newEvent( QDateTime( current.date(), QTime( hour, 0, 0 ) ),
2509 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2517 QDateTime( current.date(), QTime( hour+ KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2510 } else 2518 } else
2511 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ), 2519 newEvent( QDateTime( date, QTime( KOPrefs::instance()->mStartTime, 0, 0 ) ),
2512 QDateTime( date, QTime( KOPrefs::instance()->mStartTime + 2520 QDateTime( date, QTime( KOPrefs::instance()->mStartTime +
2513 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) ); 2521 KOPrefs::instance()->mDefaultDuration, 0, 0 ) ) );
2514} 2522}
2515 2523
2516void CalendarView::newEvent(QDateTime fh) 2524void CalendarView::newEvent(QDateTime fh)
2517{ 2525{
2518 newEvent(fh, 2526 newEvent(fh,
2519 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration))); 2527 QDateTime(fh.addSecs(3600*KOPrefs::instance()->mDefaultDuration)));
2520} 2528}
2521 2529
2522void CalendarView::newEvent(QDate dt) 2530void CalendarView::newEvent(QDate dt)
2523{ 2531{
2524 newEvent(QDateTime(dt, QTime(0,0,0)), 2532 newEvent(QDateTime(dt, QTime(0,0,0)),
2525 QDateTime(dt, QTime(0,0,0)), true); 2533 QDateTime(dt, QTime(0,0,0)), true);
2526} 2534}
2527 2535
2528void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay) 2536void CalendarView::newEvent(QDateTime fromHint, QDateTime toHint, bool allDay)
2529{ 2537{
2530 2538
2531 mEventEditor->newEvent(fromHint,toHint,allDay); 2539 mEventEditor->newEvent(fromHint,toHint,allDay);
2532 if ( mFilterView->filtersEnabled() ) { 2540 if ( mFilterView->filtersEnabled() ) {
2533 CalFilter *filter = mFilterView->selectedFilter(); 2541 CalFilter *filter = mFilterView->selectedFilter();
2534 if (filter && filter->showCategories()) { 2542 if (filter && filter->showCategories()) {
2535 mEventEditor->setCategories(filter->categoryList().join(",") ); 2543 mEventEditor->setCategories(filter->categoryList().join(",") );
2536 } 2544 }
2537 if ( filter ) 2545 if ( filter )
2538 mEventEditor->setSecrecy( filter->getSecrecy() ); 2546 mEventEditor->setSecrecy( filter->getSecrecy() );
2539 } 2547 }
2540 showEventEditor(); 2548 showEventEditor();
2541} 2549}
2542void CalendarView::todoAdded(Todo * t) 2550void CalendarView::todoAdded(Todo * t)
2543{ 2551{
2544 2552
2545 changeTodoDisplay ( t ,KOGlobals::EVENTADDED); 2553 changeTodoDisplay ( t ,KOGlobals::EVENTADDED);
2546 updateTodoViews(); 2554 updateTodoViews();
2547} 2555}
2548void CalendarView::todoChanged(Todo * t) 2556void CalendarView::todoChanged(Todo * t)
2549{ 2557{
2550 emit todoModified( t, 4 ); 2558 emit todoModified( t, 4 );
2551 // updateTodoViews(); 2559 // updateTodoViews();
2552} 2560}
2553void CalendarView::todoToBeDeleted(Todo *) 2561void CalendarView::todoToBeDeleted(Todo *)
2554{ 2562{
2555 //qDebug("todoToBeDeleted(Todo *) "); 2563 //qDebug("todoToBeDeleted(Todo *) ");
2556 updateTodoViews(); 2564 updateTodoViews();
2557} 2565}
2558void CalendarView::todoDeleted() 2566void CalendarView::todoDeleted()
2559{ 2567{
2560 //qDebug(" todoDeleted()"); 2568 //qDebug(" todoDeleted()");
2561 updateTodoViews(); 2569 updateTodoViews();
2562} 2570}
2563 2571
2564 2572
2565 2573
2566void CalendarView::newTodo() 2574void CalendarView::newTodo()
2567{ 2575{
2568 2576
2569 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true); 2577 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),0,true);
2570 if ( mFilterView->filtersEnabled() ) { 2578 if ( mFilterView->filtersEnabled() ) {
2571 CalFilter *filter = mFilterView->selectedFilter(); 2579 CalFilter *filter = mFilterView->selectedFilter();
2572 if (filter && filter->showCategories()) { 2580 if (filter && filter->showCategories()) {
2573 mTodoEditor->setCategories(filter->categoryList().join(",") ); 2581 mTodoEditor->setCategories(filter->categoryList().join(",") );
2574 } 2582 }
2575 if ( filter ) 2583 if ( filter )
2576 mTodoEditor->setSecrecy( filter->getSecrecy() ); 2584 mTodoEditor->setSecrecy( filter->getSecrecy() );
2577 } 2585 }
2578 showTodoEditor(); 2586 showTodoEditor();
2579} 2587}
2580 2588
2581void CalendarView::newSubTodo() 2589void CalendarView::newSubTodo()
2582{ 2590{
2583 Todo *todo = selectedTodo(); 2591 Todo *todo = selectedTodo();
2584 if ( todo ) newSubTodo( todo ); 2592 if ( todo ) newSubTodo( todo );
2585} 2593}
2586 2594
2587void CalendarView::newSubTodo(Todo *parentEvent) 2595void CalendarView::newSubTodo(Todo *parentEvent)
2588{ 2596{
2589 2597
2590 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true); 2598 mTodoEditor->newTodo(QDateTime::currentDateTime().addDays(7),parentEvent,true);
2591 showTodoEditor(); 2599 showTodoEditor();
2592} 2600}
2593 2601
2594void CalendarView::newFloatingEvent() 2602void CalendarView::newFloatingEvent()
2595{ 2603{
2596 DateList tmpList = mNavigator->selectedDates(); 2604 DateList tmpList = mNavigator->selectedDates();
2597 QDate date = tmpList.first(); 2605 QDate date = tmpList.first();
2598 2606
2599 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ), 2607 newEvent( QDateTime( date, QTime( 12, 0, 0 ) ),
2600 QDateTime( date, QTime( 12, 0, 0 ) ), true ); 2608 QDateTime( date, QTime( 12, 0, 0 ) ), true );
2601} 2609}
2602 2610
2603 2611
2604void CalendarView::editEvent( Event *event ) 2612void CalendarView::editEvent( Event *event )
2605{ 2613{
2606 2614
2607 if ( !event ) return; 2615 if ( !event ) return;
2608 if ( event->isReadOnly() ) { 2616 if ( event->isReadOnly() ) {
2609 showEvent( event ); 2617 showEvent( event );
2610 return; 2618 return;
2611 } 2619 }
diff --git a/microkde/kapplication.cpp b/microkde/kapplication.cpp
index 98ef2f2..56c01af 100644
--- a/microkde/kapplication.cpp
+++ b/microkde/kapplication.cpp
@@ -1,84 +1,106 @@
1#include <stdlib.h> 1#include <stdlib.h>
2#include <stdio.h> 2#include <stdio.h>
3 3
4#include "kapplication.h" 4#include "kapplication.h"
5#include <qapplication.h> 5#include <qapplication.h>
6#include <qstring.h> 6#include <qstring.h>
7#include <qfile.h> 7#include <qfile.h>
8#include <qtextstream.h> 8#include <qtextstream.h>
9#include <qdialog.h> 9#include <qdialog.h>
10#include <qlayout.h> 10#include <qlayout.h>
11#include <qtextbrowser.h> 11#include <qtextbrowser.h>
12 12
13int KApplication::random() 13int KApplication::random()
14{ 14{
15 return rand(); 15 return rand();
16} 16}
17 17
18//US 18//US
19QString KApplication::randomString(int length) 19QString KApplication::randomString(int length)
20{ 20{
21 if (length <=0 ) return QString::null; 21 if (length <=0 ) return QString::null;
22 22
23 QString str; 23 QString str;
24 while (length--) 24 while (length--)
25 { 25 {
26 int r=random() % 62; 26 int r=random() % 62;
27 r+=48; 27 r+=48;
28 if (r>57) r+=7; 28 if (r>57) r+=7;
29 if (r>90) r+=6; 29 if (r>90) r+=6;
30 str += char(r); 30 str += char(r);
31 // so what if I work backwards? 31 // so what if I work backwards?
32 } 32 }
33 return str; 33 return str;
34} 34}
35int KApplication::execDialog( QDialog* d ) 35int KApplication::execDialog( QDialog* d )
36{ 36{
37 if (QApplication::desktop()->width() <= 640 ) 37 if (QApplication::desktop()->width() <= 640 )
38 d->showMaximized(); 38 d->showMaximized();
39 return d->exec(); 39 return d->exec();
40} 40}
41void KApplication::showLicence() 41void KApplication::showLicence()
42{ 42{
43 KApplication::showFile( "KDE-Pim/Pi licence", "kdepim/LICENCE.TXT" ); 43 KApplication::showFile( "KDE-Pim/Pi licence", "kdepim/LICENCE.TXT" );
44} 44}
45 45
46void KApplication::showFile(QString caption, QString fn) 46void KApplication::showFile(QString caption, QString fn)
47{ 47{
48 QString text; 48 QString text;
49 QString fileName; 49 QString fileName;
50#ifndef DESKTOP_VERSION 50#ifndef DESKTOP_VERSION
51 fileName = getenv("QPEDIR"); 51 fileName = getenv("QPEDIR");
52 fileName += "/pics/" + fn ; 52 fileName += "/pics/" + fn ;
53#else 53#else
54 fileName = qApp->applicationDirPath () + "/" + fn; 54 fileName = qApp->applicationDirPath () + "/" + fn;
55#endif 55#endif
56 QFile file( fileName ); 56 QFile file( fileName );
57 if (!file.open( IO_ReadOnly ) ) { 57 if (!file.open( IO_ReadOnly ) ) {
58 return ; 58 return ;
59 } 59 }
60 QTextStream ts( &file ); 60 QTextStream ts( &file );
61 text = ts.read(); 61 text = ts.read();
62 file.close(); 62 file.close();
63 KApplication::showText( caption, text ); 63 KApplication::showText( caption, text );
64 64
65} 65}
66 66
67bool KApplication::convert2latin1(QString fileName)
68{
69 QString text;
70 QFile file( fileName );
71 if (!file.open( IO_ReadOnly ) ) {
72 return false;
73
74 }
75 QTextStream ts( &file );
76 ts.setEncoding( QTextStream::UnicodeUTF8 );
77 text = ts.read();
78 file.close();
79 if (!file.open( IO_WriteOnly ) ) {
80 return false;
81 }
82 QTextStream tsIn( &file );
83 tsIn.setEncoding( QTextStream::Latin1 );
84 tsIn << text.latin1();
85 file.close();
86
87
88}
67void KApplication::showText(QString caption, QString text) 89void KApplication::showText(QString caption, QString text)
68{ 90{
69 QDialog dia( 0, "name", true ); ; 91 QDialog dia( 0, "name", true ); ;
70 dia.setCaption( caption ); 92 dia.setCaption( caption );
71 QVBoxLayout* lay = new QVBoxLayout( &dia ); 93 QVBoxLayout* lay = new QVBoxLayout( &dia );
72 lay->setSpacing( 3 ); 94 lay->setSpacing( 3 );
73 lay->setMargin( 3 ); 95 lay->setMargin( 3 );
74 QTextBrowser tb ( &dia ); 96 QTextBrowser tb ( &dia );
75 lay->addWidget( &tb ); 97 lay->addWidget( &tb );
76 tb.setText( text ); 98 tb.setText( text );
77#ifdef DESKTOP_VERSION 99#ifdef DESKTOP_VERSION
78 dia.resize( 640, 480); 100 dia.resize( 640, 480);
79#else 101#else
80 dia.showMaximized(); 102 dia.showMaximized();
81#endif 103#endif
82 dia.exec(); 104 dia.exec();
83 105
84} 106}
diff --git a/microkde/kapplication.h b/microkde/kapplication.h
index 79cdb33..41546a0 100644
--- a/microkde/kapplication.h
+++ b/microkde/kapplication.h
@@ -1,26 +1,27 @@
1#ifndef MINIKDE_KAPPLICATION_H 1#ifndef MINIKDE_KAPPLICATION_H
2#define MINIKDE_KAPPLICATION_H 2#define MINIKDE_KAPPLICATION_H
3 3
4#include "qstring.h" 4#include "qstring.h"
5#include <qdialog.h> 5#include <qdialog.h>
6 6
7class KApplication 7class KApplication
8{ 8{
9 public: 9 public:
10 static int random(); 10 static int random();
11 11
12//US 12//US
13 /** 13 /**
14 * Generates a random string. It operates in the range [A-Za-z0-9] 14 * Generates a random string. It operates in the range [A-Za-z0-9]
15 * @param length Generate a string of this length. 15 * @param length Generate a string of this length.
16 * @return the random string 16 * @return the random string
17 */ 17 */
18 static QString randomString(int length); 18 static QString randomString(int length);
19 static int execDialog( QDialog* ); 19 static int execDialog( QDialog* );
20 static void showLicence(); 20 static void showLicence();
21 static void showFile(QString caption, QString file); 21 static void showFile(QString caption, QString file);
22 static void showText(QString caption, QString text); 22 static void showText(QString caption, QString text);
23 static bool convert2latin1(QString file);
23}; 24};
24 25
25 26
26#endif 27#endif