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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Aug 26 13:45:29 EEST 2008
Author: yangli
Date: 2008-08-26 13:45:21 +0300 (Tue, 26 Aug 2008)
New Revision: 15889

Modified:
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c
   projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c
Log:
complete the open 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-08-25 13:33:55 UTC (rev 15888)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-chooser-dialog.c	2008-08-26 10:45:21 UTC (rev 15889)
@@ -83,6 +83,8 @@
 
 #define FILE_SELECTION_WIDTH_TOTAL 590  /* Width for full filetree (both
                                            content and navigation pane) */
+/* adopted from GTK MAXPATHLEN */
+#define MAXPATHLEN 1024
 
 #ifdef DEBUG
 #define DBG(args...) fprintf (stderr, ## args)
@@ -131,7 +133,8 @@
 struct _HildonFileChooserDialogPrivate {
     GtkWidget *up_button;
     GtkWidget *path_button;
- 
+    GtkWidget *path_label;
+
     GtkWidget *action_button;
     GtkWidget *folder_button;
     GtkWidget *cancel_button;
@@ -367,11 +370,33 @@
                             self->priv->max_filename_length);
 }
 
-static void file_activated_handler(GtkWidget * widget, gpointer user_data)
+static void file_activated_handler(GtkWidget * widget, gpointer data)
 {
-    hildon_file_chooser_update_path_button(HILDON_FILE_CHOOSER_DIALOG(user_data));
+    g_assert(HILDON_IS_FILE_CHOOSER_DIALOG(data));
+    HildonFileChooserDialogPrivate *priv = HILDON_FILE_CHOOSER_DIALOG(data)->priv;
+
+    if(priv->action == GTK_FILE_CHOOSER_ACTION_OPEN) {
+          g_signal_emit_by_name(data, "response", GTK_RESPONSE_OK, NULL);
+    }
+ 
 }
 
+static void folder_activated_handler(GtkWidget * widget, gpointer data)
+{
+    g_assert(HILDON_IS_FILE_CHOOSER_DIALOG(data));
+    HildonFileChooserDialogPrivate *priv = HILDON_FILE_CHOOSER_DIALOG(data)->priv;
+
+    switch (priv->action) {
+       case GTK_FILE_CHOOSER_ACTION_OPEN:
+       case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER:
+	 hildon_file_chooser_update_path_button(HILDON_FILE_CHOOSER_DIALOG(data));
+	 break;
+       default:
+	 ULOG_INFO("wring dialog for the folder activated handler\n");
+	 break;
+    }
+}
+
 static void
 hildon_file_chooser_dialog_select_text(HildonFileChooserDialogPrivate *priv)
 {
@@ -1089,7 +1114,12 @@
                                     FILE_SELECTION_WIDTH_TOTAL,
                                     FILE_SELECTION_HEIGHT);
         gtk_widget_show(GTK_WIDGET(priv->filetree));
+	hildon_file_selection_show_content_pane(priv->filetree);
+	hildon_file_selection_hide_navigation_pane(priv->filetree);
         hildon_file_selection_show_content_pane(priv->filetree);
+	gtk_widget_show_all(priv->hbox_address);
+	gtk_widget_hide(priv->path_button);
+	gtk_widget_show(priv->path_label);
         gtk_window_set_title(GTK_WINDOW(self), _("ckdg_ti_open_file"));
         gtk_button_set_label(GTK_BUTTON(priv->action_button),
                              _("ckdg_bd_select_object_ok_open"));
@@ -1158,7 +1188,8 @@
 				    HILDON_MARGIN_DEFAULT,
 				    FILE_SELECTION_ADDRESS_HEIGHT);
 	
-	gtk_widget_show(priv->hbox_address);
+	gtk_widget_show_all(priv->hbox_address);
+	gtk_widget_hide(priv->path_label);
 	gtk_widget_show(GTK_WIDGET(priv->filetree));
 	hildon_file_selection_show_content_pane(priv->filetree);
 	hildon_file_selection_hide_navigation_pane(priv->filetree);
@@ -1263,8 +1294,6 @@
 {
     GtkWidget *dialog;
     HildonFileChooserDialogPrivate *priv;
-    g_assert(HILDON_IS_FILE_CHOOSER_DIALOG(dialog));
-    priv = HILDON_FILE_CHOOSER_DIALOG(dialog)->priv;
 
     gboolean local_only = FALSE;
     gboolean show_hidden = FALSE;
@@ -1286,6 +1315,9 @@
        "show-upnp", show_upnp,
        NULL);
     gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
+    g_assert(HILDON_IS_FILE_CHOOSER_DIALOG(dialog));
+    priv = HILDON_FILE_CHOOSER_DIALOG(dialog)->priv;
+
     g_assert(HILDON_IS_FILE_SELECTION(priv->filetree));
     hildon_file_selection_set_invisible_files(priv->filetree, 
 					      priv->invisible_files);
