| Home | Trees | Indices | Help |
|
|---|
|
|
1 """GNUmed configuration related widgets.
2 """
3 #================================================================
4 __version__ = '$Revision: 1.4 $'
5 __author__ = 'karsten.hilbert@gmx.net'
6 __license__ = 'GPL v2 or later (details at http://www.gnu.org)'
7
8 # stdlib
9 import logging, sys
10
11
12 # 3rd party
13 import wx
14
15
16 # GNUmed
17 if __name__ == '__main__':
18 sys.path.insert(0, '../../')
19 from Gnumed.pycommon import gmCfg
20 from Gnumed.pycommon import gmNetworkTools
21 from Gnumed.pycommon import gmTools
22 from Gnumed.pycommon import gmDispatcher
23 from Gnumed.pycommon import gmCfg2
24 from Gnumed.pycommon import gmWorkerThread
25 from Gnumed.pycommon import gmPG2
26 from Gnumed.business import gmPraxis
27 from Gnumed.wxpython import gmGuiHelpers
28 from Gnumed.wxpython import gmListWidgets
29
30
31 _log = logging.getLogger('gm.ui')
32 _log.info(__version__)
33
34 #==============================================================================
36
37 dbcfg = gmCfg.cCfgSQL()
38 url = dbcfg.get2 (
39 option = 'horstspace.update.url',
40 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
41 bias = 'workplace',
42 default = 'http://www.gnumed.de/downloads/gnumed-versions.txt'
43 )
44 consider_latest_branch = bool(dbcfg.get2 (
45 option = 'horstspace.update.consider_latest_branch',
46 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
47 bias = 'workplace',
48 default = True
49 ))
50
51 _cfg = gmCfg2.gmCfgData()
52 update_found, msg = gmNetworkTools.check_for_update (
53 url = url,
54 current_branch = _cfg.get(option = 'client_branch'),
55 current_version = _cfg.get(option = 'client_version'),
56 consider_latest_branch = consider_latest_branch
57 )
58
59 return update_found, msg
60
61 #------------------------------------------------------------------------------
63
64 update_found, msg = status
65 if update_found is False:
66 _cfg = gmCfg2.gmCfgData()
67 gmDispatcher.send(signal = 'statustext', msg = _('Your client (%s) is up to date.') % _cfg.get(option = 'client_version'))
68 return
69
70 gmGuiHelpers.gm_show_info (
71 msg,
72 _('Checking for client updates')
73 )
74
75 #------------------------------------------------------------------------------
79
80 #------------------------------------------------------------------------------
82
83 if do_async:
84 gmWorkerThread.execute_in_worker_thread (
85 payload_function = _get_update_status,
86 payload_kwargs = None,
87 completion_callback = _async_signal_update_status,
88 worker_name = 'UpdChk'
89 )
90 return
91
92 _signal_update_status(_get_update_status())
93
94 #================================================================
96
97 if parent is None:
98 parent = wx.GetApp().GetTopWindow()
99
100 #---------------
101 def refresh(lctrl):
102 opts = gmCfg.get_all_options(order_by = 'owner, workplace, option')
103
104 items = [ [
105 o['owner'],
106 o['workplace'],
107 o['option'],
108 o['value'],
109 o['type'],
110 gmTools.coalesce(o['description'], '')
111 ] for o in opts ]
112 lctrl.set_string_items(items)
113 lctrl.set_data(opts)
114 #---------------
115 def tooltip(item):
116 return (
117 '%s %s (#%s) %s\n'
118 '\n'
119 ' %s @ %s\n'
120 '\n'
121 ' %s: %s\n'
122 '%s'
123 ) % (
124 gmTools.u_box_horiz_single * 3,
125 item['option'],
126 item['pk_cfg_item'],
127 gmTools.u_box_horiz_single * 3,
128 item['owner'],
129 item['workplace'],
130 item['type'],
131 gmTools.wrap(
132 text = item['value'],
133 width = 40,
134 subsequent_indent = ' ' * 8
135 ),
136 gmTools.wrap (
137 text = gmTools.coalesce(item['description'], '', '\n%s'),
138 width = 40,
139 initial_indent = ' ',
140 subsequent_indent = ' '
141 )
142 )
143 #---------------
144 def delete(item):
145 delete_it = gmGuiHelpers.gm_show_question (
146 aTitle = _('Deleting option'),
147 aMessage = '%s\n\n%s %s (#%s) %s\n\n%s\n\n%s' % (
148 tooltip(item),
149 gmTools.u_box_horiz_single * 3,
150 item['option'],
151 item['pk_cfg_item'],
152 gmTools.u_box_horiz_single * 3,
153 _('Do you really want to delete this option ?'),
154 _('(GNUmed will re-create options as needed.)')
155 )
156 )
157 if not delete_it:
158 return False
159
160 from Gnumed.wxpython.gmAuthWidgets import get_dbowner_connection
161 conn = get_dbowner_connection(procedure = _('Deleting option'))
162 if conn is None:
163 gmDispatcher.send(signal = 'statustext', msg = _('Cannot connect as database owner. Unable to delete option.'))
164 return False
165
166 cfg = gmCfg.cCfgSQL()
167 cfg.delete(conn = conn, pk_option = item['pk_cfg_item'])
168 return True
169 #---------------
170 gmListWidgets.get_choices_from_list (
171 parent = parent,
172 msg = _('All configured options currently in the database.'),
173 caption = _('All configured options'),
174 columns = [ _('User'), _('Workplace'), _('Option'), _('Value'), _('Type'), _('Description') ],
175 refresh_callback = refresh,
176 delete_callback = delete,
177 ignore_OK_button = True,
178 list_tooltip_callback = tooltip
179 )
180
181 #================================================================
182 -def configure_string_from_list_option(parent=None, message=None, option=None, bias='user', default_value='', choices=None, columns=None, data=None, caption=None):
183
184 dbcfg = gmCfg.cCfgSQL()
185
186 current_value = dbcfg.get2 (
187 option = option,
188 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
189 bias = bias,
190 default = default_value
191 )
192
193 if parent is None:
194 parent = wx.GetApp().GetTopWindow()
195
196 if caption is None:
197 caption = _('Configuration')
198
199 selections = None
200 if current_value is not None:
201 try:
202 selections = [choices.index(current_value)]
203 except ValueError:
204 pass
205
206 choice = gmListWidgets.get_choices_from_list (
207 parent = parent,
208 msg = message,
209 caption = caption,
210 choices = choices,
211 columns = columns,
212 data = data,
213 selections = selections,
214 single_selection = True,
215 can_return_empty = False
216 )
217
218 # aborted
219 if choice is None:
220 return
221
222 # same value selected again
223 if choice == current_value:
224 return
225
226 dbcfg = gmCfg.cCfgSQL()
227 dbcfg.set (
228 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
229 option = option,
230 value = choice
231 )
232
233 return
234
235 #================================================================
236 -def configure_list_from_list_option(parent=None, message=None, option=None, bias='user', default_value=None, choices=None, columns=None, data=None, caption=None, picks=None):
237
238 if default_value is None:
239 default_value = []
240
241 dbcfg = gmCfg.cCfgSQL()
242
243 current_value = dbcfg.get2 (
244 option = option,
245 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
246 bias = bias,
247 default = default_value
248 )
249
250 if parent is None:
251 parent = wx.GetApp().GetTopWindow()
252
253 if caption is None:
254 caption = _('Configuration')
255
256 # setup item picker
257 picker = gmListWidgets.cItemPickerDlg(parent, -1, msg = message)
258 picker.set_columns(columns)
259 picker.set_choices(choices)
260 picker.set_picks(picks)
261 result = picker.ShowModal()
262 if result == wx.ID_CANCEL:
263 picker.Destroy()
264 return
265
266 picks = picker.get_picks()
267 picker.Destroy()
268
269 dbcfg.set (
270 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
271 option = option,
272 value = picks
273 )
274
275 return
276
277 #================================================================
278 -def configure_string_option(parent=None, message=None, option=None, bias='user', default_value='', validator=None):
279
280 dbcfg = gmCfg.cCfgSQL()
281
282 current_value = dbcfg.get2 (
283 option = option,
284 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
285 bias = bias,
286 default = default_value
287 )
288
289 if current_value is not None:
290 current_value = '%s' % current_value
291
292 if parent is None:
293 parent = wx.GetApp().GetTopWindow()
294
295 while True:
296 dlg = wx.TextEntryDialog (
297 parent = parent,
298 message = message,
299 caption = _('Configuration'),
300 defaultValue = gmTools.coalesce(current_value, ''),
301 style = wx.OK | wx.CANCEL | wx.CENTRE
302 )
303 result = dlg.ShowModal()
304 if result == wx.ID_CANCEL:
305 dlg.Destroy()
306 return None
307
308 user_val = dlg.GetValue().strip()
309 dlg.Destroy()
310
311 if user_val == current_value:
312 return user_val
313
314 validated, user_val = validator(user_val)
315 if validated:
316 break
317
318 gmDispatcher.send (
319 signal = 'statustext',
320 msg = _('Value [%s] not valid for option <%s>.') % (user_val, option),
321 beep = True
322 )
323
324 dbcfg = gmCfg.cCfgSQL()
325 dbcfg.set (
326 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
327 option = option,
328 value = user_val
329 )
330
331 return user_val
332
333 #================================================================
335
336 if parent is None:
337 parent = wx.GetApp().GetTopWindow()
338
339 tooltips = [
340 _('Set "%s" to <True>.') % option,
341 _('Set "%s" to <False>.') % option,
342 _('Abort the dialog and do not change the current setting.')
343 ]
344 if button_tooltips is not None:
345 for idx in range(len(button_tooltips)):
346 tooltips[idx] = button_tooltips[idx]
347
348 dlg = gmGuiHelpers.c3ButtonQuestionDlg (
349 parent,
350 -1,
351 caption = _('Configuration'),
352 question = question,
353 button_defs = [
354 {'label': _('Yes'), 'tooltip': tooltips[0]},
355 {'label': _('No'), 'tooltip': tooltips[1]},
356 {'label': _('Cancel'), 'tooltip': tooltips[2], 'default': True}
357 ]
358 )
359
360 decision = dlg.ShowModal()
361 dbcfg = gmCfg.cCfgSQL()
362 if decision == wx.ID_YES:
363 dbcfg.set (
364 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
365 option = option,
366 value = True
367 )
368 elif decision == wx.ID_NO:
369 dbcfg.set (
370 workplace = gmPraxis.gmCurrentPraxisBranch().active_workplace,
371 option = option,
372 value = False
373 )
374
375 return
376
377 #================================================================
378 if __name__ == '__main__':
379
380 from Gnumed.pycommon import gmI18N
381 gmI18N.activate_locale()
382 gmI18N.install_domain()
383
384 if len(sys.argv) < 2:
385 sys.exit()
386
387 if sys.argv[1] != 'test':
388 sys.exit()
389
390 check_for_updates()
391
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Fri Jan 25 02:55:27 2019 | http://epydoc.sourceforge.net |