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