1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 import sys
25 import wx
26 import wx.lib.buttons
27 import wx.lib.scrolledpanel
28
29
30 from graphics import fetch_icon
31 import gui
32 from gui.fonts import font
33 from gui.icons import relax_icons
34 from gui.misc import bitmap_setup
35 from status import Status; status = Status()
36
37
39 """Message box for general errors.
40
41 @param msg: The message to display.
42 @type msg: str
43 """
44
45
46 if status.show_gui:
47 wx.MessageBox(msg, caption=caption, style=wx.OK|wx.ICON_ERROR)
48
49
50 else:
51
52 if caption:
53 msg = "%s: %s" % (caption, msg)
54
55
56 sys.stderr.write(msg + "\n")
57
58
59
61 """Message box GUI element for when a setup is incomplete or there is missing data."""
62
63 - def __init__(self, missing=[], parent=None):
64 """Set up the dialog.
65
66 @keyword missing: The list of missing data types.
67 @type missing: list of str
68 @keyword parent: The parent wx element.
69 @type parent: wx object
70 """
71
72
73 wx.Dialog.__init__(self, parent, title='Missing data', style=wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.STAY_ON_TOP)
74
75
76 self.SetIcons(relax_icons)
77
78
79 self.SetSize((600, 400))
80
81
82 self.Centre()
83
84
85 main_sizer = wx.BoxSizer(wx.HORIZONTAL)
86 self.SetSizer(main_sizer)
87
88
89 sizer = gui.misc.add_border(main_sizer, border=10, packing=wx.HORIZONTAL)
90
91
92 bitmap = wx.StaticBitmap(self, -1, bitmap_setup(fetch_icon('oxygen.status.user-busy', "48x48")))
93 sizer.Add(bitmap)
94
95
96 sizer.AddSpacer(20)
97
98
99 panel = wx.lib.scrolledpanel.ScrolledPanel(self, -1)
100 panel.SetAutoLayout(1)
101 panel.SetupScrolling()
102 sizer.Add(panel, 1, wx.ALL|wx.EXPAND, 0)
103
104
105 panel_sizer = wx.BoxSizer(wx.HORIZONTAL)
106 panel.SetSizer(panel_sizer)
107
108
109 msg = "The set up is incomplete.\n\n"
110 if not len(missing):
111 msg = msg + "Please check for missing data.\n"
112 else:
113 msg = msg + "Please check for the following missing information:\n"
114 for data in missing:
115 msg = msg + " %s\n" % data
116
117
118 text = wx.StaticText(panel, -1, msg, style=wx.TE_MULTILINE)
119 panel_sizer.Add(text)
120
121
122 if status.show_gui:
123 self.ShowModal()
124
125
126 else:
127 sys.stderr.write("Missing data: %s\n" % msg)
128
129
130
132 """Question box GUI element for obtaining a yes/no response from the user."""
133
134
135 border = 10
136 spacer_button = 10
137 spacer_main = 20
138 height_button = 30
139 width_button = 100
140
141 - def __init__(self, msg, parent=None, title='', size=(350, 125), default=False):
142 """A generic question box.
143
144 @param msg: The text message to display.
145 @type msg: str
146 @keyword parent: The parent wx object.
147 @type parent: wx.object instance
148 @keyword title: The window title.
149 @type title: str
150 @keyword default: If True, the default button will be 'yes', otherwise it will be 'no'.
151 @type default: bool
152 @return: The answer.
153 @rtype: bool
154 """
155
156
157 wx.Dialog.__init__(self, parent, title=title, size=size, style=wx.DEFAULT_DIALOG_STYLE|wx.STAY_ON_TOP)
158
159
160 self.pressed = False
161
162
163 if default:
164 self.answer = wx.ID_YES
165 else:
166 self.answer = wx.ID_NO
167
168
169 self.SetIcons(relax_icons)
170
171
172 self.Centre()
173
174
175 main_sizer = wx.BoxSizer(wx.HORIZONTAL)
176 self.SetSizer(main_sizer)
177
178
179 sizer = gui.misc.add_border(main_sizer, border=self.border, packing=wx.HORIZONTAL)
180
181
182 bitmap = wx.StaticBitmap(self, -1, bitmap_setup(fetch_icon('oxygen.status.dialog-warning-relax-blue', "48x48")))
183 sizer.Add(bitmap)
184
185
186 sizer.AddSpacer(self.spacer_main)
187
188
189 sub_sizer = wx.BoxSizer(wx.VERTICAL)
190 sizer.Add(sub_sizer, 1, wx.ALL|wx.EXPAND, 0)
191
192
193 text = wx.StaticText(self, -1, msg, style=wx.TE_MULTILINE)
194 text.SetFont(font.normal)
195 sub_sizer.Add(text, 1, wx.ALL|wx.EXPAND, 0)
196
197
198 button_sizer = wx.BoxSizer(wx.HORIZONTAL)
199 sub_sizer.Add(button_sizer, 0, wx.ALIGN_RIGHT, 0)
200
201
202 button_yes = wx.lib.buttons.ThemedGenBitmapTextButton(self, -1, None, " Yes")
203 button_yes.SetBitmapLabel(wx.Bitmap(fetch_icon('oxygen.actions.dialog-ok', "22x22"), wx.BITMAP_TYPE_ANY))
204 button_yes.SetFont(font.normal)
205 button_yes.SetMinSize((self.width_button, self.height_button))
206 button_sizer.Add(button_yes, 0, wx.ADJUST_MINSIZE|wx.ALIGN_CENTER_VERTICAL, 0)
207 self.Bind(wx.EVT_BUTTON, self.yes, button_yes)
208
209
210 button_sizer.AddSpacer(self.spacer_button)
211
212
213 button_no = wx.lib.buttons.ThemedGenBitmapTextButton(self, -1, None, " No")
214 button_no.SetBitmapLabel(wx.Bitmap(fetch_icon('oxygen.actions.dialog-cancel', "22x22"), wx.BITMAP_TYPE_ANY))
215 button_no.SetFont(font.normal)
216 button_no.SetMinSize((self.width_button, self.height_button))
217 button_sizer.Add(button_no, 0, wx.ADJUST_MINSIZE|wx.ALIGN_CENTER_VERTICAL, 0)
218 self.Bind(wx.EVT_BUTTON, self.no, button_no)
219
220
221 if self.answer == wx.ID_YES:
222 button_yes.SetFocus()
223 else:
224 button_no.SetFocus()
225
226
227 self.Bind(wx.EVT_CLOSE, self.handler_close)
228
229
231 """Replacement ShowModal method.
232
233 @return: The answer to the question, either wx.ID_YES or wx.ID_NO.
234 @rtype: int
235 """
236
237
238 if status.show_gui:
239 super(Question, self).ShowModal()
240
241
242 return self.answer
243
244
246 """Event handler for the close window action.
247
248 @param event: The wx event.
249 @type event: wx event
250 """
251
252
253 if not self.pressed:
254 self.answer = wx.ID_NO
255
256
257 event.Skip()
258
259
260 - def no(self, event):
261 """No selection.
262
263 @param event: The wx event.
264 @type event: wx event
265 """
266
267
268 self.pressed = True
269
270
271 self.answer = wx.ID_NO
272
273
274 self.Close()
275
276
277 - def yes(self, event):
278 """Yes selection.
279
280 @param event: The wx event.
281 @type event: wx event
282 """
283
284
285 self.pressed = True
286
287
288 self.answer = wx.ID_YES
289
290
291 self.Close()
292