5 A Linux/Unix GUI for Nokia mobile phones.
6 Copyright (C) 1999 Pavel Janík ml., Hugh Blemings
7 & Ján Derfiòák <ja@mail.upjs.sk>.
9 Released under the terms of the GNU GPL, see file COPYING for more details.
11 Last modification: Tue Nov 28 1999
12 Modified by Jan Derfinak
20 #include "xgnokii_common.h"
22 #include "xgnokii_lowlevel.h"
23 #include "xgnokii_calendar.h"
24 #include "xpm/Read.xpm"
25 #include "xpm/Send.xpm"
26 #include "xpm/Open.xpm"
27 #include "xpm/Save.xpm"
28 #include "xpm/Edit.xpm"
29 #include "xpm/Delete.xpm"
30 #include "xpm/SendSMS.xpm"
31 #include "xpm/NewBD.xpm"
32 #include "xpm/NewCall.xpm"
33 #include "xpm/NewMeet.xpm"
34 #include "xpm/NewRem.xpm"
35 #include "xpm/quest.xpm"
40 GtkWidget *notesClist;
68 GtkWidget *alarmCheck;
76 GtkWidget *alarmCheck;
93 static GtkWidget *GUI_CalendarWindow;
94 static ErrorDialog errorDialog = {NULL, NULL};
95 static CalendarWidget cal = {NULL, NULL};
96 static QuestMark questMark;
97 static AddDialogData addReminderDialogData;
98 static AddDialogData2 addCallDialogData;
99 static AddDialogData2 addMeetingDialogData;
100 static AddDialogData addBirthdayDialogData;
101 static CalendarDialog calendarDialog = {NULL, NULL};
102 static CalTimeDialog calTimeDialog = {NULL, NULL};
104 static inline void Help1 (GtkWidget *w, gpointer data)
106 gchar *indx = g_strdup_printf ("/help/%s/windows/calendar/index.html", xgnokiiConfig.locale);
112 static inline void CloseCalendar (GtkWidget *w, gpointer data)
114 gtk_widget_hide (GUI_CalendarWindow);
118 inline void GUI_ShowCalendar ()
120 if (phoneMonitor.supported & PM_CALENDAR)
121 gtk_widget_show (GUI_CalendarWindow);
125 static gint InsertCalendarEntry (GSM_CalendarNote *note)
129 row[0] = g_strdup_printf ("%d", note->Location);
134 row[1] = _("Reminder");
135 row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
136 note->Time.Month, note->Time.Year);
142 row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day,
143 note->Time.Month, note->Time.Year,
144 note->Time.Hour, note->Time.Minute);
145 row[5] = note->Phone;
149 row[1] = _("Meeting");
150 row[2] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Time.Day,
151 note->Time.Month, note->Time.Year,
152 note->Time.Hour, note->Time.Minute);
157 row[1] = _("Birthday");
158 row[2] = g_strdup_printf ("%02d/%02d/%04d", note->Time.Day,
159 note->Time.Month, note->Time.Year);
164 row[1] = _("Unknown");
171 if (note->Alarm.Year == 0)
174 row[4] = g_strdup_printf ("%02d/%02d/%04d %02d:%02d", note->Alarm.Day,
175 note->Alarm.Month, note->Alarm.Year,
176 note->Alarm.Hour, note->Alarm.Minute);
178 gtk_clist_freeze (GTK_CLIST (cal.notesClist));
179 gtk_clist_append (GTK_CLIST (cal.notesClist), row);
180 gtk_clist_sort (GTK_CLIST (cal.notesClist));
181 gtk_clist_thaw (GTK_CLIST (cal.notesClist));
191 static void ClickEntry (GtkWidget *clist,
194 GdkEventButton *event,
199 gtk_text_freeze (GTK_TEXT (cal.noteText));
201 gtk_text_set_point (GTK_TEXT (cal.noteText), 0);
202 gtk_text_forward_delete (GTK_TEXT (cal.noteText), gtk_text_get_length (GTK_TEXT (cal.noteText)));
204 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
206 gtk_clist_get_text (GTK_CLIST (clist), row, 1, &buf);
207 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
209 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
212 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
214 gtk_clist_get_text (GTK_CLIST (clist), row, 2, &buf);
215 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
217 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
220 gtk_calendar_select_month (GTK_CALENDAR (cal.calendar),
221 atoi (buf + 3) - 1, atoi (buf + 6));
222 gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), atoi (buf));
224 gtk_clist_get_text (GTK_CLIST (clist), row, 4, &buf);
227 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
230 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
232 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
236 gtk_clist_get_text (GTK_CLIST (clist), row, 5, &buf);
239 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
242 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
244 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
248 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.colour), NULL,
250 gtk_clist_get_text (GTK_CLIST (clist), row, 3, &buf);
251 gtk_text_insert (GTK_TEXT (cal.noteText), NULL, &(cal.noteText->style->black), NULL,
254 gtk_text_thaw (GTK_TEXT (cal.noteText));
257 static inline gint ReadCalendarFailed (gint i)
263 static void ReadCalNotes (void)
266 D_CalendarNoteAll *cna;
268 gtk_clist_clear (GTK_CLIST (cal.notesClist));
270 cna = (D_CalendarNoteAll *) g_malloc (sizeof (D_CalendarNoteAll));
271 cna->InsertEntry = InsertCalendarEntry;
272 cna->ReadFailed = ReadCalendarFailed;
274 e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
275 e->event = Event_GetCalendarNoteAll;
281 static gint CListCompareFunc (GtkCList *clist, gconstpointer ptr1, gconstpointer ptr2)
286 GtkCListRow *row1 = (GtkCListRow *) ptr1;
287 GtkCListRow *row2 = (GtkCListRow *) ptr2;
289 switch (row1->cell[clist->sort_column].type)
292 text1 = GTK_CELL_TEXT (row1->cell[clist->sort_column])->text;
294 case GTK_CELL_PIXTEXT:
295 text1 = GTK_CELL_PIXTEXT (row1->cell[clist->sort_column])->text;
300 switch (row2->cell[clist->sort_column].type)
303 text2 = GTK_CELL_TEXT (row2->cell[clist->sort_column])->text;
305 case GTK_CELL_PIXTEXT:
306 text2 = GTK_CELL_PIXTEXT (row2->cell[clist->sort_column])->text;
313 return (text1 != NULL);
319 return (*text1 != '\0');
324 if (clist->sort_column == 0)
326 gint n1 = atoi (text1);
327 gint n2 = atoi (text2);
337 if (clist->sort_column == 2 || clist->sort_column == 4)
339 GDate *date1, *date2;
343 date1 = g_date_new_dmy (atoi (text1), atoi (text1 + 3), atoi (text1 + 6));
344 date2 = g_date_new_dmy (atoi (text2), atoi (text2 + 3), atoi (text2 + 6));
346 ret = g_date_compare (date1, date2);
354 if (strlen (text1) > 10)
355 time1 = atoi (text1 + 11) * 60 + atoi (text1 + 14);
359 if (strlen (text2) > 10)
360 time2 = atoi (text2 + 11) * 60 + atoi (text2 + 14);
366 else if (time1 < time2)
375 if (strlen (text1) > 10)
377 bdTime.tm_min = atoi (text1 + 14);
378 bdTime.tm_hour = atoi (text1 + 11);
381 bdTime.tm_min = bdTime.tm_hour = 0;
382 bdTime.tm_mday = atoi (text1);
383 bdTime.tm_mon = atoi (text1 + 3);
384 bdTime.tm_year = atoi (text1 + 6) - 1900;
385 bdTime.tm_isdst = -1;
387 time1 = mktime (&bdTime);
390 if (strlen (text2) > 10)
392 bdTime.tm_min = atoi (text2 + 14);
393 bdTime.tm_hour = atoi (text2 + 11);
396 bdTime.tm_min = bdTime.tm_hour = 0;
397 bdTime.tm_mday = atoi (text2);
398 bdTime.tm_mon = atoi (text2 + 3);
399 bdTime.tm_year = atoi (text2 + 6) - 1900;
400 bdTime.tm_isdst = -1;
402 time2 = mktime (&bdTime);
404 g_print ("Cas1: %s - %d, Cas2: %s - %d\n", text1, time1, text2, time2);
408 else if (time1 < time2)
414 return (g_strcasecmp (text1, text2));
418 static gint ReverseSelection (gconstpointer a, gconstpointer b)
422 gint row1 = GPOINTER_TO_INT (a);
423 gint row2 = GPOINTER_TO_INT (b);
425 gtk_clist_get_text (GTK_CLIST (cal.notesClist), row1, 0, &buf1);
426 gtk_clist_get_text (GTK_CLIST (cal.notesClist), row2, 0, &buf2);
428 index1 = atoi (buf1);
429 index2 = atoi (buf2);
433 else if (index1 > index2)
440 static gint AddCalendarNote(GSM_CalendarNote *cnote)
443 PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
444 D_CalendarNote *dnote = (D_CalendarNote *)g_malloc(sizeof(D_CalendarNote));
446 dnote->entry = cnote;
447 e->event = Event_WriteCalendarNote;
450 pthread_mutex_lock (&calendarMutex);
451 pthread_cond_wait (&calendarCond, &calendarMutex);
452 pthread_mutex_unlock (&calendarMutex);
455 g_print ("Saving calendar note\n");
458 error = dnote->status;
461 if (error != GE_NONE)
463 gchar *buf = g_strdup_printf (_("Saving failed failed\n(error=%d)"), error);
464 gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
465 gtk_widget_show (errorDialog.dialog);
469 g_print ("Note saved\n");
474 static void OkAddReminderDialog (GtkWidget *widget, gpointer data)
476 GSM_CalendarNote note;
478 note.Type = GCN_REMINDER;
480 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
481 note.Time.Year = ((AddDialogData *)data)->date.year;
482 note.Time.Month = ((AddDialogData *)data)->date.month;
483 note.Time.Day = ((AddDialogData *)data)->date.day;
484 note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
485 if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
486 note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
487 note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
488 note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
489 note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
490 note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
491 note.Alarm.Second = note.Alarm.Timezone = 0;
495 AddCalendarNote(¬e);
496 gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), "");
497 gtk_widget_hide (((AddDialogData *)data)->dialog);
500 static void OkAddCallDialog (GtkWidget *widget, gpointer data)
502 GSM_CalendarNote note;
504 note.Type = GCN_CALL;
506 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20);
507 note.Time.Year = ((AddDialogData2 *)data)->date.date.year;
508 note.Time.Month = ((AddDialogData2 *)data)->date.date.month;
509 note.Time.Day = ((AddDialogData2 *)data)->date.date.day;
510 note.Time.Hour = ((AddDialogData2 *)data)->date.hours;
511 note.Time.Minute = ((AddDialogData2 *)data)->date.minutes;
512 note.Time.Second = note.Time.Timezone = 0;
513 if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) {
514 note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year;
515 note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month;
516 note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day;
517 note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours;
518 note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes;
519 note.Alarm.Second = note.Alarm.Timezone = 0;
523 AddCalendarNote(¬e);
524 gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), "");
525 gtk_widget_hide (((AddDialogData2 *)data)->dialog);
528 static void OkAddMeetingDialog (GtkWidget *widget, gpointer data)
530 GSM_CalendarNote note;
532 note.Type = GCN_MEETING;
534 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData2 *)data)->text)), 20);
535 note.Time.Year = ((AddDialogData2 *)data)->date.date.year;
536 note.Time.Month = ((AddDialogData2 *)data)->date.date.month;
537 note.Time.Day = ((AddDialogData2 *)data)->date.date.day;
538 note.Time.Hour = ((AddDialogData2 *)data)->date.hours;
539 note.Time.Minute = ((AddDialogData2 *)data)->date.minutes;
540 note.Time.Second = note.Time.Timezone = 0;
541 if (GTK_TOGGLE_BUTTON(((AddDialogData2 *) data)->alarmCheck)->active) {
542 note.Alarm.Year = ((AddDialogData2 *)data)->alarm.date.year;
543 note.Alarm.Month = ((AddDialogData2 *)data)->alarm.date.month;
544 note.Alarm.Day = ((AddDialogData2 *)data)->alarm.date.day;
545 note.Alarm.Hour = ((AddDialogData2 *)data)->alarm.hours;
546 note.Alarm.Minute = ((AddDialogData2 *)data)->alarm.minutes;
547 note.Alarm.Second = note.Alarm.Timezone = 0;
551 AddCalendarNote(¬e);
552 gtk_entry_set_text(GTK_ENTRY(((AddDialogData2 *)data)->text), "");
553 gtk_widget_hide (((AddDialogData2 *)data)->dialog);
556 static void OkAddBdayDialog (GtkWidget *widget, gpointer data)
558 GSM_CalendarNote note;
560 note.Type = GCN_BIRTHDAY;
562 strncpy(note.Text, gtk_entry_get_text(GTK_ENTRY(((AddDialogData *)data)->text)), 20);
563 note.Time.Year = ((AddDialogData *)data)->date.year;
564 note.Time.Month = ((AddDialogData *)data)->date.month;
565 note.Time.Day = ((AddDialogData *)data)->date.day;
566 note.Time.Hour = note.Time.Minute = note.Time.Second = note.Time.Timezone = 0;
567 if (GTK_TOGGLE_BUTTON(((AddDialogData*) data)->alarmCheck)->active) {
568 note.Alarm.Year = ((AddDialogData *)data)->alarm.date.year;
569 note.Alarm.Month = ((AddDialogData *)data)->alarm.date.month;
570 note.Alarm.Day = ((AddDialogData *)data)->alarm.date.day;
571 note.Alarm.Hour = ((AddDialogData *)data)->alarm.hours;
572 note.Alarm.Minute = ((AddDialogData *)data)->alarm.minutes;
573 note.Alarm.Second = note.Alarm.Timezone = 0;
577 AddCalendarNote(¬e);
578 gtk_entry_set_text(GTK_ENTRY(((AddDialogData *)data)->text), "");
579 gtk_widget_hide (((AddDialogData *)data)->dialog);
583 static inline void SetDateButton (Date *date)
585 gchar *buf = g_strdup_printf ("%d-%02d-%02d", date->year,
586 date->month, date->day);
587 gtk_label_set_text (GTK_LABEL (date->button), buf);
592 static inline void SetDateTimeButton (DateTime *date)
594 gchar *buf = g_strdup_printf ("%d-%02d-%02d %02d:%02d", date->date.year,
595 date->date.month, date->date.day,
596 date->hours, date->minutes);
597 gtk_label_set_text (GTK_LABEL (date->button), buf);
602 static void OkCalendarDialog (GtkWidget *widget, Date *date)
604 gtk_calendar_get_date (GTK_CALENDAR (calendarDialog.cal), &(date->year),
605 &(date->month), &(date->day));
608 SetDateButton (date);
610 gtk_widget_hide (calendarDialog.dialog);
614 static void OkCalTimeDialog (GtkWidget *widget, DateTime *date)
616 gtk_calendar_get_date (GTK_CALENDAR (calTimeDialog.cal), &(date->date.year),
617 &(date->date.month), &(date->date.day));
618 date->date.month += 1;
620 date->hours = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->hButton));
621 date->minutes = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (date->mButton));
623 SetDateTimeButton (date);
625 gtk_widget_hide (calTimeDialog.dialog);
629 static void ShowCalendar (GtkWidget *widget, Date *date)
633 if (calendarDialog.dialog == NULL)
635 calendarDialog.dialog = gtk_dialog_new ();
636 gtk_window_set_title (GTK_WINDOW (calendarDialog.dialog), _("Choose date"));
637 gtk_window_position (GTK_WINDOW (calendarDialog.dialog), GTK_WIN_POS_MOUSE);
638 gtk_window_set_modal(GTK_WINDOW (calendarDialog.dialog), TRUE);
639 gtk_container_set_border_width (GTK_CONTAINER (calendarDialog.dialog), 10);
640 gtk_signal_connect (GTK_OBJECT (calendarDialog.dialog), "delete_event",
641 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
643 button = gtk_button_new_with_label (_("Ok"));
644 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area),
645 button, TRUE, TRUE, 10);
646 gtk_signal_connect (GTK_OBJECT (button), "clicked",
647 GTK_SIGNAL_FUNC (OkCalendarDialog), (gpointer) date);
648 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
649 gtk_widget_grab_default (button);
650 gtk_widget_show (button);
652 button = gtk_button_new_with_label (_("Cancel"));
653 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calendarDialog.dialog)->action_area),
654 button, TRUE, TRUE, 10);
655 gtk_signal_connect (GTK_OBJECT (button), "clicked",
656 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calendarDialog.dialog);
657 gtk_widget_show (button);
659 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), 5);
661 calendarDialog.cal = gtk_calendar_new ();
663 gtk_calendar_select_month (GTK_CALENDAR (calendarDialog.cal), date->month - 1, date->year);
664 gtk_calendar_select_day (GTK_CALENDAR (calendarDialog.cal), date->day);
666 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calendarDialog.dialog)->vbox), calendarDialog.cal);
667 gtk_widget_show (calendarDialog.cal);
670 gtk_widget_show (calendarDialog.dialog);
674 static void ShowCalTime (GtkWidget *widget, DateTime *date)
676 GtkWidget *button, *hbox, *label;
679 if (calTimeDialog.dialog == NULL)
681 calTimeDialog.dialog = gtk_dialog_new ();
682 gtk_window_set_title (GTK_WINDOW (calTimeDialog.dialog), _("Choose date"));
683 gtk_window_position (GTK_WINDOW (calTimeDialog.dialog), GTK_WIN_POS_MOUSE);
684 gtk_window_set_modal(GTK_WINDOW (calTimeDialog.dialog), TRUE);
685 gtk_container_set_border_width (GTK_CONTAINER (calTimeDialog.dialog), 10);
686 gtk_signal_connect (GTK_OBJECT (calTimeDialog.dialog), "delete_event",
687 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
689 button = gtk_button_new_with_label (_("Ok"));
690 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area),
691 button, TRUE, TRUE, 10);
692 gtk_signal_connect (GTK_OBJECT (button), "clicked",
693 GTK_SIGNAL_FUNC (OkCalTimeDialog), (gpointer) date);
694 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
695 gtk_widget_grab_default (button);
696 gtk_widget_show (button);
698 button = gtk_button_new_with_label (_("Cancel"));
699 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (calTimeDialog.dialog)->action_area),
700 button, TRUE, TRUE, 10);
701 gtk_signal_connect (GTK_OBJECT (button), "clicked",
702 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) calTimeDialog.dialog);
703 gtk_widget_show (button);
705 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), 5);
707 calTimeDialog.cal = gtk_calendar_new ();
709 gtk_calendar_select_month (GTK_CALENDAR (calTimeDialog.cal), date->date.month - 1, date->date.year);
710 gtk_calendar_select_day (GTK_CALENDAR (calTimeDialog.cal), date->date.day);
712 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), calTimeDialog.cal);
713 gtk_widget_show (calTimeDialog.cal);
715 hbox = gtk_hbox_new (FALSE, 0);
716 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (calTimeDialog.dialog)->vbox), hbox);
717 gtk_widget_show (hbox);
719 label = gtk_label_new (_("Alarm time:"));
720 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
721 gtk_widget_show (label);
723 adj = (GtkAdjustment *) gtk_adjustment_new (date->hours,
724 0.0, 23.0, 1.0, 4.0, 0.0);
725 date->hButton = gtk_spin_button_new (adj, 0, 0);
726 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->hButton), TRUE);
727 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->hButton), TRUE);
728 gtk_box_pack_start (GTK_BOX (hbox), date->hButton, FALSE, FALSE, 0);
729 gtk_widget_show (date->hButton);
731 label = gtk_label_new (":");
732 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
733 gtk_widget_show (label);
735 adj = (GtkAdjustment *) gtk_adjustment_new (date->minutes,
736 0.0, 59.0, 1.0, 10.0, 0.0);
737 date->mButton = gtk_spin_button_new (adj, 0, 0);
738 gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (date->mButton), TRUE);
739 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (date->mButton), TRUE);
740 gtk_box_pack_start (GTK_BOX (hbox), date->mButton, FALSE, FALSE, 0);
741 gtk_widget_show (date->mButton);
744 gtk_widget_show (calTimeDialog.dialog);
748 static void AddReminder (void)
750 GtkWidget *button, *hbox, *vbox, *label;
754 if (addReminderDialogData.dialog == NULL)
756 addReminderDialogData.dialog = gtk_dialog_new();
757 gtk_window_set_title (GTK_WINDOW (addReminderDialogData.dialog), _("Add reminder"));
758 gtk_window_position (GTK_WINDOW (addReminderDialogData.dialog), GTK_WIN_POS_MOUSE);
759 gtk_window_set_modal(GTK_WINDOW (addReminderDialogData.dialog), TRUE);
760 gtk_container_set_border_width (GTK_CONTAINER (addReminderDialogData.dialog), 10);
761 gtk_signal_connect (GTK_OBJECT (addReminderDialogData.dialog), "delete_event",
762 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
764 button = gtk_button_new_with_label (_("Ok"));
765 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area),
766 button, TRUE, TRUE, 10);
767 gtk_signal_connect (GTK_OBJECT (button), "clicked",
768 GTK_SIGNAL_FUNC (OkAddReminderDialog), (gpointer) &addReminderDialogData);
769 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
770 gtk_widget_grab_default (button);
771 gtk_widget_show (button);
772 button = gtk_button_new_with_label (_("Cancel"));
773 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addReminderDialogData.dialog)->action_area),
774 button, TRUE, TRUE, 10);
775 gtk_signal_connect (GTK_OBJECT (button), "clicked",
776 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addReminderDialogData.dialog);
777 gtk_widget_show (button);
779 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), 5);
781 vbox = gtk_vbox_new (FALSE, 10);
782 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addReminderDialogData.dialog)->vbox), vbox);
783 gtk_widget_show (vbox);
785 hbox = gtk_hbox_new (FALSE, 0);
786 gtk_container_add (GTK_CONTAINER (vbox), hbox);
787 gtk_widget_show (hbox);
789 label = gtk_label_new (_("Date:"));
790 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
791 gtk_widget_show (label);
796 addReminderDialogData.date.year = addReminderDialogData.alarm.date.year =
798 addReminderDialogData.date.month = addReminderDialogData.alarm.date.month =
800 addReminderDialogData.date.day = addReminderDialogData.alarm.date.day =
803 addReminderDialogData.alarm.hours = tm->tm_hour;
804 addReminderDialogData.alarm.minutes = tm->tm_min;
806 button = gtk_button_new ();
808 addReminderDialogData.date.button = gtk_label_new ("");
810 gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.date.button);
811 SetDateButton (&(addReminderDialogData.date));
813 gtk_widget_show (addReminderDialogData.date.button);
815 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
816 gtk_signal_connect (GTK_OBJECT (button), "clicked",
817 GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addReminderDialogData.date));
818 gtk_widget_show (button);
820 hbox = gtk_hbox_new (FALSE, 0);
821 gtk_container_add (GTK_CONTAINER (vbox), hbox);
822 gtk_widget_show (hbox);
824 label = gtk_label_new (_("Subject:"));
825 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
826 gtk_widget_show (label);
828 addReminderDialogData.text = gtk_entry_new_with_max_length (30);
829 gtk_box_pack_end (GTK_BOX (hbox), addReminderDialogData.text, FALSE, FALSE, 2);
830 gtk_widget_show (addReminderDialogData.text);
832 hbox = gtk_hbox_new (FALSE, 0);
833 gtk_container_add (GTK_CONTAINER (vbox), hbox);
834 gtk_widget_show (hbox);
836 addReminderDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
837 gtk_box_pack_start (GTK_BOX(hbox), addReminderDialogData.alarmCheck, FALSE, FALSE, 2);
838 // gtk_signal_connect (GTK_OBJECT (addReminderDialogData.alarmCheck), "toggled",
839 // GTK_SIGNAL_FUNC (TogleAlarm), &addReminderDialogData);
840 gtk_widget_show (addReminderDialogData.alarmCheck);
842 button = gtk_button_new ();
844 addReminderDialogData.alarm.button = gtk_label_new ("");
846 gtk_container_add (GTK_CONTAINER (button), addReminderDialogData.alarm.button);
847 SetDateTimeButton (&(addReminderDialogData.alarm));
849 gtk_widget_show (addReminderDialogData.alarm.button);
851 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
852 gtk_signal_connect (GTK_OBJECT (button), "clicked",
853 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addReminderDialogData.alarm));
854 gtk_widget_show (button);
857 gtk_widget_show (GTK_WIDGET (addReminderDialogData.dialog));
861 static void AddCall (void)
863 GtkWidget *button, *hbox, *vbox, *label;
867 if (addCallDialogData.dialog == NULL)
869 addCallDialogData.dialog = gtk_dialog_new();
870 gtk_window_set_title (GTK_WINDOW (addCallDialogData.dialog), _("Add Call"));
871 gtk_window_position (GTK_WINDOW (addCallDialogData.dialog), GTK_WIN_POS_MOUSE);
872 gtk_window_set_modal(GTK_WINDOW (addCallDialogData.dialog), TRUE);
873 gtk_container_set_border_width (GTK_CONTAINER (addCallDialogData.dialog), 10);
874 gtk_signal_connect (GTK_OBJECT (addCallDialogData.dialog), "delete_event",
875 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
877 button = gtk_button_new_with_label (_("Ok"));
878 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area),
879 button, TRUE, TRUE, 10);
880 gtk_signal_connect (GTK_OBJECT (button), "clicked",
881 GTK_SIGNAL_FUNC (OkAddCallDialog), (gpointer) &addCallDialogData);
882 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
883 gtk_widget_grab_default (button);
884 gtk_widget_show (button);
885 button = gtk_button_new_with_label (_("Cancel"));
886 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addCallDialogData.dialog)->action_area),
887 button, TRUE, TRUE, 10);
888 gtk_signal_connect (GTK_OBJECT (button), "clicked",
889 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addCallDialogData.dialog);
890 gtk_widget_show (button);
892 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), 5);
894 vbox = gtk_vbox_new (FALSE, 10);
895 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addCallDialogData.dialog)->vbox), vbox);
896 gtk_widget_show (vbox);
898 hbox = gtk_hbox_new (FALSE, 0);
899 gtk_container_add (GTK_CONTAINER (vbox), hbox);
900 gtk_widget_show (hbox);
902 label = gtk_label_new (_("Date:"));
903 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
904 gtk_widget_show (label);
909 addCallDialogData.date.date.year = addCallDialogData.alarm.date.year =
911 addCallDialogData.date.date.month = addCallDialogData.alarm.date.month =
913 addCallDialogData.date.date.day = addCallDialogData.alarm.date.day =
916 addCallDialogData.date.hours = addCallDialogData.alarm.hours = tm->tm_hour;
917 addCallDialogData.date.minutes = addCallDialogData.alarm.minutes = tm->tm_min;
919 button = gtk_button_new ();
921 addCallDialogData.date.button = gtk_label_new ("");
923 gtk_container_add (GTK_CONTAINER (button), addCallDialogData.date.button);
924 SetDateTimeButton (&(addCallDialogData.date));
926 gtk_widget_show (addCallDialogData.date.button);
928 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
929 gtk_signal_connect (GTK_OBJECT (button), "clicked",
930 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.date));
931 gtk_widget_show (button);
933 hbox = gtk_hbox_new (FALSE, 0);
934 gtk_container_add (GTK_CONTAINER (vbox), hbox);
935 gtk_widget_show (hbox);
937 label = gtk_label_new (_("Number:"));
938 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
939 gtk_widget_show (label);
941 addCallDialogData.text = gtk_entry_new_with_max_length (30);
942 gtk_box_pack_end (GTK_BOX (hbox), addCallDialogData.text, FALSE, FALSE, 2);
943 gtk_widget_show (addCallDialogData.text);
945 hbox = gtk_hbox_new (FALSE, 0);
946 gtk_container_add (GTK_CONTAINER (vbox), hbox);
947 gtk_widget_show (hbox);
949 addCallDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
950 gtk_box_pack_start (GTK_BOX(hbox), addCallDialogData.alarmCheck, FALSE, FALSE, 2);
952 gtk_widget_show (addCallDialogData.alarmCheck);
954 button = gtk_button_new ();
956 addCallDialogData.alarm.button = gtk_label_new ("");
958 gtk_container_add (GTK_CONTAINER (button), addCallDialogData.alarm.button);
959 SetDateTimeButton (&(addCallDialogData.alarm));
961 gtk_widget_show (addCallDialogData.alarm.button);
963 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
964 gtk_signal_connect (GTK_OBJECT (button), "clicked",
965 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addCallDialogData.alarm));
966 gtk_widget_show (button);
969 gtk_widget_show (GTK_WIDGET (addCallDialogData.dialog));
973 static void AddMeeting (void)
975 GtkWidget *button, *hbox, *vbox, *label;
979 if (addMeetingDialogData.dialog == NULL)
981 addMeetingDialogData.dialog = gtk_dialog_new();
982 gtk_window_set_title (GTK_WINDOW (addMeetingDialogData.dialog), _("Add meeting"));
983 gtk_window_position (GTK_WINDOW (addMeetingDialogData.dialog), GTK_WIN_POS_MOUSE);
984 gtk_window_set_modal(GTK_WINDOW (addMeetingDialogData.dialog), TRUE);
985 gtk_container_set_border_width (GTK_CONTAINER (addMeetingDialogData.dialog), 10);
986 gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.dialog), "delete_event",
987 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
989 button = gtk_button_new_with_label (_("Ok"));
990 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area),
991 button, TRUE, TRUE, 10);
992 gtk_signal_connect (GTK_OBJECT (button), "clicked",
993 GTK_SIGNAL_FUNC (OkAddMeetingDialog), (gpointer) &addMeetingDialogData);
994 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
995 gtk_widget_grab_default (button);
996 gtk_widget_show (button);
997 button = gtk_button_new_with_label (_("Cancel"));
998 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addMeetingDialogData.dialog)->action_area),
999 button, TRUE, TRUE, 10);
1000 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1001 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addMeetingDialogData.dialog);
1002 gtk_widget_show (button);
1004 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), 5);
1006 vbox = gtk_vbox_new (FALSE, 10);
1007 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addMeetingDialogData.dialog)->vbox), vbox);
1008 gtk_widget_show (vbox);
1010 hbox = gtk_hbox_new (FALSE, 0);
1011 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1012 gtk_widget_show (hbox);
1014 label = gtk_label_new (_("Date:"));
1015 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1016 gtk_widget_show (label);
1019 tm = localtime (&t);
1021 addMeetingDialogData.date.date.year = addMeetingDialogData.alarm.date.year =
1023 addMeetingDialogData.date.date.month = addMeetingDialogData.alarm.date.month =
1025 addMeetingDialogData.date.date.day = addMeetingDialogData.alarm.date.day =
1028 addMeetingDialogData.date.hours = addMeetingDialogData.alarm.hours = tm->tm_hour;
1029 addMeetingDialogData.date.minutes = addMeetingDialogData.alarm.minutes = tm->tm_min;
1031 button = gtk_button_new ();
1033 addMeetingDialogData.date.button = gtk_label_new ("");
1035 gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.date.button);
1036 SetDateTimeButton (&(addMeetingDialogData.date));
1038 gtk_widget_show (addMeetingDialogData.date.button);
1040 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1041 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1042 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.date));
1043 gtk_widget_show (button);
1045 hbox = gtk_hbox_new (FALSE, 0);
1046 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1047 gtk_widget_show (hbox);
1049 label = gtk_label_new (_("Name:"));
1050 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1051 gtk_widget_show (label);
1053 addMeetingDialogData.text = gtk_entry_new_with_max_length (30);
1054 gtk_box_pack_end (GTK_BOX (hbox), addMeetingDialogData.text, FALSE, FALSE, 2);
1055 gtk_widget_show (addMeetingDialogData.text);
1057 hbox = gtk_hbox_new (FALSE, 0);
1058 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1059 gtk_widget_show (hbox);
1061 addMeetingDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
1062 gtk_box_pack_start (GTK_BOX(hbox), addMeetingDialogData.alarmCheck, FALSE, FALSE, 2);
1063 // gtk_signal_connect (GTK_OBJECT (addMeetingDialogData.alarmCheck), "toggled",
1064 // GTK_SIGNAL_FUNC (TogleAlarm), &addMeetingDialogData);
1065 gtk_widget_show (addMeetingDialogData.alarmCheck);
1067 button = gtk_button_new ();
1069 addMeetingDialogData.alarm.button = gtk_label_new ("");
1071 gtk_container_add (GTK_CONTAINER (button), addMeetingDialogData.alarm.button);
1072 SetDateTimeButton (&(addMeetingDialogData.alarm));
1074 gtk_widget_show (addMeetingDialogData.alarm.button);
1076 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1077 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1078 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addMeetingDialogData.alarm));
1079 gtk_widget_show (button);
1082 gtk_widget_show (GTK_WIDGET (addMeetingDialogData.dialog));
1086 static void AddBirthday (void)
1088 GtkWidget *button, *hbox, *vbox, *label;
1092 if (addBirthdayDialogData.dialog == NULL)
1094 addBirthdayDialogData.dialog = gtk_dialog_new();
1095 gtk_window_set_title (GTK_WINDOW (addBirthdayDialogData.dialog), _("Add birthday"));
1096 gtk_window_position (GTK_WINDOW (addBirthdayDialogData.dialog), GTK_WIN_POS_MOUSE);
1097 gtk_window_set_modal(GTK_WINDOW (addBirthdayDialogData.dialog), TRUE);
1098 gtk_container_set_border_width (GTK_CONTAINER (addBirthdayDialogData.dialog), 10);
1099 gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.dialog), "delete_event",
1100 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
1102 button = gtk_button_new_with_label (_("Ok"));
1103 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area),
1104 button, TRUE, TRUE, 10);
1105 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1106 GTK_SIGNAL_FUNC (OkAddBdayDialog), (gpointer) &addBirthdayDialogData);
1107 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1108 gtk_widget_grab_default (button);
1109 gtk_widget_show (button);
1110 button = gtk_button_new_with_label (_("Cancel"));
1111 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (addBirthdayDialogData.dialog)->action_area),
1112 button, TRUE, TRUE, 10);
1113 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1114 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) addBirthdayDialogData.dialog);
1115 gtk_widget_show (button);
1117 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), 5);
1119 vbox = gtk_vbox_new (FALSE, 10);
1120 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (addBirthdayDialogData.dialog)->vbox), vbox);
1121 gtk_widget_show (vbox);
1123 hbox = gtk_hbox_new (FALSE, 0);
1124 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1125 gtk_widget_show (hbox);
1127 label = gtk_label_new (_("Date:"));
1128 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1129 gtk_widget_show (label);
1132 tm = localtime (&t);
1134 addBirthdayDialogData.date.year = addBirthdayDialogData.alarm.date.year =
1136 addBirthdayDialogData.date.month = addBirthdayDialogData.alarm.date.month =
1138 addBirthdayDialogData.date.day = addBirthdayDialogData.alarm.date.day =
1141 addBirthdayDialogData.alarm.hours = tm->tm_hour;
1142 addBirthdayDialogData.alarm.minutes = tm->tm_min;
1144 button = gtk_button_new ();
1146 addBirthdayDialogData.date.button = gtk_label_new ("");
1148 gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.date.button);
1149 SetDateButton (&(addBirthdayDialogData.date));
1151 gtk_widget_show (addBirthdayDialogData.date.button);
1153 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1154 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1155 GTK_SIGNAL_FUNC (ShowCalendar), (gpointer) &(addBirthdayDialogData.date));
1156 gtk_widget_show (button);
1158 hbox = gtk_hbox_new (FALSE, 0);
1159 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1160 gtk_widget_show (hbox);
1162 label = gtk_label_new (_("Name:"));
1163 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
1164 gtk_widget_show (label);
1166 addBirthdayDialogData.text = gtk_entry_new_with_max_length (30);
1167 gtk_box_pack_end (GTK_BOX (hbox), addBirthdayDialogData.text, FALSE, FALSE, 2);
1168 gtk_widget_show (addBirthdayDialogData.text);
1170 hbox = gtk_hbox_new (FALSE, 0);
1171 gtk_container_add (GTK_CONTAINER (vbox), hbox);
1172 gtk_widget_show (hbox);
1174 addBirthdayDialogData.alarmCheck = gtk_check_button_new_with_label (_("Alarm"));
1175 gtk_box_pack_start (GTK_BOX(hbox), addBirthdayDialogData.alarmCheck, FALSE, FALSE, 2);
1176 // gtk_signal_connect (GTK_OBJECT (addBirthdayDialogData.alarmCheck), "toggled",
1177 // GTK_SIGNAL_FUNC (TogleAlarm), &addBirthdayDialogData);
1178 gtk_widget_show (addBirthdayDialogData.alarmCheck);
1180 button = gtk_button_new ();
1182 addBirthdayDialogData.alarm.button = gtk_label_new ("");
1184 gtk_container_add (GTK_CONTAINER (button), addBirthdayDialogData.alarm.button);
1185 SetDateTimeButton (&(addBirthdayDialogData.alarm));
1187 gtk_widget_show (addBirthdayDialogData.alarm.button);
1189 gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 2);
1190 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1191 GTK_SIGNAL_FUNC (ShowCalTime), (gpointer) &(addBirthdayDialogData.alarm));
1192 gtk_widget_show (button);
1195 gtk_widget_show (GTK_WIDGET (addBirthdayDialogData.dialog));
1199 static void OkDeleteNoteDialog (GtkWidget *widget, gpointer data)
1201 GSM_CalendarNote *note;
1208 sel = GTK_CLIST (cal.notesClist)->selection;
1210 gtk_clist_freeze (GTK_CLIST (cal.notesClist));
1212 sel = g_list_sort (sel, ReverseSelection);
1216 row = GPOINTER_TO_INT (sel->data);
1219 note = (GSM_CalendarNote *) g_malloc (sizeof (GSM_CalendarNote));
1220 gtk_clist_get_text (GTK_CLIST (cal.notesClist), row, 0, &buf);
1221 note->Location = atoi (buf);
1223 e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
1224 e->event = Event_DeleteCalendarNote;
1226 GUI_InsertEvent (e);
1229 gtk_widget_hide (GTK_WIDGET (data));
1231 gtk_clist_thaw (GTK_CLIST (cal.notesClist));
1237 static void DeleteNote (void)
1239 static GtkWidget *dialog = NULL;
1240 GtkWidget *button, *hbox, *label, *pixmap;
1244 dialog = gtk_dialog_new();
1245 gtk_window_set_title (GTK_WINDOW (dialog), _("Delete calendar note"));
1246 gtk_window_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
1247 gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
1248 gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
1249 gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
1250 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
1252 button = gtk_button_new_with_label (_("Ok"));
1253 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
1254 button, TRUE, TRUE, 10);
1255 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1256 GTK_SIGNAL_FUNC (OkDeleteNoteDialog), (gpointer) dialog);
1257 GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
1258 gtk_widget_grab_default (button);
1259 gtk_widget_show (button);
1260 button = gtk_button_new_with_label (_("Cancel"));
1261 gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
1262 button, TRUE, TRUE, 10);
1263 gtk_signal_connect (GTK_OBJECT (button), "clicked",
1264 GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
1265 gtk_widget_show (button);
1267 gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
1269 hbox = gtk_hbox_new (FALSE, 0);
1270 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
1271 gtk_widget_show (hbox);
1273 pixmap = gtk_pixmap_new (questMark.pixmap, questMark.mask);
1274 gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 10);
1275 gtk_widget_show (pixmap);
1277 label = gtk_label_new (_("Do you want to delete selected note(s)?"));
1278 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 10);
1279 gtk_widget_show (label);
1282 gtk_widget_show (GTK_WIDGET (dialog));
1285 static GtkItemFactoryEntry menu_items[] = {
1286 { NULL, NULL, NULL, 0, "<Branch>"},
1287 { NULL, "<control>R", ReadCalNotes, 0, NULL},
1288 { NULL, "<control>S", NULL, 0, NULL},
1289 { NULL, NULL, NULL, 0, "<Separator>"},
1290 { NULL, "<control>X", NULL, 0, NULL},
1291 { NULL, NULL, NULL, 0, "<Separator>"},
1292 { NULL, "<control>I", NULL, 0, NULL},
1293 { NULL, "<control>E", NULL, 0, NULL},
1294 { NULL, NULL, NULL, 0, "<Separator>"},
1295 { NULL, "<control>W", CloseCalendar, 0, NULL},
1296 { NULL, NULL, NULL, 0, "<Branch>"},
1297 { NULL, "<control>N", NULL, 0, NULL},
1298 { NULL, "<control>C", NULL, 0, NULL},
1299 { NULL, "<control>M", NULL, 0, NULL},
1300 { NULL, "<control>B", NULL, 0, NULL},
1301 { NULL, NULL, NULL, 0, NULL},
1302 { NULL, "<control>D", DeleteNote, 0, NULL},
1303 { NULL, NULL, NULL, 0, "<Separator>"},
1304 { NULL, "<control>A", NULL, 0, NULL},
1305 { NULL, NULL, NULL, 0, "<LastBranch>"},
1306 { NULL, NULL, Help1, 0, NULL},
1307 { NULL, NULL, GUI_ShowAbout, 0, NULL},
1310 static void InitMainMenu (void)
1312 menu_items[0].path = g_strdup (_("/_File"));
1313 menu_items[1].path = g_strdup (_("/File/_Read from phone"));
1314 menu_items[2].path = g_strdup (_("/File/_Save to phone"));
1315 menu_items[3].path = g_strdup (_("/File/Sep1"));
1316 menu_items[4].path = g_strdup (_("/File/Send via S_MS"));
1317 menu_items[5].path = g_strdup (_("/File/Sep2"));
1318 menu_items[6].path = g_strdup (_("/File/_Import from file"));
1319 menu_items[7].path = g_strdup (_("/File/_Export to file"));
1320 menu_items[8].path = g_strdup (_("/File/Sep3"));
1321 menu_items[9].path = g_strdup (_("/File/_Close"));
1322 menu_items[10].path = g_strdup (_("/_Edit"));
1323 menu_items[11].path = g_strdup (_("/Edit/Add _reminder"));
1324 menu_items[12].path = g_strdup (_("/Edit/Add _call"));
1325 menu_items[13].path = g_strdup (_("/Edit/Add _meeting"));
1326 menu_items[14].path = g_strdup (_("/Edit/Add _birthday"));
1327 menu_items[15].path = g_strdup (_("/Edit/_Edit"));
1328 menu_items[16].path = g_strdup (_("/Edit/_Delete"));
1329 menu_items[17].path = g_strdup (_("/Edit/Sep4"));
1330 menu_items[18].path = g_strdup (_("/Edit/Select _all"));
1331 menu_items[19].path = g_strdup (_("/_Help"));
1332 menu_items[20].path = g_strdup (_("/Help/_Help"));
1333 menu_items[21].path = g_strdup (_("/Help/_About"));
1336 void GUI_CreateCalendarWindow ()
1338 int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
1339 GtkItemFactory *item_factory;
1340 GtkAccelGroup *accel_group;
1341 GtkWidget *menubar, *toolbar, *scrolledWindow, *hpaned;
1342 GtkWidget *main_vbox;
1346 SortColumn *sColumn;
1348 gchar *titles[6] = { _("#"), _("Type"), _("Date"), _("Text"),
1349 _("Alarm"), _("Number")};
1352 GUI_CalendarWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
1353 gtk_window_set_wmclass (GTK_WINDOW (GUI_CalendarWindow), "CalendarWindow", "Xgnokii");
1354 gtk_window_set_title (GTK_WINDOW (GUI_CalendarWindow), _("Calendar"));
1355 //gtk_widget_set_usize (GTK_WIDGET (GUI_CalendarWindow), 436, 220);
1356 gtk_signal_connect (GTK_OBJECT (GUI_CalendarWindow), "delete_event",
1357 GTK_SIGNAL_FUNC (DeleteEvent), NULL);
1358 gtk_widget_realize (GUI_CalendarWindow);
1360 accel_group = gtk_accel_group_new ();
1361 item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
1364 gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
1366 gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_CalendarWindow));
1368 /* Finally, return the actual menu bar created by the item factory. */
1369 menubar = gtk_item_factory_get_widget (item_factory, "<main>");
1371 main_vbox = gtk_vbox_new (FALSE, 1);
1372 gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
1373 gtk_container_add (GTK_CONTAINER (GUI_CalendarWindow), main_vbox);
1374 gtk_widget_show (main_vbox);
1376 gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
1377 gtk_widget_show (menubar);
1379 /* Create the toolbar */
1380 toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
1381 gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
1383 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
1384 NewPixmap(Read_xpm, GUI_CalendarWindow->window,
1385 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1386 (GtkSignalFunc) ReadCalNotes, NULL);
1387 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
1388 NewPixmap(Send_xpm, GUI_CalendarWindow->window,
1389 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1390 (GtkSignalFunc) NULL, NULL);
1392 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1394 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Send via SMS"), NULL,
1395 NewPixmap(SendSMS_xpm, GUI_CalendarWindow->window,
1396 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1397 (GtkSignalFunc) NULL, NULL);
1399 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1401 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
1402 NewPixmap(Open_xpm, GUI_CalendarWindow->window,
1403 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1404 (GtkSignalFunc) NULL, NULL);
1405 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
1406 NewPixmap(Save_xpm, GUI_CalendarWindow->window,
1407 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1408 (GtkSignalFunc) NULL, NULL);
1410 gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
1412 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit note"), NULL,
1413 NewPixmap(Edit_xpm, GUI_CalendarWindow->window,
1414 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1415 (GtkSignalFunc) NULL, NULL);
1416 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add reminder"), NULL,
1417 NewPixmap(NewRem_xpm, GUI_CalendarWindow->window,
1418 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1419 (GtkSignalFunc) AddReminder, NULL);
1420 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add call"), NULL,
1421 NewPixmap(NewCall_xpm, GUI_CalendarWindow->window,
1422 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1423 (GtkSignalFunc) AddCall, NULL);
1424 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add meeting"), NULL,
1425 NewPixmap(NewMeet_xpm, GUI_CalendarWindow->window,
1426 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1427 (GtkSignalFunc) AddMeeting, NULL);
1428 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Add birthday"), NULL,
1429 NewPixmap(NewBD_xpm, GUI_CalendarWindow->window,
1430 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1431 (GtkSignalFunc) AddBirthday, NULL);
1432 gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Delete note"), NULL,
1433 NewPixmap(Delete_xpm, GUI_CalendarWindow->window,
1434 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL]),
1435 (GtkSignalFunc) DeleteNote, NULL);
1437 gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
1438 gtk_widget_show (toolbar);
1440 hpaned = gtk_hpaned_new ();
1441 //gtk_paned_set_handle_size (GTK_PANED (hpaned), 10);
1442 //gtk_paned_set_gutter_size (GTK_PANED (hpaned), 15);
1443 gtk_box_pack_start (GTK_BOX (main_vbox), hpaned, TRUE, TRUE, 0);
1444 gtk_widget_show (hpaned);
1447 cal.noteText = gtk_text_new (NULL, NULL);
1448 gtk_text_set_editable (GTK_TEXT (cal.noteText), FALSE);
1449 gtk_text_set_word_wrap (GTK_TEXT (cal.noteText), TRUE);
1451 scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
1452 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
1454 GTK_POLICY_AUTOMATIC);
1456 gtk_paned_add1 (GTK_PANED (hpaned), scrolledWindow);
1458 gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.noteText);
1459 gtk_widget_show_all (scrolledWindow);
1462 cal.calendar = gtk_calendar_new ();
1465 tm = localtime (&t);
1466 gtk_calendar_select_month (GTK_CALENDAR (cal.calendar), tm->tm_mon, tm->tm_year + 1900);
1467 gtk_calendar_select_day (GTK_CALENDAR (cal.calendar), tm->tm_mday);
1469 gtk_paned_add2 (GTK_PANED (hpaned), cal.calendar);
1470 gtk_widget_show (cal.calendar);
1473 cal.notesClist = gtk_clist_new_with_titles (6, titles);
1474 gtk_clist_set_shadow_type (GTK_CLIST (cal.notesClist), GTK_SHADOW_OUT);
1475 gtk_clist_set_compare_func (GTK_CLIST (cal.notesClist), CListCompareFunc);
1476 gtk_clist_set_sort_column (GTK_CLIST (cal.notesClist), 0);
1477 gtk_clist_set_sort_type (GTK_CLIST (cal.notesClist), GTK_SORT_ASCENDING);
1478 gtk_clist_set_auto_sort (GTK_CLIST (cal.notesClist), FALSE);
1479 gtk_clist_set_selection_mode (GTK_CLIST (cal.notesClist), GTK_SELECTION_EXTENDED);
1481 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 0, 15);
1482 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 1, 52);
1483 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 2, 110);
1484 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 3, 130);
1485 gtk_clist_set_column_width (GTK_CLIST (cal.notesClist), 4, 110);
1486 gtk_clist_set_column_justification (GTK_CLIST (cal.notesClist), 0, GTK_JUSTIFY_RIGHT);
1488 for (i = 0; i < 6; i++)
1490 if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
1492 g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
1495 sColumn->clist = cal.notesClist;
1496 sColumn->column = i;
1497 gtk_signal_connect (GTK_OBJECT (GTK_CLIST (cal.notesClist)->column[i].button), "clicked",
1498 GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
1501 gtk_signal_connect (GTK_OBJECT (cal.notesClist), "select_row",
1502 GTK_SIGNAL_FUNC (ClickEntry), NULL);
1504 scrolledWindow = gtk_scrolled_window_new (NULL, NULL);
1505 gtk_widget_set_usize (scrolledWindow, 550, 100);
1506 gtk_container_add (GTK_CONTAINER (scrolledWindow), cal.notesClist);
1507 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledWindow),
1508 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
1510 gtk_box_pack_end (GTK_BOX (main_vbox), scrolledWindow,
1513 gtk_widget_show (cal.notesClist);
1514 gtk_widget_show (scrolledWindow);
1516 cmap = gdk_colormap_get_system();
1517 cal.colour.red = 0xffff;
1518 cal.colour.green = 0;
1519 cal.colour.blue = 0;
1520 if (!gdk_color_alloc (cmap, &(cal.colour)))
1521 g_error (_("couldn't allocate colour"));
1523 questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_CalendarWindow->window,
1525 &GUI_CalendarWindow->style->bg[GTK_STATE_NORMAL],
1528 CreateErrorDialog (&errorDialog, GUI_CalendarWindow);