| 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.business import gmSurgery
25 from Gnumed.wxpython import gmGuiHelpers
26 from Gnumed.wxpython import gmListWidgets
27
28
29 _log = logging.getLogger('gm.ui')
30 _log.info(__version__)
31
32 #==============================================================================
34
35 dbcfg = gmCfg.cCfgSQL()
36
37 url = dbcfg.get2 (
38 option = u'horstspace.update.url',
39 workplace = gmSurgery.gmCurrentPractice().active_workplace,
40 bias = 'workplace',
41 default = u'http://www.gnumed.de/downloads/gnumed-versions.txt'
42 )
43
44 consider_latest_branch = bool(dbcfg.get2 (
45 option = u'horstspace.update.consider_latest_branch',
46 workplace = gmSurgery.gmCurrentPractice().active_workplace,
47 bias = 'workplace',
48 default = True
49 ))
50
51 _cfg = gmCfg2.gmCfgData()
52
53 found, msg = gmNetworkTools.check_for_update (
54 url = url,
55 current_branch = _cfg.get(option = 'client_branch'),
56 current_version = _cfg.get(option = 'client_version'),
57 consider_latest_branch = consider_latest_branch
58 )
59
60 if found is False:
61 gmDispatcher.send(signal = 'statustext', msg = _('Your client (%s) is up to date.') % _cfg.get(option = 'client_version'))
62 return
63
64 gmGuiHelpers.gm_show_info (
65 msg,
66 _('Checking for client updates')
67 )
68 #================================================================
70
71 if parent is None:
72 parent = wx.GetApp().GetTopWindow()
73
74 #---------------
75 def refresh(lctrl):
76 opts = gmCfg.get_all_options(order_by = u'owner, workplace, option')
77
78 items = [ [
79 o['owner'],
80 o['workplace'],
81 o['option'],
82 o['value'],
83 o['type'],
84 gmTools.coalesce(o['description'], u'')
85 ] for o in opts ]
86 lctrl.set_string_items(items)
87 lctrl.set_data(opts)
88 #---------------
89 def tooltip(item):
90 return (
91 u'%s %s (#%s) %s\n'
92 u'\n'
93 u' %s @ %s\n'
94 u'\n'
95 u' %s: %s\n'
96 u'%s'
97 ) % (
98 gmTools.u_box_horiz_single * 3,
99 item['option'],
100 item['pk_cfg_item'],
101 gmTools.u_box_horiz_single * 3,
102 item['owner'],
103 item['workplace'],
104 item['type'],
105 gmTools.wrap(
106 text = item['value'],
107 width = 40,
108 subsequent_indent = u' ' * 8
109 ),
110 gmTools.wrap (
111 text = gmTools.coalesce(item['description'], u'', u'\n%s'),
112 width = 40,
113 initial_indent = u' ',
114 subsequent_indent = u' '
115 )
116 )
117 #---------------
118 def delete(item):
119 delete_it = gmGuiHelpers.gm_show_question (
120 aTitle = _('Deleting option'),
121 aMessage = u'%s\n\n%s %s (#%s) %s\n\n%s\n\n%s' % (
122 tooltip(item),
123 gmTools.u_box_horiz_single * 3,
124 item['option'],
125 item['pk_cfg_item'],
126 gmTools.u_box_horiz_single * 3,
127 _('Do you really want to delete this option ?'),
128 _('(GNUmed will re-create options as needed.)')
129 )
130 )
131 if not delete_it:
132 return False
133
134 from Gnumed.wxpython.gmAuthWidgets import get_dbowner_connection
135 conn = get_dbowner_connection(procedure = _('Deleting option'))
136 if conn is None:
137 gmDispatcher.send(signal = 'statustext', msg = _('Cannot connect as database owner. Unable to delete option.'))
138 return False
139
140 cfg = gmCfg.cCfgSQL()
141 cfg.delete(conn = conn, pk_option = item['pk_cfg_item'])
142 return True
143 #---------------
144 gmListWidgets.get_choices_from_list (
145 parent = parent,
146 msg = _('All configured options currently in the database.'),
147 caption = _('All configured options'),
148 columns = [ _('User'), _('Workplace'), _('Option'), _('Value'), _('Type'), _('Description') ],
149 refresh_callback = refresh,
150 delete_callback = delete,
151 ignore_OK_button = True,
152 list_tooltip_callback = tooltip
153 )
154 #================================================================
155 -def configure_string_from_list_option(parent=None, message=None, option=None, bias='user', default_value=u'', choices=None, columns=None, data=None, caption=None):
156
157 dbcfg = gmCfg.cCfgSQL()
158
159 current_value = dbcfg.get2 (
160 option = option,
161 workplace = gmSurgery.gmCurrentPractice().active_workplace,
162 bias = bias,
163 default = default_value
164 )
165
166 if parent is None:
167 parent = wx.GetApp().GetTopWindow()
168
169 if caption is None:
170 caption = _('Configuration')
171
172 selections = None
173 if current_value is not None:
174 try:
175 selections = [choices.index(current_value)]
176 except ValueError:
177 pass
178
179 choice = gmListWidgets.get_choices_from_list (
180 parent = parent,
181 msg = message,
182 caption = caption,
183 choices = choices,
184 columns = columns,
185 data = data,
186 selections = selections,
187 single_selection = True,
188 can_return_empty = False
189 )
190
191 # aborted
192 if choice is None:
193 return
194
195 # same value selected again
196 if choice == current_value:
197 return
198
199 dbcfg = gmCfg.cCfgSQL()
200 dbcfg.set (
201 workplace = gmSurgery.gmCurrentPractice().active_workplace,
202 option = option,
203 value = choice
204 )
205
206 return
207 #================================================================
208 -def configure_string_option(parent=None, message=None, option=None, bias=u'user', default_value=u'', validator=None):
209
210 dbcfg = gmCfg.cCfgSQL()
211
212 current_value = dbcfg.get2 (
213 option = option,
214 workplace = gmSurgery.gmCurrentPractice().active_workplace,
215 bias = bias,
216 default = default_value
217 )
218
219 if current_value is not None:
220 current_value = u'%s' % current_value
221
222 if parent is None:
223 parent = wx.GetApp().GetTopWindow()
224
225 while True:
226 dlg = wx.TextEntryDialog (
227 parent = parent,
228 message = message,
229 caption = _('Configuration'),
230 defaultValue = gmTools.coalesce(current_value, u''),
231 style = wx.OK | wx.CANCEL | wx.CENTRE
232 )
233 result = dlg.ShowModal()
234 if result == wx.ID_CANCEL:
235 dlg.Destroy()
236 return None
237
238 user_val = dlg.GetValue().strip()
239 dlg.Destroy()
240
241 if user_val == current_value:
242 return user_val
243
244 validated, user_val = validator(user_val)
245 if validated:
246 break
247
248 gmDispatcher.send (
249 signal = u'statustext',
250 msg = _('Value [%s] not valid for option <%s>.') % (user_val, option),
251 beep = True
252 )
253
254 dbcfg = gmCfg.cCfgSQL()
255 dbcfg.set (
256 workplace = gmSurgery.gmCurrentPractice().active_workplace,
257 option = option,
258 value = user_val
259 )
260
261 return user_val
262 #================================================================
264
265 if parent is None:
266 parent = wx.GetApp().GetTopWindow()
267
268 tooltips = [
269 _('Set "%s" to <True>.') % option,
270 _('Set "%s" to <False>.') % option,
271 _('Abort the dialog and do not change the current setting.')
272 ]
273 if button_tooltips is not None:
274 for idx in range(len(button_tooltips)):
275 tooltips[idx] = button_tooltips[idx]
276
277 dlg = gmGuiHelpers.c3ButtonQuestionDlg (
278 parent,
279 -1,
280 caption = _('Configuration'),
281 question = question,
282 button_defs = [
283 {'label': _('Yes'), 'tooltip': tooltips[0]},
284 {'label': _('No'), 'tooltip': tooltips[1]},
285 {'label': _('Cancel'), 'tooltip': tooltips[2], 'default': True}
286 ]
287 )
288
289 decision = dlg.ShowModal()
290 dbcfg = gmCfg.cCfgSQL()
291 if decision == wx.ID_YES:
292 dbcfg.set (
293 workplace = gmSurgery.gmCurrentPractice().active_workplace,
294 option = option,
295 value = True
296 )
297 elif decision == wx.ID_NO:
298 dbcfg.set (
299 workplace = gmSurgery.gmCurrentPractice().active_workplace,
300 option = option,
301 value = False
302 )
303
304 return
305 #================================================================
306 if __name__ == '__main__':
307
308 from Gnumed.pycommon import gmI18N
309 gmI18N.activate_locale()
310 gmI18N.install_domain()
311
312 if (len(sys.argv) > 1):
313 if sys.argv[1] == 'test':
314 check_for_updates()
315
316 #================================================================
317
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Mon Jun 25 03:58:25 2012 | http://epydoc.sourceforge.net |