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

Source Code for Module Gnumed.wxpython.patient.gmGP_TabbedLists

  1  ############################################################################# 
  2  # 
  3  # gmMedGPTabbedLists :convenience widget that displays a notebook widget 
  4  #                     notebook pages contain lists of information needed in 
  5  #                     in everyday general practice consultation 
  6  #                     eg patients scripts, referral letters, inbox 
  7  #                     recalls, measurements etc 
  8  # Description of Gui: the background panel contains: 
  9  #                     - wxWindow as a shadow behind the wxNotebook 
 10  #                     - a wxNotebook wigit to hold the lists 
 11  #                     - lists as needed 
 12  #                      
 13  # --------------------------------------------------------------------------- 
 14  # 
 15  # @author: Dr. Richard Terry 
 16  # @copyright: author 
 17  # @license: GPL v2 or later (details at http://www.gnu.org) 
 18  # @dependencies: 
 19  # @change log: 
 20  #       25.05.2002 rterry first draft, untested 
 21  # 
 22  # @TODO: Almost everything 
 23  #        Why arn't the lists showing on the tabs  
 24  #        Allow user configuration of which pages to display 
 25  #        Make icons on tabs user configurable 
 26  #        ?can cursor tool tip change when hovered over bitmap on a tab? 
 27  #        remove non-used imports from below this text 
 28  ############################################################################ 
 29  # $Source: /home/ncq/Projekte/cvs2git/vcs-mirror/gnumed/gnumed/client/wxpython/patient/gmGP_TabbedLists.py,v $ 
 30  # $Id: gmGP_TabbedLists.py,v 1.21 2008-04-13 14:39:49 ncq Exp $ 
 31  __version__ = "$Revision: 1.21 $" 
 32   
 33  try: 
 34          import wxversion 
 35          import wx 
 36  except ImportError: 
 37          from wxPython import wx 
 38          #from wxPython.gizmos import * 
 39          #from wxPython.stc import * 
 40   
 41  import keyword 
 42  import time 
 43  import images #bitmaps for column headers of lists 
 44  import gmPlugin, gmShadow 
 45  #from wxPython.lib.mixins.listctrl import wxColumnSorterMixin 
 46  import zlib, cPickle 
 47   
 48   
 49  scriptdata = { 
 50  1 : ("Adalat Oris", "30mg","1 mane","21/01/2002", "Hypertension","30 Rpt5","29/02/2000"), 
 51  2 : ("Nitrolingual Spray","", "1 spray when needed","24/08/2001", "Angina","1 Rpt2","01/06/2001"), 
 52  3 : ("Losec", "20mg","1 mane", "21/01/2002","Reflux Oesophagitis","30 Rpt5","16/11/2001"), 
 53  4 : ("Zoloft", "50mg","1 mane", "24/04/2002","Depression","30 Rpt0","24/04/2002"), 
 54  } 
 55   
 56  #===================================================================== 
