From ac6cad2e0f7d045a70f0664e11d6c730f96cf4e0 Mon Sep 17 00:00:00 2001 From: Emmanuel Milou <emmanuel.milou@savoirfairelinux.com> Date: Thu, 8 Jul 2010 15:10:27 -0400 Subject: [PATCH] [#3681] Browse preferences section with an icon view --- sflphone-client-gnome/src/config/audioconf.c | 73 +-- .../src/config/preferencesdialog.c | 521 +++++++++++------- .../src/config/preferencesdialog.h | 2 + .../src/icons/icon_factory.c | 7 + .../src/icons/icon_factory.h | 2 + 5 files changed, 350 insertions(+), 255 deletions(-) diff --git a/sflphone-client-gnome/src/config/audioconf.c b/sflphone-client-gnome/src/config/audioconf.c index bcf82af8b0..b96532e442 100644 --- a/sflphone-client-gnome/src/config/audioconf.c +++ b/sflphone-client-gnome/src/config/audioconf.c @@ -927,44 +927,6 @@ GtkWidget* alsa_box() return ret; } -GtkWidget* noise_box() -{ - GtkWidget *ret; - GtkWidget *enableEchoCancel; - GtkWidget *enableNoiseReduction; - gboolean echocancelActive, noisesuppressActive; - gchar *state; - - ret = gtk_hbox_new( TRUE , 1); - - enableEchoCancel = gtk_check_button_new_with_mnemonic( _("_Echo Suppression")); - state = dbus_get_echo_cancel_state(); - echocancelActive = FALSE; - if(strcmp(state, "enabled") == 0) - echocancelActive = TRUE; - else - echocancelActive = FALSE; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableEchoCancel), echocancelActive); - g_signal_connect(G_OBJECT(enableEchoCancel), "clicked", active_echo_cancel, NULL); - - gtk_box_pack_start( GTK_BOX(ret), enableEchoCancel, TRUE , TRUE , 1); - - - enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction")); - state = dbus_get_noise_suppress_state(); - noisesuppressActive = FALSE; - if(strcmp(state, "enabled") == 0) - noisesuppressActive = TRUE; - else - noisesuppressActive = FALSE; - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableNoiseReduction), noisesuppressActive); - gtk_box_pack_start( GTK_BOX(ret) , enableNoiseReduction , TRUE , TRUE , 1); - - g_signal_connect(G_OBJECT(enableNoiseReduction), "clicked", active_noise_suppress, NULL); - - return ret; -} - static void record_path_changed( GtkFileChooser *chooser , GtkLabel *label UNUSED) { DEBUG("record_path_changed"); @@ -982,6 +944,10 @@ GtkWidget* create_audio_configuration() // Sub boxes GtkWidget *box; GtkWidget *frame; + GtkWidget *enableEchoCancel; + GtkWidget *enableNoiseReduction; + gboolean echocancelActive, noisesuppressActive; + gchar *state; ret = gtk_vbox_new(FALSE, 10); gtk_container_set_border_width(GTK_CONTAINER(ret), 10); @@ -1068,14 +1034,31 @@ GtkWidget* create_audio_configuration() gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( fileChooser ) , filter); gtk_table_attach ( GTK_TABLE( table ), fileChooser, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gnome_main_section_new (_("Voice enhancement settings"), &noise_conf); - gtk_box_pack_start(GTK_BOX(ret), noise_conf, FALSE, FALSE, 0); - gtk_widget_show( noise_conf ); - // Box for the voice enhancement configuration - noisebox = noise_box(); - gtk_container_add( GTK_CONTAINER(noise_conf) , noisebox ); - + gnome_main_section_new_with_table (_("Voice enhancement settings"), &frame, &table, 2, 1); + gtk_box_pack_start(GTK_BOX(ret), frame, FALSE, FALSE, 0); + + enableEchoCancel = gtk_check_button_new_with_mnemonic( _("_Echo Suppression")); + state = dbus_get_echo_cancel_state(); + echocancelActive = FALSE; + if(strcmp(state, "enabled") == 0) + echocancelActive = TRUE; + else + echocancelActive = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableEchoCancel), echocancelActive); + g_signal_connect(G_OBJECT(enableEchoCancel), "clicked", active_echo_cancel, NULL); + gtk_table_attach ( GTK_TABLE(table), enableEchoCancel, 0, 1, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + enableNoiseReduction = gtk_check_button_new_with_mnemonic( _("_Noise Reduction")); + state = dbus_get_noise_suppress_state(); + noisesuppressActive = FALSE; + if(strcmp(state, "enabled") == 0) + noisesuppressActive = TRUE; + else + noisesuppressActive = FALSE; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(enableNoiseReduction), noisesuppressActive); + g_signal_connect(G_OBJECT(enableNoiseReduction), "clicked", active_noise_suppress, NULL); + gtk_table_attach ( GTK_TABLE(table), enableNoiseReduction, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show_all(ret); diff --git a/sflphone-client-gnome/src/config/preferencesdialog.c b/sflphone-client-gnome/src/config/preferencesdialog.c index ff68a31c7a..9dd08ccd81 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.c +++ b/sflphone-client-gnome/src/config/preferencesdialog.c @@ -32,22 +32,14 @@ */ #include <gtk/gtk.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> -#include <accountlist.h> #include <accountconfigdialog.h> -#include <actions.h> -#include <config.h> -#include <dbus/dbus.h> -#include <mainwindow.h> -#include <audioconf.h> #include <addressbook-config.h> #include <shortcuts-config.h> #include <hooks-config.h> -#include <utils.h> - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> /** * Local variables @@ -56,37 +48,54 @@ gboolean accDialogOpen = FALSE; gboolean dialogOpen = FALSE; gboolean ringtoneEnabled = TRUE; -GtkWidget * localPortSpinBox; -GtkWidget * localAddressCombo; - -GtkWidget * history_value; GtkWidget * status; +GtkWidget * history_value; -GtkWidget *showstatusicon; GtkWidget *starthidden; GtkWidget *popupwindow; GtkWidget *neverpopupwindow; +GtkWidget *treeView; +GtkWidget *iconview; +GtkCellRenderer *renderer; +GtkTreeViewColumn *column; +GtkTreeSelection *selection; +GtkWidget * notebook; + + +enum { + PIXBUF_COL, + TEXT_COL, + PAGE_NUMBER +}; + +typedef struct { + gchar* icon_descr; + gchar* icon_name; + gint page_number; +} browser_t; + + static int history_limit; static gboolean history_enabled = TRUE; -static void + static void set_md5_hash_cb (GtkWidget *widget UNUSED, gpointer data UNUSED) { - gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)); - dbus_set_md5_credential_hashing (enabled); + gboolean enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)); + dbus_set_md5_credential_hashing (enabled); } -static void + static void start_hidden (void) { gboolean currentstate = eel_gconf_get_integer (START_HIDDEN); eel_gconf_set_integer (START_HIDDEN, !currentstate); } -static void + static void set_popup_mode (GtkWidget *widget, gpointer *userdata) { gboolean currentstate = eel_gconf_get_integer (POPUP_ON_CALL); @@ -95,248 +104,340 @@ set_popup_mode (GtkWidget *widget, gpointer *userdata) } } -void + void set_notif_level () { gboolean current_state = eel_gconf_get_integer (NOTIFY_ALL); eel_gconf_set_integer (NOTIFY_ALL, !current_state); } -static void + static void history_limit_cb (GtkSpinButton *button, void *ptr) { - history_limit = gtk_spin_button_get_value_as_int ((GtkSpinButton *) (ptr)); + history_limit = gtk_spin_button_get_value_as_int ((GtkSpinButton *) (ptr)); } -static void + static void history_enabled_cb (GtkWidget *widget) { - history_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); - gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled); + history_enabled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); + gtk_widget_set_sensitive (GTK_WIDGET (history_value), history_enabled); - // Toggle it through D-Bus - eel_gconf_set_integer (HISTORY_ENABLED, !eel_gconf_get_integer (HISTORY_ENABLED)); + // Toggle it through D-Bus + eel_gconf_set_integer (HISTORY_ENABLED, !eel_gconf_get_integer (HISTORY_ENABLED)); } -void + void clean_history (void) { - calllist_clean_history (); + calllist_clean_history (); } void showstatusicon_cb (GtkWidget *widget, gpointer data) { - gboolean currentstatus = FALSE; + gboolean currentstatus = FALSE; - // data contains the previous value of dbus_is_status_icon_enabled () - ie before the click. - currentstatus = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); + // data contains the previous value of dbus_is_status_icon_enabled () - ie before the click. + currentstatus = (gboolean) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); - // Update the widget states - gtk_widget_set_sensitive (GTK_WIDGET (popupwindow), currentstatus); - gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow), currentstatus); - gtk_widget_set_sensitive (GTK_WIDGET (starthidden), currentstatus); + // Update the widget states + gtk_widget_set_sensitive (GTK_WIDGET (popupwindow), currentstatus); + gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow), currentstatus); + gtk_widget_set_sensitive (GTK_WIDGET (starthidden), currentstatus); - currentstatus ? show_status_icon () : hide_status_icon (); + currentstatus ? show_status_icon () : hide_status_icon (); // Update through D-Bus eel_gconf_set_integer (SHOW_STATUSICON, currentstatus); } -GtkWidget* + GtkWidget* create_general_settings () { - GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table; - gboolean statusicon; - - // Load history configuration - history_load_configuration (); - - // Main widget - ret = gtk_vbox_new (FALSE, 10); - gtk_container_set_border_width (GTK_CONTAINER(ret), 10); - - // Notifications Frame - gnome_main_section_new_with_table (_("Desktop Notifications"), &frame, - &table, 2, 1); - gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - - // Notification All - notifAll = gtk_check_button_new_with_mnemonic (_("_Enable notifications")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), eel_gconf_get_integer (NOTIFY_ALL)); - g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL ); - gtk_table_attach (GTK_TABLE(table), notifAll, 0, 1, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - // System Tray option frame - gnome_main_section_new_with_table (_("System Tray Icon"), &frame, &table, 4, - 1); - gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - - // Whether or not displaying an icon in the system tray - statusicon = eel_gconf_get_integer (SHOW_STATUSICON); - - showstatusicon = gtk_check_button_new_with_mnemonic ( - _("Show SFLphone in the system tray")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(showstatusicon), statusicon); - g_signal_connect (G_OBJECT (showstatusicon) , "clicked" , G_CALLBACK (showstatusicon_cb), NULL); - gtk_table_attach (GTK_TABLE (table), showstatusicon, 0, 1, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - popupwindow = gtk_radio_button_new_with_mnemonic (NULL, - _("_Popup main window on incoming call")); - g_signal_connect(G_OBJECT (popupwindow), "toggled", G_CALLBACK (set_popup_mode), NULL); - gtk_table_attach (GTK_TABLE(table), popupwindow, 0, 1, 1, 2, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - neverpopupwindow = gtk_radio_button_new_with_mnemonic_from_widget ( - GTK_RADIO_BUTTON (popupwindow), _("Ne_ver popup main window")); - gtk_table_attach (GTK_TABLE(table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + GtkWidget *ret, *notifAll, *trayItem, *frame, *checkBoxWidget, *label, *table, *showstatusicon; + gboolean statusicon; + + // Load history configuration + history_load_configuration (); + + // Main widget + ret = gtk_vbox_new (FALSE, 10); + gtk_container_set_border_width (GTK_CONTAINER(ret), 10); + + // Notifications Frame + gnome_main_section_new_with_table (_("Desktop Notifications"), &frame, + &table, 2, 1); + gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); + + // Notification All + notifAll = gtk_check_button_new_with_mnemonic (_("_Enable notifications")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(notifAll), eel_gconf_get_integer (NOTIFY_ALL)); + g_signal_connect(G_OBJECT( notifAll ) , "clicked" , G_CALLBACK( set_notif_level ) , NULL ); + gtk_table_attach (GTK_TABLE(table), notifAll, 0, 1, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + // System Tray option frame + gnome_main_section_new_with_table (_("System Tray Icon"), &frame, &table, 4, + 1); + gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); + + // Whether or not displaying an icon in the system tray + statusicon = eel_gconf_get_integer (SHOW_STATUSICON); + + showstatusicon = gtk_check_button_new_with_mnemonic ( + _("Show SFLphone in the system tray")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(showstatusicon), statusicon); + g_signal_connect (G_OBJECT (showstatusicon) , "clicked" , G_CALLBACK (showstatusicon_cb), NULL); + gtk_table_attach (GTK_TABLE (table), showstatusicon, 0, 1, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + popupwindow = gtk_radio_button_new_with_mnemonic (NULL, + _("_Popup main window on incoming call")); + g_signal_connect(G_OBJECT (popupwindow), "toggled", G_CALLBACK (set_popup_mode), NULL); + gtk_table_attach (GTK_TABLE(table), popupwindow, 0, 1, 1, 2, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + neverpopupwindow = gtk_radio_button_new_with_mnemonic_from_widget ( + GTK_RADIO_BUTTON (popupwindow), _("Ne_ver popup main window")); + gtk_table_attach (GTK_TABLE(table), neverpopupwindow, 0, 1, 2, 3, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); // Toggle according to the user configuration eel_gconf_get_integer (POPUP_ON_CALL) ? gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (popupwindow), - TRUE) : - gtk_toggle_button_set_active ( - GTK_TOGGLE_BUTTON (neverpopupwindow), - TRUE); - - starthidden = gtk_check_button_new_with_mnemonic ( - _("Hide SFLphone window on _startup")); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(starthidden), - eel_gconf_get_integer (START_HIDDEN)); - g_signal_connect(G_OBJECT (starthidden) , "clicked" , G_CALLBACK( start_hidden ) , NULL); - gtk_table_attach (GTK_TABLE(table), starthidden, 0, 1, 3, 4, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - // Update the widget states - gtk_widget_set_sensitive (GTK_WIDGET (popupwindow),statusicon); - gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow),statusicon); - gtk_widget_set_sensitive (GTK_WIDGET (starthidden),statusicon); - - // HISTORY CONFIGURATION - gnome_main_section_new_with_table (_("Calls History"), &frame, &table, 3, 1); - gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); - - checkBoxWidget = gtk_check_button_new_with_mnemonic ( - _("_Keep my history for at least")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget), - history_enabled); - g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (history_enabled_cb) , NULL); - gtk_table_attach (GTK_TABLE(table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - history_value = gtk_spin_button_new_with_range (1, 99, 1); - gtk_spin_button_set_value (GTK_SPIN_BUTTON(history_value), history_limit); - g_signal_connect( G_OBJECT (history_value) , "value-changed" , G_CALLBACK (history_limit_cb) , history_value); - gtk_widget_set_sensitive (GTK_WIDGET (history_value), - gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkBoxWidget))); - gtk_table_attach (GTK_TABLE(table), history_value, 1, 2, 0, 1, GTK_EXPAND - | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); - - label = gtk_label_new (_("days")); - gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, - GTK_EXPAND | GTK_FILL, 0, 5); - - gtk_widget_show_all (ret); - - return ret; + GTK_TOGGLE_BUTTON (popupwindow), + TRUE) : + gtk_toggle_button_set_active ( + GTK_TOGGLE_BUTTON (neverpopupwindow), + TRUE); + + starthidden = gtk_check_button_new_with_mnemonic ( + _("Hide SFLphone window on _startup")); + + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(starthidden), + eel_gconf_get_integer (START_HIDDEN)); + g_signal_connect(G_OBJECT (starthidden) , "clicked" , G_CALLBACK( start_hidden ) , NULL); + gtk_table_attach (GTK_TABLE(table), starthidden, 0, 1, 3, 4, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + // Update the widget states + gtk_widget_set_sensitive (GTK_WIDGET (popupwindow),statusicon); + gtk_widget_set_sensitive (GTK_WIDGET (neverpopupwindow),statusicon); + gtk_widget_set_sensitive (GTK_WIDGET (starthidden),statusicon); + + // HISTORY CONFIGURATION + gnome_main_section_new_with_table (_("Calls History"), &frame, &table, 3, 1); + gtk_box_pack_start (GTK_BOX(ret), frame, FALSE, FALSE, 0); + + checkBoxWidget = gtk_check_button_new_with_mnemonic ( + _("_Keep my history for at least")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (checkBoxWidget), + history_enabled); + g_signal_connect (G_OBJECT (checkBoxWidget) , "clicked" , G_CALLBACK (history_enabled_cb) , NULL); + gtk_table_attach (GTK_TABLE(table), checkBoxWidget, 0, 1, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + history_value = gtk_spin_button_new_with_range (1, 99, 1); + gtk_spin_button_set_value (GTK_SPIN_BUTTON(history_value), history_limit); + g_signal_connect( G_OBJECT (history_value) , "value-changed" , G_CALLBACK (history_limit_cb) , history_value); + gtk_widget_set_sensitive (GTK_WIDGET (history_value), + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkBoxWidget))); + gtk_table_attach (GTK_TABLE(table), history_value, 1, 2, 0, 1, GTK_EXPAND + | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 5); + + label = gtk_label_new (_("days")); + gtk_table_attach (GTK_TABLE(table), label, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, + GTK_EXPAND | GTK_FILL, 0, 5); + + gtk_widget_show_all (ret); + + return ret; } -void + void save_configuration_parameters (void) { - // Address book config - addressbook_config_save_parameters (); - hooks_save_parameters (); + // Address book config + addressbook_config_save_parameters (); + hooks_save_parameters (); - // History config - dbus_set_history_limit (history_limit); + // History config + dbus_set_history_limit (history_limit); - // Direct IP calls config - // dbus_set_ip2ip_details (directIpCallsProperties); + // Direct IP calls config + // dbus_set_ip2ip_details (directIpCallsProperties); } -void + void history_load_configuration () { - history_limit = dbus_get_history_limit (); - history_enabled = eel_gconf_get_integer (HISTORY_ENABLED); + history_limit = dbus_get_history_limit (); + history_enabled = eel_gconf_get_integer (HISTORY_ENABLED); } + +gboolean selection_changed_cb (GtkIconView *view, gpointer user_data) { + + GtkTreeModel *model; + GtkTreeIter iter; + GList *list; + gint page; + + model = gtk_icon_view_get_model (view); + list = gtk_icon_view_get_selected_items (view); + + if (list == NULL) + return; + + if (g_list_length (list) > 1) + return; + + gtk_tree_model_get_iter (model, &iter, list->data); + gtk_tree_model_get (model, &iter, PAGE_NUMBER, &page, -1); + + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), page); + g_list_foreach (list, (GFunc)gtk_tree_path_free, NULL); + g_list_free (list); +} + + + /** * Show configuration window with tabs */ -void + void show_preferences_dialog () { - GtkDialog * dialog; - GtkWidget * notebook; - GtkWidget * tab; - guint result; - - dialogOpen = TRUE; - - dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Preferences"), - GTK_WINDOW(get_main_window()), - GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CLOSE, - GTK_RESPONSE_ACCEPT, - NULL)); - - // Set window properties - gtk_dialog_set_has_separator (dialog, FALSE); - gtk_window_set_default_size (GTK_WINDOW(dialog), 600, 400); - gtk_container_set_border_width (GTK_CONTAINER(dialog), 0); - - // Create tabs container - notebook = gtk_notebook_new (); - gtk_box_pack_start (GTK_BOX (dialog->vbox), notebook, TRUE, TRUE, 0); - gtk_container_set_border_width (GTK_CONTAINER(notebook), 10); - gtk_widget_show (notebook); - - // General settings tab - tab = create_general_settings (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("General"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Audio tab - tab = create_audio_configuration (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("Audio"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Addressbook tab - tab = create_addressbook_settings (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("Address Book"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Hooks tab - tab = create_hooks_settings (); - gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( - _("Hooks"))); - gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); - - // Shortcuts tab - tab = create_shortcuts_settings(); - gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Shortcuts"))); - gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab); - - gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); - - result = gtk_dialog_run (dialog); - - save_configuration_parameters (); - update_actions (); - - dialogOpen = FALSE; - - gtk_widget_destroy (GTK_WIDGET(dialog)); + GtkDialog * dialog; + GtkWidget * hbox; + GtkWidget * tab; + guint result; + + dialogOpen = TRUE; + + dialog = GTK_DIALOG(gtk_dialog_new_with_buttons (_("Preferences"), + GTK_WINDOW(get_main_window()), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CLOSE, + GTK_RESPONSE_ACCEPT, + NULL)); + + // Set window properties + gtk_dialog_set_has_separator (dialog, FALSE); + gtk_window_set_default_size (GTK_WINDOW(dialog), 600, 400); + gtk_container_set_border_width (GTK_CONTAINER(dialog), 0); + + + hbox = gtk_hbox_new(FALSE, 10); + + // Create tree view + iconview = gtk_icon_view_new_with_model (createModel ()); + g_object_set (iconview, + "selection-mode", GTK_SELECTION_BROWSE, + "text-column", TEXT_COL, + "pixbuf-column", PIXBUF_COL, + "columns", 1, + "margin", 10, + NULL); + // Connect the callback when clicking on an item + g_signal_connect(G_OBJECT (iconview), "selection-changed", G_CALLBACK (selection_changed_cb), NULL); + gtk_box_pack_start (GTK_BOX (hbox), iconview, TRUE, TRUE, 0); + + // Create tabs container + notebook = gtk_notebook_new (); + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), FALSE); + gtk_box_pack_end (GTK_BOX (hbox), notebook, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (dialog->vbox), hbox, TRUE, TRUE, 0); + gtk_widget_show_all(dialog->vbox); + gtk_container_set_border_width (GTK_CONTAINER(notebook), 10); + gtk_widget_show (notebook); + + // General settings tab + tab = create_general_settings (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("General"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Audio tab + tab = create_audio_configuration (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("Audio"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Addressbook tab + tab = create_addressbook_settings (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("Address Book"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Hooks tab + tab = create_hooks_settings (); + gtk_notebook_append_page (GTK_NOTEBOOK(notebook), tab, gtk_label_new ( + _("Hooks"))); + gtk_notebook_page_num (GTK_NOTEBOOK(notebook), tab); + + // Shortcuts tab + tab = create_shortcuts_settings(); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook), tab, gtk_label_new(_("Shortcuts"))); + gtk_notebook_page_num(GTK_NOTEBOOK(notebook), tab); + + // By default, general settings + gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 0); + // Highlight the corresponding icon + gtk_icon_view_select_path (iconview, gtk_tree_path_new_first ()); + + result = gtk_dialog_run (dialog); + + save_configuration_parameters (); + update_actions (); + + dialogOpen = FALSE; + + gtk_widget_destroy (GTK_WIDGET(dialog)); } + +GtkTreeModel* createModel() { + + browser_t browser_entries[5] = { + {_("General"), "start-here", 0}, + {_("Audio"), "multimedia-volume-control", 1}, + {_("Address Book"), "address-book-new", 2}, + {_("Hooks"), "gnome-globe", 3}, + {_("Shortcuts"), "preferences-desktop-keyboard", 4} + }; + + GdkPixbuf *pixbuf; + GtkTreeIter iter; + GtkListStore *store; + GError *error = NULL; + GtkIconSet *icon = NULL; + gint i; + + store = gtk_list_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); + GtkIconTheme* theme = gtk_icon_theme_get_default(); + + for(i = 0; i < 5; i++) { + + gtk_list_store_append(store, &iter); + + pixbuf = gtk_icon_theme_load_icon (theme, browser_entries[i].icon_name, 48, 0, &error); + + gtk_list_store_set(store, &iter, + PIXBUF_COL, pixbuf, + TEXT_COL, browser_entries[i].icon_descr, + PAGE_NUMBER, browser_entries[i].page_number, + -1); + + if (pixbuf != NULL) { + gdk_pixbuf_unref (pixbuf); + } else { + DEBUG("Couldn't load icon: %s", error->message); + g_error_free (error); + } + } + + return GTK_TREE_MODEL(store); +} diff --git a/sflphone-client-gnome/src/config/preferencesdialog.h b/sflphone-client-gnome/src/config/preferencesdialog.h index e14a240111..7f7db4d26e 100644 --- a/sflphone-client-gnome/src/config/preferencesdialog.h +++ b/sflphone-client-gnome/src/config/preferencesdialog.h @@ -121,4 +121,6 @@ void save_configuration_parameters (void); void history_load_configuration (void); +GtkTreeModel* createModel(); + #endif diff --git a/sflphone-client-gnome/src/icons/icon_factory.c b/sflphone-client-gnome/src/icons/icon_factory.c index c18e038b0a..2d2d944fdb 100644 --- a/sflphone-client-gnome/src/icons/icon_factory.c +++ b/sflphone-client-gnome/src/icons/icon_factory.c @@ -29,6 +29,8 @@ */ #include "icon_factory.h" +#include "icons/pixmap_data.h" + static GtkIconFactory *icon_factory = NULL; @@ -59,6 +61,11 @@ void add_icon (GtkIconFactory *factory, const gchar *stock_id, const guint8 *ico DEBUG ("Icon %s already exists in factory\n", stock_id); } +GtkIconSet* lookup_sflphone_factory (const gchar *stock_id) { + + return gtk_icon_factory_lookup (icon_factory, stock_id); +} + void register_sflphone_stock_icons (GtkIconFactory *factory) { add_icon (factory, GTK_STOCK_PICKUP, gnome_stock_pickup, GTK_ICON_SIZE_SMALL_TOOLBAR); diff --git a/sflphone-client-gnome/src/icons/icon_factory.h b/sflphone-client-gnome/src/icons/icon_factory.h index 6392832ac6..b31c1b89a2 100644 --- a/sflphone-client-gnome/src/icons/icon_factory.h +++ b/sflphone-client-gnome/src/icons/icon_factory.h @@ -49,6 +49,8 @@ G_BEGIN_DECLS void init_icon_factory (void); +GtkIconSet* lookup_sflphone_factory (const gchar *stock_id); + G_END_DECLS #endif -- GitLab