--- /dev/null
+/*
+
+ X G N O K I I
+
+ A Linux/Unix GUI for Nokia mobile phones.
+
+ Released under the terms of the GNU GPL, see file COPYING for more details.
+
+*/
+
+#include <stdlib.h> /* for getenv */
+#include <locale.h>
+#include <string.h>
+#include <time.h> /* for time */
+#include <pthread.h>
+
+#ifndef WIN32
+# include <unistd.h> /* for usleep */
+# include <signal.h>
+#else
+# include <windows.h>
+# include "../win32/winserial.h"
+# define WRITEPHONE(a, b, c) WriteCommBlock(b, c)
+# undef IN
+# undef OUT
+# define sleep(x) Sleep((x) * 1000)
+# define usleep(x) Sleep(((x) < 1000) ? 1 : ((x) / 1000))
+#endif
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "misc.h"
+#include "gsm-common.h"
+#include "gsm-api.h"
+#include "files/cfgreader.h"
+#include "xgnokii.h"
+#include "xgnokii_common.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_contacts.h"
+#include "xgnokii_sms.h"
+#include "xgnokii_netmon.h"
+#include "xgnokii_dtmf.h"
+#include "xgnokii_speed.h"
+#include "xgnokii_xkeyb.h"
+#include "xgnokii_calendar.h"
+#include "xgnokii_logos.h"
+#include "xgnokii_xring.h"
+#include "xgnokii_cfg.h"
+#include "xgnokii_data.h"
+#include "newmodules/n6110.h"
+
+#include "xpm/logo.xpm"
+#include "xpm/background.xpm"
+#include "xpm/sms.xpm"
+#include "xpm/alarm.xpm"
+
+/* Widgets for dialogs. */
+static GtkWidget *SplashWindow;
+static GtkWidget *GUI_MainWindow;
+static GtkWidget *AboutDialog;
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static GtkWidget *OptionsDialog;
+static bool optionsDialogIsOpened;
+
+/* SMS sets list */
+static GtkWidget *SMSClist;
+
+/* Pixmap used for drawing all the stuff. */
+static GdkPixmap *Pixmap = NULL;
+
+/* Pixmap used for background. */
+static GdkPixmap *BackgroundPixmap = NULL;
+
+/* Pixmap used for SMS picture. */
+static GdkPixmap *SMSPixmap = NULL;
+
+/* Pixmap used for alarm picture. */
+static GdkPixmap *AlarmPixmap = NULL;
+
+
+/* Widget for popup menu */
+static GtkWidget *Menu;
+static GtkWidget *netmon_menu_item;
+static GtkWidget *sms_menu_item;
+static GtkWidget *calendar_menu_item;
+static GtkWidget *logos_menu_item;
+static GtkWidget *dtmf_menu_item;
+static GtkWidget *speedDial_menu_item;
+static GtkWidget *xkeyb_menu_item;
+static GtkWidget *cg_names_option_frame;
+static GtkWidget *sms_option_frame;
+static GtkWidget *mail_option_frame;
+static GtkWidget *user_option_frame;
+static GtkWidget *data_menu_item;
+
+/* Hold main configuration data for xgnokii */
+XgnokiiConfig xgnokiiConfig;
+
+gint max_phonebook_name_length;
+gint max_phonebook_number_length;
+gint max_phonebook_sim_name_length;
+gint max_phonebook_sim_number_length;
+
+/* Local variables */
+static char *DefaultXGnokiiDir = XGNOKIIDIR;
+static char *DefaultXGnokiiDocsDir = XGNOKIIDOCSDIR;
+static bool SMSSettingsInitialized = FALSE;
+static bool CallersGroupsInitialized = FALSE;
+static bool SMSFoldersInitialized = FALSE;
+static gint hiddenCallDialog;
+static guint splashRemoveHandler;
+
+GSM_SMSFolders folders;
+
+static struct CallDialog {
+ GtkWidget *dialog;
+ GtkWidget *label;
+} inCallDialog;
+
+typedef struct {
+ GtkWidget *alarmSwitch;
+ GtkWidget *alarmHour;
+ GtkWidget *alarmMin;
+} AlarmWidgets;
+
+typedef struct {
+ GtkWidget *port;
+ GtkWidget *model;
+ GtkWidget *init;
+ GtkWidget *bindir;
+ GtkWidget *serial, *infrared, *mbus;
+} ConnectionWidgets;
+
+typedef struct {
+ GtkWidget *model;
+ GtkWidget *version;
+ GtkWidget *revision;
+ GtkWidget *imei;
+ GtkWidget *simNameLen;
+ GtkWidget *phoneNameLen;
+} PhoneWidgets;
+
+typedef struct {
+ GtkWidget *set;
+ GtkWidget *number;
+ GtkWidget *defaultrecipient;
+ GtkWidget *format;
+ GtkWidget *validity;
+ GSM_MessageCenter smsSetting[MAX_SMS_CENTER];
+} SMSWidgets;
+
+typedef struct {
+ GtkWidget *name;
+ GtkWidget *title;
+ GtkWidget *company;
+ GtkWidget *telephone;
+ GtkWidget *fax;
+ GtkWidget *email;
+ GtkWidget *address;
+ GtkWidget *status;
+ gint max;
+ gint used;
+} UserWidget;
+
+static struct ConfigDialogData
+{
+ ConnectionWidgets connection;
+ PhoneWidgets phone;
+ GtkWidget *groups[6];
+ AlarmWidgets alarm;
+ SMSWidgets sms;
+ UserWidget user;
+ GtkWidget *mailbox;
+ GtkWidget *help;
+} configDialogData;
+
+static GSM_MessageCenter tempMessageSettings;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/main/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+void GUI_InitSMSFoldersInf (void)
+{
+ if (SMSFoldersInitialized)
+ return;
+
+ GSM->GetSMSFolders(&folders);
+
+ SMSFoldersInitialized = TRUE;
+ GUIEventSend (GUI_EVENT_SMS_FOLDERS_CHANGED);
+}
+
+void GUI_InitCallerGroupsInf (void)
+{
+ D_CallerGroup *cg;
+ PhoneEvent *e;
+ register gint i;
+
+ if (CallersGroupsInitialized)
+ return;
+
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading caller groups names ..."));
+ gtk_widget_show_now (infoDialog.dialog);
+ GUI_Refresh ();
+
+ xgnokiiConfig.callerGroups[0] = g_strndup( _("Familly"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[1] = g_strndup( _("VIP"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[2] = g_strndup( _("Friends"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[3] = g_strndup( _("Colleagues"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[4] = g_strndup( _("Other"), MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[5] = g_strndup( _("No group"), MAX_CALLER_GROUP_LENGTH);
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ for (i = 0; i < 5; i++)
+ {
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = i;
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&callerGroupMutex);
+ pthread_cond_wait (&callerGroupCond, &callerGroupMutex);
+ pthread_mutex_unlock (&callerGroupMutex);
+
+ if (*cg->text != '\0' && cg->status == GE_NONE)
+ {
+ g_free (xgnokiiConfig.callerGroups[i]);
+ xgnokiiConfig.callerGroups[i] = g_strndup (cg->text, MAX_CALLER_GROUP_LENGTH);
+ }
+ g_free (cg);
+ }
+
+ CallersGroupsInitialized = TRUE;
+ gtk_widget_hide (infoDialog.dialog);
+ GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED);
+}
+
+
+static inline void DrawBackground (GtkWidget *data)
+{
+ gdk_draw_pixmap (Pixmap,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ BackgroundPixmap,
+ 0, 0,
+ 0, 0,
+ 261, 96);
+}
+
+int network_levels[] = {
+ 152, 69, 11, 3,
+ 138, 69, 11, 3,
+ 124, 69, 11, 4,
+ 110, 69, 11, 6
+};
+
+
+static inline void DrawNetwork (GtkWidget *data, int rflevel)
+{
+ int i;
+
+ if (rflevel > 100)
+ rflevel = 100;
+ for (i = 0; (i * 25) <= rflevel; i++)
+ {
+ float percent = ((float) rflevel - i * 25) / 25;
+
+ if (percent > 1)
+ percent = 1;
+ gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE,
+ network_levels[4 * i] + network_levels[4 * i + 2] * (1 - percent),
+ network_levels[4 * i + 1],
+ network_levels[4 * i + 2] * percent,
+ network_levels[4 * i + 3]);
+ }
+}
+
+
+int battery_levels[] = {
+ 50, 69, 11, 3,
+ 64, 69, 11, 3,
+ 78, 69, 11, 4,
+ 92, 69, 11, 6
+};
+
+static inline void DrawBattery (GtkWidget *data, int batterylevel)
+{
+ int i;
+
+ if (batterylevel < 0)
+ return;
+ if (batterylevel > 100)
+ batterylevel = 100;
+ for (i = 0; (i * 25) <= batterylevel; i++)
+ {
+ float percent = ((float) batterylevel - i * 25) / 25;
+ if (percent > 1)
+ percent = 1;
+ gdk_draw_rectangle (Pixmap, GTK_WIDGET (data)->style->white_gc, TRUE,
+ battery_levels[4 * i],
+ battery_levels[4 * i + 1],
+ battery_levels[4 * i + 2] * percent,
+ battery_levels[4 * i + 3]);
+ }
+}
+
+static inline void DrawSMS (GtkWidget *data)
+{
+ gdk_draw_pixmap (Pixmap,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ SMSPixmap,
+ 0, 0,
+ 25, 47,
+ 26, 7);
+}
+
+
+static inline void DrawAlarm (GtkWidget *data)
+{
+ gdk_draw_pixmap (Pixmap,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ AlarmPixmap,
+ 0, 0,
+ 163, 11,
+ 9, 9);
+}
+
+static inline void DrawText (GtkWidget *data, int at, char *text)
+{
+ static GdkFont *Font;
+
+ Font = gdk_font_load ("-misc-fixed-medium-r-*-*-*-90-*-*-*-*-*-*");
+ gdk_draw_string (Pixmap,
+ Font,
+ GTK_WIDGET(data)->style->fg_gc[GTK_STATE_NORMAL],
+ 33, at, text);
+}
+
+
+static inline void DrawSMSReceived (GtkWidget *data)
+{
+ DrawText (data, 25, _("Short Message received"));
+}
+
+
+static inline void DrawWorking (GtkWidget *data)
+{
+ DrawText(data, 40, _("Working ..."));
+}
+
+
+static inline void HideCallDialog (GtkWidget *widget, gpointer data)
+{
+ hiddenCallDialog = 1;
+ gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+static void CreateInCallDialog (void)
+{
+ GtkWidget *button, *hbox;
+
+ inCallDialog.dialog = gtk_dialog_new ();
+ gtk_window_position (GTK_WINDOW (inCallDialog.dialog), GTK_WIN_POS_MOUSE);
+ gtk_window_set_title (GTK_WINDOW (inCallDialog.dialog), _("Call in progress"));
+ gtk_container_set_border_width (GTK_CONTAINER (inCallDialog.dialog), 5);
+ gtk_signal_connect (GTK_OBJECT (inCallDialog.dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->vbox), hbox, FALSE, FALSE, 5);
+ gtk_widget_show (hbox);
+
+ inCallDialog.label = gtk_label_new ("");
+ gtk_box_pack_start (GTK_BOX (hbox), inCallDialog.label, FALSE, FALSE, 0);
+ gtk_widget_show (inCallDialog.label);
+
+ button = gtk_button_new_with_label (_("Hide"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (inCallDialog.dialog)->action_area),
+ button, TRUE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (HideCallDialog), (gpointer) inCallDialog.dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+}
+
+
+static gint Update (gpointer data)
+{
+ static gchar lastCallNum[20] = "";
+ static gchar callBuf[80];
+ static gchar timeBuf[10];
+ static gchar *anonym = "anonymous";
+ static struct tm stm;
+ static gint smsNumber = 0;
+ static gint callTimerStart = 0;
+ gint callTimer = 0;
+ time_t t;
+ static gchar *name;
+ static bool outgoing = TRUE;
+
+
+ /* The number of SMS messages before second */
+ static int smsold=0;
+
+ /* The number of second for we should display "Short Message Received" message */
+ static int smsreceived=-1;
+
+ DrawBackground (data);
+
+ DrawNetwork(data, phoneMonitor.rfLevel);
+
+ DrawBattery(data, phoneMonitor.batteryLevel);
+
+ if (phoneMonitor.alarm)
+ DrawAlarm (data);
+
+ if (phoneMonitor.working)
+ DrawText (data, 25, phoneMonitor.working);
+
+ pthread_mutex_lock (&smsMutex);
+ if (phoneMonitor.sms.unRead > 0)
+ {
+ DrawSMS (data);
+
+ if (phoneMonitor.sms.unRead > smsold && smsold != -1)
+ smsreceived = 10; /* The message "Short Message Received" is displayed for 10s */
+ }
+ if (smsNumber != phoneMonitor.sms.number)
+ GUIEventSend (GUI_EVENT_SMS_NUMBER_CHANGED);
+
+ smsold = phoneMonitor.sms.unRead;
+
+ smsNumber = phoneMonitor.sms.number;
+
+ pthread_mutex_unlock (&smsMutex);
+
+ if (smsreceived >= 0)
+ {
+ DrawSMSReceived (data);
+ smsreceived--;
+ }
+
+ pthread_mutex_lock (&callMutex);
+ if (phoneMonitor.call.callInProgress != CS_Idle)
+ {
+ if (phoneMonitor.call.callInProgress == CS_InProgress)
+ {
+ if (!callTimerStart)
+ callTimerStart = callTimer = time (NULL);
+ else
+ callTimer = time (NULL);
+ }
+
+ if (phoneMonitor.call.callInProgress == CS_Waiting)
+ {
+ outgoing = FALSE;
+
+ if (*phoneMonitor.call.callNum == '\0')
+ name = anonym;
+ else if (strncmp (phoneMonitor.call.callNum, lastCallNum, 20))
+ {
+ strncpy (lastCallNum, phoneMonitor.call.callNum, 20);
+ lastCallNum[19] = '\0';
+ name = GUI_GetName (phoneMonitor.call.callNum);
+ if (!name)
+ name = phoneMonitor.call.callNum;
+ }
+ }
+ t = (time_t) difftime (callTimer, callTimerStart);
+ (void) gmtime_r (&t, &stm);
+ strftime (timeBuf, 10, "%T", &stm);
+ if (outgoing)
+ g_snprintf (callBuf, 80, _("Outgoing call in progress:\nTime: %s"),
+ timeBuf);
+ else
+ g_snprintf (callBuf, 80, _("Incomming call from: %s\nTime: %s"),
+ name, timeBuf);
+
+ gtk_label_set_text (GTK_LABEL (inCallDialog.label), callBuf);
+ if (!GTK_WIDGET_VISIBLE (inCallDialog.dialog) && !hiddenCallDialog)
+ gtk_widget_show (inCallDialog.dialog);
+ }
+ else
+ {
+ callTimerStart = callTimer = 0;
+ *lastCallNum = '\0';
+ outgoing = TRUE;
+ if (GTK_WIDGET_VISIBLE (inCallDialog.dialog))
+ gtk_widget_hide (inCallDialog.dialog);
+ hiddenCallDialog = 0;
+ }
+ pthread_mutex_unlock (&callMutex);
+
+ gtk_widget_draw (data,NULL);
+
+ GUIEventSend (GUI_EVENT_NETMON_CHANGED);
+
+ return TRUE;
+}
+
+
+/* Redraw the screen from the backing pixmap */
+static inline gint ExposeEvent (GtkWidget *widget, GdkEventExpose *event)
+{
+ gdk_draw_pixmap (widget->window,
+ widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
+ Pixmap,
+ event->area.x, event->area.y,
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
+
+ return FALSE;
+}
+
+
+static void ParseSMSCenters (void)
+{
+ register gint i;
+ register gint j;
+
+ gtk_clist_freeze (GTK_CLIST (SMSClist));
+
+ gtk_clist_clear (GTK_CLIST (SMSClist));
+
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ {
+ gchar *row[5];
+ if (*(configDialogData.sms.smsSetting[i].Name) == '\0')
+ row[0] = g_strdup_printf (_("Set %d"), i + 1);
+ else
+ row[0] = g_strdup (configDialogData.sms.smsSetting[i].Name);
+
+ row[1] = g_strdup (configDialogData.sms.smsSetting[i].Number);
+
+ switch (configDialogData.sms.smsSetting[i].Format)
+ {
+ case GSMF_Text:
+ row[2] = g_strdup (_("Text"));
+ break;
+
+ case GSMF_Paging:
+ row[2] = g_strdup (_("Paging"));
+ break;
+
+ case GSMF_Fax:
+ row[2] = g_strdup (_("Fax"));
+ break;
+
+ case GSMF_Email:
+ case GSMF_UCI:
+ row[2] = g_strdup (_("E-Mail"));
+ break;
+
+ case GSMF_ERMES:
+ row[2] = g_strdup (_("ERMES"));
+ break;
+
+ case GSMF_X400:
+ row[2] = g_strdup (_("X.400"));
+ break;
+
+ case GSMF_Voice:
+ row[2] = g_strdup (_("Voice"));
+ break;
+
+ default:
+ row[2] = g_strdup (_("Text"));
+ break;
+ }
+
+ switch (configDialogData.sms.smsSetting[i].Validity)
+ {
+ case GSMV_1_Hour:
+ row[3] = g_strdup (_("1 h"));
+ break;
+
+ case GSMV_6_Hours:
+ row[3] = g_strdup (_("6 h"));
+ break;
+
+ case GSMV_24_Hours:
+ row[3] = g_strdup (_("24 h"));
+ break;
+
+ case GSMV_72_Hours:
+ row[3] = g_strdup (_("72 h"));
+ break;
+
+ case GSMV_1_Week:
+ row[3] = g_strdup (_("1 week"));
+ break;
+
+ case GSMV_Max_Time:
+ row[3] = g_strdup (_("Max. time"));
+ break;
+
+ default:
+ row[3] = g_strdup (_("24 h"));
+ break;
+ }
+
+ row[4] = g_strdup (configDialogData.sms.smsSetting[i].DefaultRecipient);
+
+ gtk_clist_append( GTK_CLIST (SMSClist), row);
+
+ for (j = 0; j < 5; j++)
+ g_free (row[j]);
+ }
+
+ gtk_clist_thaw (GTK_CLIST (SMSClist));
+}
+
+
+static void RefreshUserStatus (void)
+{
+ gchar buf[8];
+ configDialogData.user.used = GTK_ENTRY (configDialogData.user.name)->text_length
+ + GTK_ENTRY (configDialogData.user.title)->text_length
+ + GTK_ENTRY (configDialogData.user.company)->text_length
+ + GTK_ENTRY (configDialogData.user.telephone)->text_length
+ + GTK_ENTRY (configDialogData.user.fax)->text_length
+ + GTK_ENTRY (configDialogData.user.email)->text_length
+ + GTK_ENTRY (configDialogData.user.address)->text_length;
+ configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH;
+ if (GTK_ENTRY (configDialogData.user.telephone)->text_length > 0)
+ configDialogData.user.max -= 4;
+ if (GTK_ENTRY (configDialogData.user.fax)->text_length > 0)
+ configDialogData.user.max -= 4;
+ g_snprintf (buf, 8, "%d/%d", configDialogData.user.used, configDialogData.user.max);
+ gtk_label_set_text (GTK_LABEL (configDialogData.user.status), buf);
+}
+
+
+void GUI_InitSMSSettings (void)
+{
+ PhoneEvent *e;
+ D_SMSCenter *c;
+ register gint i;
+
+ if (SMSSettingsInitialized)
+ return;
+
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading SMS centers ..."));
+ gtk_widget_show_now (infoDialog.dialog);
+ GUI_Refresh ();
+
+ for (i = 1; i <= MAX_SMS_CENTER; i++)
+ {
+ xgnokiiConfig.smsSetting[i - 1].No = i;
+ c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter));
+ c->center = &(xgnokiiConfig.smsSetting[i - 1]);
+
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetSMSCenter;
+ e->data = c;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&smsCenterMutex);
+ pthread_cond_wait (&smsCenterCond, &smsCenterMutex);
+ pthread_mutex_unlock (&smsCenterMutex);
+
+ if (c->status != GE_NONE)
+ break;
+
+ g_free (c);
+
+ configDialogData.sms.smsSetting[i - 1] = xgnokiiConfig.smsSetting[i - 1];
+ }
+
+ xgnokiiConfig.smsSets = i - 1;
+
+ ParseSMSCenters ();
+
+ SMSSettingsInitialized = TRUE;
+
+ gtk_widget_hide (infoDialog.dialog);
+}
+
+
+void GUI_ShowOptions (void)
+{
+ PhoneEvent *e;
+ D_Alarm *alarm;
+ register gint i;
+
+ if (optionsDialogIsOpened)
+ return;
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.port), xgnokiiConfig.port);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.model), xgnokiiConfig.model);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.init), xgnokiiConfig.initlength);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.connection.bindir), xgnokiiConfig.bindir);
+
+ if (!strcmp(xgnokiiConfig.connection, "fbus"))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.serial), TRUE);
+
+ if (!strcmp(xgnokiiConfig.connection, "infrared"))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.infrared), TRUE);
+
+ if (!strcmp(xgnokiiConfig.connection, "mbus"))
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.connection.mbus), TRUE);
+
+ /* Phone */
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.model), phoneMonitor.phone.model);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.version), phoneMonitor.phone.version);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.revision), phoneMonitor.phone.revision);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.phone.imei), phoneMonitor.phone.imei);
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen),
+ atof (xgnokiiConfig.maxSIMLen));
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen),
+ atof (xgnokiiConfig.maxPhoneLen));
+
+ /* Alarm */
+ alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm));
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_GetAlarm;
+ e->data = alarm;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&alarmMutex);
+ pthread_cond_wait (&alarmCond, &alarmMutex);
+ pthread_mutex_unlock (&alarmMutex);
+
+ if (alarm->status != GE_NONE)
+ {
+ xgnokiiConfig.alarmSupported = FALSE;
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), 0.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), 0.0);
+ }
+ else
+ {
+ xgnokiiConfig.alarmSupported = TRUE;
+ if (alarm->time.IsSet)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), TRUE);
+ else
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch), FALSE);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), alarm->time.Hour);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), alarm->time.Minute);
+ }
+ g_free (alarm);
+
+ /* SMS */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ gtk_widget_show (sms_option_frame);
+ GUI_InitSMSSettings ();
+ }
+ else
+ gtk_widget_hide (sms_option_frame);
+
+
+ /* BUSINESS CARD */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ gtk_widget_show (user_option_frame);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.name),
+ xgnokiiConfig.user.name);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.title),
+ xgnokiiConfig.user.title);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.company),
+ xgnokiiConfig.user.company);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.telephone),
+ xgnokiiConfig.user.telephone);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.fax),
+ xgnokiiConfig.user.fax);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.email),
+ xgnokiiConfig.user.email);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.user.address),
+ xgnokiiConfig.user.address);
+
+ RefreshUserStatus();
+ }
+ else
+ gtk_widget_hide (user_option_frame);
+
+
+ /* Groups */
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ gtk_widget_show (cg_names_option_frame);
+ GUI_InitCallerGroupsInf ();
+ for ( i = 0; i < 6; i++)
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.groups[i]), xgnokiiConfig.callerGroups[i]);
+ }
+ else
+ gtk_widget_hide (cg_names_option_frame);
+
+ /* Mail */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ gtk_widget_show (mail_option_frame);
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.mailbox),
+ xgnokiiConfig.mailbox);;
+ }
+ else
+ gtk_widget_hide (mail_option_frame);
+
+ /* Help */
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.help),
+ xgnokiiConfig.helpviewer);
+
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0) {} else
+ gtk_clist_set_column_visibility (GTK_CLIST (SMSClist), 4, (GetModelFeature(FN_SMSCDEFAULT)!=0));
+
+ optionsDialogIsOpened = TRUE;
+ gtk_widget_show (OptionsDialog);
+}
+
+
+inline void GUI_ShowAbout (void)
+{
+ gtk_widget_show (AboutDialog);
+}
+
+
+inline void GUI_HideAbout(void)
+{
+ gtk_widget_hide (AboutDialog);
+}
+
+
+static void MainExit (void)
+{
+ PhoneEvent *e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+
+ e->event = Event_Exit;
+ e->data = NULL;
+ GUI_InsertEvent (e);
+ pthread_join (monitor_th, NULL);
+
+ //need to correctly close connection
+ GSM->Terminate();
+
+ gtk_main_quit();
+}
+
+
+static void ShowMenu (GdkEventButton *event)
+{
+ GdkEventButton *bevent = (GdkEventButton *) event;
+
+ if (GetModelFeature(FN_KEYPRESS)!=0)
+ gtk_widget_show (xkeyb_menu_item);
+ else
+ gtk_widget_hide (xkeyb_menu_item);
+
+ if (GetModelFeature(FN_NETMONITOR)!=0)
+ gtk_widget_show (netmon_menu_item);
+ else
+ gtk_widget_hide (netmon_menu_item);
+
+ if (GetModelFeature(FN_SMS)!=0)
+ gtk_widget_show (sms_menu_item);
+ else
+ gtk_widget_hide (sms_menu_item);
+
+ if (GetModelFeature(FN_CALENDAR)!=0)
+ gtk_widget_show (calendar_menu_item);
+ else
+ gtk_widget_hide (calendar_menu_item);
+
+ if (GetModelFeature(FN_DTMF)!=0)
+ gtk_widget_show (dtmf_menu_item);
+ else
+ gtk_widget_hide (dtmf_menu_item);
+
+ if (GetModelFeature(FN_SPEEDDIAL)!=0)
+ gtk_widget_show (speedDial_menu_item);
+ else
+ gtk_widget_hide (speedDial_menu_item);
+
+ if (GetModelFeature(FN_DATACALLS)!=0)
+ gtk_widget_show (data_menu_item);
+ else
+ gtk_widget_hide (data_menu_item);
+
+ gtk_menu_popup (GTK_MENU (Menu), NULL, NULL, NULL, NULL,
+ bevent->button, bevent->time);
+}
+
+
+static gint ButtonPressEvent (GtkWidget *widget, GdkEventButton *event)
+{
+ /* Left button */
+ if (event->button == 1) {
+
+ /* Close */
+ if (event->x >= 206 && event->x <= 221 &&
+ event->y >= 42 && event->y <= 55)
+ {
+ if (GUI_ContactsIsChanged())
+ GUI_QuitSaveContacts();
+ else
+ MainExit ();
+ }
+ else if ((event->x >= 180 && event->x <= 195 &&
+ event->y >= 30 && event->y <= 50) ||
+ (event->x >= 185 && event->x <= 215 &&
+ event->y >= 15 && event->y <= 30))
+ {
+ GUI_ShowContacts ();
+ }
+ else if (event->x >= 190 && event->x <= 210 &&
+ event->y >= 70 && event->y <= 85)
+ {
+ if (GetModelFeature(FN_SMS)==0)
+ phoneMonitor.working = _("SMS not supported!");
+ else
+ GUI_ShowSMS ();
+ }
+ else if (event->x >= 235 && event->x <= 248 &&
+ event->y >= 27 && event->y <= 75)
+ {
+ if (GetModelFeature(FN_CALENDAR)==0)
+ phoneMonitor.working = _("Calendar not supported!");
+ else
+ GUI_ShowCalendar ();
+ }
+ else if (event->x >= 245 && event->x <= 258 &&
+ event->y >= 83 && event->y <= 93)
+ {
+ GUI_ShowOptions();
+ }
+ } /* Right button */
+ else if (event->button == 3)
+ ShowMenu (event);
+
+ // g_print ("event->x: %f\n", event->x);
+ // g_print ("event->y: %f\n", event->y);
+
+ return TRUE;
+}
+
+
+static void OptionsApplyCallback (GtkWidget *widget, gpointer data )
+{
+ PhoneEvent *e;
+ D_Alarm *alarm;
+ register gint i;
+
+ /* Phone */
+ max_phonebook_sim_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen));
+ max_phonebook_name_length = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen));
+ g_free (xgnokiiConfig.maxSIMLen);
+ g_free (xgnokiiConfig.maxPhoneLen);
+ xgnokiiConfig.maxSIMLen = g_strdup_printf ("%d", max_phonebook_sim_name_length);
+ xgnokiiConfig.maxPhoneLen = g_strdup_printf ("%d", max_phonebook_name_length);
+
+ /* ALARM */
+ /* From fbus-6110.c
+ FIXME: we should also allow to set the alarm off :-) */
+ if (xgnokiiConfig.alarmSupported
+ && GTK_TOGGLE_BUTTON (configDialogData.alarm.alarmSwitch)->active)
+ {
+ alarm = (D_Alarm *) g_malloc (sizeof (D_Alarm));
+ alarm->time.Hour = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour));
+ alarm->time.Minute = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin));
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SetAlarm;
+ e->data = alarm;
+ GUI_InsertEvent (e);
+ }
+
+ /* SMS */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ xgnokiiConfig.smsSetting[i] = configDialogData.sms.smsSetting[i];
+ GUIEventSend (GUI_EVENT_SMS_CENTERS_CHANGED);
+ }
+
+ /* BUSINESS CARD */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ g_free(xgnokiiConfig.user.name);
+ xgnokiiConfig.user.name = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.name)));
+ g_free(xgnokiiConfig.user.title);
+ xgnokiiConfig.user.title = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.title)));
+ g_free(xgnokiiConfig.user.company);
+ xgnokiiConfig.user.company = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.company)));
+ g_free(xgnokiiConfig.user.telephone);
+ xgnokiiConfig.user.telephone = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.telephone)));
+ g_free(xgnokiiConfig.user.fax);
+ xgnokiiConfig.user.fax = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.fax)));
+ g_free(xgnokiiConfig.user.email);
+ xgnokiiConfig.user.email = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.email)));
+ g_free(xgnokiiConfig.user.address);
+ xgnokiiConfig.user.address = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.user.address)));
+ }
+
+ /* GROUPS */
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ for ( i = 0; i < 6; i++)
+ {
+ strncpy(xgnokiiConfig.callerGroups[i],
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.groups[i])),
+ MAX_CALLER_GROUP_LENGTH);
+ xgnokiiConfig.callerGroups[i][MAX_CALLER_GROUP_LENGTH] = '\0';
+ }
+ GUIEventSend (GUI_EVENT_CALLERS_GROUPS_CHANGED);
+ GUIEventSend (GUI_EVENT_CONTACTS_CHANGED);
+ }
+
+ /* Mail */
+ if (GetModelFeature(FN_SMS)!=0)
+ {
+ g_free(xgnokiiConfig.mailbox);
+ xgnokiiConfig.mailbox = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.mailbox)));
+ }
+
+ /* Help */
+ g_free(xgnokiiConfig.helpviewer);
+ xgnokiiConfig.helpviewer = g_strdup (gtk_entry_get_text(GTK_ENTRY (configDialogData.help)));
+}
+
+
+static void OptionsSaveCallback (GtkWidget *widget, gpointer data )
+{
+ D_CallerGroup *cg;
+ D_SMSCenter *c;
+ PhoneEvent *e;
+ register gint i;
+
+ //gtk_widget_hide(GTK_WIDGET(data));
+ OptionsApplyCallback (widget, data);
+ for (i = 0; i < xgnokiiConfig.smsSets; i++)
+ {
+ xgnokiiConfig.smsSetting[i].No = i + 1;
+ c = (D_SMSCenter *) g_malloc (sizeof (D_SMSCenter));
+ c->center = &(xgnokiiConfig.smsSetting[i]);
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SetSMSCenter;
+ e->data = c;
+ GUI_InsertEvent (e);
+ }
+
+ if (GetModelFeature(FN_CALLERGROUPS)!=0)
+ {
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 0;
+ if (strcmp (xgnokiiConfig.callerGroups[0], _("Familly")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[0], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 1;
+ if (strcmp (xgnokiiConfig.callerGroups[1], _("VIP")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[1], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 2;
+ if (strcmp (xgnokiiConfig.callerGroups[2], _("Friends")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[2], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 3;
+ if (strcmp (xgnokiiConfig.callerGroups[3], _("Colleagues")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[3], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+
+ cg = (D_CallerGroup *) g_malloc (sizeof (D_CallerGroup));
+ cg->number = 4;
+ if (strcmp (xgnokiiConfig.callerGroups[4], _("Other")) == 0)
+ *cg->text = '\0';
+ else
+ strncpy (cg->text, xgnokiiConfig.callerGroups[4], 256);
+ cg->text[255] = '\0';
+ e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent));
+ e->event = Event_SendCallerGroup;
+ e->data = cg;
+ GUI_InsertEvent (e);
+ }
+
+ if (GUI_SaveXConfig())
+ {
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), _("Error writing configuration file!"));
+ gtk_widget_show (errorDialog.dialog);
+ }
+}
+
+
+static GtkWidget *CreateMenu (void)
+{
+ GtkWidget *menu, *menu_items;
+
+ menu = gtk_menu_new ();
+
+ menu_items = gtk_menu_item_new_with_label (_("Contacts"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT (menu_items), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowContacts), NULL);
+ gtk_widget_show (menu_items);
+
+ sms_menu_item = gtk_menu_item_new_with_label (_("SMS"));
+ gtk_menu_append (GTK_MENU (menu), sms_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (sms_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowSMS), NULL);
+
+ calendar_menu_item = gtk_menu_item_new_with_label (_("Calendar"));
+ gtk_menu_append (GTK_MENU (menu), calendar_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (calendar_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowCalendar), NULL);
+
+ logos_menu_item = gtk_menu_item_new_with_label (_("Logos"));
+ gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowLogosWindow), NULL);
+ gtk_widget_show(logos_menu_item);
+
+ logos_menu_item = gtk_menu_item_new_with_label (_("Ringtones"));
+ gtk_menu_append (GTK_MENU (menu), logos_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (logos_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowRingtonesWindow), NULL);
+ gtk_widget_show(logos_menu_item);
+
+ dtmf_menu_item = gtk_menu_item_new_with_label (_("DTMF"));
+ gtk_menu_append (GTK_MENU (menu), dtmf_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (dtmf_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowDTMF), NULL);
+
+ speedDial_menu_item = gtk_menu_item_new_with_label (_("Speed Dial"));
+ gtk_menu_append (GTK_MENU (menu), speedDial_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (speedDial_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowSpeedDial), NULL);
+
+ xkeyb_menu_item = gtk_menu_item_new_with_label (_("Keyboard"));
+ gtk_menu_append (GTK_MENU (menu), xkeyb_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (xkeyb_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowXkeyb), NULL);
+
+ netmon_menu_item = gtk_menu_item_new_with_label (_("Net Monitor"));
+ gtk_menu_append (GTK_MENU (menu), netmon_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (netmon_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowNetmon), NULL);
+
+ data_menu_item = gtk_menu_item_new_with_label (_("Data calls"));
+ gtk_menu_append (GTK_MENU (menu), data_menu_item);
+ gtk_signal_connect_object (GTK_OBJECT (data_menu_item), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowData), NULL);
+
+ menu_items = gtk_menu_item_new ();
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new_with_label (_("Options"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+ GTK_SIGNAL_FUNC(GUI_ShowOptions), NULL);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new ();
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new_with_label (_("Help"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+ GTK_SIGNAL_FUNC(Help1), NULL);
+ gtk_widget_show (menu_items);
+
+ menu_items = gtk_menu_item_new_with_label (_("About"));
+ gtk_menu_append (GTK_MENU (menu), menu_items);
+ gtk_signal_connect_object (GTK_OBJECT(menu_items), "activate",
+ GTK_SIGNAL_FUNC (GUI_ShowAbout), NULL);
+ gtk_widget_show (menu_items);
+
+ return menu;
+}
+
+
+static GtkWidget *CreateAboutDialog (void)
+{
+ GtkWidget *dialog;
+ GtkWidget *button, *hbox, *label;
+ gchar buf[200];
+
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("About"));
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, FALSE, 5);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (GUI_HideAbout), NULL);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ g_snprintf (buf, 200, _("xgnokii version: %s\ngnokii version: %s\n\n\
+Copyright (C) 1999 Pavel JanÃk ml.,\nHugh Blemings & Jan Derfinak\n"), XVERSION, VERSION);
+ label = gtk_label_new ((gchar *) buf);
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
+ gtk_widget_show (label);
+
+ return dialog;
+}
+
+
+static inline void SetFormat (GtkWidget *item, gpointer data)
+{
+ tempMessageSettings.Format = GPOINTER_TO_INT (data);
+}
+
+
+static inline void SetValidity (GtkWidget *item, gpointer data)
+{
+ tempMessageSettings.Validity = GPOINTER_TO_INT (data);
+}
+
+
+static inline void OptionsDeleteEvent (GtkWidget *widget, GdkEvent *event, gpointer data )
+{
+ gtk_widget_hide( GTK_WIDGET (widget));
+ optionsDialogIsOpened = FALSE;
+}
+
+
+static inline void OptionsCloseCallback (GtkWidget *widget, gpointer data )
+{
+ gtk_widget_hide(GTK_WIDGET(data));
+ optionsDialogIsOpened = FALSE;
+}
+
+
+static gint CheckInUserDataLength (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer callback_data)
+{
+ register gint len;
+
+ len = configDialogData.user.max - (GTK_ENTRY (configDialogData.user.name)->text_length
+ + GTK_ENTRY (configDialogData.user.title)->text_length
+ + GTK_ENTRY (configDialogData.user.company)->text_length
+ + GTK_ENTRY (configDialogData.user.telephone)->text_length
+ + GTK_ENTRY (configDialogData.user.fax)->text_length
+ + GTK_ENTRY (configDialogData.user.email)->text_length
+ + GTK_ENTRY (configDialogData.user.address)->text_length
+ - GTK_ENTRY (widget)->text_length);
+
+ if (len < 1)
+ {
+ gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+ return (FALSE);
+ }
+ else
+ gtk_entry_set_editable (GTK_ENTRY (widget), TRUE);
+ if (GPOINTER_TO_INT (callback_data) == 3
+ || GPOINTER_TO_INT (callback_data) == 4)
+ {
+ if ((GPOINTER_TO_INT (callback_data) == 3
+ && GTK_ENTRY (configDialogData.user.telephone)->text_length == 0)
+ || (GPOINTER_TO_INT (callback_data) == 4
+ && GTK_ENTRY (configDialogData.user.fax)->text_length == 0))
+ len -= 4;
+
+ if (len < 1)
+ {
+ gtk_entry_set_editable (GTK_ENTRY (widget), FALSE);
+ return (FALSE);
+ }
+
+ if (len > max_phonebook_number_length)
+ len = max_phonebook_number_length;
+ }
+
+ gtk_entry_set_max_length (GTK_ENTRY (widget), len);
+ return (FALSE);
+}
+
+
+static inline gint CheckOutUserDataLength (GtkWidget *widget,
+ GdkEvent *event,
+ gpointer callback_data)
+{
+ gtk_entry_set_max_length (GTK_ENTRY (widget), GPOINTER_TO_INT (callback_data));
+ return (FALSE);
+}
+
+
+static inline gint RefreshUserStatusCallBack (GtkWidget *widget,
+ GdkEventKey *event,
+ gpointer callback_data)
+{
+ RefreshUserStatus ();
+ if (GTK_EDITABLE (widget)->editable == FALSE)
+ return (FALSE);
+ if (event->keyval == GDK_BackSpace || event->keyval == GDK_Clear ||
+ event->keyval == GDK_Insert || event->keyval == GDK_Delete ||
+ event->keyval == GDK_Home || event->keyval == GDK_End ||
+ event->keyval == GDK_Left || event->keyval == GDK_Right ||
+ event->keyval == GDK_Return ||
+ (event->keyval >= 0x20 && event->keyval <= 0xFF))
+ return (TRUE);
+
+ return (FALSE);
+}
+
+
+static void OkEditSMSSetDialog (GtkWidget *w, gpointer data)
+{
+
+ strncpy(configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name,
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.set)),
+ GSM_MAX_SMS_CENTER_NAME_LENGTH);
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name[GSM_MAX_SMS_CENTER_NAME_LENGTH - 1]
+ = '\0';
+
+ strncpy(configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number,
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.number)),
+ GSM_MAX_SMS_CENTER_LENGTH);
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number[GSM_MAX_SMS_CENTER_LENGTH]
+ = '\0';
+
+ strncpy(configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient,
+ gtk_entry_get_text(GTK_ENTRY (configDialogData.sms.defaultrecipient)),
+ GSM_MAX_RECIPIENT_LENGTH);
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient[GSM_MAX_RECIPIENT_LENGTH]
+ = '\0';
+
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format
+ = tempMessageSettings.Format;
+
+ configDialogData.sms.smsSetting[GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity
+ = tempMessageSettings.Validity;
+
+ ParseSMSCenters ();
+
+ gtk_widget_hide (GTK_WIDGET (data));
+}
+
+
+static inline void EditSMSSetDialogClick (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ GtkWidget *data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+ gtk_signal_emit_by_name(GTK_OBJECT (data), "clicked");
+}
+
+
+static void ShowEditSMSSetDialog (GtkWidget *w, gpointer data)
+{
+ static GtkWidget *dialog = NULL;
+ GtkWidget *button, *label, *label2, *hbox, *hbox2, *menu, *item;
+
+ if (GTK_CLIST (SMSClist)->selection == NULL)
+ return;
+
+ if (dialog == NULL)
+ {
+ dialog = gtk_dialog_new();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Edit SMS Setting"));
+ gtk_window_set_modal(GTK_WINDOW (dialog), TRUE);
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Ok"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OkEditSMSSetDialog), (gpointer) dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+ button = gtk_button_new_with_label (_("Cancel"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (CancelDialog), (gpointer) dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Set's name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.set = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_NAME_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.sms.set, 110, 22);
+ gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.set, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.set);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Center:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.number = gtk_entry_new_with_max_length(GSM_MAX_SMS_CENTER_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.sms.number, 110, 22);
+ gtk_box_pack_end(GTK_BOX(hbox), configDialogData.sms.number, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.number);
+
+ hbox2 = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox2, FALSE, FALSE, 9);
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0)
+ gtk_widget_show (hbox2);
+
+ label2 = gtk_label_new (_("Default recipient:"));
+ gtk_box_pack_start(GTK_BOX(hbox2), label2, FALSE, FALSE, 2);
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0)
+ gtk_widget_show (label2);
+
+ configDialogData.sms.defaultrecipient = gtk_entry_new_with_max_length(GSM_MAX_RECIPIENT_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.sms.defaultrecipient, 110, 22);
+ gtk_box_pack_end(GTK_BOX(hbox2), configDialogData.sms.defaultrecipient, FALSE, FALSE, 2);
+ if (GetModelFeature(FN_SMSCDEFAULT)!=0)
+ gtk_widget_show (configDialogData.sms.defaultrecipient);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
+ gtk_widget_show (hbox);
+ label = gtk_label_new (_("Sending Format:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.format = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+ gtk_widget_set_usize (configDialogData.sms.format, 110, 28);
+
+ item = gtk_menu_item_new_with_label (_("Text"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Text);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("Fax"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Fax);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("Paging"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Paging);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("E-Mail"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetFormat),
+ (gpointer) GSMF_Email);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.format), menu);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.format, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.format);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 9);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Validity Period:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.sms.validity = gtk_option_menu_new ();
+ menu = gtk_menu_new ();
+ gtk_widget_set_usize (configDialogData.sms.validity, 110, 28);
+
+ item = gtk_menu_item_new_with_label (_("Max. Time"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_Max_Time);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("1 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_1_Hour);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("6 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_6_Hours);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("24 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_24_Hours);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("72 h"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_72_Hours);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ item = gtk_menu_item_new_with_label (_("1 week"));
+ gtk_signal_connect (GTK_OBJECT (item), "activate",
+ GTK_SIGNAL_FUNC(SetValidity),
+ (gpointer) GSMV_1_Week);
+ gtk_widget_show (item);
+ gtk_menu_append (GTK_MENU (menu), item);
+
+ gtk_option_menu_set_menu (GTK_OPTION_MENU (configDialogData.sms.validity), menu);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.sms.validity, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.sms.validity);
+ }
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.set),
+ configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Name);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.number),
+ configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Number);
+
+ gtk_entry_set_text (GTK_ENTRY (configDialogData.sms.defaultrecipient),
+ configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].DefaultRecipient);
+
+ switch (configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format)
+ {
+ case GSMF_Text:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 0);
+ break;
+
+ case GSMF_Paging:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 2);
+ break;
+
+ case GSMF_Fax:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 1);
+ break;
+
+ case GSMF_Email:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 3);
+ break;
+
+ default:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.format),
+ 0);
+ }
+
+ switch (configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity)
+ {
+ case GSMV_1_Hour:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 1);
+ break;
+
+ case GSMV_6_Hours:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 2);
+ break;
+
+ case GSMV_24_Hours:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 3);
+ break;
+
+ case GSMV_72_Hours:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 4);
+ break;
+
+ case GSMV_1_Week:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 5);
+ break;
+
+ case GSMV_Max_Time:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 0);
+ break;
+
+ default:
+ gtk_option_menu_set_history (GTK_OPTION_MENU (configDialogData.sms.validity),
+ 3);
+ }
+
+ tempMessageSettings.Format = configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Format;
+ tempMessageSettings.Validity = configDialogData.sms.smsSetting
+ [GPOINTER_TO_INT(GTK_CLIST (SMSClist)->selection->data)].Validity;
+
+ gtk_widget_show (dialog);
+}
+
+
+static GtkWidget *CreateOptionsDialog (void)
+{
+ gchar labelBuffer[10];
+ GtkWidget *dialog;
+ GtkWidget *button, *hbox, *vbox, *label, *notebook, *frame, *clistScrolledWindow;
+ register gint i;
+ GtkAdjustment *adj;
+ gchar *titles[5] = { _("Set's name"), _("Center number"), _("Format"), _("Validity"), _("Default recipient")};
+
+ dialog = gtk_dialog_new ();
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Options"));
+ gtk_container_set_border_width (GTK_CONTAINER (dialog), 10);
+ gtk_signal_connect (GTK_OBJECT (dialog), "delete_event",
+ GTK_SIGNAL_FUNC (OptionsDeleteEvent), NULL);
+
+ button = gtk_button_new_with_label (_("Apply"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OptionsApplyCallback), (gpointer)dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Save"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OptionsSaveCallback), (gpointer)dialog);
+ gtk_widget_show (button);
+
+ button = gtk_button_new_with_label (_("Close"));
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
+ button, TRUE, TRUE, 10);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (OptionsCloseCallback), (gpointer)dialog);
+ gtk_widget_show (button);
+
+ gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 5);
+
+ notebook = gtk_notebook_new ();
+ gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook), GTK_POS_TOP);
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), notebook);
+ gtk_widget_show(notebook);
+
+ /*** Connection notebook ***/
+ frame = gtk_frame_new (_("Phone and connection type"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Connection"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Port:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.port = gtk_entry_new_with_max_length (10);
+ gtk_widget_set_usize (configDialogData.connection.port, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.port),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.port, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.port);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Model:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.model = gtk_entry_new_with_max_length (5);
+ gtk_widget_set_usize (configDialogData.connection.model, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.model),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.model, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.model);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Init length:"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.init = gtk_entry_new_with_max_length (100);
+ gtk_widget_set_usize (configDialogData.connection.init, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.init),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.init, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.init);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Bindir:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.connection.bindir = gtk_entry_new_with_max_length (100);
+ gtk_widget_set_usize (configDialogData.connection.bindir, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.connection.bindir),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.bindir, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.bindir);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Connection:"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 3);
+ gtk_widget_show (label);
+
+ configDialogData.connection.infrared = gtk_radio_button_new_with_label (NULL, _("infrared"));
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.infrared, TRUE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.infrared);
+
+ configDialogData.connection.serial = gtk_radio_button_new_with_label (
+ gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.infrared)), _("fbus"));
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.serial, TRUE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.serial);
+
+ configDialogData.connection.mbus = gtk_radio_button_new_with_label (
+ gtk_radio_button_group (GTK_RADIO_BUTTON (configDialogData.connection.serial)), _("mbus"));
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.connection.mbus, TRUE, FALSE, 2);
+ gtk_widget_show (configDialogData.connection.mbus);
+
+ /*** Phone notebook ***/
+ frame = gtk_frame_new (_("Phone information"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Phone"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Model:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.model = gtk_entry_new_with_max_length (7);
+ gtk_widget_set_usize (configDialogData.phone.model, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.model),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.model, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.model);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Version:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.version = gtk_entry_new_with_max_length (7);
+ gtk_widget_set_usize (configDialogData.phone.version, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.version),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.version, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.version);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Revision:"));
+ gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.revision = gtk_entry_new_with_max_length (64);
+ gtk_widget_set_usize (configDialogData.phone.revision, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.revision),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.revision, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.revision);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("IMEI:"));
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.phone.imei = gtk_entry_new_with_max_length (64);
+ gtk_widget_set_usize (configDialogData.phone.imei, 220, 22);
+ gtk_entry_set_editable (GTK_ENTRY (configDialogData.phone.imei),
+ FALSE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.imei, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.imei);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new ("Names length:");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (vbox), hbox);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new ("SIM:");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0);
+ configDialogData.phone.simNameLen = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.simNameLen), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.phone.simNameLen, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.simNameLen);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 1.0, 100.0, 1.0, 10.0, 0.0);
+ configDialogData.phone.phoneNameLen = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.phone.phoneNameLen), TRUE);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.phone.phoneNameLen, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.phone.phoneNameLen);
+
+ label = gtk_label_new ("Phone:");
+ gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ /*** Alarm notebook ***/
+ xgnokiiConfig.alarmSupported = TRUE;
+
+ frame = gtk_frame_new (_("Alarm setting"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show(vbox);
+
+ label = gtk_label_new (_("Alarm"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 5);
+ gtk_widget_show (hbox);
+
+ configDialogData.alarm.alarmSwitch = gtk_check_button_new_with_label (_("Alarm"));
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmSwitch, FALSE, FALSE, 10);
+ gtk_widget_show (configDialogData.alarm.alarmSwitch);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 23.0, 1.0, 4.0, 0.0);
+ configDialogData.alarm.alarmHour = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmHour), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmHour, FALSE, FALSE, 0);
+ gtk_widget_show (configDialogData.alarm.alarmHour);
+
+ label = gtk_label_new (":");
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 59.0, 1.0, 10.0, 0.0);
+ configDialogData.alarm.alarmMin = gtk_spin_button_new (adj, 0, 0);
+ gtk_spin_button_set_wrap (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE);
+ gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (configDialogData.alarm.alarmMin), TRUE);
+ gtk_box_pack_start (GTK_BOX (hbox), configDialogData.alarm.alarmMin, FALSE, FALSE, 0);
+ gtk_widget_show (configDialogData.alarm.alarmMin);
+
+ /*** SMS notebook ***/
+ sms_option_frame = gtk_frame_new (_("Short Message Service"));
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (sms_option_frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("SMS"));
+ gtk_notebook_append_page (GTK_NOTEBOOK (notebook), sms_option_frame, label);
+
+ SMSClist = gtk_clist_new_with_titles (5, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (SMSClist), GTK_SHADOW_OUT);
+ gtk_clist_column_titles_passive (GTK_CLIST (SMSClist));
+ gtk_clist_set_auto_sort (GTK_CLIST (SMSClist), FALSE);
+
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 0, 70);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 1, 115);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 2, 40);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 3, 55);
+ gtk_clist_set_column_width (GTK_CLIST (SMSClist), 4, 100);
+// gtk_clist_set_column_justification (GTK_CLIST (SMSClist), 1, GTK_JUSTIFY_RIGHT);
+
+ clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (clistScrolledWindow), SMSClist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (vbox), clistScrolledWindow,
+ TRUE, TRUE, 10);
+
+ gtk_widget_show (SMSClist);
+
+ gtk_widget_show (clistScrolledWindow);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 9);
+ gtk_widget_show (hbox);
+
+ button = gtk_button_new_with_label (_("Edit"));
+ gtk_box_pack_start (GTK_BOX (hbox),
+ button, TRUE, FALSE, 0);
+ gtk_signal_connect (GTK_OBJECT (button), "clicked",
+ GTK_SIGNAL_FUNC (ShowEditSMSSetDialog), (gpointer)dialog);
+ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+ gtk_widget_grab_default (button);
+ gtk_widget_show (button);
+
+ gtk_signal_connect (GTK_OBJECT (SMSClist), "select_row",
+ GTK_SIGNAL_FUNC (EditSMSSetDialogClick),
+ (gpointer) button);
+
+ /*** Business notebook ***/
+ user_option_frame = gtk_frame_new (_("Business Card"));
+
+ vbox = gtk_vbox_new( FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (user_option_frame), vbox);
+ gtk_widget_show(vbox);
+
+ label = gtk_label_new(_("User"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), user_option_frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ configDialogData.user.status = gtk_label_new ("");
+ gtk_box_pack_end(GTK_BOX(hbox), configDialogData.user.status, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.status);
+
+ configDialogData.user.max = MAX_BUSINESS_CARD_LENGTH;
+ configDialogData.user.used = 0;
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Name:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.name = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.name, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.name),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.name),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 0);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.name),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.name, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.name);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Title:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.title = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.title, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.title),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.title),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 1);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.title),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.title, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.title);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Company:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.company = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.company, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.company),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.company),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 2);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.company),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.company, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.company);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Telephone:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.telephone = gtk_entry_new_with_max_length(max_phonebook_number_length);
+ gtk_widget_set_usize (configDialogData.user.telephone, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.telephone),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 3);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.telephone),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.telephone, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.telephone);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Fax:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.fax = gtk_entry_new_with_max_length(max_phonebook_number_length);
+ gtk_widget_set_usize (configDialogData.user.fax, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.fax),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 4);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.fax),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength), (gpointer) max_phonebook_number_length);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.fax, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.fax);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("E-Mail:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.email = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.email, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.email),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.email),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 5);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.email),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.email, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.email);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Address:"));
+ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.user.address = gtk_entry_new_with_max_length(configDialogData.user.max);
+ gtk_widget_set_usize (configDialogData.user.address, 220, 22);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address),
+ "key_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect_after (GTK_OBJECT (configDialogData.user.address),
+ "button_press_event",
+ GTK_SIGNAL_FUNC(RefreshUserStatusCallBack), (gpointer) NULL);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.address),
+ "focus_in_event",
+ GTK_SIGNAL_FUNC(CheckInUserDataLength), (gpointer) 6);
+ gtk_signal_connect (GTK_OBJECT (configDialogData.user.address),
+ "focus_out_event",
+ GTK_SIGNAL_FUNC(CheckOutUserDataLength),
+ (gpointer) configDialogData.user.max);
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.user.address, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.user.address);
+
+
+ /*** Groups notebook ***/
+ cg_names_option_frame = gtk_frame_new (_("Caller groups names"));
+
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (cg_names_option_frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Groups"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), cg_names_option_frame, label);
+
+ for ( i = 0; i < 6; i++)
+ {
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 3);
+ gtk_widget_show (hbox);
+
+ g_snprintf (labelBuffer, 10, _("Group %d:"), i + 1);
+ label = gtk_label_new (labelBuffer);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.groups[i] = gtk_entry_new_with_max_length (MAX_CALLER_GROUP_LENGTH);
+ gtk_widget_set_usize (configDialogData.groups[i], 220, 22);
+
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.groups[i], FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.groups[i]);
+ }
+
+ /* Mail */
+ mail_option_frame = gtk_frame_new (_("Mailbox"));
+ gtk_widget_show (mail_option_frame);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (mail_option_frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Mail"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), mail_option_frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Path to mailbox:"));
+ gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.mailbox = gtk_entry_new_with_max_length (MAILBOX_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.mailbox, 220, 22);
+
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.mailbox, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.mailbox);
+
+ /* Help */
+ frame = gtk_frame_new (_("Help viewer"));
+ gtk_widget_show (frame);
+
+ vbox = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show (vbox);
+
+ label = gtk_label_new (_("Help"));
+ gtk_notebook_append_page( GTK_NOTEBOOK (notebook), frame, label);
+
+ hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 2);
+ gtk_widget_show (hbox);
+
+ label = gtk_label_new (_("Viewer:"));
+ gtk_box_pack_start(GTK_BOX (hbox), label, FALSE, FALSE, 2);
+ gtk_widget_show (label);
+
+ configDialogData.help = gtk_entry_new_with_max_length (HTMLVIEWER_LENGTH - 1);
+ gtk_widget_set_usize (configDialogData.help, 220, 22);
+
+ gtk_box_pack_end (GTK_BOX (hbox), configDialogData.help, FALSE, FALSE, 2);
+ gtk_widget_show (configDialogData.help);
+
+
+ optionsDialogIsOpened = FALSE;
+ return dialog;
+}
+
+
+static void TopLevelWindow (void)
+{
+ GtkWidget *drawing_area;
+ GdkBitmap *mask;
+ GtkStyle *style;
+ GdkGC *gc;
+ struct sigaction act;
+
+ GUI_MainWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_realize (GUI_MainWindow);
+
+ BackgroundPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
+
+ SMSPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_sms);
+
+ AlarmPixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_alarm);
+
+ Pixmap = gdk_pixmap_create_from_xpm_d (GUI_MainWindow->window, &mask, &GUI_MainWindow->style->white, (gchar **) XPM_background);
+
+// gdk_window_set_icon_name (GUI_MainWindow->window, "XXX");
+ style = gtk_widget_get_default_style ();
+ gc = style->black_gc;
+
+ /* Create the drawing area */
+ drawing_area = gtk_drawing_area_new ();
+
+ /* Signals used to handle backing pixmap */
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "expose_event",
+ (GtkSignalFunc) ExposeEvent, NULL);
+
+ gtk_signal_connect (GTK_OBJECT (drawing_area), "button_press_event",
+ (GtkSignalFunc) ButtonPressEvent, NULL);
+
+ gtk_widget_set_events (drawing_area, GDK_EXPOSURE_MASK
+ | GDK_BUTTON_PRESS_MASK);
+
+ gtk_drawing_area_size (GTK_DRAWING_AREA (drawing_area), 261, 96);
+ gtk_container_add (GTK_CONTAINER (GUI_MainWindow), drawing_area);
+
+ gdk_draw_pixmap (drawing_area->window,
+ drawing_area->style->fg_gc[GTK_WIDGET_STATE (drawing_area)],
+ Pixmap,
+ 0, 0,
+ 0, 0,
+ 261, 96);
+
+ gtk_widget_shape_combine_mask (GUI_MainWindow, mask, 0, 0);
+
+ gtk_signal_connect (GTK_OBJECT (GUI_MainWindow), "destroy",
+ GTK_SIGNAL_FUNC (MainExit),
+ NULL);
+
+ Menu = CreateMenu ();
+ OptionsDialog = CreateOptionsDialog ();
+ AboutDialog = CreateAboutDialog ();
+ GUI_CreateSMSWindow ();
+ GUI_CreateContactsWindow ();
+ GUI_CreateNetmonWindow ();
+ GUI_CreateDTMFWindow ();
+ GUI_CreateSpeedDialWindow ();
+ GUI_CreateXkeybWindow ();
+ GUI_CreateCalendarWindow ();
+ GUI_CreateLogosWindow ();
+ GUI_CreateDataWindow();
+ GUI_CreateRingtonesWindow ();
+ CreateErrorDialog (&errorDialog, GUI_MainWindow);
+ CreateInfoDialog (&infoDialog, GUI_MainWindow);
+ CreateInCallDialog ();
+
+ act.sa_handler = RemoveZombie;
+ sigemptyset (&(act.sa_mask));
+ act.sa_flags = SA_NOCLDSTOP;
+ sigaction (SIGCHLD, &act, NULL);
+
+#if defined(__svr4__) || defined(__FreeBSD__)
+ act.sa_handler = SIG_IGN;
+ sigemptyset (&(act.sa_mask));
+ sigaction (SIGALRM, &act, NULL);
+#endif
+
+ gtk_widget_show_all (GUI_MainWindow);
+ GUI_Refresh ();
+
+ GUI_InitPhoneMonitor ();
+ pthread_create (&monitor_th, NULL, GUI_Connect, NULL);
+
+ gtk_timeout_add (1000, (GtkFunction) Update, GUI_MainWindow);
+
+ hiddenCallDialog = 0;
+}
+
+
+static void SplashScreen (void)
+{
+ GtkWidget *pixmap, *fixed;
+ GdkPixmap *gdk_pixmap;
+ GdkBitmap *mask;
+ GtkStyle *style;
+ GdkGC *gc;
+
+ SplashWindow = gtk_window_new (GTK_WINDOW_POPUP);
+ gtk_widget_realize (SplashWindow);
+
+ gtk_widget_set_usize (SplashWindow, 475, 160);
+ gtk_window_position (GTK_WINDOW (SplashWindow), GTK_WIN_POS_CENTER);
+
+ style = gtk_widget_get_default_style();
+ gc = style->black_gc;
+ gdk_pixmap = gdk_pixmap_create_from_xpm_d(SplashWindow->window, &mask,
+ &style->bg[GTK_STATE_NORMAL],
+ XPM_logo);
+ pixmap = gtk_pixmap_new(gdk_pixmap, mask);
+
+ fixed = gtk_fixed_new();
+ gtk_widget_set_usize(fixed, 261, 96);
+ gtk_fixed_put(GTK_FIXED(fixed), pixmap, 0, 0);
+ gtk_container_add(GTK_CONTAINER (SplashWindow), fixed);
+
+ gtk_widget_shape_combine_mask (SplashWindow, mask, 0, 0);
+
+ gtk_widget_show_all (SplashWindow);
+}
+
+
+static gint RemoveSplash (GtkWidget *Win)
+{
+ if (GTK_WIDGET_VISIBLE (SplashWindow))
+ {
+ gtk_timeout_remove (splashRemoveHandler);
+ gtk_widget_hide (SplashWindow);
+ gtk_widget_destroy (SplashWindow);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void ReadConfig (void)
+{
+ /* Read config file */
+ if (CFG_ReadConfig(&xgnokiiConfig.model, &xgnokiiConfig.port,
+ &xgnokiiConfig.initlength, &xgnokiiConfig.connection,
+ &xgnokiiConfig.bindir, &xgnokiiConfig.synchronizetime,false) < 0) {
+ exit(-1);
+ }
+
+#ifndef WIN32
+ if ((xgnokiiConfig.locale = getenv ("LC_ALL")) == NULL)
+ if ((xgnokiiConfig.locale = getenv ("LC_MESSAGES")) == NULL)
+ if ((xgnokiiConfig.locale = getenv ("LANG")) == NULL)
+ xgnokiiConfig.locale = "POSIX";
+#endif
+
+ GUI_ReadXConfig();
+ max_phonebook_name_length = atoi (xgnokiiConfig.maxPhoneLen);
+ max_phonebook_sim_name_length = atoi (xgnokiiConfig.maxSIMLen);
+
+#ifndef WIN32
+ xgnokiiConfig.xgnokiidir = DefaultXGnokiiDir;
+ xgnokiiConfig.xgnokiidocsdir = DefaultXGnokiiDocsDir;
+#endif
+ if (CheckModel (N6110_Information, xgnokiiConfig.model, CurrentConnectionType)) {
+ max_phonebook_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+ max_phonebook_sim_number_length = N6110_MAX_PHONEBOOK_NUMBER_LENGTH;
+ }
+ else
+ {
+ max_phonebook_number_length = max_phonebook_sim_number_length = GSM_MAX_PHONEBOOK_NUMBER_LENGTH;
+ }
+
+ xgnokiiConfig.callerGroups[0] = xgnokiiConfig.callerGroups[1] =
+ xgnokiiConfig.callerGroups[2] = xgnokiiConfig.callerGroups[3] =
+ xgnokiiConfig.callerGroups[4] = xgnokiiConfig.callerGroups[5] = NULL;
+ xgnokiiConfig.smsSets = 0;
+}
+
+
+int main (int argc, char *argv[])
+{
+#ifdef USE_NLS
+ textdomain("gnokii");
+#endif
+
+ (void) gtk_set_locale ();
+
+ gtk_init (&argc, &argv);
+
+ /* Show the splash screen. */
+
+ SplashScreen ();
+
+ /* Remove it after a while. */
+
+ ReadConfig ();
+ TopLevelWindow ();
+
+ splashRemoveHandler = gtk_timeout_add(5000, (GtkFunction) RemoveSplash, (gpointer) SplashWindow);
+
+ gtk_main ();
+
+ return(0);
+}