From 944c033b1f90091e291644dac920d41022b7dd3c Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Thu, 11 Nov 2010 17:14:08 +0000 Subject: [PATCH] get sview working with selection of multiple reservations --- src/sview/common.c | 7 +++---- src/sview/resv_info.c | 47 +++++++++++++++++++++++++++++++++++++++---- src/sview/sview.h | 4 +++- 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/sview/common.c b/src/sview/common.c index 3dc75e8486b..d36447dac98 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -593,8 +593,7 @@ static void _selected_page(GtkMenuItem *menuitem, display_data_t *display_data) each.pfunc = &popup_all_block; break; case RESV_PAGE: - popup_all_resv(treedata->model, &treedata->iter, - display_data->id); + each.pfunc = &popup_all_resv; break; case ADMIN_PAGE: switch(display_data->id) { @@ -613,8 +612,8 @@ static void _selected_page(GtkMenuItem *menuitem, display_data_t *display_data) display_data, treedata->treeview); break; case RESV_PAGE: - admin_resv(treedata->model, &treedata->iter, - display_data->name); + select_admin_resv(treedata->model, &treedata->iter, + display_data, treedata->treeview); break; case NODE_PAGE: select_admin_nodes(treedata->model, &treedata->iter, diff --git a/src/sview/resv_info.c b/src/sview/resv_info.c index b8b05317673..0133bb1a1c5 100644 --- a/src/sview/resv_info.c +++ b/src/sview/resv_info.c @@ -141,6 +141,10 @@ static display_data_t *local_display_data = NULL; static char *got_edit_signal = NULL; +static void _admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type); +static void _process_each_resv(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter*iter, gpointer userdata); + /* * _parse_flags is used to parse the Flags= option. It handles * daily, weekly, and maint, optionally preceded by + or -, @@ -904,7 +908,7 @@ extern void admin_edit_resv(GtkCellRendererText *cell, if(got_edit_signal) { temp = got_edit_signal; got_edit_signal = NULL; - admin_resv(GTK_TREE_MODEL(treestore), &iter, temp); + _admin_resv(GTK_TREE_MODEL(treestore), &iter, temp); xfree(temp); goto no_input; } @@ -1057,7 +1061,9 @@ display_it: if(!display_widget) { tree_view = create_treeview(local_display_data, &grid_button_list); - + gtk_tree_selection_set_mode( + gtk_tree_view_get_selection(tree_view), + GTK_SELECTION_MULTIPLE); display_widget = gtk_widget_ref(GTK_WIDGET(tree_view)); gtk_table_attach_defaults(table, GTK_WIDGET(tree_view), @@ -1145,6 +1151,9 @@ display_it: if(spec_info->type != INFO_PAGE && !spec_info->display_widget) { tree_view = create_treeview(local_display_data, &popup_win->grid_button_list); + gtk_tree_selection_set_mode( + gtk_tree_view_get_selection(tree_view), + GTK_SELECTION_MULTIPLE); spec_info->display_widget = gtk_widget_ref(GTK_WIDGET(tree_view)); gtk_table_attach_defaults(popup_win->table, @@ -1371,7 +1380,37 @@ extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id) } } -extern void admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type) +static void _process_each_resv(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter*iter, gpointer userdata) +{ + char *type = userdata; + if (_DEBUG) + g_print("process_each_resv: global_multi_error = %d\n", + global_multi_error); + + if (!global_multi_error) { + _admin_resv(model, iter, type); + } +} + +extern void select_admin_resv(GtkTreeModel *model, GtkTreeIter *iter, + display_data_t *display_data, + GtkTreeView *treeview) +{ + if (treeview) { + if (display_data->extra & EXTRA_NODES) { + select_admin_nodes(model, iter, display_data, + SORTID_NODELIST, treeview); + return; + } + global_multi_error = FALSE; + gtk_tree_selection_selected_foreach( + gtk_tree_view_get_selection(treeview), + _process_each_resv, display_data->name); + } +} + +static void _admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type) { resv_desc_msg_t *resv_msg = xmalloc(sizeof(resv_desc_msg_t)); reservation_name_msg_t resv_name_msg; @@ -1483,7 +1522,7 @@ end_it: if(got_edit_signal) { type = got_edit_signal; got_edit_signal = NULL; - admin_resv(model, iter, type); + _admin_resv(model, iter, type); xfree(type); } return; diff --git a/src/sview/sview.h b/src/sview/sview.h index b252e152ee8..fcaf0553995 100644 --- a/src/sview/sview.h +++ b/src/sview/sview.h @@ -515,7 +515,9 @@ extern void get_info_resv(GtkTable *table, display_data_t *display_data); extern void specific_info_resv(popup_info_t *popup_win); extern void set_menus_resv(void *arg, void *arg2, GtkTreePath *path, int type); extern void popup_all_resv(GtkTreeModel *model, GtkTreeIter *iter, int id); -extern void admin_resv(GtkTreeModel *model, GtkTreeIter *iter, char *type); +extern void select_admin_resv(GtkTreeModel *model, GtkTreeIter *iter, + display_data_t *display_data, + GtkTreeView *treeview); extern void cluster_change_resv(); -- GitLab