Package Gnumed :: Package wxpython :: Module gmFormWidgets
[frames] | no frames]

Source Code for Module Gnumed.wxpython.gmFormWidgets

  1  """GNUmed form/letter handling widgets.""" 
  2   
  3  #================================================================ 
  4  __author__ = "Karsten Hilbert <Karsten.Hilbert@gmx.net>" 
  5  __license__ = "GPL v2 or later" 
  6   
  7   
  8  import os.path 
  9  import sys 
 10  import logging 
 11  import shutil 
 12   
 13   
 14  import wx 
 15   
 16   
 17  if __name__ == '__main__': 
 18          sys.path.insert(0, '../../') 
 19  from Gnumed.pycommon import gmI18N 
 20  from Gnumed.pycommon import gmTools 
 21  from Gnumed.pycommon import gmDispatcher 
 22  from Gnumed.pycommon import gmPrinting 
 23  from Gnumed.pycommon import gmDateTime 
 24  from Gnumed.pycommon import gmShellAPI 
 25  from Gnumed.pycommon import gmMimeLib 
 26   
 27  from Gnumed.business import gmForms 
 28  from Gnumed.business import gmPerson 
 29   
 30  from Gnumed.wxpython import gmGuiHelpers 
 31  from Gnumed.wxpython import gmListWidgets 
 32  from Gnumed.wxpython import gmMacro 
 33  from Gnumed.wxpython.gmDocumentWidgets import save_files_as_new_document 
 34   
 35   
 36  _log = logging.getLogger('gm.ui') 
 37   
 38  _ID_FORM_DISPOSAL_PRINT_NOW, \ 
 39  _ID_FORM_DISPOSAL_MAIL_NOW, \ 
 40  _ID_FORM_DISPOSAL_FAX_NOW, \ 
 41  _ID_FORM_DISPOSAL_TRAY_NOW, \ 
 42  _ID_FORM_DISPOSAL_ARCHIVE_NOW, \ 
 43  _ID_FORM_DISPOSAL_SAVE_NOW = range(6) 
 44   
 45  #============================================================ 
 46  # convenience functions 
 47  #============================================================ 
 72   
 73  #------------------------------------------------------------ 
 74  # eventually this should become superfluous when there's a 
 75  # standard engine wrapper around OOo 
