1 """Useful utility methods for GTK."""
3 # Copyright (C) 2009, Thomas Leonard
4 # See the README file for details, or visit http://0install.net.
9 """Wrapper for GtkBuilder widget tree that throws a sensible exception if the widget isn't found."""
10 def __init__(self
, builderfile
, root
):
12 @param builderfile: pathname of the .ui file to load
13 @param root: the name of the top-level widget inside the file"""
14 self
.builder
= gtk
.Builder()
15 self
.builder
.set_translation_domain('zero-install')
16 self
.builder
.add_from_file(builderfile
)
17 self
.builderfile
= builderfile
20 def get_widget(self
, name
= None):
21 """Look up a widget by name."""
24 widget
= self
.builder
.get_object(name
)
25 assert widget
, "Widget '%s' not found in GtkBuilder file '%s'" % (name
, self
.builderfile
)
28 def show_message_box(parent
, message
, type = gtk
.MESSAGE_ERROR
):
29 """Display a non-modal message box with an OK button.
30 @param parent: the parent window
31 @param message: the message to be displayed
32 @param type: the type of box (used for the icon)"""
33 box
= gtk
.MessageDialog(parent
, gtk
.DIALOG_DESTROY_WITH_PARENT
,
36 box
.set_position(gtk
.WIN_POS_CENTER
)
39 box
.connect('response', resp
)
43 def get_busy_pointer():
44 """Get a GDK background-activity cursor.
45 Use this when something is happening, but the GUI is still responsive.
46 @return: the busy cursor (a singleton)
50 if _busy_pointer
is not None:
53 # This is crazy. We build a cursor that looks like the old
54 # Netscape busy-with-a-pointer cursor and set that, then the
55 # X server replaces it with a decent-looking one!!
56 # See http://mail.gnome.org/archives/gtk-list/2007-May/msg00100.html
59 \x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\
60 \x0c\x00\x00\x00\x1c\x00\x00\x00\x3c\x00\x00\x00\
61 \x7c\x00\x00\x00\xfc\x00\x00\x00\xfc\x01\x00\x00\
62 \xfc\x3b\x00\x00\x7c\x38\x00\x00\x6c\x54\x00\x00\
63 \xc4\xdc\x00\x00\xc0\x44\x00\x00\x80\x39\x00\x00\
64 \x80\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
65 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
66 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
67 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
68 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
69 \x00\x00\x00\x00\x00\x00\x00\x00"
72 pix
= gtk
.gdk
.bitmap_create_from_data(None, bit_data
, 32, 32)
73 color
= gtk
.gdk
.Color()
74 _busy_pointer
= gtk
.gdk
.Cursor(pix
, pix
, color
, color
, 2, 2)
76 #old bug http://bugzilla.gnome.org/show_bug.cgi?id=103616
77 _busy_pointer
= gtk
.gdk
.Cursor(gtk
.gdk
.WATCH
)