From 976caaf06b6021bb5bedd9929f0ad082cb3385d9 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@llnl.gov> Date: Tue, 20 Apr 2010 23:22:10 +0000 Subject: [PATCH] ok, this added the rc support to slurm. There is no way to set it up automatically right now, but a little popup will be added next time. --- src/sview/Makefile.am | 4 +- src/sview/Makefile.in | 26 +++- src/sview/common.c | 56 ++++++++ src/sview/defaults.c | 307 ++++++++++++++++++++++++++++++++++++++++++ src/sview/sview.c | 62 ++++----- src/sview/sview.h | 30 +++-- 6 files changed, 432 insertions(+), 53 deletions(-) create mode 100644 src/sview/defaults.c diff --git a/src/sview/Makefile.am b/src/sview/Makefile.am index 910409ac3fb..515a152f25e 100644 --- a/src/sview/Makefile.am +++ b/src/sview/Makefile.am @@ -17,7 +17,7 @@ noinst_HEADERS = sview.h sview_SOURCES = sview.c popups.c grid.c part_info.c job_info.c \ block_info.c node_info.c resv_info.c \ submit_info.c admin_info.c common.c \ - config_info.c + config_info.c defaults.c force: $(sview_LDADD) : force @@ -30,6 +30,6 @@ else EXTRA_sview_SOURCES = sview.h sview.c popups.c grid.c part_info.c job_info.c \ block_info.c node_info.c resv_info.c \ - submit_info.c admin_info.c common.c + submit_info.c admin_info.c common.c config_info.c defaults.c endif diff --git a/src/sview/Makefile.in b/src/sview/Makefile.in index 2938e1bb5b3..1cbe20d7435 100644 --- a/src/sview/Makefile.in +++ b/src/sview/Makefile.in @@ -89,7 +89,7 @@ am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__sview_SOURCES_DIST = sview.c popups.c grid.c part_info.c \ job_info.c block_info.c node_info.c resv_info.c submit_info.c \ - admin_info.c common.c config_info.c + admin_info.c common.c config_info.c defaults.c @HAVE_GTK_TRUE@am_sview_OBJECTS = sview-sview.$(OBJEXT) \ @HAVE_GTK_TRUE@ sview-popups.$(OBJEXT) sview-grid.$(OBJEXT) \ @HAVE_GTK_TRUE@ sview-part_info.$(OBJEXT) \ @@ -100,10 +100,11 @@ am__sview_SOURCES_DIST = sview.c popups.c grid.c part_info.c \ @HAVE_GTK_TRUE@ sview-submit_info.$(OBJEXT) \ @HAVE_GTK_TRUE@ sview-admin_info.$(OBJEXT) \ @HAVE_GTK_TRUE@ sview-common.$(OBJEXT) \ -@HAVE_GTK_TRUE@ sview-config_info.$(OBJEXT) +@HAVE_GTK_TRUE@ sview-config_info.$(OBJEXT) \ +@HAVE_GTK_TRUE@ sview-defaults.$(OBJEXT) am__EXTRA_sview_SOURCES_DIST = sview.h sview.c popups.c grid.c \ part_info.c job_info.c block_info.c node_info.c resv_info.c \ - submit_info.c admin_info.c common.c + submit_info.c admin_info.c common.c config_info.c defaults.c sview_OBJECTS = $(am_sview_OBJECTS) @HAVE_GTK_TRUE@sview_DEPENDENCIES = $(top_builddir)/src/plugins/select/bluegene/block_allocator/libbluegene_block_allocator.la \ @HAVE_GTK_TRUE@ $(top_builddir)/src/db_api/libslurmdb.o @@ -325,13 +326,13 @@ INCLUDES = -I$(top_srcdir) $(BG_INCLUDES) @HAVE_GTK_TRUE@sview_SOURCES = sview.c popups.c grid.c part_info.c job_info.c \ @HAVE_GTK_TRUE@ block_info.c node_info.c resv_info.c \ @HAVE_GTK_TRUE@ submit_info.c admin_info.c common.c \ -@HAVE_GTK_TRUE@ config_info.c +@HAVE_GTK_TRUE@ config_info.c defaults.c @HAVE_GTK_TRUE@sview_LDFLAGS = -export-dynamic $(CMD_LDFLAGS) $(BG_LDFLAGS) $(GTK_LIBS) @HAVE_GTK_TRUE@sview_CFLAGS = $(GTK_CFLAGS) @HAVE_GTK_FALSE@EXTRA_sview_SOURCES = sview.h sview.c popups.c grid.c part_info.c job_info.c \ @HAVE_GTK_FALSE@ block_info.c node_info.c resv_info.c \ -@HAVE_GTK_FALSE@ submit_info.c admin_info.c common.c +@HAVE_GTK_FALSE@ submit_info.c admin_info.c common.c config_info.c defaults.c all: all-am @@ -424,6 +425,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-block_info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-config_info.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-defaults.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-grid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-job_info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sview-node_info.Po@am__quote@ @@ -622,6 +624,20 @@ sview-config_info.obj: config_info.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -c -o sview-config_info.obj `if test -f 'config_info.c'; then $(CYGPATH_W) 'config_info.c'; else $(CYGPATH_W) '$(srcdir)/config_info.c'; fi` +sview-defaults.o: defaults.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -MT sview-defaults.o -MD -MP -MF $(DEPDIR)/sview-defaults.Tpo -c -o sview-defaults.o `test -f 'defaults.c' || echo '$(srcdir)/'`defaults.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sview-defaults.Tpo $(DEPDIR)/sview-defaults.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='defaults.c' object='sview-defaults.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -c -o sview-defaults.o `test -f 'defaults.c' || echo '$(srcdir)/'`defaults.c + +sview-defaults.obj: defaults.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -MT sview-defaults.obj -MD -MP -MF $(DEPDIR)/sview-defaults.Tpo -c -o sview-defaults.obj `if test -f 'defaults.c'; then $(CYGPATH_W) 'defaults.c'; else $(CYGPATH_W) '$(srcdir)/defaults.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sview-defaults.Tpo $(DEPDIR)/sview-defaults.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='defaults.c' object='sview-defaults.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sview_CFLAGS) $(CFLAGS) -c -o sview-defaults.obj `if test -f 'defaults.c'; then $(CYGPATH_W) 'defaults.c'; else $(CYGPATH_W) '$(srcdir)/defaults.c'; fi` + mostlyclean-libtool: -rm -f *.lo diff --git a/src/sview/common.c b/src/sview/common.c index f951e69ac7a..9881703a33d 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -1583,3 +1583,59 @@ extern void sview_widget_modify_bg(GtkWidget *widget, GtkStateType state, /* g_print("%d 3 took %s\n", grid_button->inx, TIME_STR); */ } + +extern char *page_to_str(int page) +{ + switch(page) { + case JOB_PAGE: + return "Job"; + case PART_PAGE: + return "Partition"; + case NODE_PAGE: + return "Node"; + case BLOCK_PAGE: + return "Block"; + case RESV_PAGE: + return "Reservation"; + case SUBMIT_PAGE: + return "Submit"; + case ADMIN_PAGE: + return "Admin"; + case INFO_PAGE: + return "Info"; + default: + return "Unknown"; + } + return "Unknown"; +} + +extern char *tab_pos_to_str(int pos) +{ + switch(pos) { + case GTK_POS_TOP: + return "Top"; + case GTK_POS_BOTTOM: + return "Bottom"; + case GTK_POS_LEFT: + return "Left"; + case GTK_POS_RIGHT: + return "Right"; + default: + return "Unknown"; + } + return "Unknown"; +} + +extern char *visible_to_str() +{ + char *ret = NULL; + int i = 0; + for(i=0; i<PAGE_CNT; i++) + if(sview_config.page_visible[i]) { + if(ret) + xstrcat(ret, ","); + xstrcat(ret, page_to_str(i)); + } + + return ret; +} diff --git a/src/sview/defaults.c b/src/sview/defaults.c new file mode 100644 index 00000000000..581e1e29f26 --- /dev/null +++ b/src/sview/defaults.c @@ -0,0 +1,307 @@ +/****************************************************************************\ + * defaults.c - put default configuration information here + ***************************************************************************** + * Copyright (C) 2004-2007 The Regents of the University of California. + * Copyright (C) 2008 Lawrence Livermore National Security. + * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). + * Written by Danny Auble <da@llnl.gov>, et. al. + * CODE-OCEC-09-009. All rights reserved. + * + * This file is part of SLURM, a resource management program. + * For details, see <https://computing.llnl.gov/linux/slurm/>. + * Please also read the included file: DISCLAIMER. + * + * SLURM is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * In addition, as a special exception, the copyright holders give permission + * to link the code of portions of this program with the OpenSSL library under + * certain conditions as described in each individual source file, and + * distribute linked combinations including the two. You must obey the GNU + * General Public License in all respects for all of the code used other than + * OpenSSL. If you modify file(s) with this exception, you may extend this + * exception to your version of the file(s), but you are not obligated to do + * so. If you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files in + * the program, then also delete it here. + * + * SLURM is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along + * with SLURM; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +\*****************************************************************************/ +#include <fcntl.h> + +#include "sview.h" +#include "src/common/parse_config.h" +#include "src/common/slurm_strcasestr.h" + +extern display_data_t main_display_data[]; + +static int _write_to_file(int fd, char *data) +{ + int pos = 0, nwrite = strlen(data), amount; + int rc = SLURM_SUCCESS; + + while (nwrite > 0) { + amount = write(fd, &data[pos], nwrite); + if ((amount < 0) && (errno != EINTR)) { + error("Error writing file: %m"); + rc = errno; + break; + } + nwrite -= amount; + pos += amount; + } + return rc; +} + +static void _init_sview_conf() +{ + int i; + + sview_config.refresh_delay = 5; + sview_config.grid_x_width = 0; + sview_config.grid_hori = 10; + sview_config.grid_vert = 10; + sview_config.show_hidden = 0; + sview_config.admin_mode = FALSE; + sview_config.grid_speedup = 0; + sview_config.show_grid = TRUE; + sview_config.page_default = JOB_PAGE; + sview_config.tab_pos = GTK_POS_TOP; + + if(getenv("SVIEW_GRID_SPEEDUP")) + sview_config.grid_speedup = 1; + for(i=0; i<PAGE_CNT; i++) { + if(!main_display_data[i].show) + sview_config.page_visible[i] = FALSE; + else + sview_config.page_visible[i] = TRUE; + } +} + +extern int load_defaults() +{ + s_p_hashtbl_t *hashtbl = NULL; + s_p_options_t sview_conf_options[] = { + {"AdminMode", S_P_BOOLEAN}, + {"DefaultPage", S_P_STRING}, + {"GridHorizontal", S_P_UINT32}, + {"GridSpeedUp", S_P_BOOLEAN}, + {"GridVertical", S_P_UINT32}, + {"GridXWidth", S_P_UINT32}, + {"RefreshDelay", S_P_UINT16}, + {"ShowGrid", S_P_BOOLEAN}, + {"ShowHidden", S_P_BOOLEAN}, + {"TabPosition", S_P_STRING}, + {"VisiblePages", S_P_STRING}, + {NULL} + }; + char *pathname = NULL; + char *home = getenv("HOME"); + uint32_t hash_val = NO_VAL; + int rc = SLURM_SUCCESS; + char *tmp_str; + _init_sview_conf(); + + if(!home) + return SLURM_ERROR; + + pathname = xstrdup_printf("%s/.slurm", home); + if ((mkdir(pathname, 0750) < 0) && (errno != EEXIST)) { + error("mkdir(%s): %m", pathname); + rc = SLURM_ERROR; + goto end_it; + } + xstrcat(pathname, "/sviewrc"); + + if(access(pathname, R_OK) != 0) { + rc = SLURM_ERROR; + goto end_it; + } + + hashtbl = s_p_hashtbl_create(sview_conf_options); + + if(s_p_parse_file(hashtbl, &hash_val, pathname) == SLURM_ERROR) + fatal("something wrong with opening/reading conf file"); + + s_p_get_boolean(&sview_config.admin_mode, "AdminMode", hashtbl); + if (s_p_get_string(&tmp_str, "DefaultPage", hashtbl)) { + if (slurm_strcasestr(tmp_str, "job")) + sview_config.page_default = JOB_PAGE; + else if (slurm_strcasestr(tmp_str, "part")) + sview_config.page_default = PART_PAGE; + else if (slurm_strcasestr(tmp_str, "res")) + sview_config.page_default = RESV_PAGE; +#ifdef HAVE_BG + else if (slurm_strcasestr(tmp_str, "block")) + sview_config.page_default = BLOCK_PAGE; +#endif + else if (slurm_strcasestr(tmp_str, "node")) + sview_config.page_default = NODE_PAGE; + xfree(tmp_str); + } + s_p_get_uint32(&sview_config.grid_hori, "GridHorizontal", hashtbl); + s_p_get_boolean(&sview_config.grid_speedup, "GridSpeedup", hashtbl); + s_p_get_uint32(&sview_config.grid_vert, "GridVertical", hashtbl); + s_p_get_uint32(&sview_config.grid_x_width, "GridXWidth", hashtbl); + s_p_get_uint16(&sview_config.refresh_delay, "RefreshDelay", hashtbl); + s_p_get_boolean(&sview_config.show_grid, "ShowGrid", hashtbl); + s_p_get_boolean(&sview_config.show_hidden, "ShowHidden", hashtbl); + if (s_p_get_string(&tmp_str, "TabPosition", hashtbl)) { + if (slurm_strcasestr(tmp_str, "top")) + sview_config.tab_pos = GTK_POS_TOP; + else if (slurm_strcasestr(tmp_str, "bottom")) + sview_config.tab_pos = GTK_POS_BOTTOM; + else if (slurm_strcasestr(tmp_str, "left")) + sview_config.tab_pos = GTK_POS_LEFT; + else if (slurm_strcasestr(tmp_str, "right")) + sview_config.tab_pos = GTK_POS_RIGHT; + xfree(tmp_str); + } + if (s_p_get_string(&tmp_str, "VisiblePages", hashtbl)) { + int i = 0; + for(i=0; i<PAGE_CNT; i++) + sview_config.page_visible[i] = FALSE; + + if (slurm_strcasestr(tmp_str, "job")) + sview_config.page_visible[JOB_PAGE] = 1; + if (slurm_strcasestr(tmp_str, "part")) + sview_config.page_visible[PART_PAGE] = 1; + if (slurm_strcasestr(tmp_str, "res")) + sview_config.page_visible[RESV_PAGE] = 1; +#ifdef HAVE_BG + if (slurm_strcasestr(tmp_str, "block")) + sview_config.page_visible[BLOCK_PAGE] = 1; +#endif + if (slurm_strcasestr(tmp_str, "node")) + sview_config.page_visible[NODE_PAGE] = 1; + xfree(tmp_str); + } + s_p_hashtbl_destroy(hashtbl); + +end_it: + xfree(pathname); + return SLURM_SUCCESS; +} + +extern int save_defaults() +{ + char *reg_file = NULL, *old_file = NULL, *new_file = NULL; + char *home = getenv("HOME"); + int rc = SLURM_SUCCESS; + char *tmp_str = NULL, *tmp_str2 = NULL; + int fd = 0; + + if(!home) + return SLURM_ERROR; + + reg_file = xstrdup_printf("%s/.slurm", home); + if ((mkdir(reg_file, 0750) < 0) && (errno != EEXIST)) { + error("mkdir(%s): %m", reg_file); + rc = SLURM_ERROR; + goto end_it; + } + xstrcat(reg_file, "/sviewrc"); + old_file = xstrdup_printf("%s.old", reg_file); + new_file = xstrdup_printf("%s.new", reg_file); + + fd = creat(new_file, 0600); + if (fd < 0) { + error("Can't save config file %s error %m", reg_file); + rc = errno; + goto end_it; + } + + tmp_str = xstrdup_printf("AdminMode=%s\n", + sview_config.admin_mode ? "YES" : "NO"); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("DefaultPage=%s\n", + page_to_str(sview_config.page_default)); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("GridHorizontal=%u\n", sview_config.grid_hori); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("GridSpeedup=%s\n", + sview_config.grid_speedup ? "YES" : "NO"); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("GridVertical=%u\n", sview_config.grid_vert); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("GridXWidth=%u\n", sview_config.grid_x_width); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("RefreshDelay=%u\n", + 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("ShowGrid=%s\n", + sview_config.show_grid ? "YES" : "NO"); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("ShowHidden=%s\n", + sview_config.show_hidden ? "YES" : "NO"); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str = xstrdup_printf("TabPosition=%s\n", + tab_pos_to_str(sview_config.tab_pos)); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + tmp_str2 = visible_to_str(); + tmp_str = xstrdup_printf("VisiblePages=%s\n", tmp_str2); + xfree(tmp_str2); + rc = _write_to_file(fd, tmp_str); + xfree(tmp_str); + if(rc != SLURM_SUCCESS) + goto end_it; + + fsync(fd); + close(fd); + +end_it: + if (rc) + (void) unlink(new_file); + else { /* file shuffle */ + int ign; /* avoid warning */ + (void) unlink(old_file); + ign = link(reg_file, old_file); + (void) unlink(reg_file); + ign = link(new_file, reg_file); + (void) unlink(new_file); + } + + xfree(old_file); + xfree(new_file); + xfree(reg_file); + return rc; +} diff --git a/src/sview/sview.c b/src/sview/sview.c index 75e4e10cf09..584ee094cc0 100644 --- a/src/sview/sview.c +++ b/src/sview/sview.c @@ -238,8 +238,7 @@ static void _page_switched(GtkNotebook *notebook, return; else if(!grid_init && !started_grid_init) { /* start the thread to make the grid only once */ - if (!g_thread_create(_grid_init_thr, notebook, FALSE, &error)) - { + if (!g_thread_create(_grid_init_thr, notebook, FALSE, &error)) { g_printerr ("Failed to create grid init thread: %s\n", error->message); return; @@ -247,16 +246,12 @@ static void _page_switched(GtkNotebook *notebook, started_grid_init = 1; } - if(page_running != -1) { + if(page_running != -1) page_running = page_num; - } for(i=0; i<PAGE_CNT; i++) { - if(main_display_data[i].id == -1) - break; - else if(!main_display_data[i].show) - continue; - if(main_display_data[i].extra == page_num) + if((main_display_data[i].id == -1) + || (main_display_data[i].extra == page_num)) break; } @@ -426,6 +421,7 @@ static gboolean _delete(GtkWidget *widget, fini = 1; gtk_main_quit(); ba_fini(); + if(popup_list) list_destroy(popup_list); if(grid_button_list) @@ -626,15 +622,15 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook) GtkToggleActionEntry toggle_entries[] = { {"grid", GTK_STOCK_SELECT_COLOR, "Show _Grid", "<control>g", "Visual display of cluster", - G_CALLBACK(_set_grid), TRUE}, + G_CALLBACK(_set_grid), sview_config.show_grid}, {"hidden", GTK_STOCK_SELECT_COLOR, "Show _Hidden", "<control>h", "Display Hidden Partitions/Jobs", - G_CALLBACK(_set_hidden), FALSE}, + G_CALLBACK(_set_hidden), sview_config.show_hidden}, {"admin", GTK_STOCK_PREFERENCES, "_Admin Mode", "<control>a", "Allows user to change or update information", G_CALLBACK(_set_admin_mode), - FALSE} + sview_config.admin_mode} }; /* Make an accelerator group (shortcut keys) */ @@ -643,7 +639,8 @@ static GtkWidget *_get_menubar_menu(GtkWidget *window, GtkWidget *notebook) G_N_ELEMENTS(entries), window); gtk_action_group_add_radio_actions(menu_action_group, radio_entries, G_N_ELEMENTS(radio_entries), - 0, G_CALLBACK(_tab_pos), notebook); + sview_config.tab_pos, + G_CALLBACK(_tab_pos), notebook); gtk_action_group_add_radio_actions(menu_action_group, debug_entries, G_N_ELEMENTS(debug_entries), -1, G_CALLBACK(_set_debug), @@ -728,25 +725,8 @@ int main(int argc, char *argv[]) GtkViewport *view = NULL; int i=0; - sview_config.refresh_delay = 5; - sview_config.grid_x_width = 0; - sview_config.grid_hori = 10; - sview_config.grid_vert = 10; - sview_config.show_hidden = 0; - sview_config.admin_mode = FALSE; - sview_config.grid_speedup = 0; - sview_config.show_grid = TRUE; - sview_config.page_default = PART_PAGE; - sview_config.tab_pos = GTK_POS_TOP; - - if(getenv("SVIEW_GRID_SPEEDUP")) - sview_config.grid_speedup = 1; - for(i=0; i<PAGE_CNT; i++) { - if(!main_display_data[i].show) - sview_config.page_visible[i] = FALSE; - else - sview_config.page_visible[i] = TRUE; - } + load_defaults(); + _init_pages(); g_thread_init(NULL); gdk_threads_init(); @@ -848,11 +828,23 @@ int main(int argc, char *argv[]) else gtk_widget_hide(visible_tab); } - /* Set the default page This has to be done after the + /* Set the default page. This has to be done after the * gtk_widget_show_all since it, for some reason always sets * 0 to be the default page and will just overwrite this. */ - gtk_notebook_set_current_page(GTK_NOTEBOOK(main_notebook), - sview_config.page_default); + /* Also if we already are set at the current page we need to + start up the page thread, so just call the _page_switched + function. If we aren't already there, then set the current + page which will inturn call the _page_switched. If the + pages is already this the signal doesn't happen so handle + it here. + */ + if(gtk_notebook_get_current_page(GTK_NOTEBOOK(main_notebook)) + == sview_config.page_default) + _page_switched(GTK_NOTEBOOK(main_notebook), NULL, + sview_config.page_default, NULL); + else + gtk_notebook_set_current_page(GTK_NOTEBOOK(main_notebook), + sview_config.page_default); /* Finished! */ gtk_main (); diff --git a/src/sview/sview.h b/src/sview/sview.h index 7aff8fe6082..f4eee631337 100644 --- a/src/sview/sview.h +++ b/src/sview/sview.h @@ -98,12 +98,12 @@ enum { JOB_PAGE, PART_PAGE, - NODE_PAGE, - BLOCK_PAGE, RESV_PAGE, + BLOCK_PAGE, + NODE_PAGE, SUBMIT_PAGE, - ADMIN_PAGE, INFO_PAGE, + ADMIN_PAGE, PAGE_CNT }; enum { TAB_CLICKED, @@ -150,16 +150,16 @@ typedef enum { SEARCH_JOB_ID = 1, /* Input parameters */ typedef struct { bool admin_mode; - int grid_hori; - int grid_vert; - int grid_x_width; - int grid_speedup; - int page_default; + uint32_t grid_hori; + bool grid_speedup; + uint32_t grid_vert; + uint32_t grid_x_width; + uint16_t page_default; bool page_visible[PAGE_CNT]; - int refresh_delay; - bool show_hidden; + uint16_t refresh_delay; bool show_grid; - int tab_pos; + bool show_hidden; + uint16_t tab_pos; } sview_config_t; typedef struct display_data display_data_t; @@ -497,4 +497,12 @@ extern void add_display_treestore_line_with_font( char *font); extern void sview_widget_modify_bg(GtkWidget *widget, GtkStateType state, const GdkColor color); +extern char *page_to_str(int page); +extern char *tab_pos_to_str(int tab_pos); +extern char *visible_to_str(); + +// defaults.c +extern int load_defaults(); +extern int save_defaults(); + #endif -- GitLab