#!/usr/bin/env python2.5
import gtk
import gobject
#import hildon

#class TreeScrollTestApp(hildon.Program):
class TreeScrollTestApp(object):
    def __init__(self):
        #hildon.Program.__init__(self)

        #self.window = hildon.Window()
        self.window = gtk.Window()
        self.window.connect("destroy", gtk.main_quit)
        #self.add_window(self.window)

        # Treeview 1.
        liststore1 = gtk.ListStore(gobject.TYPE_STRING)
        for i in range(20):
            liststore1.append(["Treeview 1, Row %d" % i])
        treeview1 = gtk.TreeView(liststore1)
        scrolledwindow1 = gtk.ScrolledWindow()
        scrolledwindow1.add(treeview1)
        scrolledwindow1.set_size_request(300, 200)
        scrolledwindow1.set_policy(gtk.POLICY_NEVER, gtk.POLICY_ALWAYS)
        scrolledwindow1.set_shadow_type(gtk.SHADOW_ETCHED_IN)
        cell = gtk.CellRendererText()
        col = gtk.TreeViewColumn('', cell, text=0)
        col.set_resizable(True)
        treeview1.append_column(col)

        # Button.
        button = gtk.Button('Button')
        button.connect('clicked', self.on_button_clicked)

        # Menu.
        self.menu = gtk.Menu()
        for label in ('One', 'Two', 'Three', 'Four'):
            mi = gtk.MenuItem(label)
            self.menu.append(mi)
            mi.show()
        self.menu.connect('selection-done', self.on_menu_selection_done)

        self.vbox = gtk.VBox()
        self.vbox.pack_start(button, expand=False)
        self.vbox.pack_start(scrolledwindow1, expand=True, fill=True)
        self.window.add(self.vbox)
        self.window.show_all()

    def on_button_clicked(self, button):
        event = gtk.get_current_event()
        self.menu.popup(None, None, self.position_popup,
                event.button, event.time, button)

    def on_menu_selection_done(self, menushell):
        print "Selection =", menushell.get_active().get_child().get_text()

    def position_popup(self, menu, widget):
        toplevel = widget.get_toplevel()
        x, y = toplevel.window.get_position()
        widget_alloc = widget.get_allocation()
        return (x + widget_alloc.x, y + widget_alloc.height, True)

    def run(self):
        self.window.show_all()
        gtk.main()

app = TreeScrollTestApp()
app.run()