[tracker/new-tracker-search-tool] New tracker search tool - first version
- From: Jamie McCracken <jamiemcc src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/new-tracker-search-tool] New tracker search tool - first version
- Date: Mon, 21 Sep 2009 14:56:22 +0000 (UTC)
commit 5fceea4b16259d17976700d62ea32ed6400379ad
Author: Jamie McCracken <jamiemcc gnome org>
Date: Mon Sep 21 10:58:51 2009 -0400
New tracker search tool - first version
configure.ac | 43 +-
src/tracker-search-tool/Makefile.am | 89 +-
src/tracker-search-tool/tracker-category-view.gs | 91 +
src/tracker-search-tool/tracker-entry.gs | 28 +
src/tracker-search-tool/tracker-query.gs | 65 +
src/tracker-search-tool/tracker-result-grid.gs | 102 +
.../tracker-search-tool-callbacks.c | 1699 --------------
.../tracker-search-tool-callbacks.h | 213 --
.../tracker-search-tool-support.c | 1524 -------------
.../tracker-search-tool-support.h | 180 --
src/tracker-search-tool/tracker-search-tool.c | 2344 --------------------
src/tracker-search-tool/tracker-search-tool.gs | 66 +
src/tracker-search-tool/tracker-utils.gs | 76 +
src/tracker-search-tool/tst.ui | 135 ++
14 files changed, 623 insertions(+), 6032 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 4759a84..653fc79 100644
--- a/configure.ac
+++ b/configure.ac
@@ -813,43 +813,24 @@ AC_ARG_ENABLE(tracker-search-tool,
[enable_tracker_search_tool=auto])
if test "x$enable_tracker_search_tool" != "xno"; then
- PKG_CHECK_MODULES(GNOME_UTILS,
- [libgnome-2.0 >= $LIBGNOME_REQUIRED
- libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED],
- [have_gnome_libs=yes],
- [have_gnome_libs=no])
-
- AC_SUBST(GNOME_UTILS_CFLAGS)
- AC_SUBST(GNOME_UTILS_LIBS)
-
- PKG_CHECK_MODULES(GNOMEDESKTOP,
- [gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED],
- [have_gnome_desktop=yes],
- [have_gnome_desktop=no])
-
- AC_SUBST(GNOMEDESKTOP_CFLAGS)
- AC_SUBST(GNOMEDESKTOP_LIBS)
-
- if test "x$have_gnome_libs" != "xyes"; then
- tracker_search_tool_error="Couldn't find GNOME library dependencies (libgnome-2.0 >= $LIBGNOME_REQUIRED, libgnomeui-2.0 >= $LIBGNOMEUI_REQUIRED)."
- have_tracker_search_tool="no"
- elif test "x$have_gnome_desktop" != "xyes"; then
- tracker_search_tool_error="Couldn't find GNOME desktop dependencies (gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED)."
- have_tracker_search_tool="no"
- elif test "x$have_libtrackergtk" != "xyes"; then
- tracker_search_tool_error="Not building tracker-search-tool because libtracker-gtk is disabled or missing dependencies."
- have_tracker_search_tool="no"
- else
- have_tracker_search_tool="yes"
- GNOME_COMMON_INIT
- fi
+ PKG_CHECK_MODULES(TRACKER_SEARCH_TOOL, [
+ glib-2.0 >= $GLIB_REQUIRED
+ gtk+-2.0 >= $GTK_REQUIRED
+ dbus-1 >= $DBUS_REQUIRED
+ dbus-glib-1 >= $DBUS_REQUIRED
+ gee-1.0 >= $GEE_REQUIRED],
+ [have_tracker_search_tool=yes],
+ [have_tracker_search_tool=no])
+
+ AC_SUBST([TRACKER_SEARCH_TOOL_CFLAGS])
+ AC_SUBST([TRACKER_SEARCH_TOOL_LIBS])
else
have_tracker_search_tool="no (disabled)"
fi
if test "x$enable_tracker_search_tool" = "xyes"; then
if test "x$have_tracker_search_tool" != "xyes"; then
- AC_MSG_ERROR([$tracker_search_tool_error])
+ AC_MSG_ERROR([Couldn't find tracker-search-tool dependencies (glib-2.0 >= $GLIB_REQUIRED, gtk+-2.0 >= $GTK_REQUIRED, dbus-1 >= $DBUS_REQUIRED, dbus-glib-1 >= $DBUS_REQUIRED, gee-1.0 >= $GEE_REQUIRED).])
fi
fi
diff --git a/src/tracker-search-tool/Makefile.am b/src/tracker-search-tool/Makefile.am
index b6a9f8c..10ae4f4 100644
--- a/src/tracker-search-tool/Makefile.am
+++ b/src/tracker-search-tool/Makefile.am
@@ -1,50 +1,57 @@
include $(top_srcdir)/Makefile.decl
- INTLTOOL_DESKTOP_RULE@
-
-INCLUDES = \
- -DG_DISABLE_DEPRECATED \
- -DTRACKER_LOCALEDIR=\""$(localedir)"\" \
- -DTRACKER_DATADIR=\""$(datadir)"\" \
- -DGREP_COMMAND=\""$(GREP_COMMAND)"\" \
- -I$(top_srcdir)/src/ \
- $(WARN_CFLAGS) \
- $(GLIB2_CFLAGS) \
- $(GCOV_CFLAGS) \
- $(GIO_CFLAGS) \
- $(DBUS_CFLAGS) \
- $(GNOME_UTILS_CFLAGS) \
- $(GNOMEDESKTOP_CFLAGS) \
- $(LIBTRACKERGTK_CFLAGS)
-
bin_PROGRAMS = tracker-search-tool
-tracker_search_tool_SOURCES = \
- tracker-search-tool-support.c \
- tracker-search-tool-support.h \
- tracker-search-tool-callbacks.c \
- tracker-search-tool-callbacks.h \
- tracker-search-tool.c \
- tracker-search-tool.h
-
-tracker_search_tool_LDADD = \
- $(GLIB2_LIBS) \
- $(GNOME_UTILS_LIBS) \
- $(GIO_LIBS) \
- $(GCOV_LIBS) \
- $(GNOMEDESKTOP_LIBS) \
- $(DBUS_LIBS) \
- $(top_builddir)/src/libtracker-gtk/libtracker-gtk- TRACKER_API_VERSION@.la \
- $(top_builddir)/src/libtracker-client/libtracker-client- TRACKER_API_VERSION@.la
+tracker_search_tool_VALASOURCES = \
+ tracker-query.gs \
+ tracker-entry.gs \
+ tracker-result-grid.gs \
+ tracker-search-tool.gs \
+ tracker-category-view.gs \
+ tracker-utils.gs \
+ $(NULL)
-desktopdir = $(datadir)/applications
-desktop_DATA = tracker-search-tool.desktop
+tracker_search_tool_SOURCES = \
+ $(tracker_search_tool_VALASOURCES:.gs=.c) \
+ $(NULL)
-icondir = $(datadir)/tracker/icons
-icon_DATA = thumbnail_frame.png
+tracker_search_tool.gs.stamp: $(tracker_search_tool_VALASOURCES)
+ $(VALAC) -C -g --pkg dbus-glib-1 --pkg gee-1.0 --pkg gtk+-2.0 $^
+ touch tracker_search_tool.gs.stamp
-EXTRA_DIST = $(icon_DATA)
-
-CLEANFILES = $(desktop_DATA)
+tracker_search_tool_CFLAGS = \
+ -DTRACKER_UI_DIR=\"$(datadir)/tracker/\" \
+ -DSRCDIR=\"$(abs_srcdir)/\" \
+ $(WARN_CFLAGS) \
+ $(GCOV_CFLAGS) \
+ $(TRACKER_SEARCH_TOOL_CFLAGS) \
+ -include$(top_srcdir)/config.h \
+ $(NULL)
+
+tracker_search_tool_LDADD = \
+ $(GCOV_LIBS) \
+ $(TRACKER_SEARCH_TOOL_LIBS) \
+ $(NULL)
+
+uidir = $(datadir)/tracker
+ui_DATA = \
+ tst.ui
+
+
+EXTRA_DIST = \
+ $(tracker_search_tool_SOURCES) \
+ $(tracker_search_tool_VALASOURCES) \
+ tracker_search_tool.gs.stamp \
+ tst.ui \
+ $(NULL)
+
+MAINTAINERCLEANFILES = \
+ $(tracker_search_tool_SOURCES) \
+ tracker_search_tool.gs.stamp \
+ $(NULL)
+
+BUILT_SOURCES = \
+ tracker_search_tool.gs.stamp \
+ $(NULL)
diff --git a/src/tracker-search-tool/tracker-category-view.gs b/src/tracker-search-tool/tracker-category-view.gs
new file mode 100644
index 0000000..9317593
--- /dev/null
+++ b/src/tracker-search-tool/tracker-category-view.gs
@@ -0,0 +1,91 @@
+[indent=4]
+
+uses
+ Gtk
+ TrackerUtils
+
+
+enum CategoryColumns
+ Icon
+ Name
+ DisplayName
+ NumOfCols
+
+
+const icon_size : int = 16
+
+class TrackerCategoryView : ScrolledWindow
+ store : ListStore
+ treeview : TreeView
+
+ prop Query : TrackerQuery
+
+ init
+
+ hscrollbar_policy = PolicyType.NEVER
+ vscrollbar_policy = PolicyType.AUTOMATIC
+ shadow_type = ShadowType.ETCHED_OUT
+
+ store = new ListStore (CategoryColumns.NumOfCols, typeof (Gdk.Pixbuf), typeof (string), typeof (string))
+ iter : TreeIter
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("system-file-manager", icon_size, get_screen ()), \
+ CategoryColumns.Name, "All", CategoryColumns.DisplayName, N_("All Files") , -1);
+
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("x-office-document", icon_size, get_screen ()), \
+ CategoryColumns.Name, "nfo:Document", CategoryColumns.DisplayName, N_("Office Documents") , -1);
+
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("text-x-generic", icon_size, get_screen ()), \
+ CategoryColumns.Name, "nfo:TextDocument", CategoryColumns.DisplayName, N_("Text Documents") , -1);
+
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("image-x-generic", icon_size, get_screen ()), \
+ CategoryColumns.Name, "nfo:Image", CategoryColumns.DisplayName, N_("Images") , -1);
+
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("audio-x-generic", icon_size, get_screen ()), \
+ CategoryColumns.Name, "nfo:Audio", CategoryColumns.DisplayName, N_("Music") , -1);
+
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("video-x-generic", icon_size, get_screen ()), \
+ CategoryColumns.Name, "nfo:Video", CategoryColumns.DisplayName, N_("Videos") , -1);
+
+ store.append (out iter);
+ store.set (iter, CategoryColumns.Icon, GetThemePixbufByName ("system-run", icon_size, get_screen ()), \
+ CategoryColumns.Name, "nfo:SoftwareApplication", CategoryColumns.DisplayName, N_("Applications") , -1);
+
+ treeview = new TreeView.with_model (store)
+ treeview.insert_column_with_attributes (-1, "icon", new CellRendererPixbuf (), "pixbuf", 0, null)
+ treeview.insert_column_with_attributes (-1, "name", new CellRendererText (), "text", 2, null)
+ treeview.set_headers_visible (false)
+
+ var category_selection = treeview.get_selection ()
+ category_selection.set_mode (SelectionMode.BROWSE)
+
+ category_selection.changed += selection_changed
+
+ add (treeview)
+
+ show_all ()
+
+ def selection_changed (sel : TreeSelection)
+ iter : TreeIter
+ model : TreeModel
+
+ sel.get_selected (out model , out iter)
+
+ name : weak string
+
+ store.get (iter, CategoryColumns.Name, out name);
+
+ if Query is not null
+ Query.Category = name
+
+
+
+
+
+
+
diff --git a/src/tracker-search-tool/tracker-entry.gs b/src/tracker-search-tool/tracker-entry.gs
new file mode 100644
index 0000000..3052ee8
--- /dev/null
+++ b/src/tracker-search-tool/tracker-entry.gs
@@ -0,0 +1,28 @@
+[indent=4]
+
+uses
+ Gtk
+
+
+class TrackerSearchEntry : Gtk.Entry
+
+ prop Query : TrackerQuery
+
+ init
+ set_icon_from_stock (EntryIconPosition.PRIMARY, STOCK_FIND)
+ set_icon_from_stock (EntryIconPosition.SECONDARY, STOCK_CLEAR)
+ set_icon_sensitive (EntryIconPosition.SECONDARY, false)
+ set_icon_tooltip_text (EntryIconPosition.SECONDARY, _("Clear the search text"))
+ changed += entry_changed
+
+
+ def private entry_changed (editable : Editable)
+ if Query is not null
+ if text is null
+ Query.SearchTerms = ""
+ else
+ Query.SearchTerms = text
+
+
+
+
diff --git a/src/tracker-search-tool/tracker-query.gs b/src/tracker-search-tool/tracker-query.gs
new file mode 100644
index 0000000..3e90dc1
--- /dev/null
+++ b/src/tracker-search-tool/tracker-query.gs
@@ -0,0 +1,65 @@
+[indent=4]
+
+[DBus (name = "org.freedesktop.Tracker1.Resources")]
+interface Resources : GLib.Object
+ def abstract SparqlQuery (query : string) : array of string[,] raises DBus.Error
+ def abstract SparqlUpdate (query : string) raises DBus.Error
+
+
+class TrackerQuery : Object
+
+ tracker : Resources;
+
+ event SearchSettingsChanged ()
+
+ prop SearchTerms : string
+ prop Category : string
+ prop SortField : string
+ prop Fields : array of string
+
+
+ init
+ Category = "All"
+
+ self.notify += def (t, propety)
+ if propety.name is "SearchTerms" or propety.name is "Category" or propety.name is "SortField" or propety.name is "Fields"
+ SearchSettingsChanged ()
+
+
+
+ def Connect () : bool
+
+ try
+ var conn = DBus.Bus.get (DBus.BusType.SESSION)
+ tracker = conn.get_object ("org.freedesktop.Tracker1", "/org/freedesktop/Tracker1/Resources", "org.freedesktop.Tracker1.Resources") as Resources
+ except e : DBus.Error
+ print "Cannot connect to Session bus. Error is %s", e.message
+ return false
+
+ return true
+
+
+ def Search () : array of string[,]
+
+ query : string
+
+ if SearchTerms is null or SearchTerms.length < 3
+ return null
+
+ if Category is null or Category is "All"
+ query = "SELECT ?s WHERE { ?s fts:match \"%s*\"} limit 100 ".printf(SearchTerms)
+ else
+ query = "SELECT ?s WHERE { ?s fts:match \"%s*\". ?s a %s} limit 100 ".printf(SearchTerms, Category)
+
+ // to do : add Fields, Category and SortField
+ return tracker.SparqlQuery (query)
+
+
+ def Query (sparql : string) : array of string[,]
+ return tracker.SparqlQuery (sparql)
+
+
+
+
+
+
diff --git a/src/tracker-search-tool/tracker-result-grid.gs b/src/tracker-search-tool/tracker-result-grid.gs
new file mode 100644
index 0000000..a5af1e0
--- /dev/null
+++ b/src/tracker-search-tool/tracker-result-grid.gs
@@ -0,0 +1,102 @@
+[indent=4]
+
+uses
+ Gtk
+ TrackerUtils
+
+
+enum ResultColumns
+ Uri
+ Icon
+ DisplayName
+ Mime
+ Category
+ Snippet
+ IsDirectory
+ NumOfCols
+
+
+class TrackerResultGrid : ScrolledWindow
+ store : ListStore
+ iconview: IconView
+ _query : TrackerQuery
+
+ event SelectedUriChanged ()
+
+ prop Query : TrackerQuery
+ get
+ return _query
+ set
+ if value is not null
+ _query = value
+ _query.SearchSettingsChanged += def ()
+ RefreshQuery ()
+
+ init
+
+ hscrollbar_policy = PolicyType.NEVER
+ vscrollbar_policy = PolicyType.AUTOMATIC
+ shadow_type = ShadowType.ETCHED_OUT
+
+ store = new ListStore (ResultColumns.NumOfCols, typeof (string), typeof (Gdk.Pixbuf), typeof (string), \
+ typeof (string), typeof (string), typeof (string), typeof (bool))
+
+ // to do add treeview
+
+ iconview = new IconView.with_model (store)
+ iconview.set_pixbuf_column (ResultColumns.Icon)
+ iconview.set_text_column (ResultColumns.DisplayName)
+ iconview.set_item_width (150)
+ iconview.set_row_spacing (10)
+ iconview.item_activated += ActivateUri
+ iconview.selection_changed += def ()
+ SelectedUriChanged ()
+
+ add (iconview)
+
+ show_all ()
+
+
+ def RefreshQuery ()
+ if _query is not null
+ var results = _query.Search ()
+ iter : TreeIter
+
+ store.clear ()
+
+ for uri in results
+ if uri.has_prefix ("file://")
+
+ var file = File.new_for_uri (uri)
+
+ try
+ var info = file.query_info ("standard::display-name,standard::icon,thumbnail::path", \
+ FileQueryInfoFlags.NONE, null)
+
+ var filetype = info.get_file_type ()
+ store.append (out iter);
+ store.set (iter, ResultColumns.Uri, uri, ResultColumns.Icon, GetThumbNail (info, 64, 48, get_screen()), \
+ ResultColumns.DisplayName, info.get_display_name(), ResultColumns.IsDirectory, \
+ (filetype is FileType.DIRECTORY) , -1);
+ except e:Error
+ print "Could not get file info for %s", uri
+
+
+
+
+ def ActivateUri (path : TreePath)
+ iter : TreeIter
+ is_dir : bool = false
+
+ store.get_iter (out iter, path)
+ uri : weak string
+ store.get (iter, ResultColumns.Uri, out uri);
+ store.get (iter, ResultColumns.IsDirectory, out is_dir);
+
+ OpenUri (uri, is_dir)
+
+
+
+
+
+
diff --git a/src/tracker-search-tool/tracker-search-tool.gs b/src/tracker-search-tool/tracker-search-tool.gs
new file mode 100644
index 0000000..c37cb67
--- /dev/null
+++ b/src/tracker-search-tool/tracker-search-tool.gs
@@ -0,0 +1,66 @@
+[indent=4]
+
+uses
+ Gtk
+
+[CCode (cname = "TRACKER_UI_DIR")]
+const extern static UIDIR : string
+
+[CCode (cname = "SRCDIR")]
+const extern static SRCDIR : string
+
+init
+ Gtk.init (ref args)
+
+ var builder = new Builder ()
+
+ try
+ builder.add_from_file (SRCDIR + "tst.ui")
+
+ except e : GLib.Error
+
+ try
+ builder.add_from_file (UIDIR + "tst.ui")
+
+ except e : GLib.Error
+
+ var msg = new MessageDialog (null, DialogFlags.MODAL, \
+ MessageType.ERROR, ButtonsType.OK, \
+ "Failed to load UI\n%s", e.message)
+ msg.run ()
+ Gtk.main_quit()
+
+
+ var window = builder.get_object ("window") as Window
+ window.destroy += Gtk.main_quit
+
+ /* create tracker widgets */
+
+ var
+ query = new TrackerQuery
+ entry = new TrackerSearchEntry ()
+ grid = new TrackerResultGrid ()
+ categories = new TrackerCategoryView ()
+
+ entry_box = builder.get_object ("EntryBox") as Container
+ grid_box = builder.get_object ("GridBox") as Container
+ category_box = builder.get_object ("CategoryBox") as Container
+
+
+ query.Connect ()
+ entry.Query = query
+ entry_box.add (entry)
+
+ grid.Query = query
+ grid_box.add (grid)
+
+ categories.Query = query
+ category_box.add (categories)
+
+ window.show_all ()
+
+ Gtk.main ()
+
+
+
+
diff --git a/src/tracker-search-tool/tracker-utils.gs b/src/tracker-search-tool/tracker-utils.gs
new file mode 100644
index 0000000..86ccc38
--- /dev/null
+++ b/src/tracker-search-tool/tracker-utils.gs
@@ -0,0 +1,76 @@
+[indent=4]
+
+uses
+ Gtk
+
+
+class TrackerUtils
+/* static methods only as this is a utility class that wont ever get substantiated */
+
+ def static OpenUri (uri : string, is_dir :bool) : bool
+ command : string
+ app_info : AppInfo
+
+ var file = File.new_for_uri (uri)
+
+ try
+ app_info = file.query_default_handler (null)
+ except e:Error
+ var msg = new MessageDialog (null, DialogFlags.MODAL, MessageType.ERROR, ButtonsType.OK, \
+ N_("Could not get application info for %s\nError: %s\n"), uri, e.message)
+ msg.run ();
+ return false
+
+ if is_dir is true and app_info.get_executable() is "nautilus"
+ command = "nautilus --sm-disable --no-desktop --no-default-window '" + uri + "'"
+ else
+ command = app_info.get_executable () + " '" + uri + "'"
+
+ try
+ Process.spawn_command_line_async (command)
+ return true
+ except e: Error
+ var msg = new MessageDialog (null, DialogFlags.MODAL, MessageType.ERROR, ButtonsType.OK, \
+ "Could not lauch %s\nError: %s\n", uri, e.message)
+ msg.run ();
+ return false
+
+
+ def static inline GetThemePixbufByName (icon_name : string, size : int, screen : Gdk.Screen) : Gdk.Pixbuf
+
+ var icon = new ThemedIcon (icon_name);
+
+ return GetThemeIconPixbuf (icon, size, screen)
+
+
+ def static GetThumbNail (info : FileInfo, thumb_size : int, icon_size : int, screen : Gdk.Screen) : Gdk.Pixbuf
+
+ pixbuf : Gdk.Pixbuf = null
+
+ var thumbpath = info.get_attribute_byte_string (FILE_ATTRIBUTE_THUMBNAIL_PATH)
+
+ if thumbpath is not null
+ pixbuf = new Gdk.Pixbuf.from_file_at_size (thumbpath, thumb_size, thumb_size)
+
+ if pixbuf is null
+ pixbuf = GetThemeIconPixbuf (info.get_icon (), icon_size, screen)
+
+ if pixbuf is null
+ pixbuf = GetThemePixbufByName ("text-x-generic", icon_size, screen)
+
+ return pixbuf
+
+
+ def static GetThemeIconPixbuf (icon : Icon, size : int, screen : Gdk.Screen) : Gdk.Pixbuf
+
+ icon_info : IconInfo
+
+ var theme = IconTheme.get_for_screen (screen)
+
+ icon_info = theme.lookup_by_gicon (icon, size, IconLookupFlags.USE_BUILTIN)
+
+ return icon_info.load_icon ()
+
+
+
+
diff --git a/src/tracker-search-tool/tst.ui b/src/tracker-search-tool/tst.ui
new file mode 100644
index 0000000..3d71f68
--- /dev/null
+++ b/src/tracker-search-tool/tst.ui
@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+<interface>
+ <requires lib="gtk+" version="2.16"/>
+ <!-- interface-naming-policy project-wide -->
+ <object class="GtkWindow" id="window">
+ <property name="title" translatable="yes">Tracker Search Tool</property>
+ <property name="window_position">center</property>
+ <property name="default_width">800</property>
+ <property name="default_height">600</property>
+ <child>
+ <object class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHBox" id="SearchBox">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Search:</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">8</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHBox" id="EntryBox">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="padding">12</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="padding">12</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkHPaned" id="hpaned1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="position">126</property>
+ <child>
+ <object class="GtkHBox" id="CategoryBox">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <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">600</property>
+ <property name="position_set">True</property>
+ <child>
+ <object class="GtkVBox" id="GridBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkToolbar" id="toolbar1">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="DetailBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">False</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <object class="GtkStatusbar" id="statusbar1">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+</interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]