#include <glib.h>
#include <gtk/gtk.h>
-#include "fio_initialization.h"
#include "fio.h"
#define ARRAYSIZE(x) (sizeof((x)) / (sizeof((x)[0])))
char **argv;
GtkWidget *window;
GtkWidget *vbox;
+ GtkWidget *topvbox;
+ GtkWidget *topalign;
+ GtkWidget *bottomalign;
GtkWidget *thread_status_pb;
GtkWidget *buttonbox;
GtkWidget *button[ARRAYSIZE(buttonspeclist)];
GtkWidget *jobfile_hbox;
GtkWidget *jobfile_label;
GtkWidget *jobfile_entry;
+ GtkWidget *scrolled_window;
+ GtkWidget *textview;
+ GtkTextBuffer *text;
pthread_t t;
} ui;
static void gfio_text_op(struct fio_client *client,
FILE *f, __u16 pdu_len, const char *buf)
{
- printf("gfio_text_op called\n");
- fio_client_ops.text_op(client, f, pdu_len, buf);
+ GtkTextBuffer *buffer;
+ GtkTextIter end;
+
+ buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(ui.textview));
+ gdk_threads_enter();
+ gtk_text_buffer_get_end_iter(buffer, &end);
+ gtk_text_buffer_insert(buffer, &end, buf, -1);
+ gdk_threads_leave();
+ gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(ui.textview),
+ &end, 0.0, FALSE, 0.0,0.0);
}
static void gfio_disk_util_op(struct fio_client *client, struct fio_net_cmd *cmd)
{
int i;
- ui->buttonbox = gtk_hbox_new(FALSE, 0);
- gtk_container_add(GTK_CONTAINER (ui->vbox), ui->buttonbox);
for (i = 0; i < nbuttons; i++)
add_button(ui, i, ui->buttonbox, &buttonlist[i]);
}
ui->vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER (ui->window), ui->vbox);
+ /*
+ * Set up alignments for widgets at the top of ui,
+ * align top left, expand horizontally but not vertically
+ */
+ ui->topalign = gtk_alignment_new(0, 0, 1, 0);
+ ui->topvbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(ui->topalign), ui->topvbox);
+ gtk_box_pack_start(GTK_BOX(ui->vbox), ui->topalign, FALSE, FALSE, 0);
+
/*
* Set up hostname label + entry, port label + entry,
*/
gtk_container_add(GTK_CONTAINER (ui->hostname_hbox), ui->port_label);
gtk_container_add(GTK_CONTAINER (ui->hostname_hbox), ui->port_entry);
gtk_container_add(GTK_CONTAINER (ui->hostname_hbox), ui->hostname_combo_box);
- gtk_container_add(GTK_CONTAINER (ui->vbox), ui->hostname_hbox);
+ gtk_container_add(GTK_CONTAINER (ui->topvbox), ui->hostname_hbox);
/*
* Set up jobfile text entry (temporary until gui really works)
ui->jobfile_entry = gtk_entry_new();
gtk_container_add(GTK_CONTAINER (ui->jobfile_hbox), ui->jobfile_label);
gtk_container_add(GTK_CONTAINER (ui->jobfile_hbox), ui->jobfile_entry);
- gtk_container_add(GTK_CONTAINER (ui->vbox), ui->jobfile_hbox);
+ gtk_container_add(GTK_CONTAINER (ui->topvbox), ui->jobfile_hbox);
/*
* Set up thread status progress bar
GTK_PROGRESS_BAR(ui->thread_status_pb), 0.0);
gtk_progress_bar_set_text(
GTK_PROGRESS_BAR(ui->thread_status_pb), "No jobs running");
- gtk_container_add(GTK_CONTAINER (ui->vbox), ui->thread_status_pb);
+ gtk_container_add(GTK_CONTAINER (ui->topvbox), ui->thread_status_pb);
+
+ /*
+ * Add a text box for text op messages
+ */
+ ui->textview = gtk_text_view_new();
+ ui->text = gtk_text_view_get_buffer(GTK_TEXT_VIEW(ui->textview));
+ gtk_text_buffer_set_text(ui->text, "", -1);
+ gtk_text_view_set_editable(GTK_TEXT_VIEW(ui->textview), FALSE);
+ gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(ui->textview), FALSE);
+ ui->scrolled_window = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ui->scrolled_window),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_container_add(GTK_CONTAINER(ui->scrolled_window), ui->textview);
+ gtk_box_pack_start(GTK_BOX(ui->vbox), ui->scrolled_window,
+ TRUE, TRUE, 0);
+
+ /*
+ * Set up alignments for widgets at the bottom of ui,
+ * align bottom left, expand horizontally but not vertically
+ */
+ ui->bottomalign = gtk_alignment_new(0, 1, 1, 0);
+ ui->buttonbox = gtk_hbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(ui->bottomalign), ui->buttonbox);
+ gtk_box_pack_start(GTK_BOX(ui->vbox), ui->bottomalign,
+ FALSE, FALSE, 0);
add_buttons(ui, buttonspeclist, ARRAYSIZE(buttonspeclist));
gtk_widget_show_all(ui->window);