aboutsummaryrefslogtreecommitdiff
path: root/lib/gtk-experiment-widgets
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gtk-experiment-widgets')
-rw-r--r--lib/gtk-experiment-widgets/gtk-experiment-navigator.c82
1 files changed, 81 insertions, 1 deletions
diff --git a/lib/gtk-experiment-widgets/gtk-experiment-navigator.c b/lib/gtk-experiment-widgets/gtk-experiment-navigator.c
index b37cb4f..d9cb05d 100644
--- a/lib/gtk-experiment-widgets/gtk-experiment-navigator.c
+++ b/lib/gtk-experiment-widgets/gtk-experiment-navigator.c
@@ -4,6 +4,9 @@
#include <assert.h>
+#include <glib.h>
+#include <glib/gprintf.h>
+
#include <gtk/gtk.h>
#include <experiment-reader.h>
@@ -12,6 +15,12 @@
static void gtk_experiment_navigator_class_init(GtkExperimentNavigatorClass *klass);
static void gtk_experiment_navigator_init(GtkExperimentNavigator *klass);
+static void time_cell_data_cb(GtkTreeViewColumn *col,
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model, GtkTreeIter *iter,
+ gpointer user_data);
+
+
static inline void select_time(GtkExperimentNavigator *navi, gint64 selected_time);
enum {
@@ -68,11 +77,82 @@ gtk_experiment_navigator_class_init(GtkExperimentNavigatorClass *klass)
static void
gtk_experiment_navigator_init(GtkExperimentNavigator *klass)
{
- GtkTreeView *view = GTK_TREE_VIEW(klass);
+ GtkTreeView *view = GTK_TREE_VIEW(klass);
+ GtkTreeViewColumn *col;
+ GtkCellRenderer *renderer;
+
+ GtkTreeStore *store;
+ GtkTreeIter toplevel, child;
+
+ /*
+ * Create tree store (and model)
+ */
+ store = gtk_tree_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_UINT64);
+
+ /*
+ * Create some sample(!) store rows and content
+ */
+ gtk_tree_store_append(store, &toplevel, NULL);
+ gtk_tree_store_set(store, &toplevel,
+ COL_SECTION_NAME, "FOO", -1);
+
+ gtk_tree_store_append(store, &child, &toplevel);
+ gtk_tree_store_set(store, &child,
+ COL_SECTION_NAME, "BAR",
+ COL_TIME, 5*60*1000 /* 5 minutes */,
+ -1);
+
+ /*
+ * Create TreeView column corresponding to the TreeStore column COL_SECTION_NAME
+ */
+ col = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col, "Name");
+ gtk_tree_view_append_column(view, col);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
+ gtk_tree_view_column_add_attribute(col, renderer, "text", COL_SECTION_NAME);
+
+ /*
+ * Create TreeView column corresponding to the TreeStore column COL_TIME
+ */
+ col = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(col, "Time");
+ gtk_tree_view_append_column(view, col);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_start(col, renderer, TRUE);
+ /* Cell data function for custom formatting */
+ gtk_tree_view_column_set_cell_data_func(col, renderer, time_cell_data_cb,
+ NULL, NULL);
+
+ /*
+ * Set TreeView model to store's model
+ */
+ gtk_tree_view_set_model(view, GTK_TREE_MODEL(store));
+ /* destroy store/model automatically with view */
+ g_object_unref(store);
/* TODO */
}
+static void
+time_cell_data_cb(GtkTreeViewColumn *col __attribute__((unused)),
+ GtkCellRenderer *renderer,
+ GtkTreeModel *model, GtkTreeIter *iter,
+ gpointer user_data __attribute__((unused)))
+{
+ gint64 time_val;
+ gchar buf[20];
+
+ gtk_tree_model_get(model, iter,
+ COL_TIME, &time_val, -1);
+
+ g_snprintf(buf, sizeof(buf), "%lldms", time_val); /* FIXME */
+
+ g_object_set(renderer, "text", buf, NULL);
+}
+
static inline void
select_time(GtkExperimentNavigator *navi, gint64 selected_time)
{