[maemo-commits] [maemo-commits] r16759 - projects/haf/branches/hildon-fm/fremantle/hildon-fm

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Nov 24 16:11:35 EET 2008
Author: yangli
Date: 2008-11-24 16:11:34 +0200 (Mon, 24 Nov 2008)
New Revision: 16759

Modified:
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c
Log:
implementation of file type selection dialog

Modified: projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c
===================================================================
--- projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c	2008-11-24 11:04:30 UTC (rev 16758)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c	2008-11-24 14:11:34 UTC (rev 16759)
@@ -30,6 +30,8 @@
 #endif
 
 #define _GNU_SOURCE  /* To get the GNU version of basename. */
+#define HILDON_FREMANTLE_DEPRECATED 0 
+
 #include <string.h>
 
 #define GTK_FILE_CHOOSER_ENABLE_UNSUPPORTED
@@ -158,6 +160,11 @@
     GtkFileChooserAction action;
     GtkWidget *popup;
     GtkWidget *multiple_label, *hbox_items;
+    /* type selection dialog */
+    GtkWidget *type_select_dialog;
+    GList     *extensions_list;
+    /* a selector widget containing the available file types */
+    GtkWidget *selector;
     gulong changed_handler;
     gint max_full_path_length;
     gint max_filename_length;
@@ -180,7 +187,7 @@
     gboolean should_show_folder_button;
     gboolean should_show_location;
     gboolean show_upnp;
-};
+ };
 
 static void hildon_response_up_button_clicked(GtkWidget *widget,
 					      gpointer   data);
@@ -1336,7 +1343,7 @@
 
     gboolean local_only = FALSE;
     gboolean show_hidden = FALSE;
-    gboolean show_upnp = TRUE;
+    gboolean show_upnp = FALSE;
   
     g_object_get (self->priv->filetree, "local-only", &local_only, NULL);
     g_object_get (self->priv->filetree, "show-hidden", &show_hidden, NULL);
@@ -2577,14 +2584,13 @@
       GtkTreeModel *model;
       GtkTreeIter iter;
       gboolean valid;
-      HildonTouchSelector *selector;
 
-      selector = hildon_picker_button_get_selector(HILDON_PICKER_BUTTON(priv->extensions_combo));
-      model = hildon_touch_selector_get_model(selector, 0);
+      //priv->selector = hildon_picker_button_get_selector(HILDON_PICKER_BUTTON(priv->extensions_combo));
+      model = hildon_touch_selector_get_model(priv->selector, 0);
 
       /* if there is a valid extension selected, just leave it */
