Import _ explicitly in the GUI
[zeroinstall/zeroinstall-limyreth.git] / zeroinstall / 0launch-gui / dialog.py
blob5f61570301200744b11fbd3f82780027182a6d6d
1 # Copyright (C) 2009, Thomas Leonard
2 # See the README file for details, or visit http://0install.net.
4 import gtk
5 import os
6 from zeroinstall import _
7 from zeroinstall.support import tasks
8 from zeroinstall.gtkui import gtkutils
10 n_windows = 0
12 last_error = None
14 builderfile = os.path.join(os.path.dirname(__file__), 'zero-install.ui')
16 class Template(gtkutils.Template):
17 def __init__(self, root):
18 gtkutils.Template.__init__(self, builderfile, root)
20 class Dialog(gtk.Dialog):
21 def __init__(self):
22 gtk.Dialog.__init__(self)
23 self.set_has_separator(False)
24 self.set_position(gtk.WIN_POS_CENTER)
26 def add_mixed_button(self, message, stock, response):
27 button = MixedButton(message, stock)
28 button.set_flags(gtk.CAN_DEFAULT)
30 self.add_action_widget(button, response)
31 button.show_all()
32 return button
34 class DialogResponse(tasks.Blocker):
35 response = None
36 def __init__(self, dialog):
37 tasks.Blocker.__init__(self, dialog.get_title())
38 a = None
39 def response(d, resp):
40 self.response = resp
41 d.disconnect(a)
42 self.trigger()
43 a = dialog.connect('response', response)
45 class ButtonClickedBlocker(tasks.Blocker):
46 def __init__(self, button):
47 tasks.Blocker.__init__(self, "Button click")
48 a = None
49 def clicked(b):
50 b.disconnect(a)
51 self.trigger()
52 a = button.connect('clicked', lambda b: self.trigger())
54 def alert(parent, message, type = gtk.MESSAGE_ERROR):
55 if type == gtk.MESSAGE_ERROR:
56 global last_error
57 last_error = message
59 gtkutils.show_message_box(parent, message, type)
61 def MixedButton(message, stock, x_align = 0.5, button = None):
62 if button is None:
63 button = gtk.Button()
65 label = gtk.Label('')
66 label.set_text_with_mnemonic(message)
67 label.set_mnemonic_widget(button)
69 image = gtk.image_new_from_stock(stock, gtk.ICON_SIZE_BUTTON)
70 box = gtk.HBox(False, 2)
71 align = gtk.Alignment(x_align, 0.5, 0.0, 0.0)
73 box.pack_start(image, False, False, 0)
74 box.pack_end(label, False, False, 0)
76 button.add(align)
77 align.add(box)
78 return button