summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Bornecrantz <jakob@vmware.com>2009-11-29 15:01:28 +0000
committerJakob Bornecrantz <jakob@vmware.com>2009-11-29 15:01:28 +0000
commitcc6ab3cd21b27c0fabd3b46bccf9b8ccd41cc885 (patch)
tree07c09dc50f10f5e568ece93f78ed48ff3a6d39d1
parent5869ae04196ffeb3be8ad8380cb6fef3ed7f4fba (diff)
Make the statusbar show what ever is in the treemodelmesa_7_7
Entities like textures set data in the treemodel and we later retrive that to show in the UI. This could be done a bit differently but we want to move towards a more ModelViewStore model. So we can easily add new UI elements without having to change the code that talks rbug to the driver.
-rw-r--r--src/main.c63
-rw-r--r--src/program.h4
2 files changed, 67 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 85ec359..830b309 100644
--- a/src/main.c
+++ b/src/main.c
@@ -149,6 +149,61 @@ static void changed(GtkTreeSelection *s, gpointer data)
}
}
+/**
+ * Update the statusbar.
+ *
+ * Called when the data of the currently view entity
+ * has change or a different entity is viewed.
+ */
+static void update_statusbar(struct program *p)
+{
+ GtkTreeModel *model = GTK_TREE_MODEL(p->main.treestore);
+ GValue string;
+
+ gtk_statusbar_pop(p->main.statusbar, p->main.sb_id);
+
+ if (!p->viewed.id)
+ return;
+
+ memset(&string, 0, sizeof(string));
+ gtk_tree_model_get_value(model, &p->viewed.iter,
+ COLUMN_INFO_LONG, &string);
+
+ if (g_value_get_string(&string))
+ gtk_statusbar_push(p->main.statusbar, p->main.sb_id, g_value_get_string(&string));
+
+ g_value_unset(&string);
+}
+
+/**
+ * Update the UI on changes.
+ *
+ * When ever the database holding all the object infromation
+ * changes check if the currently selected item changed and
+ * update the UI. For now only the status bar.
+ */
+static void row_changed(GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ struct program *p)
+{
+ GValue id;
+
+ (void)path;
+
+ memset(&id, 0, sizeof(id));
+
+ gtk_tree_model_get_value(model, iter, COLUMN_ID, &id);
+
+ g_assert(G_VALUE_HOLDS_UINT64(&id));
+
+ if (p->viewed.id == g_value_get_uint64(&id)) {
+ update_statusbar(p);
+ }
+
+ g_value_unset(&id);
+}
+
static void refresh(GtkWidget *widget, gpointer data)
{
struct program *p = (struct program *)data;
@@ -331,6 +386,8 @@ void main_set_viewed(GtkTreeIter *iter, gboolean force_update, struct program *p
memset(&p->viewed, 0, sizeof(p->viewed));
}
+ update_statusbar(p);
+
if (p->viewed.id != old_id ||
p->viewed.type != old_type) {
if (old_id) {
@@ -368,6 +425,7 @@ void main_window_create(struct program *p)
GtkWidget *textview_scrolled;
GtkTreeView *treeview;
GtkTreeStore *treestore;
+ GtkStatusbar *statusbar;
GObject *tool_quit;
GObject *tool_refresh;
@@ -400,6 +458,7 @@ void main_window_create(struct program *p)
treeview = GTK_TREE_VIEW(gtk_builder_get_object(builder, "treeview"));
treestore = GTK_TREE_STORE(gtk_builder_get_object(builder, "treestore"));
selection = G_OBJECT(gtk_tree_view_get_selection(treeview));
+ statusbar = GTK_STATUSBAR(gtk_builder_get_object(builder, "statusbar"));
context_view = GTK_WIDGET(gtk_builder_get_object(builder, "context_view"));
textview_scrolled = GTK_WIDGET(gtk_builder_get_object(builder, "textview_scrolled"));
@@ -428,10 +487,13 @@ void main_window_create(struct program *p)
/* manualy set up signals */
g_signal_connect(selection, "changed", G_CALLBACK(changed), p);
+ g_signal_connect(treestore, "row-changed", G_CALLBACK(row_changed), p);
g_signal_connect(tool_quit, "clicked", G_CALLBACK(destroy), p);
g_signal_connect(tool_refresh, "clicked", G_CALLBACK(refresh), p);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), p);
+ p->main.sb_id = gtk_statusbar_get_context_id(statusbar, "texture");
+
p->context.ra[CTX_VIEW_FRAGMENT] = gtk_builder_get_object(builder, "ra_ctx_fragment");
p->context.ra[CTX_VIEW_VERTEX] = gtk_builder_get_object(builder, "ra_ctx_vertex");
p->context.ra[CTX_VIEW_GEOM] = gtk_builder_get_object(builder, "ra_ctx_geom");
@@ -469,6 +531,7 @@ void main_window_create(struct program *p)
p->main.textview = textview;
p->main.treeview = treeview;
p->main.treestore = treestore;
+ p->main.statusbar = statusbar;
p->main.context_view = context_view;
p->main.textview_scrolled = textview_scrolled;
diff --git a/src/program.h b/src/program.h
index 462e714..a04b456 100644
--- a/src/program.h
+++ b/src/program.h
@@ -114,6 +114,10 @@ struct program
GtkTreeView *treeview;
GtkTreeStore *treestore;
GtkDrawingArea *draw;
+ GtkStatusbar *statusbar;
+
+ /* status bar context id */
+ guint sb_id;
GtkTreeIter top;
} main;