summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorGian Mario Tagliaretti <gianmt@src.gnome.org>2007-07-20 23:19:35 +0000
committerGian Mario Tagliaretti <gianmt@src.gnome.org>2007-07-20 23:19:35 +0000
commit34e9535fdcf15fd691e04aea3cae3d58cf02b5da (patch)
tree790d7fbbadd50039cfd763c76734576c2a121ffa /examples
parent5061bfed82fbd94792beacd6f6b13308745dfc7b (diff)
downloadpygtk-34e9535fdcf15fd691e04aea3cae3d58cf02b5da.tar.gz
Add tooltip demo and move builder demo to pygtk-demo
svn path=/trunk/; revision=2854
Diffstat (limited to 'examples')
-rw-r--r--examples/builder/builder.py33
-rw-r--r--examples/pygtk-demo/demos/builder.py50
-rw-r--r--examples/pygtk-demo/demos/demo.ui (renamed from examples/builder/demo.ui)0
-rw-r--r--examples/pygtk-demo/demos/tooltip.py242
4 files changed, 292 insertions, 33 deletions
diff --git a/examples/builder/builder.py b/examples/builder/builder.py
deleted file mode 100644
index 75f32c7d..00000000
--- a/examples/builder/builder.py
+++ /dev/null
@@ -1,33 +0,0 @@
-import gtk
-
-class BuilderExample:
- def __init__(self, filename):
- # create a new empty Builer object
- builder = gtk.Builder()
-
- # load an XML definition
- builder.add_from_file(filename)
-
- # autoconnect the signals from the instance self
- builder.connect_signals(self)
-
- # get the main window
- window = builder.get_object("window1")
- window.connect("destroy", gtk.main_quit)
- window.show_all()
-
- def about_activate(self, action, data=None):
- about_dlg = gtk.AboutDialog()
- about_dlg.set_name("GtkBuilder demo")
- about_dlg.run()
- about_dlg.destroy()
-
- def quit_activate(self, action, data=None):
- gtk.main_quit()
-
- def main(self):
- gtk.main()
-
-if __name__ == '__main__':
- build = BuilderExample("demo.ui")
- build.main()
diff --git a/examples/pygtk-demo/demos/builder.py b/examples/pygtk-demo/demos/builder.py
new file mode 100644
index 00000000..5df9d10c
--- /dev/null
+++ b/examples/pygtk-demo/demos/builder.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+'''Builder
+
+This is a test of the new gtk builder system. It is a
+fairly straight forward port of the example distributed with gtk.
+'''
+
+import gtk
+
+class BuilderDemo(gtk.Window):
+ def __init__(self, parent=None, filename="demos/demo.ui"):
+ gtk.Window.__init__(self)
+ try:
+ self.set_screen(parent.get_screen())
+ except AttributeError:
+ self.connect('destroy', lambda *w: gtk.main_quit())
+ self.set_title(self.__class__.__name__)
+ self.set_default_size(440, 250)
+
+ # create a new empty Builer object
+ builder = gtk.Builder()
+
+ # load an XML definition
+ builder.add_from_file(filename)
+
+ # We must get the vbox and reparent it to self
+ # since we don't use the main window defined in the ui file
+ vbox = builder.get_object("vbox1")
+ vbox.reparent(self)
+
+ # autoconnect the signals from the instance self
+ builder.connect_signals(self)
+
+ self.show_all()
+
+ def about_activate(self, action, data=None):
+ about_dlg = gtk.AboutDialog()
+ about_dlg.set_name("GtkBuilder demo")
+ about_dlg.run()
+ about_dlg.destroy()
+
+ def quit_activate(self, action, data=None):
+ gtk.main_quit()
+
+ def main(self):
+ gtk.main()
+
+if __name__ == '__main__':
+ build = BuilderDemo(None, "demo.ui")
+ build.main()
diff --git a/examples/builder/demo.ui b/examples/pygtk-demo/demos/demo.ui
index 1c84db2b..1c84db2b 100644
--- a/examples/builder/demo.ui
+++ b/examples/pygtk-demo/demos/demo.ui
diff --git a/examples/pygtk-demo/demos/tooltip.py b/examples/pygtk-demo/demos/tooltip.py
new file mode 100644
index 00000000..fb7d0637
--- /dev/null
+++ b/examples/pygtk-demo/demos/tooltip.py
@@ -0,0 +1,242 @@
+#!/usr/bin/env python
+'''Tooltip
+
+This is a test of the new gtk tooltip system. It is a
+fairly straight forward port of the example distributed with gtk.
+'''
+
+import gtk
+import cairo
+import gobject
+import pango
+
+rects = [
+ {"x":10, "y":10, "r":0.0, "g":0.0, "b":0.9, "tooltip":"Blue box!"},
+ {"x":200, "y":170, "r":1.0, "g":0.0, "b":0.0, "tooltip":"Red thing"},
+ {"x":100, "y":50, "r":0.8, "g":0.8, "b":0.0, "tooltip":"Yellow thing"}
+ ]
+
+class TooltipDemo(gtk.Window):
+ def __init__(self, parent=None):
+ gtk.Window.__init__(self)
+ try:
+ self.set_screen(parent.get_screen())
+ except AttributeError:
+ self.connect('destroy', lambda *w: gtk.main_quit())
+ self.set_title(self.__class__.__name__)
+
+ self.set_border_width(10)
+
+ box = gtk.VBox(False, 3)
+ self.add(box)
+
+ # A check button using the tooltip-markup property
+ button = gtk.CheckButton("This one uses the tooltip-markup property")
+ button.set_tooltip_text("Hello, I am a static tooltip.")
+ box.pack_start(button, False, False, 0)
+
+ # A check button using the query-tooltip signal
+ button = gtk.CheckButton("I use the query-tooltip signal")
+ button.props.has_tooltip = True
+ button.connect("query-tooltip", self.query_tooltip_cb)
+ box.pack_start(button, False, False, 0)
+
+ # A label
+ label = gtk.Label("I am just a label")
+ label.set_selectable(False)
+ label.set_tooltip_text("Label & and tooltip")
+ box.pack_start(label, False, False, 0)
+
+ # A selectable label
+ label = gtk.Label("I am a selectable label")
+ label.set_selectable(True)
+ label.set_tooltip_markup("<b>Another</b> Label tooltip")
+ box.pack_start(label, False, False, 0)
+
+ # Another one, with a custom tooltip window
+ button = gtk.CheckButton("This one has a custom tooltip window!")
+ box.pack_start(button, False, False, 0)
+
+ tooltip_window = gtk.Window(gtk.WINDOW_POPUP)
+ tooltip_button = gtk.Label("blaat!")
+ tooltip_window.add(tooltip_button)
+ tooltip_button.show()
+
+ button.set_tooltip_window(tooltip_window)
+ button.connect("query-tooltip", self.query_tooltip_custom_cb)
+ button.props.has_tooltip = True
+
+ # An insensitive button
+ button = gtk.Button("This one is insensitive")
+ button.set_sensitive(False)
+ button.props.tooltip_text = "Insensitive!"
+ box.pack_start(button, False, False, 0)
+
+ # Testcases from Kris without a tree view don't exist
+ tree_view = gtk.TreeView(self.create_model())
+ tree_view.set_size_request(200, 240)
+
+ tree_view.insert_column_with_attributes(0, "Test",
+ gtk.CellRendererText(),
+ text = 0)
+
+ tree_view.props.has_tooltip = True
+ tree_view.connect("query-tooltip", self.query_tooltip_tree_view_cb)
+ tree_view.get_selection().connect("changed",
+ self.selection_changed_cb, tree_view)
+
+ # We cannot get the button on the treeview column directly
+ # so we have to use a ugly hack to get it.
+ column = tree_view.get_column(0)
+ column.set_clickable(True)
+ label = gtk.Label("Test")
+ column.set_widget(label)
+ label.show()
+ button = label.get_parent()
+ button.props.tooltip_text = "Header"
+
+ box.pack_start(tree_view, False, False, 2)
+
+ # And a text view for Matthias
+ buffer = gtk.TextBuffer()
+
+ iter = buffer.get_end_iter()
+ buffer.insert(iter, "Hello, the text ", -1)
+
+ tag = buffer.create_tag("bold")
+ tag.props.weight = pango.WEIGHT_BOLD
+
+ iter = buffer.get_end_iter()
+ buffer.insert_with_tags(iter, "in bold", tag)
+
+ iter = buffer.get_end_iter()
+ buffer.insert(iter, " has a tooltip!", -1)
+
+ text_view = gtk.TextView(buffer)
+ text_view.set_size_request(200, 50)
+
+ text_view.props.has_tooltip = True
+ text_view.connect("query-tooltip", self.query_tooltip_text_view_cb, tag)
+
+ box.pack_start(text_view, False, False, 2)
+
+ # Drawing area
+ drawing_area = gtk.DrawingArea()
+ drawing_area.set_size_request(320, 240)
+ drawing_area.props.has_tooltip = True
+ drawing_area.connect("expose_event", self.drawing_area_expose)
+ drawing_area.connect("query-tooltip",
+ self.query_tooltip_drawing_area_cb)
+ box.pack_start(drawing_area, False, False, 2)
+
+ # Done!
+ self.show_all()
+
+ def query_tooltip_cb(self, widget, x, y, keyboard_tip, tooltip):
+ tooltip.set_markup(widget.get_label())
+ tooltip.set_icon_from_stock(gtk.STOCK_DELETE, gtk.ICON_SIZE_MENU)
+
+ return True
+
+ def query_tooltip_custom_cb(self, widget, x, y, keyboard_tip, tooltip):
+ color = gtk.gdk.Color(0, 65535, 0)
+ window = widget.get_tooltip_window()
+
+ window.modify_bg(gtk.STATE_NORMAL, color)
+
+ return True
+
+ def query_tooltip_text_view_cb(self, widget, x, y,
+ keyboard_tip, tooltip, data):
+ if keyboard_tip:
+ offset= widget.props.buffer.cursor_position
+ iter = widget.props.buffer.get_iter_at_offset(offset)
+ else:
+ coords = widget.window_to_buffer_coords(gtk.TEXT_WINDOW_TEXT, x, y)
+ ret =widget.get_iter_at_position(coords[0], coords[1])
+
+ if ret[0].has_tag(data):
+ tooltip.set_text("Tooltip on text tag")
+ else:
+ return False
+
+ return True
+
+ def query_tooltip_tree_view_cb(self, widget, x, y, keyboard_tip, tooltip):
+ model = widget.get_model()
+
+ if keyboard_tip:
+ # Keyboard mode
+ ret = widget.get_cursor()
+
+ if not ret[0]:
+ return False
+ else:
+ coords = widget.convert_widget_to_bin_window_coords(x, y)
+
+ # Mouse mode
+ tp = widget.get_path_at_pos(coords[0], coords[1])
+ if not tp:
+ return False
+
+ iter = model.get_iter(tp[0])
+ value = model.get(iter, 0)
+
+ tooltip.set_markup("<b>Path %s:</b> %s" %(tp[0][0], value[0]))
+
+ return True
+
+ def query_tooltip_drawing_area_cb(self, widget, x, y, keyboard_tip,
+ tooltip, data=None):
+ if keyboard_tip:
+ return False
+
+ for i in range(len(rects)):
+ if(rects[i]["x"] < x and x < rects[i]["x"] + 50 \
+ and rects[i]["y"] < y and y < rects[i]["y"] + 50):
+ tooltip.set_markup(rects[i]["tooltip"])
+ return True;
+ return False
+
+ def selection_changed_cb(self, selection, tree_view):
+ tree_view.trigger_tooltip_query()
+
+ def create_model(self):
+ store = gtk.TreeStore(gobject.TYPE_STRING);
+
+ # A tree store with some random words ...
+ store.append(None, ("File Manager",))
+ store.append(None, ("Gossip",))
+ store.append(None, ("System Settings",))
+ store.append(None, ("The GIMP",))
+ store.append(None, ("Terminal",))
+ store.append(None, ("Word Processor",))
+
+ return(store)
+
+ def drawing_area_expose(self, drawing_area, event, data=None):
+ cr = drawing_area.window.cairo_create()
+
+ cr.rectangle(0, 0,
+ drawing_area.allocation.width,
+ drawing_area.allocation.height)
+ cr.set_source_rgb(1.0, 1.0, 1.0)
+ cr.fill()
+
+ for i in range(len(rects)):
+ cr.rectangle(rects[i]["x"], rects[i]["y"], 50, 50)
+ cr.set_source_rgb(rects[i]["r"], rects[i]["g"], rects[i]["b"])
+ cr.stroke()
+
+ cr.rectangle(rects[i]["x"], rects[i]["y"], 50, 50)
+ cr.set_source_rgba(rects[i]["r"], rects[i]["g"], rects[i]["b"], 0.5)
+ cr.fill()
+
+ return False
+
+def main():
+ TooltipDemo()
+ gtk.main()
+
+if __name__ == '__main__':
+ main() \ No newline at end of file