[maemo-commits] [maemo-commits] r12076 - in projects/haf/trunk/hildon-fm: . hildon-fm
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon Jun 4 10:28:04 EEST 2007
- Previous message: [maemo-commits] r12075 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Next message: [maemo-commits] r12077 - in projects/haf/trunk/hildon-fm: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: marivoll Date: 2007-06-04 10:27:56 +0300 (Mon, 04 Jun 2007) New Revision: 12076 Modified: projects/haf/trunk/hildon-fm/ChangeLog projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.c projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.h Log: * hildon-fm/hildon-file-chooser-dialog.c, hildon-fm/hildon-file-chooser-dialog.h (sync_extensions_combo, extension_changed, hildon_file_chooser_dialog_add_extensions_combo): New. Modified: projects/haf/trunk/hildon-fm/ChangeLog =================================================================== --- projects/haf/trunk/hildon-fm/ChangeLog 2007-06-01 20:43:33 UTC (rev 12075) +++ projects/haf/trunk/hildon-fm/ChangeLog 2007-06-04 07:27:56 UTC (rev 12076) @@ -1,3 +1,16 @@ +2007-06-04 Marius Vollmer <marius.vollmer at nokia.com> + + * hildon-fm/hildon-file-chooser-dialog.c, + hildon-fm/hildon-file-chooser-dialog.h (sync_extensions_combo, + extension_changed, + hildon_file_chooser_dialog_add_extensions_combo): New. + +2007-06-01 Marius Vollmer <marius.vollmer at nokia.com> + + * hildon-fm/hildon-file-chooser-dialog.h, + hildon-fm/hildon-file-chooser-dialog.c + (hildon_file_chooser_dialog_add_extra): New. + 2007-05-31 Marius Vollmer <marius.vollmer at nokia.com> * hildon-fm/hildon-file-selection.c (trigger_repair): Pass address Modified: projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.c =================================================================== --- projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.c 2007-06-01 20:43:33 UTC (rev 12075) +++ projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.c 2007-06-04 07:27:56 UTC (rev 12076) @@ -70,6 +70,7 @@ #define FILE_SELECTION_WIDTH_TOTAL 590 /* Width for full filetree (both content and navigation pane) */ +static void sync_extensions_combo (HildonFileChooserDialogPrivate *priv); #define HILDON_FILE_CHOOSER_DIALOG_TYPE_SELECTION_MODE (hildon_file_chooser_dialog_selection_mode_get_type()) static GType @@ -110,11 +111,13 @@ GtkWidget *cancel_button; HildonFileSelection *filetree; HildonFileSystemModel *model; + GtkSizeGroup *caption_size_group; GtkWidget *caption_control_name; GtkWidget *caption_control_location; GtkWidget *label_location; GtkWidget *entry_name; GtkWidget *hbox_location, *image_location, *title_location; + GtkWidget *extensions_combo; GtkFileChooserAction action; GtkWidget *popup; GtkWidget *multiple_label, *hbox_items; @@ -531,6 +534,7 @@ g_free(priv->ext_name); priv->ext_name = g_strdup(dot); *dot = '\0'; + sync_extensions_combo (priv); } } @@ -1583,6 +1587,8 @@ HildonFileChooserDialogPrivate *priv = HILDON_FILE_CHOOSER_DIALOG(obj)->priv; + g_object_unref(priv->caption_size_group); + g_free(priv->stub_name); g_free(priv->ext_name); @@ -1793,6 +1799,7 @@ HildonFileChooserDialogPrivate); size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); + priv->caption_size_group = size_group; priv->filters = NULL; priv->autonaming_enabled = TRUE; priv->should_show_folder_button = TRUE; @@ -1853,7 +1860,6 @@ gtk_box_pack_start(GTK_BOX(priv->caption_control_location), eventbox, TRUE, TRUE, 0); gtk_size_group_add_widget(size_group, priv->label_location); gtk_size_group_add_widget(size_group, label_items); - g_object_unref(size_group); priv->popup = gtk_menu_new(); shell = GTK_MENU_SHELL(priv->popup); @@ -2036,6 +2042,162 @@ } /** + * hildon_file_chooser_dialog_add_extra: + * @self: dialog widget + * @widget: widget to add + * + * Add @widget to the dialog, below the "Name" and "Location" fields. + * When @widget is a #HildonCaption, care is taken that the labels line + * up with existing HildonCaptions. + */ +void +hildon_file_chooser_dialog_add_extra (HildonFileChooserDialog *self, + GtkWidget *widget) +{ + HildonFileChooserDialogPrivate *priv = self->priv; + + /* XXX - HildonCaption widgets seem to need special treatment when + setting their size groups... + */ + if (HILDON_IS_CAPTION (widget)) + hildon_caption_set_size_group (HILDON_CAPTION (widget), + priv->caption_size_group); + else + gtk_size_group_add_widget (priv->caption_size_group, widget); + + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(self)->vbox), widget, + FALSE, TRUE, 0); +} + +static void +sync_extensions_combo (HildonFileChooserDialogPrivate *priv) +{ + if (priv->ext_name && priv->extensions_combo) + { + GtkTreeModel *model; + GtkTreeIter iter; + gboolean valid; + int i; + + model = gtk_combo_box_get_model (GTK_COMBO_BOX (priv->extensions_combo)); + + i = 0; + valid = gtk_tree_model_get_iter_first (model, &iter); + while (valid) + { + gchar *ext; + gtk_tree_model_get (model, &iter, 1, &ext, -1); + if (strcmp (ext, priv->ext_name + 1) == 0) + { + gtk_combo_box_set_active (GTK_COMBO_BOX (priv->extensions_combo), + i); + g_free (ext); + break; + } + + g_free (ext); + i++; + valid = gtk_tree_model_iter_next (model, &iter); + } + } +} + +static void +extension_changed (GtkComboBox *widget, gpointer data) +{ + gchar *ext; + GtkTreeModel *model; + GtkTreeIter iter; + + HildonFileChooserDialogPrivate *priv = + HILDON_FILE_CHOOSER_DIALOG (data)->priv; + + model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter); + gtk_tree_model_get (model, &iter, 1, &ext, -1); + + g_free (priv->ext_name); + priv->ext_name = g_strconcat (".", ext, NULL); + hildon_file_chooser_dialog_do_autonaming (priv); + + g_free (ext); +} + +/** + * hildon_file_chooser_dialog_add_extensions_combo: + * @self: dialog widget + * @extensions: extensions to offer + * @ext_names: names of the extensions to show in the UI + * + * Create and add a combo box widget with a list of file extensions. + * This combobox will track and modify the extension of the current + * filename; it is not a filter. + * + * @extensions should be a vector of strings, terminated by #NULL. The + * strings in it are the extensions, without a leading '.'. + * + * @ext_names, when non-#NULL, is a vector parallel to @extensions + * that determines the names of the extensions to use in the UI. When + * @ext_names is NULL, the extensions themselves are used as the + * names. + */ + +GtkWidget * +hildon_file_chooser_dialog_add_extensions_combo (HildonFileChooserDialog *self, + char **extensions, + char **ext_names) +{ + GtkTreeIter iter; + GtkListStore *model; + GtkCellRenderer *renderer; + GtkWidget *caption; + GtkWidget *combo; + gint i = 0; + + g_return_val_if_fail (self->priv->extensions_combo == NULL, NULL); + + model = GTK_LIST_STORE (gtk_list_store_new (2, + G_TYPE_STRING, + G_TYPE_STRING)); + combo = gtk_combo_box_new_with_model (GTK_TREE_MODEL (model)); + self->priv->extensions_combo = combo; + + for (i = 0; extensions[i]; i++) + { + gtk_list_store_append (model, &iter); + gtk_list_store_set (model, &iter, + 0, ext_names? ext_names[i] : extensions[i], + 1, extensions[i], + -1); + } + + renderer = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), + renderer, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), + renderer, "text", 0, NULL); + + g_object_unref(model); + + g_signal_connect (G_OBJECT (combo), "changed", + G_CALLBACK (extension_changed), self); + + caption = hildon_caption_new (NULL, + _("sfil_fi_save_object_dialog_type"), + combo, NULL, + HILDON_CAPTION_OPTIONAL); + + hildon_file_chooser_dialog_add_extra (self, caption); + + gtk_widget_show (combo); + gtk_widget_show (caption); + + sync_extensions_combo (self->priv); + + return combo; +} + +/** * hildon_file_chooser_dialog_set_safe_folder: * @self: a #HildonFileChooserDialog widget. * @local_path: a path to safe folder. Modified: projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.h =================================================================== --- projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.h 2007-06-01 20:43:33 UTC (rev 12075) +++ projects/haf/trunk/hildon-fm/hildon-fm/hildon-file-chooser-dialog.h 2007-06-04 07:27:56 UTC (rev 12076) @@ -87,7 +87,31 @@ void hildon_file_chooser_dialog_set_show_upnp (HildonFileChooserDialog *self, gboolean value); gboolean hildon_file_chooser_dialog_get_show_upnp (HildonFileChooserDialog *self); +/* Add WIDGET to the dialog, below the "Name" and "Location" fields. + When WIDGET is a HildonCaption, care is taken that the labels line + up with existing HildonCaptions. +*/ +void hildon_file_chooser_dialog_add_extra (HildonFileChooserDialog *self, + GtkWidget *widget); + +/* Create and add a combo box widget with a list of file extensions. + This combobox will track and modify the extension of the current + filename, it is not a filter. + + EXTENSIONS should be a vector of strings, terminated by NULL. The + strings in it are the extensions, without a leading '.'. + + EXT_NAMES, when non-NULL, is a vector parallel to EXTENSIONS that + determines the names of the extensions to use in the UI. When + EXT_NAMES is NULL, the exentions themselved are used as the names. +*/ +GtkWidget * +hildon_file_chooser_dialog_add_extensions_combo (HildonFileChooserDialog *self, + char **extensions, + char **ext_names); + /* + Note! Other functionality is provided by GtkFileChooser interface. See: http://developer.gnome.org/doc/API/2.0/gtk/GtkFileChooser.html
- Previous message: [maemo-commits] r12075 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Next message: [maemo-commits] r12077 - in projects/haf/trunk/hildon-fm: . debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]