Package Gnumed :: Package wxpython :: Package patient :: Module gmGP_Prescriptions
[frames] | no frames]

Source Code for Module Gnumed.wxpython.patient.gmGP_Prescriptions

  1  #!/usr/bin/python 
  2  ############################################################################# 
  3  # 
  4  # gmPrescription: 
  5  # ---------------------------------- 
  6  # 
  7  # This panel will hold all the prescrition, and allow entry 
  8  # of those details via the editing area (gmEditArea.py - currently a 
  9  # vapour module 
 10  # 
 11  # If you don't like it - change this code see @TODO! 
 12  # 
 13  # @author: Dr. Richard Terry 
 14  # @copyright: author 
 15  # @license: GPL v2 or later (details at http://www.gnu.org) 
 16  # @dependencies: wxPython (>= version 2.3.1) 
 17  # @change log: 
 18  #           10.06.2002 rterry initial implementation, untested 
 19  # 
 20  # @TODO: 
 21  #       - write cmEditArea.py 
 22  #       - decide on type of list and text control to use 
 23  #       - someone smart to fix the code (simplify for same result) 
 24  # 
 25  ############################################################################ 
 26  try: 
 27          import wxversion 
 28          import wx 
 29  except ImportError: 
 30          from wxPython import wx 
 31   
 32  import gmGuiElement_HeadingCaptionPanel        #panel class to display top headings 
 33  import gmGuiElement_DividerCaptionPanel        #panel class to display sub-headings or divider headings 
 34  import gmGuiElement_AlertCaptionPanel          #panel to hold flashing alert messages 
 35  import gmEditArea                              #panel class holding editing 
 36  import gmPlugin_Patient 
 37  from gmPatientHolder import PatientHolder 
 38   
 39   
 40   
 41  ID_SCRIPTICON = wxNewId () 
 42  ID_SCRIPTLIST = wxNewId() 
 43  ID_SCRIPTMENU = wxNewId () 
 44  ID_POPUP1 = wxNewId() 
 45   
 46  gmSECTION_SCRIPT = 8 
 47  # script popup 
 48  ID_AuthInd = wxNewId() 
 49  ID_Interactions = wxNewId() 
 50  ID_PregInfo = wxNewId() 
 51  ID_Restrictions = wxNewId() 
 52  ID_EditItem = wxNewId() 
 53  ID_DelItem = wxNewId() 
 54  ID_DelAll = wxNewId() 
 55  ID_MakeItemReg24 = wxNewId() 
 56  ID_DrugInfoBrief = wxNewId() 
 57  ID_DrugInfoFull = wxNewId() 
 58  ID_PrintItem = wxNewId() 
 59  ID_PrintAll = wxNewId() 
 60  ID_ReprintItem = wxNewId() 
 61  ID_ReprintAll = wxNewId() 
 62  ID_JustSaveItem = wxNewId() 
 63  ID_JustSaveAll = wxNewId() 
 64  ID_ChangeFont = wxNewId() 
 65  ID_SaveListLayout = wxNewId() 
 66  ID_Help = wxNewId() 
 67  ID_Exit = wxNewId() 
 68  #------------------------------------ 
 69  #Dummy data to simulate script items 
 70  #------------------------------------ 
 71  scriptdata = { 
 72  1 : ("Fluvax","0.5ml", "to be injected by the doctor","flu immunisation"), 
 73  2 : ("Tenormin","50mg","1 daily", "hypertension"), 
 74  3 : ( "Ceclor CD","375mg","1 twice daily","sinusitis"), 
 75  } 
 76   
 77  scriptprompts = { 
 78  1:("Prescribe For"), 
 79  2:("Class"), 
 80  3:("Generic"), 
 81  4:("Brand"), 
 82  5:("Strength"), 
 83  6:("Directions"), 
 84  7:("For"), 
 85  8:("Progress Notes"), 
 86  9:(""), 
 87   } 
 88   
 89   
