📄 gemfilechooser.c.svn-base
字号:
gchar *absolute_path=g_strdup_printf("%s/%s",current_path,vfs_file_info->name); /*add virtual root mechnism*/ int i = 0; if (!strcmp (current_path, virtual_root)) { gtk_tree_view_column_set_visible(filechooser->check_box ,FALSE); for (i = 0; i < VIRTUAL_TOPDIR_COUNT; i++) { if (!strcmp (virtual_topdirs[i].path, vfs_file_info->name)) { /* if(vfs_file_info->name) { g_free(vfs_file_info->name); vfs_file_info->name = g_strdup(virtual_topdirs[i].alias); }*/ name = g_strdup(virtual_topdirs[i].alias); break; } } if(i == VIRTUAL_TOPDIR_COUNT) { gnome_vfs_file_info_unref(vfs_file_info); continue; } switch(i) { case MUSIC: pixbuf = gdk_pixbuf_ref(icons[MUSIC]); break; case PHOTO: pixbuf = gdk_pixbuf_ref(icons[PHOTO]); break; case VIDEO: pixbuf = gdk_pixbuf_ref(icons[VIDEO]); break; case RINGTONE : pixbuf = gdk_pixbuf_ref(icons[RINGTONE]); break; case SD : pixbuf = gdk_pixbuf_ref(icons[SD]); break; case COLLECTION : pixbuf = gdk_pixbuf_ref(icons[COLLECTION]); break; default : pixbuf = gdk_pixbuf_ref(icons[NORMAL]); break; } }//not virtul root else /*add icons find icons in mime database*/ { name = g_strdup(vfs_file_info->name); gchar *mime_icon = find_mime_icon(vfs_file_info,absolute_path); pixbuf = get_pixbuf(mime_icon); } g_free(absolute_path); pb = gdk_pixbuf_scale_simple (pixbuf, 32, 32, GDK_INTERP_BILINEAR); gtk_list_store_append(GTK_LIST_STORE(model), &tree_iter); if (vfs_file_info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) { gtk_list_store_set(GTK_LIST_STORE(model), &tree_iter, GEM_FC_COL_NAME, name, GEM_FC_COL_PIC, pb, GEM_FC_COL_IS_FOLDER, TRUE, GEM_FC_COL_VFS_FILE_INFO, vfs_file_info, GEM_FC_COL_CHECK_BOX, FALSE, -1); } else { gtk_list_store_set(GTK_LIST_STORE(model), &tree_iter, GEM_FC_COL_NAME, name, GEM_FC_COL_PIC, pb, GEM_FC_COL_IS_FOLDER, FALSE, GEM_FC_COL_VFS_FILE_INFO, vfs_file_info, GEM_FC_COL_CHECK_BOX, FALSE, -1); } } else { gnome_vfs_file_info_unref(vfs_file_info); continue; } }//end of while /*if open fail*/ if (open_dir_result != GNOME_VFS_OK) { gchar * error=NULL; switch (open_dir_result) { case GNOME_VFS_ERROR_READ_ONLY: error = g_strdup (_("Destination is read only.")); break; case GNOME_VFS_ERROR_ACCESS_DENIED: error = g_strdup (_("Access denied.")); break; case GNOME_VFS_ERROR_READ_ONLY_FILE_SYSTEM: error = g_strdup (_("Read only file system.")); break; case GNOME_VFS_ERROR_NOT_FOUND: break; case GNOME_VFS_ERROR_GENERIC: break; default: error = g_strdup_printf ("%s %s", _("Error:"), gnome_vfs_result_to_string(open_dir_result)); break; } if(error) { g_print("%s",error); g_free (error); } } } } /* * log the current path and update * tree view cursor to the top line */ if (filechooser->current_path != NULL) { g_free(filechooser->current_path); } filechooser->current_path = g_strdup(current_path); if (TRUE) { GtkWidget * view = NULL; view = gem_tree_view_get_view(GEM_TREE_VIEW(filechooser)); if (view) { GtkTreePath * tree_path = NULL; GtkTreeViewColumn * col = NULL; tree_path = gtk_tree_path_new_first(); col = gtk_tree_view_get_column(GTK_TREE_VIEW(view), 0); gtk_tree_view_set_cursor(GTK_TREE_VIEW(view), tree_path, col, FALSE); gtk_tree_path_free(tree_path); } } return;}G_CONST_RETURN gchar *gem_file_chooser_get_current_path (GemFileChooser *filechooser){ return filechooser->current_path;}voidgem_file_chooser_set_selectable (GemFileChooser *filechooser, gboolean selectable){ gboolean sel = gem_file_chooser_get_selectable(filechooser); if(sel == selectable) { return; } GtkWidget * treeview = NULL; const gchar *current_path = NULL; DBG("set selectable in gemfilechooser"); current_path = gem_file_chooser_get_current_path(filechooser); if(current_path == NULL) return; if (!strcmp (current_path, virtual_root)) { g_print("%s():System Files Can Be Marked\n",__FUNCTION__); gtk_tree_view_column_set_visible(filechooser->check_box ,FALSE); return; } else gtk_tree_view_column_set_visible(filechooser->check_box ,selectable); /*cusor focus set*/ if (TRUE) { GtkWidget * view = NULL; view = gem_tree_view_get_view(GEM_TREE_VIEW(filechooser)); if (view) { GtkTreePath * tree_path = NULL; GtkTreeViewColumn * col = NULL; tree_path = gtk_tree_path_new_first(); if(selectable) col = gtk_tree_view_get_column(GTK_TREE_VIEW(view), 0); else col = gtk_tree_view_get_column(GTK_TREE_VIEW(view), 1); gtk_tree_view_set_cursor( GTK_TREE_VIEW(view), tree_path, col, FALSE ); gtk_tree_path_free(tree_path); } }#if 1 /*set ".." as "select all",and change it's icon*/ GtkTreeModel * model = NULL; model = gem_tree_view_get_model(GEM_TREE_VIEW(filechooser)); GtkTreeIter *tree_iter = NULL; gboolean result = gtk_tree_model_get_iter_first(model,&tree_iter); GdkPixbuf * pixbuf = NULL; gchar * picpath = NULL; if(selectable) { picpath = g_build_filename(gem_resource_path, "pixmaps", "file_selected.png", NULL); if (gem_resource_load_pic(picpath,GEM_PIC_NORMAL) == TRUE) { pixbuf = gem_resource_find_pic(picpath,GEM_PIC_NORMAL); } gtk_list_store_set( GTK_LIST_STORE(model), &tree_iter, GEM_FC_COL_PIC, pixbuf, GEM_FC_COL_NAME, "Select All", GEM_FC_COL_CHECK, FALSE, GEM_FC_COL_CHECK_BOX, FALSE, -1 ); } else { picpath = g_build_filename(gem_resource_path, "pixmaps", "parent.png", NULL); if (gem_resource_load_pic(picpath,GEM_PIC_NORMAL) == TRUE) { pixbuf = gem_resource_find_pic(picpath,GEM_PIC_NORMAL); } gtk_list_store_set(GTK_LIST_STORE(model), &tree_iter, GEM_FC_COL_PIC, pixbuf, GEM_FC_COL_NAME, "..", -1); gem_file_chooser_unselect_all(filechooser); DBG("SSSSSSSSSSSSSSfc=%p................................",filechooser); } g_free(picpath); DBG("SSSSSSSSSSSSSSfc=%p................................",filechooser);#endif if (filechooser->selectable == selectable) { DBG("SSSSSSSSSSSSSSfc=%p................................",filechooser); return; } DBG("SSSSSSSSSSSSSSfc=%p................................",filechooser); DBG("SSSSSSSSSSSSSS"); filechooser->selectable = selectable; return;}gbooleangem_file_chooser_get_selectable (GemFileChooser *filechooser){ return filechooser->selectable;}GList *gem_file_chooser_get_current_selections (GemFileChooser *filechooser){ GtkTreeModel * model = NULL; GList * results = NULL; gint count = 0; gint i; model = gem_tree_view_get_model(GEM_TREE_VIEW(filechooser)); if (model == NULL) { return results; } if (filechooser->selectable == FALSE) { GtkWidget * treeview = NULL; treeview = gem_tree_view_get_view(GEM_TREE_VIEW(filechooser)); if (treeview) { GtkTreePath * path = NULL; gtk_tree_view_get_cursor(GTK_TREE_VIEW(treeview), &path, NULL); if (path) { GtkTreeIter iter; /*if the first then ,return NULL*/ GtkTreePath *root = gtk_tree_path_new_first (); if (!gtk_tree_path_compare (path, root)) { return results; } if (gtk_tree_model_get_iter(model, &iter, path) == TRUE) { gchar * fname = NULL; gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, GEM_FC_COL_NAME, &fname, -1); results = g_list_append(results, (gpointer)fname); } gtk_tree_path_free(path); } } return results; } count = gtk_tree_model_iter_n_children(model, NULL); for (i = 1; i < count; i++) { GtkTreeIter iter; if (gtk_tree_model_iter_nth_child(model, &iter, NULL, i) == TRUE) { gchar * fname = NULL; gboolean selected = FALSE; gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, GEM_FC_COL_NAME, &fname, GEM_FC_COL_CHECK, &selected, -1); if(selected == TRUE) { results = g_list_append(results, (gpointer)fname); } } } return results; }GList *gem_file_chooser_get_current_selections_vfs_file_info (GemFileChooser *filechooser){ GtkTreeModel * model = NULL; GList * results = NULL; gint count = 0; gint i; model = gem_tree_view_get_model(GEM_TREE_VIEW(filechooser)); if (model == NULL) { return results; } if (filechooser->selectable == FALSE) { GtkWidget * treeview = NULL; treeview = gem_tree_view_get_view(GEM_TREE_VIEW(filechooser)); if (treeview) { GtkTreePath * path = NULL; gtk_tree_view_get_cursor(GTK_TREE_VIEW(treeview), &path, NULL); if (path) { GtkTreeIter iter; if (gtk_tree_model_get_iter(model, &iter, path) == TRUE) { GnomeVFSFileInfo *vfs_file_info; /*= gnome_vfs_file_info_new ();*/ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, GEM_FC_COL_VFS_FILE_INFO, &vfs_file_info, -1); results = g_list_append(results, (gpointer)vfs_file_info); } gtk_tree_path_free(path); } } return results; } count = gtk_tree_model_iter_n_children(model, NULL); for (i = 1; i < count; i++) { GtkTreeIter iter; if (gtk_tree_model_iter_nth_child(model, &iter, NULL, i) == TRUE) { gboolean selected = FALSE; GnomeVFSFileInfo *vfs_file_info; /*= gnome_vfs_file_info_new ();*/ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, GEM_FC_COL_VFS_FILE_INFO, &vfs_file_info, GEM_FC_COL_CHECK, &selected, -1); if(selected == TRUE) { results = g_list_append(results, (gpointer)vfs_file_info); } } } return results; }voidgem_file_chooser_select_all (GemFileChooser *filechooser){ gem_file_chooser_set_selection_all(filechooser, TRUE); return;}voidgem_file_chooser_unselect_all (GemFileChooser *filechooser){ gem_file_chooser_set_selection_all(filechooser, FALSE); return;}/*vi:ts=2:nowrap:ai:expandtab */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -