diff --git a/sflphone-client-gnome/src/config/addressbook-config.c b/sflphone-client-gnome/src/config/addressbook-config.c index 9851ce64338fb884ca94fbcc4610ea90508bf913..4ce36174f29df0e04eb9a1f4320749e625f7aa49 100644 --- a/sflphone-client-gnome/src/config/addressbook-config.c +++ b/sflphone-client-gnome/src/config/addressbook-config.c @@ -27,108 +27,119 @@ GtkWidget *book_tree_view; enum { - COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME, COLUMN_BOOK_UID + COLUMN_BOOK_ACTIVE, COLUMN_BOOK_NAME, COLUMN_BOOK_UID }; -void + void addressbook_config_load_parameters(AddressBook_Config **settings) { - GHashTable *_params = NULL; - AddressBook_Config *_settings; + GHashTable *_params = NULL; + AddressBook_Config *_settings; - // Allocate a struct - _settings = g_new0 (AddressBook_Config, 1); + // Allocate a struct + _settings = g_new0 (AddressBook_Config, 1); - // Fetch the settings from D-Bus - _params = (GHashTable*) dbus_get_addressbook_settings(); + // Fetch the settings from D-Bus + _params = (GHashTable*) dbus_get_addressbook_settings(); - if (_params == NULL) + if (_params == NULL) { - _settings->max_results = 30; - _settings->display_contact_photo = 0; - _settings->search_phone_business = 1; - _settings->search_phone_home = 1; - _settings->search_phone_mobile = 1; + _settings->enable = 1; + _settings->max_results = 30; + _settings->display_contact_photo = 0; + _settings->search_phone_business = 1; + _settings->search_phone_home = 1; + _settings->search_phone_mobile = 1; } - else + else { - _settings->max_results = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_MAX_RESULTS)); - _settings->display_contact_photo = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)); - _settings->search_phone_business = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_PHONE_BUSINESS)); - _settings->search_phone_home = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_PHONE_HOME)); - _settings->search_phone_mobile = (guint) (g_hash_table_lookup(_params, - ADDRESSBOOK_DISPLAY_PHONE_MOBILE)); + _settings->enable = (guint) (g_hash_table_lookup (_params, + ADDRESSBOOK_ENABLE)); + _settings->max_results = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_MAX_RESULTS)); + _settings->display_contact_photo = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_CONTACT_PHOTO)); + _settings->search_phone_business = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_PHONE_BUSINESS)); + _settings->search_phone_home = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_PHONE_HOME)); + _settings->search_phone_mobile = (guint) (g_hash_table_lookup(_params, + ADDRESSBOOK_DISPLAY_PHONE_MOBILE)); } - *settings = _settings; + *settings = _settings; } -void + void addressbook_config_save_parameters(void) { - GHashTable *params = NULL; - - params = g_hash_table_new(NULL, g_str_equal); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_MAX_RESULTS, - (gpointer) addressbook_config->max_results); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, - (gpointer) addressbook_config->display_contact_photo); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, - (gpointer) addressbook_config->search_phone_business); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME, - (gpointer) addressbook_config->search_phone_home); - g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE, - (gpointer) addressbook_config->search_phone_mobile); - - dbus_set_addressbook_settings(params); - - // Decrement the reference count - g_hash_table_unref(params); + GHashTable *params = NULL; + + params = g_hash_table_new(NULL, g_str_equal); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_ENABLE, + (gpointer) addressbook_config->enable); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_MAX_RESULTS, + (gpointer) addressbook_config->max_results); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, + (gpointer) addressbook_config->display_contact_photo); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, + (gpointer) addressbook_config->search_phone_business); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_HOME, + (gpointer) addressbook_config->search_phone_home); + g_hash_table_replace(params, (gpointer) ADDRESSBOOK_DISPLAY_PHONE_MOBILE, + (gpointer) addressbook_config->search_phone_mobile); + + dbus_set_addressbook_settings(params); + + // Decrement the reference count + g_hash_table_unref(params); } -static void -max_results_cb(GtkRange* scale) + static void +enable_cb (GtkWidget *widget) { + addressbook_config->enable + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); +} - addressbook_config->max_results = (guint) gtk_range_get_value(GTK_RANGE (scale)); + static void +max_results_cb (GtkSpinButton *button) +{ + addressbook_config->max_results = gtk_spin_button_get_value_as_int(button); } -static void + static void display_contact_photo_cb(GtkWidget *widget) { - addressbook_config->display_contact_photo - = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + addressbook_config->display_contact_photo + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } -static void + static void search_phone_business_cb(GtkWidget *widget) { - addressbook_config->search_phone_business - = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + addressbook_config->search_phone_business + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } -static void + static void search_phone_home_cb(GtkWidget *widget) { - addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(widget)); + addressbook_config->search_phone_home = (guint) gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(widget)); } -static void + static void search_phone_mobile_cb(GtkWidget *widget) { - addressbook_config->search_phone_mobile - = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + addressbook_config->search_phone_mobile + = (guint) gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); } /** @@ -137,240 +148,244 @@ search_phone_mobile_cb(GtkWidget *widget) */ static void addressbook_config_book_active_toggled( - GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data) + GtkCellRendererToggle *renderer UNUSED, gchar *path, gpointer data) { - GtkTreeIter iter; - GtkTreePath *treePath; - GtkTreeModel *model; - gboolean active; - gchar* name; - gchar* uid; + GtkTreeIter iter; + GtkTreePath *treePath; + GtkTreeModel *model; + gboolean active; + gchar* name; + gchar* uid; - // Get path of clicked book active toggle box - treePath = gtk_tree_path_new_from_string(path); - model = gtk_tree_view_get_model(GTK_TREE_VIEW(data)); - gtk_tree_model_get_iter(model, &iter, treePath); + // Get path of clicked book active toggle box + treePath = gtk_tree_path_new_from_string(path); + model = gtk_tree_view_get_model(GTK_TREE_VIEW(data)); + gtk_tree_model_get_iter(model, &iter, treePath); - // Get active value at iteration - gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, - COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); + // Get active value at iteration + gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, + COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); - // Toggle active value - active = !active; + // Toggle active value + active = !active; - // Store value - gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_BOOK_ACTIVE, active, -1); + // Store value + gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_BOOK_ACTIVE, active, -1); - gtk_tree_path_free(treePath); + gtk_tree_path_free(treePath); - // Update current memory stored books data - books_get_book_data_by_uid(uid)->active = active; + // Update current memory stored books data + books_get_book_data_by_uid(uid)->active = active; - // Save data + // Save data - gboolean valid; + gboolean valid; - // Initiate double array char list for one string - const gchar** list = (void*) malloc(sizeof(void*)); - int c = 0; + // Initiate double array char list for one string + const gchar** list = (void*) malloc(sizeof(void*)); + int c = 0; - /* Get the first iter in the list */ - valid = gtk_tree_model_get_iter_first(model, &iter); + /* Get the first iter in the list */ + valid = gtk_tree_model_get_iter_first(model, &iter); - while (valid) + while (valid) { - // Get active value at iteration - gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, - COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); + // Get active value at iteration + gtk_tree_model_get(model, &iter, COLUMN_BOOK_ACTIVE, &active, + COLUMN_BOOK_UID, &uid, COLUMN_BOOK_NAME, &name, -1); - if (active) + if (active) { - // Reallocate memory each time - if (c != 0) - list = (void*) realloc(list, (c + 1) * sizeof(void*)); + // Reallocate memory each time + if (c != 0) + list = (void*) realloc(list, (c + 1) * sizeof(void*)); - *(list + c) = uid; - c++; + *(list + c) = uid; + c++; } - valid = gtk_tree_model_iter_next(model, &iter); + valid = gtk_tree_model_iter_next(model, &iter); } - // Allocate NULL array at the end for Dbus - list = (void*) realloc(list, (c + 1) * sizeof(void*)); - *(list + c) = NULL; + // Allocate NULL array at the end for Dbus + list = (void*) realloc(list, (c + 1) * sizeof(void*)); + *(list + c) = NULL; - // Call daemon to store in config file - dbus_set_addressbook_list(list); + // Call daemon to store in config file + dbus_set_addressbook_list(list); - free(list); + free(list); } -static void + static void addressbook_config_fill_book_list() { - GtkTreeIter list_store_iterator; - GSList *book_list_iterator; - GtkListStore *store; - book_data_t *book_data; - GSList *books_data = addressbook_get_books_data(); - - // Get model of view and clear it - store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); - gtk_list_store_clear(store); - - // Populate window - for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator - = book_list_iterator->next) + GtkTreeIter list_store_iterator; + GSList *book_list_iterator; + GtkListStore *store; + book_data_t *book_data; + GSList *books_data = addressbook_get_books_data(); + + // Get model of view and clear it + store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); + gtk_list_store_clear(store); + + // Populate window + for (book_list_iterator = books_data; book_list_iterator != NULL; book_list_iterator + = book_list_iterator->next) { - book_data = (book_data_t *) book_list_iterator->data; - gtk_list_store_append(store, &list_store_iterator); - gtk_list_store_set(store, &list_store_iterator, COLUMN_BOOK_ACTIVE, - book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME, - book_data->name, -1); + book_data = (book_data_t *) book_list_iterator->data; + gtk_list_store_append(store, &list_store_iterator); + gtk_list_store_set(store, &list_store_iterator, COLUMN_BOOK_ACTIVE, + book_data->active, COLUMN_BOOK_UID, book_data->uid, COLUMN_BOOK_NAME, + book_data->name, -1); } - store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); + store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(book_tree_view))); } -GtkWidget* + GtkWidget* create_addressbook_settings() { - GtkWidget *ret, *result_frame, *table, *value, *label, *photo, *item; - - GtkListStore *store; - GtkCellRenderer *renderer; - GtkTreeSelection *tree_selection; - GtkTreeViewColumn *tree_view_column; - GtkWidget *scrolled_window, *hbox; - - // Load the user value - addressbook_config_load_parameters(&addressbook_config); - - ret = gtk_vbox_new(FALSE, 10); - gtk_container_set_border_width(GTK_CONTAINER(ret), 10); - - result_frame = gtk_frame_new(_("General")); - gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); - gtk_widget_show (result_frame); - - table = gtk_table_new ( 5, 3, FALSE/* homogeneous */); - gtk_table_set_row_spacings( GTK_TABLE(table), 10); - gtk_table_set_col_spacings( GTK_TABLE(table), 10); - gtk_widget_show(table); - gtk_container_add( GTK_CONTAINER (result_frame) , table ); - - // SCALE BUTTON - NUMBER OF RESULTS - hbox = gtk_hbox_new(FALSE, 0); - label = gtk_label_new (_("Maximum results: ")); - gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); - value = gtk_hscale_new_with_range (25.0 , 50.0 , 5.0); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), value); - gtk_scale_set_digits (GTK_SCALE(value) , 0); - gtk_scale_set_value_pos (GTK_SCALE(value) , GTK_POS_RIGHT); - gtk_range_set_value (GTK_RANGE( value ) , addressbook_config->max_results); - g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL ); - gtk_box_pack_start(GTK_BOX(hbox),value,TRUE,TRUE,10); - gtk_table_attach ( GTK_TABLE( table ), hbox, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0); - gtk_widget_show_all(hbox); - - // PHOTO DISPLAY - photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo); - g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL); - gtk_table_attach ( GTK_TABLE( table ), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - result_frame = gtk_frame_new(_("Fields")); - gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); - gtk_widget_show (result_frame); - - table = gtk_table_new ( 5, 3, FALSE); - gtk_table_set_row_spacings( GTK_TABLE(table), 10); - gtk_table_set_col_spacings( GTK_TABLE(table), 10); - gtk_widget_show(table); - gtk_container_add( GTK_CONTAINER (result_frame) , table ); - - item = gtk_check_button_new_with_mnemonic( _("_Business phone")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business); - g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL); - gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - item = gtk_check_button_new_with_mnemonic( _("_Home phone")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home); - g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL); - gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - item = gtk_check_button_new_with_mnemonic( _("_Mobile phone")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile); - g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL); - gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - - result_frame = gtk_frame_new(_("Books")); - gtk_box_pack_start(GTK_BOX(ret), result_frame, TRUE, TRUE, 0); - gtk_widget_show (result_frame); - - scrolled_window = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); - - gtk_container_add( GTK_CONTAINER (result_frame) , scrolled_window ); - - store = gtk_list_store_new(3, - G_TYPE_BOOLEAN, // Active - G_TYPE_STRING, // uid - G_TYPE_STRING // Name - ); - - // Create tree view with list store - book_tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - - // Get tree selection manager - tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(book_tree_view)); - - // Active column - renderer = gtk_cell_renderer_toggle_new(); - tree_view_column = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); - - // Toggle active property on clicked - g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(addressbook_config_book_active_toggled), (gpointer)book_tree_view); - - // Name column - renderer = gtk_cell_renderer_text_new(); - tree_view_column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); - - g_object_unref(G_OBJECT(store)); - gtk_container_add(GTK_CONTAINER(scrolled_window), book_tree_view); - - addressbook_config_fill_book_list(); - - gtk_widget_show_all(ret); - - return ret; + GtkWidget *ret, *result_frame, *table, *value, *label, *photo, *item; + + GtkListStore *store; + GtkCellRenderer *renderer; + GtkTreeSelection *tree_selection; + GtkTreeViewColumn *tree_view_column; + GtkWidget *scrolled_window, *hbox; + + // Load the user value + addressbook_config_load_parameters(&addressbook_config); + + ret = gtk_vbox_new(FALSE, 10); + gtk_container_set_border_width(GTK_CONTAINER(ret), 10); + + result_frame = gtk_frame_new(_("General")); + gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); + gtk_widget_show (result_frame); + + table = gtk_table_new ( 6, 3, FALSE/* homogeneous */); + gtk_table_set_row_spacings( GTK_TABLE(table), 10); + gtk_table_set_col_spacings( GTK_TABLE(table), 10); + gtk_widget_show(table); + gtk_container_add( GTK_CONTAINER (result_frame) , table ); + + // PHOTO DISPLAY + item = gtk_check_button_new_with_mnemonic( _("_Use Evolution address book")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->enable); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (enable_cb), NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + // SCALE BUTTON - NUMBER OF RESULTS + hbox = gtk_hbox_new(FALSE, 0); + label = gtk_label_new (_("Download limit:")); + gtk_box_pack_start(GTK_BOX(hbox),label,FALSE,FALSE,0); + value = gtk_spin_button_new_with_range(1, 500, 1); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), value); + gtk_spin_button_set_value (GTK_SPIN_BUTTON( value ) , addressbook_config->max_results); + g_signal_connect (G_OBJECT (value) , "value-changed" , G_CALLBACK(max_results_cb), NULL ); + gtk_box_pack_start(GTK_BOX(hbox),value,TRUE,TRUE,10); + gtk_table_attach ( GTK_TABLE( table ), hbox, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND |GTK_FILL, 0, 0); + gtk_widget_show_all(hbox); + + // PHOTO DISPLAY + photo = gtk_check_button_new_with_mnemonic( _("_Display contact photo if available")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(photo), addressbook_config->display_contact_photo); + g_signal_connect (G_OBJECT(photo) , "clicked" , G_CALLBACK (display_contact_photo_cb), NULL); + gtk_table_attach ( GTK_TABLE( table ), photo, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + result_frame = gtk_frame_new(_("Fields")); + gtk_box_pack_start(GTK_BOX(ret), result_frame, FALSE, FALSE, 0); + gtk_widget_show (result_frame); + + table = gtk_table_new ( 5, 3, FALSE); + gtk_table_set_row_spacings( GTK_TABLE(table), 10); + gtk_table_set_col_spacings( GTK_TABLE(table), 10); + gtk_widget_show(table); + gtk_container_add( GTK_CONTAINER (result_frame) , table ); + + item = gtk_check_button_new_with_mnemonic( _("_Business phone")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_business); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_business_cb) , NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + item = gtk_check_button_new_with_mnemonic( _("_Home phone")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_home); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_home_cb) , NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + item = gtk_check_button_new_with_mnemonic( _("_Mobile phone")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(item), addressbook_config->search_phone_mobile); + g_signal_connect (G_OBJECT(item) , "clicked" , G_CALLBACK (search_phone_mobile_cb) , NULL); + gtk_table_attach ( GTK_TABLE( table ), item, 1, 3, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); + + result_frame = gtk_frame_new(_("Books")); + gtk_box_pack_start(GTK_BOX(ret), result_frame, TRUE, TRUE, 0); + gtk_widget_show (result_frame); + + scrolled_window = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); + + gtk_container_add( GTK_CONTAINER (result_frame) , scrolled_window ); + + store = gtk_list_store_new(3, + G_TYPE_BOOLEAN, // Active + G_TYPE_STRING, // uid + G_TYPE_STRING // Name + ); + + // Create tree view with list store + book_tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + + // Get tree selection manager + tree_selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(book_tree_view)); + + // Active column + renderer = gtk_cell_renderer_toggle_new(); + tree_view_column = gtk_tree_view_column_new_with_attributes("", renderer, "active", COLUMN_BOOK_ACTIVE, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); + + // Toggle active property on clicked + g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(addressbook_config_book_active_toggled), (gpointer)book_tree_view); + + // Name column + renderer = gtk_cell_renderer_text_new(); + tree_view_column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "markup", COLUMN_BOOK_NAME, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(book_tree_view), tree_view_column); + + g_object_unref(G_OBJECT(store)); + gtk_container_add(GTK_CONTAINER(scrolled_window), book_tree_view); + + addressbook_config_fill_book_list(); + + gtk_widget_show_all(ret); + + return ret; } -gboolean + gboolean addressbook_display(AddressBook_Config *settings, const gchar *field) { - gboolean display = FALSE; + gboolean display = FALSE; - if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0) - display = (settings->display_contact_photo == 1) ? TRUE : FALSE; + if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO) == 0) + display = (settings->display_contact_photo == 1) ? TRUE : FALSE; - else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0) - display = (settings->search_phone_business == 1) ? TRUE : FALSE; + else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS) == 0) + display = (settings->search_phone_business == 1) ? TRUE : FALSE; - else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0) - display = (settings->search_phone_home == 1) ? TRUE : FALSE; + else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_HOME) == 0) + display = (settings->search_phone_home == 1) ? TRUE : FALSE; - else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0) - display = (settings->search_phone_mobile == 1) ? TRUE : FALSE; + else if (g_strcasecmp(field, ADDRESSBOOK_DISPLAY_PHONE_MOBILE) == 0) + display = (settings->search_phone_mobile == 1) ? TRUE : FALSE; - else - display = FALSE; + else + display = FALSE; - return display; + return display; } diff --git a/sflphone-client-gnome/src/config/addressbook-config.h b/sflphone-client-gnome/src/config/addressbook-config.h index ec7a8d16360e56090421b60120bcd26cd63221b7..6e46698acff248b757ad3c614cc594bbae12f634 100644 --- a/sflphone-client-gnome/src/config/addressbook-config.h +++ b/sflphone-client-gnome/src/config/addressbook-config.h @@ -27,6 +27,7 @@ G_BEGIN_DECLS +#define ADDRESSBOOK_ENABLE "ADDRESSBOOK_ENABLE" #define ADDRESSBOOK_MAX_RESULTS "ADDRESSBOOK_MAX_RESULTS" #define ADDRESSBOOK_DISPLAY_CONTACT_PHOTO "ADDRESSBOOK_DISPLAY_CONTACT_PHOTO" #define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS "ADDRESSBOOK_DISPLAY_PHONE_BUSINESS" @@ -35,11 +36,12 @@ G_BEGIN_DECLS typedef struct _AddressBook_Config { - guint max_results; - guint display_contact_photo; - guint search_phone_home; - guint search_phone_business; - guint search_phone_mobile; + guint enable; + guint max_results; + guint display_contact_photo; + guint search_phone_home; + guint search_phone_business; + guint search_phone_mobile; } AddressBook_Config; /** diff --git a/sflphone-client-gnome/src/config/configwindow.c b/sflphone-client-gnome/src/config/configwindow.c index 7a73328371f20663c6ea49b21357ed4e58f65497..f88888205e79fb550549b365f1b4c56fbfe7f789 100644 --- a/sflphone-client-gnome/src/config/configwindow.c +++ b/sflphone-client-gnome/src/config/configwindow.c @@ -797,6 +797,7 @@ show_config_window () result = gtk_dialog_run(dialog); save_configuration_parameters (); + toolbar_update_buttons(); dialogOpen = FALSE; diff --git a/sflphone-client-gnome/src/contacts/addressbook.c b/sflphone-client-gnome/src/contacts/addressbook.c index c9fa4dcbcf230668ed5e21958886d3dcaebcce00..4c08210f3eaa244637b4b0783a31b046d139a432 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.c +++ b/sflphone-client-gnome/src/contacts/addressbook.c @@ -46,6 +46,20 @@ addressbook_search(GtkEntry* entry) addressbook_config); } +/** + * Return addressbook state + */ +gboolean +addressbook_is_enabled() +{ + AddressBook_Config *addressbook_config; + + // Load the address book parameters + addressbook_config_load_parameters(&addressbook_config); + + return (guint)addressbook_config->enable; +} + /** * Return addressbook state */ diff --git a/sflphone-client-gnome/src/contacts/addressbook.h b/sflphone-client-gnome/src/contacts/addressbook.h index f83aefaf5bf6a93f1ec61c8e51e6c1dce87c75ba..9426d1d7accd54fd912b6247bf7bd3e7ea97bb08 100644 --- a/sflphone-client-gnome/src/contacts/addressbook.h +++ b/sflphone-client-gnome/src/contacts/addressbook.h @@ -35,6 +35,12 @@ gboolean addressbook_is_ready(); +/** + * Return addressbook state + */ +gboolean +addressbook_is_enabled(); + /** * Perform a search in addressbook */ diff --git a/sflphone-client-gnome/src/toolbar.c b/sflphone-client-gnome/src/toolbar.c index f6a59c73425ce9917b0536c6861f702ddbefa286..5ae18eacefd60f1f9b38b0e59ad693b5517f6b27 100644 --- a/sflphone-client-gnome/src/toolbar.c +++ b/sflphone-client-gnome/src/toolbar.c @@ -283,6 +283,7 @@ GtkWidget *create_toolbar () void toolbar_update_buttons () { + gtk_widget_set_sensitive( GTK_WIDGET(callButton), FALSE); gtk_widget_set_sensitive( GTK_WIDGET(hangupButton), FALSE); gtk_widget_set_sensitive( GTK_WIDGET(holdButton), FALSE); @@ -290,6 +291,7 @@ toolbar_update_buttons () gtk_widget_set_sensitive( GTK_WIDGET(mailboxButton) , FALSE); gtk_widget_set_sensitive( GTK_WIDGET(unholdButton), FALSE); gtk_widget_set_sensitive( GTK_WIDGET(recButton), FALSE); + gtk_widget_set_sensitive( GTK_WIDGET(contactButton), FALSE); g_object_ref(holdButton); g_object_ref(unholdButton); if( is_inserted( GTK_WIDGET(holdButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(holdButton)); @@ -301,6 +303,7 @@ toolbar_update_buttons () if( is_inserted( GTK_WIDGET(pickupButton) ) ) gtk_container_remove(GTK_CONTAINER(toolbar), GTK_WIDGET(pickupButton)); gtk_toolbar_insert(GTK_TOOLBAR(toolbar), callButton, 0); //gtk_toolbar_insert(GTK_TOOLBAR(toolbar), recButton, 0); + if (addressbook_is_enabled () && addressbook_is_ready()) gtk_widget_set_sensitive( GTK_WIDGET(contactButton), TRUE); gtk_signal_handler_block(GTK_OBJECT(transfertButton),transfertButtonConnId); @@ -386,10 +389,5 @@ toolbar_update_buttons () } } - // Activate addressbook button if needed - // TODO : should be moved in a better place - if(addressbook_is_ready()) - gtk_widget_set_sensitive( GTK_WIDGET(contactButton), TRUE); - else - gtk_widget_set_sensitive( GTK_WIDGET(contactButton), FALSE); + } diff --git a/sflphone-common/src/managerimpl.cpp b/sflphone-common/src/managerimpl.cpp index a5c25abb96b6f5fc69a4ddc8ce2127d678278dca..700db1b008e0cc9e2bf348a214dbc5c46ba6df00 100644 --- a/sflphone-common/src/managerimpl.cpp +++ b/sflphone-common/src/managerimpl.cpp @@ -1207,6 +1207,7 @@ ManagerImpl::initConfigFile ( bool load_user_value ) fill_config_str(CONFIG_ACCOUNTS_ORDER, ""); section = ADDRESSBOOK; + fill_config_int (ADDRESSBOOK_ENABLE, YES_STR); fill_config_int (ADDRESSBOOK_MAX_RESULTS, "25"); fill_config_int (ADDRESSBOOK_DISPLAY_CONTACT_PHOTO, NO_STR); fill_config_int (ADDRESSBOOK_DISPLAY_PHONE_BUSINESS, YES_STR); @@ -2627,6 +2628,7 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { std::map<std::string, int32_t> settings; + settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_ENABLE", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_ENABLE)) ); settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_MAX_RESULTS", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS)) ); settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO))); settings.insert (std::pair<std::string, int32_t> ("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS", getConfigInt (ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS))); @@ -2638,6 +2640,7 @@ std::map<std::string, int32_t> ManagerImpl::getAddressbookSettings () { void ManagerImpl::setAddressbookSettings (const std::map<std::string, int32_t>& settings){ + setConfig(ADDRESSBOOK, ADDRESSBOOK_ENABLE, (*settings.find("ADDRESSBOOK_ENABLE")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_MAX_RESULTS, (*settings.find("ADDRESSBOOK_MAX_RESULTS")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_CONTACT_PHOTO , (*settings.find("ADDRESSBOOK_DISPLAY_CONTACT_PHOTO")).second); setConfig(ADDRESSBOOK, ADDRESSBOOK_DISPLAY_PHONE_BUSINESS , (*settings.find("ADDRESSBOOK_DISPLAY_PHONE_BUSINESS")).second); diff --git a/sflphone-common/src/user_cfg.h b/sflphone-common/src/user_cfg.h index d0522277ea45fa17b22d0f732f00f82a20bb9e78..396ffc22781f4ef5f22f372f6f39862605aa5cbf 100644 --- a/sflphone-common/src/user_cfg.h +++ b/sflphone-common/src/user_cfg.h @@ -73,6 +73,7 @@ #define STUN_SERVER "STUN.server" #define ADDRESSBOOK "Addressbook" /** Address book section */ +#define ADDRESSBOOK_ENABLE "Addressbook.enable" /** Enable address book */ #define ADDRESSBOOK_MAX_RESULTS "Addressbook.max_results" #define ADDRESSBOOK_DISPLAY_CONTACT_PHOTO "Addressbook.contact_photo" #define ADDRESSBOOK_DISPLAY_PHONE_BUSINESS "Addressbook.phone_business"