From f5f7af7389d552413b384b6d1109b2354555f105 Mon Sep 17 00:00:00 2001 From: Ramiro Estrugo Date: Fri, 18 Aug 2000 06:52:56 +0000 Subject: [PATCH] New function to insert a string without having to access the string list * libnautilus-extensions/nautilus-string-picker.c: (nautilus_string_picker_initialize), (nautilus_string_picker_destroy), (nautilus_string_picker_set_string_list), (nautilus_string_picker_get_string_list), (nautilus_string_picker_get_selected_string), (nautilus_string_picker_set_selected_string), (nautilus_string_picker_insert_string): * libnautilus-extensions/nautilus-string-picker.h: New function to insert a string without having to access the string list first. Also renamed some poorly named functions. * libnautilus-extensions/nautilus-preferences-item.c: (preferences_item_create_font_family), (preferences_item_create_theme), (text_item_changed_callback): Update for string picker api changes. * test/test-nautilus-widgets.c: (test_string_picker), (string_picker_changed_callback): Update for string picker api changes. --- ChangeLog | 23 +++++ .../nautilus-preferences-item.c | 12 +-- .../nautilus-string-picker.c | 95 +++++++++++-------- .../nautilus-string-picker.h | 23 +++-- .../nautilus-preferences-item.c | 12 +-- libnautilus-private/nautilus-string-picker.c | 95 +++++++++++-------- libnautilus-private/nautilus-string-picker.h | 23 +++-- test/test-nautilus-widgets.c | 4 +- 8 files changed, 173 insertions(+), 114 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5cfb30f7c..0c03e4746 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2000-08-17 Ramiro Estrugo + + * libnautilus-extensions/nautilus-string-picker.c: + (nautilus_string_picker_initialize), + (nautilus_string_picker_destroy), + (nautilus_string_picker_set_string_list), + (nautilus_string_picker_get_string_list), + (nautilus_string_picker_get_selected_string), + (nautilus_string_picker_set_selected_string), + (nautilus_string_picker_insert_string): + * libnautilus-extensions/nautilus-string-picker.h: + New function to insert a string without having to access the + string list first. Also renamed some poorly named functions. + + * libnautilus-extensions/nautilus-preferences-item.c: + (preferences_item_create_font_family), + (preferences_item_create_theme), (text_item_changed_callback): + Update for string picker api changes. + + * test/test-nautilus-widgets.c: (test_string_picker), + (string_picker_changed_callback): + Update for string picker api changes. + 2000-08-17 Ramiro Estrugo * libnautilus-extensions/nautilus-string-list.c: diff --git a/libnautilus-extensions/nautilus-preferences-item.c b/libnautilus-extensions/nautilus-preferences-item.c index 9a23fe1b3..7a2422b94 100644 --- a/libnautilus-extensions/nautilus-preferences-item.c +++ b/libnautilus-extensions/nautilus-preferences-item.c @@ -45,12 +45,6 @@ enum ARG_TITLE_STRING }; -enum -{ - ACTIVATE, - LAST_SIGNAL -}; - static const guint PREFERENCES_ITEM_TITLE_SPACING = 4; static const guint PREFERENCES_ITEM_FRAME_BORDER_WIDTH = 6; static const gint PREFERENCES_ITEM_UNDEFINED_ITEM = -1; @@ -488,7 +482,7 @@ preferences_item_create_font_family (NautilusPreferencesItem *item, g_assert (current_value != NULL); g_assert (nautilus_string_list_contains (font_list, current_value)); - nautilus_string_picker_set_text (NAUTILUS_STRING_PICKER (item->details->child), current_value); + nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (item->details->child), current_value); g_free (current_value); @@ -612,7 +606,7 @@ preferences_item_create_theme (NautilusPreferencesItem *item, g_assert (current_value != NULL); g_assert (nautilus_string_list_contains (theme_list, current_value)); - nautilus_string_picker_set_text (NAUTILUS_STRING_PICKER (item->details->child), current_value); + nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (item->details->child), current_value); g_free (current_value); @@ -694,7 +688,7 @@ text_item_changed_callback (GtkWidget *button, gpointer user_data) g_assert (item->details->child != NULL); g_assert (NAUTILUS_IS_STRING_PICKER (item->details->child)); - text = nautilus_string_picker_get_text (NAUTILUS_STRING_PICKER (item->details->child)); + text = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (item->details->child)); if (text != NULL) { diff --git a/libnautilus-extensions/nautilus-string-picker.c b/libnautilus-extensions/nautilus-string-picker.c index a373b6f72..078a8ff35 100644 --- a/libnautilus-extensions/nautilus-string-picker.c +++ b/libnautilus-extensions/nautilus-string-picker.c @@ -103,7 +103,7 @@ nautilus_string_picker_initialize (NautilusStringPicker *string_picker) gtk_box_set_homogeneous (GTK_BOX (string_picker), FALSE); gtk_box_set_spacing (GTK_BOX (string_picker), STRING_PICKER_SPACING); - string_picker->detail->string_list = NULL; + string_picker->detail->string_list = nautilus_string_list_new (); string_picker->detail->menu = NULL; string_picker->detail->option_menu = gtk_option_menu_new (); @@ -127,9 +127,7 @@ nautilus_string_picker_destroy (GtkObject* object) string_picker = NAUTILUS_STRING_PICKER (object); - if (string_picker->detail->string_list != NULL) { - nautilus_string_list_free (string_picker->detail->string_list); - } + nautilus_string_list_free (string_picker->detail->string_list); g_free (string_picker->detail); @@ -183,40 +181,52 @@ nautilus_string_picker_set_string_list (NautilusStringPicker *string_picker, g_return_if_fail (string_picker != NULL); g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); - string_picker->detail->string_list = nautilus_string_list_new_from_string_list (string_list); - + nautilus_string_list_assign_from_string_list (string_picker->detail->string_list, string_list); + /* Kill the old menu if alive */ if (string_picker->detail->menu != NULL) { gtk_option_menu_remove_menu (GTK_OPTION_MENU (string_picker->detail->option_menu)); - gtk_widget_destroy (string_picker->detail->menu); + + /* The widget gets unrefed in the above call */ string_picker->detail->menu = NULL; } /* Make a new menu */ string_picker->detail->menu = gtk_menu_new (); + + if (nautilus_string_list_get_length (string_picker->detail->string_list) > 0) { + for (i = 0; i < nautilus_string_list_get_length (string_picker->detail->string_list); i++) { + GtkWidget *menu_item; + char *item_label = nautilus_string_list_nth (string_picker->detail->string_list, i); + g_assert (item_label != NULL); + + menu_item = gtk_menu_item_new_with_label (item_label); + g_free (item_label); - for (i = 0; i < nautilus_string_list_get_length (string_picker->detail->string_list); i++) { - GtkWidget *menu_item; - char *item_label = nautilus_string_list_nth (string_picker->detail->string_list, i); - g_assert (item_label != NULL); + /* Save the index so we can later use it to retrieve the nth label from the list */ + gtk_object_set_data (GTK_OBJECT (menu_item), "index", GINT_TO_POINTER (i)); + + gtk_signal_connect (GTK_OBJECT (menu_item), + "activate", + GTK_SIGNAL_FUNC (option_menu_activate_callback), + string_picker); + + gtk_widget_show (menu_item); + + gtk_menu_append (GTK_MENU (string_picker->detail->menu), menu_item); + } - menu_item = gtk_menu_item_new_with_label (item_label); - g_free (item_label); - - /* Save the index so we can later use it to retrieve the nth label from the list */ - gtk_object_set_data (GTK_OBJECT (menu_item), "index", GINT_TO_POINTER (i)); - - gtk_signal_connect (GTK_OBJECT (menu_item), - "activate", - GTK_SIGNAL_FUNC (option_menu_activate_callback), - string_picker); - - gtk_widget_show (menu_item); - - gtk_menu_append (GTK_MENU (string_picker->detail->menu), menu_item); - } + /* Allow the string picker to be sensitive only if there is a choice */ + if (nautilus_string_list_get_length (string_picker->detail->string_list) > 1) { + gtk_widget_set_sensitive (GTK_WIDGET (string_picker), TRUE); + } + else { + gtk_widget_set_sensitive (GTK_WIDGET (string_picker), FALSE); + } + + /* Attatch the menu to the option button */ gtk_option_menu_set_menu (GTK_OPTION_MENU (string_picker->detail->option_menu), string_picker->detail->menu); } @@ -233,9 +243,7 @@ nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picke g_return_val_if_fail (string_picker != NULL, NULL); g_return_val_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker), NULL); - return (string_picker->detail->string_list != NULL) ? - nautilus_string_list_new_from_string_list (string_picker->detail->string_list) : - NULL; + return nautilus_string_list_new_from_string_list (string_picker->detail->string_list); } /* FIXME bugzilla.eazel.com 1556: @@ -243,13 +251,13 @@ nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picke */ /** - * nautilus_string_picker_get_text + * nautilus_string_picker_get_selected_string * @string_picker: A NautilusStringPicker * * Returns: A copy of the currently selected text. Need to g_free() it. */ char * -nautilus_string_picker_get_text (NautilusStringPicker *string_picker) +nautilus_string_picker_get_selected_string (NautilusStringPicker *string_picker) { gint item_index; GtkWidget *option_menu; @@ -268,21 +276,18 @@ nautilus_string_picker_get_text (NautilusStringPicker *string_picker) } /** - * nautilus_string_picker_set_text + * nautilus_string_picker_set_selected_string * @string_picker: A NautilusStringPicker * * Set the active item corresponding to the given text. */ void -nautilus_string_picker_set_text (NautilusStringPicker *string_picker, - const char *text) +nautilus_string_picker_set_selected_string (NautilusStringPicker *string_picker, + const char *text) { gint item_index; - g_return_if_fail (string_picker != NULL); g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); - - g_return_if_fail (string_picker->detail->string_list != NULL); g_return_if_fail (nautilus_string_list_contains (string_picker->detail->string_list, text)); item_index = nautilus_string_list_get_index_for_string (string_picker->detail->string_list, text); @@ -290,3 +295,19 @@ nautilus_string_picker_set_text (NautilusStringPicker *string_picker, gtk_option_menu_set_history (GTK_OPTION_MENU (string_picker->detail->option_menu), item_index); } + +/* Add a new string to the picker. */ +void +nautilus_string_picker_insert_string (NautilusStringPicker *string_picker, + const char *string) +{ + NautilusStringList *new_string_list; + + g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); + + new_string_list = nautilus_string_list_new_from_string_list (string_picker->detail->string_list); + nautilus_string_list_insert (new_string_list, string); + nautilus_string_picker_set_string_list (string_picker, new_string_list); + nautilus_string_list_free (new_string_list); +} + diff --git a/libnautilus-extensions/nautilus-string-picker.h b/libnautilus-extensions/nautilus-string-picker.h index 2d057e212..31f93ec4f 100644 --- a/libnautilus-extensions/nautilus-string-picker.h +++ b/libnautilus-extensions/nautilus-string-picker.h @@ -60,22 +60,25 @@ struct _NautilusStringPickerClass NautilusCaptionClass parent_class; }; -GtkType nautilus_string_picker_get_type (void); -GtkWidget* nautilus_string_picker_new (void); +GtkType nautilus_string_picker_get_type (void); +GtkWidget* nautilus_string_picker_new (void); /* Set the list of strings. */ -void nautilus_string_picker_set_string_list (NautilusStringPicker *string_picker, - const NautilusStringList *string_list); +void nautilus_string_picker_set_string_list (NautilusStringPicker *string_picker, + const NautilusStringList *string_list); /* Access a copy of the list of strings. */ -NautilusStringList *nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picker); +NautilusStringList *nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picker); -/* Entry text accesor. */ -char * nautilus_string_picker_get_text (NautilusStringPicker *string_picker); +/* Get the selected string. Resulting string needs to be freed with g_free(). */ +char * nautilus_string_picker_get_selected_string (NautilusStringPicker *string_picker); -/* Entry text mutator. */ -void nautilus_string_picker_set_text (NautilusStringPicker *string_picker, - const char *text); +/* Set the selected string. The internal string list needs to contain the 'string'. */ +void nautilus_string_picker_set_selected_string (NautilusStringPicker *string_picker, + const char *string); +/* Add a new string to the picker. */ +void nautilus_string_picker_insert_string (NautilusStringPicker *string_picker, + const char *string); BEGIN_GNOME_DECLS diff --git a/libnautilus-private/nautilus-preferences-item.c b/libnautilus-private/nautilus-preferences-item.c index 9a23fe1b3..7a2422b94 100644 --- a/libnautilus-private/nautilus-preferences-item.c +++ b/libnautilus-private/nautilus-preferences-item.c @@ -45,12 +45,6 @@ enum ARG_TITLE_STRING }; -enum -{ - ACTIVATE, - LAST_SIGNAL -}; - static const guint PREFERENCES_ITEM_TITLE_SPACING = 4; static const guint PREFERENCES_ITEM_FRAME_BORDER_WIDTH = 6; static const gint PREFERENCES_ITEM_UNDEFINED_ITEM = -1; @@ -488,7 +482,7 @@ preferences_item_create_font_family (NautilusPreferencesItem *item, g_assert (current_value != NULL); g_assert (nautilus_string_list_contains (font_list, current_value)); - nautilus_string_picker_set_text (NAUTILUS_STRING_PICKER (item->details->child), current_value); + nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (item->details->child), current_value); g_free (current_value); @@ -612,7 +606,7 @@ preferences_item_create_theme (NautilusPreferencesItem *item, g_assert (current_value != NULL); g_assert (nautilus_string_list_contains (theme_list, current_value)); - nautilus_string_picker_set_text (NAUTILUS_STRING_PICKER (item->details->child), current_value); + nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (item->details->child), current_value); g_free (current_value); @@ -694,7 +688,7 @@ text_item_changed_callback (GtkWidget *button, gpointer user_data) g_assert (item->details->child != NULL); g_assert (NAUTILUS_IS_STRING_PICKER (item->details->child)); - text = nautilus_string_picker_get_text (NAUTILUS_STRING_PICKER (item->details->child)); + text = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (item->details->child)); if (text != NULL) { diff --git a/libnautilus-private/nautilus-string-picker.c b/libnautilus-private/nautilus-string-picker.c index a373b6f72..078a8ff35 100644 --- a/libnautilus-private/nautilus-string-picker.c +++ b/libnautilus-private/nautilus-string-picker.c @@ -103,7 +103,7 @@ nautilus_string_picker_initialize (NautilusStringPicker *string_picker) gtk_box_set_homogeneous (GTK_BOX (string_picker), FALSE); gtk_box_set_spacing (GTK_BOX (string_picker), STRING_PICKER_SPACING); - string_picker->detail->string_list = NULL; + string_picker->detail->string_list = nautilus_string_list_new (); string_picker->detail->menu = NULL; string_picker->detail->option_menu = gtk_option_menu_new (); @@ -127,9 +127,7 @@ nautilus_string_picker_destroy (GtkObject* object) string_picker = NAUTILUS_STRING_PICKER (object); - if (string_picker->detail->string_list != NULL) { - nautilus_string_list_free (string_picker->detail->string_list); - } + nautilus_string_list_free (string_picker->detail->string_list); g_free (string_picker->detail); @@ -183,40 +181,52 @@ nautilus_string_picker_set_string_list (NautilusStringPicker *string_picker, g_return_if_fail (string_picker != NULL); g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); - string_picker->detail->string_list = nautilus_string_list_new_from_string_list (string_list); - + nautilus_string_list_assign_from_string_list (string_picker->detail->string_list, string_list); + /* Kill the old menu if alive */ if (string_picker->detail->menu != NULL) { gtk_option_menu_remove_menu (GTK_OPTION_MENU (string_picker->detail->option_menu)); - gtk_widget_destroy (string_picker->detail->menu); + + /* The widget gets unrefed in the above call */ string_picker->detail->menu = NULL; } /* Make a new menu */ string_picker->detail->menu = gtk_menu_new (); + + if (nautilus_string_list_get_length (string_picker->detail->string_list) > 0) { + for (i = 0; i < nautilus_string_list_get_length (string_picker->detail->string_list); i++) { + GtkWidget *menu_item; + char *item_label = nautilus_string_list_nth (string_picker->detail->string_list, i); + g_assert (item_label != NULL); + + menu_item = gtk_menu_item_new_with_label (item_label); + g_free (item_label); - for (i = 0; i < nautilus_string_list_get_length (string_picker->detail->string_list); i++) { - GtkWidget *menu_item; - char *item_label = nautilus_string_list_nth (string_picker->detail->string_list, i); - g_assert (item_label != NULL); + /* Save the index so we can later use it to retrieve the nth label from the list */ + gtk_object_set_data (GTK_OBJECT (menu_item), "index", GINT_TO_POINTER (i)); + + gtk_signal_connect (GTK_OBJECT (menu_item), + "activate", + GTK_SIGNAL_FUNC (option_menu_activate_callback), + string_picker); + + gtk_widget_show (menu_item); + + gtk_menu_append (GTK_MENU (string_picker->detail->menu), menu_item); + } - menu_item = gtk_menu_item_new_with_label (item_label); - g_free (item_label); - - /* Save the index so we can later use it to retrieve the nth label from the list */ - gtk_object_set_data (GTK_OBJECT (menu_item), "index", GINT_TO_POINTER (i)); - - gtk_signal_connect (GTK_OBJECT (menu_item), - "activate", - GTK_SIGNAL_FUNC (option_menu_activate_callback), - string_picker); - - gtk_widget_show (menu_item); - - gtk_menu_append (GTK_MENU (string_picker->detail->menu), menu_item); - } + /* Allow the string picker to be sensitive only if there is a choice */ + if (nautilus_string_list_get_length (string_picker->detail->string_list) > 1) { + gtk_widget_set_sensitive (GTK_WIDGET (string_picker), TRUE); + } + else { + gtk_widget_set_sensitive (GTK_WIDGET (string_picker), FALSE); + } + + /* Attatch the menu to the option button */ gtk_option_menu_set_menu (GTK_OPTION_MENU (string_picker->detail->option_menu), string_picker->detail->menu); } @@ -233,9 +243,7 @@ nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picke g_return_val_if_fail (string_picker != NULL, NULL); g_return_val_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker), NULL); - return (string_picker->detail->string_list != NULL) ? - nautilus_string_list_new_from_string_list (string_picker->detail->string_list) : - NULL; + return nautilus_string_list_new_from_string_list (string_picker->detail->string_list); } /* FIXME bugzilla.eazel.com 1556: @@ -243,13 +251,13 @@ nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picke */ /** - * nautilus_string_picker_get_text + * nautilus_string_picker_get_selected_string * @string_picker: A NautilusStringPicker * * Returns: A copy of the currently selected text. Need to g_free() it. */ char * -nautilus_string_picker_get_text (NautilusStringPicker *string_picker) +nautilus_string_picker_get_selected_string (NautilusStringPicker *string_picker) { gint item_index; GtkWidget *option_menu; @@ -268,21 +276,18 @@ nautilus_string_picker_get_text (NautilusStringPicker *string_picker) } /** - * nautilus_string_picker_set_text + * nautilus_string_picker_set_selected_string * @string_picker: A NautilusStringPicker * * Set the active item corresponding to the given text. */ void -nautilus_string_picker_set_text (NautilusStringPicker *string_picker, - const char *text) +nautilus_string_picker_set_selected_string (NautilusStringPicker *string_picker, + const char *text) { gint item_index; - g_return_if_fail (string_picker != NULL); g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); - - g_return_if_fail (string_picker->detail->string_list != NULL); g_return_if_fail (nautilus_string_list_contains (string_picker->detail->string_list, text)); item_index = nautilus_string_list_get_index_for_string (string_picker->detail->string_list, text); @@ -290,3 +295,19 @@ nautilus_string_picker_set_text (NautilusStringPicker *string_picker, gtk_option_menu_set_history (GTK_OPTION_MENU (string_picker->detail->option_menu), item_index); } + +/* Add a new string to the picker. */ +void +nautilus_string_picker_insert_string (NautilusStringPicker *string_picker, + const char *string) +{ + NautilusStringList *new_string_list; + + g_return_if_fail (NAUTILUS_IS_STRING_PICKER (string_picker)); + + new_string_list = nautilus_string_list_new_from_string_list (string_picker->detail->string_list); + nautilus_string_list_insert (new_string_list, string); + nautilus_string_picker_set_string_list (string_picker, new_string_list); + nautilus_string_list_free (new_string_list); +} + diff --git a/libnautilus-private/nautilus-string-picker.h b/libnautilus-private/nautilus-string-picker.h index 2d057e212..31f93ec4f 100644 --- a/libnautilus-private/nautilus-string-picker.h +++ b/libnautilus-private/nautilus-string-picker.h @@ -60,22 +60,25 @@ struct _NautilusStringPickerClass NautilusCaptionClass parent_class; }; -GtkType nautilus_string_picker_get_type (void); -GtkWidget* nautilus_string_picker_new (void); +GtkType nautilus_string_picker_get_type (void); +GtkWidget* nautilus_string_picker_new (void); /* Set the list of strings. */ -void nautilus_string_picker_set_string_list (NautilusStringPicker *string_picker, - const NautilusStringList *string_list); +void nautilus_string_picker_set_string_list (NautilusStringPicker *string_picker, + const NautilusStringList *string_list); /* Access a copy of the list of strings. */ -NautilusStringList *nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picker); +NautilusStringList *nautilus_string_picker_get_string_list (const NautilusStringPicker *string_picker); -/* Entry text accesor. */ -char * nautilus_string_picker_get_text (NautilusStringPicker *string_picker); +/* Get the selected string. Resulting string needs to be freed with g_free(). */ +char * nautilus_string_picker_get_selected_string (NautilusStringPicker *string_picker); -/* Entry text mutator. */ -void nautilus_string_picker_set_text (NautilusStringPicker *string_picker, - const char *text); +/* Set the selected string. The internal string list needs to contain the 'string'. */ +void nautilus_string_picker_set_selected_string (NautilusStringPicker *string_picker, + const char *string); +/* Add a new string to the picker. */ +void nautilus_string_picker_insert_string (NautilusStringPicker *string_picker, + const char *string); BEGIN_GNOME_DECLS diff --git a/test/test-nautilus-widgets.c b/test/test-nautilus-widgets.c index e450f042e..767788618 100644 --- a/test/test-nautilus-widgets.c +++ b/test/test-nautilus-widgets.c @@ -225,7 +225,7 @@ test_string_picker (void) GTK_SIGNAL_FUNC (string_picker_changed_callback), (gpointer) NULL); - nautilus_string_picker_set_text (NAUTILUS_STRING_PICKER (picker), "Fixed"); + nautilus_string_picker_set_selected_string (NAUTILUS_STRING_PICKER (picker), "Fixed"); gtk_widget_show_all (window); } @@ -262,7 +262,7 @@ string_picker_changed_callback (GtkWidget *string_picker, gpointer user_data) g_assert (string_picker != NULL); g_assert (NAUTILUS_IS_STRING_PICKER (string_picker)); - text = nautilus_string_picker_get_text (NAUTILUS_STRING_PICKER (string_picker)); + text = nautilus_string_picker_get_selected_string (NAUTILUS_STRING_PICKER (string_picker)); g_print ("string_picker_changed_callback(%s)\n", text);