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