126  #------------------------------------------------------------ 
127 -def manage_form_templates(parent=None, template_types=None, active_only=False, excluded_types=None, msg=None):
128 129 if parent is None: 130 parent = wx.GetApp().GetTopWindow() 131 132 #------------------------- 133 def edit(template=None): 134 dlg = cFormTemplateEditAreaDlg(parent, -1, template=template) 135 return (dlg.ShowModal() == wx.ID_OK)
136 #------------------------- 137 def delete(template): 138 delete = gmGuiHelpers.gm_show_question ( 139 aTitle = _('Deleting form template.'), 140 aMessage = _( 141 'Are you sure you want to delete\n' 142 'the following form template ?\n\n' 143 ' "%s (%s)"\n\n' 144 'You can only delete templates which\n' 145 'have not yet been used to generate\n' 146 'any forms from.' 147 ) % (template['name_long'], template['external_version']) 148 ) 149 if delete: 150 # FIXME: make this a priviledged operation ? 151 gmForms.delete_form_template(template = template) 152 return True 153 return False 154 #------------------------- 155 def refresh(lctrl): 156 templates = gmForms.get_form_templates(active_only = active_only, template_types = template_types, excluded_types = excluded_types) 157 lctrl.set_string_items(items = [ [t['name_long'], t['external_version'], gmForms.form_engine_names[t['engine']]] for t in templates ]) 158 lctrl.set_data(data = templates) 159 #------------------------- 160 template = gmListWidgets.get_choices_from_list ( 161 parent = parent, 162 msg = msg, 163 caption = _('Select letter or form template.'), 164 columns = [_('Template'), _('Version'), _('Type')], 165 edit_callback = edit, 166 new_callback = edit, 167 delete_callback = delete, 168 refresh_callback = refresh, 169 single_selection = True 170 ) 171 172 return template 173 174 #------------------------------------------------------------
175 -def generate_form_from_template(parent=None, template_types=None, edit=None, template=None, excluded_template_types=None):
176 """If <edit> is None it will honor the template setting.""" 177 178 if parent is None: 179 parent = wx.GetApp().GetTopWindow() 180 181 # 1) get template to use 182 if template is None: 183 template = manage_form_templates ( 184 parent = parent, 185 active_only = True, 186 template_types = template_types, 187 excluded_types = excluded_template_types 188 ) 189 if template is None: 190 gmDispatcher.send(signal = 'statustext', msg = _('No document template selected.'), beep = False) 191 return None 192 193 if template['engine'] == u'O': 194 return print_doc_from_ooo_template(template = template) 195 196 wx.BeginBusyCursor() 197 198 # 2) process template 199 try: 200 form = template.instantiate() 201 except KeyError: 202 _log.exception('cannot instantiate document template [%s]', template) 203 gmGuiHelpers.gm_show_error ( 204 aMessage = _('Invalid document template [%s - %s (%s)]') % (name, ver, template['engine']), 205 aTitle = _('Generating document from template') 206 ) 207 wx.EndBusyCursor() 208 return None 209 ph = gmMacro.gmPlaceholderHandler() 210 #ph.debug = True 211 form.substitute_placeholders(data_source = ph) 212 if edit is None: 213 if form.template['edit_after_substitution']: 214 edit = True 215 else: 216 edit = False 217 if edit: 218 wx.EndBusyCursor() 219 form.edit() 220 wx.BeginBusyCursor() 221 222 # 3) generate output 223 pdf_name = form.generate_output() 224 wx.EndBusyCursor() 225 if pdf_name is not None: 226 return form 227 228 gmGuiHelpers.gm_show_error ( 229 aMessage = _('Error generating document printout.'), 230 aTitle = _('Generating document printout') 231 ) 232 return None
233 234 #------------------------------------------------------------
235 -def act_on_generated_forms(parent=None, forms=None, jobtype=None, episode_name=None, progress_note=None, review_copy_as_normal=False):
236 """This function assumes that .generate_output() has already been called on each form.""" 237 238 if len(forms) == 0: 239 return True 240 241 no_of_printables = 0 242 for form in forms: 243 no_of_printables += len(form.final_output_filenames) 244 245 if no_of_printables == 0: 246 return True 247 248 soap_lines = [] 249 250 #----------------------------- 251 def save_soap(soap=None): 252 if soap.strip() == u'': 253 return 254 pat = gmPerson.gmCurrentPatient() 255 emr = pat.get_emr() 256 epi = emr.add_episode(episode_name = episode_name, is_open = False) 257 emr.add_clin_narrative ( 258 soap_cat = None, 259 note = soap, 260 episode = epi 261 )
262 #----------------------------- 263 def archive_forms(episode_name=None): 264 if episode_name is None: 265 epi = None # will ask for episode further down 266 else: 267 pat = gmPerson.gmCurrentPatient() 268 emr = pat.get_emr() 269 epi = emr.add_episode(episode_name = episode_name, is_open = False) 270 271 for form in forms: 272 files2import = [] 273 files2import.extend(form.final_output_filenames) 274 files2import.extend(form.re_editable_filenames) 275 if len(files2import) == 0: 276 continue 277 save_files_as_new_document ( 278 parent = parent, 279 filenames = files2import, 280 document_type = form.template['instance_type'], 281 unlock_patient = False, 282 episode = epi, 283 review_as_normal = review_copy_as_normal, 284 reference = None 285 ) 286 287 return True 288 #----------------------------- 289 def save_forms(): 290 # anything to do ? 291 files2save = [] 292 form_names = [] 293 for form in forms: 294 files2save.extend(form.final_output_filenames) 295 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version'])) 296 if len(files2save) == 0: 297 return True 298 # get path 299 path = os.path.expanduser(os.path.join('~', 'gnumed')) 300 dlg = wx.DirDialog ( 301 parent = parent, 302 message = _('Select directory in which to create patient directory ...'), 303 defaultPath = path, 304 style = wx.DD_DEFAULT_STYLE 305 ) 306 result = dlg.ShowModal() 307 path = dlg.GetPath() 308 dlg.Destroy() 309 if result != wx.ID_OK: 310 return 311 # save forms 312 pat = gmPerson.gmCurrentPatient() 313 path = os.path.join(path, pat.dirname) 314 gmTools.mkdir(path) 315 _log.debug('form saving path: %s', path) 316 for form in forms: 317 for filename in form.final_output_filenames: 318 shutil.copy2(filename, path) 319 soap_lines.append(_('Saved to disk: %s') % u', '.join(form_names)) 320 return True 321 #----------------------------- 322 def print_forms(): 323 # anything to do ? 324 files2print = [] 325 form_names = [] 326 for form in forms: 327 files2print.extend(form.final_output_filenames) 328 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version'])) 329 if len(files2print) == 0: 330 return True 331 # print 332 printed = gmPrinting.print_files(filenames = files2print, jobtype = jobtype) 333 if not printed: 334 gmGuiHelpers.gm_show_error ( 335 aMessage = _('Error printing documents.'), 336 aTitle = _('Printing [%s]') % jobtype 337 ) 338 return False 339 soap_lines.append(_('Printed: %s') % u', '.join(form_names)) 340 return True 341 #----------------------------- 342 def mail_forms(): 343 # anything to do ? 344 files2mail = [] 345 form_names = [] 346 for form in forms: 347 files2mail.extend(form.final_output_filenames) 348 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version'])) 349 if len(files2mail) == 0: 350 return True 351 found, external_cmd = gmShellAPI.detect_external_binary('gm-mail_doc') 352 if not found: 353 return False 354 # send mail 355 cmd = u'%s %s' % (external_cmd, u' '.join(files2mail)) 356 if os.name == 'nt': 357 blocking = True 358 else: 359 blocking = False 360 success = gmShellAPI.run_command_in_shell ( 361 command = cmd, 362 blocking = blocking 363 ) 364 if not success: 365 gmGuiHelpers.gm_show_error ( 366 aMessage = _('Error mailing documents.'), 367 aTitle = _('Mailing documents') 368 ) 369 return False 370 soap_lines.append(_('Mailed: %s') % u', '.join(form_names)) 371 return True 372 #----------------------------- 373 def fax_forms(fax_number=None): 374 # anything to do ? 375 files2fax = [] 376 form_names = [] 377 for form in forms: 378 files2fax.extend(form.final_output_filenames) 379 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version'])) 380 if len(files2fax) == 0: 381 return True 382 found, external_cmd = gmShellAPI.detect_external_binary('gm-fax_doc') 383 if not found: 384 return False 385 # send fax 386 cmd = u'%s "%s" %s' % (external_cmd, fax_number, u' '.join(files2fax)) 387 if os.name == 'nt': 388 blocking = True 389 else: 390 blocking = False 391 success = gmShellAPI.run_command_in_shell ( 392 command = cmd, 393 blocking = blocking 394 ) 395 if not success: 396 gmGuiHelpers.gm_show_error ( 397 aMessage = _('Error faxing documents to\n\n %s') % fax_number, 398 aTitle = _('Faxing documents') 399 ) 400 return False 401 soap_lines.append(_('Faxed to %s: %s') % (fax_number, u', '.join(form_names))) 402 return True 403 #----------------------------- 404 405 if parent is None: 406 parent = wx.GetApp().GetTopWindow() 407 408 if jobtype is None: 409 jobtype = 'generic_document' 410 411 dlg = cFormDisposalDlg(parent, -1) 412 dlg.forms = forms 413 dlg.progress_note = progress_note 414 dlg.episode_name = episode_name 415 action_code = dlg.ShowModal() 416 417 if action_code == wx.ID_CANCEL: 418 dlg.Destroy() 419 return True 420 421 forms = dlg._LCTRL_forms.get_item_data() 422 if len(forms) == 0: 423 dlg.Destroy() 424 return True 425 426 progress_note = dlg.progress_note 427 episode_name = dlg._PRW_episode.GetValue().strip() 428 do_save = dlg._CHBOX_save.GetValue() 429 do_print = dlg._CHBOX_print.GetValue() 430 do_mail = dlg._CHBOX_mail.GetValue() 431 fax_number = dlg._PRW_fax.GetValue().strip() 432 dlg.Destroy() 433 434 if action_code == wx.ID_OK: 435 if episode_name != u'': 436 result = archive_forms(episode_name = episode_name) 437 if do_save: 438 result = save_forms() 439 if do_print: 440 result = print_forms() 441 if do_mail: 442 result = mail_forms() 443 if fax_number != u'': 444 result = fax_forms(fax_number = fax_number) 445 if progress_note != u'': 446 soap_lines.insert(0, progress_note) 447 if len(soap_lines) > 0: 448 save_soap(soap = u'\n'.join(soap_lines)) 449 return result 450 451 success = False 452 keep_a_copy = False 453 if action_code == _ID_FORM_DISPOSAL_PRINT_NOW: 454 if episode_name != u'': 455 keep_a_copy = True 456 success = print_forms() 457 458 elif action_code == _ID_FORM_DISPOSAL_ARCHIVE_NOW: 459 if episode_name == u'': 460 episode_name = None 461 keep_a_copy = True 462 success = True 463 464 elif action_code == _ID_FORM_DISPOSAL_SAVE_NOW: 465 if episode_name != u'': 466 keep_a_copy = True 467 success = save_forms() 468 469 elif action_code == _ID_FORM_DISPOSAL_MAIL_NOW: 470 if episode_name != u'': 471 keep_a_copy = True 472 success = mail_forms() 473 474 elif action_code == _ID_FORM_DISPOSAL_FAX_NOW: 475 if episode_name != u'': 476 keep_a_copy = True 477 success = fax_forms(fax_number = fax_number) 478 479 elif action_code == _ID_FORM_DISPOSAL_TRAY_NOW: 480 # not implemented 481 success = False 482 483 if not success: 484 return False 485 486 if progress_note != u'': 487 soap_lines.insert(0, progress_note) 488 if len(soap_lines) > 0: 489 save_soap(soap = u'\n'.join(soap_lines)) 490 491 if keep_a_copy: 492 archive_forms(episode_name = episode_name) 493 494 return True 495 496 #============================================================ 497 from Gnumed.wxGladeWidgets import wxgFormDisposalDlg 498
499 -class cFormDisposalDlg(wxgFormDisposalDlg.wxgFormDisposalDlg):
500
501 - def __init__(self, *args, **kwargs):
502 503 wxgFormDisposalDlg.wxgFormDisposalDlg.__init__(self, *args, **kwargs) 504 505 self.__init_ui()
506 507 #-------------------------------------------------------- 508 # properties 509 #--------------------------------------------------------
510 - def _set_msg(self, msg):
511 self._LBL_msg.SetLabel(msg) 512 self._LBL_msg.Refresh()
513 514 message = property(lambda x:x, _set_msg) 515 516 #--------------------------------------------------------
517 - def _set_forms(self, forms):
518 items = [ f.template['name_long'] for f in forms ] 519 self._LCTRL_forms.set_string_items(items) 520 self._LCTRL_forms.set_data(forms)
521 522 forms = property(lambda x:x, _set_forms) 523 524 #--------------------------------------------------------
525 - def _get_note(self):
526 return self._TCTRL_soap.GetValue().strip()
527
528 - def _set_note(self, note):
529 if note is None: 530 note = u'' 531 self._TCTRL_soap.SetValue(note)
532 533 progress_note = property(_get_note, _set_note) 534 535 #--------------------------------------------------------
536 - def _get_episode_name(self):
537 return self._PRW_episode.GetValue().strip()
538
539 - def _set_episode_name(self, episode_name):
540 if episode_name is None: 541 episode_name = u'' 542 self._PRW_episode.SetValue(episode_name)
543 544 episode_name = property(_get_episode_name, _set_episode_name) 545 546 #-------------------------------------------------------- 547 # internal helpers 548 #--------------------------------------------------------
549 - def __init_ui(self):
550 self._LCTRL_forms.set_columns([_('Form')]) 551 552 self.__mail_script_exists, path = gmShellAPI.detect_external_binary(binary = r'gm-mail_doc') 553 if not self.__mail_script_exists: 554 self._LBL_mail.Disable() 555 self._CHBOX_mail.SetLabel(_('<gm-mail_doc(.bat) not found>')) 556 self._CHBOX_mail.SetValue(False) 557 self._CHBOX_mail.Disable() 558 self._BTN_mail.Disable() 559 560 self.__fax_script_exists, path = gmShellAPI.detect_external_binary(binary = r'gm-fax_doc') 561 if not self.__fax_script_exists: 562 self._LBL_fax.Disable() 563 self._PRW_fax.SetText(_('<gm-fax_doc(.bat) not found>'), data = None) 564 self._PRW_fax.display_as_disabled(True) 565 self._PRW_fax.Disable() 566 self._BTN_fax.Disable() 567 568 self._LBL_tray.Disable() 569 self._CHBOX_tray.SetValue(False) 570 self._CHBOX_tray.Disable() 571 self._BTN_tray.Disable()
572 573 #-------------------------------------------------------- 574 # event handlers 575 #--------------------------------------------------------
576 - def _on_print_button_pressed(self, event):
577 self.EndModal(_ID_FORM_DISPOSAL_PRINT_NOW)
578 #--------------------------------------------------------
579 - def _on_mail_button_pressed(self, event):
580 event.Skip() 581 if not self.__mail_script_exists: 582 return 583 self.EndModal(_ID_FORM_DISPOSAL_MAIL_NOW)
584 #--------------------------------------------------------
585 - def _on_fax_button_pressed(self, event):
586 event.Skip() 587 if not self.__fax_script_exists: 588 return 589 self.EndModal(_ID_FORM_DISPOSAL_FAX_NOW)
590 #--------------------------------------------------------
591 - def _on_tray_button_pressed(self, event):
592 self.EndModal(_ID_FORM_DISPOSAL_TRAY_NOW)
593 #--------------------------------------------------------
594 - def _on_archive_button_pressed(self, event):
595 self.EndModal(_ID_FORM_DISPOSAL_ARCHIVE_NOW)
596 #--------------------------------------------------------
597 - def _on_save_button_pressed(self, event):
598 self.EndModal(_ID_FORM_DISPOSAL_SAVE_NOW)
599 #--------------------------------------------------------
600 - def _on_show_forms_button_pressed(self, event):
601 event.Skip() 602 forms2show = self._LCTRL_forms.get_selected_item_data() 603 if len(forms2show) == 0: 604 return 605 for form in forms2show: 606 for filename in form.final_output_filenames: 607 gmMimeLib.call_viewer_on_file(filename, block = True)
608 #--------------------------------------------------------
609 - def _on_delete_forms_button_pressed(self, event):
610 print "Event handler '_on_delete_forms_button_pressed' not implemented!" 611 event.Skip()
612 #--------------------------------------------------------
613 - def _on_ok_button_pressed(self, event):
614 self.EndModal(wx.ID_OK)
615 #============================================================ 616 from Gnumed.wxGladeWidgets import wxgFormTemplateEditAreaPnl 617
618 -class cFormTemplateEditAreaPnl(wxgFormTemplateEditAreaPnl.wxgFormTemplateEditAreaPnl):
619
620 - def __init__(self, *args, **kwargs):
621 try: 622 self.__template = kwargs['template'] 623 del kwargs['template'] 624 except KeyError: 625 self.__template = None 626 627 wxgFormTemplateEditAreaPnl.wxgFormTemplateEditAreaPnl.__init__(self, *args, **kwargs) 628 629 self._PRW_name_long.matcher = gmForms.cFormTemplateNameLong_MatchProvider() 630 self._PRW_name_short.matcher = gmForms.cFormTemplateNameShort_MatchProvider() 631 self._PRW_template_type.matcher = gmForms.cFormTemplateType_MatchProvider() 632 633 self.refresh() 634 635 self.full_filename = None
636 #--------------------------------------------------------
637 - def refresh(self, template = None):
638 if template is not None: 639 self.__template = template 640 641 if self.__template is None: 642 self._PRW_name_long.SetText(u'') 643 self._PRW_name_short.SetText(u'') 644 self._TCTRL_external_version.SetValue(u'') 645 self._PRW_template_type.SetText(u'') 646 self._PRW_instance_type.SetText(u'') 647 self._TCTRL_filename.SetValue(u'') 648 self._CH_engine.SetSelection(0) 649 self._CHBOX_active.SetValue(True) 650 self._CHBOX_editable.SetValue(True) 651 652 self._TCTRL_date_modified.SetValue(u'') 653 self._TCTRL_modified_by.SetValue(u'') 654 655 self._BTN_export.Enable(False) 656 else: 657 self._PRW_name_long.SetText(self.__template['name_long']) 658 self._PRW_name_short.SetText(self.__template['name_short']) 659 self._TCTRL_external_version.SetValue(self.__template['external_version']) 660 self._PRW_template_type.SetText(self.__template['l10n_template_type'], data = self.__template['pk_template_type']) 661 self._PRW_instance_type.SetText(self.__template['l10n_instance_type'], data = self.__template['instance_type']) 662 self._TCTRL_filename.SetValue(self.__template['filename']) 663 self._CH_engine.SetSelection(gmForms.form_engine_abbrevs.index(self.__template['engine'])) 664 self._CHBOX_active.SetValue(self.__template['in_use']) 665 self._CHBOX_editable.SetValue(self.__template['edit_after_substitution']) 666 667 self._TCTRL_date_modified.SetValue(gmDateTime.pydt_strftime(self.__template['last_modified'], '%Y %b %d')) 668 self._TCTRL_modified_by.SetValue(self.__template['modified_by']) 669 670 self._TCTRL_filename.Enable(True) 671 #self._BTN_load.Enable(not self.__template['has_instances']) 672 self._BTN_load.Enable(True) 673 674 self._BTN_export.Enable(True) 675 676 self._PRW_name_long.SetFocus()
677 #--------------------------------------------------------
678 - def __valid_for_save(self):
679 error = False 680 681 if gmTools.coalesce(self._PRW_name_long.GetValue(), u'').strip() == u'': 682 error = True 683 self._PRW_name_long.SetBackgroundColour('pink') 684 else: 685 self._PRW_name_long.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) 686 687 if gmTools.coalesce(self._PRW_name_short.GetValue(), u'').strip() == u'': 688 error = True 689 self._PRW_name_short.SetBackgroundColour('pink') 690 else: 691 self._PRW_name_short.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) 692 693 if gmTools.coalesce(self._TCTRL_external_version.GetValue(), u'').strip() == u'': 694 error = True 695 self._TCTRL_external_version.SetBackgroundColour('pink') 696 else: 697 self._TCTRL_external_version.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) 698 699 if gmTools.coalesce(self._PRW_template_type.GetValue(), u'').strip() == u'': 700 error = True 701 self._PRW_template_type.SetBackgroundColour('pink') 702 else: 703 self._PRW_template_type.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) 704 705 if gmTools.coalesce(self._PRW_instance_type.GetValue(), u'').strip() == u'': 706 error = True 707 self._PRW_instance_type.SetBackgroundColour('pink') 708 else: 709 self._PRW_instance_type.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOW)) 710 711 if self.__template is None and self.full_filename is None: 712 error = True 713 gmDispatcher.send(signal = 'statustext', msg = _('You must select a template file before saving.'), beep = True) 714 715 return not error
716 #--------------------------------------------------------
717 - def save(self):
718 if not self.__valid_for_save(): 719 return False 720 721 if self.__template is None: 722 self.__template = gmForms.create_form_template ( 723 template_type = self._PRW_template_type.GetData(), 724 name_short = self._PRW_name_short.GetValue().strip(), 725 name_long = self._PRW_name_long.GetValue().strip() 726 ) 727 else: 728 self.__template['pk_template_type'] = self._PRW_template_type.GetData() 729 self.__template['name_short'] = self._PRW_name_short.GetValue().strip() 730 self.__template['name_long'] = self._PRW_name_long.GetValue().strip() 731 732 # if not self.__template['has_instances']: 733 if self.full_filename is not None: 734 self.__template.update_template_from_file(filename = self.full_filename) 735 736 self.__template['external_version'] = self._TCTRL_external_version.GetValue() 737 tmp = self._PRW_instance_type.GetValue().strip() 738 if tmp not in [self.__template['instance_type'], self.__template['l10n_instance_type']]: 739 self.__template['instance_type'] = tmp 740 self.__template['filename'] = self._TCTRL_filename.GetValue() 741 self.__template['in_use'] = self._CHBOX_active.GetValue() 742 self.__template['edit_after_substitution'] = self._CHBOX_editable.GetValue() 743 self.__template['engine'] = gmForms.form_engine_abbrevs[self._CH_engine.GetSelection()] 744 745 self.__template.save() 746 return True
747 #-------------------------------------------------------- 748 # event handlers 749 #--------------------------------------------------------
750 - def _on_load_button_pressed(self, evt):
751 752 engine_abbrev = gmForms.form_engine_abbrevs[self._CH_engine.GetSelection()] 753 754 wildcards = [] 755 try: 756 wildcards.append(u'%s (%s)|%s' % ( 757 gmForms.form_engine_names[engine_abbrev], 758 gmForms.form_engine_template_wildcards[engine_abbrev], 759 gmForms.form_engine_template_wildcards[engine_abbrev] 760 )) 761 except KeyError: 762 pass 763 764 wildcards.append(u"%s (*)|*" % _('all files')) 765 wildcards.append(u"%s (*.*)|*.*" % _('all files (Windows)')) 766 767 dlg = wx.FileDialog ( 768 parent = self, 769 message = _('Choose a form template file'), 770 defaultDir = os.path.expanduser(os.path.join('~', 'gnumed')), 771 defaultFile = '', 772 wildcard = '|'.join(wildcards), 773 style = wx.OPEN | wx.HIDE_READONLY | wx.FILE_MUST_EXIST 774 ) 775 result = dlg.ShowModal() 776 if result != wx.ID_CANCEL: 777 self.full_filename = dlg.GetPath() 778 fname = os.path.split(self.full_filename)[1] 779 self._TCTRL_filename.SetValue(fname) 780 dlg.Destroy()
781 #--------------------------------------------------------
782 - def _on_export_button_pressed(self, event):
783 784 if self.__template is None: 785 return 786 787 engine_abbrev = gmForms.form_engine_abbrevs[self._CH_engine.GetSelection()] 788 789 wildcards = [] 790 try: 791 wildcards.append(u'%s (%s)|%s' % ( 792 gmForms.form_engine_names[engine_abbrev], 793 gmForms.form_engine_template_wildcards[engine_abbrev], 794 gmForms.form_engine_template_wildcards[engine_abbrev] 795 )) 796 except KeyError: 797 pass 798 wildcards.append(u"%s (*)|*" % _('all files')) 799 wildcards.append(u"%s (*.*)|*.*" % _('all files (Windows)')) 800 801 dlg = wx.FileDialog ( 802 parent = self, 803 message = _('Enter a filename to save the template in'), 804 defaultDir = os.path.expanduser(os.path.join('~', 'gnumed')), 805 defaultFile = '', 806 wildcard = '|'.join(wildcards), 807 style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT | wx.HIDE_READONLY 808 ) 809 result = dlg.ShowModal() 810 if result != wx.ID_CANCEL: 811 fname = dlg.GetPath() 812 self.__template.export_to_file(filename = fname) 813 814 dlg.Destroy()
815 #============================================================ 816 from Gnumed.wxGladeWidgets import wxgFormTemplateEditAreaDlg 817
818 -class cFormTemplateEditAreaDlg(wxgFormTemplateEditAreaDlg.wxgFormTemplateEditAreaDlg):
819
820 - def __init__(self, *args, **kwargs):
821 try: 822 template = kwargs['template'] 823 del kwargs['template'] 824 except KeyError: 825 template = None 826 827 wxgFormTemplateEditAreaDlg.wxgFormTemplateEditAreaDlg.__init__(self, *args, **kwargs) 828 829 self._PNL_edit_area.refresh(template=template)
830 #--------------------------------------------------------
831 - def _on_save_button_pressed(self, evt):
832 if self._PNL_edit_area.save(): 833 if self.IsModal(): 834 self.EndModal(wx.ID_OK) 835 else: 836 self.Close()
837 #============================================================ 838 # main 839 #------------------------------------------------------------ 840 if __name__ == '__main__': 841 842 gmI18N.activate_locale() 843 gmI18N.install_domain(domain = 'gnumed') 844 845 #----------------------------------------
846 - def test_cFormTemplateEditAreaPnl():
847 app = wx.PyWidgetTester(size = (400, 300)) 848 pnl = cFormTemplateEditAreaPnl(app.frame, -1, template = gmForms.cFormTemplate(aPK_obj=4)) 849 app.frame.Show(True) 850 app.MainLoop() 851 return
852 #---------------------------------------- 853 if (len(sys.argv) > 1) and (sys.argv[1] == 'test'): 854 test_cFormTemplateEditAreaPnl() 855 856 #============================================================ 857