--- /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 <stdio.h>
+#include <stdlib.h>
+#include <pthread.h>
+#include <gtk/gtk.h>
+#include "xgnokii_contacts.h"
+#include "xgnokii.h"
+#include "xgnokii_lowlevel.h"
+#include "xgnokii_common.h"
+#include "xgnokii_speed.h"
+#include "xpm/Read.xpm"
+#include "xpm/Send.xpm"
+#include "xpm/Open.xpm"
+#include "xpm/Save.xpm"
+#include "xpm/Edit.xpm"
+#include "xpm/quest.xpm"
+
+
+static GtkWidget *GUI_SpeedDialWindow;
+static ErrorDialog errorDialog = {NULL, NULL};
+static InfoDialog infoDialog = {NULL, NULL};
+static ExportDialogData exportDialogData = {NULL};
+static GtkWidget *clist;
+static QuestMark questMark;
+static gint selectedKey;
+static bool speedDialInitialized;
+
+
+static inline void Help1 (GtkWidget *w, gpointer data)
+{
+ gchar *indx = g_strdup_printf ("/%s/gnokii/xgnokii/speeddial/index.htm", xgnokiiConfig.locale);
+ Help (w, indx);
+ g_free (indx);
+}
+
+
+static void CloseSpeedDial (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GUI_SpeedDialWindow);
+}
+
+
+static inline void DestroyCListData (gpointer data)
+{
+ if (data)
+ g_free ((D_SpeedDial *) data);
+}
+
+
+static void DeleteSelectContactDialog (GtkWidget *widget, GdkEvent *event,
+ SelectContactData *data)
+{
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (widget));
+}
+
+
+static void CancelSelectContactDialog (GtkWidget *widget,
+ SelectContactData *data)
+{
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+
+static void OkSelectContactDialog (GtkWidget *widget,
+ SelectContactData *data)
+{
+ GList *sel;
+ PhonebookEntry *pbEntry;
+ gchar *key;
+
+ if ((sel = GTK_CLIST (data->clist)->selection) != NULL)
+ {
+ D_SpeedDial *d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial));
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+
+ pbEntry = gtk_clist_get_row_data (GTK_CLIST (data->clist),
+ GPOINTER_TO_INT (sel->data));
+
+ gtk_clist_get_text (GTK_CLIST (clist), selectedKey, 0, &key);
+
+ gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 1, pbEntry->entry.Name);
+ gtk_clist_set_text (GTK_CLIST (clist), selectedKey, 2, pbEntry->entry.Number);
+
+ d->entry.Number = *key - '0';
+ d->entry.MemoryType = pbEntry->entry.MemoryType + 2;
+ d->entry.Location = pbEntry->entry.Location;
+
+ gtk_clist_set_row_data_full (GTK_CLIST (clist), selectedKey,
+ (gpointer) d, DestroyCListData);
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ }
+
+ gtk_widget_destroy (GTK_WIDGET (data->clist));
+ gtk_widget_destroy (GTK_WIDGET (data->clistScrolledWindow));
+ gtk_widget_destroy (GTK_WIDGET (data->dialog));
+}
+
+static void ShowSelectContactsDialog (void)
+{
+ SelectContactData *r;
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ if ((r = GUI_SelectContactDialog ()) == NULL)
+ return;
+
+ gtk_signal_connect (GTK_OBJECT (r->dialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteSelectContactDialog), (gpointer) r);
+
+ gtk_signal_connect (GTK_OBJECT (r->okButton), "clicked",
+ GTK_SIGNAL_FUNC (OkSelectContactDialog), (gpointer) r);
+ gtk_signal_connect (GTK_OBJECT (r->cancelButton), "clicked",
+ GTK_SIGNAL_FUNC (CancelSelectContactDialog), (gpointer) r);
+}
+
+
+static inline void EditKey (void)
+{
+ GList *sel;
+
+ if ((sel = GTK_CLIST (clist)->selection) != NULL)
+ {
+ selectedKey = GPOINTER_TO_INT (sel->data);
+ ShowSelectContactsDialog ();
+ }
+}
+
+
+static inline void ClickEntry (GtkWidget *clist,
+ gint row,
+ gint column,
+ GdkEventButton *event,
+ gpointer data )
+{
+ if(event && event->type == GDK_2BUTTON_PRESS)
+ {
+ selectedKey = row;
+ ShowSelectContactsDialog ();
+ }
+}
+
+
+static void ReadSpeedDial (void)
+{
+ PhonebookEntry *pbEntry;
+ D_SpeedDial *d;
+ PhoneEvent *e;
+ gchar *row[3];
+ gchar buf[2] = " ";
+ gint location;
+ register gint i, row_i = 0;
+
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ gtk_label_set_text (GTK_LABEL (infoDialog.text), _("Reading data ..."));
+ gtk_widget_show_now (infoDialog.dialog);
+ GUI_Refresh ();
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ gtk_clist_clear (GTK_CLIST (clist));
+
+ for (i = 1; i < 10; i++)
+ {
+ if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!"));
+ return;
+ }
+ d->entry.Number = i;
+ if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!"));
+ g_free (d);
+ return;
+ }
+ e->event = Event_GetSpeedDial;
+ e->data = d;
+ GUI_InsertEvent (e);
+ pthread_mutex_lock (&speedDialMutex);
+ pthread_cond_wait (&speedDialCond, &speedDialMutex);
+ pthread_mutex_unlock (&speedDialMutex);
+
+ if (d->status != GE_NONE)
+ g_print ("Cannot read speed dial key %d!\n", i);
+ else
+ {
+ if (d->entry.Location == 0)
+ location = i;
+ else
+ location = d->entry.Location;
+ if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL)
+ {
+ g_free (d);
+ continue;
+ }
+ *buf = i + '0';
+ row[0] = buf;
+ row[1] = pbEntry->entry.Name;
+ row[2] = pbEntry->entry.Number;
+
+ gtk_clist_append (GTK_CLIST (clist), row);
+ gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++,
+ (gpointer) d, DestroyCListData);
+ }
+ //GUI_Refresh ();
+ gtk_widget_hide (infoDialog.dialog);
+ }
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ speedDialInitialized = TRUE;
+}
+
+
+static void SaveSpeedDial (void)
+{
+ //gchar buf[80];
+ D_SpeedDial *d;
+ PhoneEvent *e;
+ register gint i;
+
+ if (speedDialInitialized)
+ for(i = 1; i < 10; i++)
+ {
+ if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1)))
+ {
+ if (d->entry.Location == 0)
+ continue;
+ if ((e = (PhoneEvent *) g_malloc (sizeof (PhoneEvent))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!"));
+ return;
+ }
+ e->event = Event_SendSpeedDial;
+ e->data = d;
+ GUI_InsertEvent (e);
+/* pthread_mutex_lock (&speedDialMutex);
+ pthread_cond_wait (&speedDialCond, &speedDialMutex);
+ pthread_mutex_unlock (&speedDialMutex);
+
+ if (d->status != GE_NONE)
+ {
+ g_snprintf (buf, 80, _("Error writing speed\ndial for key %d!\n"),
+ d->entry.Number);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ } */
+ }
+// GUI_Refresh ();
+ }
+}
+
+
+static bool ParseLine (D_SpeedDial *d, gchar *buf)
+{
+ gchar **strings = g_strsplit (buf, ";", 3);
+
+ d->entry.Number = *strings[0] - '0';
+ if (d->entry.Number < 1 || d->entry.Number > 9)
+ {
+ g_strfreev (strings);
+ return FALSE;
+ }
+
+ d->entry.MemoryType = *strings[1] - '0';
+ if (d->entry.MemoryType < 2 || d->entry.MemoryType > 3)
+ {
+ g_strfreev (strings);
+ return FALSE;
+ }
+
+ d->entry.Location = atoi (strings[2]);
+ if (d->entry.Location == LONG_MIN || d->entry.Location == LONG_MAX ||
+ d->entry.Location < 0)
+ {
+ g_strfreev (strings);
+ return FALSE;
+ }
+
+ g_strfreev (strings);
+ return TRUE;
+}
+
+
+static void OkImportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ FILE *f;
+ D_SpeedDial *d;
+ PhonebookEntry *pbEntry;
+ gchar buf[IO_BUF_LEN];
+ gchar *row[3];
+ gchar *fileName;
+ gint location;
+ register gint i, row_i = 0;
+
+ fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (fileName, "r")) == NULL)
+ {
+ g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for reading!"), fileName);
+ gtk_label_set_text (GTK_LABEL(errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ if (!GUI_ContactsIsIntialized ())
+ GUI_ReadContacts ();
+
+ gtk_clist_freeze (GTK_CLIST (clist));
+ gtk_clist_clear (GTK_CLIST (clist));
+ speedDialInitialized = FALSE;
+
+ i = 0;
+ while (fgets (buf, IO_BUF_LEN, f) && i++ < 9)
+ {
+ if ((d = (D_SpeedDial *) g_malloc (sizeof (D_SpeedDial))) == NULL)
+ {
+ g_print (_("Cannot allocate memory!\n"));
+ gtk_clist_clear (GTK_CLIST (clist));
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ return;
+ }
+ if (ParseLine (d, buf))
+ {
+ if (d->entry.Number != i)
+ {
+ g_free (d);
+ gtk_clist_clear (GTK_CLIST (clist));
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!"));
+ gtk_widget_show (errorDialog.dialog);
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ return;
+ }
+ if (d->entry.Location == 0)
+ location = i;
+ else
+ location = d->entry.Location;
+ if ((pbEntry = GUI_GetEntry (d->entry.MemoryType - 2, location)) == NULL)
+ {
+ g_free (d);
+ continue;
+ }
+ *buf = i + '0';
+ *(buf + 1) = '\0';
+ row[0] = buf;
+ row[1] = pbEntry->entry.Name;
+ row[2] = pbEntry->entry.Number;
+ gtk_clist_append (GTK_CLIST (clist), row);
+ gtk_clist_set_row_data_full (GTK_CLIST (clist), row_i++,
+ (gpointer) d, DestroyCListData);
+ }
+ else
+ {
+ g_free (d);
+ gtk_clist_clear (GTK_CLIST (clist));
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), _("Error reading file!"));
+ gtk_widget_show (errorDialog.dialog);
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ return;
+ }
+ }
+
+ gtk_clist_sort (GTK_CLIST (clist));
+ gtk_clist_thaw (GTK_CLIST (clist));
+ speedDialInitialized = TRUE;
+}
+
+
+static void ImportSpeedDial (void)
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Import"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkImportDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+}
+
+
+static void ExportSpeedDialMain (gchar *name)
+{
+ FILE *f;
+ D_SpeedDial *d;
+ gchar buf[IO_BUF_LEN];
+ register gint i;
+
+ if ((f = fopen( name, "w")) == NULL)
+ {
+ g_snprintf (buf, IO_BUF_LEN, _("Can't open file %s for writing!"), name);
+ gtk_label_set_text (GTK_LABEL (errorDialog.text), buf);
+ gtk_widget_show (errorDialog.dialog);
+ return;
+ }
+
+ for(i = 1; i < 10; i++)
+ {
+ if ((d = (D_SpeedDial *) gtk_clist_get_row_data (GTK_CLIST (clist), i - 1)))
+ {
+ sprintf (buf, "%d;%d;%d;", d->entry.Number, d->entry.MemoryType, d->entry.Location);
+ fprintf (f, "%s\n", buf);
+ }
+ }
+
+ fclose(f);
+}
+
+
+static void YesExportDialog (GtkWidget *w, gpointer data)
+{
+ gtk_widget_hide (GTK_WIDGET (data));
+ ExportSpeedDialMain (exportDialogData.fileName);
+}
+
+
+static void OkExportDialog (GtkWidget *w, GtkFileSelection *fs)
+{
+ static YesNoDialog dialog = { NULL, NULL};
+ FILE *f;
+ gchar err[80];
+
+
+ exportDialogData.fileName = gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
+ gtk_widget_hide (GTK_WIDGET (fs));
+
+ if ((f = fopen (exportDialogData.fileName, "r")) != NULL)
+ {
+ fclose (f);
+ if (dialog.dialog == NULL)
+ {
+ CreateYesNoDialog (&dialog, YesExportDialog, CancelDialog, GUI_SpeedDialWindow);
+ gtk_window_set_title (GTK_WINDOW (dialog.dialog), _("Overwrite file?"));
+ g_snprintf ( err, 80, _("File %s already exist.\nOverwrite?"), exportDialogData.fileName);
+ gtk_label_set_text (GTK_LABEL(dialog.text), err);
+ }
+ gtk_widget_show (dialog.dialog);
+ }
+ else
+ ExportSpeedDialMain (exportDialogData.fileName);
+}
+
+
+static void ExportSpeedDial (void)
+{
+ static GtkWidget *fileDialog = NULL;
+
+ if (speedDialInitialized)
+ {
+ if (fileDialog == NULL)
+ {
+ fileDialog = gtk_file_selection_new (_("Export"));
+ gtk_signal_connect (GTK_OBJECT (fileDialog), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->ok_button),
+ "clicked", GTK_SIGNAL_FUNC (OkExportDialog), (gpointer) fileDialog);
+ gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION (fileDialog)->cancel_button),
+ "clicked", GTK_SIGNAL_FUNC (CancelDialog), (gpointer) fileDialog);
+ }
+
+ gtk_widget_show (fileDialog);
+ }
+}
+
+
+inline void GUI_ShowSpeedDial (void)
+{
+ ReadSpeedDial ();
+ gtk_widget_show (GUI_SpeedDialWindow);
+}
+
+
+static GtkItemFactoryEntry menu_items[] = {
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, "<control>R", ReadSpeedDial, 0, NULL},
+ { NULL, "<control>S", SaveSpeedDial, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>I", ImportSpeedDial, 0, NULL},
+ { NULL, "<control>E", ExportSpeedDial, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Separator>"},
+ { NULL, "<control>W", CloseSpeedDial, 0, NULL},
+ { NULL, NULL, NULL, 0, "<Branch>"},
+ { NULL, NULL, EditKey, 0, NULL},
+ { NULL, NULL, NULL, 0, "<LastBranch>"},
+ { NULL, NULL, Help1, 0, NULL},
+ { NULL, NULL, GUI_ShowAbout, 0, NULL},
+};
+
+
+static void InitMainMenu (void)
+{
+ menu_items[0].path = g_strdup (_("/_File"));
+ menu_items[1].path = g_strdup (_("/File/_Read from phone"));
+ menu_items[2].path = g_strdup (_("/File/_Save to phone"));
+ menu_items[3].path = g_strdup (_("/File/Sep1"));
+ menu_items[4].path = g_strdup (_("/File/_Import from file"));
+ menu_items[5].path = g_strdup (_("/File/_Export to file"));
+ menu_items[6].path = g_strdup (_("/File/Sep2"));
+ menu_items[7].path = g_strdup (_("/File/_Close"));
+ menu_items[8].path = g_strdup (_("/_Edit"));
+ menu_items[9].path = g_strdup (_("/Edit/_Edit"));
+ menu_items[10].path = g_strdup (_("/_Help"));
+ menu_items[11].path = g_strdup (_("/Help/_Help"));
+ menu_items[12].path = g_strdup (_("/Help/_About"));
+}
+
+
+void GUI_CreateSpeedDialWindow (void)
+{
+ int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
+ GtkItemFactory *item_factory;
+ GtkAccelGroup *accel_group;
+ SortColumn *sColumn;
+ GtkWidget *menubar;
+ GtkWidget *main_vbox;
+ GtkWidget *toolbar;
+ GtkWidget *clistScrolledWindow;
+ register gint i;
+ gchar *titles[3] = {_("Key"), _("Name"), _("Number")};
+
+
+ InitMainMenu ();
+ GUI_SpeedDialWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title (GTK_WINDOW (GUI_SpeedDialWindow), _("Speed Dial"));
+ gtk_widget_set_usize (GTK_WIDGET (GUI_SpeedDialWindow), 332, 220);
+ //gtk_container_set_border_width (GTK_CONTAINER (GUI_SpeedDialWindow), 10);
+ gtk_signal_connect (GTK_OBJECT (GUI_SpeedDialWindow), "delete_event",
+ GTK_SIGNAL_FUNC (DeleteEvent), NULL);
+ gtk_widget_realize (GUI_SpeedDialWindow);
+
+ accel_group = gtk_accel_group_new ();
+ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>",
+ accel_group);
+
+ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL);
+
+ gtk_accel_group_attach (accel_group, GTK_OBJECT (GUI_SpeedDialWindow));
+
+ /* Finally, return the actual menu bar created by the item factory. */
+ menubar = gtk_item_factory_get_widget (item_factory, "<main>");
+
+ main_vbox = gtk_vbox_new (FALSE, 1);
+ gtk_container_border_width (GTK_CONTAINER (main_vbox), 1);
+ gtk_container_add (GTK_CONTAINER (GUI_SpeedDialWindow), main_vbox);
+ gtk_widget_show (main_vbox);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, FALSE, 0);
+ gtk_widget_show (menubar);
+
+ /* Create the toolbar */
+
+ toolbar = gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS);
+ gtk_toolbar_set_button_relief (GTK_TOOLBAR (toolbar), GTK_RELIEF_NORMAL);
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Read from phone"), NULL,
+ NewPixmap(Read_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ReadSpeedDial, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Save to phone"), NULL,
+ NewPixmap(Send_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) SaveSpeedDial, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Import from file"), NULL,
+ NewPixmap(Open_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ImportSpeedDial, NULL);
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Export to file"), NULL,
+ NewPixmap(Save_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) ExportSpeedDial, NULL);
+
+ gtk_toolbar_append_space (GTK_TOOLBAR (toolbar));
+
+ gtk_toolbar_append_item (GTK_TOOLBAR (toolbar), NULL, _("Edit entry"), NULL,
+ NewPixmap(Edit_xpm, GUI_SpeedDialWindow->window,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL]),
+ (GtkSignalFunc) EditKey, NULL);
+
+ gtk_box_pack_start (GTK_BOX (main_vbox), toolbar, FALSE, FALSE, 0);
+ gtk_widget_show (toolbar);
+
+ clist = gtk_clist_new_with_titles (3, titles);
+ gtk_clist_set_shadow_type (GTK_CLIST (clist), GTK_SHADOW_OUT);
+// gtk_clist_set_compare_func (GTK_CLIST (clist), CListCompareFunc);
+ gtk_clist_set_sort_column (GTK_CLIST (clist), 0);
+ gtk_clist_set_sort_type (GTK_CLIST (clist), GTK_SORT_ASCENDING);
+ gtk_clist_set_auto_sort (GTK_CLIST (clist), FALSE);
+ //gtk_clist_set_selection_mode (GTK_CLIST (clist), GTK_SELECTION_EXTENDED);
+
+ gtk_clist_set_column_width (GTK_CLIST (clist), 1, 150);
+ gtk_clist_set_column_width (GTK_CLIST (clist), 2, 115);
+ gtk_clist_set_column_justification (GTK_CLIST (clist), 0, GTK_JUSTIFY_CENTER);
+// gtk_clist_set_column_visibility (GTK_CLIST (clist), 3, xgnokiiConfig.callerGroupsSupported);
+
+ for (i = 0; i < 3; i++)
+ {
+ if ((sColumn = g_malloc (sizeof (SortColumn))) == NULL)
+ {
+ g_print (_("Error: %s: line %d: Can't allocate memory!\n"), __FILE__, __LINE__);
+ gtk_main_quit ();
+ }
+ sColumn->clist = clist;
+ sColumn->column = i;
+ gtk_signal_connect (GTK_OBJECT (GTK_CLIST (clist)->column[i].button), "clicked",
+ GTK_SIGNAL_FUNC (SetSortColumn), (gpointer) sColumn);
+ }
+
+ gtk_signal_connect (GTK_OBJECT (clist), "select_row",
+ GTK_SIGNAL_FUNC (ClickEntry), NULL);
+
+ clistScrolledWindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (clistScrolledWindow), clist);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (clistScrolledWindow),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_box_pack_start (GTK_BOX (main_vbox), clistScrolledWindow,
+ TRUE, TRUE, 0);
+
+ gtk_widget_show (clist);
+ gtk_widget_show (clistScrolledWindow);
+
+ questMark.pixmap = gdk_pixmap_create_from_xpm_d (GUI_SpeedDialWindow->window,
+ &questMark.mask,
+ &GUI_SpeedDialWindow->style->bg[GTK_STATE_NORMAL],
+ quest_xpm);
+
+ CreateErrorDialog (&errorDialog, GUI_SpeedDialWindow);
+ CreateInfoDialog (&infoDialog, GUI_SpeedDialWindow);
+ speedDialInitialized = FALSE;
+}