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 _
11 """Wrapper for glade widget tree that throws a sensible exception if the widget isn't found."""
12 def __init__(self
, gladefile
, root
):
14 @param gladefile: pathname of the .glade file to load
15 @param root: the name of the top-level widget inside the file"""
16 self
.widgets
= gtk
.glade
.XML(gladefile
, root
)
17 self
.gladefile
= gladefile
20 def get_widget(self
, name
= None):
21 """Look up a widget by name."""
24 widget
= self
.widgets
.get_widget(name
)
25 assert widget
, "Widget '%s' not found in glade file '%s'" % (name
, self
.gladefile
)
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
)