Package Gnumed :: Package wxpython :: Module gmTextCtrl
[frames] | no frames]

Source Code for Module Gnumed.wxpython.gmTextCtrl

  1  """GNUmed TextCtrl sbuclass.""" 
  2  #=================================================== 
  3  __author__  = "K. Hilbert <Karsten.Hilbert@gmx.net>" 
  4  __license__ = "GPL v2 or later (details at http://www.gnu.org)" 
  5   
  6  import logging 
  7  import sys 
  8   
  9   
 10  import wx 
 11   
 12   
 13  if __name__ == '__main__': 
 14          sys.path.insert(0, '../../') 
 15   
 16  from Gnumed.wxpython import gmKeywordExpansionWidgets 
 17   
 18   
 19  _log = logging.getLogger('gm.txtctrl') 
 20   
 21  #=================================================== 
 22  color_tctrl_invalid = 'pink' 
 23  color_tctrl_partially_invalid = 'yellow' 
 24   
25 -class cTextCtrl(wx.TextCtrl, gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin):
26
27 - def __init__(self, *args, **kwargs):
28 29 wx.TextCtrl.__init__(self, *args, **kwargs) 30 31 self._on_set_focus_callbacks = [] 32 self._on_lose_focus_callbacks = [] 33 self._on_modified_callbacks = [] 34 35 self.__initial_background_color = self.GetBackgroundColour() 36 37 gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin.__init__(self) 38 self.enable_keyword_expansions()
39 40 #-------------------------------------------------------- 41 # callback API 42 #--------------------------------------------------------
43 - def add_callback_on_set_focus(self, callback=None):
44 """Add a callback for invocation when getting focus.""" 45 if not callable(callback): 46 raise ValueError('[add_callback_on_set_focus]: ignoring callback [%s] - not callable' % callback) 47 48 self._on_set_focus_callbacks.append(callback) 49 if len(self._on_set_focus_callbacks) == 1: 50 self.Bind(wx.EVT_SET_FOCUS, self._on_set_focus)
51 #---------------------------------------------------------
52 - def add_callback_on_lose_focus(self, callback=None):
53 """Add a callback for invocation when losing focus.""" 54 if not callable(callback): 55 raise ValueError('[add_callback_on_lose_focus]: ignoring callback [%s] - not callable' % callback) 56 57 self._on_lose_focus_callbacks.append(callback) 58 if len(self._on_lose_focus_callbacks) == 1: 59 self.Bind(wx.EVT_KILL_FOCUS, self._on_lose_focus)
60 #---------------------------------------------------------
61 - def add_callback_on_modified(self, callback=None):
62 """Add a callback for invocation when the content is modified. 63 64 This callback will NOT be passed any values. 65 """ 66 if not callable(callback): 67 raise ValueError('[add_callback_on_modified]: ignoring callback [%s] - not callable' % callback) 68 69 self._on_modified_callbacks.append(callback) 70 if len(self._on_modified_callbacks) == 1: 71 self.Bind(wx.EVT_TEXT, self._on_text_update)
72 #wx.EVT_TEXT(self, self.GetId(), self._on_text_update) 73 #-------------------------------------------------------- 74 # state display API 75 #--------------------------------------------------------
76 - def display_as_valid(self, valid=None, partially_invalid=False):
77 if valid is True: 78 self.SetBackgroundColour(self.__initial_background_color) 79 elif valid is False: 80 if partially_invalid: 81 self.SetBackgroundColour(color_tctrl_partially_invalid) 82 else: 83 self.SetBackgroundColour(color_tctrl_invalid) 84 else: 85 raise ValueError(u'<valid> must be True or False') 86 self.Refresh()
87 #--------------------------------------------------------
88 - def display_as_disabled(self, disabled=None):
89 if disabled is True: 90 self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_BACKGROUND)) 91 elif disabled is False: 92 self.SetBackgroundColour(self.__initial_background_color) 93 else: 94 raise ValueError(u'<disabled> must be True or False') 95 self.Refresh()
96 #-------------------------------------------------------- 97 # event handlers 98 #--------------------------------------------------------
99 - def _on_set_focus(self, event):
100 event.Skip() 101 for callback in self._on_set_focus_callbacks: 102 callback() 103 return True
104 #--------------------------------------------------------
105 - def _on_lose_focus(self, event):
106 """Do stuff when leaving the control. 107 108 The user has had her say, so don't second guess 109 intentions but do report error conditions. 110 """ 111 event.Skip() 112 wx.CallAfter(self.__on_lost_focus) 113 return True
114 #--------------------------------------------------------
115 - def __on_lost_focus(self):
116 for callback in self._on_lose_focus_callbacks: 117 callback()
118 #--------------------------------------------------------
119 - def _on_text_update (self, event):
120 """Internal handler for wx.EVT_TEXT. 121 122 Called when text was changed by user or by SetValue(). 123 """ 124 for callback in self._on_modified_callbacks: 125 callback() 126 return
127 128 #=================================================== 129 # main 130 #--------------------------------------------------- 131 if __name__ == '__main__': 132 133 if len(sys.argv) < 2: 134 sys.exit() 135 136 if sys.argv[1] != u'test': 137 sys.exit() 138 139 from Gnumed.pycommon import gmI18N 140 gmI18N.activate_locale() 141 gmI18N.install_domain(domain='gnumed') 142 143 #-----------------------------------------------
144 - def test_gm_textctrl():
145 app = wx.PyWidgetTester(size = (200, 50)) 146 tc = cTextCtrl(parent = app.frame, id = -1) 147 #tc.enable_keyword_expansions() 148 app.frame.Show(True) 149 app.MainLoop() 150 return True
151 #----------------------------------------------- 152 test_gm_textctrl() 153 154 #--------------------------------------------------- 155