1
"""Useful utility methods for GTK."""
2
# Copyright (C) 2008, 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)