From e806b5a2d4926c5d8095ca4737d4c5745d9a2b26 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Thu, 11 Nov 2010 17:01:27 +0000 Subject: [PATCH] Enable multiple sview select of BG blocks --- src/sview/block_info.c | 43 ++++++++++++++++++++++++++++++++++++++++-- src/sview/common.c | 7 +++---- src/sview/sview.h | 4 +++- 3 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/sview/block_info.c b/src/sview/block_info.c index bd0909c255b..f9c2f51c3d6 100644 --- a/src/sview/block_info.c +++ b/src/sview/block_info.c @@ -169,10 +169,13 @@ static display_data_t options_data_block[] = { static display_data_t *local_display_data = NULL; -static int _in_slurm_partition(int *part_inx, int *block_inx); +static void _admin_block(GtkTreeModel *model, GtkTreeIter *iter, char *type); static void _append_block_record(sview_block_info_t *block_ptr, GtkTreeStore *treestore, GtkTreeIter *iter, int line); +static int _in_slurm_partition(int *part_inx, int *block_inx); +static void _process_each_block(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter*iter, gpointer userdata); static void _block_list_del(void *object) { @@ -1048,6 +1051,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), @@ -1161,6 +1167,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, @@ -1437,7 +1446,37 @@ extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id) } } -extern void admin_block(GtkTreeModel *model, GtkTreeIter *iter, char *type) +static void _process_each_block(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter*iter, gpointer userdata) +{ + char *type = userdata; + if (_DEBUG) + g_print("process_each_block: global_multi_error = %d\n", + global_multi_error); + + if (!global_multi_error) { + _admin_block(model, iter, type); + } +} + +extern void select_admin_block(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_block, display_data->name); + } +} + +static void _admin_block(GtkTreeModel *model, GtkTreeIter *iter, char *type) { char *blockid = NULL; GtkWidget *popup = gtk_dialog_new_with_buttons( diff --git a/src/sview/common.c b/src/sview/common.c index b3c12913601..3dc75e8486b 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -590,8 +590,7 @@ static void _selected_page(GtkMenuItem *menuitem, display_data_t *display_data) each.pfunc = &popup_all_node; break; case BLOCK_PAGE: - popup_all_block(treedata->model, &treedata->iter, - display_data->id); + each.pfunc = &popup_all_block; break; case RESV_PAGE: popup_all_resv(treedata->model, &treedata->iter, @@ -610,8 +609,8 @@ static void _selected_page(GtkMenuItem *menuitem, display_data_t *display_data) treedata->treeview); break; case BLOCK_PAGE: - admin_block(treedata->model, &treedata->iter, - display_data->name); + select_admin_block(treedata->model, &treedata->iter, + display_data, treedata->treeview); break; case RESV_PAGE: admin_resv(treedata->model, &treedata->iter, diff --git a/src/sview/sview.h b/src/sview/sview.h index e76d84f2200..b252e152ee8 100644 --- a/src/sview/sview.h +++ b/src/sview/sview.h @@ -452,7 +452,9 @@ extern void get_info_block(GtkTable *table, display_data_t *display_data); extern void specific_info_block(popup_info_t *popup_win); extern void set_menus_block(void *arg, void *arg2, GtkTreePath *path, int type); extern void popup_all_block(GtkTreeModel *model, GtkTreeIter *iter, int id); -extern void admin_block(GtkTreeModel *model, GtkTreeIter *iter, char *type); +extern void select_admin_block(GtkTreeModel *model, GtkTreeIter *iter, + display_data_t *display_data, + GtkTreeView *treeview); extern void cluster_change_block(); // job_info.c -- GitLab