diff options
-rw-r--r-- | libnautilus-extensions/nautilus-global-preferences.c | 12 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-global-preferences.h | 3 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-preferences-item.c | 99 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-preferences-item.h | 5 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-string-picker.c | 42 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-string-picker.h | 2 | ||||
-rw-r--r-- | libnautilus-private/nautilus-global-preferences.c | 12 | ||||
-rw-r--r-- | libnautilus-private/nautilus-global-preferences.h | 3 | ||||
-rw-r--r-- | libnautilus-private/nautilus-preferences-item.c | 99 | ||||
-rw-r--r-- | libnautilus-private/nautilus-preferences-item.h | 5 | ||||
-rw-r--r-- | libnautilus-private/nautilus-string-picker.c | 42 | ||||
-rw-r--r-- | libnautilus-private/nautilus-string-picker.h | 2 | ||||
-rw-r--r-- | nautilus-widgets/nautilus-preferences-item.c | 99 | ||||
-rw-r--r-- | nautilus-widgets/nautilus-preferences-item.h | 5 | ||||
-rw-r--r-- | nautilus-widgets/nautilus-string-picker.c | 42 | ||||
-rw-r--r-- | nautilus-widgets/nautilus-string-picker.h | 2 |
16 files changed, 423 insertions, 51 deletions
diff --git a/libnautilus-extensions/nautilus-global-preferences.c b/libnautilus-extensions/nautilus-global-preferences.c index dd3fb12cc..39eedfa34 100644 --- a/libnautilus-extensions/nautilus-global-preferences.c +++ b/libnautilus-extensions/nautilus-global-preferences.c @@ -188,6 +188,12 @@ global_preferences_create_dialog (void) NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS, NAUTILUS_PREFERENCE_ITEM_BOOLEAN); + nautilus_preferences_pane_add_group (NAUTILUS_PREFERENCES_PANE (appearance_pane), "Fonts"); + nautilus_preferences_pane_add_item_to_nth_group (NAUTILUS_PREFERENCES_PANE (appearance_pane), + 2, + NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY, + NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY); + /* all done */ return prefs_dialog; @@ -422,6 +428,12 @@ global_preferences_register_for_ui (void) NAUTILUS_PREFERENCE_BOOLEAN, (gconstpointer) FALSE); + /* Directory View */ + nautilus_preferences_set_info (NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY, + "Font familiy used to display file names", + NAUTILUS_PREFERENCE_STRING, + (gconstpointer) "helvetica"); + /* toolbar icons */ nautilus_preferences_set_info (NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS, "Use Eazel's toolbar icons", diff --git a/libnautilus-extensions/nautilus-global-preferences.h b/libnautilus-extensions/nautilus-global-preferences.h index 1dae47cde..f452c1cb4 100644 --- a/libnautilus-extensions/nautilus-global-preferences.h +++ b/libnautilus-extensions/nautilus-global-preferences.h @@ -58,6 +58,9 @@ BEGIN_GNOME_DECLS /* Sidebar panels */ #define NAUTILUS_PREFERENCES_SIDEBAR_PANELS_NAMESPACE "/nautilus/sidebar-panels" +/* Directory view */ +#define NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY "/nautilus/directory-view/font_family" + /* themes */ #define NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS "/nautilus/preferences/eazel_toolbar_icons" #define NAUTILUS_PREFERENCES_ICON_THEME "/nautilus/preferences/icon_theme" diff --git a/libnautilus-extensions/nautilus-preferences-item.c b/libnautilus-extensions/nautilus-preferences-item.c index 25d57b14f..dfae934d4 100644 --- a/libnautilus-extensions/nautilus-preferences-item.c +++ b/libnautilus-extensions/nautilus-preferences-item.c @@ -28,7 +28,9 @@ #include <libnautilus-extensions/nautilus-gtk-macros.h> #include <gtk/gtkcheckbutton.h> + #include <nautilus-widgets/nautilus-radio-button-group.h> +#include <nautilus-widgets/nautilus-string-picker.h> /* Arguments */ enum @@ -78,11 +80,15 @@ static void preferences_item_create_enum (NautilusPreferencesItem const NautilusPreference *prefrence); static void preferences_item_create_boolean (NautilusPreferencesItem *item, const NautilusPreference *prefrence); +static void preferences_item_create_font_family (NautilusPreferencesItem *item, + const NautilusPreference *prefrence); static void enum_radio_group_changed_callback (GtkWidget *button_group, GtkWidget *button, gpointer user_data); static void boolean_button_toggled_callback (GtkWidget *button_group, gpointer user_data); +static void font_family_changed_callback (GtkWidget *string_picker, + gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusPreferencesItem, nautilus_preferences_item, GTK_TYPE_VBOX) @@ -258,6 +264,10 @@ preferences_item_construct (NautilusPreferencesItem *item, case NAUTILUS_PREFERENCE_ITEM_ENUM: preferences_item_create_enum (item, preference); break; + + case NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY: + preferences_item_create_font_family (item, preference); + break; } gtk_object_unref (GTK_OBJECT (preference)); @@ -342,6 +352,56 @@ preferences_item_create_boolean (NautilusPreferencesItem *item, (gpointer) item); } +static void +preferences_item_create_font_family (NautilusPreferencesItem *item, + const NautilusPreference *preference) +{ + char *description; + char *current_value; + NautilusStringList *font_list; + + g_assert (item != NULL); + g_assert (preference != NULL); + + g_assert (item->details->preference_name != NULL); + description = nautilus_preference_get_description (preference); + + g_assert (description != NULL); + + item->details->child = nautilus_string_picker_new (); + + nautilus_string_picker_set_title_label (NAUTILUS_STRING_PICKER (item->details->child), description); + + g_free (description); + + /* FIXME bugzilla.eazel.com XXX: Need to query system for available fonts */ + font_list = nautilus_string_list_new (); + + nautilus_string_list_insert (font_list, "helvetica"); + nautilus_string_list_insert (font_list, "times"); + nautilus_string_list_insert (font_list, "courier"); + nautilus_string_list_insert (font_list, "lucida"); + nautilus_string_list_insert (font_list, "fixed"); + + nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (item->details->child), font_list); + + current_value = nautilus_preferences_get (item->details->preference_name, "helvetica"); + + 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); + + g_free (current_value); + + nautilus_string_list_free (font_list); + + gtk_signal_connect (GTK_OBJECT (item->details->child), + "changed", + GTK_SIGNAL_FUNC (font_family_changed_callback), + (gpointer) item); +} + /* NautilusPreferencesItem public methods */ GtkWidget * nautilus_preferences_item_new (const gchar *preference_name, @@ -364,11 +424,15 @@ nautilus_preferences_item_new (const gchar *preference_name, static void enum_radio_group_changed_callback (GtkWidget *buttons, GtkWidget * button, gpointer user_data) { - NautilusPreferencesItem *item = (NautilusPreferencesItem *) user_data; + NautilusPreferencesItem *item; const NautilusPreference *preference; gint i; - g_assert (item != NULL); + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (user_data); + g_assert (item->details->preference_name != NULL); preference = nautilus_preferences_get_preference (item->details->preference_name); @@ -382,12 +446,39 @@ enum_radio_group_changed_callback (GtkWidget *buttons, GtkWidget * button, gpoin static void boolean_button_toggled_callback (GtkWidget *button, gpointer user_data) { - NautilusPreferencesItem *item = (NautilusPreferencesItem *) user_data; + NautilusPreferencesItem *item; gboolean active_state; - g_assert (item != NULL); + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (user_data); active_state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); nautilus_preferences_set_boolean (item->details->preference_name, active_state); } + +static void +font_family_changed_callback (GtkWidget *button, gpointer user_data) +{ + NautilusPreferencesItem *item; + char *text; + + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (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)); + + if (text != NULL) + { + nautilus_preferences_set (item->details->preference_name, text); + + g_free (text); + } +} diff --git a/libnautilus-extensions/nautilus-preferences-item.h b/libnautilus-extensions/nautilus-preferences-item.h index 952ed8107..a4c85a11f 100644 --- a/libnautilus-extensions/nautilus-preferences-item.h +++ b/libnautilus-extensions/nautilus-preferences-item.h @@ -37,7 +37,7 @@ BEGIN_GNOME_DECLS #define NAUTILUS_IS_PREFERENCES_ITEM(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_PREFERENCES_ITEM)) #define NAUTILUS_IS_PREFERENCES_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_PREFERENCES_ITEM)) -typedef struct _NautilusPreferencesItem NautilusPreferencesItem; +typedef struct _NautilusPreferencesItem NautilusPreferencesItem; typedef struct _NautilusPreferencesItemClass NautilusPreferencesItemClass; typedef struct _NautilusPreferencesItemDetails NautilusPreferencesItemDetails; @@ -65,7 +65,8 @@ struct _NautilusPreferencesItemClass typedef enum { NAUTILUS_PREFERENCE_ITEM_BOOLEAN, - NAUTILUS_PREFERENCE_ITEM_ENUM + NAUTILUS_PREFERENCE_ITEM_ENUM, + NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY } NautilusPreferencesItemType; GtkType nautilus_preferences_item_get_type (void); diff --git a/libnautilus-extensions/nautilus-string-picker.c b/libnautilus-extensions/nautilus-string-picker.c index c2922ed37..30b8e05fe 100644 --- a/libnautilus-extensions/nautilus-string-picker.c +++ b/libnautilus-extensions/nautilus-string-picker.c @@ -45,25 +45,24 @@ typedef enum struct _NautilusStringPickerDetail { - GtkWidget *title_label; - GtkWidget *combo_box; + GtkWidget *title_label; + GtkWidget *combo_box; + NautilusStringList *string_list; }; /* NautilusStringPickerClass methods */ -static void nautilus_string_picker_initialize_class (NautilusStringPickerClass *klass); -static void nautilus_string_picker_initialize (NautilusStringPicker *string_picker); - +static void nautilus_string_picker_initialize_class (NautilusStringPickerClass *klass); +static void nautilus_string_picker_initialize (NautilusStringPicker *string_picker); /* GtkObjectClass methods */ -static void nautilus_string_picker_destroy (GtkObject *object); - +static void nautilus_string_picker_destroy (GtkObject *object); /* Private stuff */ -static GtkEntry * string_picker_get_entry_widget (NautilusStringPicker *string_picker); +static GtkEntry *string_picker_get_entry_widget (NautilusStringPicker *string_picker); /* Editable (entry) callbacks */ -static void entry_changed_callback (GtkWidget *entry, - gpointer user_data); +static void entry_changed_callback (GtkWidget *entry, + gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusStringPicker, nautilus_string_picker, GTK_TYPE_HBOX) @@ -107,6 +106,8 @@ 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->title_label = gtk_label_new ("Title Label:"); string_picker->detail->combo_box = gtk_combo_new (); @@ -146,6 +147,10 @@ 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); + } + g_free (string_picker->detail); /* Chain */ @@ -216,7 +221,9 @@ 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)); - strings = nautilus_string_list_as_g_list (string_list); + string_picker->detail->string_list = nautilus_string_list_new_from_string_list (string_list); + + strings = nautilus_string_list_as_g_list (string_picker->detail->string_list); gtk_combo_set_popdown_strings (GTK_COMBO (string_picker->detail->combo_box), strings); @@ -262,3 +269,16 @@ nautilus_string_picker_get_text (NautilusStringPicker *string_picker) return g_strdup (entry_text); } + +void +nautilus_string_picker_set_text (NautilusStringPicker *string_picker, + const char *text) +{ + 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)); + + gtk_entry_set_text (string_picker_get_entry_widget (string_picker), text); +} diff --git a/libnautilus-extensions/nautilus-string-picker.h b/libnautilus-extensions/nautilus-string-picker.h index a41006603..fe273b165 100644 --- a/libnautilus-extensions/nautilus-string-picker.h +++ b/libnautilus-extensions/nautilus-string-picker.h @@ -72,6 +72,8 @@ void nautilus_string_picker_set_string_list (NautilusStringPicker *str void nautilus_string_picker_set_title_label (NautilusStringPicker *string_picker, const char *title_label); char * nautilus_string_picker_get_text (NautilusStringPicker *string_picker); +void nautilus_string_picker_set_text (NautilusStringPicker *string_picker, + const char *text); BEGIN_GNOME_DECLS diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c index dd3fb12cc..39eedfa34 100644 --- a/libnautilus-private/nautilus-global-preferences.c +++ b/libnautilus-private/nautilus-global-preferences.c @@ -188,6 +188,12 @@ global_preferences_create_dialog (void) NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS, NAUTILUS_PREFERENCE_ITEM_BOOLEAN); + nautilus_preferences_pane_add_group (NAUTILUS_PREFERENCES_PANE (appearance_pane), "Fonts"); + nautilus_preferences_pane_add_item_to_nth_group (NAUTILUS_PREFERENCES_PANE (appearance_pane), + 2, + NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY, + NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY); + /* all done */ return prefs_dialog; @@ -422,6 +428,12 @@ global_preferences_register_for_ui (void) NAUTILUS_PREFERENCE_BOOLEAN, (gconstpointer) FALSE); + /* Directory View */ + nautilus_preferences_set_info (NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY, + "Font familiy used to display file names", + NAUTILUS_PREFERENCE_STRING, + (gconstpointer) "helvetica"); + /* toolbar icons */ nautilus_preferences_set_info (NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS, "Use Eazel's toolbar icons", diff --git a/libnautilus-private/nautilus-global-preferences.h b/libnautilus-private/nautilus-global-preferences.h index 1dae47cde..f452c1cb4 100644 --- a/libnautilus-private/nautilus-global-preferences.h +++ b/libnautilus-private/nautilus-global-preferences.h @@ -58,6 +58,9 @@ BEGIN_GNOME_DECLS /* Sidebar panels */ #define NAUTILUS_PREFERENCES_SIDEBAR_PANELS_NAMESPACE "/nautilus/sidebar-panels" +/* Directory view */ +#define NAUTILUS_PREFERENCES_DIRECTORY_VIEW_FONT_FAMILY "/nautilus/directory-view/font_family" + /* themes */ #define NAUTILUS_PREFERENCES_EAZEL_TOOLBAR_ICONS "/nautilus/preferences/eazel_toolbar_icons" #define NAUTILUS_PREFERENCES_ICON_THEME "/nautilus/preferences/icon_theme" diff --git a/libnautilus-private/nautilus-preferences-item.c b/libnautilus-private/nautilus-preferences-item.c index 25d57b14f..dfae934d4 100644 --- a/libnautilus-private/nautilus-preferences-item.c +++ b/libnautilus-private/nautilus-preferences-item.c @@ -28,7 +28,9 @@ #include <libnautilus-extensions/nautilus-gtk-macros.h> #include <gtk/gtkcheckbutton.h> + #include <nautilus-widgets/nautilus-radio-button-group.h> +#include <nautilus-widgets/nautilus-string-picker.h> /* Arguments */ enum @@ -78,11 +80,15 @@ static void preferences_item_create_enum (NautilusPreferencesItem const NautilusPreference *prefrence); static void preferences_item_create_boolean (NautilusPreferencesItem *item, const NautilusPreference *prefrence); +static void preferences_item_create_font_family (NautilusPreferencesItem *item, + const NautilusPreference *prefrence); static void enum_radio_group_changed_callback (GtkWidget *button_group, GtkWidget *button, gpointer user_data); static void boolean_button_toggled_callback (GtkWidget *button_group, gpointer user_data); +static void font_family_changed_callback (GtkWidget *string_picker, + gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusPreferencesItem, nautilus_preferences_item, GTK_TYPE_VBOX) @@ -258,6 +264,10 @@ preferences_item_construct (NautilusPreferencesItem *item, case NAUTILUS_PREFERENCE_ITEM_ENUM: preferences_item_create_enum (item, preference); break; + + case NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY: + preferences_item_create_font_family (item, preference); + break; } gtk_object_unref (GTK_OBJECT (preference)); @@ -342,6 +352,56 @@ preferences_item_create_boolean (NautilusPreferencesItem *item, (gpointer) item); } +static void +preferences_item_create_font_family (NautilusPreferencesItem *item, + const NautilusPreference *preference) +{ + char *description; + char *current_value; + NautilusStringList *font_list; + + g_assert (item != NULL); + g_assert (preference != NULL); + + g_assert (item->details->preference_name != NULL); + description = nautilus_preference_get_description (preference); + + g_assert (description != NULL); + + item->details->child = nautilus_string_picker_new (); + + nautilus_string_picker_set_title_label (NAUTILUS_STRING_PICKER (item->details->child), description); + + g_free (description); + + /* FIXME bugzilla.eazel.com XXX: Need to query system for available fonts */ + font_list = nautilus_string_list_new (); + + nautilus_string_list_insert (font_list, "helvetica"); + nautilus_string_list_insert (font_list, "times"); + nautilus_string_list_insert (font_list, "courier"); + nautilus_string_list_insert (font_list, "lucida"); + nautilus_string_list_insert (font_list, "fixed"); + + nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (item->details->child), font_list); + + current_value = nautilus_preferences_get (item->details->preference_name, "helvetica"); + + 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); + + g_free (current_value); + + nautilus_string_list_free (font_list); + + gtk_signal_connect (GTK_OBJECT (item->details->child), + "changed", + GTK_SIGNAL_FUNC (font_family_changed_callback), + (gpointer) item); +} + /* NautilusPreferencesItem public methods */ GtkWidget * nautilus_preferences_item_new (const gchar *preference_name, @@ -364,11 +424,15 @@ nautilus_preferences_item_new (const gchar *preference_name, static void enum_radio_group_changed_callback (GtkWidget *buttons, GtkWidget * button, gpointer user_data) { - NautilusPreferencesItem *item = (NautilusPreferencesItem *) user_data; + NautilusPreferencesItem *item; const NautilusPreference *preference; gint i; - g_assert (item != NULL); + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (user_data); + g_assert (item->details->preference_name != NULL); preference = nautilus_preferences_get_preference (item->details->preference_name); @@ -382,12 +446,39 @@ enum_radio_group_changed_callback (GtkWidget *buttons, GtkWidget * button, gpoin static void boolean_button_toggled_callback (GtkWidget *button, gpointer user_data) { - NautilusPreferencesItem *item = (NautilusPreferencesItem *) user_data; + NautilusPreferencesItem *item; gboolean active_state; - g_assert (item != NULL); + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (user_data); active_state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); nautilus_preferences_set_boolean (item->details->preference_name, active_state); } + +static void +font_family_changed_callback (GtkWidget *button, gpointer user_data) +{ + NautilusPreferencesItem *item; + char *text; + + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (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)); + + if (text != NULL) + { + nautilus_preferences_set (item->details->preference_name, text); + + g_free (text); + } +} diff --git a/libnautilus-private/nautilus-preferences-item.h b/libnautilus-private/nautilus-preferences-item.h index 952ed8107..a4c85a11f 100644 --- a/libnautilus-private/nautilus-preferences-item.h +++ b/libnautilus-private/nautilus-preferences-item.h @@ -37,7 +37,7 @@ BEGIN_GNOME_DECLS #define NAUTILUS_IS_PREFERENCES_ITEM(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_PREFERENCES_ITEM)) #define NAUTILUS_IS_PREFERENCES_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_PREFERENCES_ITEM)) -typedef struct _NautilusPreferencesItem NautilusPreferencesItem; +typedef struct _NautilusPreferencesItem NautilusPreferencesItem; typedef struct _NautilusPreferencesItemClass NautilusPreferencesItemClass; typedef struct _NautilusPreferencesItemDetails NautilusPreferencesItemDetails; @@ -65,7 +65,8 @@ struct _NautilusPreferencesItemClass typedef enum { NAUTILUS_PREFERENCE_ITEM_BOOLEAN, - NAUTILUS_PREFERENCE_ITEM_ENUM + NAUTILUS_PREFERENCE_ITEM_ENUM, + NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY } NautilusPreferencesItemType; GtkType nautilus_preferences_item_get_type (void); diff --git a/libnautilus-private/nautilus-string-picker.c b/libnautilus-private/nautilus-string-picker.c index c2922ed37..30b8e05fe 100644 --- a/libnautilus-private/nautilus-string-picker.c +++ b/libnautilus-private/nautilus-string-picker.c @@ -45,25 +45,24 @@ typedef enum struct _NautilusStringPickerDetail { - GtkWidget *title_label; - GtkWidget *combo_box; + GtkWidget *title_label; + GtkWidget *combo_box; + NautilusStringList *string_list; }; /* NautilusStringPickerClass methods */ -static void nautilus_string_picker_initialize_class (NautilusStringPickerClass *klass); -static void nautilus_string_picker_initialize (NautilusStringPicker *string_picker); - +static void nautilus_string_picker_initialize_class (NautilusStringPickerClass *klass); +static void nautilus_string_picker_initialize (NautilusStringPicker *string_picker); /* GtkObjectClass methods */ -static void nautilus_string_picker_destroy (GtkObject *object); - +static void nautilus_string_picker_destroy (GtkObject *object); /* Private stuff */ -static GtkEntry * string_picker_get_entry_widget (NautilusStringPicker *string_picker); +static GtkEntry *string_picker_get_entry_widget (NautilusStringPicker *string_picker); /* Editable (entry) callbacks */ -static void entry_changed_callback (GtkWidget *entry, - gpointer user_data); +static void entry_changed_callback (GtkWidget *entry, + gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusStringPicker, nautilus_string_picker, GTK_TYPE_HBOX) @@ -107,6 +106,8 @@ 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->title_label = gtk_label_new ("Title Label:"); string_picker->detail->combo_box = gtk_combo_new (); @@ -146,6 +147,10 @@ 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); + } + g_free (string_picker->detail); /* Chain */ @@ -216,7 +221,9 @@ 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)); - strings = nautilus_string_list_as_g_list (string_list); + string_picker->detail->string_list = nautilus_string_list_new_from_string_list (string_list); + + strings = nautilus_string_list_as_g_list (string_picker->detail->string_list); gtk_combo_set_popdown_strings (GTK_COMBO (string_picker->detail->combo_box), strings); @@ -262,3 +269,16 @@ nautilus_string_picker_get_text (NautilusStringPicker *string_picker) return g_strdup (entry_text); } + +void +nautilus_string_picker_set_text (NautilusStringPicker *string_picker, + const char *text) +{ + 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)); + + gtk_entry_set_text (string_picker_get_entry_widget (string_picker), text); +} diff --git a/libnautilus-private/nautilus-string-picker.h b/libnautilus-private/nautilus-string-picker.h index a41006603..fe273b165 100644 --- a/libnautilus-private/nautilus-string-picker.h +++ b/libnautilus-private/nautilus-string-picker.h @@ -72,6 +72,8 @@ void nautilus_string_picker_set_string_list (NautilusStringPicker *str void nautilus_string_picker_set_title_label (NautilusStringPicker *string_picker, const char *title_label); char * nautilus_string_picker_get_text (NautilusStringPicker *string_picker); +void nautilus_string_picker_set_text (NautilusStringPicker *string_picker, + const char *text); BEGIN_GNOME_DECLS diff --git a/nautilus-widgets/nautilus-preferences-item.c b/nautilus-widgets/nautilus-preferences-item.c index 25d57b14f..dfae934d4 100644 --- a/nautilus-widgets/nautilus-preferences-item.c +++ b/nautilus-widgets/nautilus-preferences-item.c @@ -28,7 +28,9 @@ #include <libnautilus-extensions/nautilus-gtk-macros.h> #include <gtk/gtkcheckbutton.h> + #include <nautilus-widgets/nautilus-radio-button-group.h> +#include <nautilus-widgets/nautilus-string-picker.h> /* Arguments */ enum @@ -78,11 +80,15 @@ static void preferences_item_create_enum (NautilusPreferencesItem const NautilusPreference *prefrence); static void preferences_item_create_boolean (NautilusPreferencesItem *item, const NautilusPreference *prefrence); +static void preferences_item_create_font_family (NautilusPreferencesItem *item, + const NautilusPreference *prefrence); static void enum_radio_group_changed_callback (GtkWidget *button_group, GtkWidget *button, gpointer user_data); static void boolean_button_toggled_callback (GtkWidget *button_group, gpointer user_data); +static void font_family_changed_callback (GtkWidget *string_picker, + gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusPreferencesItem, nautilus_preferences_item, GTK_TYPE_VBOX) @@ -258,6 +264,10 @@ preferences_item_construct (NautilusPreferencesItem *item, case NAUTILUS_PREFERENCE_ITEM_ENUM: preferences_item_create_enum (item, preference); break; + + case NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY: + preferences_item_create_font_family (item, preference); + break; } gtk_object_unref (GTK_OBJECT (preference)); @@ -342,6 +352,56 @@ preferences_item_create_boolean (NautilusPreferencesItem *item, (gpointer) item); } +static void +preferences_item_create_font_family (NautilusPreferencesItem *item, + const NautilusPreference *preference) +{ + char *description; + char *current_value; + NautilusStringList *font_list; + + g_assert (item != NULL); + g_assert (preference != NULL); + + g_assert (item->details->preference_name != NULL); + description = nautilus_preference_get_description (preference); + + g_assert (description != NULL); + + item->details->child = nautilus_string_picker_new (); + + nautilus_string_picker_set_title_label (NAUTILUS_STRING_PICKER (item->details->child), description); + + g_free (description); + + /* FIXME bugzilla.eazel.com XXX: Need to query system for available fonts */ + font_list = nautilus_string_list_new (); + + nautilus_string_list_insert (font_list, "helvetica"); + nautilus_string_list_insert (font_list, "times"); + nautilus_string_list_insert (font_list, "courier"); + nautilus_string_list_insert (font_list, "lucida"); + nautilus_string_list_insert (font_list, "fixed"); + + nautilus_string_picker_set_string_list (NAUTILUS_STRING_PICKER (item->details->child), font_list); + + current_value = nautilus_preferences_get (item->details->preference_name, "helvetica"); + + 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); + + g_free (current_value); + + nautilus_string_list_free (font_list); + + gtk_signal_connect (GTK_OBJECT (item->details->child), + "changed", + GTK_SIGNAL_FUNC (font_family_changed_callback), + (gpointer) item); +} + /* NautilusPreferencesItem public methods */ GtkWidget * nautilus_preferences_item_new (const gchar *preference_name, @@ -364,11 +424,15 @@ nautilus_preferences_item_new (const gchar *preference_name, static void enum_radio_group_changed_callback (GtkWidget *buttons, GtkWidget * button, gpointer user_data) { - NautilusPreferencesItem *item = (NautilusPreferencesItem *) user_data; + NautilusPreferencesItem *item; const NautilusPreference *preference; gint i; - g_assert (item != NULL); + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (user_data); + g_assert (item->details->preference_name != NULL); preference = nautilus_preferences_get_preference (item->details->preference_name); @@ -382,12 +446,39 @@ enum_radio_group_changed_callback (GtkWidget *buttons, GtkWidget * button, gpoin static void boolean_button_toggled_callback (GtkWidget *button, gpointer user_data) { - NautilusPreferencesItem *item = (NautilusPreferencesItem *) user_data; + NautilusPreferencesItem *item; gboolean active_state; - g_assert (item != NULL); + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (user_data); active_state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); nautilus_preferences_set_boolean (item->details->preference_name, active_state); } + +static void +font_family_changed_callback (GtkWidget *button, gpointer user_data) +{ + NautilusPreferencesItem *item; + char *text; + + g_assert (user_data != NULL); + g_assert (NAUTILUS_IS_PREFERENCES_ITEM (user_data)); + + item = NAUTILUS_PREFERENCES_ITEM (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)); + + if (text != NULL) + { + nautilus_preferences_set (item->details->preference_name, text); + + g_free (text); + } +} diff --git a/nautilus-widgets/nautilus-preferences-item.h b/nautilus-widgets/nautilus-preferences-item.h index 952ed8107..a4c85a11f 100644 --- a/nautilus-widgets/nautilus-preferences-item.h +++ b/nautilus-widgets/nautilus-preferences-item.h @@ -37,7 +37,7 @@ BEGIN_GNOME_DECLS #define NAUTILUS_IS_PREFERENCES_ITEM(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_PREFERENCES_ITEM)) #define NAUTILUS_IS_PREFERENCES_ITEM_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_PREFERENCES_ITEM)) -typedef struct _NautilusPreferencesItem NautilusPreferencesItem; +typedef struct _NautilusPreferencesItem NautilusPreferencesItem; typedef struct _NautilusPreferencesItemClass NautilusPreferencesItemClass; typedef struct _NautilusPreferencesItemDetails NautilusPreferencesItemDetails; @@ -65,7 +65,8 @@ struct _NautilusPreferencesItemClass typedef enum { NAUTILUS_PREFERENCE_ITEM_BOOLEAN, - NAUTILUS_PREFERENCE_ITEM_ENUM + NAUTILUS_PREFERENCE_ITEM_ENUM, + NAUTILUS_PREFERENCE_ITEM_FONT_FAMILY } NautilusPreferencesItemType; GtkType nautilus_preferences_item_get_type (void); diff --git a/nautilus-widgets/nautilus-string-picker.c b/nautilus-widgets/nautilus-string-picker.c index c2922ed37..30b8e05fe 100644 --- a/nautilus-widgets/nautilus-string-picker.c +++ b/nautilus-widgets/nautilus-string-picker.c @@ -45,25 +45,24 @@ typedef enum struct _NautilusStringPickerDetail { - GtkWidget *title_label; - GtkWidget *combo_box; + GtkWidget *title_label; + GtkWidget *combo_box; + NautilusStringList *string_list; }; /* NautilusStringPickerClass methods */ -static void nautilus_string_picker_initialize_class (NautilusStringPickerClass *klass); -static void nautilus_string_picker_initialize (NautilusStringPicker *string_picker); - +static void nautilus_string_picker_initialize_class (NautilusStringPickerClass *klass); +static void nautilus_string_picker_initialize (NautilusStringPicker *string_picker); /* GtkObjectClass methods */ -static void nautilus_string_picker_destroy (GtkObject *object); - +static void nautilus_string_picker_destroy (GtkObject *object); /* Private stuff */ -static GtkEntry * string_picker_get_entry_widget (NautilusStringPicker *string_picker); +static GtkEntry *string_picker_get_entry_widget (NautilusStringPicker *string_picker); /* Editable (entry) callbacks */ -static void entry_changed_callback (GtkWidget *entry, - gpointer user_data); +static void entry_changed_callback (GtkWidget *entry, + gpointer user_data); NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusStringPicker, nautilus_string_picker, GTK_TYPE_HBOX) @@ -107,6 +106,8 @@ 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->title_label = gtk_label_new ("Title Label:"); string_picker->detail->combo_box = gtk_combo_new (); @@ -146,6 +147,10 @@ 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); + } + g_free (string_picker->detail); /* Chain */ @@ -216,7 +221,9 @@ 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)); - strings = nautilus_string_list_as_g_list (string_list); + string_picker->detail->string_list = nautilus_string_list_new_from_string_list (string_list); + + strings = nautilus_string_list_as_g_list (string_picker->detail->string_list); gtk_combo_set_popdown_strings (GTK_COMBO (string_picker->detail->combo_box), strings); @@ -262,3 +269,16 @@ nautilus_string_picker_get_text (NautilusStringPicker *string_picker) return g_strdup (entry_text); } + +void +nautilus_string_picker_set_text (NautilusStringPicker *string_picker, + const char *text) +{ + 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)); + + gtk_entry_set_text (string_picker_get_entry_widget (string_picker), text); +} diff --git a/nautilus-widgets/nautilus-string-picker.h b/nautilus-widgets/nautilus-string-picker.h index a41006603..fe273b165 100644 --- a/nautilus-widgets/nautilus-string-picker.h +++ b/nautilus-widgets/nautilus-string-picker.h @@ -72,6 +72,8 @@ void nautilus_string_picker_set_string_list (NautilusStringPicker *str void nautilus_string_picker_set_title_label (NautilusStringPicker *string_picker, const char *title_label); char * nautilus_string_picker_get_text (NautilusStringPicker *string_picker); +void nautilus_string_picker_set_text (NautilusStringPicker *string_picker, + const char *text); BEGIN_GNOME_DECLS |