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

Source Code for Module Gnumed.wxpython.patient.gmGP_Prescriptions

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