Mercurial > geeqie.yaz
diff src/view_dir.c @ 389:b78077f65eff
Merge few more vdlist/vdtree functions.
author | zas_ |
---|---|
date | Wed, 16 Apr 2008 21:58:05 +0000 |
parents | 5186f8e38cb8 |
children | fcaf9c175742 |
line wrap: on
line diff
--- a/src/view_dir.c Wed Apr 16 20:36:10 2008 +0000 +++ b/src/view_dir.c Wed Apr 16 21:58:05 2008 +0000 @@ -17,6 +17,7 @@ #include "layout_image.h" #include "layout_util.h" #include "ui_fileops.h" +#include "ui_tree_edit.h" #include "ui_menu.h" #include "utilops.h" #include "view_dir_list.h" @@ -130,26 +131,106 @@ return ret; } +gint vd_find_row(ViewDir *vd, FileData *fd, GtkTreeIter *iter) +{ + gint ret = FALSE; + + switch(vd->type) + { + case DIRVIEW_LIST: ret = vdlist_find_row(vd, fd, iter); break; + case DIRVIEW_TREE: ret = vdtree_find_row(vd, fd, iter, NULL); break; + } + + return ret; +} + +static gint vd_rename_cb(TreeEditData *td, const gchar *old, const gchar *new, gpointer data) +{ + ViewDir *vd = data; + GtkTreeModel *store; + GtkTreeIter iter; + FileData *fd; + gchar *old_path; + gchar *new_path; + gchar *base; + + store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); + if (!gtk_tree_model_get_iter(store, &iter, td->path)) return FALSE; + + switch(vd->type) + { + case DIRVIEW_LIST: + gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &fd, -1); + break; + case DIRVIEW_TREE: + { + NodeData *nd; + gtk_tree_model_get(store, &iter, DIR_COLUMN_POINTER, &nd, -1); + if (!nd) return FALSE; + fd = nd->fd; + }; + break; + } + + if (!fd) return FALSE; + + old_path = g_strdup(fd->path); + + base = remove_level_from_path(old_path); + new_path = concat_dir_and_file(base, new); + g_free(base); + + if (file_util_rename_dir(fd, new_path, vd->view)) + { + + if (vd->type == DIRVIEW_TREE) vdtree_populate_path(vd, new_path, TRUE, TRUE); + if (vd->layout && strcmp(vd->path, old_path) == 0) + { + layout_set_path(vd->layout, new_path); + } + else + { + if (vd->type == DIRVIEW_LIST) vd_refresh(vd); + } + } + + g_free(old_path); + g_free(new_path); + + return FALSE; +} + +static void vd_rename_by_data(ViewDir *vd, FileData *fd) +{ + GtkTreeModel *store; + GtkTreePath *tpath; + GtkTreeIter iter; + + if (!fd || vd_find_row(vd, fd, &iter) < 0) return; + store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); + tpath = gtk_tree_model_get_path(store, &iter); + + tree_edit_by_path(GTK_TREE_VIEW(vd->view), tpath, 0, fd->name, + vd_rename_cb, vd); + gtk_tree_path_free(tpath); +} + + void vd_color_set(ViewDir *vd, FileData *fd, gint color_set) { GtkTreeModel *store; GtkTreeIter iter; + if (vd_find_row(vd, fd, &iter) < 0) return; + store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); + switch(vd->type) { case DIRVIEW_LIST: - { - if (vdlist_find_row(vd, fd, &iter) < 0) return; - store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); gtk_list_store_set(GTK_LIST_STORE(store), &iter, DIR_COLUMN_COLOR, color_set, -1); - } break; case DIRVIEW_TREE: - { - if (vdtree_find_row(vd, fd, &iter, NULL) < 0) return; - store = gtk_tree_view_get_model(GTK_TREE_VIEW(vd->view)); gtk_tree_store_set(GTK_TREE_STORE(store), &iter, DIR_COLUMN_COLOR, color_set, -1); - } break; } } @@ -390,27 +471,21 @@ } else { + FileData *fd = NULL; + switch(vd->type) { case DIRVIEW_LIST: { - FileData *fd; - vd_refresh(vd); fd = vdlist_row_by_path(vd, new_path, NULL); - - vdlist_rename_by_row(vd, fd); }; break; case DIRVIEW_TREE: - { - FileData *fd; - fd = vdtree_populate_path(vd, new_path, TRUE, TRUE); - vdtree_rename_by_data(vd, fd); - }; break; } + vd_rename_by_data(vd, fd); } g_free(new_path); @@ -420,11 +495,7 @@ { ViewDir *vd = data; - switch(vd->type) - { - case DIRVIEW_LIST: vdlist_rename_by_row(vd, vd->click_fd); break; - case DIRVIEW_TREE: vdtree_rename_by_data(vd, vd->click_fd); break; - } + vd_rename_by_data(vd, vd->click_fd); } GtkWidget *vd_pop_menu(ViewDir *vd, FileData *fd)