On Fri, 2005-10-21 at 15:44 +0200, Mikkel Kamstrup Erlandsen wrote: > Here's what I have so far about the CuemiacWidget... Not anywhere near > completion yet. Just though I'd share. > > Just run "python cuemiac.py" to see it in action. > > If you edit it please keep it clean from deskbar imports so far. It > eases debugging wuite a bit. Ie. just copy-paste the bits in you need. After some IRC discussion with people who Know how to do things, i created the cuemiac-reloaded.py file (author is tko on IRC). This file demonstrate how to really do the widget properly, with one single treeview, easy keyboard navigation, and custom action widgets on the left. I also attach a diff for your old cuemiac widget to fix some style issues. see screenshot http://raphael.slinckx.net/cuemiac.png So now, you should merge the two, to have an uber model reflecting the new way of displaying it, if it's possible..
#!/usr/bin/env python
import gtk
import gobject
# The window
win = gtk.Window()
# The Box separating the tree on the right and the categories on the left
hbox = gtk.HBox()
win.add(hbox)
# The layout will allow to position the action widgets as we want
layout = gtk.Fixed()
hbox.pack_start(layout, expand=False)
# The treeview contains every match
treeview = gtk.TreeView()
hbox.pack_start(treeview, expand=True)
treeview.set_property("headers-visible", False)
# We store here tuples (iter, widget) meaning we align widget on iter
align_widgets = []
store = gtk.TreeStore(gobject.TYPE_STRING)
# First category
catlabel = gtk.Label("Actions")
iter1 = store.append(None, ["Open foo"])
store.append(None, ["Execute Bar"])
store.append(None, ["View baz"])
# More matches from category 'Actions'
i = store.append(None, ["More Items..."])
store.append(i, ["No more idea"])
store.append(i, ["Do this, that"])
# Store the relation actionlabel-iter
align_widgets.append( (iter1,catlabel) )
# Here we go again
catlabel = gtk.Label("Documents")
iter2 = store.append(None, ["ChangeLog"])
store.append(None, ["README"])
store.append(None, ["AUTHORS"])
align_widgets.append( (iter2,catlabel) )
# Some crap to get the treeview show something
treeview.set_model(store)
#treeview.expand_all()
treeview.insert_column_with_attributes(-1, "", gtk.CellRendererText(), text=0)
column = treeview.get_column(0)
# Now here is the best bit
def do_align_widgets(treeview, allocation, column, layout, widgets):
if treeview.window is None:
return
model = treeview.get_model()
for iter,widget in widgets:
# We retreive the position of the row pointed by iter (that's the row beside the action label)
path = model.get_path(iter)
area = treeview.get_background_area(path, column)
# Now we have the coords of the row, let's move it in the layout
x,y = treeview.tree_to_widget_coords(area.x, area.y)
# Warning ! the widget has to take account of the 'vertical-separator' style property.
# the problem is that i don't know how to access such properties
# I workaround this by retreiving the difference between cell's height and background's height (that is, magically, the vertical-separator value)
# Try this (from IRC): treeview.style_get_property("vertical-separator")
if widget.parent:
layout.move(widget, 0, y + (treeview.get_background_area(path, column).height - treeview.get_cell_area(path, column).height)*2)
else:
layout.put(widget, 0, y + (treeview.get_background_area(path, column).height - treeview.get_cell_area(path, column).height)*2)
widget.show()
treeview.connect_after('size-allocate', do_align_widgets, column, layout, align_widgets)
# Hope everything's fine..
win.show_all()
win.connect("destroy", gtk.main_quit)
gtk.main()
--- cuemiac.py 2005-10-21 20:18:01.000000000 +0200
+++ cuemiac-k.py 2005-10-21 16:50:29.000000000 +0200
@@ -125,7 +125,7 @@
self.hits = gtk.TreeViewColumn ("Hits")
hit_icon = gtk.CellRendererPixbuf ()
hit_title = gtk.CellRendererText ()
- self.hits.pack_start (hit_icon)
+ self.hits.pack_start (hit_icon, False)
self.hits.pack_start (hit_title)
self.hits.set_cell_data_func(hit_icon, self.__get_match_icon_for_cell)
self.hits.set_cell_data_func(hit_title, self.__get_match_title_for_cell)
@@ -220,8 +220,8 @@
self.categories.append (category)
count = len(self.categories)
self.resize (count, 2)
- self.attach (category.get_name_label(), 0,1, count-1,count)
- self.attach (category.get_view(), 1,2, count-1,count)
+ self.attach (category.get_name_label(), 0,1, count-1,count, xoptions=gtk.EXPAND|gtk.FILL, yoptions=0)
+ self.attach (category.get_view(), 1,2, count-1,count, xoptions=gtk.EXPAND|gtk.FILL, yoptions=0)
return category
Attachment:
signature.asc
Description: This is a digitally signed message part