@@ -2052,15 +2084,14 @@
     GtkTreeIter iter;
     GtkTreeIter cur_iter;
     char *path;
-    char *cur_path;
-    gchar *gtk_tree_path_str;
+    gchar *gtk_tree_path_str = NULL;
     gchar *title;
     gchar *path_string;
     GList *list = NULL;
 
     if((path = hildon_file_selection_get_current_folder_uri(priv->filetree)) != NULL){
-        hildon_file_system_model_load_uri(GTK_TREE_MODEL(priv->model),
-					  path, &iter);
+      hildon_file_system_model_load_uri(priv->model,
+					(const char*) path, &iter);
 	free(path);
         gtk_tree_model_get(GTK_TREE_MODEL(priv->model), &iter,
                            HILDON_FILE_SYSTEM_MODEL_COLUMN_DISPLAY_NAME,
@@ -2091,16 +2122,27 @@
 	             &iter);*/
     }
     //free(title);
-    path_string = g_malloc(100);
-    memset(path_string, 0, 100);
+    path_string = g_malloc(MAXPATHLEN);
+    memset(path_string, 0, MAXPATHLEN);
     for (list = g_list_last(list); list; list = list->prev) {
       if(strlen(path_string) == 0)
 	strcpy(path_string, list->data);
-      else
-	strcat(path_string, list->data);
+      else {
+	if(strlen(list->data) + strlen(path_string) < MAXPATHLEN)
+	  strcat(path_string, list->data);
+	else
+	  ULOG_INFO("path length exceeds the maximum path length 1024\n");
+      }
       strcat(path_string, "/");
     }
