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

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

      1  #!/usr/bin/python
      2  #############################################################################
      3  #
      4  # gmGP_FamilyHistory.py
      5  # ----------------------------------
      6  #
      7  # This panel will hold all the family history details
      8  #
      9  # If you don't like it - change this code see @TODO!
     10  #
     11  # @author: Dr. Richard Terry
     12  # @copyright: author
     13  # @license: GPL v2 or later (details at http://www.gnu.org)
     14  # @dependencies: wxPython (>= version 2.3.1)
     15
     16  # @TODO:
     17  #       almost everything
     18  #
     19  ############################################################################
     20  # $Source: /home/ncq/Projekte/cvs2git/vcs-mirror/gnumed/gnumed/client/wxpython/patient/gmGP_FamilyHistory.py,v $
     21  __version__ = "$Revision: 1.11 $"
     22  __author__  = "R.Terry <rterry@gnumed.net>, H.Herb <hherb@gnumed.net>, S.Tan"
     23
     24  try:
     25          import wxversion
     26          import wx
     27  except ImportError:
     28          from wxPython import wx
     29
     30  import gmEditArea, gmPlugin_Patient
     31  import gmGuiElement_HeadingCaptionPanel         #panel class to display top headings
     32  import gmGuiElement_DividerCaptionPanel         #panel class to display sub-headings or divider headings
     33  import gmGuiElement_AlertCaptionPanel           #panel to hold flashing alert messages
     34  from gmPatientHolder import PatientHolder
     35
     36
     37  ID_MEMBERCONDITIONSLIST = wxNewId()
     38  ID_FAMILYMEMBERSLIST = wxNewId()
     39  ID_IMMUNISATIONS = wxNewId()
     40  ID_ALL_MENU  = wxNewId()
     41  gmSECTION_FAMILYHISTORY = 4
     42  #------------------------------------
     43  #Dummy data to simulate allergy items
     44  #------------------------------------
     45  familymemberdata = {
     46  1 : ("Mother",""),
     47  2 : ("General Family History",""),
     48  3 : ("Freda -Aunt",""),
     49  }
     50  membersconditionsdata = {
     51  1 : ("Acute myocardial infarction aged 73, caused death 73",""),
     52  2 : ("Hypertension age onset 40",""),
     53  }
     54
     55  #----------------------------------------------------------------------
     56 -class FamilyHistoryPanel(wxPanel, PatientHolder):
     57
     58 -        def __init__(self, parent,id):
     59                  wxPanel.__init__(self, parent, id,wxDefaultPosition,wxDefaultSize,wxRAISED_BORDER)
     60                  PatientHolder.__init__(self)
     61                  # main heading
     62                  self.FamilyHistoryPanelheading = gmGuiElement_HeadingCaptionPanel.HeadingCaptionPanel(self,-1,"  FAMILY AND SOCIAL HISTORY  ")
     63                  # editarea
     64                  self.editarea = gmEditArea.gmFamilyHxEditArea(self, -1)
     65                  #self.editarea = gmFamilyHxEditArea(self, -1)
     66                  #-----------------------------------------------
     67                  #add the divider headings below the editing area
     68                  #-----------------------------------------------
     69                  self.family_members_heading = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,"Family Members")
     70                  self.members_disease_conditions = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,"Condition")
     71                  self.sizer_divider_members_condition = wxBoxSizer(wxHORIZONTAL)
     72                  self.sizer_divider_members_condition.Add(self.family_members_heading,1, wxEXPAND)
     73                  self.sizer_divider_members_condition.Add( self.members_disease_conditions,1, wxEXPAND)
     74                  #--------------------------------------------------------------------------------------
     75                  #add the list to contain the family members
     76                  #
     77                  # c++ Default Constructor:
     78                  # wxListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition,
     79                  # const wxSize& size = wxDefaultSize, long style = wxLC_ICON,
     80                  # const wxValidator& validator = wxDefaultValidator, const wxString& name = "listCtrl")
     81                  #
     82                  #--------------------------------------------------------------------------------------
     83                  self.family_members_list = wxListCtrl(self, ID_FAMILYMEMBERSLIST,  wxDefaultPosition, wxDefaultSize,wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER)
     84                  self.family_members_list.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
     85                  self.member_conditions_list = wxListCtrl(self,ID_MEMBERCONDITIONSLIST,  wxDefaultPosition, wxDefaultSize,wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER)
     86                  self.member_conditions_list.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
     87                  self.sizer_members_conditions = wxBoxSizer(wxHORIZONTAL)
     88                  self.sizer_members_conditions.Add(self.family_members_list,4,wxEXPAND)
     89                  self.sizer_members_conditions.Add(self.member_conditions_list,6, wxEXPAND)
     90                  #----------------------------------------
     91                  # add some dummy data to the Members list
     92                  #-----------------------------------------
     93                  self.family_members_list.InsertColumn(0, "Member")
     94                  self.family_members_list.InsertColumn(1, "null")
     95                  #-------------------------------------------------------------
     96                  #loop through the familymemberdata array and add to the list control
     97                  #note the different syntax for the first coloum of each row
     98                  #i.e. here > self.family_members_list.InsertStringItem(x, data[0])!!
     99                  #-------------------------------------------------------------
    100                  items = familymemberdata.items()
    101                  for x in range(len(items)):
    102                          key, data = items[x]
    103                          #gmLog.gmDefLog.Log (gmLog.lData, items[x])
    104                          self.family_members_list.InsertStringItem(x, data[0])
    105                          self.family_members_list.SetStringItem(x, 1, data[1])
    106                          self.family_members_list.SetItemData(x, key)
    107                  self.family_members_list.SetColumnWidth(0, wxLIST_AUTOSIZE)
    108                  #-------------------------------------------
    109                  # add some dummy data to the conditions list
    110                  #-------------------------------------------
    111                  self.member_conditions_list.InsertColumn(0, "Condition")
    112                  self.member_conditions_list.InsertColumn(1, "null")
    113                  #-------------------------------------------------------------
    114                  #loop through the familymemberdata array and add to the list control
    115                  #note the different syntax for the first coloum of each row
    116                  #i.e. here > self.family_members_list.InsertStringItem(x, data[0])!!
    117                  #-------------------------------------------------------------
    118                  items = membersconditionsdata.items()
    119                  for x in range(len(items)):
    120                          key, data = items[x]
    121                          #gmLog.gmDefLog.Log (gmLog.lData, items[x])
    122                          self.member_conditions_list.InsertStringItem(x, data[0])
    123                          self.member_conditions_list.SetStringItem(x, 1, data[1])
    124                          self.member_conditions_list.SetItemData(x, key)
    125
    126                  self.member_conditions_list.SetColumnWidth(0, wxLIST_AUTOSIZE)
    127                  self.member_conditions_list.SetColumnWidth(1, wxLIST_AUTOSIZE)
    128                  #------------------------------------------------------------------------------------------
    129                  #add a richtext control or a wxTextCtrl multiline to allow user to enter the social history
    130                  #------------------------------------------------------------------------------------------
    131                  self.social_history_subheading = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,"Social History")
    132                  self.txt_social_history = wxTextCtrl(self, 30,
    133                                          "Born in QLD, son of an itinerant drover. Mother worked as a bush nurse. "
    134                                          "Two brothers, Fred and Peter. Left school aged 15yrs, apprentice fitter "
    135                                          "then worked in industry for 10ys. At 22yrs age married Joan, two children"
    136                                          "Peter b1980 and Rachaelb1981. Retired in 1990 due to receiving a fortune.",
    137                                          wxDefaultPosition,wxDefaultSize, style=wxTE_MULTILINE|wxNO_3D|wxSIMPLE_BORDER)
    138                  self.txt_social_history.SetInsertionPoint(0)
    139                  self.txt_social_history.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
    140                  #----------------------------------------
    141                  #add an alert caption panel to the bottom
    142                  #----------------------------------------
    143                  self.alertpanel = gmGuiElement_AlertCaptionPanel.AlertCaptionPanel(self,-1,"  Alerts  ")
    144                  #---------------------------------------------
    145                  #add all elements to the main background sizer
    146                  #---------------------------------------------
    147                  self.mainsizer = wxBoxSizer(wxVERTICAL)
    148                  self.mainsizer.Add(self.FamilyHistoryPanelheading,0,wxEXPAND)
    149  #               self.mainsizer.Add(self.dummypanel1,1,wxEXPAND)
    150                  self.mainsizer.Add(self.editarea,6,wxEXPAND)
    151                  self.mainsizer.Add(self.sizer_divider_members_condition,0,wxEXPAND)
    152                  self.mainsizer.Add(self.sizer_members_conditions,4,wxEXPAND)
    153                  self.mainsizer.Add(self.social_history_subheading,0,wxEXPAND)
    154                  self.mainsizer.Add(self.txt_social_history,4,wxEXPAND)
    155                  self.mainsizer.Add(self.alertpanel,0,wxEXPAND)
    156                  self.SetSizer(self.mainsizer)
    157                  self.mainsizer.Fit (self)
    158                  self.SetAutoLayout(True)
    159                  EVT_SIZE (self, self.OnSize)
    160
    161 -        def OnSize (self, event):
    162                  w, h = event.GetSize ()
    163                  self.mainsizer.SetDimension (0, 0, w, h)
    164  #----------------------------------------------------------------------
    165 -class gmGP_FamilyHistory(gmPlugin_Patient.wxPatientPlugin):
    166          """Plugin to encapsulate the family history window."""
    167
    168          __icons = {
    169  """icon_two_people""": 'x\xda\x9d\x90\xb1\x0e\x83 \x10\x86w\x9f\xe2\x12@\x9b\x98\x10X\xaa#\x81\xc4\
    170  \xb1\x0c.\xae\xc6t\xaa)}\xff\xa9w\x07\xd8\xb4n\x05\xf5\xf2}w?$^\xf6\x97m\xe6\
    171  \xce^\x81\x1e\x0b\xb6k\xd6\xb9\x93\xb0\x81\xdf\xd7\xed\xc1\xd4"\x89a\x1c\x82\
    172  1\xcc\x82x\x1a\x8d\x99F\xe6\x85\xd8\xe0\n\xb9\x1f+\x97\xbe\xcey2\xcc)\xe7C\
    173  \xed\x03\xf2-=\xef\x0c.\x87\xa7P\x9a\xaa^V\xc2=\xb1\x1f}\xf05\xfc\xbd\x8a\
    174  \xd4Z3\xe6\x9a\xa5^p\x93[\x12\xd52\x99R\xe2A\xac\x1f\t\xa9\x1c\x97\x8e3c\x8c\
    175  =\xbe\xe0\x9c\x13\xc2\xb9C\xba\x08(A:\tU\x82\x94\x92%H\xa8R\xb0\x14\xb8\x95R\
    176  \xf8-\x17I\x1a\x01rh\x7f$\'N\xb2\xc5}\xc8\x0c\x7f\xcb\xd3\xaf\xd3o\x85>c\\'
    177  }
    178
    179 -        def name (self):
    180                  return 'Family History Window'
    181
    182          #FIXME - put ampersand in correct position
    183 -        def MenuInfo (self):
    184                  return ('view', '&Family History')
    185
    186 -        def GetIconData(self, anIconID = None):
    187                  if anIconID == None:
    188                          return self.__icons[_("""icon_two_people""")]
    189                  else:
    190                          if self.__icons.has_key(anIconID):
    191                                  return self.__icons[anIconID]
    192                          else:
    193                                  return self.__icons[_("""icon_two_people""")]
    194
    195 -        def GetWidget (self, parent):
    196                  return FamilyHistoryPanel (parent, -1)
    197  #======================================================================
    198  # main
    199  #----------------------------------------------------------------------
    200  if __name__ == "__main__":
    201          app = wxPyWidgetTester(size = (600, 600))
    202          app.SetWidget(FamilyHistoryPanel, -1)
    203          app.MainLoop()
    204  #======================================================================#
    205  # $Log: gmGP_FamilyHistory.py,v $
    206  # Revision 1.11  2008-04-13 14:39:49  ncq
    207  # - no more old style logging
    208  #
    209  # Revision 1.10  2005/09/26 18:01:53  ncq
    210  # - use proper way to import wx26 vs wx2.4
    211  # - note: THIS WILL BREAK RUNNING THE CLIENT IN SOME PLACES
    212  # - time for fixup
    213  #
    214  # Revision 1.9  2004/07/18 20:30:54  ncq
    215  # - wxPython.true/false -> Python.True/False as Python tells us to do
    216  #
    217  # Revision 1.8  2004/06/25 13:28:00  ncq
    218  # - logically separate notebook and clinical window plugins completely
    219  #
    220  # Revision 1.7  2003/11/17 10:56:41  sjtan
    221  #
    222  # synced and commiting.
    223  #
    224  # Revision 1.2  2003/10/25 08:29:40  sjtan
    225  #
    226  # uses gmDispatcher to send new currentPatient objects to toplevel gmGP_ widgets. Proprosal to use
    227  # yaml serializer to store editarea data in  narrative text field of clin_root_item until
    228  # clin_root_item schema stabilizes.
    229  #
    230  # Revision 1.1  2003/10/23 06:02:40  sjtan
    231  #
    232  # manual edit areas modelled after r.terry's specs.
    233  #
    234  # Revision 1.6  2003/06/01 12:50:46  ncq
    235  # - cleanup, CVS keywords
    236  #
    237  # @change log:
    238  #           10.06.2002 rterry initial implementation, untested
    239  #           30.07.2002 rterry initial implementation, untested
    240