5 A Linux/Unix GUI for Nokia mobile phones.
7 Released under the terms of the GNU GPL, see file COPYING for more details.
15 #include "xgnokii_common.h"
17 #include "xgnokii_lowlevel.h"
18 #include "xgnokii_calendar.h"
19 #include "xpm/Read.xpm"
20 #include "xpm/Send.xpm"
21 #include "xpm/Open.xpm"
22 #include "xpm/Save.xpm"
23 #include "xpm/Edit.xpm"
24 #include "xpm/Delete.xpm"
25 #include "xpm/SendSMS.xpm"
26 #include "xpm/NewBD.xpm"
27 #include "xpm/NewCall.xpm"
28 #include "xpm/NewMeet.xpm"
29 #include "xpm/NewRem.xpm"
30 #include "xpm/quest.xpm"
35 GtkWidget *notesClist;
63 GtkWidget *alarmCheck;
71 GtkWidget *alarmCheck;
88 static GtkWidget *GUI_CalendarWindow;
89 static ErrorDialog errorDialog = {NULL, NULL};
90 static CalendarWidget cal = {NULL, NULL};
91 static QuestMark questMark;
92 static AddDialogData addReminderDialogData;
93 static AddDialogData2 addCallDialogData;
94 static AddDialogData2 addMeetingDialogData;
95 static AddDialogData addBirthdayDialogData;
96 static CalendarDialog calendarDialog = {NULL, NULL};
97 static CalTimeDialog calTimeDialog = {NULL, NULL};
99 static inline void Help1 (GtkWidget *w, gpointer data)
101 gchar *indx = g_strdup_printf ("/help/%s/windows/calendar/index.html", xgnokiiConfig.locale);
107 static inline void CloseCalendar (GtkWidget *w, gpointer data)
109 gtk_widget_hide (GUI_CalendarWindow);
113 inline void GUI_ShowCalendar ()
115 if (GetModelFeature(FN_CALENDAR)!=0)
116 gtk_widget_show (GUI_CalendarWindow);
120 static gint InsertCalendarEntry (GSM_CalendarNote *note)
124 row[0] = g_strdup_printf ("%d", note->Location);
129 row[1] = _("Reminder");
130 row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
131 note->Time.Month, note->Time.Year);
137 row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day,
138 note->Time.Month, note->Time.Year,
139 note->Time.Hour, note->Time.Minute);
140 row[5] = note->Phone;
144 row[1] = _("Meeting");
145 row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day,
146 note->Time.Month, note->Time.Year,
147 note->Time.Hour, note->Time.Minute);
152 row[1] = _("Birthday");
153 row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
154 note->Time.Month, note->Time.Year);
159 row[1] = _("Unknown");
166 if (note->Alarm.Year == 0)
169 row[4] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Alarm.Day,
170 note->Alarm.Month, note->Alarm.Year,
171 note->Alarm.Hour, note->Alarm.Minute);
173 gtk_clist_freeze (GTK_CLIST (cal.notesClist));
174 gtk_clist_append (GTK_CLIST (cal.notesClist), row);
175 gtk_clist_sort (GTK_CLIST (cal.notesClist));
176 gtk_clist_thaw (GTK_CLIST (cal.notesClist));
186 static void ClickEntry (GtkWidget *clist,
189 GdkEventButton *event,
194 gtk_text_freeze (GTK_TEXT (cal.noteText));
196 gtk_text_set_point (GTK_TEXT (cal.noteText), 0);
197 gtk_text_forward_delete (GTK_TEXT (cal.noteText), gtk_text_get_length (GTK_TEXT (cal.noteText)));
199 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
201 gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
202 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
204 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
207 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
209 gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf);
210 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
212 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
215 gtk_calendar_select_month (GTK_CALENDAR (cal.calendar),
216 atoi (buf + 3) - 1, atoi (buf + 6));
217 gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), atoi (buf));
219 gtk_clist_get_text (GTK_CLIST (clist), row, 4, &buf);
222 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
225 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
227 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
231 gtk_clist_get_text (GTK_CLIST (clist), row, 5, &buf);
234 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
237 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
239 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
243 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
245 gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf);
246 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
249 gtk_text_thaw (GTK_TEXT (cal.noteText));
252 static inline gint ReadCalendarFailed (gint i)
258 static void ReadCalNotes (void)
261 D_CalendarNoteAll *cna;
263 gtk_clist_clear (GTK_CLIST (cal.notesClist));
265 cna = (D_CalendarNoteAll *) g_malloc (sizeof (D_CalendarNoteAll));
266 cna->InsertEntry = InsertCalendarEntry;
267 cna->ReadFailed = ReadCalendarFailed;
269 e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
270 e->event = Event_GetCalendarNoteAll;
276 static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
281 GtkCListRow *row1 = (GtkCListRow *) ptr1;
282 GtkCListRow *row2 = (GtkCListRow *) ptr2;
284 switch (row1->cell[clist->sort_column].type)
287 text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
289 case GTK_CELL_PIXTEXT:
290 text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
295 switch (row2->cell[clist->sort_column].type)
298 text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
300 case GTK_CELL_PIXTEXT:
301 text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
308 return (text1 != NULL);
314 return (*text1 != '\0');
319 if (clist->sort_column == 0)
321 gint n1 = atoi (text1);
322 gint n2 = atoi (text2);
332 if (clist->sort_column == 2 || clist->sort_column == 4)
334 GDate *date1, *date2;
338 date1 = g_date_new_dmy (atoi (text1), atoi (text1 + 3), atoi (text1 + 6));
339 date2 = g_date_new_dmy (atoi (text2), atoi (text2 + 3), atoi (text2 + 6));
341 ret = g_date_compare (date1, date2);
349 if (strlen (text1) > 10)
350 time1 = atoi (text1 + 11) * 60 + atoi (text1 + 14);
354 if (strlen (text2) > 10)
355 time2 = atoi (text2 + 11) * 60 + atoi (text2 + 14);
361 else if (time1 < time2)
370 if (strlen (text1) > 10)
372 bdTime.tm_min = atoi (text1 + 14);
373 bdTime.tm_hour = atoi (text1 + 11);
376 bdTime.tm_min = bdTime.tm_hour = 0;
377 bdTime.tm_mday = atoi (text1);
378 bdTime.tm_mon = atoi (text1 + 3);
379 bdTime.tm_year = atoi (text1 + 6) - 1900;
380 bdTime.tm_isdst = -1;
382 time1 = mktime (&bdTime);
385 if (strlen (text2) > 10)
387 bdTime.tm_min = atoi (text2 + 14);
388 bdTime.tm_hour = atoi (text2 + 11);
391 bdTime.tm_min = bdTime.tm_hour = 0;
392 bdTime.tm_mday = atoi (text2);
393 bdTime.tm_mon = atoi (text2 + 3);
394 bdTime.tm_year = atoi (text2 + 6) - 1900;
395 bdTime.tm_isdst = -1;
397 time2 = mktime (&bdTime);
399 g_print ("Cas1: %s - %d, Cas2: %s - %d\n", text1, time1, text2, time2);
403 else if (time1 < time2)
409 return (g_strcasecmp (text1, text2));
413 static gint ReverseSelection (gconstpointer a, gconstpointer b)
417 gint row1 = GPOINTER_TO_INT (a);
418 gint row2 = GPOINTER_TO_INT (b);
420 gtk_clist_get_text (GTK_CLIST (cal.notesClist), row1, 0, &buf1);
421 gtk_clist_get_text (GTK_CLIST (cal.notesClist), row2, 0, &buf2);
423 index1 = atoi (buf1);
424 index2 = atoi (buf2);
428 else if (index1 > index2)
435 static gint AddCalendarNote(GSM_CalendarNote *cnote)
438 PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
439 D_CalendarNote *dnote = (D_CalendarNote *)g_malloc(sizeof(D_CalendarNote));
441 dnote->entry = cnote;
442 e->event = Event_WriteCalendarNote;
445 pthread_mutex_lock (&calendarMutex);
446 pthread_cond_wait (&calendarCond, &calendarMutex);
447 pthread_mutex_unlock (&calendarMutex);
450 g_print ("Saving calendar note\n");
453 error = dnote->status;
456 if (error != GE_NONE)
458 gchar *buf = g_strdup_printf (_("Saving failed failed\n(error=%d)"), error);
459 gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
460 gtk_widget_show (errorDialog.dialog);
464 g_print ("Note saved\n");
469 static void OkAddReminderDialog (GtkWidget *widget, gpointer data)
471 GSM_CalendarNote note;
473 note.Type = GCN_REMINDER;
475 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
476 note.Time.Year = ((AddDialogData *)data)->date.year;
477 note.Time.Month = ((AddDialogData *)data)->date.month;
478 note.Time.Day = ((AddDialogData *)data)->date.day;
479 note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
480 if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
481 note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
482 note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
483 note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
484 note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
485 note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
486 note.Alarm.Second = note.Alarm.Timezone = 0;
490 AddCalendarNote(¬e);
491 gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), "");
492 gtk_widget_hide (((AddDialogData *)data)->dialog);
495 static void OkAddCallDialog (GtkWidget *widget, gpointer data)
497 GSM_CalendarNote note;
499 note.Type = GCN_CALL;
501 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20);
502 note.Time.Year = ((AddDialogData2 *)data)->date.date.year;
503 note.Time.Month = ((AddDialogData2 *)data)->date.date.month;
504 note.Time.Day = ((AddDialogData2 *)data)->date.date.day;
505 note.Time.Hour = ((AddDialogData2 *)data)->date.hours;
506 note.Time.Minute = ((AddDialogData2 *)data)->date.minutes;
507 note.Time.Second = note.Time.Timezone = 0;
508 if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) {
509 note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year;
510 note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month;
511 note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day;
512 note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours;
513 note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes;
514 note.Alarm.Second = note.Alarm.Timezone = 0;
518 AddCalendarNote(¬e);
519 gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), "");
520 gtk_widget_hide (((AddDialogData2 *)data)->dialog);
523 static void OkAddMeetingDialog (GtkWidget *widget, gpointer data)
525 GSM_CalendarNote note;
527 note.Type = GCN_MEETING;
529 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20);
530 note.Time.Year = ((AddDialogData2 *)data)->date.date.year;
531 note.Time.Month = ((AddDialogData2 *)data)->date.date.month;
532 note.Time.Day = ((AddDialogData2 *)data)->date.date.day;
533 note.Time.Hour = ((AddDialogData2 *)data)->date.hours;
534 note.Time.Minute = ((AddDialogData2 *)data)->date.minutes;
535 note.Time.Second = note.Time.Timezone = 0;
536 if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) {
537 note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year;
538 note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month;
539 note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day;
540 note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours;
541 note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes;
542 note.Alarm.Second = note.Alarm.Timezone = 0;
546 AddCalendarNote(¬e);
547 gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), "");
548 gtk_widget_hide (((AddDialogData2 *)data)->dialog);
551 static void OkAddBdayDialog (GtkWidget *widget, gpointer data)
553 GSM_CalendarNote note;
555 note.Type = GCN_BIRTHDAY;
557 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
558 note.Time.Year = ((AddDialogData *)data)->date.year;
559 note.Time.Month = ((AddDialogData *)data)->date.month;
560 note.Time.Day = ((AddDialogData *)data)->date.day;
561 note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
562 if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
563 note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
564 note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
565 note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
566 note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
567 note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
568 note.Alarm.Second = note.Alarm.Timezone = 0;
572 AddCalendarNote(¬e);
573 gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), "");
574 gtk_widget_hide (((AddDialogData *)data)->dialog);
578 static inline void SetDateButton (Date *date)
580 gchar *buf = g_strdup_printf ("%d-%02d-%02d", date->year,
581 date->month, date->day);
582 gtk_label_set_text (GTK_LABEL (date->button), buf);
587 static inline void SetDateTimeButton (DateTime *date)
589 gchar *buf = g_strdup_printf ("%d-%02d-%02d %02d:%02d", date->date.year,
590 date->date.month, date->date.day,
591 date->hours, date->minutes);
592 gtk_label_set_text (GTK_LABEL (date->button), buf);
597 static void OkCalendarDialog (GtkWidget *widget, Date *date)
599 gtk_calendar_get_date (GTK_CALENDAR (calendarDialog.cal), &(date->year),
600 &(date->month), &(date->day));
603 SetDateButton (date);
605 gtk_widget_hide (calendarDialog.dialog);
609 static void OkCalTimeDialog (GtkWidget *widget, DateTime *date)
611 gtk_calendar_get_date (GTK_CALENDAR (calTimeDialog.cal), &(date->date.year),
612 &(date->date.month), &(date->date.day));
613 date->date.month += 1;
615 date->hours = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->hButton));
616 date->minutes = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->mButton));
618 SetDateTimeButton (date);
620 gtk_widget_hide (calTimeDialog.dialog);
624 static void ShowCalendar (GtkWidget *widget, Date *date)
628 if (calendarDialog.dialog == NULL)
630 calendarDialog.dialog = gtk_dialog_new ();
631 gtk_window_set_title (GTK_WINDOW (calendarDialog.dialog), _("Choose date"));
632 gtk_window_position (GTK_WINDOW (calendarDialog.dialog), GTK_WIN_POS_MOUSE);
633 gtk_window_set_modal(GTK_WINDOW (calendarDialog.dialog), TRUE);
634 gtk_container_set_border_width (GTK_CONTAINER (calendarDialog.dialog), 10);
635 gtk_signal_connect (GTK_OBJECT (calendarDialog.dialog), "delete_event",
636 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
638 button = gtk_button_new_with_label (_("Ok"));
639 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area),
640 button, TRUE, TRUE, 10);
641 gtk_signal_connect (GTK_OBJECT (button), "clicked",
642 GTK_SIGNAL_FUNC (OkCalendarDialog), (gpointer) date);
643 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
644 gtk_widget_grab_default (button);
645 gtk_widget_show (button);
647 button = gtk_button_new_with_label (_("Cancel"));
648 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area),
649 button, TRUE, TRUE, 10);
650 gtk_signal_connect (GTK_OBJECT (button), "clicked",
651 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calendarDialog.dialog);
652 gtk_widget_show (button);
654 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), 5);
656 calendarDialog.cal = gtk_calendar_new ();
658 gtk_calendar_select_month (GTK_CALENDAR (calendarDialog.cal), date->month - 1, date->year);
659 gtk_calendar_select_day (GTK_CALENDAR (calendarDialog.cal), date->day);
661 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), calendarDialog.cal);
662 gtk_widget_show (calendarDialog.cal);
665 gtk_widget_show (calendarDialog.dialog);
669 static void ShowCalTime (GtkWidget *widget, DateTime *date)
671 GtkWidget *button, *hbox, *label;
674 if (calTimeDialog.dialog == NULL)
676 calTimeDialog.dialog = gtk_dialog_new ();
677 gtk_window_set_title (GTK_WINDOW (calTimeDialog.dialog), _("Choose date"));
678 gtk_window_position (GTK_WINDOW (calTimeDialog.dialog), GTK_WIN_POS_MOUSE);
679 gtk_window_set_modal(GTK_WINDOW (calTimeDialog.dialog), TRUE);
680 gtk_container_set_border_width (GTK_CONTAINER (calTimeDialog.dialog), 10);
681 gtk_signal_connect (GTK_OBJECT (calTimeDialog.dialog), "delete_event",
682 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
684 button = gtk_button_new_with_label (_("Ok"));
685 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area),
686 button, TRUE, TRUE, 10);
687 gtk_signal_connect (GTK_OBJECT (button), "clicked",
688 GTK_SIGNAL_FUNC (OkCalTimeDialog), (gpointer) date);
689 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
690 gtk_widget_grab_default (button);
691 gtk_widget_show (button);
693 button = gtk_button_new_with_label (_("Cancel"));
694 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area),
695 button, TRUE, TRUE, 10);
696 gtk_signal_connect (GTK_OBJECT (button), "clicked",
697 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calTimeDialog.dialog);
698 gtk_widget_show (button);
700 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), 5);
702 calTimeDialog.cal = gtk_calendar_new ();
704 gtk_calendar_select_month (GTK_CALENDAR (calTimeDialog.cal), date->date.month - 1, date->date.year);
705 gtk_calendar_select_day (GTK_CALENDAR (calTimeDialog.cal), date->date.day);
707 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), calTimeDialog.cal);
708 gtk_widget_show (calTimeDialog.cal);
710 hbox = gtk_hbox_new (FALSE, 0);
711 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), hbox);
712 gtk_widget_show (hbox);
714 label = gtk_label_new (_("Alarm time:"));
715 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
716 gtk_widget_show (label);
718 adj = (GtkAdjustment *) gtk_adjustment_new (date->hours,
719 0.0, 23.0, 1.0, 4.0, 0.0);
720 date->hButton = gtk_spin_button_new (adj, 0, 0);
721 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->hButton), TRUE);
722 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->hButton), TRUE);
723 gtk_box_pack_start (GTK_BOX (hbox), date->hButton, FALSE, FALSE, 0);
724 gtk_widget_show (date->hButton);
726 label = gtk_label_new (":");
727 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
728 gtk_widget_show (label);
730 adj = (GtkAdjustment *) gtk_adjustment_new (date->minutes,
731 0.0, 59.0, 1.0, 10.0, 0.0);
732 date->mButton = gtk_spin_button_new (adj, 0, 0);
733 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->mButton), TRUE);
734 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->mButton), TRUE);
735 gtk_box_pack_start (GTK_BOX (hbox), date->mButton, FALSE, FALSE, 0);
736 gtk_widget_show (date->mButton);
739 gtk_widget_show (calTimeDialog.dialog);
743 static void AddReminder (void)
745 GtkWidget *button, *hbox, *vbox, *label;
749 if (addReminderDialogData.dialog == NULL)
751 addReminderDialogData.dialog = gtk_dialog_new();
752 gtk_window_set_title (GTK_WINDOW (addReminderDialogData.dialog), _("Add reminder"));
753 gtk_window_position (GTK_WINDOW (addReminderDialogData.dialog), GTK_WIN_POS_MOUSE);
754 gtk_window_set_modal(GTK_WINDOW (addReminderDialogData.dialog), TRUE);
755 gtk_container_set_border_width (GTK_CONTAINER (addReminderDialogData.dialog), 10);
756 gtk_signal_connect (GTK_OBJECT (addReminderDialogData.dialog), "delete_event",
757 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
759 button = gtk_button_new_with_label (_("Ok"));
760 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area),
761 button, TRUE, TRUE, 10);
762 gtk_signal_connect (GTK_OBJECT (button), "clicked",
763 GTK_SIGNAL_FUNC (OkAddReminderDialog), (gpointer) &addReminderDialogData);
764 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
765 gtk_widget_grab_default (button);
766 gtk_widget_show (button);
767 button = gtk_button_new_with_label (_("Cancel"));
768 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area),
769 button, TRUE, TRUE, 10);
770 gtk_signal_connect (GTK_OBJECT (button), "clicked",
771 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addReminderDialogData.dialog);
772 gtk_widget_show (button);
774 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), 5);
776 vbox = gtk_vbox_new (FALSE, 10);
777 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), vbox);
778 gtk_widget_show (vbox);
780 hbox = gtk_hbox_new (FALSE, 0);
781 gtk_container_add (GTK_CONTAINER (vbox), hbox);
782 gtk_widget_show (hbox);
784 label = gtk_label_new (_("Date:"));
785 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
786 gtk_widget_show (label);
791 addReminderDialogData.date.year = addReminderDialogData.alarm.date.year =
793 addReminderDialogData.date.month = addReminderDialogData.alarm.date.month =
795 addReminderDialogData.date.day = addReminderDialogData.alarm.date.day =
798 addReminderDialogData.alarm.hours = tm->tm_hour;
799 addReminderDialogData.alarm.minutes = tm->tm_min;
801 button = gtk_button_new ();
803 addReminderDialogData.date.button = gtk_label_new ("");
805 gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.date.button);
806 SetDateButton (&(addReminderDialogData.date));
808 gtk_widget_show (addReminderDialogData.date.button);
810 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
811 gtk_signal_connect (GTK_OBJECT (button), "clicked",
812 GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addReminderDialogData.date));
813 gtk_widget_show (button);
815 hbox = gtk_hbox_new (FALSE, 0);
816 gtk_container_add (GTK_CONTAINER (vbox), hbox);
817 gtk_widget_show (hbox);
819 label = gtk_label_new (_("Subject:"));
820 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
821 gtk_widget_show (label);
823 addReminderDialogData.text = gtk_entry_new_with_max_length (30);
824 gtk_box_pack_end (GTK_BOX (hbox), addReminderDialogData.text, FALSE, FALSE, 2);
825 gtk_widget_show (addReminderDialogData.text);
827 hbox = gtk_hbox_new (FALSE, 0);
828 gtk_container_add (GTK_CONTAINER (vbox), hbox);
829 gtk_widget_show (hbox);
831 addReminderDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
832 gtk_box_pack_start (GTK_BOX(hbox), addReminderDialogData.alarmCheck, FALSE, FALSE, 2);
833 // gtk_signal_connect (GTK_OBJECT (addReminderDialogData.alarmCheck), "toggled",
834 // GTK_SIGNAL_FUNC (TogleAlarm), &addReminderDialogData);
835 gtk_widget_show (addReminderDialogData.alarmCheck);
837 button = gtk_button_new ();
839 addReminderDialogData.alarm.button = gtk_label_new ("");
841 gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.alarm.button);
842 SetDateTimeButton (&(addReminderDialogData.alarm));
844 gtk_widget_show (addReminderDialogData.alarm.button);
846 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
847 gtk_signal_connect (GTK_OBJECT (button), "clicked",
848 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addReminderDialogData.alarm));
849 gtk_widget_show (button);
852 gtk_widget_show (GTK_WIDGET (addReminderDialogData.dialog));
856 static void AddCall (void)
858 GtkWidget *button, *hbox, *vbox, *label;
862 if (addCallDialogData.dialog == NULL)
864 addCallDialogData.dialog = gtk_dialog_new();
865 gtk_window_set_title (GTK_WINDOW (addCallDialogData.dialog), _("Add Call"));
866 gtk_window_position (GTK_WINDOW (addCallDialogData.dialog), GTK_WIN_POS_MOUSE);
867 gtk_window_set_modal(GTK_WINDOW (addCallDialogData.dialog), TRUE);
868 gtk_container_set_border_width (GTK_CONTAINER (addCallDialogData.dialog), 10);
869 gtk_signal_connect (GTK_OBJECT (addCallDialogData.dialog), "delete_event",
870 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
872 button = gtk_button_new_with_label (_("Ok"));
873 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area),
874 button, TRUE, TRUE, 10);
875 gtk_signal_connect (GTK_OBJECT (button), "clicked",
876 GTK_SIGNAL_FUNC (OkAddCallDialog), (gpointer) &addCallDialogData);
877 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
878 gtk_widget_grab_default (button);
879 gtk_widget_show (button);
880 button = gtk_button_new_with_label (_("Cancel"));
881 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area),
882 button, TRUE, TRUE, 10);
883 gtk_signal_connect (GTK_OBJECT (button), "clicked",
884 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addCallDialogData.dialog);
885 gtk_widget_show (button);
887 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), 5);
889 vbox = gtk_vbox_new (FALSE, 10);
890 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), vbox);
891 gtk_widget_show (vbox);
893 hbox = gtk_hbox_new (FALSE, 0);
894 gtk_container_add (GTK_CONTAINER (vbox), hbox);
895 gtk_widget_show (hbox);
897 label = gtk_label_new (_("Date:"));
898 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
899 gtk_widget_show (label);
904 addCallDialogData.date.date.year = addCallDialogData.alarm.date.year =
906 addCallDialogData.date.date.month = addCallDialogData.alarm.date.month =
908 addCallDialogData.date.date.day = addCallDialogData.alarm.date.day =
911 addCallDialogData.date.hours = addCallDialogData.alarm.hours = tm->tm_hour;
912 addCallDialogData.date.minutes = addCallDialogData.alarm.minutes = tm->tm_min;
914 button = gtk_button_new ();
916 addCallDialogData.date.button = gtk_label_new ("");
918 gtk_container_add (GTK_CONTAINER (button), addCallDialogData.date.button);
919 SetDateTimeButton (&(addCallDialogData.date));
921 gtk_widget_show (addCallDialogData.date.button);
923 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
924 gtk_signal_connect (GTK_OBJECT (button), "clicked",
925 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.date));
926 gtk_widget_show (button);
928 hbox = gtk_hbox_new (FALSE, 0);
929 gtk_container_add (GTK_CONTAINER (vbox), hbox);
930 gtk_widget_show (hbox);
932 label = gtk_label_new (_("Number:"));
933 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
934 gtk_widget_show (label);
936 addCallDialogData.text = gtk_entry_new_with_max_length (30);
937 gtk_box_pack_end (GTK_BOX (hbox), addCallDialogData.text, FALSE, FALSE, 2);
938 gtk_widget_show (addCallDialogData.text);
940 hbox = gtk_hbox_new (FALSE, 0);
941 gtk_container_add (GTK_CONTAINER (vbox), hbox);
942 gtk_widget_show (hbox);
944 addCallDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
945 gtk_box_pack_start (GTK_BOX(hbox), addCallDialogData.alarmCheck, FALSE, FALSE, 2);
947 gtk_widget_show (addCallDialogData.alarmCheck);
949 button = gtk_button_new ();
951 addCallDialogData.alarm.button = gtk_label_new ("");
953 gtk_container_add (GTK_CONTAINER (button), addCallDialogData.alarm.button);
954 SetDateTimeButton (&(addCallDialogData.alarm));
956 gtk_widget_show (addCallDialogData.alarm.button);
958 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
959 gtk_signal_connect (GTK_OBJECT (button), "clicked",
960 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.alarm));
961 gtk_widget_show (button);
964 gtk_widget_show (GTK_WIDGET (addCallDialogData.dialog));
968 static void AddMeeting (void)
970 GtkWidget *button, *hbox, *vbox, *label;
974 if (addMeetingDialogData.dialog == NULL)
976 addMeetingDialogData.dialog = gtk_dialog_new();
977 gtk_window_set_title (GTK_WINDOW (addMeetingDialogData.dialog), _("Add meeting"));
978 gtk_window_position (GTK_WINDOW (addMeetingDialogData.dialog), GTK_WIN_POS_MOUSE);
979 gtk_window_set_modal(GTK_WINDOW (addMeetingDialogData.dialog), TRUE);
980 gtk_container_set_border_width (GTK_CONTAINER (addMeetingDialogData.dialog), 10);
981 gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.dialog), "delete_event",
982 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
984 button = gtk_button_new_with_label (_("Ok"));
985 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area),
986 button, TRUE, TRUE, 10);
987 gtk_signal_connect (GTK_OBJECT (button), "clicked",
988 GTK_SIGNAL_FUNC (OkAddMeetingDialog), (gpointer) &addMeetingDialogData);
989 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
990 gtk_widget_grab_default (button);
991 gtk_widget_show (button);
992 button = gtk_button_new_with_label (_("Cancel"));
993 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area),
994 button, TRUE, TRUE, 10);
995 gtk_signal_connect (GTK_OBJECT (button), "clicked",
996 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addMeetingDialogData.dialog);
997 gtk_widget_show (button);
999 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), 5);
1001 vbox = gtk_vbox_new (FALSE, 10);
1002 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), vbox);
1003 gtk_widget_show (vbox);
1005 hbox = gtk_hbox_new (FALSE, 0);
1006 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1007 gtk_widget_show (hbox);
1009 label = gtk_label_new (_("Date:"));
1010 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1011 gtk_widget_show (label);
1014 tm = localtime (&t);
1016 addMeetingDialogData.date.date.year = addMeetingDialogData.alarm.date.year =
1018 addMeetingDialogData.date.date.month = addMeetingDialogData.alarm.date.month =
1020 addMeetingDialogData.date.date.day = addMeetingDialogData.alarm.date.day =
1023 addMeetingDialogData.date.hours = addMeetingDialogData.alarm.hours = tm->tm_hour;
1024 addMeetingDialogData.date.minutes = addMeetingDialogData.alarm.minutes = tm->tm_min;
1026 button = gtk_button_new ();
1028 addMeetingDialogData.date.button = gtk_label_new ("");
1030 gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.date.button);
1031 SetDateTimeButton (&(addMeetingDialogData.date));
1033 gtk_widget_show (addMeetingDialogData.date.button);
1035 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1036 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1037 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.date));
1038 gtk_widget_show (button);
1040 hbox = gtk_hbox_new (FALSE, 0);
1041 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1042 gtk_widget_show (hbox);
1044 label = gtk_label_new (_("Name:"));
1045 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1046 gtk_widget_show (label);
1048 addMeetingDialogData.text = gtk_entry_new_with_max_length (30);
1049 gtk_box_pack_end (GTK_BOX (hbox), addMeetingDialogData.text, FALSE, FALSE, 2);
1050 gtk_widget_show (addMeetingDialogData.text);
1052 hbox = gtk_hbox_new (FALSE, 0);
1053 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1054 gtk_widget_show (hbox);
1056 addMeetingDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
1057 gtk_box_pack_start (GTK_BOX(hbox), addMeetingDialogData.alarmCheck, FALSE, FALSE, 2);
1058 // gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.alarmCheck), "toggled",
1059 // GTK_SIGNAL_FUNC (TogleAlarm), &addMeetingDialogData);
1060 gtk_widget_show (addMeetingDialogData.alarmCheck);
1062 button = gtk_button_new ();
1064 addMeetingDialogData.alarm.button = gtk_label_new ("");
1066 gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.alarm.button);
1067 SetDateTimeButton (&(addMeetingDialogData.alarm));
1069 gtk_widget_show (addMeetingDialogData.alarm.button);
1071 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1072 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1073 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.alarm));
1074 gtk_widget_show (button);
1077 gtk_widget_show (GTK_WIDGET (addMeetingDialogData.dialog));
1081 static void AddBirthday (void)
1083 GtkWidget *button, *hbox, *vbox, *label;
1087 if (addBirthdayDialogData.dialog == NULL)
1089 addBirthdayDialogData.dialog = gtk_dialog_new();
1090 gtk_window_set_title (GTK_WINDOW (addBirthdayDialogData.dialog), _("Add birthday"));
1091 gtk_window_position (GTK_WINDOW (addBirthdayDialogData.dialog), GTK_WIN_POS_MOUSE);
1092 gtk_window_set_modal(GTK_WINDOW (addBirthdayDialogData.dialog), TRUE);
1093 gtk_container_set_border_width (GTK_CONTAINER (addBirthdayDialogData.dialog), 10);
1094 gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.dialog), "delete_event",
1095 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
1097 button = gtk_button_new_with_label (_("Ok"));
1098 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area),
1099 button, TRUE, TRUE, 10);
1100 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1101 GTK_SIGNAL_FUNC (OkAddBdayDialog), (gpointer) &addBirthdayDialogData);
1102 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1103 gtk_widget_grab_default (button);
1104 gtk_widget_show (button);
1105 button = gtk_button_new_with_label (_("Cancel"));
1106 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area),
1107 button, TRUE, TRUE, 10);
1108 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1109 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addBirthdayDialogData.dialog);
1110 gtk_widget_show (button);
1112 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), 5);
1114 vbox = gtk_vbox_new (FALSE, 10);
1115 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), vbox);
1116 gtk_widget_show (vbox);
1118 hbox = gtk_hbox_new (FALSE, 0);
1119 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1120 gtk_widget_show (hbox);
1122 label = gtk_label_new (_("Date:"));
1123 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1124 gtk_widget_show (label);
1127 tm = localtime (&t);
1129 addBirthdayDialogData.date.year = addBirthdayDialogData.alarm.date.year =
1131 addBirthdayDialogData.date.month = addBirthdayDialogData.alarm.date.month =
1133 addBirthdayDialogData.date.day = addBirthdayDialogData.alarm.date.day =
1136 addBirthdayDialogData.alarm.hours = tm->tm_hour;
1137 addBirthdayDialogData.alarm.minutes = tm->tm_min;
1139 button = gtk_button_new ();
1141 addBirthdayDialogData.date.button = gtk_label_new ("");
1143 gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.date.button);
1144 SetDateButton (&(addBirthdayDialogData.date));
1146 gtk_widget_show (addBirthdayDialogData.date.button);
1148 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1149 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1150 GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addBirthdayDialogData.date));
1151 gtk_widget_show (button);
1153 hbox = gtk_hbox_new (FALSE, 0);
1154 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1155 gtk_widget_show (hbox);
1157 label = gtk_label_new (_("Name:"));
1158 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1159 gtk_widget_show (label);
1161 addBirthdayDialogData.text = gtk_entry_new_with_max_length (30);
1162 gtk_box_pack_end (GTK_BOX (hbox), addBirthdayDialogData.text, FALSE, FALSE, 2);
1163 gtk_widget_show (addBirthdayDialogData.text);
1165 hbox = gtk_hbox_new (FALSE, 0);
1166 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1167 gtk_widget_show (hbox);
1169 addBirthdayDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
1170 gtk_box_pack_start (GTK_BOX(hbox), addBirthdayDialogData.alarmCheck, FALSE, FALSE, 2);
1171 // gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.alarmCheck), "toggled",
1172 // GTK_SIGNAL_FUNC (TogleAlarm), &addBirthdayDialogData);
1173 gtk_widget_show (addBirthdayDialogData.alarmCheck);
1175 button = gtk_button_new ();
1177 addBirthdayDialogData.alarm.button = gtk_label_new ("");
1179 gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.alarm.button);
1180 SetDateTimeButton (&(addBirthdayDialogData.alarm));
1182 gtk_widget_show (addBirthdayDialogData.alarm.button);
1184 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1185 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1186 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addBirthdayDialogData.alarm));
1187 gtk_widget_show (button);
1190 gtk_widget_show (GTK_WIDGET (addBirthdayDialogData.dialog));
1194 static void OkDeleteNoteDialog (GtkWidget *widget, gpointer data)
1196 GSM_CalendarNote *note;
1203 sel = GTK_CLIST (cal.notesClist)->selection;
1205 gtk_clist_freeze (GTK_CLIST (cal.notesClist));
1207 sel = g_list_sort (sel, ReverseSelection);
1211 row = GPOINTER_TO_INT (sel->data);
1214 note = (GSM_CalendarNote *) g_malloc (sizeof (GSM_CalendarNote));
1215 gtk_clist_get_text (GTK_CLIST (cal.notesClist), row, 0, &buf);
1216 note->Location = atoi (buf);
1218 e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
1219 e->event = Event_DeleteCalendarNote;
1221 GUI_InsertEvent (e);
1224 gtk_widget_hide (GTK_WIDGET (data));
1226 gtk_clist_thaw (GTK_CLIST (cal.notesClist));
1232 static void DeleteNote (void)
1234 static GtkWidget *dialog = NULL;
1235 GtkWidget *button, *hbox, *label, *pixmap;
1239 dialog = gtk_dialog_new();
1240 gtk_window_set_title (GTK_WINDOW (dialog), _("Delete calendar note"));
1241 gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
1242 gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
1243 gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
1244 gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
1245 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
1247 button = gtk_button_new_with_label (_("Ok"));
1248 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
1249 button, TRUE, TRUE, 10);
1250 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1251 GTK_SIGNAL_FUNC (OkDeleteNoteDialog), (gpointer) dialog);
1252 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1253 gtk_widget_grab_default (button);
1254 gtk_widget_show (button);
1255 button = gtk_button_new_with_label (_("Cancel"));
1256 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
1257 button, TRUE, TRUE, 10);
1258 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1259 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
1260 gtk_widget_show (button);
1262 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
1264 hbox = gtk_hbox_new (FALSE, 0);
1265 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
1266 gtk_widget_show (hbox);
1268 pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
1269 gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
1270 gtk_widget_show (pixmap);
1272 label = gtk_label_new (_("Do you want to delete selected note(s)?"));
1273 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
1274 gtk_widget_show (label);
1277 gtk_widget_show (GTK_WIDGET (dialog));
1280 static GtkItemFactoryEntry menu_items[] = {
1281 { NULL, NULL, NULL, 0, "<Branch>"},
1282 { NULL, "<control>R", ReadCalNotes, 0, NULL},
1283 { NULL, "<control>S", NULL, 0, NULL},
1284 { NULL, NULL, NULL, 0, "<Separator>"},
1285 { NULL, "<control>X", NULL, 0, NULL},
1286 { NULL, NULL, NULL, 0, "<Separator>"},
1287 { NULL, "<control>I", NULL, 0, NULL},
1288 { NULL, "<control>E", NULL, 0, NULL},
1289 { NULL, NULL, NULL, 0, "<Separator>"},
1290 { NULL, "<control>W", CloseCalendar, 0, NULL},
1291 { NULL, NULL, NULL, 0, "<Branch>"},
1292 { NULL, "<control>N", AddReminder, 0, NULL},
1293 { NULL, "<control>C", AddCall, 0, NULL},
1294 { NULL, "<control>M", AddMeeting, 0, NULL},
1295 { NULL, "<control>B", AddBirthday, 0, NULL},
1296 { NULL, NULL, NULL, 0, NULL},
1297 { NULL, "<control>D", DeleteNote, 0, NULL},
1298 { NULL, NULL, NULL, 0, "<Separator>"},
1299 { NULL, "<control>A", NULL, 0, NULL},
1300 { NULL, NULL, NULL, 0, "<LastBranch>"},
1301 { NULL, NULL, Help1, 0, NULL},
1302 { NULL, NULL, GUI_ShowAbout, 0, NULL},
1305 static void InitMainMenu (void)
1307 menu_items[0].path = g_strdup (_("/_File"));
1308 menu_items[1].path = g_strdup (_("/File/_Read from phone"));
1309 menu_items[2].path = g_strdup (_("/File/_Save to phone"));
1310 menu_items[3].path = g_strdup (_("/File/Sep1"));
1311 menu_items[4].path = g_strdup (_("/File/Send via S_MS"));
1312 menu_items[5].path = g_strdup (_("/File/Sep2"));
1313 menu_items[6].path = g_strdup (_("/File/_Import from file"));
1314 menu_items[7].path = g_strdup (_("/File/_Export to file"));
1315 menu_items[8].path = g_strdup (_("/File/Sep3"));
1316 menu_items[9].path = g_strdup (_("/File/_Close"));
1317 menu_items[10].path = g_strdup (_("/_Edit"));
1318 menu_items[11].path = g_strdup (_("/Edit/Add _reminder"));
1319 menu_items[12].path = g_strdup (_("/Edit/Add _call"));
1320 menu_items[13].path = g_strdup (_("/Edit/Add _meeting"));
1321 menu_items[14].path = g_strdup (_("/Edit/Add _birthday"));
1322 menu_items[15].path = g_strdup (_("/Edit/_Edit"));
1323 menu_items[16].path = g_strdup (_("/Edit/_Delete"));
1324 menu_items[17].path = g_strdup (_("/Edit/Sep4"));
1325 menu_items[18].path = g_strdup (_("/Edit/Select _all"));
1326 menu_items[19].path = g_strdup (_("/_Help"));
1327 menu_items[20].path = g_strdup (_("/Help/_Help"));
1328 menu_items[21].path = g_strdup (_("/Help/_About"));
1331 void GUI_CreateCalendarWindow ()
1333 int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
1334 GtkItemFactory *item_factory;
1335 GtkAccelGroup *accel_group;
1336 GtkWidget *menubar, *toolbar, *scrolledWindow, *hpaned;
1337 GtkWidget *main_vbox;
1341 SortColumn *sColumn;
1343 gchar *titles[6] = { _("#"), _("Type"), _("Date"), _("Text"),
1344 _("Alarm"), _("Number")};
1347 GUI_CalendarWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1348 gtk_window_set_wmclass (GTK_WINDOW (GUI_CalendarWindow), "CalendarWindow", "Xgnokii");
1349 gtk_window_set_title (GTK_WINDOW (GUI_CalendarWindow), _("Calendar"));
1350 //gtk_widget_set_usize (GTK_WIDGET (GUI_CalendarWindow), 436, 220);
1351 gtk_signal_connect (GTK_OBJECT (GUI_CalendarWindow), "delete_event",
1352 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
1353 gtk_widget_realize (GUI_CalendarWindow);
1355 accel_group = gtk_accel_group_new ();
1356 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
1359 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
1361 gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_CalendarWindow));
1363 /* Finally, return the actual menu bar created by the item factory. */
1364 menubar = gtk_item_factory_get_widget (item_factory, "<main>");
1366 main_vbox = gtk_vbox_new (FALSE, 1);
1367 gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
1368 gtk_container_add (GTK_CONTAINER (GUI_CalendarWindow), main_vbox);
1369 gtk_widget_show (main_vbox);
1371 gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
1372 gtk_widget_show (menubar);
1374 /* Create the toolbar */
1375 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
1376 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1378 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
1379 NewPixmap(Read_xpm, GUI_CalendarWindow->window,
1380 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1381 (GtkSignalFunc) ReadCalNotes, NULL);
1382 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
1383 NewPixmap(Send_xpm, GUI_CalendarWindow->window,
1384 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1385 (GtkSignalFunc) NULL, NULL);
1387 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1389 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send via SMS"), NULL,
1390 NewPixmap(SendSMS_xpm, GUI_CalendarWindow->window,
1391 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1392 (GtkSignalFunc) NULL, NULL);
1394 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1396 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
1397 NewPixmap(Open_xpm, GUI_CalendarWindow->window,
1398 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1399 (GtkSignalFunc) NULL, NULL);
1400 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
1401 NewPixmap(Save_xpm, GUI_CalendarWindow->window,
1402 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1403 (GtkSignalFunc) NULL, NULL);
1405 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1407 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit note"), NULL,
1408 NewPixmap(Edit_xpm, GUI_CalendarWindow->window,
1409 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1410 (GtkSignalFunc) NULL, NULL);
1411 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add reminder"), NULL,
1412 NewPixmap(NewRem_xpm, GUI_CalendarWindow->window,
1413 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1414 (GtkSignalFunc) AddReminder, NULL);
1415 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add call"), NULL,
1416 NewPixmap(NewCall_xpm, GUI_CalendarWindow->window,
1417 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1418 (GtkSignalFunc) AddCall, NULL);
1419 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add meeting"), NULL,
1420 NewPixmap(NewMeet_xpm, GUI_CalendarWindow->window,
1421 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1422 (GtkSignalFunc) AddMeeting, NULL);
1423 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add birthday"), NULL,
1424 NewPixmap(NewBD_xpm, GUI_CalendarWindow->window,
1425 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1426 (GtkSignalFunc) AddBirthday, NULL);
1427 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete note"), NULL,
1428 NewPixmap(Delete_xpm, GUI_CalendarWindow->window,
1429 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1430 (GtkSignalFunc) DeleteNote, NULL);
1432 gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
1433 gtk_widget_show (toolbar);
1435 hpaned = gtk_hpaned_new ();
1436 //gtk_paned_set_handle_size (GTK_PANED (hpaned), 10);
1437 //gtk_paned_set_gutter_size (GTK_PANED (hpaned), 15);
1438 gtk_box_pack_start (GTK_BOX (main_vbox), hpaned, TRUE, TRUE, 0);
1439 gtk_widget_show (hpaned);
1442 cal.noteText = gtk_text_new (NULL, NULL);
1443 gtk_text_set_editable (GTK_TEXT (cal.noteText), FALSE);
1444 gtk_text_set_word_wrap (GTK_TEXT (cal.noteText), TRUE);
1446 scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
1447 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
1449 GTK_POLICY_AUTOMATIC);
1451 gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow);
1453 gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.noteText);
1454 gtk_widget_show_all (scrolledWindow);
1457 cal.calendar = gtk_calendar_new ();
1460 tm = localtime (&t);
1461 gtk_calendar_select_month (GTK_CALENDAR (cal.calendar), tm->tm_mon, tm->tm_year + 1900);
1462 gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), tm->tm_mday);
1464 gtk_paned_add2 (GTK_PANED (hpaned), cal.calendar);
1465 gtk_widget_show (cal.calendar);
1468 cal.notesClist = gtk_clist_new_with_titles (6, titles);
1469 gtk_clist_set_shadow_type (GTK_CLIST (cal.notesClist), GTK_SHADOW_OUT);
1470 gtk_clist_set_compare_func (GTK_CLIST (cal.notesClist), CListCompareFunc);
1471 gtk_clist_set_sort_column (GTK_CLIST (cal.notesClist), 0);
1472 gtk_clist_set_sort_type (GTK_CLIST (cal.notesClist), GTK_SORT_ASCENDING);
1473 gtk_clist_set_auto_sort (GTK_CLIST (cal.notesClist), FALSE);
1474 gtk_clist_set_selection_mode (GTK_CLIST (cal.notesClist), GTK_SELECTION_EXTENDED);
1476 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 0, 15);
1477 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 1, 52);
1478 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 2, 110);
1479 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 3, 130);
1480 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 4, 110);
1481 gtk_clist_set_column_justification (GTK_CLIST (cal.notesClist), 0, GTK_JUSTIFY_RIGHT);
1483 for (i = 0; i < 6; i++)
1485 if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
1487 g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
1490 sColumn->clist = cal.notesClist;
1491 sColumn->column = i;
1492 gtk_signal_connect (GTK_OBJECT (GTK_CLIST (cal.notesClist)->column[i].button), "clicked",
1493 GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
1496 gtk_signal_connect (GTK_OBJECT (cal.notesClist), "select_row",
1497 GTK_SIGNAL_FUNC (ClickEntry), NULL);
1499 scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
1500 gtk_widget_set_usize (scrolledWindow, 550, 100);
1501 gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.notesClist);
1502 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
1503 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1505 gtk_box_pack_end (GTK_BOX (main_vbox), scrolledWindow,
1508 gtk_widget_show (cal.notesClist);
1509 gtk_widget_show (scrolledWindow);
1511 cmap = gdk_colormap_get_system();
1512 cal.colour.red = 0xffff;
1513 cal.colour.green = 0;
1514 cal.colour.blue = 0;
1515 if (!gdk_color_alloc (cmap, &(cal.colour)))
1516 g_error (_("couldn't allocate colour"));
1518 questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_CalendarWindow->window,
1520 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL],
1523 CreateErrorDialog (&errorDialog, GUI_CalendarWindow);