#include "graph.h"
static int gfio_server_running;
+static const char *gfio_graph_font;
static void gfio_update_thread_status(char *status_message, double perc);
GtkWidget *disk_util_frame;
};
+static void add_invisible_data(struct graph *g)
+{
+ /*
+ * This puts some invisible data into a graph so that it will
+ * initially have some grid lines instead of "No good data"
+ */
+ graph_add_label(g, "invisible");
+ graph_set_color(g, "invisible", INVISIBLE_COLOR, 0.0, 0.7);
+ graph_add_xy_data(g, "invisible", 0.0, 0.0);
+ graph_add_xy_data(g, "invisible", 1.0, 100.0);
+}
+
static void setup_iops_graph(struct gui *ui)
{
if (ui->iops_graph)
graph_free(ui->iops_graph);
ui->iops_graph = graph_new(DRAWING_AREA_XDIM / 2.0,
- DRAWING_AREA_YDIM);
+ DRAWING_AREA_YDIM, gfio_graph_font);
graph_title(ui->iops_graph, "IOPS");
graph_x_title(ui->iops_graph, "Time");
graph_y_title(ui->iops_graph, "IOPS");
graph_add_label(ui->iops_graph, "Write IOPS");
graph_set_color(ui->iops_graph, "Read IOPS", 0.7, 0.0, 0.0);
graph_set_color(ui->iops_graph, "Write IOPS", 0.0, 0.0, 0.7);
+ add_invisible_data(ui->iops_graph);
}
static void setup_bandwidth_graph(struct gui *ui)
if (ui->bandwidth_graph)
graph_free(ui->bandwidth_graph);
ui->bandwidth_graph = graph_new(DRAWING_AREA_XDIM / 2.0,
- DRAWING_AREA_YDIM);
+ DRAWING_AREA_YDIM, gfio_graph_font);
graph_title(ui->bandwidth_graph, "Bandwidth");
graph_x_title(ui->bandwidth_graph, "Time");
graph_y_title(ui->bandwidth_graph, "Bandwidth");
graph_add_label(ui->bandwidth_graph, "Write Bandwidth");
graph_set_color(ui->bandwidth_graph, "Read Bandwidth", 0.7, 0.0, 0.0);
graph_set_color(ui->bandwidth_graph, "Write Bandwidth", 0.0, 0.0, 0.7);
+ add_invisible_data(ui->bandwidth_graph);
}
static void clear_ui_info(struct gui *ui)
static void preferences(GtkWidget *w, gpointer data)
{
- GtkWidget *dialog, *frame, *box, **buttons;
+ GtkWidget *dialog, *frame, *box, **buttons, *vbox, *font;
int i;
dialog = gtk_dialog_new_with_buttons("Preferences",
frame = gtk_frame_new("Debug logging");
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
+
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+
box = gtk_hbox_new(FALSE, 6);
- gtk_container_add(GTK_CONTAINER(frame), box);
+ gtk_container_add(GTK_CONTAINER(vbox), box);
buttons = malloc(sizeof(GtkWidget *) * FD_DEBUG_MAX);
for (i = 0; i < FD_DEBUG_MAX; i++) {
+ if (i == 7) {
+ box = gtk_hbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(vbox), box);
+ }
+
+
buttons[i] = gtk_check_button_new_with_label(debug_levels[i].name);
gtk_widget_set_tooltip_text(buttons[i], debug_levels[i].help);
gtk_box_pack_start(GTK_BOX(box), buttons[i], FALSE, FALSE, 6);
}
+ frame = gtk_frame_new("Graph font");
+ gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), frame, FALSE, FALSE, 5);
+ vbox = gtk_vbox_new(FALSE, 6);
+ gtk_container_add(GTK_CONTAINER(frame), vbox);
+
+ font = gtk_font_button_new();
+ gtk_box_pack_start(GTK_BOX(vbox), font, FALSE, FALSE, 5);
+
gtk_widget_show_all(dialog);
if (gtk_dialog_run(GTK_DIALOG(dialog)) != GTK_RESPONSE_ACCEPT) {
fio_debug |= (1UL << i);
}
+ gfio_graph_font = strdup(gtk_font_button_get_font_name(GTK_FONT_BUTTON(font)));
+ printf("got font %s\n", gfio_graph_font);
+
gtk_widget_destroy(dialog);
}
static void about_dialog(GtkWidget *w, gpointer data)
{
+ const char *authors[] = {
+ "Jens Axboe <axboe@kernel.dk>",
+ "Stephen Carmeron <stephenmcameron@gmail.com>",
+ NULL
+ };
+ const char *license[] = {
+ "Fio is free software; you can redistribute it and/or modify "
+ "it under the terms of the GNU General Public License as published by "
+ "the Free Software Foundation; either version 2 of the License, or "
+ "(at your option) any later version.\n",
+ "Fio is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "
+ "GNU General Public License for more details.\n",
+ "You should have received a copy of the GNU General Public License "
+ "along with Fio; if not, write to the Free Software Foundation, Inc., "
+ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n"
+ };
+ char *license_trans;
+
+ license_trans = g_strconcat(license[0], "\n", license[1], "\n",
+ license[2], "\n", NULL);
+
gtk_show_about_dialog(NULL,
"program-name", "gfio",
"comments", "Gtk2 UI for fio",
- "license", "GPLv2",
+ "license", license_trans,
+ "website", "http://git.kernel.dk/?p=fio.git;a=summary",
+ "authors", authors,
"version", fio_version_string,
- "copyright", "Jens Axboe <axboe@kernel.dk> 2012",
+ "copyright", "© 2012 Jens Axboe <axboe@kernel.dk>",
"logo-icon-name", "fio",
/* Must be last: */
- NULL, NULL,
+ "wrap-license", TRUE,
NULL);
+
+ g_free (license_trans);
}
static GtkActionEntry menu_items[] = {
GtkSettings *settings;
GtkUIManager *uimanager;
GtkWidget *menu, *probe, *probe_frame, *probe_box;
+ GdkColor white;
memset(ui, 0, sizeof(*ui));
ui->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(ui->window), "fio");
- gtk_window_set_default_size(GTK_WINDOW(ui->window), 700, 500);
+ gtk_window_set_default_size(GTK_WINDOW(ui->window), 700, 700);
g_signal_connect(ui->window, "delete-event", G_CALLBACK(quit_clicked), NULL);
g_signal_connect(ui->window, "destroy", G_CALLBACK(quit_clicked), NULL);
/*
* Set up a drawing area and IOPS and bandwidth graphs
*/
+ gdk_color_parse("white", &white);
ui->drawing_area = gtk_drawing_area_new();
gtk_widget_set_size_request(GTK_WIDGET(ui->drawing_area),
DRAWING_AREA_XDIM, DRAWING_AREA_YDIM);
+ gtk_widget_modify_bg(ui->drawing_area, GTK_STATE_NORMAL, &white);
g_signal_connect(G_OBJECT(ui->drawing_area), "expose_event",
G_CALLBACK (on_expose_drawing_area), ui);
ui->scrolled_window = gtk_scrolled_window_new(NULL, NULL);