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

Source Code for Module Gnumed.wxpython.patient.gmDemographics

  1  # -*- coding: utf-8 -*- 
  2  ############################################################################# 
  3  # gmDemographics 
  4  # ---------------------------------- 
  5  # 
  6  # This panel will hold all the patients details 
  7  # 
  8  # If you don't like it - change this code see @TODO! 
  9  # 
 10  # @copyright: authorcd 
 11  # @license: GPL v2 or later (details at http://www.gnu.org) 
 12  # @dependencies: wxPython (>= version 2.3.1) 
 13  # @change log: 
 14  #           10.06.2002 rterry initial implementation, untested 
 15  #           30.07.2002 rterry images put in file 
 16  # @TODO: 
 17  ############################################################################ 
 18  # $Source: /home/ncq/Projekte/cvs2git/vcs-mirror/gnumed/gnumed/client/wxpython/patient/gmDemographics.py,v $ 
 19  # $Id: gmDemographics.py,v 1.40 2008-04-13 14:39:49 ncq Exp $ 
 20  __version__ = "$Revision: 1.40 $" 
 21  __author__ = "R.Terry, SJ Tan" 
 22   
 23   
 24  import wx 
 25   
 26  from mx import DateTime 
 27   
 28  from Gnumed.pycommon import gmGuiBroker, gmDispatcher 
 29   
 30  import gmPlugin 
 31  import gmSQLListControl 
 32  from string import * 
 33  #import gmGP_PatientPicture 
 34   
 35  ID_PATIENT = wxNewId() 
 36  ID_PATIENTSLIST = wxNewId() 
 37  ID_ALL_MENU  = wxNewId() 
 38  ID_ADDRESSLIST = wxNewId() 
 39  ID_NAMESLIST = wxNewId() 
 40  ID_CURRENTADDRESS = wxNewId() 
 41  gmSECTION_PATIENT = 5 
 42  ID_COMBOTITLE = wxNewId() 
 43  ID_COMBOSEX = wxNewId() 
 44  ID_COMBOMARITALSTATUS = wxNewId() 
 45  ID_COMBONOKRELATIONSHIP = wxNewId() 
 46  ID_TXTSURNAME = wxNewId() 
 47  ID_TXTFIRSTNAME = wxNewId() 
 48  ID_TXTSALUTATION = wxNewId() 
 49  ID_TXTSTREET = wxNewId() 
 50  ID_TXTSUBURB = wxNewId() 
 51  ID_TXTSTATE = wxNewId() 
 52  ID_TXTPOSTCODE = wxNewId() 
 53  ID_TXTBIRTHDATE = wxNewId() 
 54  ID_TXTCOUNTRYOFBIRTH = wxNewId() 
 55  ID_TXTOCCUPATION = wxNewId() 
 56  ID_TXTNOKADDRESS = wxNewId() 
 57  ID_TXTHOMEPHONE = wxNewId() 
 58  ID_TXTWORKPHONE = wxNewId() 
 59  ID_TXTFAX = wxNewId() 
 60  ID_TXTEMAIL = wxNewId() 
 61  ID_TXTINTERNET = wxNewId() 
 62  ID_TXTMOBILE = wxNewId() 
 63  ID_TXTMEMO = wxNewId() 
 64  ID_LISTADDRESSES = wxNewId() 
 65  ID_BUTTONBROWSENOK = wxNewId() 
 66  ID_BUTTONPHOTOAQUIRE = wxNewId() 
 67  ID_BUTTONPHOTOEXPORT = wxNewId() 
 68  ID_BUTTONPHOTOIMPORT = wxNewId() 
 69  ID_CHKBOXRESIDENCE = wxNewId() 
 70  ID_CHKBOXPOSTAL = wxNewId() 
 71  ID_CHKBOXPREFERREDALIAS = wxNewId() 
 72  ID_BUTTONFINDPATIENT = wxNewId() 
 73  ID_TXTPATIENTFIND = wxNewId() 
 74  ID_TXTPATIENTAGE = wxNewId() 
 75  ID_TXTPATIENTALLERGIES  = wxNewId() 
 76   
 77  #------------------------------------ 
 78  #Dummy data to simulate allergy items 
 79  #------------------------------------ 
 80  aliasdata = { 
 81  1 : ("Peter Patient"), 
 82  2 : ("Bruce Dag"), 
 83  } 
 84  namelistdata = [ 
 85          'Smith Adan 129 Box Hill Road BOX HILL etc....', 
 86          'Smith Jean 52 WhereEver Street CANBERRA etc.....', 
 87          'Smith Michael 99 Longbeach Rd MANLYVALE  etc........' 
 88  ] 
 89   
 90  addressdata = ['129 Afred Street WARNERS BAY 2280', '99 Wolfe Street NEWCASTLE 2301'] 
 91   
 92  #-------------------------------------------------- 
 93  #Class which shows a blue bold label left justified 
 94  #-------------------------------------------------- 
