[PVFS2-CVS]
commit by rbross in pvfs2/src/apps/karma: details.c fsview.c
karma.c karma.h status.c
CVS commit program
cvs at parl.clemson.edu
Thu Feb 12 13:32:29 EST 2004
Update of /projects/cvsroot/pvfs2/src/apps/karma
In directory parlweb:/tmp/cvs-serv9778/src/apps/karma
Modified Files:
details.c fsview.c karma.c karma.h status.c
Log Message:
Interim checkin; working on popping up a useful window when user clicks on bars in status view.
Right now a useless window pops up :). I'm modifying the details functions so that I can use
them to create the view in the popup. This will be more useful when a bar represents more than
one server, but will be nice anyway...
Index: details.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/details.c,v
diff -p -u -r1.10 -r1.11
--- details.c 11 Feb 2004 19:12:22 -0000 1.10
+++ details.c 12 Feb 2004 18:32:28 -0000 1.11
@@ -51,77 +51,98 @@ static gint gui_details_text_compare(Gtk
GtkWidget *gui_details_setup(void)
{
+ gui_details_view = gui_details_view_new(&gui_details_list,
+ gui_details_col,
+#ifdef GUI_DETAILS_ENABLE_SORTING
+ 1
+#else
+ 0
+#endif
+ );
+
+ return gui_details_view;
+}
+
+
+/* gui_details_view_new()
+ *
+ * Parameters:
+ * - list_p is a pointer to location to store reference to list store
+ * - col is a pointer to array of tree view columns of size GUI_DETAILS_TYPE+1
+ * - sortable is a boolean indicating if we should enable sorting of cols
+ */
+GtkWidget *gui_details_view_new(GtkListStore **list_p,
+ GtkTreeViewColumn **col,
+ gint sortable)
+{
int i;
+ GtkListStore *list;
+ GtkWidget *list_view;
- gui_details_list = gtk_list_store_new(GUI_DETAILS_TYPE + 1,
- G_TYPE_STRING, /* name */
- G_TYPE_STRING, /* ram total */
- G_TYPE_STRING, /* ram avail */
- G_TYPE_STRING, /* uptime */
- G_TYPE_STRING, /* handles total */
- G_TYPE_STRING, /* handles avail */
- G_TYPE_STRING, /* space total */
- G_TYPE_STRING, /* space avail */
- G_TYPE_STRING); /* server type */
+ list = gtk_list_store_new(GUI_DETAILS_TYPE + 1,
+ G_TYPE_STRING, /* name */
+ G_TYPE_STRING, /* ram total */
+ G_TYPE_STRING, /* ram avail */
+ G_TYPE_STRING, /* uptime */
+ G_TYPE_STRING, /* handles total */
+ G_TYPE_STRING, /* handles avail */
+ G_TYPE_STRING, /* space total */
+ G_TYPE_STRING, /* space avail */
+ G_TYPE_STRING); /* server type */
-
- gui_details_view = gtk_tree_view_new();
+ list_view = gtk_tree_view_new();
for (i=0; i < GUI_DETAILS_TYPE + 1; i++) {
GtkCellRenderer *renderer;
- gui_details_col[i] = gtk_tree_view_column_new();
- gtk_tree_view_column_set_title(gui_details_col[i], column_name[i]);
- gtk_tree_view_append_column(GTK_TREE_VIEW(gui_details_view),
- gui_details_col[i]);
+ col[i] = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col[i], column_name[i]);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(list_view), col[i]);
renderer = gtk_cell_renderer_text_new();
- gtk_tree_view_column_pack_start(gui_details_col[i], renderer, TRUE);
- gtk_tree_view_column_add_attribute(gui_details_col[i],
- renderer,
- "text",
- i);
+ gtk_tree_view_column_pack_start(col[i], renderer, TRUE);
+ gtk_tree_view_column_add_attribute(col[i], renderer, "text", i);
}
- gtk_tree_view_set_model(GTK_TREE_VIEW(gui_details_view),
- GTK_TREE_MODEL(gui_details_list));
+ gtk_tree_view_set_model(GTK_TREE_VIEW(list_view),
+ GTK_TREE_MODEL(list));
- /* NOTE: SORTING CAUSES BIG PROBLEMS; DISABLED UNTIL WE KNOW MORE */
-#ifdef GUI_DETAILS_ENABLE_SORTING
- /* for all the numerical values, set up sorting */
- for (i=1; i < GUI_DETAILS_TYPE; i++) {
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(gui_details_list),
- i,
- gui_details_float_string_compare,
- GINT_TO_POINTER(i),
+ if (sortable) {
+ /* for all the numerical values, set up sorting */
+ for (i=1; i < GUI_DETAILS_TYPE; i++) {
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list),
+ i,
+ gui_details_float_string_compare,
+ GINT_TO_POINTER(i),
+ NULL);
+
+ gtk_tree_view_column_set_sort_column_id(col[i], i);
+ }
+
+ /* for the text values, set up sorting */
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list),
+ GUI_DETAILS_NAME,
+ gui_details_text_compare,
+ GINT_TO_POINTER(GUI_DETAILS_NAME),
NULL);
-
- gtk_tree_view_column_set_sort_column_id(gui_details_col[i], i);
+
+ gtk_tree_view_column_set_sort_column_id(col[GUI_DETAILS_NAME],
+ GUI_DETAILS_NAME);
+
+ gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(list),
+ GUI_DETAILS_TYPE,
+ gui_details_text_compare,
+ GINT_TO_POINTER(GUI_DETAILS_TYPE),
+ NULL);
+
+ gtk_tree_view_column_set_sort_column_id(col[GUI_DETAILS_TYPE],
+ GUI_DETAILS_TYPE);
}
- /* for the text values, set up sorting */
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(gui_details_list),
- GUI_DETAILS_NAME,
- gui_details_text_compare,
- GINT_TO_POINTER(GUI_DETAILS_NAME),
- NULL);
-
- gtk_tree_view_column_set_sort_column_id(gui_details_col[GUI_DETAILS_NAME],
- GUI_DETAILS_NAME);
-
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(gui_details_list),
- GUI_DETAILS_TYPE,
- gui_details_text_compare,
- GINT_TO_POINTER(GUI_DETAILS_TYPE),
- NULL);
-
- gtk_tree_view_column_set_sort_column_id(gui_details_col[GUI_DETAILS_TYPE],
- GUI_DETAILS_TYPE);
-#endif
-
gui_details_initialized = 1;
- return gui_details_view;
+ *list_p = list;
+ return list_view;
}
void gui_details_update(struct PVFS_mgmt_server_stat *server_stat,
Index: fsview.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/fsview.c,v
diff -p -u -r1.3 -r1.4
--- fsview.c 29 Jan 2004 22:49:13 -0000 1.3
+++ fsview.c 12 Feb 2004 18:32:29 -0000 1.4
@@ -70,7 +70,7 @@ void gui_fsview_popup(void)
/* drop the view in a container and go to town */
dialog = gtk_dialog_new_with_buttons("Select File System",
- GTK_WINDOW_TOPLEVEL,
+ GTK_WINDOW(main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_OK,
Index: karma.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/karma.c,v
diff -p -u -r1.7 -r1.8
--- karma.c 11 Feb 2004 19:12:22 -0000 1.7
+++ karma.c 12 Feb 2004 18:32:29 -0000 1.8
@@ -10,7 +10,7 @@
static gint status_timer_callback(gpointer data);
static gint traffic_timer_callback(gpointer data);
-static GtkWidget *main_window;
+GtkWidget *main_window;
static gint delete_event(GtkWidget *widget,
GdkEvent *event,
Index: karma.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/karma.h,v
diff -p -u -r1.8 -r1.9
--- karma.h 10 Feb 2004 18:15:43 -0000 1.8
+++ karma.h 12 Feb 2004 18:32:29 -0000 1.9
@@ -5,6 +5,9 @@
#include "pint-sysint-utils.h"
#include "server-config.h"
+/* reference to the main window, for popups etc. */
+extern GtkWidget *main_window;
+
/* setting window title (from karma.c) */
void gui_set_title(char *title);
@@ -90,6 +93,9 @@ extern GtkListStore *gui_comm_fslist;
GtkWidget *gui_details_setup(void);
void gui_details_update(struct PVFS_mgmt_server_stat *server_stat,
int server_stat_ct);
+GtkWidget *gui_details_view_new(GtkListStore **list_p,
+ GtkTreeViewColumn **col,
+ gint sortable);
/* status page interface (status.c) */
GtkWidget *gui_status_setup(void);
Index: status.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/apps/karma/status.c,v
diff -p -u -r1.2 -r1.3
--- status.c 10 Feb 2004 18:15:44 -0000 1.2
+++ status.c 12 Feb 2004 18:32:29 -0000 1.3
@@ -68,6 +68,12 @@ static gint gui_status_graph_expose_call
static gint gui_status_graph_configure_callback(GtkWidget *drawing_area,
GdkEvent *event,
gpointer graph_state_ptr);
+static gint gui_status_graph_button_press_callback(GtkWidget *drawing_area,
+ GdkEventButton *event,
+ gpointer graph_state_ptr);
+
+static void gui_status_server_popup(struct PVFS_mgmt_server_stat *svr_stat,
+ int svr_index);
/* gui_status_setup()
*
@@ -350,6 +356,7 @@ static GtkWidget *gui_status_graph_setup
{
int i;
GtkWidget *hbox;
+ gint events;
/* create frame and vbox */
g_state->frame = gtk_frame_new("");
@@ -401,6 +408,15 @@ static GtkWidget *gui_status_graph_setup
G_CALLBACK(gui_status_graph_expose_callback),
(gpointer) g_state);
+ events = gtk_widget_get_events(GTK_WIDGET(g_state->drawing_area));
+ events |= GDK_BUTTON_PRESS_MASK;
+ gtk_widget_set_events(GTK_WIDGET(g_state->drawing_area), events);
+
+ g_signal_connect(G_OBJECT(g_state->drawing_area),
+ "button_press_event",
+ G_CALLBACK(gui_status_graph_button_press_callback),
+ (gpointer) g_state);
+
return g_state->frame;
}
@@ -480,3 +496,112 @@ static gint gui_status_graph_expose_call
return 0;
}
+static gint gui_status_graph_button_press_callback(GtkWidget *drawing_area,
+ GdkEventButton *event,
+ gpointer graph_state_ptr)
+{
+ gint i, width, height, graphwidth, graphoffset, barspace, barheight;
+ gint topspace = 20;
+ struct gui_status_graph_state *g_state;
+ struct PVFS_mgmt_server_stat *svr_stat;
+ int svr_stat_ct;
+
+ g_state = (struct gui_status_graph_state *) graph_state_ptr;
+
+ assert(g_state != NULL);
+ assert(g_state->drawing_area == drawing_area);
+
+ /* ignore anything that isn't a double-click */
+ if (event->type != GDK_2BUTTON_PRESS) return 0;
+
+ /* calculate bar placement */
+ width = drawing_area->allocation.width;
+ height = drawing_area->allocation.height;
+ graphwidth = (int) (0.8 * (float) width);
+ graphoffset = (width - graphwidth) / 2;
+ barspace = (gint) (((float) ((height - topspace) / g_state->nr_bars)) *
+ 0.30);
+ barheight = ((height-topspace) - g_state->nr_bars*barspace) /
+ g_state->nr_bars;
+ assert(barheight > 0);
+
+ /* aesthetics: limit maximum bar height */
+ if (barheight > (height - topspace) / 8) {
+ barheight = (height - topspace) / 8;
+ }
+
+ i = (((gint) event->y) - topspace) / (barheight + barspace);
+ if (i >= g_state->nr_bars)
+ {
+ return 0; /* button press past bars */
+ }
+ else if (((gint) event->y) - topspace - (i * (barheight+barspace)) >
+ barheight)
+ {
+ return 0; /* button press in space after a legitimate bar */
+ }
+
+ /* button was pressed on bar i */
+
+ /* currently we display bars in server order, so no mapping necessary */
+ gui_comm_stats_retrieve(&svr_stat, &svr_stat_ct);
+
+ /* if # of servers just changed, just ignore the click for now */
+ if (svr_stat_ct != g_state->nr_bars) return 0;
+
+ gui_status_server_popup(svr_stat, i);
+
+ return 0;
+}
+
+static void gui_status_server_popup(struct PVFS_mgmt_server_stat *svr_stat,
+ int svr_index)
+{
+ GtkWidget *dialog, *label, *frame, *table;
+ char buf[64];
+
+ dialog = gtk_dialog_new_with_buttons("Server Details",
+ GTK_WINDOW(main_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_NONE,
+ NULL);
+ g_signal_connect_swapped(GTK_OBJECT(dialog),
+ "response",
+ G_CALLBACK(gtk_widget_destroy),
+ GTK_OBJECT(dialog));
+
+ /* format data for presentation */
+ frame = gtk_frame_new(svr_stat[svr_index].bmi_address);
+ gtk_frame_set_label_align(GTK_FRAME(frame), 0.0, 0.0);
+
+ table = gtk_table_new(2, 5, 1);
+ gtk_container_add(GTK_CONTAINER(frame), table);
+
+ label = gtk_label_new("Space Available/Total:");
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1);
+
+ label = gtk_label_new("Memory Available/Total:");
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2);
+
+ label = gtk_label_new("Handles Available/Total:");
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3);
+
+ label = gtk_label_new("Uptime:");
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach(GTK_TABLE(table), label, 0, 1, 3, 4,
+ 0, GTK_FILL|GTK_EXPAND, 0, 0);
+
+ label = gtk_label_new("Server Type:");
+ gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_RIGHT);
+ gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 4, 5);
+
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),
+ frame);
+ gtk_widget_show_all(dialog);
+
+ return;
+}
More information about the PVFS2-CVS
mailing list