diff --git a/src/sview/common.c b/src/sview/common.c index 4ba2b1444e6e6f29596f7721e2d161db4c355bef..f5f2b0d0656bf6270edbc862459d67379cf98ca9 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -736,6 +736,8 @@ extern GtkTreeView *create_treeview(display_data_t *local, List *button_list) signal_params->display_data = local; signal_params->button_list = button_list; + if(working_sview_config.ruled_treeview) + gtk_tree_view_set_rules_hint (tree_view, true); g_signal_connect(G_OBJECT(tree_view), "button-press-event", G_CALLBACK(row_clicked), @@ -758,6 +760,9 @@ extern GtkTreeView *create_treeview_2cols_attach_to_table(GtkTable *table) GtkTreeViewColumn *col = gtk_tree_view_column_new(); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); + if(working_sview_config.ruled_treeview) + gtk_tree_view_set_rules_hint (tree_view, true); + gtk_table_attach_defaults(table, GTK_WIDGET(tree_view), 0, 1, 0, 1); diff --git a/src/sview/defaults.c b/src/sview/defaults.c index e5b23c79df975783fccb4e8483897eabf38c5002..352c494e14521a18a1616c5d3fc091770a289fbd 100644 --- a/src/sview/defaults.c +++ b/src/sview/defaults.c @@ -53,6 +53,7 @@ enum { SORTID_GRID_X_WIDTH, SORTID_PAGE_VISIBLE, SORTID_REFRESH_DELAY, + SORTID_RULED_TV, SORTID_SHOW_GRID, SORTID_SHOW_HIDDEN, SORTID_TAB_POS, @@ -80,6 +81,8 @@ static display_data_t display_data_defaults[] = { TRUE, EDIT_ARRAY, NULL, create_model_defaults, NULL}, {G_TYPE_STRING, SORTID_REFRESH_DELAY, "Refresh Delay in Secs", TRUE, EDIT_TEXTBOX, NULL, create_model_defaults, NULL}, + {G_TYPE_STRING, SORTID_RULED_TV, "Ruled Tables", + TRUE, EDIT_MODEL, NULL, create_model_defaults, NULL}, {G_TYPE_STRING, SORTID_SHOW_GRID, "Show Grid", TRUE, EDIT_MODEL, NULL, create_model_defaults, NULL}, {G_TYPE_STRING, SORTID_SHOW_HIDDEN, "Show Hidden", @@ -102,6 +105,9 @@ static void _set_active_combo_defaults(GtkComboBox *combo, case SORTID_ADMIN: action = sview_config->admin_mode; break; + case SORTID_RULED_TV: + action = sview_config->ruled_treeview; + break; case SORTID_SHOW_GRID: action = sview_config->show_grid; break; @@ -189,6 +195,13 @@ static const char *_set_sview_config(sview_config_t *sview_config, goto return_error; sview_config->refresh_delay = temp_int; break; + case SORTID_RULED_TV: + type = "Ruled Tables"; + if (!strcasecmp(new_text, "yes")) + sview_config->ruled_treeview = 1; + else + sview_config->ruled_treeview = 0; + break; case SORTID_SHOW_GRID: type = "Show Grid"; if (!strcasecmp(new_text, "yes")) @@ -453,6 +466,7 @@ static void _init_sview_conf() default_sview_config.show_hidden = 0; default_sview_config.admin_mode = FALSE; default_sview_config.grid_speedup = 0; + default_sview_config.ruled_treeview = FALSE; default_sview_config.show_grid = TRUE; default_sview_config.default_page = JOB_PAGE; default_sview_config.tab_pos = GTK_POS_TOP; @@ -478,6 +492,7 @@ extern int load_defaults() {"GridVertical", S_P_UINT32}, {"GridXWidth", S_P_UINT32}, {"RefreshDelay", S_P_UINT16}, + {"RuledTables", S_P_BOOLEAN}, {"ShowGrid", S_P_BOOLEAN}, {"ShowHidden", S_P_BOOLEAN}, {"TabPosition", S_P_STRING}, @@ -537,6 +552,8 @@ extern int load_defaults() "GridXWidth", hashtbl); s_p_get_uint16(&default_sview_config.refresh_delay, "RefreshDelay", hashtbl); + s_p_get_boolean(&default_sview_config.ruled_treeview, + "RuledTables", hashtbl); s_p_get_boolean(&default_sview_config.show_grid, "ShowGrid", hashtbl); s_p_get_boolean(&default_sview_config.show_hidden, @@ -650,6 +667,13 @@ extern int save_defaults() default_sview_config.refresh_delay); rc = _write_to_file(fd, tmp_str); xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("RuledTables=%s\n", + default_sview_config.ruled_treeview ? + "YES" : "NO"); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); if(rc != SLURM_SUCCESS) goto end_it; tmp_str = xstrdup_printf("ShowGrid=%s\n", @@ -708,6 +732,7 @@ extern GtkListStore *create_model_defaults(int type) switch(type) { case SORTID_ADMIN: + case SORTID_RULED_TV: case SORTID_SHOW_GRID: case SORTID_SHOW_HIDDEN: model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); @@ -853,6 +878,16 @@ extern int configure_defaults() tmp_char_ptr = g_strdup_printf( "No change detected."); else { + if(tmp_config.ruled_treeview + != working_sview_config.ruled_treeview) { + /* get rid of each existing table */ + cluster_change_block(); + cluster_change_resv(); + cluster_change_part(); + cluster_change_job(); + cluster_change_node(); + } + memcpy(&default_sview_config, &tmp_config, sizeof(sview_config_t)); memcpy(&working_sview_config, &tmp_config, @@ -861,6 +896,9 @@ extern int configure_defaults() gtk_toggle_action_set_active( default_sview_config.action_admin, working_sview_config.admin_mode); + gtk_toggle_action_set_active( + default_sview_config.action_ruled, + working_sview_config.ruled_treeview); gtk_toggle_action_set_active( default_sview_config.action_grid, working_sview_config.show_grid); @@ -870,9 +908,7 @@ extern int configure_defaults() sview_radio_action_set_current_value( default_sview_config.action_tab, working_sview_config.tab_pos); - gtk_notebook_set_current_page( - GTK_NOTEBOOK(main_notebook), - working_sview_config.default_page); + for(i=0; i<PAGE_CNT; i++) { if(main_display_data[i].id == -1) break; diff --git a/src/sview/sview.c b/src/sview/sview.c index ecb28d04e4dc104c2d6edfcda6efc1763d47a349..a31d50b3f34521dbb12d59a287c99829e1eb0623 100644 --- a/src/sview/sview.c +++ b/src/sview/sview.c @@ -350,6 +350,32 @@ static void _set_hidden(GtkToggleAction *action) return; } +static void _set_ruled(GtkToggleAction *action) +{ + char *tmp; + if(action) + working_sview_config.ruled_treeview + = gtk_toggle_action_get_active(action); + if(!working_sview_config.ruled_treeview) + tmp = g_strdup_printf( + "Tables not ruled"); + else + tmp = g_strdup_printf( + "Tables ruled"); + + /* get rid of each existing table */ + cluster_change_block(); + cluster_change_resv(); + cluster_change_part(); + cluster_change_job(); + cluster_change_node(); + + refresh_main(NULL, NULL); + display_edit_note(tmp); + g_free(tmp); + return; +} + static void _reconfigure(GtkToggleAction *action) { char *temp = NULL; @@ -503,7 +529,8 @@ static char *_get_ui_description() " </menu>" " <menu action='options'>" " <menuitem action='grid'/>" - " <menuitem action='hidden'/>"); + " <menuitem action='hidden'/>" + " <menuitem action='ruled'/>"); if(!(cluster_flags & CLUSTER_FLAG_BG)) xstrcat(ui_description, " <menuitem action='grid_specs'/>"); @@ -654,6 +681,9 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook) {"hidden", GTK_STOCK_SELECT_COLOR, "Show _Hidden", "<control>h", "Display Hidden Partitions/Jobs", G_CALLBACK(_set_hidden), working_sview_config.show_hidden}, + {"ruled", GTK_STOCK_SELECT_COLOR, "R_uled Tables", + "<control>u", "Have ruled tables or not", + G_CALLBACK(_set_ruled), working_sview_config.ruled_treeview}, {"admin", GTK_STOCK_PREFERENCES, "_Admin Mode", "<control>a", "Allows user to change or update information", @@ -739,6 +769,9 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook) default_sview_config.action_hidden = (GtkToggleAction *)gtk_action_group_get_action( menu_action_group, "hidden"); + default_sview_config.action_ruled = + (GtkToggleAction *)gtk_action_group_get_action( + menu_action_group, "ruled"); /* Pick the first one of the Radio, it is how GTK references the group in the future. */ diff --git a/src/sview/sview.h b/src/sview/sview.h index 29669c8328605c92bb98bf0b21f55228102142da..be5ec09f4247df1563f66fe1051a44cec2dddc74 100644 --- a/src/sview/sview.h +++ b/src/sview/sview.h @@ -164,9 +164,11 @@ typedef struct { uint16_t refresh_delay; bool show_grid; bool show_hidden; + bool ruled_treeview; GtkToggleAction *action_admin; GtkToggleAction *action_grid; GtkToggleAction *action_hidden; + GtkToggleAction *action_ruled; GtkRadioAction *action_tab; uint16_t tab_pos; } sview_config_t;