diff --git a/NEWS b/NEWS index ea2b7c1e04df62a2e3eaf3187f390d1ac4b94de3..fde45a36985df506956f4ccbadaabb9f5dfea00b 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,7 @@ documents those changes that are of interest to users and admins. * Changes in SLURM 2.2.0.pre6 ============================= -- sview - added ability to see database configuration. + -- sview - added ability to remove visible tabs. * Changes in SLURM 2.2.0.pre5 ============================= diff --git a/src/sview/block_info.c b/src/sview/block_info.c index f45e2d0bef2afb926d8169b415362152793a8c33..14f79d3bd07084c873a9fa6ea27ea64463254307 100644 --- a/src/sview/block_info.c +++ b/src/sview/block_info.c @@ -696,7 +696,7 @@ extern int get_new_info_block(block_info_msg_t **block_ptr, static time_t last; static bool changed = 0; - if(!force && ((now - last) < global_sleep_time)) { + if(!force && ((now - last) < sview_config.refresh_delay)) { if(*block_ptr != bg_info_ptr) error_code = SLURM_SUCCESS; *block_ptr = bg_info_ptr; @@ -963,7 +963,7 @@ display_it: } list_iterator_destroy(itr); change_grid_color(grid_button_list, -1, -1, MAKE_WHITE, true, 0); - if(grid_speedup) { + if(sview_config.grid_speedup) { gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 0); gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 1); } diff --git a/src/sview/common.c b/src/sview/common.c index 287f60ee14efbcf31109a377f08b9f862dd0dbf4..92aaa608f9e740d4b5df69aa9d6103a6147c12a1 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -605,23 +605,40 @@ extern GtkWidget *create_entry() extern void create_page(GtkNotebook *notebook, display_data_t *display_data) { GtkScrolledWindow *scrolled_window = create_scrolled_window(); - GtkWidget *event_box = NULL; - GtkWidget *label = NULL; + GtkWidget *event_box = gtk_event_box_new(); + GtkWidget *label = gtk_label_new(display_data->name); + GtkWidget *close_button = gtk_event_box_new(); + GtkWidget *table = gtk_table_new(1, 3, FALSE); + GtkWidget *image = gtk_image_new_from_stock( + GTK_STOCK_DIALOG_ERROR, GTK_ICON_SIZE_SMALL_TOOLBAR); int err; - event_box = gtk_event_box_new(); + gtk_container_add(GTK_CONTAINER(close_button), image); + gtk_widget_set_size_request(close_button, 10, 10); + g_signal_connect(G_OBJECT(close_button), "button-press-event", + G_CALLBACK(close_tab), + display_data); + + //gtk_event_box_set_above_child(GTK_EVENT_BOX(close_button), FALSE); + + gtk_container_add(GTK_CONTAINER(event_box), label); gtk_event_box_set_above_child(GTK_EVENT_BOX(event_box), FALSE); g_signal_connect(G_OBJECT(event_box), "button-press-event", G_CALLBACK(tab_pressed), display_data); - label = gtk_label_new(display_data->name); - gtk_container_add(GTK_CONTAINER(event_box), label); - gtk_widget_show(label); + gtk_table_set_homogeneous(GTK_TABLE(table), FALSE); + gtk_table_set_col_spacings(GTK_TABLE(table), 5); + gtk_container_set_border_width(GTK_CONTAINER(table), 1); + + gtk_table_attach_defaults(GTK_TABLE(table), event_box, 0, 1, 0, 1); + gtk_table_attach_defaults(GTK_TABLE(table), close_button, 2, 3, 0, 1); + + gtk_widget_show_all(table); //(display_data->set_fields)(GTK_MENU(menu)); if((err = gtk_notebook_append_page(GTK_NOTEBOOK(notebook), GTK_WIDGET(scrolled_window), - event_box)) == -1) { + table)) == -1) { g_error("Couldn't add page to notebook\n"); } @@ -843,7 +860,7 @@ extern gboolean left_button_pressed(GtkTreeView *tree_view, } last_user_data = iter.user_data; - if(!admin_mode) + if(!sview_config.admin_mode) rc = true; last_time = now; @@ -900,7 +917,7 @@ extern gboolean row_clicked(GtkTreeView *tree_view, GdkEventButton *event, right_button_pressed(tree_view, path, event, signal_params, ROW_CLICKED); did_something = TRUE; - } else if(!admin_mode) + } else if(!sview_config.admin_mode) did_something = TRUE; gtk_tree_path_free(path); @@ -1171,7 +1188,7 @@ extern void *popup_thr(popup_info_t *popup_win) gdk_threads_leave(); g_static_mutex_unlock(&sview_mutex); //g_print("done popup_thr\n"); - sleep(global_sleep_time); + sleep(sview_config.refresh_delay); } return NULL; } @@ -1504,7 +1521,7 @@ extern void sview_widget_modify_bg(GtkWidget *widget, GtkStateType state, /* DEF_TIMERS; */ /* START_TIMER; */ - if(grid_speedup) { + if(sview_config.grid_speedup) { /* For some reason, QT Themes have a very slow call to for * gtk_widget_modify_bg as of 7-6-09. * Here we only take around 40 microsecs where diff --git a/src/sview/grid.c b/src/sview/grid.c index a286c93188b88ff98b490d6207ea35e0d669b74a..3fb95ed76219d1e98705ee48e97053972a8cf72e 100644 --- a/src/sview/grid.c +++ b/src/sview/grid.c @@ -788,23 +788,23 @@ extern void put_buttons_in_table(GtkTable *table, List button_list) #ifdef HAVE_3D node_count = DIM_SIZE[X]; - global_x_width = DIM_SIZE[X] + DIM_SIZE[Z]; + sview_config.grid_x_width = DIM_SIZE[X] + DIM_SIZE[Z]; table_y = (DIM_SIZE[Z] * DIM_SIZE[Y]) + DIM_SIZE[Y]; #else - if(!global_x_width) { + if(!sview_config.grid_x_width) { if(node_count < 50) { - global_x_width = 1; + sview_config.grid_x_width = 1; } else if(node_count < 500) { - global_x_width = 10; + sview_config.grid_x_width = 10; } else { - global_x_width=20; + sview_config.grid_x_width=20; } } - table_y = node_count/global_x_width; + table_y = node_count/sview_config.grid_x_width; table_y++; #endif - //g_print("the table size is y=%d x=%d\n", table_y, global_x_width); - gtk_table_resize(table, table_y, global_x_width); + //g_print("the table size is y=%d x=%d\n", table_y, sview_config.grid_x_width); + gtk_table_resize(table, table_y, sview_config.grid_x_width); itr = list_iterator_create(button_list); while((grid_button = list_next(itr))) { #ifdef HAVE_3D @@ -830,17 +830,17 @@ extern void put_buttons_in_table(GtkTable *table, List button_list) coord_x++; - if(coord_x == global_x_width) { + if(coord_x == sview_config.grid_x_width) { coord_x = 0; coord_y++; - if(!(coord_y % global_vertical)) + if(!(coord_y % sview_config.grid_vert)) gtk_table_set_row_spacing(table, coord_y-1, 5); } if(coord_y == table_y) break; - if(coord_x && !(coord_x % global_horizontal)) + if(coord_x && !(coord_x % sview_config.grid_hori)) gtk_table_set_col_spacing(table, coord_x-1, 5); #endif } @@ -861,20 +861,20 @@ extern int update_grid_table(GtkTable *table, List button_list, List node_list) int default_y_offset= (DIM_SIZE[Z] * DIM_SIZE[Y]) + (DIM_SIZE[Y] - DIM_SIZE[Z]); node_count = DIM_SIZE[X]; - global_x_width = DIM_SIZE[X] + DIM_SIZE[Z]; + sview_config.grid_x_width = DIM_SIZE[X] + DIM_SIZE[Z]; table_y = (DIM_SIZE[Z] * DIM_SIZE[Y]) + DIM_SIZE[Y]; #else node_count = list_count(node_list); - if(!global_x_width) { + if(!sview_config.grid_x_width) { if(node_count < 50) { - global_x_width = 1; + sview_config.grid_x_width = 1; } else if(node_count < 500) { - global_x_width = 10; + sview_config.grid_x_width = 10; } else { - global_x_width = 20; + sview_config.grid_x_width = 20; } } - table_y = node_count/global_x_width; + table_y = node_count/sview_config.grid_x_width; table_y++; #endif @@ -883,7 +883,7 @@ extern int update_grid_table(GtkTable *table, List button_list, List node_list) return SLURM_ERROR; } - gtk_table_resize(table, table_y, global_x_width); + gtk_table_resize(table, table_y, sview_config.grid_x_width); gtk_table_set_row_spacings(table, 0); gtk_table_set_col_spacings(table, 0); itr = list_iterator_create(node_list); @@ -937,10 +937,10 @@ extern int update_grid_table(GtkTable *table, List button_list, List node_list) coord_y. We add space inbetween each 10th row. */ coord_x++; - if(coord_x == global_x_width) { + if(coord_x == sview_config.grid_x_width) { coord_x = 0; coord_y++; - if(!(coord_y % global_vertical)) + if(!(coord_y % sview_config.grid_vert)) gtk_table_set_row_spacing(table, coord_y-1, 5); } @@ -948,7 +948,7 @@ extern int update_grid_table(GtkTable *table, List button_list, List node_list) if(coord_y == table_y) break; - if(coord_x && !(coord_x%global_horizontal)) + if(coord_x && !(coord_x%sview_config.grid_hori)) gtk_table_set_col_spacing(table, coord_x-1, 5); #endif break; @@ -1024,20 +1024,20 @@ extern int setup_grid_table(GtkTable *table, List button_list, List node_list) int default_y_offset= (DIM_SIZE[Z] * DIM_SIZE[Y]) + (DIM_SIZE[Y] - DIM_SIZE[Z]); node_count = DIM_SIZE[X]; - global_x_width = DIM_SIZE[X] + DIM_SIZE[Z]; + sview_config.grid_x_width = DIM_SIZE[X] + DIM_SIZE[Z]; table_y = (DIM_SIZE[Z] * DIM_SIZE[Y]) + DIM_SIZE[Y]; #else node_count = list_count(node_list); - if(!global_x_width) { + if(!sview_config.grid_x_width) { if(node_count < 50) { - global_x_width = 1; + sview_config.grid_x_width = 1; } else if(node_count < 500) { - global_x_width = 10; + sview_config.grid_x_width = 10; } else { - global_x_width = 20; + sview_config.grid_x_width = 20; } } - table_y = node_count/global_x_width; + table_y = node_count/sview_config.grid_x_width; table_y++; #endif @@ -1046,7 +1046,7 @@ extern int setup_grid_table(GtkTable *table, List button_list, List node_list) return SLURM_ERROR; } - gtk_table_resize(table, table_y, global_x_width); + gtk_table_resize(table, table_y, sview_config.grid_x_width); itr = list_iterator_create(node_list); while((sview_node_info_ptr = list_next(itr))) { #ifdef HAVE_3D @@ -1104,17 +1104,17 @@ extern int setup_grid_table(GtkTable *table, List button_list, List node_list) coord_y. We add space inbetween each 10th row. */ coord_x++; - if(coord_x == global_x_width) { + if(coord_x == sview_config.grid_x_width) { coord_x = 0; coord_y++; - if(!(coord_y % global_vertical)) + if(!(coord_y % sview_config.grid_vert)) gtk_table_set_row_spacing(table, coord_y-1, 5); } if(coord_y == table_y) break; - if(coord_x && !(coord_x % global_horizontal)) + if(coord_x && !(coord_x % sview_config.grid_hori)) gtk_table_set_col_spacing(table, coord_x-1, 5); #endif } @@ -1225,7 +1225,7 @@ extern void post_setup_popup_grid_list(popup_info_t *popup_win) change_grid_color(popup_win->grid_button_list, -1, -1, MAKE_BLACK, true, NODE_STATE_IDLE); - if(grid_speedup) { + if(sview_config.grid_speedup) { gtk_widget_set_sensitive(GTK_WIDGET(popup_win->grid_table), 0); gtk_widget_set_sensitive(GTK_WIDGET(popup_win->grid_table), 1); } diff --git a/src/sview/job_info.c b/src/sview/job_info.c index d6cacb8c5e83f15c5d2fd48869e16a7c260d48da..4893112df2bbe0b0c1f33c98e5ffac40304c645c 100644 --- a/src/sview/job_info.c +++ b/src/sview/job_info.c @@ -2594,7 +2594,7 @@ extern int get_new_info_job(job_info_msg_t **info_ptr, static bool changed = 0; static uint16_t last_flags = 0; - if(!force && ((now - last) < global_sleep_time)) { + if(!force && ((now - last) < sview_config.refresh_delay)) { if(*info_ptr != job_info_ptr) error_code = SLURM_SUCCESS; *info_ptr = job_info_ptr; @@ -2604,7 +2604,7 @@ extern int get_new_info_job(job_info_msg_t **info_ptr, } last = now; - if(global_show_hidden) + if(sview_config.show_hidden) show_flags |= SHOW_ALL; if (job_info_ptr) { if(show_flags != last_flags) @@ -2646,7 +2646,7 @@ extern int get_new_info_job_step(job_step_info_response_msg_t **info_ptr, static time_t last; static bool changed = 0; - if(!force && ((now - last) < global_sleep_time)) { + if(!force && ((now - last) < sview_config.refresh_delay)) { if(*info_ptr != old_step_ptr) error_code = SLURM_SUCCESS; *info_ptr = old_step_ptr; @@ -2960,7 +2960,7 @@ display_it: } list_iterator_destroy(itr); change_grid_color(grid_button_list, -1, -1, MAKE_WHITE, true, 0); - if(grid_speedup) { + if(sview_config.grid_speedup) { gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 0); gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 1); } diff --git a/src/sview/node_info.c b/src/sview/node_info.c index 569e79c28d3d07689fffb253a544a2e71f73690a..084cfbc463bb9aef1a1b9a8ee2aa292d8e8e30aa 100644 --- a/src/sview/node_info.c +++ b/src/sview/node_info.c @@ -580,7 +580,7 @@ extern int get_new_info_node(node_info_msg_t **info_ptr, int force) static bool changed = 0; static uint16_t last_flags = 0; - if(!force && ((now - last) < global_sleep_time)) { + if(!force && ((now - last) < sview_config.refresh_delay)) { if(*info_ptr != node_info_ptr) error_code = SLURM_SUCCESS; *info_ptr = node_info_ptr; @@ -591,7 +591,7 @@ extern int get_new_info_node(node_info_msg_t **info_ptr, int force) } last = now; - if(global_show_hidden) + if(sview_config.show_hidden) show_flags |= SHOW_ALL; if (node_info_ptr) { if(show_flags != last_flags) @@ -1034,7 +1034,7 @@ display_it: } list_iterator_destroy(itr); change_grid_color(grid_button_list, -1, -1, MAKE_WHITE, true, 0); - if(grid_speedup) { + if(sview_config.grid_speedup) { gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 0); gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 1); } diff --git a/src/sview/part_info.c b/src/sview/part_info.c index 76fda60d8d192f6ee252b55e06dc654884f657d5..633196b6595456f0adf7e572120736599f8502cc 100644 --- a/src/sview/part_info.c +++ b/src/sview/part_info.c @@ -1650,7 +1650,7 @@ extern int get_new_info_part(partition_info_msg_t **part_ptr, int force) static bool changed = 0; static uint16_t last_flags = 0; - if(!force && ((now - last) < global_sleep_time)) { + if(!force && ((now - last) < sview_config.refresh_delay)) { if(*part_ptr != part_info_ptr) error_code = SLURM_SUCCESS; *part_ptr = part_info_ptr; @@ -1660,7 +1660,7 @@ extern int get_new_info_part(partition_info_msg_t **part_ptr, int force) } last = now; - if(global_show_hidden) + if(sview_config.show_hidden) show_flags |= SHOW_ALL; if (part_info_ptr) { @@ -1995,7 +1995,7 @@ display_it: } list_iterator_destroy(itr); change_grid_color(grid_button_list, -1, -1, MAKE_WHITE, true, 0); - if(grid_speedup) { + if(sview_config.grid_speedup) { gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 0); gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 1); } diff --git a/src/sview/popups.c b/src/sview/popups.c index 68312770f3cbc25582d1f2601bcfbf9ee65510af..9aa6a3a8f63e1bf25f48e60db7dba3eb9fe92dd2 100644 --- a/src/sview/popups.c +++ b/src/sview/popups.c @@ -685,7 +685,7 @@ extern void change_refresh_popup(GtkAction *action, gpointer user_data) { GtkWidget *table = gtk_table_new(1, 2, FALSE); GtkWidget *label = NULL; - GtkObject *adjustment = gtk_adjustment_new(global_sleep_time, + GtkObject *adjustment = gtk_adjustment_new(sview_config.refresh_delay, 1, 10000, 5, 60, 0); @@ -720,11 +720,11 @@ extern void change_refresh_popup(GtkAction *action, gpointer user_data) response = gtk_dialog_run (GTK_DIALOG(popup)); if (response == GTK_RESPONSE_OK) { - global_sleep_time = + sview_config.refresh_delay = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(spin_button)); temp = g_strdup_printf("Refresh Interval set to %d seconds.", - global_sleep_time); + sview_config.refresh_delay); gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_REFRESH); response = gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), @@ -749,8 +749,8 @@ extern void change_grid_popup(GtkAction *action, gpointer user_data) GtkWidget *label; GtkObject *adjustment; GtkWidget *width_sb, *hori_sb, *vert_sb; - int width = global_x_width, hori = global_horizontal, - vert = global_vertical; + int width = sview_config.grid_x_width, hori = sview_config.grid_hori, + vert = sview_config.grid_vert; GtkWidget *popup = gtk_dialog_new_with_buttons( "Grid Properties", GTK_WINDOW (user_data), @@ -769,21 +769,21 @@ extern void change_grid_popup(GtkAction *action, gpointer user_data) table, FALSE, FALSE, 0); label = gtk_label_new("Nodes in row "); - adjustment = gtk_adjustment_new(global_x_width, 1, 1000, 1, 60, 0); + adjustment = gtk_adjustment_new(sview_config.grid_x_width, 1, 1000, 1, 60, 0); width_sb = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 10); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), width_sb, 1, 2, 0, 1); label = gtk_label_new("Nodes before horizontal break "); - adjustment = gtk_adjustment_new(global_horizontal, 1, 1000, 1, 60, 0); + adjustment = gtk_adjustment_new(sview_config.grid_hori, 1, 1000, 1, 60, 0); hori_sb = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 10); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); gtk_table_attach_defaults(GTK_TABLE(table), hori_sb, 1, 2, 1, 2); label = gtk_label_new("Nodes before vertical break "); - adjustment = gtk_adjustment_new(global_vertical, 1, 1000, 1, 60, 0); + adjustment = gtk_adjustment_new(sview_config.grid_vert, 1, 1000, 1, 60, 0); vert_sb = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 1, 0); gtk_container_set_border_width(GTK_CONTAINER(table), 10); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); @@ -793,25 +793,25 @@ extern void change_grid_popup(GtkAction *action, gpointer user_data) response = gtk_dialog_run (GTK_DIALOG(popup)); if (response == GTK_RESPONSE_OK) { - global_x_width = + sview_config.grid_x_width = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(width_sb)); - global_horizontal = + sview_config.grid_hori = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(hori_sb)); - global_vertical = + sview_config.grid_vert = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(vert_sb)); - if((width == global_x_width) - && (hori == global_horizontal) - && (vert == global_vertical)) { + if((width == sview_config.grid_x_width) + && (hori == sview_config.grid_hori) + && (vert == sview_config.grid_vert)) { temp = g_strdup_printf("Grid: Nothing changed."); } else { temp = g_strdup_printf("Grid set to %d nodes breaks " "at %d H and %d V.", - global_x_width, - global_horizontal, - global_vertical); + sview_config.grid_x_width, + sview_config.grid_hori, + sview_config.grid_vert); get_system_stats(main_grid_table); } gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), diff --git a/src/sview/resv_info.c b/src/sview/resv_info.c index 913f7a995f83e7e38ed3f66f203ef4a4025eb928..7864f0aba6ca47541b0b890eca1acc03ec915918 100644 --- a/src/sview/resv_info.c +++ b/src/sview/resv_info.c @@ -787,7 +787,7 @@ extern int get_new_info_resv(reserve_info_msg_t **info_ptr, static time_t last; static bool changed = 0; - if(!force && ((now - last) < global_sleep_time)) { + if(!force && ((now - last) < sview_config.refresh_delay)) { if(*info_ptr != resv_info_ptr) error_code = SLURM_SUCCESS; *info_ptr = resv_info_ptr; @@ -991,7 +991,7 @@ display_it: } list_iterator_destroy(itr); change_grid_color(grid_button_list, -1, -1, MAKE_WHITE, true, 0); - if(grid_speedup) { + if(sview_config.grid_speedup) { gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 0); gtk_widget_set_sensitive(GTK_WIDGET(main_grid_table), 1); } diff --git a/src/sview/sview.c b/src/sview/sview.c index 6bc3c13823ad88db05616e2169c03326b1a2212d..8bb2e3f37961c85a7516432e7e5b84b2f4353a66 100644 --- a/src/sview/sview.c +++ b/src/sview/sview.c @@ -47,7 +47,7 @@ typedef struct { } page_thr_t; /* globals */ -sview_parameters_t params; +sview_config_t sview_config; int adding = 1; int fini = 0; int grid_init = 0; @@ -56,16 +56,10 @@ bool force_refresh = FALSE; List popup_list = NULL; List signal_params_list = NULL; int page_running[PAGE_CNT]; -int global_sleep_time = 5; -int global_x_width = 0; -int global_horizontal = 10; -int global_vertical = 10; bool global_entry_changed = 0; bool global_send_update_msg = 0; bool global_edit_error = 0; -bool global_show_hidden = 0; gchar *global_edit_error_msg = NULL; -bool admin_mode = FALSE; GtkWidget *main_notebook = NULL; GtkWidget *main_statusbar = NULL; GtkWidget *main_window = NULL; @@ -74,7 +68,6 @@ GtkTable *main_grid_table = NULL; GStaticMutex sview_mutex = G_STATIC_MUTEX_INIT; GMutex *grid_mutex = NULL; GCond *grid_cond = NULL; -int grid_speedup = 0; static GtkActionGroup *admin_action_group = NULL; static GtkActionGroup *menu_action_group = NULL; @@ -85,9 +78,6 @@ display_data_t main_display_data[] = { refresh_main, create_model_job, admin_edit_job, get_info_job, specific_info_job, set_menus_job, NULL}, - {G_TYPE_NONE, STEP_PAGE, NULL, FALSE, -1, - refresh_main, NULL, NULL, NULL, - NULL, NULL, NULL}, {G_TYPE_NONE, PART_PAGE, "Partitions", TRUE, -1, refresh_main, create_model_part, admin_edit_part, get_info_part, specific_info_part, @@ -167,7 +157,7 @@ void *_page_thr(void *arg) g_static_mutex_unlock(&sview_mutex); /* END_TIMER; */ /* g_print("got for initeration: %s\n", TIME_STR); */ - sleep(global_sleep_time); + sleep(sview_config.refresh_delay); gdk_threads_enter(); if(thread_count > 1) { @@ -213,7 +203,7 @@ void *_grid_init_thr(void *arg) gdk_threads_leave(); if(rc != SLURM_SUCCESS) - sleep(global_sleep_time); + sleep(sview_config.refresh_delay); else grid_init = 1; @@ -271,10 +261,9 @@ static void _page_switched(GtkNotebook *notebook, break; } - if(main_display_data[i].extra != page_num) { - g_print("page %d not found\n", page_num); + if(main_display_data[i].extra != page_num) return; - } + if(main_display_data[i].get_info) { running = i; page_running[i] = 1; @@ -288,8 +277,7 @@ static void _page_switched(GtkNotebook *notebook, page_thr->page_num = i; page_thr->table = table; - if (!g_thread_create(_page_thr, page_thr, FALSE, &error)) - { + if (!g_thread_create(_page_thr, page_thr, FALSE, &error)) { g_printerr ("Failed to create page thread: %s\n", error->message); return; @@ -301,30 +289,28 @@ static void _set_admin_mode(GtkToggleAction *action) { // GtkAction *admin_action = NULL; - if(admin_mode) { - admin_mode = FALSE; + if(sview_config.admin_mode) { + sview_config.admin_mode = FALSE; gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_MODE); } else { - admin_mode = TRUE; + sview_config.admin_mode = TRUE; gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_MODE, "Admin mode activated! " "Think before you alter anything."); } - gtk_action_group_set_sensitive(admin_action_group, admin_mode); + gtk_action_group_set_sensitive(admin_action_group, sview_config.admin_mode); } static void _set_grid(GtkToggleAction *action) { - static bool open = TRUE; - - if(open) { + if(sview_config.show_grid) { gtk_widget_hide(grid_window); - open = FALSE; + sview_config.show_grid = FALSE; } else { gtk_widget_show(grid_window); - open = TRUE; + sview_config.show_grid = TRUE; } return; @@ -333,14 +319,14 @@ static void _set_grid(GtkToggleAction *action) static void _set_hidden(GtkToggleAction *action) { char *tmp; - if(global_show_hidden) { + if(sview_config.show_hidden) { tmp = g_strdup_printf( "Hidden partitions and their jobs are now hidden"); - global_show_hidden = 0; + sview_config.show_hidden = 0; } else { tmp = g_strdup_printf( "Hidden partitions and their jobs are now visible"); - global_show_hidden = 1; + sview_config.show_hidden = 1; } refresh_main(NULL, NULL); display_edit_note(tmp); @@ -721,6 +707,18 @@ extern void tab_pressed(GtkWidget *widget, GdkEventButton *event, } } +extern void close_tab(GtkWidget *widget, GdkEventButton *event, + display_data_t *display_data) +{ + if(event->button == 3) + /* don't do anything with a right click */ + return; + + gtk_widget_hide(gtk_notebook_get_nth_page(GTK_NOTEBOOK(main_notebook), + display_data->extra)); + //g_print("hid %d\n", display_data->extra); +} + int main(int argc, char *argv[]) { GtkWidget *menubar = NULL; @@ -730,9 +728,25 @@ int main(int argc, char *argv[]) GtkViewport *view = NULL; int i=0; - if(getenv("SVIEW_GRID_SPEEDUP")) - grid_speedup = 1; + 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; + } _init_pages(); g_thread_init(NULL); gdk_threads_init(); @@ -779,7 +793,8 @@ int main(int argc, char *argv[]) gtk_notebook_popup_enable(GTK_NOTEBOOK(main_notebook)); gtk_notebook_set_scrollable(GTK_NOTEBOOK(main_notebook), TRUE); - gtk_notebook_set_tab_pos(GTK_NOTEBOOK(main_notebook), GTK_POS_TOP); + gtk_notebook_set_tab_pos(GTK_NOTEBOOK(main_notebook), + sview_config.tab_pos); main_statusbar = gtk_statusbar_new(); gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(main_statusbar), @@ -802,18 +817,43 @@ int main(int argc, char *argv[]) for(i=0; i<PAGE_CNT; i++) { if(main_display_data[i].id == -1) break; - else if(!main_display_data[i].show) - continue; + create_page(GTK_NOTEBOOK(main_notebook), &main_display_data[i]); } /* tell signal we are done adding */ - adding = 0; + popup_list = list_create(destroy_popup_info); signal_params_list = list_create(destroy_signal_params); + gtk_widget_show_all(main_window); + adding = 0; + /* apply default settings */ + if(!sview_config.show_grid) + gtk_widget_hide(grid_window); + + for(i=0; i<PAGE_CNT; i++) { + GtkWidget *visible_tab = NULL; + + if(main_display_data[i].id == -1) + break; + + visible_tab = gtk_notebook_get_nth_page( + GTK_NOTEBOOK(main_notebook), i); + if(sview_config.page_visible[i] + || (i == sview_config.page_default)) + gtk_widget_show(visible_tab); + else + gtk_widget_hide(visible_tab); + } + /* 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); + /* Finished! */ gtk_main (); gdk_threads_leave(); diff --git a/src/sview/sview.h b/src/sview/sview.h index f7a57935d00e13a0d7ae49f20deef363be9f35c9..20be983356f33caad0d3bd0bb1bd20efeab5c5fa 100644 --- a/src/sview/sview.h +++ b/src/sview/sview.h @@ -97,7 +97,6 @@ #define MAKE_WHITE -1 enum { JOB_PAGE, - STEP_PAGE, PART_PAGE, NODE_PAGE, BLOCK_PAGE, @@ -150,27 +149,18 @@ typedef enum { SEARCH_JOB_ID = 1, /* Input parameters */ typedef struct { - bool all_flag; - bool no_header; - - char *format; - char *sort; - char *states; - - int iterate; - int verbose; - int display; - - bool long_output; - bool commandline; - bool parse; - - char *nodes; - char *partition; - - int node_field_size; - -} sview_parameters_t; + bool admin_mode; + int grid_hori; + int grid_vert; + int grid_x_width; + int grid_speedup; + int page_default; + bool page_visible[PAGE_CNT]; + int refresh_delay; + bool show_hidden; + bool show_grid; + int tab_pos; +} sview_config_t; typedef struct display_data display_data_t; typedef struct specific_info specific_info_t; @@ -267,36 +257,27 @@ typedef struct { } signal_params_t; -extern sview_parameters_t params; -extern int text_line_cnt; +extern sview_config_t sview_config; extern void parse_command_line(int argc, char *argv[]); extern int fini; extern ba_system_t *ba_system_ptr; -extern int quiet_flag; extern bool toggled; extern bool force_refresh; extern List popup_list; extern List grid_button_list; extern List signal_params_list; -extern int global_sleep_time; -extern int global_x_width; -extern int global_horizontal; -extern int global_vertical; extern bool global_entry_changed; extern bool global_send_update_msg; extern bool global_edit_error; -extern bool global_show_hidden; extern gchar *global_edit_error_msg; -extern bool admin_mode; extern GtkWidget *main_statusbar; extern GtkWidget *main_window; extern GtkTable *main_grid_table; extern GStaticMutex sview_mutex; extern int cpus_per_node; extern int g_node_scaling; -extern int grid_speedup; extern char *sview_colors[]; extern int sview_colors_cnt; @@ -312,6 +293,8 @@ extern void print_date(); extern void refresh_main(GtkAction *action, gpointer user_data); extern void tab_pressed(GtkWidget *widget, GdkEventButton *event, display_data_t *display_data); +extern void close_tab(GtkWidget *widget, GdkEventButton *event, + display_data_t *display_data); //popups.c extern void create_config_popup(GtkAction *action, gpointer user_data);