#------------------------------------------------ def __OnKeyDown(self, event): """Act on some key presses we want to process ourselves.""" if (self.list is not None) and not self.list.alive: self.list = None # someone else has destroyed our list! curs_pos = self.GetCurrentPos() # # - if in list: scroll list # - done by STC: # - else move down inside ourselves until last line # - don't go beyond last line # - don't wrap to first line # NOTE: we discuss whether to move to next in tab # NOTE: order from first/last line if event.KeyCode() == wx.WXK_DOWN: if (self.list is not None) and self.list.alive: self.list.Down() event.Skip() return # # - if in list: scroll list # - done by STC: # - else move up inside ourselves until first line # - don't go beyond first line # - don't wrap to last line # NOTE: we discuss whether to move to next in tab # NOTE: order from first/last line if event.KeyCode() == wx.WXK_UP: if (self.list is not None) and self.list.alive: self.list.Up() event.Skip() return # key # - move to next/prev_in_tab_order # FIXME: what about inside a list ? if event.KeyCode() == wx.WXK_TAB: if event.m_shiftDown: if self.prev_in_tab_order is not None: self.prev_in_tab_order.SetFocus() else: if self.next_in_tab_order is not None: self.next_in_tab_order.SetFocus() event.Skip() return # FIXME: why ? # elif self.__parent.complete: # self.__parent.complete() # ';' # - do not put into empty field # - do not allow consecutive ';'s if event.KeyCode() == ord(';'): if self.GetLength() == 0: event.Skip() return # FIXME: does this fail on curs_pos = 0/1 ? if (self.GetCharAt(curs_pos) == ord(';')) and (self.GetCharAt(curs_pos-1) == ord(';')): event.Skip() return # # - if inside embedded string # - delete entire string and data dict # - else standard behaviour if event.KeyCode() == wx.WXK_DELETE: # FIXME: perhaps add check for regex, too ? if self.GetStyleAt(curs_pos) == STYLE_EMBED: self.DelPhrase(curs_pos) # FIXME: also delete corresponding "additional data" dict ... event.Skip() return # # - if inside embedded string # - delete entire string and data dict # - else standard behaviour if event.KeyCode() == wx.WXK_BACK: # FIXME: perhaps add check for regex, too ? if self.GetStyleAt(curs_pos-1) == STYLE_EMBED: self.DelPhrase (curs_pos-1) # FIXME: also delete corresponding "additional data" dict ... event.Skip() return # # - if in list: proxy to list # - in empty widget: go to next in tab order # - after last character in widget: # - if after ';': go to next in tab order # - f no ';' there: add one if event.KeyCode() == wx.WXK_RETURN and not event.m_shiftDown: if (self.list is not None) and self.list.alive: self.list.Enter() event.Skip() return if self.GetLength() == 0: if self.next_in_tab_order is not None: self.next_in_tab_order.SetFocus() event.Skip() return if curs_pos == self.GetLength(): # FIXME: maybe needs to be curs_pos -1 ? # FIXME: make this smarter to deal with whitespace after ';' if self.GetCharAt(curs_pos) == ord(';'): if self.next_in_tab_order: self.next_in_tab_order.SetFocus() # FIXME: why ? # elif self.__parent.complete: # self.__parent.complete() else: self.AddText ('; ') event.Skip() return # FIXME: why ? # if event.KeyCode() == wx.WXK_F12 and self.__parent.complete: # self.__parent.complete() #------------------------------------------------