From babe69f0738a9eb02569fba70d6621df80be9371 Mon Sep 17 00:00:00 2001 From: Danny Auble <da@llnl.gov> Date: Wed, 30 Aug 2006 19:15:49 +0000 Subject: [PATCH] more fields are editable now. --- src/sview/common.c | 58 +++++++++++++---------- src/sview/node_info.c | 2 +- src/sview/part_info.c | 105 ++++++++++++++++++++++++++++++++---------- src/sview/sview.c | 15 +++--- 4 files changed, 123 insertions(+), 57 deletions(-) diff --git a/src/sview/common.c b/src/sview/common.c index fd7864a4463..01f7c60375f 100644 --- a/src/sview/common.c +++ b/src/sview/common.c @@ -117,14 +117,15 @@ static void _editing_canceled(GtkCellRenderer *cell, gpointer data) { g_static_mutex_unlock(&sview_mutex); - } -static void *_editing_thr(void *arg) +static void *_editing_thr(gpointer arg) { + int msg_id = GPOINTER_TO_INT(arg); sleep(5); gdk_threads_enter(); - gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_EDIT); + gtk_statusbar_remove(GTK_STATUSBAR(main_statusbar), + STATUS_ADMIN_EDIT, msg_id); gdk_flush(); gdk_threads_leave(); return NULL; @@ -135,29 +136,35 @@ static void _add_col_to_treeview(GtkTreeView *tree_view, display_data_t *display_data) { GtkTreeViewColumn *col = gtk_tree_view_column_new(); - GtkCellRenderer *renderer = gtk_cell_renderer_combo_new(); GtkListStore *model = (display_data->create_model)(display_data->id); - - if(model) { + GtkCellRenderer *renderer = NULL; + if(model && display_data->extra != -1) { + renderer = gtk_cell_renderer_combo_new(); g_object_set(renderer, "model", model, "text-column", 0, - "has-entry", FALSE, + "has-entry", display_data->extra, "editable", TRUE, NULL); - - g_signal_connect(renderer, "editing-started", - G_CALLBACK(_editing_started), NULL); - g_signal_connect(renderer, "editing-canceled", - G_CALLBACK(_editing_canceled), NULL); - g_signal_connect(renderer, "edited", - G_CALLBACK(display_data->admin_edit), - gtk_tree_view_get_model(tree_view)); - - g_object_set_data(G_OBJECT(renderer), "column", - GINT_TO_POINTER(display_data->id)); - } - + } else if(display_data->extra == 1) { + renderer = gtk_cell_renderer_text_new(); + g_object_set(renderer, + "editable", TRUE, + NULL); + } else + renderer = gtk_cell_renderer_combo_new(); + + g_signal_connect(renderer, "editing-started", + G_CALLBACK(_editing_started), NULL); + g_signal_connect(renderer, "editing-canceled", + G_CALLBACK(_editing_canceled), NULL); + + g_signal_connect(renderer, "edited", + G_CALLBACK(display_data->admin_edit), + gtk_tree_view_get_model(tree_view)); + g_object_set_data(G_OBJECT(renderer), "column", + GINT_TO_POINTER(display_data->id)); + gtk_tree_view_column_pack_start(col, renderer, TRUE); gtk_tree_view_column_add_attribute(col, renderer, "text", display_data->id); @@ -876,12 +883,13 @@ extern char *get_reason() extern void display_edit_note(char *edit_note) { GError *error = NULL; - + int msg_id = 0; gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_EDIT); - gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), STATUS_ADMIN_EDIT, - edit_note); - - if (!g_thread_create(_editing_thr, NULL, FALSE, &error)) + msg_id = gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), + STATUS_ADMIN_EDIT, + edit_note); + if (!g_thread_create(_editing_thr, GINT_TO_POINTER(msg_id), + FALSE, &error)) { g_printerr ("Failed to create edit thread: %s\n", error->message); diff --git a/src/sview/node_info.c b/src/sview/node_info.c index e8fe99a5cae..463e21c7bb1 100644 --- a/src/sview/node_info.c +++ b/src/sview/node_info.c @@ -51,7 +51,7 @@ static display_data_t display_data_node[] = { create_model_node, admin_edit_node}, {G_TYPE_STRING, SORTID_NAME, "Name", TRUE, -1, refresh_node, create_model_node, admin_edit_node}, - {G_TYPE_STRING, SORTID_STATE, "State", TRUE, -1, refresh_node, + {G_TYPE_STRING, SORTID_STATE, "State", TRUE, 0, refresh_node, create_model_node, admin_edit_node}, {G_TYPE_INT, SORTID_STATE_NUM, NULL, FALSE, -1, refresh_node, create_model_node, admin_edit_node}, diff --git a/src/sview/part_info.c b/src/sview/part_info.c index 37f46558423..d8f8d35b55e 100644 --- a/src/sview/part_info.c +++ b/src/sview/part_info.c @@ -88,28 +88,28 @@ enum { static display_data_t display_data_part[] = { {G_TYPE_INT, SORTID_POS, NULL, FALSE, -1, refresh_part}, - {G_TYPE_STRING, SORTID_NAME, "Partition", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_NAME, "Partition", TRUE, 0, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_DEFAULT, "Default", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_DEFAULT, "Default", TRUE, 0, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_HIDDEN, "Hidden", FALSE, -1, refresh_part, + {G_TYPE_STRING, SORTID_HIDDEN, "Hidden", FALSE, 0, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_AVAIL, "Availablity", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_AVAIL, "Availablity", TRUE, 0, refresh_part, create_model_part, admin_edit_part}, {G_TYPE_STRING, SORTID_TIMELIMIT, "Time Limit", - TRUE, -1, refresh_part, + TRUE, 1, refresh_part, create_model_part, admin_edit_part}, {G_TYPE_STRING, SORTID_JOB_SIZE, "Job Size", FALSE, -1, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_INT, SORTID_MIN_NODES, "Min Nodes", FALSE, -1, refresh_part, + {G_TYPE_STRING, SORTID_MIN_NODES, "Min Nodes", FALSE, 1, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_INT, SORTID_MAX_NODES, "Max Nodes", FALSE, -1, refresh_part, + {G_TYPE_STRING, SORTID_MAX_NODES, "Max Nodes", FALSE, 1, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_ROOT, "Root", FALSE, -1, refresh_part, + {G_TYPE_STRING, SORTID_ROOT, "Root", FALSE, 0, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_SHARE, "Share", FALSE, -1, refresh_part, + {G_TYPE_STRING, SORTID_SHARE, "Share", FALSE, 0, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_GROUPS, "Groups", FALSE, -1, refresh_part, + {G_TYPE_STRING, SORTID_GROUPS, "Groups", FALSE, 0, refresh_part, create_model_part, admin_edit_part}, {G_TYPE_STRING, SORTID_NODES, "Nodes", TRUE, -1, refresh_part, create_model_part, admin_edit_part}, @@ -119,15 +119,15 @@ static display_data_t display_data_part[] = { create_model_part, admin_edit_part}, {G_TYPE_STRING, SORTID_MEM, "MEM", FALSE, -1, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_STATE, "State", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_STATE, "State", TRUE, 0, refresh_part, create_model_part, admin_edit_part}, - {G_TYPE_STRING, SORTID_WEIGHT, "Weight", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_WEIGHT, "Weight", FALSE, -1, refresh_part, create_model_part, admin_edit_part}, #ifdef HAVE_BG - {G_TYPE_STRING, SORTID_NODELIST, "BP List", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_NODELIST, "BP List", TRUE, 1, refresh_part, create_model_part, admin_edit_part}, #else - {G_TYPE_STRING, SORTID_NODELIST, "NodeList", TRUE, -1, refresh_part, + {G_TYPE_STRING, SORTID_NODELIST, "NodeList", TRUE, 1, refresh_part, create_model_part, admin_edit_part}, #endif {G_TYPE_INT, SORTID_STATE_NUM, NULL, FALSE, -1, refresh_part, @@ -303,10 +303,23 @@ static void _update_part_record(sview_part_info_t *sview_part_info, part_ptr->min_nodes, part_ptr->max_nodes, true); gtk_tree_store_set(treestore, iter, SORTID_JOB_SIZE, time_buf, -1); + + if (part_ptr->min_nodes == INFINITE) + snprintf(time_buf, sizeof(time_buf), "infinite"); + else { + convert_num_unit((float)part_ptr->min_nodes, + time_buf, UNIT_NONE); + } gtk_tree_store_set(treestore, iter, SORTID_MIN_NODES, - part_ptr->min_nodes, -1); + time_buf, -1); + if (part_ptr->max_nodes == INFINITE) + snprintf(time_buf, sizeof(time_buf), "infinite"); + else { + convert_num_unit((float)part_ptr->max_nodes, + time_buf, UNIT_NONE); + } gtk_tree_store_set(treestore, iter, SORTID_MAX_NODES, - part_ptr->max_nodes, -1); + time_buf, -1); if(part_ptr->root_only) gtk_tree_store_set(treestore, iter, SORTID_ROOT, "yes", -1); @@ -388,10 +401,20 @@ static void _update_part_sub_record(sview_part_sub_t *sview_part_sub, part_ptr->min_nodes, part_ptr->max_nodes, true); gtk_tree_store_set(treestore, iter, SORTID_JOB_SIZE, time_buf, -1); + + convert_num_unit((float)part_ptr->min_nodes, + time_buf, UNIT_NONE); + gtk_tree_store_set(treestore, iter, SORTID_MIN_NODES, - part_ptr->min_nodes, -1); + time_buf, -1); + if (part_ptr->max_nodes == INFINITE) + snprintf(time_buf, sizeof(time_buf), "infinite"); + else { + convert_num_unit((float)part_ptr->max_nodes, + time_buf, UNIT_NONE); + } gtk_tree_store_set(treestore, iter, SORTID_MAX_NODES, - part_ptr->max_nodes, -1); + time_buf, -1); _build_min_max_string(time_buf, sizeof(time_buf), sview_part_sub->min_cpus, @@ -947,6 +970,7 @@ extern GtkListStore *create_model_part(int type) -1); break; + case SORTID_TIMELIMIT: case SORTID_MIN_NODES: break; case SORTID_MAX_NODES: @@ -1037,6 +1061,10 @@ extern void admin_edit_part(GtkCellRendererText *cell, char *type = NULL; int column = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cell), "column")); + + if(!new_text || !strcmp(new_text, "")) + goto no_input; + gtk_tree_model_get_iter(GTK_TREE_MODEL(treestore), &iter, path); if(column != SORTID_STATE) { @@ -1067,14 +1095,26 @@ extern void admin_edit_part(GtkCellRendererText *cell, } type = "hidden"; break; - case SORTID_MIN_NODES: - if (!strcasecmp(new_text, "infinite")) { - part_msg.min_nodes = INFINITE; - } else { - part_msg.min_nodes = + case SORTID_TIMELIMIT: + if ((strcasecmp(new_text,"infinite") == 0)) + part_msg.max_time = INFINITE; + else + part_msg.max_time = (uint32_t)strtol(new_text, (char **)NULL, 10); - } + temp = (char *)new_text; + type = "timelimit"; + if((int32_t)part_msg.max_time <= 0 + && part_msg.max_time != INFINITE) + goto print_error; + break; + case SORTID_MIN_NODES: + part_msg.min_nodes = + (uint32_t)strtol(new_text, (char **)NULL, 10); + + temp = (char *)new_text; type = "min_nodes"; + if((int32_t)part_msg.max_time <= 0) + goto print_error; break; case SORTID_MAX_NODES: if (!strcasecmp(new_text, "infinite")) { @@ -1083,7 +1123,11 @@ extern void admin_edit_part(GtkCellRendererText *cell, part_msg.max_nodes = (uint32_t)strtol(new_text, (char **)NULL, 10); } + temp = (char *)new_text; type = "max_nodes"; + if((int32_t)part_msg.max_time <= 0 + && part_msg.max_nodes != INFINITE) + goto print_error; break; case SORTID_ROOT: if (!strcasecmp(new_text, "yes")) { @@ -1108,6 +1152,8 @@ extern void admin_edit_part(GtkCellRendererText *cell, type = "groups"; break; case SORTID_NODELIST: + temp = (char *)new_text; + part_msg.nodes = temp; type = "nodelist"; break; case SORTID_AVAIL: @@ -1142,11 +1188,20 @@ extern void admin_edit_part(GtkCellRendererText *cell, new_text); display_edit_note(temp); g_free(temp); + } else { + print_error: + temp = g_strdup_printf("Partition %s %s can't be " + "set to %s", + part_msg.name, + type, + new_text); + display_edit_note(temp); + g_free(temp); } g_free(part_msg.name); } - +no_input: gtk_tree_path_free (path); g_static_mutex_unlock(&sview_mutex); diff --git a/src/sview/sview.c b/src/sview/sview.c index 009ceb1409c..c436c5774e8 100644 --- a/src/sview/sview.c +++ b/src/sview/sview.c @@ -110,11 +110,13 @@ void *_page_thr(void *arg) return NULL; } -void *_refresh_thr(void *arg) +void *_refresh_thr(gpointer arg) { + int msg_id = GPOINTER_TO_INT(arg); sleep(5); gdk_threads_enter(); - gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_REFRESH); + gtk_statusbar_remove(GTK_STATUSBAR(main_statusbar), + STATUS_REFRESH, msg_id); gdk_flush(); gdk_threads_leave(); return NULL; @@ -238,11 +240,12 @@ static void _change_refresh(GtkToggleAction *action, gpointer user_data) global_sleep_time); gtk_statusbar_pop(GTK_STATUSBAR(main_statusbar), STATUS_REFRESH); - gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), - STATUS_REFRESH, - temp); + response = gtk_statusbar_push(GTK_STATUSBAR(main_statusbar), + STATUS_REFRESH, + temp); g_free(temp); - if (!g_thread_create(_refresh_thr, NULL, FALSE, &error)) + if (!g_thread_create(_refresh_thr, GINT_TO_POINTER(response), + FALSE, &error)) { g_printerr ("Failed to create refresh thread: %s\n", error->message); -- GitLab