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