* gfio - gui front end for fio - the flexible io tester
*
* Copyright (C) 2012 Stephen M. Cameron <stephenmcameron@gmail.com>
+ * Copyright (C) 2012 Jens Axboe <axboe@kernel.dk>
*
* The license below covers all files distributed with fio unless otherwise
* noted in the file itself.
GtkWidget *results_window;
GtkListStore *log_model;
GtkWidget *log_tree;
+ GtkWidget *log_view;
GtkTextBuffer *text;
struct probe_widget probe;
struct eta_widget eta;
gtk_widget_set_sensitive(ui->button[START_JOB_BUTTON], 1);
ui->connected = 1;
gtk_button_set_label(GTK_BUTTON(ui->button[CONNECT_BUTTON]), "Disconnect");
+ gtk_widget_set_sensitive(ui->button[CONNECT_BUTTON], 1);
} else {
ui->connected = 0;
gtk_button_set_label(GTK_BUTTON(ui->button[CONNECT_BUTTON]), "Connect");
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
+ g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
+ "enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH, NULL);
tree_view_column(tree_view, 0, "Time", ALIGN_RIGHT | UNSORTABLE);
tree_view_column(tree_view, 1, "Host", ALIGN_RIGHT | UNSORTABLE);
tree_view_column(tree_view, 2, "Level", ALIGN_RIGHT | UNSORTABLE);
- tree_view_column(tree_view, 3, "Text", ALIGN_RIGHT | UNSORTABLE);
+ tree_view_column(tree_view, 3, "Text", ALIGN_LEFT | UNSORTABLE);
ui->log_model = model;
ui->log_tree = tree_view;
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
gtk_widget_set_can_focus(tree_view, FALSE);
+ g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
+ "enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH, NULL);
+
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
gtk_widget_set_can_focus(tree_view, FALSE);
+ g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
+ "enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH, NULL);
+
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
tree_view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(model));
gtk_widget_set_can_focus(tree_view, FALSE);
+ g_object_set(G_OBJECT(tree_view), "headers-visible", TRUE,
+ "enable-grid-lines", GTK_TREE_VIEW_GRID_LINES_BOTH, NULL);
+
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
gtk_tree_selection_set_mode(GTK_TREE_SELECTION(selection), GTK_SELECTION_BROWSE);
static void gfio_probe_op(struct fio_client *client, struct fio_net_cmd *cmd)
{
struct cmd_probe_pdu *probe = (struct cmd_probe_pdu *) cmd->payload;
+ struct gfio_client *gc = client->client_data;
+ struct gui *ui = gc->ui;
const char *os, *arch;
char buf[64];
gdk_threads_enter();
- gtk_label_set_text(GTK_LABEL(ui.probe.hostname), (char *) probe->hostname);
- gtk_label_set_text(GTK_LABEL(ui.probe.os), os);
- gtk_label_set_text(GTK_LABEL(ui.probe.arch), arch);
+ gtk_label_set_text(GTK_LABEL(ui->probe.hostname), (char *) probe->hostname);
+ gtk_label_set_text(GTK_LABEL(ui->probe.os), os);
+ gtk_label_set_text(GTK_LABEL(ui->probe.arch), arch);
sprintf(buf, "%u.%u.%u", probe->fio_major, probe->fio_minor, probe->fio_patch);
- gtk_label_set_text(GTK_LABEL(ui.probe.fio_ver), buf);
+ gtk_label_set_text(GTK_LABEL(ui->probe.fio_ver), buf);
+
+ gfio_set_connected(ui, 1);
gdk_threads_leave();
}
if (!ui->nr_job_files)
file_open(widget, data);
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ui->thread_status_pb), "No jobs running");
- fio_clients_connect();
- pthread_create(&ui->t, NULL, job_thread, NULL);
- gfio_set_connected(ui, 1);
+ if (!fio_clients_connect()) {
+ pthread_create(&ui->t, NULL, job_thread, NULL);
+ gtk_widget_set_sensitive(ui->button[CONNECT_BUTTON], 0);
+ }
} else {
fio_clients_terminate();
gfio_set_connected(ui, 0);
hbox = gtk_hbox_new(TRUE, 4);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
- combo = gtk_combo_box_text_new();
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "IPv4");
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "IPv6");
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), "local socket");
+ combo = gtk_combo_box_new_text();
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "IPv4");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "IPv6");
+ gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "local socket");
gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0);
gtk_container_add(GTK_CONTAINER(hbox), combo);
*host = strdup(gtk_entry_get_text(GTK_ENTRY(hentry)));
*port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pentry));
- typeentry = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo));
+ typeentry = gtk_combo_box_get_active_text(GTK_COMBO_BOX(combo));
if (!typeentry || !strncmp(typeentry, "IPv4", 4))
*type = Fio_client_ipv4;
else if (!strncmp(typeentry, "IPv6", 4))
gtk_widget_ref(ui->log_tree);
gtk_container_remove(GTK_CONTAINER(w), ui->log_tree);
gtk_widget_destroy(w);
+ ui->log_view = NULL;
}
static void view_log(GtkWidget *w, gpointer data)
{
- GtkWidget *win, *box;
+ GtkWidget *win, *scroll, *vbox, *box;
+ struct gui *ui = (struct gui *) data;
- win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ if (ui->log_view)
+ return;
+
+ ui->log_view = win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(win), "Log");
+ gtk_window_set_default_size(GTK_WINDOW(win), 700, 500);
- box = gtk_hbox_new(FALSE, 3);
- gtk_container_add(GTK_CONTAINER(win), box);
+ scroll = gtk_scrolled_window_new(NULL, NULL);
+
+ gtk_container_set_border_width(GTK_CONTAINER(scroll), 5);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+ box = gtk_hbox_new(TRUE, 0);
+ gtk_box_pack_start_defaults(GTK_BOX(box), ui->log_tree);
+ g_signal_connect(box, "destroy", G_CALLBACK(view_log_destroy), ui);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll), box);
+
+ vbox = gtk_vbox_new(TRUE, 5);
+ gtk_box_pack_start_defaults(GTK_BOX(vbox), scroll);
- g_signal_connect(box, "delete-event", G_CALLBACK(view_log_destroy), (gpointer) &ui);
- g_signal_connect(box, "destroy", G_CALLBACK(view_log_destroy), (gpointer) &ui);
- gtk_container_add(GTK_CONTAINER(box), ui.log_tree);
+ gtk_container_add(GTK_CONTAINER(win), vbox);
gtk_widget_show_all(win);
}
</ui> \
";
-static GtkWidget *get_menubar_menu(GtkWidget *window, GtkUIManager *ui_manager)
+static GtkWidget *get_menubar_menu(GtkWidget *window, GtkUIManager *ui_manager,
+ struct gui *ui)
{
GtkActionGroup *action_group = gtk_action_group_new("Menu");
GError *error = 0;
action_group = gtk_action_group_new("Menu");
- gtk_action_group_add_actions(action_group, menu_items, nmenu_items, 0);
+ gtk_action_group_add_actions(action_group, menu_items, nmenu_items, ui);
gtk_ui_manager_insert_action_group(ui_manager, action_group, 0);
gtk_ui_manager_add_ui_from_string(GTK_UI_MANAGER(ui_manager), ui_string, -1, &error);
gtk_container_add(GTK_CONTAINER (ui->window), ui->vbox);
uimanager = gtk_ui_manager_new();
- menu = get_menubar_menu(ui->window, uimanager);
+ menu = get_menubar_menu(ui->window, uimanager, ui);
gfio_ui_setup(settings, menu, ui->vbox, uimanager);
/*