90 -class PrescriptionPanel (wxPanel, PatientHolder):
91 - def __init__(self,parent, id):
92 #wxPanel.__init__(self,parent, id) 93 wxPanel.__init__(self, parent, id, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER) 94 PatientHolder.__init__(self) 95 #-------------------- 96 #add the main heading 97 #-------------------- 98 self.scriptpanelheading = gmGuiElement_HeadingCaptionPanel.HeadingCaptionPanel(self,-1," SCRIPTS ") 99 #-------------------------------------------- 100 #sizer to hold either just date, or the 101 #authority details, aia, authority number 102 #-------------------------------------------- 103 self.sizer_authority = wxGridSizer(1,0,0,0) 104 self.sizer1 = wxBoxSizer(wxHORIZONTAL) 105 self.txt_scriptDate = wxTextCtrl(self,-1,"12/06/2002",wxDefaultPosition,wxDefaultSize) 106 self.spacer = wxWindow(self,-1, wxDefaultPosition,wxDefaultSize,0) 107 self.spacer.SetBackgroundColour(wxColor(222,222,222)) 108 #self.lbl_authorityindication = gmEditArea.EditAreaPromptLabel(self,-1,"Indication") 109 #self.lbl_authoritynumber = gmEditArea.EditAreaPromptLabel(self,-1,"Auth No.") 110 #self.txt_authorityindication = wxTextCtrl(self,-1,"",wxDefaultPosition,wxDefaultSize) 111 #self.txt_authorityindication.Hide() 112 #self.sizer_authority.Add(self.spacer,1,wxEXPAND) 113 self.sizer1.Add(1,0,20) 114 self.sizer1.Add(self.txt_scriptDate,3,wxEXPAND|wxALL,3) 115 #self.sizer1.Add(1,0,1) 116 self.sizer_authority.Add(self.sizer1,0,wxEXPAND) 117 #------------------------------------------------- 118 #now create the editarea specific for prescribing 119 #------------------------------------------------- 120 #self.editarea = gmEditArea.EditArea(self,-1,scriptprompts,gmSECTION_SCRIPT) 121 self.editarea = gmEditArea.gmPrescriptionEditArea(self,-1) 122 #--------------------------------------------------------------------- 123 #add the divider headings below the editing area for drug interactions 124 #and add text control to show mini-drug interactions 125 #--------------------------------------------------------------------- 126 self.interactiontext_subheading = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,_("Drug Interactions")) 127 self.sizer_divider_interaction_text = wxBoxSizer(wxHORIZONTAL) 128 self.sizer_divider_interaction_text.Add(self.interactiontext_subheading,1, wxEXPAND) 129 self.interactiontxt = wxTextCtrl(self,-1, 130 "Mini-Drug interaction text goes here (click this for full description)\n \n" 131 "Also, try clicking on the list below with the right mouse button to see a pop up menu", 132 style=wxTE_MULTILINE) 133 self.interactiontxt.SetFont(wxFont(10,wxSWISS,wxNORMAL,wxNORMAL,False,'')) 134 #------------------------------------------------------------------------------------ 135 #add the divider headings below the drug interactions as heading for items prescribed 136 #------------------------------------------------------------------------------------ 137 self.itemsprescribedheading = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,_("Items prescribed this consultation")) 138 self.sizer_itemsprescribed = wxBoxSizer(wxHORIZONTAL) 139 self.sizer_itemsprescribed.Add(self.itemsprescribedheading,1, wxEXPAND) 140 #-------------------------------------------------------------------------------------- 141 #add the list to contain the drugs person is allergic to 142 # 143 # c++ Default Constructor: 144 # wxListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, 145 # const wxSize& size = wxDefaultSize, long style = wxLC_ICON, 146 # const wxValidator& validator = wxDefaultValidator, const wxString& name = "listCtrl") 147 # 148 #-------------------------------------------------------------------------------------- 149 self.list_script = wxListCtrl(self, -1, wxDefaultPosition, wxDefaultSize,wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER) 150 self.list_script.SetFont(wxFont(10,wxSWISS, wxNORMAL, wxNORMAL, False, '')) 151 EVT_RIGHT_UP(self.list_script, self.OnRightClickUp) 152 #---------------------------------------- 153 # add some dummy data to the allergy list 154 self.list_script.InsertColumn(0, _("Drug")) 155 self.list_script.InsertColumn(1, _("Strength")) 156 self.list_script.InsertColumn(2, _("Directions")) 157 self.list_script.InsertColumn(3, _("For")) 158 #------------------------------------------------------------- 159 #loop through the scriptdata array and add to the list control 160 #note the different syntax for the first coloum of each row 161 #i.e. here > self.list_script.InsertStringItem(x, data[0])!! 162 #------------------------------------------------------------- 163 items = scriptdata.items() 164 for x in range(len(items)): 165 key, data = items[x] 166 self.list_script.InsertStringItem(x, data[0]) 167 self.list_script.SetStringItem(x, 1, data[1]) 168 self.list_script.SetStringItem(x, 2, data[2]) 169 self.list_script.SetStringItem(x, 3, data[3]) 170 self.list_script.SetItemData(x, key) 171 172 self.list_script.SetColumnWidth(0, wxLIST_AUTOSIZE) 173 self.list_script.SetColumnWidth(1, wxLIST_AUTOSIZE) 174 self.list_script.SetColumnWidth(2, wxLIST_AUTOSIZE) 175 self.list_script.SetColumnWidth(3, wxLIST_AUTOSIZE) 176 #---------------------------------------- 177 #add an alert caption panel to the bottom 178 #---------------------------------------- 179 self.alertpanel = gmGuiElement_AlertCaptionPanel.AlertCaptionPanel(self,-1," Alerts ") 180 #--------------------------------------------- 181 #add all elements to the main background sizer 182 #--------------------------------------------- 183 self.mainsizer = wxBoxSizer(wxVERTICAL) 184 self.mainsizer.Add(self.scriptpanelheading,0,wxEXPAND) 185 self.mainsizer.Add(self.sizer_authority,1,wxEXPAND) 186 self.mainsizer.Add(self.editarea,15,wxEXPAND) 187 self.mainsizer.Add(self.sizer_divider_interaction_text,0,wxEXPAND) 188 self.mainsizer.Add(self.interactiontxt,4,wxEXPAND) 189 self.mainsizer.Add(self.itemsprescribedheading,0,wxEXPAND) 190 self.mainsizer.Add(self.list_script,4,wxEXPAND) 191 self.mainsizer.Add(self.alertpanel,0,wxEXPAND) 192 self.SetSizer(self.mainsizer) 193 self.SetAutoLayout(True) 194 self.Show(True)
195
196 - def OnRightClickUp(self, event):
197 """A right mouse click triggers a popup menu for the list script""" 198 199 # create a temporary local popup menu 200 aMenu = wxMenu() 201 # Auth Ind: Australia: some drugs will only be subsidised given certain indications and explicit approval by authorities 202 # like German "Positivliste" 203 aMenu.Append(ID_AuthInd, _("Authority Indications")) 204 aMenu.Append(ID_Interactions, _("Interactions")) 205 aMenu.Append(ID_PregInfo, _("Pregnancy Information")) 206 aMenu.Append(ID_Restrictions, _("Restricted Use Information")) 207 aMenu.AppendSeparator() 208 aMenu.Append(ID_EditItem, _("Edit Item")) 209 aMenu.Append(ID_DelItem, _("Delete Item")) 210 aMenu.Append(ID_DelAll, _("Delete all Items")) 211 # Reg 24: Australia: dispense all repeats at once 212 aMenu.Append(ID_MakeItemReg24, _("Make Item Reg 24")) 213 aMenu.AppendSeparator() 214 aMenu.Append(ID_DrugInfoBrief, _("Brief Product Information")) 215 aMenu.Append(ID_DrugInfoFull, _("Full Product Information")) 216 aMenu.AppendSeparator() 217 aMenu.Append(ID_PrintItem, _("Print Single Item")) 218 aMenu.Append(ID_PrintAll, _("Print All Items")) 219 aMenu.AppendSeparator() 220 aMenu.Append(ID_ReprintItem, _("Reprint Item")) 221 aMenu.Append(ID_ReprintAll, _("Reprint All Items")) 222 aMenu.AppendSeparator() 223 aMenu.Append(ID_JustSaveItem, _("Save Item no print")) 224 aMenu.Append(ID_JustSaveAll, _("Save All Items no print")) 225 aMenu.AppendSeparator() 226 aMenu.Append(ID_ChangeFont, _("Change Font")) 227 aMenu.Append(ID_SaveListLayout, _("Save list layout")) 228 aMenu.AppendSeparator() 229 aMenu.Append(ID_Help, _("Help")) 230 aMenu.AppendSeparator() 231 aMenu.Append(ID_Exit, _("Exit")) 232 233 ##connect the events to event handler functions 234 EVT_MENU(self, ID_POPUP1, self.OnExitMenu) 235 EVT_MENU(self, ID_PregInfo, gmLog.gmDefLog.Log(gmLog.lErr, "This should display Pregnancy Information !")) 236 #EVT_MENU(self, ID_, gmLog.gmDefLog.Log(gmLog.lErr, "This should ... !") 237 238 # show the menu 239 self.PopupMenu(aMenu, event.GetPosition()) 240 #self.list_script.PopupMenu(aMenu,event.GetPosition()) 241 # whatever the user selected in the menu will have 242 # been handled already virtue of the MENU events 243 # created above 244 245 # free resources 246 aMenu.Destroy() 247 248 # anybody else needs to intercept right click events? 249 event.Skip()
250
251 - def OnExitMenu(self, event):
252 print "OnExitMenu"
253 #--------------------------------------------------------------------
254 -class gmGP_Prescriptions (gmPlugin_Patient.wxPatientPlugin):
255 """ 256 Plugin to encapsulate the prescriptions window 257 """ 258 259 __icons = { 260 """icon_Rx_symbol""": 'x\xda\xd3\xc8)0\xe4\nV74S\x00"c\x05Cu\xae\xc4`u=\x85d\x05e\x03 p\xb3\x00\ 261 \xf3#@|\x0b\x03\x10\x04\xf3\x15\x80|\xbf\xfc\xbcT(\x07\x15\xe0\x15\xd4\x83\ 262 \x00t\xc1\x08 \x80\x8a"\t\xc2I\xb2\x04\xc1 "\x82R\x8b\x80\x08UP\x01b,\xdc\ 263 \x9b\x10+\x14\xc0\xa6\xa2\xf9\x1d\xa8\x0eI;\x02DD\xe0\x0c%=\x00D|Hk' 264 } 265
266 - def name (self):
267 return 'Prescription writer'
268
269 - def MenuInfo (self):
270 return ('view', '&Script')
271
272 - def GetIconData(self, anIconID = None):
273 if anIconID == None: 274 return self.__icons[_("""icon_Rx_symbol""")] 275 else: 276 if self.__icons.has_key(anIconID): 277 return self.__icons[anIconID] 278 else: 279 return self.__icons[_("""icon_Rx_symbol""")]
280
281 - def GetWidget (self, parent):
282 panel = PrescriptionPanel (parent, -1) 283 return panel
284 #-------------------------------------------------------------------- 285 if __name__ == '__main__': 286 app = wxPyWidgetTester(size = (600, 600)) 287 app.SetWidget(PrescriptionPanel, -1) 288 app.MainLoop() 289