[tracker] Add relationships pane
- From: Robert James Taylor <robtaylor src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker] Add relationships pane
- Date: Mon, 6 Jul 2009 17:44:06 +0000 (UTC)
commit 260424a0a98dfa92c7a5df66277f581cdf647124
Author: Rob Taylor <rob taylor codethink co uk>
Date: Sun May 3 11:02:04 2009 +0100
Add relationships pane
Switch to useing GtkBuilder for ui layout.
Use currently selected object in the search to query for the reltionships of
that object, display in a treeview below the search treeview
src/tracker-explorer/explorer.ui | 118 ++++++++++++++++++++++++++++
src/tracker-explorer/explorer.vala | 149 ++++++++++++++++++++++++++----------
2 files changed, 225 insertions(+), 42 deletions(-)
---
diff --git a/src/tracker-explorer/explorer.ui b/src/tracker-explorer/explorer.ui
new file mode 100644
index 0000000..18edc78
--- /dev/null
+++ b/src/tracker-explorer/explorer.ui
@@ -0,0 +1,118 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkWindow" id="explorer">
+ <property name="default_width">400</property>
+ <property name="default_height">600</property>
+ <child>
+ <object class="GtkVPaned" id="vpaned1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="orientation">vertical</property>
+ <property name="position">200</property>
+ <property name="position_set">True</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Find:</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="text-search">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkTreeView" id="uris">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkTreeView" id="relationshipsview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="search_column">0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="current-object">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>No object selected</b></property>
+ <property name="use_markup">True</property>
+ <property name="justify">fill</property>
+ <property name="ellipsize">start</property>
+ <property name="single_line_mode">True</property>
+ <property name="max_width_chars">50</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
diff --git a/src/tracker-explorer/explorer.vala b/src/tracker-explorer/explorer.vala
index 138a887..db74dbf 100644
--- a/src/tracker-explorer/explorer.vala
+++ b/src/tracker-explorer/explorer.vala
@@ -11,77 +11,142 @@ interface Resources : GLib.Object {
public class Explorer {
+ private const string UI_FILE = "explorer.ui";
private Resources tracker;
- private ListStore listmodel;
+ private ListStore uris;
+ private ListStore relationships;
+ private Label current_object;
- public Explorer() {
- var conn = DBus.Bus.get (DBus.BusType.SESSION);
- tracker = (Resources) conn.get_object ("org.freedesktop.Tracker",
- "/org/freedesktop/Tracker/Resources",
- "org.freedesktop.Tracker.Resources");
- }
+ public void show() {
+ try {
+ var conn = DBus.Bus.get (DBus.BusType.SESSION);
+ tracker = (Resources) conn.get_object ("org.freedesktop.Tracker",
+ "/org/freedesktop/Tracker/Resources",
+ "org.freedesktop.Tracker.Resources");
+
+
+ var builder = new Builder ();
+ builder.add_from_file (UI_FILE);
- public void setup() {
- var window = new Window (WindowType.TOPLEVEL);
- window.title = "Tracker Explorer";
- window.set_size_request (300, 400);
- window.position = WindowPosition.CENTER;
- window.destroy += Gtk.main_quit;
+ var window = builder.get_object ("explorer") as Window;
+ window.destroy += Gtk.main_quit;
- var vbox = new VBox(false, 0);
- window.add(vbox);
+ var entry = builder.get_object ("text-search") as Entry;
+ entry.changed += entry_changed;
- var entry = new Entry();
- entry.set_text ("Test");
- entry.changed += entry_changed;
- vbox.pack_start(entry, false, false, 0);
+ var urisview = builder.get_object ("uris") as TreeView;
+ setup_uris(urisview);
- var treeview = new TreeView();
- setup_treeview(treeview);
+ var relationshipsview = builder.get_object ("relationshipsview") as TreeView;
+ setup_relationships(relationshipsview);
- var scrolled_window = new ScrolledWindow(null,null);
- scrolled_window.set_policy (PolicyType.AUTOMATIC, PolicyType.AUTOMATIC);
- scrolled_window.add_with_viewport(treeview);
+ current_object = builder.get_object ("current-object") as Label;
+ window.show_all();
+ } catch (GLib.Error e) {
+ var msg = new MessageDialog (null, DialogFlags.MODAL,
+ MessageType.ERROR, ButtonsType.CANCEL,
+ "Failed to load UI\n%s", e.message);
+ msg.run ();
+ Gtk.main_quit();
+ } catch (DBus.Error e) {
+ var msg = new MessageDialog (null, DialogFlags.MODAL,
+ MessageType.ERROR, ButtonsType.CANCEL,
+ "Error connecting to D-Bus session bus\n%s", e.message);
+ msg.run ();
+ Gtk.main_quit();
+ }
+ }
- vbox.pack_start(scrolled_window, true, true, 0);
+ private void setup_uris (TreeView urisview) {
+ uris = new ListStore (1, typeof (string));
+ urisview.set_model (uris);
- window.show_all ();
- window.destroy += Gtk.main_quit;
+ urisview.insert_column_with_attributes (-1, "URI", new CellRendererText (), "text", 0, null);
+ urisview.row_activated += uri_selected;
}
- private void setup_treeview (TreeView view) {
- listmodel = new ListStore (1, typeof (string));
- view.set_model (listmodel);
+ private void setup_relationships(TreeView relationshipsview) {
+ relationships = new ListStore (2, typeof(string), typeof(string));
+ relationshipsview.set_model(relationships);
- view.insert_column_with_attributes (-1, "URI", new CellRendererText (), "text", 0, null);
+ relationshipsview.insert_column_with_attributes (-1, "Relationship", new CellRendererText (), "text", 0, null);
+ relationshipsview.insert_column_with_attributes (-1, "Object", new CellRendererText (), "text", 1, null);
+ relationshipsview.row_activated += object_selected;
}
+
private void entry_changed (Editable editable) {
string query = "SELECT ?s WHERE { ?s fts:match \"%s*\" }".printf(((Entry)editable).text);
- debug ("Query: %s", query);
+ //debug ("Query: %s", query);
try {
var result = tracker.SparqlQuery(query);
- listmodel.clear();
+ uris.clear();
foreach ( var s in result) {
-// debug ("%s", s);
+// //debug ("%s", s);
TreeIter iter;
- listmodel.append (out iter);
- listmodel.set (iter, 0, s, -1);
+ uris.append (out iter);
+ uris.set (iter, 0, s, -1);
}
} catch (DBus.Error e) {
}
}
+ private void update_pane(string uri) {
+ //debug ("updating pane: %s", uri);
+ current_object.set_text (uri);
+
+ string query = "SELECT ?r ?o WHERE { <%s> ?r ?o }".printf(uri);
+ //debug ("query = %s", query);
+ try {
+ var result = tracker.SparqlQuery(query);
+ relationships.clear();
+ //debug ("%d, %d", result.length[0], result.length[1]);
+
+ for (int i=0; i<result.length[0]; i++) {
+ //debug ("%s, %s", result[i,0], result[i,1]);
+ TreeIter iter;
+ relationships.append (out iter);
+ relationships.set (iter, 0, result[i,0], -1);
+ relationships.set (iter, 1, result[i,1], -1);
+ }
+
+ } catch (DBus.Error e) {
+ }
+ }
- static int main (string[] args) {
- Gtk.init (ref args);
+ private void uri_selected(TreeView view, TreePath path, TreeViewColumn column) {
+ TreeIter iter;
+ var model = view.get_model();
+ model.get_iter(out iter, path);
+ weak string uri;
+ model.get (iter, 0, out uri);
+ //debug ("uri selected: %s", uri);
+ update_pane(uri);
+ }
- Explorer e = new Explorer();
- e.setup();
- Gtk.main ();
- return 0;
+ private void object_selected(TreeView view, TreePath path, TreeViewColumn column) {
+ TreeIter iter;
+ var model = view.get_model();
+ model.get_iter(out iter, path);
+ weak string uri;
+ model.get (iter, 1, out uri);
+ //debug ("object selected: %s", uri);
+ update_pane(uri);
}
+
}
+
+
+
+static int main (string[] args) {
+ Gtk.init (ref args);
+
+ Explorer s = new Explorer();
+ s.show();
+ Gtk.main ();
+ return 0;
+}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]