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

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

      1  # -*- coding: utf-8 -*-
      2  #!/usr/bin/python
      3  #############################################################################
      4  #
      5  # gmGP_PastHistory.py
      6  # ----------------------------------
      7  #
      8  # This panel will hold all the pasthistory details
      9  #
     10  # If you don't like it - change this code see @TODO!
     11  #
     12  # @author: Dr. Richard Terry
     13  # @copyright: author
     14  # @license: GPL v2 or later (details at http://www.gnu.org)
     15  # @dependencies: wxPython (>= version 2.3.1)
     16  # @change log:
     17  #           10.06.2002 rterry initial implementation, untested
     18  #           31.07.2002 rterry added to cvs
     19  #
     20  # @TODO:almost everything!
     21  #       contains dummy data only
     22  #
     23  ############################################################################
     24  import wx
     25
     26  import gmGuiElement_HeadingCaptionPanel         #panel class to display top headings
     27  import gmGuiElement_DividerCaptionPanel         #panel class to display sub-headings or divider headings
     28  import gmGuiElement_AlertCaptionPanel           #panel to hold flashing alert messages
     29  import gmEditArea                                       #panel class holding editing prompts and text boxes
     30  import gmPlugin_Patient
     31
     32  import gmDispatcher
     33
     34  from gmPatientHolder import PatientHolder
     35  import gmPatientHolder
     36
     37  from gmListCtrlMapper import gmListCtrlMapper
     38
     39  import gmMultiColumnList
     40
     41  ID_SIGNIFICANTPASTHISTORYLIST = wxNewId()
     42  ID_ACTIVEPROBLEMLIST = wxNewId()
     43  gmSECTION_PASTHISTORY = 5
     44  #------------------------------------
     45  #Dummy data to simulate allergy items
     46  #------------------------------------
     47  activehistorydata = {
     48  1 : ("1982","Hypertension"),
     49  2 : ("1990","Ischaemic Heart Disease"),
     50  3 : ("1995","NIDDM"),
     51  4 : ("1998","Lymphoma"),
     52  5:("1998","Chemotherapy"),
     53  }
     54  significanthistorydata = {
     55  1 : ("1982","Hypertension"),
     56  2 : ("1990","Acute myocardial infarction"),
     57  3 : ("1994","CABG"),
     58  4 : ("1995","Cholecystectomy"),
     59  }
     60
     61  pasthistoryprompts = {
     62  1:("Condition"),
     63  2:("Notes"),
     64  3:(""),
     65  4:("Age Onset"),
     66  5:("Year Onset"),
     67  6:(""),
     68  7:("Progress Notes"),
     69  8:(""),
     70          }
     71
     72
     73
     74 -class PastHistoryPanel(wxPanel, PatientHolder):
     75 -        def __init__(self, parent,id):
     76                  wxPanel.__init__(self, parent, id,wxDefaultPosition,wxDefaultSize,wxRAISED_BORDER)
     77                  PatientHolder.__init__(self)
     78
     79                  #--------------------
     80                  #add the main heading
     81                  #--------------------
     82                  self.pasthistorypanelheading = gmGuiElement_HeadingCaptionPanel.HeadingCaptionPanel(self,-1, " PAST HISTORY  ")
     83                  #----------------------------------
     84                  #dummy panel above the editing area
     85                  #----------------------------------
     86                  self.dummypanel1 = wxPanel(self,-1,wxDefaultPosition,wxDefaultSize,0)
     87                  self.dummypanel1.SetBackgroundColour(wxColor(222,222,222))
     88                  #--------------------------------------------------
     89                  #now create the editarea specific for past history
     90                  #-------------------------------------------------
     91                  #self.editarea = gmEditArea.EditArea(self,-1,pasthistoryprompts,gmSECTION_PASTHISTORY)
     92                  self.editarea = gmEditArea.gmPastHistoryEditArea(self,-1)
     93                  self.dummypanel2 = wxPanel(self,-1,wxDefaultPosition,wxDefaultSize,0)
     94                  self.dummypanel2.SetBackgroundColour(wxColor(222,222,222))
     95                  #-----------------------------------------------
     96                  #add the divider headings below the editing area
     97                  #-----------------------------------------------
     98                  self.significant_history_heading = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,_("Significant Past Problems"))
     99                  self.sizer_significant_history_heading = wxBoxSizer(wxHORIZONTAL)
    100                  self.sizer_significant_history_heading.Add(self.significant_history_heading,1, wxEXPAND)
    101                  #--------------------------------------------------------------------------------------
    102                  #add the list of significant problems
    103                  #
    104                  # c++ Default Constructor:
    105                  # wxListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition,
    106                  # const wxSize& size = wxDefaultSize, long style = wxLC_ICON,
    107                  # const wxValidator& validator = wxDefaultValidator, const wxString& name = "listCtrl")
    108                  #
    109                  #--------------------------------------------------------------------------------------
    110                  #self.significant_problem_list = wxListCtrl(self, ID_SIGNIFICANTPASTHISTORYLIST,  wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER)
    111                  self.significant_problem_list = gmMultiColumnList.MultiColumnList(self, -1)
    112                  self.significant_problem_list.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
    113                  #self.active_problem_list = wxListCtrl(self, ID_ACTIVEPROBLEMLIST,  wxDefaultPosition, wxDefaultSize,wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER)
    114                  self.active_problem_list = gmMultiColumnList.MultiColumnList(self, -1)
    115                  self.active_problem_list.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
    116                  #---------------------------------------------------------
    117                  # add some dummy data to the significant past problem list
    118                  #---------------------------------------------------------
    119                  #self.significant_problem_list.InsertColumn(0, _("year onset"))
    120                  #self.significant_problem_list.InsertColumn(1, _("Condition"))
    121                  #self.significant_problem_list.InsertColumn(2, _("Notes"))
    122                  #-------------------------------------------------------------------------
    123                  #loop through the significanthistorydata array and add to the list control
    124                  #note the different syntax for the first coloum of each row
    125                  #i.e. here > self.significant_problem_list.InsertItem(x, data[0])!!
    126                  #--------------------------------------------------------------------------
    127                  #self.significant_mapper = gmListCtrlMapper(self.significant_problem_list)
    128                  #self.significant_mapper.SetData( significanthistorydata)
    129                  self.significant_problem_list.SetData( significanthistorydata)
    130                  #items = significanthistorydata.items()
    131                  #for x in range(len(items)):
    132                  #       key, data = items[x]
    133                  #       gmLog.gmDefLog.Log (gmLog.lData, items[x])
    134                  #       self.significant_problem_list.InsertItem(x, data[0])
    135                  #       self.significant_problem_list.SetItem(x, 1, data[1])
    136                  #       self.significant_problem_list.SetItemData(x, key)
    137                  #       self.significant_problem_list.SetColumnWidth(0, wxLIST_AUTOSIZE)
    138                  #self.significant_problem_list.SetColumnWidth(1, wxLIST_AUTOSIZE)
    139                  #------------------------------------------------
    140                  #add some dummy data to the active problems list
    141                  #------------------------------------------------
    142                  #self.active_problem_list.InsertColumn(0, _("Year Onset"))
    143                  #self.active_problem_list.InsertColumn(1, _("Condition"))
    144                  #self.active_problem_list.InsertColumn(2, _("Notes"))
    145                  #-------------------------------------------------------------
    146                  #loop through the activehistorydata array and add to the list control
    147                  #note the different syntax for the first coloum of each row
    148                  #i.e. here > self.significant_problem_list.InsertItem(x, data[0])!!
    149                  #-------------------------------------------------------------
    150                  #self.active_mapper = gmListCtrlMapper(self.active_problem_list)
    151                  #self.active_mapper.SetData( activehistorydata)
    152                  self.active_problem_list.SetData( activehistorydata)
    153
    154                  #items = activehistorydata.items()
    155                  #for x in range(len(items)):
    156                  #       key, data = items[x]
    157                  #       gmLog.gmDefLog.Log (gmLog.lData, items[x])
    158                  #       self.active_problem_list.InsertItem(x, data[0])
    159                  #       self.active_problem_list.SetItem(x, 1, data[1])
    160                  #       self.active_problem_list.SetItemData(x, key)
    161                  #self.active_problem_list.SetColumnWidth(0, wxLIST_AUTOSIZE)
    162                  #self.active_problem_list.SetColumnWidth(1, wxLIST_AUTOSIZE)
    163                  #--------------------------------------------------------------------------------------
    164                  #add a richtext control or a wxTextCtrl multiline to display the class text information
    165                  #e.g. would contain say information re the penicillins
    166                  #--------------------------------------------------------------------------------------
    167                  self.active_problems_heading = gmGuiElement_DividerCaptionPanel.DividerCaptionPanel(self,-1,_("Active Problems"))
    168                  #----------------------------------------
    169                  #add an alert caption panel to the bottom
    170                  #----------------------------------------
    171                  self.alertpanel = gmGuiElement_AlertCaptionPanel.AlertCaptionPanel(self,-1,"  Alerts  ")
    172                  #---------------------------------------------
    173                  #add all elements to the main background sizer
    174                  #---------------------------------------------
    175                  self.mainsizer = wxBoxSizer(wxVERTICAL)
    176                  self.mainsizer.Add(self.pasthistorypanelheading,0,wxEXPAND)
    177                  #self.mainsizer.Add(self.dummypanel1,0,wxEXPAND)
    178                  self.mainsizer.Add(self.editarea,6,wxEXPAND)
    179                  #self.mainsizer.Add(self.dummypanel2,0,wxEXPAND)
    180                  self.mainsizer.Add(self.significant_history_heading,0,wxEXPAND)
    181                  self.mainsizer.Add(self.significant_problem_list,4,wxEXPAND)
    182                  self.mainsizer.Add(self.active_problems_heading,0,wxEXPAND)
    183                  self.mainsizer.Add(self.active_problem_list,4,wxEXPAND)
    184                  self.mainsizer.Add(self.alertpanel,0,wxEXPAND)
    185                  self.SetSizer(self.mainsizer)
    186                  self.mainsizer.Fit
    187                  self.SetAutoLayout(True)
    188                  self.Show(True)
    189
    190                  gmDispatcher.connect(self._updateUI,  'clin_history_updated')
    191
    192                  self.significant_problem_list.addItemListener( self._significantPastItemSelected)
    193
    194                  self.active_problem_list.addItemListener(self._activePastItemSelected)
    195
    196 -        def _significantPastItemSelected(self, event):
    197                  clinical = self.get_past_history()
    198                  self._historyItemSelected( event ,clinical.get_significant_past_history() )
    199
    200 -        def _activePastItemSelected( self, event):
    201                  clinical = self.get_past_history()
    202                  self._historyItemSelected( event ,clinical.get_active_history() )
    203
    204 -        def _historyItemSelected( self, event, list):
    205                  (selId, str) = event['item']
    206                  for (id, map) in list:
    207                          if id == selId:
    208                                  clinical = self.get_past_history()
    209                                  self.editarea.setInputFieldValues(map, id)
    210
    211
    212 -        def _updateUI(self):
    213                  clinical = self.get_past_history()
    214                  significant_past = clinical.get_significant_past_history()
    215                  active_hx = clinical.get_active_history()
    216                  self.active_problem_list.SetData(  self._get_list_map( active_hx) , fitClientSize = 1)
    217                  #self.significant_mapper.SetData( self._get_list_map( significant_past) )
    218                  self.significant_problem_list.SetData( self._get_list_map( significant_past), fitClientSize = 1 )
    219
    220
    221 -        def _get_list_map(self, clin_history_list):
    222                  newMap = {}
    223                  for (id, map) in clin_history_list:
    224                          newMap[id] =   self.get_past_history().short_format(map)
    225                  return newMap
    226
    227
    228
    229
    230
    231  #----------------------------------------------------------------------
    232 -class gmGP_PastHistory(gmPlugin_Patient.wxPatientPlugin):
    233          """Plugin to encapsulate the immunisation window."""
    234
    235          __icons = {
    236  """icon_hx_ship""": 'x\xdaU\x8e1\x0b\x830\x10\x85\xf7\xfe\x8a\x80\x82\x85@\xa8K\xb5\xdb\x11\xc1\
    237  \xb17\xb8\xbcU\xa4S\xa5\xe9\xff\x9fz\x97\xc44^$\xe4{w\xef\x9d\xd7\xfd\xdb_\
    238  \x96\xae\xbf\x1b\xf9\x1e\xa6\xef.\xeb\xd2\xc1l\xc6\xef\xeb\xf6\x8ed\x85\x9a\
    239  \x9b\xd40F&\xe5a\x1c\xa6\xcc\xcd\xd1\x9f\x13\x9b\xd4W%r\x10~\x86\xcf+\x02ks\
    240  \x1e\xe7)\x0f\xbb\xc4e\xb8U\xf6\xa3\x9f|\x0es\xce\x18H\x85T)1\x00\xcc\x8c \
    241  \x07\x95\x18\xc0\x80e\xab\x8d"\x12\xac\xd8\x1b\x96\xc7_\xb42\x198\xe7Vv&9\
    242  \xda\xab\xec\x00\x11\xceb\x8c\xc4\xc9\x1e\x87H\x02P-\x92\x1dm\xfaU\xb0@\x11I\
    243  E\xbd\x08\x95\x1d\xf9:\xeci\x83\x84\xe6my\xb2\xae\xb2\xe8\xa4e\xbb\xadO\x14\
    244  \xdd\x0f&\xf7\x8a\xe4'
    245  }
    246
    247 -        def name (self):
    248                  return 'Pasthistory Window'
    249
    250 -        def MenuInfo (self):
    251                  return ('view', '&Past History')
    252
    253 -        def GetIconData(self, anIconID = None):
    254                  if anIconID == None:
    255                          return self.__icons[_("""icon_hx_ship""")]
    256                  else:
    257                          if anIconID in self.__icons:
    258                                  return self.__icons[anIconID]
    259                          else:
    260                                  return self.__icons[_("""icon_hx_ship""")]
    261
    262 -        def GetWidget (self, parent):
    263                  return PastHistoryPanel (parent, -1)
    264  #----------------------------------------------------------------------
    265  if __name__ == "__main__":
    266          app = wxPyWidgetTester(size = (600, 600))
    267          app.SetWidget(PastHistoryPanel, -1)
    268          app.MainLoop()
    269