From b87dfb341aac4187e5361133ca330d4bf5846fe2 Mon Sep 17 00:00:00 2001
From: Danny Auble <da@llnl.gov>
Date: Fri, 15 Oct 2010 00:39:30 +0000
Subject: [PATCH] fix for bad logic once again

---
 src/sview/common.c   | 49 +++++++++++++-----------
 src/sview/defaults.c | 88 ++++++++++++++++++++++----------------------
 src/sview/sview.c    |  8 ++--
 src/sview/sview.h    | 14 +++----
 4 files changed, 82 insertions(+), 77 deletions(-)

diff --git a/src/sview/common.c b/src/sview/common.c
index e94c8767a8e..0c01b0970dc 100644
--- a/src/sview/common.c
+++ b/src/sview/common.c
@@ -482,11 +482,20 @@ static void _cell_data_func(GtkTreeViewColumn *col,
 static void _add_col_to_treeview(GtkTreeView *tree_view,
 				 display_data_t *display_data, int color_column)
 {
-	GtkTreeViewColumn *col = gtk_tree_view_column_new();
-	GtkListStore *model = (display_data->create_model)(display_data->id);
+	GtkTreeViewColumn *col;
+	GtkListStore *model;
 	GtkCellRenderer *renderer = NULL;
 
-	if(model && display_data->extra != EDIT_NONE) {
+	/* Since some systems have different default columns (some
+	 * which aren't displayed on all types of clusters only add a
+	 * column if there is a name for it. */
+	if (!display_data->name && (display_data->extra != EDIT_COLOR))
+		return;
+
+	col = gtk_tree_view_column_new();
+	model = (display_data->create_model)(display_data->id);
+
+	if (model && display_data->extra != EDIT_NONE) {
 		renderer = gtk_cell_renderer_combo_new();
 		g_object_set(renderer,
 			     "model", model,
@@ -494,12 +503,12 @@ static void _add_col_to_treeview(GtkTreeView *tree_view,
 			     "has-entry", 1,
 			     "editable", TRUE,
 			     NULL);
-	} else if(display_data->extra == EDIT_TEXTBOX) {
+	} else if (display_data->extra == EDIT_TEXTBOX) {
 		renderer = gtk_cell_renderer_text_new();
 		g_object_set(renderer,
 			     "editable", TRUE,
 			     NULL);
-	} else if(display_data->extra == EDIT_COLOR) {
+	} else if (display_data->extra == EDIT_COLOR) {
 		GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false,
 						   8, 10, 20);
 		renderer = gtk_cell_renderer_pixbuf_new();
@@ -513,7 +522,7 @@ static void _add_col_to_treeview(GtkTreeView *tree_view,
 	g_object_set_data(G_OBJECT(renderer), "column",
 			  GINT_TO_POINTER(display_data->id));
 
-	if(display_data->extra == EDIT_COLOR) {
+	if (display_data->extra == EDIT_COLOR) {
 		gtk_tree_view_column_set_cell_data_func(
 			col, renderer, _cell_data_func,
 			NULL, NULL);
@@ -535,13 +544,7 @@ static void _add_col_to_treeview(GtkTreeView *tree_view,
 		gtk_tree_view_column_set_title(col, display_data->name);
 	}
 
-	/*consult llnl
-	 * dpr added this "if" xtra line ..
-	 * without this, you get 2 extra columns
-	 * on the jobs tab ??
-	 * for what reason ?? */
-	if (display_data->name || (display_data->extra == EDIT_COLOR))
-		gtk_tree_view_append_column(tree_view, col);
+	gtk_tree_view_append_column(tree_view, col);
 }
 
 static void _toggle_state_changed(GtkCheckMenuItem *menuitem,
@@ -725,8 +728,7 @@ extern int build_nodes_bitmap(char *node_names, bitstr_t **bitmap)
 	while ( (this_node_name = hostlist_shift(host_list)) ) {
 		node_inx = _find_node_inx(this_node_name); //topo
 		if (node_inx != -1) {
-			bit_set(my_bitmap,
-				(bitoff_t) (node_inx));
+			bit_set(my_bitmap, (bitoff_t) (node_inx));
 		} else {
 			continue;
 		}
@@ -926,16 +928,19 @@ extern void make_fields_menu(popup_info_t *popup_win, GtkMenu *menu,
 extern void set_page_opts(int tab, display_data_t *display_data,
 			  int count, char* initial_opts)
 {
-	page_options_t *page_options;
+	page_opts_t *page_opts;
 	int j= 0;
 
 	xassert(tab < PAGE_CNT);
 
-	page_options = &working_sview_config.page_options[tab];
-	if (!page_options->col_list)
-		page_options->col_list = xstrdup(initial_opts);
-	page_options->display_data = display_data;
-	page_options->count = count;
+	page_opts = &working_sview_config.page_opts[tab];
+	if (!page_opts->col_list) {
+		page_opts->def_col_list = 1;
+		page_opts->col_list = xstrdup(initial_opts);
+	}
+
+	page_opts->display_data = display_data;
+	page_opts->count = count;
 	for (j=0; j<count; j++) {
 		if (display_data->id == -1)
 			break;
@@ -943,7 +948,7 @@ extern void set_page_opts(int tab, display_data_t *display_data,
 			display_data++;
 			continue;
 		}
-		if (strstr(page_options->col_list, display_data->name)) {
+		if (strstr(page_opts->col_list, display_data->name)) {
 			display_data->show = TRUE;
 		}
 		display_data++;
diff --git a/src/sview/defaults.c b/src/sview/defaults.c
index 9ef9106540f..adae92e60f0 100644
--- a/src/sview/defaults.c
+++ b/src/sview/defaults.c
@@ -101,7 +101,6 @@ static display_data_t display_data_defaults[] = {
 
 extern display_data_t main_display_data[];
 
-
 static void _set_active_combo_defaults(GtkComboBox *combo,
 				       sview_config_t *sview_config,
 				       int type)
@@ -503,8 +502,8 @@ static void _init_sview_conf()
 	if(getenv("SVIEW_GRID_SPEEDUP"))
 		default_sview_config.grid_speedup = 1;
 	for(i=0; i<PAGE_CNT; i++) {
-		memset(&default_sview_config.page_options[i],
-		       0, sizeof(page_options_t));
+		memset(&default_sview_config.page_opts[i],
+		       0, sizeof(page_opts_t));
 
 		if(!main_display_data[i].show)
 			default_sview_config.page_visible[i] = FALSE;
@@ -520,27 +519,27 @@ extern int load_defaults()
 		{"AdminMode", S_P_BOOLEAN},
 		{"DefaultPage", S_P_STRING},
 		{"ExcludedPartitions", S_P_STRING},	/* Vestigial */
+		{"FullInfoPopupWidth", S_P_UINT32},
+		{"FullInfoPopupHeight", S_P_UINT32},
 		{"GridHorizontal", S_P_UINT32},
 		{"GridSpeedUp", S_P_BOOLEAN},
 		{"GridTopo", S_P_BOOLEAN},
 		{"GridVertical", S_P_UINT32},
 		{"GridXWidth", S_P_UINT32},
+		{"MainHeight", S_P_UINT32},
+		{"MainWidth", S_P_UINT32},
+		{"PageOptsBlock", S_P_STRING},
+		{"PageOptsJob", S_P_STRING},
+		{"PageOptsNode", S_P_STRING},
+		{"PageOptsPartition", S_P_STRING},
+		{"PageOptsReservation", S_P_STRING},
 		{"RefreshDelay", S_P_UINT16},
 		{"RuledTables", S_P_BOOLEAN},
 		{"ShowGrid", S_P_BOOLEAN},
 		{"ShowHidden", S_P_BOOLEAN},
-		{"SaveTabsSettings", S_P_BOOLEAN},
+		{"SavePageSettings", S_P_BOOLEAN},
 		{"TabPosition", S_P_STRING},
 		{"VisiblePages", S_P_STRING},
-		{"MainWidth", S_P_UINT32},
-		{"MainHeight", S_P_UINT32},
-		{"FullInfoPopupWidth", S_P_UINT32},
-		{"FullInfoPopupHeight", S_P_UINT32},
-		{"pageoptsJob", S_P_STRING},
-		{"pageoptsPartition", S_P_STRING},
-		{"pageoptsReservation", S_P_STRING},
-		{"pageoptsBlock", S_P_STRING},
-		{"pageoptsNode", S_P_STRING},
 		{NULL}
 	};
 	char *pathname = NULL;
@@ -607,7 +606,7 @@ extern int load_defaults()
 	s_p_get_boolean(&default_sview_config.show_hidden,
 			"ShowHidden", hashtbl);
 	s_p_get_boolean(&default_sview_config.save_page_settings,
-			"SaveTabsSettings", hashtbl);
+			"SavePageSettings", hashtbl);
 	s_p_get_uint32(&default_sview_config.main_width,
 		       "MainWidth", hashtbl);
 	s_p_get_uint32(&default_sview_config.main_height,
@@ -656,19 +655,18 @@ extern int load_defaults()
 	for (i=0; i<PAGE_CNT; i++) {
 		char *col_list = NULL;
 		char *page_name = page_to_str(i);
-		page_options_t *page_options =
-			&default_sview_config.page_options[i];
+		page_opts_t *page_opts = &default_sview_config.page_opts[i];
+
 		if (!page_name)
 			continue;
-		memset(page_options, 0, sizeof(page_options_t));
-		tmp_str = xstrdup_printf("pageopts%s", page_name);
+		memset(page_opts, 0, sizeof(page_opts_t));
+		page_opts->page_name = page_name;
+		tmp_str = xstrdup_printf("PageOpts%s", page_name);
 		s_p_get_string(&col_list, tmp_str, hashtbl);
 		xfree(tmp_str);
 		if (col_list) {
-			page_options->page_name = page_name;
-			page_options->col_list = col_list;
-			page_options->def_col_list = xstrdup(col_list);
-			replus(page_options->col_list);
+			page_opts->col_list = col_list;
+			replus(page_opts->col_list);
 		}
 	}
 
@@ -676,9 +674,11 @@ extern int load_defaults()
 	s_p_hashtbl_destroy(hashtbl);
 
 end_it:
-	/* copy it all into the working struct */
-	memcpy(&working_sview_config,
-	       &default_sview_config, sizeof(sview_config_t));
+	/* copy it all into the working struct (memory will work out
+	 * in the end the col_list and def_col_list don't change) */
+	memcpy(&working_sview_config, &default_sview_config,
+	       sizeof(sview_config_t));
+
 	xfree(pathname);
 	return SLURM_SUCCESS;
 }
@@ -811,7 +811,7 @@ extern int save_defaults(bool final_save)
 	xfree(tmp_str);
 	if(rc != SLURM_SUCCESS)
 		goto end_it;
-	tmp_str = xstrdup_printf("SaveTabsSettings=%s\n",
+	tmp_str = xstrdup_printf("SavePageSettings=%s\n",
 				 default_sview_config.save_page_settings ?
 				 "YES" : "NO");
 	rc = _write_to_file(fd, tmp_str);
@@ -837,18 +837,16 @@ extern int save_defaults(bool final_save)
 
 	/* save all current page options */
 	for (i=0; i<PAGE_CNT; i++) {
-		page_options_t *page_options =
-			&working_sview_config.page_options[i];
-		if (!page_options->page_name)
+		page_opts_t *page_opts =
+			&working_sview_config.page_opts[i];
+
+		if (!page_opts->page_name)
 			continue;
 
-		tmp_str = xstrdup_printf("pageopts%s=",
-					 page_options->page_name);
 		if (working_sview_config.save_page_settings) {
-			tmp_str2 = xstrdup(",");
-			if (page_options->display_data) {
-				display_data = page_options->display_data;
-				for (j=0; j<page_options->count; j++) {
+			if (page_opts->display_data) {
+				display_data = page_opts->display_data;
+				for (j=0; j<page_opts->count; j++) {
 					if (display_data->id == -1)
 						break;
 					if (display_data->name
@@ -860,22 +858,24 @@ extern int save_defaults(bool final_save)
 				replspace(tmp_str2);
 			} //have a display struct ^^
 			//save new option set ^^
-		} else {
+		} else if (!page_opts->def_col_list && page_opts->col_list) {
 			//user requested no save of page options
-			tmp_str2 = xstrdup(page_options->def_col_list);
+			g_print("using default\n");
+			tmp_str2 = xstrdup(page_opts->col_list);
 		}
 
-		xfree(page_options->col_list);
-		xfree(page_options->def_col_list);
+		xfree(page_opts->col_list);
 
 		if (tmp_str2) {
-			xstrfmtcat(tmp_str, "%s\n", tmp_str2);
+			tmp_str = xstrdup_printf("PageOpts%s=%s\n",
+						 page_opts->page_name,
+						 tmp_str2);
 			xfree(tmp_str2);
 			rc = _write_to_file(fd, tmp_str);
+			xfree(tmp_str);
 			if (rc != SLURM_SUCCESS)
 				goto end_it;
 		}
-		xfree(tmp_str);
 	}//spin the pages
 
 end_it:
@@ -1118,6 +1118,7 @@ extern int configure_defaults()
 			       sizeof(sview_config_t));
 			memcpy(&working_sview_config, &tmp_config,
 			       sizeof(sview_config_t));
+
 			/* set the current display to the default */
 			gtk_toggle_action_set_active(
 				default_sview_config.action_admin,
@@ -1133,7 +1134,7 @@ extern int configure_defaults()
 				working_sview_config.show_hidden);
 			apply_hidden_change = TRUE;
 			gtk_toggle_action_set_active(
-				default_sview_config.action_stabssets,
+				default_sview_config.action_page_opts,
 				working_sview_config.save_page_settings);
 			sview_radio_action_set_current_value(
 				default_sview_config.action_tab,
@@ -1147,8 +1148,7 @@ extern int configure_defaults()
 				   || (i == TAB_PAGE))
 					continue;
 
-				toggle_tab_visiblity(NULL,
-						     main_display_data+i);
+				toggle_tab_visiblity(NULL, main_display_data+i);
 			}
 			get_system_stats(main_grid_table);
 			/******************************************/
diff --git a/src/sview/sview.c b/src/sview/sview.c
index 3b3c3777c2c..88ef17e0e88 100644
--- a/src/sview/sview.c
+++ b/src/sview/sview.c
@@ -625,7 +625,7 @@ static char *_get_ui_description()
 		"    <menu action='options'>"
 		"      <menuitem action='grid'/>"
 		"      <menuitem action='hidden'/>"
-		"      <menuitem action='stabssets'/>"
+		"      <menuitem action='page_opts'/>"
 #ifdef WANT_TOPO_ON_MAIN_OPTIONS
 		"      <menuitem action='topoorder'/>"
 #endif
@@ -780,7 +780,7 @@ 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},
-		{"stabssets", GTK_STOCK_SELECT_COLOR, "Save Page _Settings",
+		{"page_opts", GTK_STOCK_SELECT_COLOR, "Save Page _Settings",
 		 "<control>w", "Save Page _Settings",
 		 G_CALLBACK(_set_stabbsets),
 		 working_sview_config.save_page_settings},
@@ -878,9 +878,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_stabssets =
+	default_sview_config.action_page_opts =
 		(GtkToggleAction *)gtk_action_group_get_action(
-			menu_action_group, "stabssets");
+			menu_action_group, "page_opts");
 //	default_sview_config.action_gridtopo =
 //		(GtkToggleAction *)gtk_action_group_get_action(
 //			menu_action_group, "topoorder");
diff --git a/src/sview/sview.h b/src/sview/sview.h
index f7bf29ee8aa..a68dbf228d4 100644
--- a/src/sview/sview.h
+++ b/src/sview/sview.h
@@ -142,7 +142,7 @@ enum { EDIT_NONE,
        EDIT_COLOR
 };
 
-//typedef struct pages_options page_options_t;
+//typedef struct pages_options page_opts_t;
 typedef struct display_data display_data_t;
 typedef struct specific_info specific_info_t;
 typedef struct popup_info popup_info_t;
@@ -175,19 +175,19 @@ typedef struct  {
 } switch_record_bitmaps_t;
 
 typedef struct {
-	char *page_name;
 	char *col_list;
-	char *def_col_list;
-	display_data_t *display_data;
 	int count;
-} page_options_t;
+	bool def_col_list;
+	display_data_t *display_data;
+	char *page_name;
+} page_opts_t;
 
 /* Input parameters */
 typedef struct {
 	GtkToggleAction *action_admin;
 	GtkToggleAction *action_grid;
 	GtkToggleAction *action_hidden;
-	GtkToggleAction *action_stabssets;
+	GtkToggleAction *action_page_opts;
 	GtkToggleAction *action_gridtopo;
 	GtkToggleAction *action_ruled;
 	GtkRadioAction *action_tab;
@@ -203,7 +203,7 @@ typedef struct {
 	uint32_t main_width;
 	uint32_t main_height;
 	GtkWidget *page_check_widget[PAGE_CNT];
-	page_options_t page_options[PAGE_CNT];
+	page_opts_t page_opts[PAGE_CNT];
 	bool page_visible[PAGE_CNT];
 	uint16_t refresh_delay;
 	bool ruled_treeview;
-- 
GitLab