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

# Source Code for Module Gnumed.wxpython.patient.gmDemographics

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