New release.
[zeroinstall.git] / dialog.py
blob9388aedb9afe99fe3cdd77af4ee12b36b608a2b5
1 import gtk
3 n_windows = 0
5 class Dialog(gtk.Dialog):
6 def __init__(self):
7 gtk.Dialog.__init__(self)
8 self.set_has_separator(False)
9 self.set_position(gtk.WIN_POS_CENTER)
11 def destroyed(widget):
12 _one_less_window()
13 self.connect('destroy', destroyed)
15 def show(self):
16 global n_windows
17 n_windows += 1
18 gtk.Dialog.show(self)
20 def add_mixed_button(self, message, stock, response):
21 button = MixedButton(message, stock)
22 button.set_flags(gtk.CAN_DEFAULT)
24 self.add_action_widget(button, response)
25 button.show_all()
26 return button
28 def alert(parent, message):
29 global n_windows
30 box = gtk.MessageDialog(parent, gtk.DIALOG_DESTROY_WITH_PARENT,
31 gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
32 str(message))
33 box.set_position(gtk.WIN_POS_CENTER)
34 def resp(b, r):
35 box.destroy()
36 _one_less_window()
37 box.connect('response', resp)
38 box.show()
39 n_windows += 1
41 def _one_less_window():
42 global n_windows
43 n_windows -= 1
44 if n_windows == 0:
45 gtk.main_quit()
47 def wait_for_no_windows():
48 while n_windows > 0:
49 gtk.main()
51 def MixedButton(message, stock):
52 button = gtk.Button()
54 label = gtk.Label('')
55 label.set_text_with_mnemonic(message)
56 label.set_mnemonic_widget(button)
58 image = gtk.image_new_from_stock(stock, gtk.ICON_SIZE_BUTTON)
59 box = gtk.HBox(False, 2)
60 align = gtk.Alignment(0.5, 0.5, 0.0, 0.0)
62 box.pack_start(image, False, False, 0)
63 box.pack_end(label, False, False, 0)
65 button.add(align)
66 align.add(box)
67 return button