-      if (hildon_touch_selector_get_selected (selector, 0, &iter))
-      //if (hildon_touch_selector_get_active_iter (selector, 0, &iter))
+      //if (hildon_touch_selector_get_selected (priv->selector, 0, &iter))
+      if (hildon_touch_selector_get_active_iter (priv->selector, 0, &iter))
         {
 	  gboolean matches;
 	  gchar *ext;
@@ -2604,8 +2610,8 @@
 	  gtk_tree_model_get (model, &iter, 0, &ext, -1);
 	  if (strcmp (ext, priv->ext_name + 1) == 0)
 	    {
-	      hildon_touch_selector_select_iter (selector, 0, &iter, TRUE);
-	      //hildon_touch_selector_set_active_iter (selector, 0, &iter, TRUE);
+	      //hildon_touch_selector_select_iter (priv->selector, 0, &iter, TRUE);
+	      hildon_touch_selector_set_active_iter (priv->selector, 0, &iter, TRUE);
               hildon_button_set_value(HILDON_BUTTON(priv->extensions_combo), ext);
 
 	      g_free (ext);
@@ -2619,6 +2625,29 @@
 }
 
 static void
+hildon_touch_list_selection_changed (HildonTouchSelector * touch_selector,
+				     gint num_column, gpointer data)
+
+{
+  gchar *type_string = NULL;
+
+  HildonFileChooserDialogPrivate *priv = 
+    HILDON_FILE_CHOOSER_DIALOG (data)->priv;
+
+  g_return_if_fail (HILDON_IS_TOUCH_SELECTOR (touch_selector));
+  type_string = hildon_touch_selector_get_current_text (touch_selector);
+
+  hildon_button_set_text(HILDON_BUTTON(priv->extensions_combo), 
+			 type_string, NULL);
+  g_free (priv->ext_name);
+  priv->ext_name = g_strconcat (".", type_string, NULL);
+  hildon_file_chooser_dialog_do_autonaming (priv);
+  gtk_dialog_response(GTK_DIALOG(priv->type_select_dialog),
+		      GTK_RESPONSE_OK);
+}
+
+#ifndef HILDON_FREMANTLE_DEPRECATED
+static void
 extension_changed (GtkComboBox *widget, gpointer data)
 {
   HildonFileChooserDialogPrivate *priv = 
@@ -2628,7 +2657,9 @@
   priv->ext_name = g_strconcat (".", hildon_button_get_value (HILDON_BUTTON (widget)), NULL);
   hildon_file_chooser_dialog_do_autonaming (priv);
 }
+#endif
 
+
 static void hildon_file_chooser_dialog_reset_files_visibility(HildonFileChooserDialogPrivate *priv,
 							      gint dialog_type)
 {
@@ -2653,24 +2684,35 @@
 static void hildon_chooser_dialog_extension_button_clicked(GtkWidget *widget,
 							   gpointer   data)
 {
-	/**
-  GtkDialog *dialog;
-  GtkWidget *selector;
-  **/
-  gint result;
-  
-  g_assert(HILDON_IS_TOUCH_SELECTOR (data));
-  //selector = HILDON_TOUCH_SELECTOR (data);
-  //dialog = GTK_DIALOG(selector);
-  printf("yang: dialog created\n");
-  result = gtk_dialog_run (GTK_DIALOG (data));
-  switch (result)
+  GtkBox *box;
+  GList *list;
+  gint response;
+
+  g_assert(HILDON_IS_FILE_CHOOSER_DIALOG(data));
+  HildonFileChooserDialogPrivate *priv = HILDON_FILE_CHOOSER_DIALOG(data)->priv;
+  priv->type_select_dialog = gtk_dialog_new();  
+
+  priv->selector = hildon_touch_selector_new_text();
+  list = g_list_first(priv->extensions_list);
+  while (list != NULL) {
+      hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (priv->selector), 
+					 list->data);
+      list = g_list_next (list);
+  }
+  gtk_widget_show(priv->selector);
+
+  box = GTK_BOX(GTK_DIALOG(priv->type_select_dialog)->vbox);
+  gtk_box_pack_start(box, g_object_ref(priv->selector), 
+		     FALSE, TRUE, HILDON_MARGIN_DEFAULT);
+  gtk_window_set_title (GTK_WINDOW (priv->type_select_dialog),
+			_("sfil_fi_save_object_dialog_type"));
+  g_signal_connect (G_OBJECT (priv->selector), "changed", 
+		    G_CALLBACK (hildon_touch_list_selection_changed), data);
+
+  while ((response = gtk_dialog_run(GTK_DIALOG(priv->type_select_dialog))) == GTK_RESPONSE_OK)
   {
-     case GTK_RESPONSE_OK:
-     case GTK_RESPONSE_ACCEPT:
-        break;
-     default:
-       break;
+	gtk_widget_destroy (priv->selector);
+	gtk_widget_destroy (priv->type_select_dialog);
   }
 }
 
@@ -2699,35 +2741,35 @@
 						 char **ext_names)
 {
   GtkWidget       *button;
-  GtkWidget       *selector;
   GtkWidget       *caption;
   gint            i = 0;
 
-  g_return_val_if_fail (self->priv->extensions_combo == NULL, NULL);
+  HildonFileChooserDialogPrivate *priv = HILDON_FILE_CHOOSER_DIALOG(self)->priv;
+
+  g_return_val_if_fail (priv->extensions_combo == NULL, NULL);
     
   button = hildon_button_new(HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_AUTO_WIDTH, 
 		 	     HILDON_BUTTON_ARRANGEMENT_HORIZONTAL);
   hildon_button_set_text(HILDON_BUTTON(button), NULL, extensions[0]);
 
-  selector = hildon_touch_selector_new_text();
-
-  self->priv->extensions_combo = button;
-
+  priv->extensions_combo = button;
+  priv->extensions_list = NULL;  
   for (i = 0; extensions[i]; i++)
     {
-        hildon_touch_selector_append_text (HILDON_TOUCH_SELECTOR (selector), extensions[i]);
+        priv->extensions_list = g_list_append (priv->extensions_list, 
+					       extensions[i]);
     }
-
   g_signal_connect(G_OBJECT(button), "clicked",
 		   G_CALLBACK(hildon_chooser_dialog_extension_button_clicked), 
-		   selector);
-  hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button), HILDON_TOUCH_SELECTOR (selector));
+		   self);
   gtk_button_set_alignment(GTK_BUTTON(button), 0, 0.5);
   hildon_button_set_title(HILDON_BUTTON(button), _("sfil_fi_save_object_dialog_type"));
   hildon_button_set_title(HILDON_BUTTON(button), NULL);
 
+  #ifndef HILDON_FREMANTLE_DEPRECATED
   g_signal_connect (G_OBJECT (button), "value-changed",
 		    G_CALLBACK (extension_changed), self);
+  #endif
 
   caption = hildon_caption_new (NULL, _("sfil_fi_save_object_dialog_type"), button, NULL, HILDON_CAPTION_OPTIONAL);
   hildon_caption_set_separator(HILDON_CAPTION(caption), "");
@@ -2736,8 +2778,7 @@
   
   gtk_widget_show (button);
   gtk_widget_show (caption);
-  
-  sync_extensions_combo (self->priv);
+  sync_extensions_combo (priv);
 
   return button;
 }


More information about the maemo-commits mailing list