1
2
3
4
5 import wx
6
7
8
9
10
11
14
15 from Gnumed.wxpython.gmNarrativeWidgets import cSoapNoteInputNotebook
16 from Gnumed.wxpython.gmDateTimeInput import cFuzzyTimestampInput
17 from Gnumed.wxpython.gmEMRStructWidgets import cEncounterTypePhraseWheel
18 from Gnumed.wxpython.gmCodingWidgets import cGenericCodesPhraseWheel
19 from Gnumed.wxpython import gmListWidgets
20
21
22 kwds["style"] = wx.NO_BORDER|wx.TAB_TRAVERSAL
23 wx.Panel.__init__(self, *args, **kwds)
24 self._splitter_main = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER|wx.SP_PERMIT_UNSPLIT)
25 self.__splitter_main_right_pnl = wx.Panel(self._splitter_main, -1, style=wx.NO_BORDER|wx.TAB_TRAVERSAL)
26 self._NB_soap_editors = cSoapNoteInputNotebook(self.__splitter_main_right_pnl, -1, style=0)
27 self.__splitter_main_left_pnl = wx.Panel(self._splitter_main, -1, style=wx.NO_BORDER)
28 self._splitter_left = wx.SplitterWindow(self.__splitter_main_left_pnl, -1, style=wx.SP_3D|wx.SP_BORDER|wx.SP_PERMIT_UNSPLIT)
29 self.__splitter_left_bottom_pnl = wx.Panel(self._splitter_left, -1, style=wx.NO_BORDER)
30 self.__splitter_left_top_pnl = wx.Panel(self._splitter_left, -1, style=wx.NO_BORDER)
31 self._SZR_recent_notes_staticbox = wx.StaticBox(self.__splitter_left_bottom_pnl, -1, _("Most recent notes on above problem"))
32 self.__szr_right_staticbox = wx.StaticBox(self.__splitter_main_right_pnl, -1, _("New notelets in current encounter"))
33 self._SZR_problem_list_staticbox = wx.StaticBox(self.__splitter_left_top_pnl, -1, _("Active problems"))
34 self._CHBOX_show_closed_episodes = wx.CheckBox(self.__splitter_left_top_pnl, -1, _("Closed episodes"))
35 self._CHBOX_irrelevant_issues = wx.CheckBox(self.__splitter_left_top_pnl, -1, _("Non-relevant issues"))
36 self._LCTRL_active_problems = gmListWidgets.cReportListCtrl(self.__splitter_left_top_pnl, -1, style=wx.LC_REPORT|wx.NO_BORDER)
37 self._TCTRL_recent_notes = wx.TextCtrl(self.__splitter_left_bottom_pnl, -1, _("In this area GNUmed will place the notes of the\nprevious encounter as well as notes by other\nstaff for the current encounter.\n\nNote that this may change depending on which\nactive problem is selected in the editor below."), style=wx.TE_MULTILINE|wx.TE_READONLY|wx.TE_WORDWRAP|wx.NO_BORDER)
38 self._TCTRL_rfe = wx.TextCtrl(self.__splitter_main_right_pnl, -1, "", style=wx.NO_BORDER)
39 self._PRW_rfe_codes = cGenericCodesPhraseWheel(self.__splitter_main_right_pnl, -1, "", style=wx.NO_BORDER)
40 self._TCTRL_aoe = wx.TextCtrl(self.__splitter_main_right_pnl, -1, "", style=wx.NO_BORDER)
41 self._PRW_aoe_codes = cGenericCodesPhraseWheel(self.__splitter_main_right_pnl, -1, "", style=wx.NO_BORDER)
42 self.notebook_1_pane_1 = wx.Panel(self._NB_soap_editors, -1)
43 self._BTN_new_editor = wx.Button(self.__splitter_main_right_pnl, -1, _("&New"), style=wx.BU_EXACTFIT)
44 self._BTN_clear_editor = wx.Button(self.__splitter_main_right_pnl, -1, _("&Clear"), style=wx.BU_EXACTFIT)
45 self._BTN_discard_editor = wx.Button(self.__splitter_main_right_pnl, -1, _("&Discard"), style=wx.BU_EXACTFIT)
46 self._BTN_save_note = wx.Button(self.__splitter_main_right_pnl, -1, _("&Save"), style=wx.BU_EXACTFIT)
47 self._BTN_save_note_under = wx.Button(self.__splitter_main_right_pnl, -1, _("Save &under"), style=wx.BU_EXACTFIT)
48 self._BTN_image = wx.Button(self.__splitter_main_right_pnl, -1, _("&Image"), style=wx.BU_EXACTFIT)
49 self._BTN_save_encounter = wx.Button(self.__splitter_main_right_pnl, -1, _("Save"), style=wx.BU_EXACTFIT)
50 self._BTN_save_all = wx.Button(self.__splitter_main_right_pnl, -1, _("Save &all"), style=wx.BU_EXACTFIT)
51
52 self.__set_properties()
53 self.__do_layout()
54
55 self.Bind(wx.EVT_CHECKBOX, self._on_show_closed_episodes_checked, self._CHBOX_show_closed_episodes)
56 self.Bind(wx.EVT_CHECKBOX, self._on_irrelevant_issues_checked, self._CHBOX_irrelevant_issues)
57 self.Bind(wx.EVT_LIST_ITEM_SELECTED, self._on_problem_selected, self._LCTRL_active_problems)
58 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self._on_problem_activated, self._LCTRL_active_problems)
59 self.Bind(wx.EVT_LIST_ITEM_FOCUSED, self._on_problem_focused, self._LCTRL_active_problems)
60 self.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self._on_problem_rclick, self._LCTRL_active_problems)
61 self.Bind(wx.EVT_BUTTON, self._on_new_editor_button_pressed, self._BTN_new_editor)
62 self.Bind(wx.EVT_BUTTON, self._on_clear_editor_button_pressed, self._BTN_clear_editor)
63 self.Bind(wx.EVT_BUTTON, self._on_discard_editor_button_pressed, self._BTN_discard_editor)
64 self.Bind(wx.EVT_BUTTON, self._on_save_note_button_pressed, self._BTN_save_note)
65 self.Bind(wx.EVT_BUTTON, self._on_save_note_under_button_pressed, self._BTN_save_note_under)
66 self.Bind(wx.EVT_BUTTON, self._on_image_button_pressed, self._BTN_image)
67 self.Bind(wx.EVT_BUTTON, self._on_save_encounter_button_pressed, self._BTN_save_encounter)
68 self.Bind(wx.EVT_BUTTON, self._on_save_all_button_pressed, self._BTN_save_all)
69
70
72
73 self._CHBOX_show_closed_episodes.SetToolTipString(_("Show closed episodes as pseudo-problems ?"))
74 self._CHBOX_irrelevant_issues.SetToolTipString(_("Show issues marked clinically NOT relevant."))
75 self._LCTRL_active_problems.SetToolTipString(_("This shows the list of active problems, They include open episodes as well as active health issues."))
76 self._TCTRL_recent_notes.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DFACE))
77 self._TCTRL_rfe.SetToolTipString(_("Also known as the Reason For Encounter/Visit (RFE).\n\nOptionally captures why the consultation takes place.\n\nIt may be due to a patient request or it may be prompted by other reasons. Often initially collected at the front desk and put into a waiting list comment. May turn out to just be a proxy request for why the patient really is here."))
78 self._PRW_rfe_codes.SetToolTipString(_("Codes relevant to the Reason for Encounter\nseparated by \";\"."))
79 self._TCTRL_aoe.SetToolTipString(_("Also known as the Assessment of Encounter/Visit (AOE)\n\nOptionally summarizes the outcome/assessment of the consultation from the doctors point of view.\n\nNote that this summary spans all the problems discussed during this encounter."))
80 self._PRW_aoe_codes.SetToolTipString(_("Codes relevant to the Assessment of Encounter\nseparated by \";\"."))
81 self._BTN_new_editor.SetToolTipString(_("Open a new progress note editor.\n\nThere is a configuration item on whether to allow several new-episode editors at once."))
82 self._BTN_clear_editor.SetToolTipString(_("Clear the editor for the displayed progress note."))
83 self._BTN_discard_editor.SetToolTipString(_("Discard the editor for the displayed progress note."))
84 self._BTN_save_note.SetToolTipString(_("Save the currently displayed progress note under the current encounter."))
85 self._BTN_save_note_under.SetToolTipString(_("Save the currently displayed note into an encounter selected from a list of encounters."))
86 self._BTN_image.SetToolTipString(_("Add a visual progress note for this episode."))
87 self._BTN_save_encounter.SetToolTipString(_("Save the encounter details."))
88 self._BTN_save_all.SetToolTipString(_("Save encounter details and all progress notes."))
89
90
92
93 __szr_main = wx.BoxSizer(wx.HORIZONTAL)
94 __szr_right = wx.StaticBoxSizer(self.__szr_right_staticbox, wx.VERTICAL)
95 __szr_buttons = wx.BoxSizer(wx.HORIZONTAL)
96 __gszr_encounter_details = wx.FlexGridSizer(2, 2, 2, 5)
97 __szr_aoe = wx.BoxSizer(wx.HORIZONTAL)
98 __szr_rfe_details = wx.BoxSizer(wx.HORIZONTAL)
99 __szr_left = wx.BoxSizer(wx.HORIZONTAL)
100 _SZR_recent_notes = wx.StaticBoxSizer(self._SZR_recent_notes_staticbox, wx.VERTICAL)
101 _SZR_problem_list = wx.StaticBoxSizer(self._SZR_problem_list_staticbox, wx.VERTICAL)
102 __szr_problem_filter = wx.BoxSizer(wx.HORIZONTAL)
103 __lbl_problem_filter = wx.StaticText(self.__splitter_left_top_pnl, -1, _("Include:"))
104 __szr_problem_filter.Add(__lbl_problem_filter, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 10)
105 __szr_problem_filter.Add(self._CHBOX_show_closed_episodes, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
106 __szr_problem_filter.Add(self._CHBOX_irrelevant_issues, 0, wx.ALIGN_CENTER_VERTICAL, 0)
107 __szr_problem_filter.Add((20, 20), 1, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
108 _SZR_problem_list.Add(__szr_problem_filter, 0, wx.EXPAND, 0)
109 _SZR_problem_list.Add(self._LCTRL_active_problems, 1, wx.EXPAND, 0)
110 self.__splitter_left_top_pnl.SetSizer(_SZR_problem_list)
111 _SZR_recent_notes.Add(self._TCTRL_recent_notes, 1, wx.EXPAND, 0)
112 self.__splitter_left_bottom_pnl.SetSizer(_SZR_recent_notes)
113 self._splitter_left.SplitHorizontally(self.__splitter_left_top_pnl, self.__splitter_left_bottom_pnl)
114 __szr_left.Add(self._splitter_left, 1, wx.EXPAND, 0)
115 self.__splitter_main_left_pnl.SetSizer(__szr_left)
116 __lbl_rfe = wx.StaticText(self.__splitter_main_right_pnl, -1, _("Purpose"))
117 __gszr_encounter_details.Add(__lbl_rfe, 0, wx.ALIGN_CENTER_VERTICAL, 0)
118 __szr_rfe_details.Add(self._TCTRL_rfe, 2, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 5)
119 __lbl_rfe_codes = wx.StaticText(self.__splitter_main_right_pnl, -1, _("Codes:"))
120 __szr_rfe_details.Add(__lbl_rfe_codes, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
121 __szr_rfe_details.Add(self._PRW_rfe_codes, 1, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
122 __gszr_encounter_details.Add(__szr_rfe_details, 1, wx.EXPAND, 0)
123 __lbl_aoe = wx.StaticText(self.__splitter_main_right_pnl, -1, _("Summary"))
124 __gszr_encounter_details.Add(__lbl_aoe, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
125 __szr_aoe.Add(self._TCTRL_aoe, 2, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 5)
126 __lbl_aoe_codes = wx.StaticText(self.__splitter_main_right_pnl, -1, _("Codes:"))
127 __szr_aoe.Add(__lbl_aoe_codes, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
128 __szr_aoe.Add(self._PRW_aoe_codes, 1, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
129 __gszr_encounter_details.Add(__szr_aoe, 0, wx.EXPAND, 3)
130 __gszr_encounter_details.AddGrowableCol(1)
131 __szr_right.Add(__gszr_encounter_details, 0, wx.RIGHT|wx.TOP|wx.BOTTOM|wx.EXPAND, 3)
132 self._NB_soap_editors.AddPage(self.notebook_1_pane_1, _("tab1"))
133 __szr_right.Add(self._NB_soap_editors, 4, wx.EXPAND, 3)
134 __lbl_editor = wx.StaticText(self.__splitter_main_right_pnl, -1, _("Notelet:"))
135 __szr_buttons.Add(__lbl_editor, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
136 __szr_buttons.Add(self._BTN_new_editor, 0, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 3)
137 __szr_buttons.Add(self._BTN_clear_editor, 0, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 3)
138 __szr_buttons.Add(self._BTN_discard_editor, 0, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 3)
139 __szr_buttons.Add(self._BTN_save_note, 0, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 3)
140 __szr_buttons.Add(self._BTN_save_note_under, 0, wx.RIGHT|wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 3)
141 __szr_buttons.Add(self._BTN_image, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 0)
142 __szr_buttons.Add((1, 1), 1, wx.EXPAND, 0)
143 __lbl_encounter = wx.StaticText(self.__splitter_main_right_pnl, -1, _("Encounter:"))
144 __szr_buttons.Add(__lbl_encounter, 0, wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
145 __szr_buttons.Add(self._BTN_save_encounter, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 3)
146 __szr_buttons.Add((1, 1), 1, wx.EXPAND, 0)
147 __szr_buttons.Add(self._BTN_save_all, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL, 5)
148 __szr_right.Add(__szr_buttons, 0, wx.RIGHT|wx.TOP|wx.EXPAND, 3)
149 self.__splitter_main_right_pnl.SetSizer(__szr_right)
150 self._splitter_main.SplitVertically(self.__splitter_main_left_pnl, self.__splitter_main_right_pnl)
151 __szr_main.Add(self._splitter_main, 1, wx.EXPAND, 0)
152 self.SetSizer(__szr_main)
153 __szr_main.Fit(self)
154
155
157 print "Event handler `_on_save_all_button_pressed' not implemented!"
158 event.Skip()
159
161 print "Event handler `_on_save_encounter_button_pressed' not implemented!"
162 event.Skip()
163
165 print "Event handler `_on_save_note_button_pressed' not implemented!"
166 event.Skip()
167
169 print "Event handler `_on_new_editor_button_pressed' not implemented!"
170 event.Skip()
171
173 print "Event handler `_on_clear_editor_button_pressed' not implemented!"
174 event.Skip()
175
177 print "Event handler `_on_discard_editor_button_pressed' not implemented!"
178 event.Skip()
179
181 print "Event handler `_on_problem_activated' not implemented"
182 event.Skip()
183
185 print "Event handler `_on_problem_selected' not implemented"
186 event.Skip()
187
189 print "Event handler `_on_problem_focused' not implemented"
190 event.Skip()
191
193 print "Event handler `_on_show_closed_episodes_checked' not implemented"
194 event.Skip()
195
197 print "Event handler `_on_irrelevant_issues_checked' not implemented"
198 event.Skip()
199
201 print "Event handler `_on_image_button_pressed' not implemented"
202 event.Skip()
203
205 print "Event handler `_on_save_note_under_button_pressed' not implemented"
206 event.Skip()
207
209 print "Event handler `_on_problem_rclick' not implemented"
210 event.Skip()
211
212
213