57 -class Notebook(wxNotebook):
58 """ sets tooltips for notebook tab images """ 59 60 tip_shown=0
61 - def __init__(self, parent, id):
62 wxNotebook.__init__(self,parent,id) 63 64 # tool tips activated in... 65 self.tip_area1=wxRect(2,2,30,30) 66 self.tip_area2=wxRect(32,2,31,30) 67 self.tip_area3=wxRect(63,2,31,30) 68 self.tip_area4=wxRect(94,2,31,30) 69 self.tip_area5=wxRect(125,2,31,30) 70 self.tip_area6=wxRect(156,2,31,30) 71 72 EVT_MOTION(self, self.OnMouseMotion) 73 EVT_LEFT_DOWN(self, self.OnLeftDown)
74
75 - def OnMouseMotion(self, evt):
76 pt_local = self.GetPosition() 77 #print 'x_local', pt_local.x, 'y_local', pt_local.y #test 78 pt_global = self.ClientToScreen(pt_local) 79 #print 'x_global', pt_global.x, 'y_global', pt_global.y #test 80 81 x, y = evt.GetPosition() # clean-up --- pt_local = x,y (?) 82 if(self.tip_area1.Inside(wxPoint(x,y))): 83 if(self.tip_shown!=1): 84 tipwin1=wxTipWindow(self, _('Prescriptions')) 85 tipwin1.SetBoundingRect(wxRect(1+pt_global.x,1+pt_global.y,30,30)) 86 pt=wxPoint((1+pt_global.x+4+5), (1+pt_global.y+32+4)) 87 tipwin1.Move(pt) # position tool tip 88 self.tip_shown=1 # avoid tool tip flashing 89 90 elif(self.tip_area2.Inside(wxPoint(x,y))): 91 if(self.tip_shown!=2): 92 tipwin2=wxTipWindow(self, _('Requests')) 93 tipwin2.SetBoundingRect(wxRect(32+pt_global.x,1+pt_global.y,31,30)) 94 pt=wxPoint((32+pt_global.x+4+5), (1+pt_global.y+32+4)) 95 tipwin2.Move(pt) 96 self.tip_shown=2 97 98 elif(self.tip_area3.Inside(wxPoint(x,y))): 99 if(self.tip_shown!=3): 100 tipwin3=wxTipWindow(self, _('Measurements')) 101 tipwin3.SetBoundingRect(wxRect(63+pt_global.x,1+pt_global.y,31,30)) 102 pt=wxPoint((63+pt_global.x+4+5), (1+pt_global.y+32+4)) 103 tipwin3.Move(pt) 104 self.tip_shown=3 105 106 elif(self.tip_area4.Inside(wxPoint(x,y))): 107 if(self.tip_shown!=4): 108 tipwin4=wxTipWindow(self, _('Referrals')) 109 tipwin4.SetBoundingRect(wxRect(94+pt_global.x,1+pt_global.y,31,30)) 110 pt=wxPoint((94+pt_global.x+4+5), (1+pt_global.y+32+4)) 111 tipwin4.Move(pt) 112 self.tip_shown=4 113 114 elif(self.tip_area5.Inside(wxPoint(x,y))): 115 if(self.tip_shown!=5): 116 tipwin5=wxTipWindow(self, _('Recalls and Reviews')) 117 tipwin5.SetBoundingRect(wxRect(125+pt_global.x,1+pt_global.y,31,30)) 118 pt=wxPoint((125+pt_global.x+4+5), (1+pt_global.y+32+4)) 119 tipwin5.Move(pt) 120 self.tip_shown=5 121 122 elif(self.tip_area6.Inside(wxPoint(x,y))): 123 if(self.tip_shown!=6): 124 tipwin6=wxTipWindow(self, _('Inbox')) 125 tipwin6.SetBoundingRect(wxRect(156+pt_global.x,1+pt_global.y,31,30)) 126 pt=wxPoint((156+pt_global.x+4+5), (1+pt_global.y+32+4)) 127 tipwin6.Move(pt) 128 self.tip_shown=6 129 else: 130 self.tip_shown=0
131
132 - def OnLeftDown(self,evt): # have fix clicking problem - make tab select a single click
133 pass
134 #self.tipwin1.destroy() # ??? 135
136 -class TabbedLists(wxPanel): #, wxColumnSorterMixin):
137 """ a panel to hold the tabbed list """ 138 __icons_script = {"""icon_Rx_symbol""": 'x\xda\xd3\xc8)0\xe4\nV74S\x00"c\x05Cu\xae\xc4`u=\x85d\x05e\x03 p\xb3\x00\ 139 \xf3#@|\x0b\x03\x10\x04\xf3\x15\x80|\xbf\xfc\xbcT(\x07\x15\xe0\x15\xd4\x83\ 140 \x00t\xc1\x08 \x80\x8a"\t\xc2I\xb2\x04\xc1 "\x82R\x8b\x80\x08UP\x01b,\xdc\ 141 \x9b\x10+\x14\xc0\xa6\xa2\xf9\x1d\xa8\x0eI;\x02DD\xe0\x0c%=\x00D|Hk'} 142 143 __icons_requests = {"""icon_blood_sample""": "x\xdau\x8f\xbd\n\xc3 \x10\x80\xf7<\xc5A\x94\x14\x04Qh\x89c0\xe0\x98\x1b\xb2\ 144 \xb8\x96\xd2\xad\xf4\xfa\xfeS\x8d?\xe0\x05r\xdb\xf7\xdd\xff\xed\xf3\xb3\xc3>\ 145 \xd9;\xd8\x07X\x03v\x1a\x9e\xfb$\xe1\x05cp&Ef<\xd8;\xbfz\x97y<xv\xf3Z\xf3K\ 146 \xa9\x0f\x8d!\xf1F\xdfw\x06\xdd\x86\x85\xd2\x1cK\xb31sa\xd5\x9ak^\xb4|\x1dFm\ 147 Y\xad\x07\x16'\xa5\xf5YE\x9d\x1cS\x84xR\x84JE\xa6R\r\x12\x1bO\xb8(b\x1b\x93\ 148 \xc1\x91\x1dABJ\xc1\xee\xeaLU\xbd\xa9\xaa7M\tq\xf9\xe3\xb5\xd2\x7fZ\x8fVi"} 149 150 __icons_measurements = {"""icon_Set_Square""": 'x\xda\xd3\xc8)0\xe4\nV74S\x00"S\x05Cu\xae\xc4`\xf5|\x85d\x05\xa7\x9c\xc4\ 151 \xe4l0O\x0f\xc8S6\xb70w60\x00\xf3#@|7\x0b7\x18_\x01\xc8\xf7\xcb\xcfK\x05s\ 152 \xfca\x8a\xcd-\xa0\x92\n\nz\x11\x11z\nP\x80,\x98\x8fEP/\x9f\xb0\xca|4\x00qe\ 153 \x04*\x84\n\xa2\x02\xdc\x82\xfe@\x90\xaf\xa7\x97\xef\x0f\x05\xd4p\'\xf5U\xea\ 154 \x01\x00\xd2 _\x1b'} 155 156 __icons_referrals = {"""icon_writing_pen""": "x\xda\x8d\x901\x0b\xc3 \x10F\xf7\xfc\n\xa1\x83\x85\xc0\x87Y\xa2\xb3B\xc6:d\ 157 \xb95\x84N\r\xb5\xff\x7f\xaa9-\xd4K\xa1\x11\x11\xde\xbb\xe7\xa0\xd7\xed5t\ 158 \xb3\x1eF\x95w>t\xb7\xcc\x1ajU~[\xd6\x07S\x9f\xe9\xe2\x9d\x0f\xde1\xc7\x9d'7\ 159 \x05c\x98U\xe6[z\xde\x19\xd2>\xb4\xce\x98:\xa4\xc26XW\xe3v\x9d\x93\x00\x0e\ 160 \x92\x90\x12\xa4D\x04HHB\xa4\xc3u\xc4\x1e$d\t\x85,a+k\xd8\xca\x1aJ\xc9\xa1\ 161 \x90\x80\xfa!\xbf\xde\x8e\xcf\xfa\xf3Kx\x03\x0b\xf8P\xa7" 162 163 , """icon_outgoing_letter""": "x\xda]\xcd;\x0e\x830\x10\x04\xd0\x9eSXJ\xe1T+\\$r\x9dH.\xe3\x82f[\x84R\x05e\ 164 r\xff*\xbb\xb6\xf1\x87\x11B\xccc\x0c\xd7\xfd\xe7\xa6\xc5\xba\xbb\x91\xebf\ 165 \x9c\x9d\xd6\xc5\xc2l\xe6\xb1\xaf\xdb'5\x92v\xf1\xb3&u#\xfd\x85\xef;\x15\xd6\ 166 \x97\xc1\x87g\xf0\xa9G\xed\xf3\\\xbb\xc9!.\x0f\x1d\x12\x1d\xda\x90\xa8jE\xa2\ 167 \xa6m\t!\x9c\x96`\xddaX\x82\x13f-(\x96Q\x94\x0b\x02\xb1`\x04*\xb2*\xabq\x87\ 168 \x8c\x1c\x1e1-G\xcc6\x1eG\x8c\xf2Q\xb9\xf5?\xeas \x0fQ\xa4?:Rj{"} 169 170 __icons_recalls = {"""icon_talking_head""": 'x\xda\x8d\x8f1\x0b\xc3 \x10\x85\xf7\xfc\x8a\x83\x0e\x16\x041K\xe3\xac\xe0\ 171 \xd8\x0cYn\r\xa1SC\xed\xff\x9fzw\x1a\x8b\xa6C\x1f"\xbc\xef\xde\xdd\xe9u\x7f\ 172 \x8f\xc3\xa2\xc6\x1b\xd0\xa1K\r\xeb\xa2\x006\xf0\xfb\xba=\xc5%r\x17\xef|\xf0\ 173 N\xbcf?\xb9)X+~foI1\xd7\r\xf9{z=\xc4 \x17\xa3\x8b\xa1\x14\xe1\x90\xc9ja\xc1=\ 174 \x84\xbf b:Ad\xd8\xcd$\x86\xd0mg\x04-\xe4\x18\xcem;\x16\xfd\x86\t\xfa\xf6\ 175 \xfc"\xad\xeb\xa2\xda\xad\xcfI\x8a\xd5$Oc\x81\x04\xbf\x8b\x8e\x8fS\x90\xa1\ 176 \xf9\x00[x_\x8e'} 177 178 __icons_inbox = {"""icon_inbox""": "x\xda\x85\xd01\x0e\xc20\x0c\x05\xd0\xbd\xa7\x88\xc4\x10&+\x19\x80\xcc e\xac\ 179 \x87.^\xab\x8a\x89\ns\xff\t\xc7Nh2\xf1UU\xfdOv#\xe5\xbc\x7f\xe2\xb4\xf8xu\ 180 \xf2\\\\\xf4\xd3\xbaxv\x9b\xbb\xef\xeb\xf6\xd2\xe6\xa4\xcd\xfc~jA)\xa7\x10\ 181 \xf2#'\xedTzN\xbf\x0e\xa5\xdfR\x90\xd4\xe5\x12\x00 \xfb\xfa\x83,\xc84\"S\x99\ 182 4m\xc8\xa4hZQ\xe7\xa0\xcd\x1a\xca\x9c)\x11\x8aVd\xac\xeb\xc8\x07\x92\xaa\xce\ 183 uHl\xa1\x11\xa9dD\xb3q\x9d\x11\xe5\xa7\xf2\xea\x0f\xea\xd3\x90\x86\xf4\xb7tD\ 184 \x10\xbe\xb8\xbej\xdf"} 185
186 - def __init__(self, parent,id):
187 wxPanel.__init__(self, parent, id) 188 self.SetAutoLayout(True) 189 sizer = wxBoxSizer(wxHORIZONTAL) 190 self.SetBackgroundColour(wxColour(222,222,222)) 191 #----------------------------------------------------- 192 #create imagelist for use by the lists in the notebook 193 #e.g the icons to sort the columns up and down 194 #----------------------------------------------------- 195 self.ListsImageList= wxImageList(16,16) 196 self.small_arrow_up = self.ListsImageList.Add(images.getSmallUpArrowBitmap()) 197 self.small_arrow_down = self.ListsImageList.Add(images.getSmallDnArrowBitmap()) 198 #------------------------------------------------------------------------ 199 #---------------------------------------------------------------------- 200 #Add a notebook control to hold the lists of things eg scripts, recalls 201 #---------------------------------------------------------------------- 202 #self.notebook1 = Notebook(self, -1, wxDefaultPosition, wxDefaultSize, style = 0) 203 self.notebook1 = Notebook(self, -1) 204 #------------------------------------------------------------------------- 205 #Associate an imagelist with the notebook and add images to the image list 206 #------------------------------------------------------------------------- 207 tabimage_Script = tabimage_Requests = tabimage_Requests = tabimage_Requests = tabimage_Requests = tabimage_Requests = -1 208 self.notebook1.il = wxImageList(16, 16) 209 tabimage_Script = self.notebook1.il.Add(self.getBitmap(self.__icons_script[_("""icon_Rx_symbol""")])) 210 tabimage_Requests = self.notebook1.il.Add( self.getBitmap(self.__icons_requests[_("""icon_blood_sample""")])) 211 tabimage_Measurements = self.notebook1.il.Add( self.getBitmap(self.__icons_measurements[_("""icon_Set_Square""")])) 212 tabimage_Referrals = self.notebook1.il.Add( self.getBitmap(self.__icons_referrals[_("""icon_writing_pen""")])) 213 tabimage_Recalls = self.notebook1.il.Add(self.getBitmap(self.__icons_recalls[_("""icon_talking_head""")])) 214 tabimage_Inbox = self.notebook1.il.Add(self.getBitmap(self.__icons_inbox[_("""icon_inbox""")])) 215 self.notebook1.SetImageList(self.notebook1.il) 216 szr_notebook = wxNotebookSizer(self.notebook1) 217 #---------------------------------------------------------------------------------- 218 #now create the lists that will sit on the notebook pages, and add them to the page 219 #---------------------------------------------------------------------------------- 220 szr_script_page= wxBoxSizer(wxVERTICAL) 221 ListScript_ID = wxNewId() #can use wxLC_VRULES to put faint cols in list 222 self.List_Script = wxListCtrl(self.notebook1, ListScript_ID, wxDefaultPosition, wxDefaultSize,wxLC_REPORT|wxSUNKEN_BORDER) 223 szr_script_page.Add(self.List_Script,100,wxEXPAND) 224 self.List_Script.SetForegroundColour(wxColor(131,129,131)) 225 self.List_Requests = wxListCtrl(self.notebook1, -1, wxDefaultPosition, wxDefaultSize,wxSUNKEN_BORDER) 226 self.List_Measurements = wxListCtrl(self.notebook1, -1, wxDefaultPosition, wxDefaultSize,wxSUNKEN_BORDER) 227 self.List_Referrals = wxListCtrl(self.notebook1, -1, wxDefaultPosition, wxDefaultSize,wxSUNKEN_BORDER) 228 self.List_Recalls = wxListCtrl(self.notebook1, -1, wxDefaultPosition, wxDefaultSize,wxSUNKEN_BORDER) 229 self.List_Inbox = wxListCtrl(self.notebook1, -1, wxDefaultPosition, wxDefaultSize,wxSUNKEN_BORDER) 230 231 self.notebook1.AddPage(self.List_Script, '', True, tabimage_Script) 232 #self.notebook1.AddPage(True, tabimage_Inbox, szr_script_page, '') 233 self.notebook1.AddPage(self.List_Requests, '', True, tabimage_Requests) 234 self.notebook1.AddPage(self.List_Measurements, '', True, tabimage_Measurements) 235 self.notebook1.AddPage(self.List_Referrals, '', True, tabimage_Referrals) 236 self.notebook1.AddPage(self.List_Recalls, '', True, tabimage_Recalls) 237 self.notebook1.AddPage(self.List_Inbox, '', True, tabimage_Inbox) 238 self.notebook1.SetSelection(0) #start on scriptpage 239 #-------------------------------------- 240 #Now lets do things to the script list: 241 #-------------------------------------- 242 self.List_Script.SetImageList(self.ListsImageList, wxIMAGE_LIST_SMALL) 243 #------------------------------------------------------------------------ 244 # since we want images on the column header we have to do it the hard way 245 #------------------------------------------------------------------------ 246 info = wxListItem() 247 info.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE | wxLIST_MASK_FORMAT 248 info.m_image = -1 249 info.m_format = 0 250 info.m_text = _("Drug") 251 self.List_Script.InsertColumnInfo(0, info) 252 253 254 info.m_format = wxLIST_FORMAT_LEFT 255 info.m_text = _("Dose") 256 self.List_Script.InsertColumnInfo(1, info) 257 258 info.m_format = wxLIST_FORMAT_RIGHT 259 info.m_text = _("Instructions") 260 self.List_Script.InsertColumnInfo(2, info) 261 262 info.m_format = wxLIST_FORMAT_RIGHT 263 info.m_text = _("Last Date") 264 self.List_Script.InsertColumnInfo(3, info) 265 266 info.m_format = wxLIST_FORMAT_RIGHT 267 info.m_text = _("Prescribed For") 268 self.List_Script.InsertColumnInfo(4, info) 269 270 271 info.m_format = wxLIST_FORMAT_RIGHT 272 info.m_text = _("Quantity") 273 self.List_Script.InsertColumnInfo(5, info) 274 275 276 info.m_format = 0 277 info.m_text = _("First Date") 278 self.List_Script.InsertColumnInfo(6, info) 279 #------------------------------------------------------------- 280 #loop through the scriptdata array and add to the list control 281 #note the different syntax for the first coloum of each row 282 #i.e. here > self.List_Script.InsertStringItem(x, data[0])!! 283 #------------------------------------------------------------- 284 items = scriptdata.items() 285 for x in range(len(items)): 286 key, data = items[x] 287 #<DEBUG> 288 gmLog.gmDefLog.Log (gmLog.lData, items[x]) 289 #</DEBUG> 290 #print x, data[0],data[1],data[2] 291 self.List_Script.InsertStringItem(x, data[0]) 292 self.List_Script.SetStringItem(x, 1, data[1]) 293 self.List_Script.SetStringItem(x, 2, data[2]) 294 self.List_Script.SetStringItem(x, 3, data[3]) 295 self.List_Script.SetStringItem(x, 4, data[4]) 296 self.List_Script.SetStringItem(x, 5, data[5]) 297 self.List_Script.SetStringItem(x, 6, data[6]) 298 self.List_Script.SetItemData(x, key) 299 #-------------------------------------------------------- 300 #note the number pased to the wxColumnSorterMixin must be 301 #the 1 based count of columns 302 #-------------------------------------------------------- 303 self.itemDataMap = scriptdata 304 #wxColumnSorterMixin.__init__(self, 5) #I excluded first date as it didn't sort 305 306 self.List_Script.SetColumnWidth(0, wxLIST_AUTOSIZE) 307 self.List_Script.SetColumnWidth(1, wxLIST_AUTOSIZE) 308 self.List_Script.SetColumnWidth(2, wxLIST_AUTOSIZE) 309 self.List_Script.SetColumnWidth(3, wxLIST_AUTOSIZE) 310 self.List_Script.SetColumnWidth(4, wxLIST_AUTOSIZE) 311 self.List_Script.SetColumnWidth(5, wxLIST_AUTOSIZE) 312 self.List_Script.SetColumnWidth(6, 150) 313 sizer.AddSizer(szr_notebook,40,wxEXPAND) 314 self.SetSizer(sizer) #set the sizer 315 sizer.Fit(self) #set to minimum size as calculated by sizer 316 self.SetAutoLayout(True) #tell frame to use the sizer 317 self.Show(True)
318
319 - def getBitmap (self,__icon):
320 # returns the images on the tabs 321 return wxBitmapFromXPMData(cPickle.loads(zlib.decompress( __icon )))
322 323 #=====================================================================
324 -class gmGP_TabbedLists (gmPlugin.wxBasePlugin):
325 """ 326 Plugin to encapsulate the tabbed lists 327 """
328 - def name (self):
329 return 'TabbedListsPlugin'
330
331 - def register (self):
332 self.mwm = self.gb['clinical.manager'] 333 self.mwm.RegisterRightSide ('tabbed_lists', TabbedLists 334 (self.mwm.righthalfpanel, -1), position=1)
335
336 - def unregister (self):
337 self.mwm.Unregister ('tabbed_lists')
338 339 if __name__ == "__main__": 340 app = wxPyWidgetTester(size = (400, 300)) 341 app.SetWidget(TabbedLists, -1) 342 app.MainLoop() 343 344 #===================================================================== 345 # $Log: gmGP_TabbedLists.py,v $ 346 # Revision 1.21 2008-04-13 14:39:49 ncq 347 # - no more old style logging 348 # 349 # Revision 1.20 2005/09/26 18:01:53 ncq 350 # - use proper way to import wx26 vs wx2.4 351 # - note: THIS WILL BREAK RUNNING THE CLIENT IN SOME PLACES 352 # - time for fixup 353 # 354 # Revision 1.19 2004/07/18 20:30:54 ncq 355 # - wxPython.true/false -> Python.True/False as Python tells us to do 356 # 357 # Revision 1.18 2003/11/17 10:56:42 sjtan 358 # 359 # synced and commiting. 360 # 361 # Revision 1.1 2003/10/23 06:02:40 sjtan 362 # 363 # manual edit areas modelled after r.terry's specs. 364 # 365 # Revision 1.17 2003/05/03 02:20:24 michaelb 366 # bug fix: make wxPython 2.4.0.7's wxRect:Inside happy 367 # 368 # Revision 1.16 2003/04/23 09:20:32 ncq 369 # - reordered arguments and removed keywords from Tabbed Lists to work 370 # around difference betwee 2.0.4.1 to 2.0.4.7 371 # 372 # Revision 1.15 2003/04/05 00:39:23 ncq 373 # - "patient" is now "clinical", changed all the references 374 # 375 # Revision 1.14 2003/02/25 05:30:46 michaelb 376 # improvements on the tooltips 'attached' to the tab images 377 # 378 # Revision 1.13 2003/02/20 02:13:49 michaelb 379 # adding tooltips for the images on the tabs of the wxNotebook 380 # 381 # Revision 1.12 2003/02/07 21:01:21 sjtan 382 # 383 # refactored to re-use handler_generator.generator. Handler for gmSelectPerson as test. 384 # 385 # Revision 1.11 2003/02/02 06:36:26 michaelb 386 # split '__icons' into multiple dictionaries 387 # added 'icon_outgoing_letter' to '__icons_referrals' so it similar to 'gmGP_Referrals.py' 388 # 389 # Revision 1.10 2003/01/30 06:02:14 michaelb 390 # tiny bit of clean-up 391 # 392 # Revision 1.9 2003/01/28 06:47:43 michaelb 393 # removed dependence on "images_gnuMedGP_TabbedLists.py", changed drugs tab icon to 'Rx' 394 # 395 # Revision 1.8 2003/01/25 23:02:53 ncq 396 # - cvs keywords/metadata 397 # 398