95 -class BlueLabel(wxStaticText):
96 - def __init__(self, parent, id, prompt):
97 wxStaticText.__init__(self,parent, id,prompt,wxDefaultPosition,wxDefaultSize,wxALIGN_LEFT) 98 self.SetFont(wxFont(12,wxSWISS,wxNORMAL,wxBOLD,False,'')) 99 self.SetForegroundColour(wxColour(0,0,131))
100 #------------------------------------------------------------ 101 #text control class to be later replaced by the gmPhraseWheel 102 #------------------------------------------------------------
103 -class TextBox_RedBold(wxTextCtrl):
104 - def __init__ (self, parent, id): #, wxDefaultPostion, wxDefaultSize):
105 wxTextCtrl.__init__(self,parent,id,"",wxDefaultPosition, wxDefaultSize,wxSIMPLE_BORDER) 106 self.SetForegroundColour(wxColor(255,0,0)) 107 self.SetFont(wxFont(12,wxSWISS,wxNORMAL, wxBOLD,False,''))
108 -class TextBox_BlackNormal(wxTextCtrl):
109 - def __init__ (self, parent, id): #, wxDefaultPostion, wxDefaultSize):
110 wxTextCtrl.__init__(self,parent,id,"",wxDefaultPosition, wxDefaultSize,wxSIMPLE_BORDER) 111 self.SetForegroundColour(wxColor(0,0,0)) 112 self.SetFont(wxFont(12,wxSWISS,wxNORMAL, wxBOLD,False,''))
113 #------------------------------------------------------------
114 -class PatientsPanel(wxPanel, gmDataPanelMixin.DataPanelMixin):
115 - def __init__(self, parent, plugin, id=wxNewId ()):
116 wxPanel.__init__(self, parent, id ,wxDefaultPosition,wxDefaultSize,wxRAISED_BORDER|wxTAB_TRAVERSAL) 117 gmDataPanelMixin.DataPanelMixin.__init__(self) 118 self.gb = gmGuiBroker.GuiBroker () 119 self.mwm = self.gb['clinical.manager'] 120 self.plugin = plugin 121 # controls on the top toolbar are available via plugin.foo 122 self.addresslist = wxListBox(self,ID_NAMESLIST,wxDefaultPosition,wxDefaultSize,addressdata,wxLB_SINGLE) 123 self.addresslist.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, '')) #first list with patient names 124 self.addresslist.SetForegroundColour(wxColor(180,182,180)) 125 # code to link up SQLListControl 126 self.patientslist = gmSQLListControl.SQLListControl (self, ID_PATIENTSLIST, hideid=True, style= wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER) 127 self.patientslist.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, '')) #first list with patient names 128 EVT_LIST_ITEM_SELECTED (self.patientslist, ID_PATIENTSLIST, self.OnPatient) 129 self.lbl_surname = BlueLabel(self,-1,"Surname") 130 self.lbl_firstname = BlueLabel(self,-1,"Firstname") 131 self.lbl_preferredname = BlueLabel(self,-1,"Salutation") 132 self.lbl_title = BlueLabel(self,-1,"Title") 133 self.lbl_sex = BlueLabel(self,-1,"Sex ") 134 self.lbl_street = BlueLabel(self,-1,"Street") 135 self.lbl_suburb = BlueLabel(self,-1,"Suburb") 136 self.lbl_zip = BlueLabel(self,-1,"Postcode") 137 self.lbl_address_s = BlueLabel(self,-1,"Address(s)") 138 self.lbl_birthdate = BlueLabel(self,-1,"Birthdate") 139 self.lbl_maritalstatus = BlueLabel(self,-1," Marital Status") 140 self.lbl_occupation = BlueLabel(self,-1,"Occupation") 141 self.lbl_birthplace = BlueLabel(self,-1,"Born In") 142 self.lbl_nextofkin = BlueLabel(self,-1,"") 143 self.lbl_addressNOK = BlueLabel(self,-1,"Next of Kin") 144 self.lbl_relationship = BlueLabel(self,-1," Relationship ") 145 self.lbl_homephone = BlueLabel(self,-1,"Home Phone") 146 self.lbl_workphone = BlueLabel(self,-1,"Work Phone") 147 self.lbl_fax = BlueLabel(self,-1,"Fax") 148 self.lbl_mobile = BlueLabel(self,-1,"Mobile") 149 self.lbl_email = BlueLabel(self,-1,"Email") 150 self.lbl_web = BlueLabel(self,-1,"Web") 151 self.lbl_mobile = BlueLabel(self,-1,"Mobile") 152 self.lbl_line6gap = BlueLabel(self,-1,"") 153 self.titlelist = ['Mr', 'Mrs', 'Miss', 'Mst', 'Ms', 'Dr', 'Prof'] 154 self.combo_relationship = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize, ['Father','Mother'], wxCB_DROPDOWN) 155 self.txt_surname = TextBox_RedBold(self,-1) 156 self.combo_title = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize,self.titlelist, wxCB_DROPDOWN) 157 self.txt_firstname = TextBox_RedBold(self,-1) 158 self.combo_sex = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize, ['M','F'], wxCB_DROPDOWN) 159 self.cb_preferredname = wxCheckBox(self, -1, _("Preferred Name"), wxDefaultPosition,wxDefaultSize, wxNO_BORDER) 160 self.txt_preferred = TextBox_RedBold(self,-1) 161 self.txt_address = wxTextCtrl(self, 30, "", 162 wxDefaultPosition,wxDefaultSize, style=wxTE_MULTILINE|wxNO_3D|wxSIMPLE_BORDER) 163 self.txt_address.SetInsertionPoint(0) 164 self.txt_address.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, '')) 165 self.txt_suburb = TextBox_BlackNormal(self,-1) 166 self.txt_zip = TextBox_BlackNormal(self,-1) 167 self.txt_birthdate = TextBox_BlackNormal(self,-1) 168 self.combo_maritalstatus = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize, 169 ['single','married'], wxCB_DROPDOWN) 170 self.txt_occupation = TextBox_BlackNormal(self,-1) 171 self.txt_countryofbirth = TextBox_BlackNormal(self,-1) 172 self.btn_browseNOK = wxButton(self,-1,"Browse NOK") #browse database to pick next of Kin 173 self.txt_nameNOK = wxTextCtrl(self, 30, 174 "Peter Smith \n" 175 "22 Lakes Way \n" 176 "Valentine 2280", 177 wxDefaultPosition,wxDefaultSize, style=wxTE_MULTILINE|wxNO_3D|wxSIMPLE_BORDER) 178 self.txt_nameNOK.SetInsertionPoint(0) 179 self.txt_nameNOK.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, '')) 180 self.txt_homephone = TextBox_BlackNormal(self,-1) 181 self.txt_workphone = TextBox_BlackNormal(self,-1) 182 self.txt_fax = TextBox_BlackNormal(self,-1) 183 184 self.txt_email = TextBox_BlackNormal(self,-1) 185 self.txt_web = TextBox_BlackNormal(self,-1) 186 self.txt_mobile = TextBox_BlackNormal(self,-1) 187 #---------------------- 188 #create the check boxes 189 #---------------------- 190 self.cb_addressresidence = wxCheckBox(self, -1, " Residence ", wxDefaultPosition,wxDefaultSize, wxNO_BORDER) 191 self.cb_addresspostal = wxCheckBox(self, -1, " Postal ", wxDefaultPosition,wxDefaultSize, wxNO_BORDER) 192 #-------------------- 193 # create the buttons 194 #-------------------- 195 self.btn_photo_import= wxButton(self,-1,"Import") 196 self.btn_photo_export = wxButton(self,-1,"Export") 197 self.btn_photo_aquire = wxButton(self,-1,"Acquire") 198 #------------------------------------------------------- 199 #Add the each line of controls to a horizontal box sizer 200 #------------------------------------------------------- 201 self.sizer_line0_left = wxBoxSizer(wxHORIZONTAL) 202 #line one:surname, title 203 self.sizer_line1_left = wxBoxSizer(wxHORIZONTAL) 204 self.sizer_line1_left.Add(self.lbl_surname,3, wxGROW|wxALIGN_CENTER_VERTICAL,5) 205 self.sizer_line1_left.Add(self.txt_surname,7,wxEXPAND) 206 self.sizer_line1_left.Add(0,0,1) 207 self.sizer_line1_left.Add(self.lbl_title,2,wxALIGN_CENTER_VERTICAL, 5) 208 self.sizer_line1_left.Add(self.combo_title,4,wxEXPAND) 209 #line two:firstname, sex 210 self.sizer_line2_left = wxBoxSizer(wxHORIZONTAL) 211 self.sizer_line2_left.Add(self.lbl_firstname,3,wxGROW|wxALIGN_CENTER_VERTICAL,5) 212 self.sizer_line2_left.Add(self.txt_firstname,7,wxEXPAND) 213 self.sizer_line2_left.Add(0,0,1) 214 self.sizer_line2_left.Add(self.lbl_sex,2,wxGROW|wxALIGN_CENTER_VERTICAL,5) 215 self.sizer_line2_left.Add(self.combo_sex,4,wxEXPAND) 216 #line three:preferred salutation 217 self.sizer_line3_left = wxBoxSizer(wxHORIZONTAL) 218 self.sizer_line3_left.Add(self.lbl_preferredname,3,wxGROW|wxALIGN_CENTER_VERTICAL,5) 219 self.sizer_line3_left.Add(self.txt_preferred,7,wxEXPAND) 220 self.sizer_line3_left.Add(1,0,7) 221 #line four: preferred alias 222 self.sizer_line4_left = wxBoxSizer(wxHORIZONTAL) 223 self.sizer_line4_left.Add(1,0,3) 224 self.sizer_line4_left.Add(self.cb_preferredname,7,wxEXPAND) 225 self.sizer_line4_left.Add(1,0,7) 226 #line6 on this left side is blank 227 self.sizer_line6_left = wxBoxSizer(wxHORIZONTAL) 228 self.sizer_line6_left.Add(self.lbl_line6gap,1,wxEXPAND) 229 #---------------- 230 #3:street details 231 #a) the label 232 sizer_lblstreet = wxBoxSizer(wxVERTICAL) 233 sizer_lblstreet.Add(self.lbl_street,1, wxEXPAND) 234 #-------------------- 235 #3:street details 236 #b) multiline textbox 237 #------------------- 238 self.sizer_line7_left = wxBoxSizer(wxHORIZONTAL) 239 self.sizer_line7_left.Add(0,0,1) 240 #------------------------------ 241 #3:street details 242 #c) residence or postal address 243 #------------------------------ 244 sizer_respostal = wxBoxSizer(wxVERTICAL) 245 sizer_respostal.Add(self.cb_addressresidence,1,wxEXPAND) 246 sizer_respostal.Add(self.cb_addresspostal,1,wxEXPAND) 247 #sizer_respostal.Add(1,0,1) 248 self.sizer_line7_left = wxBoxSizer(wxHORIZONTAL) 249 self.sizer_line7_left.Add(sizer_lblstreet,3,wxALIGN_CENTER_VERTICAL,5) 250 self.sizer_line7_left.Add(self.txt_address,7,wxEXPAND) 251 self.sizer_line7_left.Add(0,0,1) 252 self.sizer_line7_left.Add(sizer_respostal,6,wxEXPAND) 253 #-------------------------- 254 # create the suburb details 255 #-------------------------- 256 self.sizer_line8_left = wxBoxSizer(wxHORIZONTAL) 257 self.sizer_line8_left.Add(self.lbl_suburb,3,wxALIGN_CENTER_VERTICAL,5) 258 self.sizer_line8_left.Add(self.txt_suburb,7,wxEXPAND) 259 self.sizer_line8_left.Add(0,0,1) 260 self.sizer_line8_left.Add(self.lbl_zip,3,wxALIGN_CENTER_VERTICAL,5) 261 self.sizer_line8_left.Add(self.txt_zip,3,wxEXPAND) 262 #-------------------------------- 263 # create the multiple address box 264 #-------------------------------- 265 self.sizer_line9_left = wxBoxSizer(wxHORIZONTAL) 266 self.sizer_line9_left.Add(self.lbl_address_s,3,wxALIGN_CENTER_VERTICAL,5) 267 self.sizer_line9_left.Add(self.addresslist,14,wxEXPAND) 268 #------------------------------------------------------------------------- 269 #now add all the left hand line sizers to the one left hand vertical sizer 270 #------------------------------------------------------------------------- 271 self.leftside = wxBoxSizer(wxVERTICAL) 272 self.leftside.Add(self.sizer_line1_left,0,wxEXPAND|wxALL,1) 273 self.leftside.Add(self.sizer_line2_left,0,wxEXPAND|wxALL,1) 274 self.leftside.Add(self.sizer_line3_left,0,wxEXPAND|wxALL,1) 275 self.leftside.Add(self.sizer_line4_left,0,wxEXPAND|wxALL,1) 276 self.leftside.Add(self.sizer_line6_left,0,wxEXPAND|wxALL,1) 277 self.leftside.Add(self.sizer_line7_left,0,wxEXPAND|wxALL,1) 278 self.leftside.Add(self.sizer_line8_left,0,wxEXPAND|wxALL,1) 279 self.leftside.Add(self.sizer_line9_left,0,wxEXPAND|wxALL,1) 280 #--------------------------------------------------- 281 #now add textboxes etc to the right hand line sizers 282 #--------------------------------------------------- 283 self.sizer_line0_right = wxBoxSizer(wxHORIZONTAL) 284 self.sizer_line1_right = wxBoxSizer(wxHORIZONTAL) 285 self.sizer_line2_right = wxBoxSizer(wxHORIZONTAL) 286 self.sizer_line3_right = wxBoxSizer(wxHORIZONTAL) 287 self.sizer_line4_right = wxBoxSizer(wxHORIZONTAL) 288 self.sizer_line5_right = wxBoxSizer(wxHORIZONTAL) 289 self.sizer_line6_right = wxBoxSizer(wxHORIZONTAL) 290 self.sizer_line7_right = wxBoxSizer(wxHORIZONTAL) 291 self.sizer_line8_right = wxBoxSizer(wxHORIZONTAL) 292 self.sizer_line9_right = wxBoxSizer(wxHORIZONTAL) 293 self.sizer_line10_right = wxBoxSizer(wxHORIZONTAL) 294 self.sizer_line11_right = wxBoxSizer(wxHORIZONTAL) 295 #line1 _ birthdate, maritial status 296 self.sizer_line1_right.Add(self.lbl_birthdate,2,wxALIGN_CENTER_VERTICAL,0) 297 self.sizer_line1_right.Add(self.txt_birthdate,2,wxALIGN_LEFT) 298 self.sizer_line1_right.Add(self.lbl_maritalstatus,2,wxALIGN_CENTRE,0) 299 self.sizer_line1_right.Add(self.combo_maritalstatus, 2, wxALIGN_CENTER_VERTICAL,0) 300 #line2 - occupation (use word wheel later in place of text box) 301 self.sizer_line2_right.Add(self.lbl_occupation,2,wxALIGN_CENTER_VERTICAL,0) 302 self.sizer_line2_right.Add(self.txt_occupation,6,wxEXPAND) 303 #line3 - country of birth (use word wheel later) 304 self.sizer_line3_right.Add(self.lbl_birthplace,2,wxALIGN_CENTER_VERTICAL,0) 305 self.sizer_line3_right.Add(self.txt_countryofbirth,6,wxEXPAND) 306 #line 4 - next of kin + browse for next of kin 307 self.sizer_line4_right.Add(self.lbl_nextofkin, 2,wxALIGN_CENTER_VERTICAL,0) 308 self.sizer_line4_right.Add(self.btn_browseNOK,2, wxALIGN_CENTER_VERTICAL) 309 #self.sizer_line4_right.Add(0,0,1) 310 self.sizer_line4_right.Add(self.lbl_relationship,2, wxALIGN_CENTER_VERTICAL,0) 311 self.sizer_line4_right.Add(self.combo_relationship,2,wxEXPAND) 312 #name of next of kin 313 self.sizer_gap_vertical =wxBoxSizer(wxVERTICAL) 314 self.sizer_gap_vertical.Add(1,47,1) 315 self.sizer_line5_right.Add(self.lbl_addressNOK,2,wxEXPAND) 316 self.sizer_line5_right.Add(self.txt_nameNOK, 6,wxEXPAND) 317 self.sizer_line5_right.AddSizer(self.sizer_gap_vertical) 318 #---------------------------------------------------------------------------- 319 # Contact numbers are on their own separate vertical sizer as the photo sits 320 # next to this 321 #---------------------------------------------------------------------------- 322 self.sizer_contacts = wxBoxSizer(wxVERTICAL) 323 self.sizer_line6_right.Add(self.lbl_homephone, 3,wxALIGN_CENTRE,0) 324 self.sizer_line6_right.Add(self.txt_homephone, 5,wxEXPAND) 325 self.sizer_line6_right.Add(0,0,1) 326 self.sizer_contacts.Add(self.sizer_line6_right,0,wxEXPAND) 327 self.sizer_line7_right.Add(self.lbl_workphone,3,wxALIGN_CENTRE,0) 328 self.sizer_line7_right.Add(self.txt_workphone, 5,wxEXPAND) 329 self.sizer_line7_right.Add(0,0,1) 330 self.sizer_contacts.Add(self.sizer_line7_right,0,wxEXPAND) 331 self.sizer_line8_right.Add(self.lbl_fax,3,wxALIGN_CENTRE,0) 332 self.sizer_line8_right.Add(self.txt_fax, 5,wxEXPAND) 333 self.sizer_line8_right.Add(0,0,1) 334 self.sizer_contacts.Add(self.sizer_line8_right,0,wxEXPAND) 335 self.sizer_line9_right.Add(self.lbl_email,3,wxALIGN_CENTRE,0) 336 self.sizer_line9_right.Add(self.txt_email, 5,wxEXPAND) 337 self.sizer_line9_right.Add(0,0,1) 338 self.sizer_contacts.Add(self.sizer_line9_right,0,wxEXPAND) 339 self.sizer_line10_right.Add(self.lbl_web,3,wxALIGN_CENTRE,0) 340 self.sizer_line10_right.Add(self.txt_web, 5,wxEXPAND) 341 self.sizer_line10_right.Add(0,0,1) 342 self.sizer_contacts.Add(self.sizer_line10_right,0,wxEXPAND) 343 self.sizer_line11_right.Add(self.lbl_mobile,3,wxALIGN_CENTRE,0) 344 self.sizer_line11_right.Add(self.txt_mobile, 5,wxEXPAND) 345 self.sizer_line11_right.Add(0,0,1) 346 self.sizer_contacts.Add(self.sizer_line11_right,0,wxEXPAND) 347 self.sizer_photo = wxBoxSizer(wxVERTICAL) 348 # self.patientpicture = gmGP_PatientPicture.cPatientPicture(self, -1) 349 self.sizer_photo.Add(self.patientpicture,3,wxALIGN_CENTER_HORIZONTAL,0) 350 self.sizer_photo.Add(self.btn_photo_aquire,1,wxALIGN_CENTER_HORIZONTAL,0) 351 self.sizer_photo.Add(self.btn_photo_export,1,wxALIGN_CENTER_HORIZONTAL,0) 352 self.sizer_photo.Add(self.btn_photo_import,1,wxALIGN_CENTER_HORIZONTAL,0) 353 self.sizer_contactsandphoto = wxBoxSizer(wxHORIZONTAL) 354 self.sizer_contactsandphoto.AddSizer(self.sizer_contacts,6,wxALIGN_CENTER_VERTICAL,0) 355 self.sizer_contactsandphoto.AddSizer(self.sizer_photo,2,wxALIGN_CENTER_VERTICAL,0) 356 self.rightside = wxBoxSizer(wxVERTICAL) 357 self.rightside.Add(self.sizer_line1_right,0,wxEXPAND|wxALL,1) 358 self.rightside.Add(self.sizer_line2_right,0,wxEXPAND|wxALL,1) 359 self.rightside.Add(self.sizer_line3_right,0,wxEXPAND|wxALL,1) 360 self.rightside.Add(self.sizer_line4_right,0,wxEXPAND|wxALL,1) 361 self.rightside.Add(self.sizer_line5_right,0,wxEXPAND|wxALL,1) 362 self.rightside.Add(self.sizer_contactsandphoto,0,wxEXPAND|wxALL,1) 363 self.mainsizer = wxBoxSizer(wxVERTICAL) 364 self.topsizer = wxBoxSizer(wxHORIZONTAL) 365 self.sizerunder = wxBoxSizer(wxHORIZONTAL) 366 self.sizerunder.AddSizer(self.leftside,10,wxEXPAND|wxALL,5) 367 self.sizerunder.Add(1,0,1) 368 self.sizerunder.AddSizer(self.rightside,10,wxEXPAND|wxALL,5) 369 self.mainsizer.Add(self.patientslist,3,wxEXPAND) 370 self.mainsizer.Add(self.sizerunder,0,wxEXPAND|wxALL,10) 371 self.SetSizer(self.mainsizer) 372 self.SetAutoLayout(True) 373 self.Show(False)
374 375
376 - def OnPatient (self, event):
377 pat_id = event.GetData () 378 index = event.GetIndex () 379 gmLog.gmDefLog.Log (gmLog.lInfo, "selected patient ID %s" % pat_id) 380 pat_title = self.patientslist.GetItem (index, 0).GetText () 381 pat_fname = self.patientslist.GetItem (index, 1).GetText () 382 pat_lname = self.patientslist.GetItem (index, 2).GetText () 383 pat_dob = self.patientslist.GetItem (index, 3).GetText () 384 # load the demographic text controls 385 # send a signal to other objects 386 kwds = {'title':pat_title, 'firstnames':pat_fname, 'lastnames':pat_lname, 'dob':pat_dob, 'ID':pat_id} 387 gmDispatcher.send ('post_patient_selection', sender='Terry Patient Selector', kwds=kwds )
388
389 - def FindPatient (self, name):
390 self.patientslist.SetQueryStr (gmPatientNameQuery.MakeQuery (name), service='personalia') 391 self.patientslist.RunQuery ()
392 393 #============================================================ 394 #class gmDemographics(gmPlugin.wxBasePlugin): 395 # """A plugin for searching the patient database by name. 396 # 397 # Required the gmPatientWindowPlugin to be loaded. 398 # CANNOT BE UNLOADED 399 # """ 400 # def name (self): 401 # return 'Patient Search' 402 # #-------------------------------------------------------- 403 # def register (self): 404 # # first, set up the widgets on the top line of the toolbar 405 # top_panel = self.gb['main.top_panel'] 406 # 407 # # and register ourselves as a widget 408 # self.gb['modules.patient'][self.__class__.__name__] = self # split/renamed 'horstspace.notebook.%s' 409 # self.mwm = self.gb['clinical.manager'] 410 # self.widget = PatientsPanel (self.mwm, self) 411 # self.mwm.RegisterWholeScreen(self.__class__.__name__, self.widget) 412 # self.RegisterInterests() 413 # #-------------------------------------------------------- 414 # def OnTool (self, event): 415 # pass 416 # self.mwm.Display (self.__class__.__name__) 417 # print "OnTool" 418 # self.gb['modules.gui']['Patient'].Raise() # split/renamed 'horstspace.notebook.%s' 419 # 420 # def RegisterInterests(self): 421 # pass 422 # gmDispatcher.connect(self.OnSelected, gmSignals.post_patient_selection()) 423 # 424 # def OnSelected (self, **kwargs): 425 # pass 426 #---------------------------------------------------------------------- 427 if __name__ == "__main__": 428 import gmGuiBroker 429 app = wxPyWidgetTester(size = (800, 600)) 430 app.SetWidget(PatientsPanel, -1) 431 app.MainLoop() 432 #---------------------------------------------------------------------- 433