Working on selection

This commit is contained in:
Pierre Pronchery 2006-06-23 08:38:00 +00:00
parent b0bb411176
commit aae1cef1bf
2 changed files with 50 additions and 33 deletions

View File

@ -236,11 +236,14 @@ Browser * browser_new(char const * directory)
_fill_store(browser); _fill_store(browser);
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
_new_iconview(browser); _new_iconview(browser);
gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->iconview);
gtk_widget_grab_focus(browser->iconview);
browser->listview = NULL;
#else #else
_new_listview(browser); _new_listview(browser);
gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->listview);
gtk_widget_grab_focus(browser->listview);
#endif #endif
gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->view);
gtk_widget_grab_focus(browser->view);
gtk_container_add(GTK_CONTAINER(browser->window), vbox); gtk_container_add(GTK_CONTAINER(browser->window), vbox);
gtk_widget_show_all(browser->window); gtk_widget_show_all(browser->window);
@ -406,34 +409,34 @@ static GtkListStore * _create_store(void)
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
static void _new_iconview(Browser * browser) static void _new_iconview(Browser * browser)
{ {
browser->view = gtk_icon_view_new_with_model(GTK_TREE_MODEL( browser->iconview = gtk_icon_view_new_with_model(GTK_TREE_MODEL(
browser->store)); browser->store));
gtk_icon_view_set_selection_mode(GTK_ICON_VIEW(browser->view), gtk_icon_view_set_selection_mode(GTK_ICON_VIEW(browser->iconview),
GTK_SELECTION_MULTIPLE); GTK_SELECTION_MULTIPLE);
gtk_icon_view_set_text_column(GTK_ICON_VIEW(browser->view), gtk_icon_view_set_text_column(GTK_ICON_VIEW(browser->iconview),
BR_COL_DISPLAY_NAME); BR_COL_DISPLAY_NAME);
gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(browser->view), gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(browser->iconview),
BR_COL_PIXBUF); BR_COL_PIXBUF);
g_signal_connect(browser->view, "item-activated", g_signal_connect(browser->iconview, "item-activated",
G_CALLBACK(_browser_on_icon_default), browser); G_CALLBACK(_browser_on_icon_default), browser);
} }
#endif #endif
static void _new_listview(Browser * browser) static void _new_listview(Browser * browser)
{ {
browser->view = gtk_tree_view_new_with_model(GTK_TREE_MODEL( browser->listview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(
browser->store)); browser->store));
gtk_tree_view_append_column(GTK_TREE_VIEW(browser->view), gtk_tree_view_append_column(GTK_TREE_VIEW(browser->listview),
gtk_tree_view_column_new_with_attributes("Icon", gtk_tree_view_column_new_with_attributes("Icon",
gtk_cell_renderer_pixbuf_new(), "pixbuf", gtk_cell_renderer_pixbuf_new(), "pixbuf",
BR_COL_PIXBUF, NULL)); BR_COL_PIXBUF, NULL));
gtk_tree_view_append_column(GTK_TREE_VIEW(browser->view), gtk_tree_view_append_column(GTK_TREE_VIEW(browser->listview),
gtk_tree_view_column_new_with_attributes("Filename", gtk_tree_view_column_new_with_attributes("Filename",
gtk_cell_renderer_text_new(), "text", gtk_cell_renderer_text_new(), "text",
BR_COL_DISPLAY_NAME, NULL)); BR_COL_DISPLAY_NAME, NULL));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(browser->view), gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(browser->listview),
FALSE); FALSE);
g_signal_connect(G_OBJECT(browser->view), "row-activated", g_signal_connect(G_OBJECT(browser->listview), "row-activated",
G_CALLBACK(_browser_on_icon_default), browser); G_CALLBACK(_browser_on_icon_default), browser);
} }
@ -461,26 +464,33 @@ static void _browser_on_closex(GtkWidget * widget, GdkEvent * event,
gtk_main_quit(); gtk_main_quit();
} }
static void _copy_foreach(gpointer data, Browser * browser);
static void _browser_on_edit_copy(GtkWidget * widget, gpointer data) static void _browser_on_edit_copy(GtkWidget * widget, gpointer data)
{ {
#if GTK_CHECK_VERSION(2, 6, 0)
Browser * browser = data; Browser * browser = data;
GList * selection; GtkTreeIter iter;
GList * sel;
GList * p;
gchar * q;
#if GTK_CHECK_VERSION(2, 6, 0)
/* FIXME free previous buffer */ /* FIXME free previous buffer */
selection = gtk_icon_view_get_selected_items(GTK_ICON_VIEW( if((sel = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(
browser->view)); browser->iconview))) == NULL)
g_list_foreach(selection, (GFunc)_copy_foreach, browser); return;
for(p = sel; p->next != NULL; p = p->next)
{
if(!gtk_tree_model_get_iter(browser->store, &iter, p->data))
continue;
gtk_tree_model_get(browser->store, &iter, BR_COL_PATH, &q, -1);
printf("%s\n", q);
g_free(q);
}
g_list_foreach(sel, gtk_tree_path_free, NULL);
g_list_free(sel);
/* FIXME differentiate cut from paste */ /* FIXME differentiate cut from paste */
#endif #endif
} }
static void _copy_foreach(gpointer data, Browser * browser)
{
printf("%p\n", data); /* FIXME */
}
static void _browser_on_edit_cut(GtkWidget * widget, gpointer data) static void _browser_on_edit_cut(GtkWidget * widget, gpointer data)
{ {
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
@ -489,7 +499,7 @@ static void _browser_on_edit_cut(GtkWidget * widget, gpointer data)
/* FIXME free previous buffer */ /* FIXME free previous buffer */
selection = gtk_icon_view_get_selected_items(GTK_ICON_VIEW( selection = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(
browser->view)); browser->iconview));
/* FIXME differentiate cut from paste */ /* FIXME differentiate cut from paste */
#endif #endif
} }
@ -503,7 +513,7 @@ static void _browser_on_edit_select_all(GtkWidget * widget, gpointer data)
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
Browser * browser = data; Browser * browser = data;
gtk_icon_view_select_all(GTK_ICON_VIEW(browser->view)); gtk_icon_view_select_all(GTK_ICON_VIEW(browser->iconview));
#endif #endif
} }
@ -512,7 +522,7 @@ static void _browser_on_edit_unselect_all(GtkWidget * widget, gpointer data)
#if GTK_CHECK_VERSION(2, 6, 0) #if GTK_CHECK_VERSION(2, 6, 0)
Browser * browser = data; Browser * browser = data;
gtk_icon_view_unselect_all(GTK_ICON_VIEW(browser->view)); gtk_icon_view_unselect_all(GTK_ICON_VIEW(browser->iconview));
#endif #endif
} }
@ -750,10 +760,13 @@ static void _browser_on_view_icons(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
gtk_widget_destroy(browser->view); if(browser->iconview != NULL)
return;
gtk_widget_destroy(browser->listview);
browser->listview = NULL;
_new_iconview(browser); _new_iconview(browser);
gtk_widget_show(browser->view); gtk_widget_show(browser->iconview);
gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->view); gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->iconview);
} }
#endif #endif
@ -761,10 +774,13 @@ static void _browser_on_view_list(GtkWidget * widget, gpointer data)
{ {
Browser * browser = data; Browser * browser = data;
gtk_widget_destroy(browser->view); if(browser->listview != NULL)
return;
gtk_widget_destroy(browser->iconview);
browser->iconview = NULL;
_new_listview(browser); _new_listview(browser);
gtk_widget_show(browser->view); gtk_widget_show(browser->listview);
gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->view); gtk_container_add(GTK_CONTAINER(browser->scrolled), browser->listview);
} }

View File

@ -43,7 +43,8 @@ typedef struct _Browser
GtkToolItem * tb_forward; GtkToolItem * tb_forward;
GtkWidget * tb_path; GtkWidget * tb_path;
GtkWidget * scrolled; GtkWidget * scrolled;
GtkWidget * view; GtkWidget * iconview;
GtkWidget * listview;
GtkListStore * store; GtkListStore * store;
GtkWidget * statusbar; GtkWidget * statusbar;
guint statusbar_id; guint statusbar_id;