| Home | Trees | Indices | Help |
|
|---|
|
|
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 import gmEditArea
34 from Gnumed.wxpython.gmDocumentWidgets import save_files_as_new_document
35
36
37 _log = logging.getLogger('gm.ui')
38
39 _ID_FORM_DISPOSAL_PRINT_NOW, \
40 _ID_FORM_DISPOSAL_MAIL_NOW, \
41 _ID_FORM_DISPOSAL_FAX_NOW, \
42 _ID_FORM_DISPOSAL_TRAY_NOW, \
43 _ID_FORM_DISPOSAL_ARCHIVE_NOW, \
44 _ID_FORM_DISPOSAL_SAVE_NOW = range(6)
45
46 #============================================================
47 # generic form generation and handling convenience functions
48 #------------------------------------------------------------
50
51 form = generate_form_from_template (
52 parent = parent,
53 excluded_template_types = [
54 u'gnuplot script',
55 u'visual progress note',
56 u'invoice'
57 ],
58 edit = True
59 )
60 if form is None:
61 return False
62
63 if form in [True, False]: # returned by special OOo/LO handling
64 return form
65
66 return act_on_generated_forms (
67 parent = parent,
68 forms = [form],
69 jobtype = jobtype,
70 episode_name = u'administrative',
71 review_copy_as_normal = True
72 )
73
74 #------------------------------------------------------------
75 # eventually this should become superfluous when there's a
76 # standard engine wrapper around OOo
78
79 # export template to file
80 filename = template.export_to_file()
81 if filename is None:
82 gmGuiHelpers.gm_show_error (
83 _( 'Error exporting form template\n'
84 '\n'
85 ' "%s" (%s)'
86 ) % (template['name_long'], template['external_version']),
87 _('Letter template export')
88 )
89 return False
90
91 try:
92 doc = gmForms.cOOoLetter(template_file = filename, instance_type = template['instance_type'])
93 except ImportError:
94 gmGuiHelpers.gm_show_error (
95 _('Cannot connect to OpenOffice.\n\n'
96 'The UNO bridge module for Python\n'
97 'is not installed.'
98 ),
99 _('Letter writer')
100 )
101 return False
102
103 if not doc.open_in_ooo():
104 gmGuiHelpers.gm_show_error (
105 _('Cannot connect to OpenOffice.\n'
106 '\n'
107 'You may want to increase the option\n'
108 '\n'
109 ' <%s>'
110 ) % _('OOo startup time'),
111 _('Letter writer')
112 )
113 try: os.remove(filename)
114 except: pass
115 return False
116
117 doc.show(False)
118 ph_handler = gmMacro.gmPlaceholderHandler()
119 doc.replace_placeholders(handler = ph_handler)
120
121 filename = filename.replace('.ott', '.odt').replace('-FormTemplate-', '-FormInstance-')
122 doc.save_in_ooo(filename = filename)
123
124 doc.show(True)
125
126 return True
127
128 #------------------------------------------------------------
129 -def generate_form_from_template(parent=None, template_types=None, edit=None, template=None, excluded_template_types=None):
130 """If <edit> is None it will honor the template setting."""
131
132 if parent is None:
133 parent = wx.GetApp().GetTopWindow()
134
135 # 1) get template to use
136 if template is None:
137 template = manage_form_templates (
138 parent = parent,
139 active_only = True,
140 template_types = template_types,
141 excluded_types = excluded_template_types
142 )
143 if template is None:
144 gmDispatcher.send(signal = 'statustext', msg = _('No document template selected.'), beep = False)
145 return None
146
147 if template['engine'] == u'O':
148 return print_doc_from_ooo_template(template = template)
149
150 wx.BeginBusyCursor()
151
152 # 2) process template
153 try:
154 form = template.instantiate()
155 except KeyError:
156 _log.exception('cannot instantiate document template [%s]', template)
157 gmGuiHelpers.gm_show_error (
158 aMessage = _('Invalid document template [%s - %s (%s)]') % (name, ver, template['engine']),
159 aTitle = _('Generating document from template')
160 )
161 wx.EndBusyCursor()
162 return None
163 ph = gmMacro.gmPlaceholderHandler()
164 #ph.debug = True
165 form.substitute_placeholders(data_source = ph)
166 if edit is None:
167 if form.template['edit_after_substitution']:
168 edit = True
169 else:
170 edit = False
171 if edit:
172 wx.EndBusyCursor()
173 form.edit()
174 wx.BeginBusyCursor()
175
176 # 3) generate output
177 pdf_name = form.generate_output()
178 wx.EndBusyCursor()
179 if pdf_name is not None:
180 return form
181
182 gmGuiHelpers.gm_show_error (
183 aMessage = _('Error generating document printout.'),
184 aTitle = _('Generating document printout')
185 )
186 return None
187
188 #------------------------------------------------------------
189 -def act_on_generated_forms(parent=None, forms=None, jobtype=None, episode_name=None, progress_note=None, review_copy_as_normal=False):
190 """This function assumes that .generate_output() has already been called on each form."""
191
192 if len(forms) == 0:
193 return True
194
195 no_of_printables = 0
196 for form in forms:
197 no_of_printables += len(form.final_output_filenames)
198
199 if no_of_printables == 0:
200 return True
201
202 soap_lines = []
203
204 #-----------------------------
205 def save_soap(soap=None):
206 if soap.strip() == u'':
207 return
208 pat = gmPerson.gmCurrentPatient()
209 emr = pat.get_emr()
210 epi = emr.add_episode(episode_name = episode_name, is_open = False)
211 emr.add_clin_narrative (
212 soap_cat = None,
213 note = soap,
214 episode = epi
215 )
216 #-----------------------------
217 def archive_forms(episode_name=None):
218 if episode_name is None:
219 epi = None # will ask for episode further down
220 else:
221 pat = gmPerson.gmCurrentPatient()
222 emr = pat.get_emr()
223 epi = emr.add_episode(episode_name = episode_name, is_open = False)
224
225 for form in forms:
226 files2import = []
227 files2import.extend(form.final_output_filenames)
228 files2import.extend(form.re_editable_filenames)
229 if len(files2import) == 0:
230 continue
231 save_files_as_new_document (
232 parent = parent,
233 filenames = files2import,
234 document_type = form.template['instance_type'],
235 unlock_patient = False,
236 episode = epi,
237 review_as_normal = review_copy_as_normal,
238 reference = None
239 )
240
241 return True
242 #-----------------------------
243 def save_forms():
244 # anything to do ?
245 files2save = []
246 form_names = []
247 for form in forms:
248 files2save.extend(form.final_output_filenames)
249 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version']))
250 if len(files2save) == 0:
251 return True
252 # get path
253 path = os.path.expanduser(os.path.join('~', 'gnumed'))
254 dlg = wx.DirDialog (
255 parent = parent,
256 message = _('Select directory in which to create patient directory ...'),
257 defaultPath = path,
258 style = wx.DD_DEFAULT_STYLE
259 )
260 result = dlg.ShowModal()
261 path = dlg.GetPath()
262 dlg.Destroy()
263 if result != wx.ID_OK:
264 return
265 # save forms
266 pat = gmPerson.gmCurrentPatient()
267 path = os.path.join(path, pat.dirname)
268 gmTools.mkdir(path)
269 _log.debug('form saving path: %s', path)
270 for form in forms:
271 for filename in form.final_output_filenames:
272 shutil.copy2(filename, path)
273 soap_lines.append(_('Saved to disk: %s') % u', '.join(form_names))
274 return True
275 #-----------------------------
276 def print_forms():
277 # anything to do ?
278 files2print = []
279 form_names = []
280 for form in forms:
281 files2print.extend(form.final_output_filenames)
282 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version']))
283 if len(files2print) == 0:
284 return True
285 # print
286 printed = gmPrinting.print_files(filenames = files2print, jobtype = jobtype)
287 if not printed:
288 gmGuiHelpers.gm_show_error (
289 aMessage = _('Error printing documents.'),
290 aTitle = _('Printing [%s]') % jobtype
291 )
292 return False
293 soap_lines.append(_('Printed: %s') % u', '.join(form_names))
294 return True
295 #-----------------------------
296 def mail_forms():
297 # anything to do ?
298 files2mail = []
299 form_names = []
300 for form in forms:
301 files2mail.extend(form.final_output_filenames)
302 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version']))
303 if len(files2mail) == 0:
304 return True
305 found, external_cmd = gmShellAPI.detect_external_binary('gm-mail_doc')
306 if not found:
307 return False
308 # send mail
309 cmd = u'%s %s' % (external_cmd, u' '.join(files2mail))
310 if os.name == 'nt':
311 blocking = True
312 else:
313 blocking = False
314 success = gmShellAPI.run_command_in_shell (
315 command = cmd,
316 blocking = blocking
317 )
318 if not success:
319 gmGuiHelpers.gm_show_error (
320 aMessage = _('Error mailing documents.'),
321 aTitle = _('Mailing documents')
322 )
323 return False
324 soap_lines.append(_('Mailed: %s') % u', '.join(form_names))
325 return True
326 #-----------------------------
327 def fax_forms(fax_number=None):
328 # anything to do ?
329 files2fax = []
330 form_names = []
331 for form in forms:
332 files2fax.extend(form.final_output_filenames)
333 form_names.append(u'%s (%s)' % (form.template['name_long'], form.template['external_version']))
334 if len(files2fax) == 0:
335 return True
336 found, external_cmd = gmShellAPI.detect_external_binary('gm-fax_doc')
337 if not found:
338 return False
339 # send fax
340 cmd = u'%s "%s" %s' % (external_cmd, fax_number, u' '.join(files2fax))
341 if os.name == 'nt':
342 blocking = True
343 else:
344 blocking = False
345 success = gmShellAPI.run_command_in_shell (
346 command = cmd,
347 blocking = blocking
348 )
349 if not success:
350 gmGuiHelpers.gm_show_error (
351 aMessage = _('Error faxing documents to\n\n %s') % fax_number,
352 aTitle = _('Faxing documents')
353 )
354 return False
355 soap_lines.append(_('Faxed to %s: %s') % (fax_number, u', '.join(form_names)))
356 return True
357 #-----------------------------
358
359 if parent is None:
360 parent = wx.GetApp().GetTopWindow()
361
362 if jobtype is None:
363 jobtype = 'generic_document'
364
365 dlg = cFormDisposalDlg(parent, -1)
366 dlg.forms = forms
367 dlg.progress_note = progress_note
368 dlg.episode_name = episode_name
369 action_code = dlg.ShowModal()
370
371 if action_code == wx.ID_CANCEL:
372 dlg.Destroy()
373 return True
374
375 forms = dlg._LCTRL_forms.get_item_data()
376 if len(forms) == 0:
377 dlg.Destroy()
378 return True
379
380 progress_note = dlg.progress_note
381 episode_name = dlg._PRW_episode.GetValue().strip()
382 do_save = dlg._CHBOX_save.GetValue()
383 do_print = dlg._CHBOX_print.GetValue()
384 do_mail = dlg._CHBOX_mail.GetValue()
385 fax_number = dlg._PRW_fax.GetValue().strip()
386 dlg.Destroy()
387
388 if action_code == wx.ID_OK:
389 if episode_name != u'':
390 result = archive_forms(episode_name = episode_name)
391 if do_save:
392 result = save_forms()
393 if do_print:
394 result = print_forms()
395 if do_mail:
396 result = mail_forms()
397 if fax_number != u'':
398 result = fax_forms(fax_number = fax_number)
399 if progress_note != u'':
400 soap_lines.insert(0, progress_note)
401 if len(soap_lines) > 0:
402 save_soap(soap = u'\n'.join(soap_lines))
403 return result
404
405 success = False
406 keep_a_copy = False
407 if action_code == _ID_FORM_DISPOSAL_PRINT_NOW:
408 if episode_name != u'':
409 keep_a_copy = True
410 success = print_forms()
411
412 elif action_code == _ID_FORM_DISPOSAL_ARCHIVE_NOW:
413 if episode_name == u'':
414 episode_name = None
415 keep_a_copy = True
416 success = True
417
418 elif action_code == _ID_FORM_DISPOSAL_SAVE_NOW:
419 if episode_name != u'':
420 keep_a_copy = True
421 success = save_forms()
422
423 elif action_code == _ID_FORM_DISPOSAL_MAIL_NOW:
424 if episode_name != u'':
425 keep_a_copy = True
426 success = mail_forms()
427
428 elif action_code == _ID_FORM_DISPOSAL_FAX_NOW:
429 if episode_name != u'':
430 keep_a_copy = True
431 success = fax_forms(fax_number = fax_number)
432
433 elif action_code == _ID_FORM_DISPOSAL_TRAY_NOW:
434 # not implemented
435 success = False
436
437 if not success:
438 return False
439
440 if progress_note != u'':
441 soap_lines.insert(0, progress_note)
442 if len(soap_lines) > 0:
443 save_soap(soap = u'\n'.join(soap_lines))
444
445 if keep_a_copy:
446 archive_forms(episode_name = episode_name)
447
448 return True
449
450 #============================================================
451 from Gnumed.wxGladeWidgets import wxgFormDisposalDlg
452
454
456
457 wxgFormDisposalDlg.wxgFormDisposalDlg.__init__(self, *args, **kwargs)
458
459 self.__init_ui()
460
461 #--------------------------------------------------------
462 # properties
463 #--------------------------------------------------------
467
468 message = property(lambda x:x, _set_msg)
469
470 #--------------------------------------------------------
472 items = [ f.template['name_long'] for f in forms ]
473 self._LCTRL_forms.set_string_items(items)
474 self._LCTRL_forms.set_data(forms)
475
476 forms = property(lambda x:x, _set_forms)
477
478 #--------------------------------------------------------
480 return self._TCTRL_soap.GetValue().strip()
481
486
487 progress_note = property(_get_note, _set_note)
488
489 #--------------------------------------------------------
491 return self._PRW_episode.GetValue().strip()
492
497
498 episode_name = property(_get_episode_name, _set_episode_name)
499
500 #--------------------------------------------------------
501 # internal helpers
502 #--------------------------------------------------------
504 self._LCTRL_forms.set_columns([_('Form')])
505
506 self.__mail_script_exists, path = gmShellAPI.detect_external_binary(binary = r'gm-mail_doc')
507 if not self.__mail_script_exists:
508 self._LBL_mail.Disable()
509 self._CHBOX_mail.SetLabel(_('<gm-mail_doc(.bat) not found>'))
510 self._CHBOX_mail.SetValue(False)
511 self._CHBOX_mail.Disable()
512 self._BTN_mail.Disable()
513
514 self.__fax_script_exists, path = gmShellAPI.detect_external_binary(binary = r'gm-fax_doc')
515 if not self.__fax_script_exists:
516 self._LBL_fax.Disable()
517 self._PRW_fax.SetText(_('<gm-fax_doc(.bat) not found>'), data = None)
518 self._PRW_fax.display_as_disabled(True)
519 self._PRW_fax.Disable()
520 self._BTN_fax.Disable()
521
522 self._LBL_tray.Disable()
523 self._CHBOX_tray.SetValue(False)
524 self._CHBOX_tray.Disable()
525 self._BTN_tray.Disable()
526
527 #--------------------------------------------------------
528 # event handlers
529 #--------------------------------------------------------
532 #--------------------------------------------------------
538 #--------------------------------------------------------
544 #--------------------------------------------------------
547 #--------------------------------------------------------
550 #--------------------------------------------------------
553 #--------------------------------------------------------
562 #--------------------------------------------------------
566 #--------------------------------------------------------
569
570 #============================================================
571 # form template management
572 #------------------------------------------------------------
574 ea = cFormTemplateEAPnl(parent = parent, id = -1)
575 ea.data = template
576 ea.mode = gmTools.coalesce(template, 'new', 'edit')
577 dlg = gmEditArea.cGenericEditAreaDlg2(parent = parent, id = -1, edit_area = ea, single_entry = single_entry)
578 dlg.SetTitle(gmTools.coalesce(template, _('Adding new form template'), _('Editing form template')))
579 if dlg.ShowModal() == wx.ID_OK:
580 dlg.Destroy()
581 return True
582 dlg.Destroy()
583 return False
584
585 #------------------------------------------------------------
586 -def manage_form_templates(parent=None, template_types=None, active_only=False, excluded_types=None, msg=None):
587
588 if parent is None:
589 parent = wx.GetApp().GetTopWindow()
590
591 #-------------------------
592 def edit(template=None):
593 return edit_template(parent = parent, template = template)
594 #-------------------------
595 def delete(template):
596 delete = gmGuiHelpers.gm_show_question (
597 aTitle = _('Deleting form template.'),
598 aMessage = _(
599 'Are you sure you want to delete\n'
600 'the following form template ?\n\n'
601 ' "%s (%s)"\n\n'
602 'You can only delete templates which\n'
603 'have not yet been used to generate\n'
604 'any forms from.'
605 ) % (template['name_long'], template['external_version'])
606 )
607 if delete:
608 # FIXME: make this a priviledged operation ?
609 gmForms.delete_form_template(template = template)
610 return True
611 return False
612 #-------------------------
613 def refresh(lctrl):
614 templates = gmForms.get_form_templates(active_only = active_only, template_types = template_types, excluded_types = excluded_types)
615 lctrl.set_string_items(items = [ [t['name_long'], t['external_version'], gmForms.form_engine_names[t['engine']]] for t in templates ])
616 lctrl.set_data(data = templates)
617 #-------------------------
618 template = gmListWidgets.get_choices_from_list (
619 parent = parent,
620 msg = msg,
621 caption = _('Select letter or form template.'),
622 columns = [_('Template'), _('Version'), _('Type')],
623 edit_callback = edit,
624 new_callback = edit,
625 delete_callback = delete,
626 refresh_callback = refresh,
627 single_selection = True
628 )
629
630 return template
631
632 #------------------------------------------------------------
633 from Gnumed.wxGladeWidgets import wxgFormTemplateEditAreaPnl
634
635 -class cFormTemplateEAPnl(wxgFormTemplateEditAreaPnl.wxgFormTemplateEditAreaPnl, gmEditArea.cGenericEditAreaMixin):
636
638
639 try:
640 data = kwargs['template']
641 del kwargs['template']
642 except KeyError:
643 data = None
644
645 wxgFormTemplateEditAreaPnl.wxgFormTemplateEditAreaPnl.__init__(self, *args, **kwargs)
646 gmEditArea.cGenericEditAreaMixin.__init__(self)
647
648 self.full_filename = None
649
650 self.mode = 'new'
651 self.data = data
652 if data is not None:
653 self.mode = 'edit'
654
655 self.__init_ui()
656 #----------------------------------------------------------------
658 self._PRW_name_long.matcher = gmForms.cFormTemplateNameLong_MatchProvider()
659 self._PRW_name_short.matcher = gmForms.cFormTemplateNameShort_MatchProvider()
660 self._PRW_template_type.matcher = gmForms.cFormTemplateType_MatchProvider()
661 #----------------------------------------------------------------
662 # generic Edit Area mixin API
663 #----------------------------------------------------------------
665
666 validity = True
667
668 # self._TCTRL_filename
669 self.display_tctrl_as_valid(tctrl = self._TCTRL_filename, valid = True)
670 fname = self._TCTRL_filename.GetValue().strip()
671 # 1) new template: file must exist
672 if self.data is None:
673 try:
674 open(fname, 'r').close()
675 except:
676 validity = False
677 self.display_tctrl_as_valid(tctrl = self._TCTRL_filename, valid = False)
678 self.status_message = _('You must select a template file before saving.')
679 self._TCTRL_filename.SetFocus()
680 # 2) existing template
681 # - empty = no change
682 # - does not exist: name change in DB field
683 # - does exist: reload from filesystem
684
685 # self._PRW_instance_type
686 if self._PRW_instance_type.GetValue().strip() == u'':
687 validity = False
688 self._PRW_instance_type.display_as_valid(False)
689 self.status_message = _('You must enter a type for documents created with this template.')
690 self._PRW_instance_type.SetFocus()
691 else:
692 self._PRW_instance_type.display_as_valid(True)
693
694 # self._PRW_template_type
695 if self._PRW_template_type.GetData() is None:
696 validity = False
697 self._PRW_template_type.display_as_valid(False)
698 self.status_message = _('You must enter a type for this template.')
699 self._PRW_template_type.SetFocus()
700 else:
701 self._PRW_template_type.display_as_valid(True)
702
703 # self._TCTRL_external_version
704 if self._TCTRL_external_version.GetValue().strip() == u'':
705 validity = False
706 self.display_tctrl_as_valid(tctrl = self._TCTRL_external_version, valid = False)
707 self.status_message = _('You must enter a version for this template.')
708 self._TCTRL_external_version.SetFocus()
709 else:
710 self.display_tctrl_as_valid(tctrl = self._TCTRL_external_version, valid = True)
711
712 # self._PRW_name_short
713 if self._PRW_name_short.GetValue().strip() == u'':
714 validity = False
715 self._PRW_name_short.display_as_valid(False)
716 self.status_message = _('Missing short name for template.')
717 self._PRW_name_short.SetFocus()
718 else:
719 self._PRW_name_short.display_as_valid(True)
720
721 # self._PRW_name_long
722 if self._PRW_name_long.GetValue().strip() == u'':
723 validity = False
724 self._PRW_name_long.display_as_valid(False)
725 self.status_message = _('Missing long name for template.')
726 self._PRW_name_long.SetFocus()
727 else:
728 self._PRW_name_long.display_as_valid(True)
729
730 return validity
731 #----------------------------------------------------------------
733 data = gmForms.create_form_template (
734 template_type = self._PRW_template_type.GetData(),
735 name_short = self._PRW_name_short.GetValue().strip(),
736 name_long = self._PRW_name_long.GetValue().strip()
737 )
738 data['external_version'] = self._TCTRL_external_version.GetValue()
739 data['instance_type'] = self._PRW_instance_type.GetValue().strip()
740 data['filename'] = os.path.split(self._TCTRL_filename.GetValue().strip())[1]
741 data['in_use'] = self._CHBOX_active.GetValue()
742 data['edit_after_substitution'] = self._CHBOX_editable.GetValue()
743 data['engine'] = gmForms.form_engine_abbrevs[self._CH_engine.GetSelection()]
744 data.save()
745
746 data.update_template_from_file(filename = self._TCTRL_filename.GetValue().strip())
747
748 self.data = data
749 return True
750 #----------------------------------------------------------------
752 self.data['pk_template_type'] = self._PRW_template_type.GetData()
753 self.data['name_short'] = self._PRW_name_short.GetValue().strip()
754 self.data['name_long'] = self._PRW_name_long.GetValue().strip()
755 self.data['external_version'] = self._TCTRL_external_version.GetValue()
756 tmp = self._PRW_instance_type.GetValue().strip()
757 if tmp not in [self.data['instance_type'], self.data['l10n_instance_type']]:
758 self.data['instance_type'] = tmp
759 tmp = os.path.split(self._TCTRL_filename.GetValue().strip())[1]
760 if tmp != u'':
761 self.data['filename'] = tmp
762 self.data['in_use'] = self._CHBOX_active.GetValue()
763 self.data['edit_after_substitution'] = self._CHBOX_editable.GetValue()
764 self.data['engine'] = gmForms.form_engine_abbrevs[self._CH_engine.GetSelection()]
765 self.data.save()
766
767 fname = self._TCTRL_filename.GetValue().strip()
768 try:
769 open(fname, 'r').close()
770 self.data.update_template_from_file(filename = fname)
771 except:
772 pass # filename column already updated
773
774 return True
775 #----------------------------------------------------------------
777 self._PRW_name_long.SetText(u'')
778 self._PRW_name_short.SetText(u'')
779 self._TCTRL_external_version.SetValue(u'')
780 self._PRW_template_type.SetText(u'')
781 self._PRW_instance_type.SetText(u'')
782 self._TCTRL_filename.SetValue(u'')
783 self._CH_engine.SetSelection(0)
784 self._CHBOX_active.SetValue(True)
785 self._CHBOX_editable.SetValue(True)
786 self._LBL_status.SetLabel(u'')
787 self._BTN_export.Enable(False)
788
789 self._PRW_name_long.SetFocus()
790 #----------------------------------------------------------------
793 #----------------------------------------------------------------
795 self._PRW_name_long.SetText(self.data['name_long'])
796 self._PRW_name_short.SetText(self.data['name_short'])
797 self._TCTRL_external_version.SetValue(self.data['external_version'])
798 self._PRW_template_type.SetText(self.data['l10n_template_type'], data = self.data['pk_template_type'])
799 self._PRW_instance_type.SetText(self.data['l10n_instance_type'], data = self.data['instance_type'])
800 self._TCTRL_filename.SetValue(self.data['filename'])
801 self._CH_engine.SetSelection(gmForms.form_engine_abbrevs.index(self.data['engine']))
802 self._CHBOX_active.SetValue(self.data['in_use'])
803 self._CHBOX_editable.SetValue(self.data['edit_after_substitution'])
804 self._LBL_status.SetLabel(_('last modified %s by %s') % (
805 gmDateTime.pydt_strftime(self.data['last_modified'], '%Y %B %d'),
806 self.data['modified_by']
807 ))
808
809 self._TCTRL_filename.Enable(True)
810 self._BTN_load.Enable(True)
811 self._BTN_export.Enable(True)
812
813 self._BTN_load.SetFocus()
814 #----------------------------------------------------------------
815 # event handlers
816 #----------------------------------------------------------------
846 #----------------------------------------------------------------
880
881 #============================================================
882 # main
883 #------------------------------------------------------------
884 if __name__ == '__main__':
885
886 gmI18N.activate_locale()
887 gmI18N.install_domain(domain = 'gnumed')
888
889 #----------------------------------------
891 app = wx.PyWidgetTester(size = (400, 300))
892 pnl = cFormTemplateEAPnl(app.frame, -1, template = gmForms.cFormTemplate(aPK_obj=4))
893 app.frame.Show(True)
894 app.MainLoop()
895 return
896 #----------------------------------------
897 if (len(sys.argv) > 1) and (sys.argv[1] == 'test'):
898 test_cFormTemplateEAPnl()
899
900 #============================================================
901
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Sat Oct 5 03:56:33 2013 | http://epydoc.sourceforge.net |