-    gtk_button_set_label(GTK_BUTTON(priv->path_button), path_string);
+    if(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
+      gtk_button_set_label(GTK_BUTTON(priv->path_button), path_string);
+    else if(priv->action == GTK_FILE_CHOOSER_ACTION_OPEN) {
+      printf("yang set label string to %s\n", path_string);
+      gtk_label_set_text(GTK_LABEL(priv->path_label), path_string);
+    }
+    else
+      ULOG_INFO("no widget to update the path\n");
     g_free(path_string);
     g_list_free(list);  
     free(title);
@@ -2112,13 +2154,11 @@
     GtkTreeIter iter;
     GtkTreeIter cur_iter;
     char *path = NULL;
-    GError **error;
 
     g_return_if_fail(HILDON_IS_FILE_CHOOSER_DIALOG(data));
     HildonFileChooserDialogPrivate *priv = HILDON_FILE_CHOOSER_DIALOG(data)->priv;
     if((path = hildon_file_selection_get_current_folder_uri(priv->filetree)) != NULL){
-        hildon_file_system_model_load_uri(GTK_TREE_MODEL(priv->model),
-					  path, &iter);
+        hildon_file_system_model_load_uri(priv->model, path, &iter);
 	cur_iter = iter;
 	gtk_tree_model_iter_parent(GTK_TREE_MODEL(priv->model), &iter, &cur_iter);
 	hildon_file_selection_set_current_folder_iter(priv->filetree, &iter);
@@ -2134,15 +2174,6 @@
     g_signal_emit_by_name(data, "response", GTK_RESPONSE_OK, NULL);
 }
 
-static void hildon_response_folder_button_clicked(GtkWidget *widget,
-						  gpointer   data )
-{
-    g_return_if_fail(HILDON_IS_FILE_CHOOSER_DIALOG(data));
-    g_signal_emit_by_name(data, "response", HILDON_RESPONSE_FOLDER_BUTTON, NULL);
-
-    g_print ("folder button is clicked\n");
-}
-
 static void hildon_file_chooser_dialog_init(HildonFileChooserDialog * self)
 {
     GtkMenuShell *shell;
@@ -2170,7 +2201,7 @@
 
     image = gtk_image_new_from_stock(GTK_STOCK_GO_BACK, GTK_ICON_SIZE_BUTTON);
     priv->up_button = g_object_new(GTK_TYPE_BUTTON, "gtk-button-images", TRUE );
-    gtk_button_set_image(priv->up_button, image);
+    gtk_button_set_image(GTK_BUTTON(priv->up_button), image);
     g_signal_connect (G_OBJECT (priv->up_button), "clicked",
 		      G_CALLBACK (hildon_response_up_button_clicked), self);
     gtk_widget_show(priv->up_button);
@@ -2181,6 +2212,10 @@
 		      G_CALLBACK (hildon_response_path_button_clicked), self);
     gtk_widget_show(priv->path_button);
 
+    priv->path_label = g_object_new(GTK_TYPE_LABEL,  "label", "Nokia Nxxx/", 
+				     "xalign", 0.0f, NULL);
+    gtk_widget_show(priv->path_label);
+
     priv->action_button =
         gtk_dialog_add_button(GTK_DIALOG(self),
                               _("ckdg_bd_select_object_ok_open"),
@@ -2231,7 +2266,9 @@
     gtk_box_pack_start(GTK_BOX(priv->hbox_address), priv->up_button,
                        FALSE, TRUE, 0);
     gtk_box_pack_start(GTK_BOX(priv->hbox_address), priv->path_button,
-    FALSE, TRUE, 0);
+		       FALSE, TRUE, 0);
+    gtk_box_pack_start(GTK_BOX(priv->hbox_address), priv->path_label,
+		       FALSE, TRUE, 0);
 
     priv->caption_control_location =
       hildon_caption_new(size_group, _("sfil_fi_save_objects_items"),
@@ -2367,6 +2404,8 @@
                      (hildon_file_chooser_dialog_current_folder_changed), priv);
     g_signal_connect(priv->filetree, "file-activated",
                      G_CALLBACK(file_activated_handler), obj);
+    g_signal_connect(priv->filetree, "folder-activated",
+                     G_CALLBACK(folder_activated_handler), obj);
     g_signal_connect_object(priv->model, "finished-loading",
                      G_CALLBACK(hildon_file_chooser_dialog_finished_loading),
                      obj, 0);

Modified: projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c
===================================================================
--- projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c	2008-08-25 13:33:55 UTC (rev 15888)
+++ projects/haf/branches/hildon-fm/fremantle/hildon-fm/hildon-file-selection.c	2008-08-26 10:45:21 UTC (rev 15889)
@@ -108,6 +108,7 @@
 
 static guint signal_folder_changed,
              signal_file_activated,
+             signal_folder_activated,
              signal_selection_changed; /* Signal ids */
 
 static guint signal_navigation_pane_context_menu,
@@ -1077,10 +1078,23 @@
         g_signal_new("file-activated", HILDON_TYPE_FILE_SELECTION,
                      G_SIGNAL_RUN_LAST,
                      G_STRUCT_OFFSET(HildonFileSelectionClass,
-                                     file_activated), NULL, NULL,
+				     file_activated), NULL, NULL,
                      gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
 
   /**
+   * HildonFileSelection::folder-activated:
+   * @self: a #HildonFileSelection widget
+   *
+   * ::folder-activated signal is emitted when user selects an folder item from
+   * content pane.
+   */
+    signal_folder_activated =
+        g_signal_new("folder-activated", HILDON_TYPE_FILE_SELECTION,
+                     G_SIGNAL_RUN_LAST,
+                     0, NULL, NULL,
+                     gtk_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+  /**
    * HildonFileSelection::selection-changed:
    * @self: a #HildonFileSelection widget
    *
@@ -1656,7 +1670,7 @@
 
             rebind_models(priv);
             hildon_file_selection_inspect_view(priv);
-	    g_signal_emit(self, signal_file_activated, 0);
+	    g_signal_emit(self, signal_folder_activated, 0);
 
             /* These DON'T affect colums that have AUTOSIZE as sizing type
                ;) */
@@ -1785,6 +1799,7 @@
                 HILDON_FILE_SELECTION(data), dir_path);
               gtk_tree_path_free(dir_path);
             }
+	    g_signal_emit(data, signal_folder_activated, 0);
           }
           else { /* When we activate file, let's check if we need to reload */
             GtkTreeIter iter;
@@ -1796,7 +1811,6 @@
                 HILDON_FILE_SYSTEM_MODEL(self->priv->main_model),
                 &iter, FALSE);
             }
-
 	    g_signal_emit(data, signal_file_activated, 0);
           }
         }
@@ -3157,10 +3171,9 @@
     hildon_file_selection_create_thumbnail_view(self);
 
     if(self->priv->pannable_flag){
-      printf("pannarea attached \n");
-      gtk_container_add(HILDON_PANNABLE_AREA(priv->scroll_dir), GTK_WIDGET(priv->dir_tree));
-      gtk_container_add(HILDON_PANNABLE_AREA(priv->scroll_list), GTK_WIDGET(priv->view[0]));
-      gtk_container_add(HILDON_PANNABLE_AREA(priv->scroll_thumb), GTK_WIDGET(priv->view[1]));
+      gtk_container_add(GTK_CONTAINER(priv->scroll_dir), priv->dir_tree);
+      gtk_container_add(GTK_CONTAINER(priv->scroll_list), priv->view[0]);
+      gtk_container_add(GTK_CONTAINER(priv->scroll_thumb), priv->view[1]);
     }
     else{
       gtk_container_add(GTK_CONTAINER(priv->scroll_dir), priv->dir_tree);


More information about the maemo-commits mailing list