def __init__(self, *args, **kwargs): stc.StyledTextCtrl.__init__(self, *args, **kwargs) self.spell = STCSpellCheck(self, language="fr_FR") self.SetMarginType(0, stc.STC_MARGIN_NUMBER) self.SetMarginWidth(1, 0) self.SetMinSize((200, 22)) # self.SetScrollWidth(0) # self.SetUseHorizontalScrollBar(False) self.SetWrapMode(stc.STC_WRAP_WORD) # self.SetLayoutCache(stc.STC_CACHE_NONE ) self.toutVerifier = False self.skipEvt = True self.remplace = False self.Bind(stc.EVT_STC_MODIFIED, self.OnModified) # self.Bind(stc.EVT_STC_CHANGE, self.OnModified) # self.Bind(stc.EVT_STC_CHANGE, self.OnChange) self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) # self.Bind(wx.EVT_MENU, self._OnMenu) self.Bind(wx.EVT_IDLE, self.OnIdle) self.modified_count = 0
def __init__(self, *args, **kwargs): stc.StyledTextCtrl.__init__(self, *args, **kwargs) self.spell = STCSpellCheck(self, language="fr_FR") self.SetMarginType(0, stc.STC_MARGIN_NUMBER) self.SetMarginWidth(1, 0) # self.SetScrollWidth(0) # self.SetUseHorizontalScrollBar(False) self.SetWrapMode(stc.STC_WRAP_WORD) # self.SetLayoutCache(stc.STC_CACHE_NONE ) self.toutVerifier = False self.skipEvt = True self.remplace = False self.Bind(stc.EVT_STC_MODIFIED, self.OnModified) # self.Bind(stc.EVT_STC_CHANGE, self.OnChange) self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) self.Bind(wx.EVT_MENU, self._OnMenu) self.Bind(wx.EVT_IDLE, self.OnIdle) self.modified_count = 0
class STC_ortho(stc.StyledTextCtrl): def __init__(self, *args, **kwargs): stc.StyledTextCtrl.__init__(self, *args, **kwargs) self.spell = STCSpellCheck(self, language="fr_FR") self.SetMarginType(0, stc.STC_MARGIN_NUMBER) self.SetMarginWidth(1, 0) self.SetMinSize((200, 22)) # self.SetScrollWidth(0) # self.SetUseHorizontalScrollBar(False) self.SetWrapMode(stc.STC_WRAP_WORD) # self.SetLayoutCache(stc.STC_CACHE_NONE ) self.toutVerifier = False self.skipEvt = True self.remplace = False self.Bind(stc.EVT_STC_MODIFIED, self.OnModified) # self.Bind(stc.EVT_STC_CHANGE, self.OnModified) # self.Bind(stc.EVT_STC_CHANGE, self.OnChange) self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) # self.Bind(wx.EVT_MENU, self._OnMenu) self.Bind(wx.EVT_IDLE, self.OnIdle) self.modified_count = 0 # def _OnMenu(self,evt): ## print 'OnMenu' # evt.Skip() def OnContextMenu(self,evt): pos = evt.GetPosition() bpos = self.PositionFromPoint(self.ScreenToClient(pos)) words = self.GetWordFromPosition(bpos) # print dir(evt) # print evt.GetClientObject() spell = self.spell._spelling_dict if spell != None and len(words[0]) > 0 and not spell.check(words[0]): sugg = self.spell.getSuggestions(words[0]) menu = wx.Menu() if len(sugg) == 0: item = wx.MenuItem(menu, wx.ID_ANY, u"Aucune suggestion") item.Enable(False) item1 = menu.AppendItem(item) for w in sugg: item = wx.MenuItem(menu, wx.ID_ANY, w) item1 = menu.AppendItem(item) self.Bind(wx.EVT_MENU, functools.partial(self.Remplacer, mot = w, start = words[1], end = words[2]), item1) self.PopupMenu(menu) menu.Destroy() else: evt.Skip() def Remplacer(self, event = None, mot = u"", start = 0, end = 0): # print "Remplacer" self.remplace = True self.Replace(start, end, mot) # print "fin Remplacer" def GetWordFromPosition(self, pos): """Get the word at the given position @param pos: int @return: (string, int_start, int_end) """ end = self.WordEndPosition(pos, True) start = self.WordStartPosition(pos, True) word = self.GetTextRange(start, end) return (word, start, end) def SetValue(self, text, event = True): # print "SetValue", text[:10], "..." self.toutVerifier = True self.skipEvt = event wx.CallAfter(self.SetText, text) def OnModified(self, evt): # print "OnModified", self.skipEvt # NOTE: on really big insertions, evt.GetText can cause a # MemoryError on MSW, so I've commented this dprint out. mod = evt.GetModificationType() # print "mod", mod & stc.STC_MOD_BEFOREINSERT, mod & stc.STC_MOD_CHANGEFOLD, mod & stc.STC_MOD_CONTAINER, mod & stc.STC_MOD_BEFOREDELETE if mod & stc.STC_MOD_INSERTTEXT or mod & stc.STC_MOD_DELETETEXT:# or self.toutVerifier: # print "OnModified", self.toutVerifier #print("(%s) at %d: text=%s len=%d" % (self.transModType(evt.GetModificationType()),evt.GetPosition(), repr(evt.GetText()), evt.GetLength())) if self.toutVerifier: # print " toutVerifier" pos = 1 last = self.GetLastPosition() else: pos = evt.GetPosition() last = pos + evt.GetLength() self.toutVerifier = False self.spell.addDirtyRange(pos, last, evt.GetLinesAdded(), mod & stc.STC_MOD_DELETETEXT) #self.modified_count += 1 #if self.modified_count > 10: # wx.CallAfter(self.spell.processDirtyRanges) # self.modified_count = 0 # print self.skipEvt evt.Skip(self.skipEvt) self.skipEvt = True else: evt.Skip(False) # if self.remplace: # evt.Skip() # self.remplace = False # else: # evt.Skip(False) # def OnIdle(self, evt): self.spell.processIdleBlock() def transModType(self, modType): st = "" table = [(stc.STC_MOD_INSERTTEXT, "InsertText"), (stc.STC_MOD_DELETETEXT, "DeleteText"), (stc.STC_MOD_CHANGESTYLE, "ChangeStyle"), (stc.STC_MOD_CHANGEFOLD, "ChangeFold"), (stc.STC_PERFORMED_USER, "UserFlag"), (stc.STC_PERFORMED_UNDO, "Undo"), (stc.STC_PERFORMED_REDO, "Redo"), (stc.STC_LASTSTEPINUNDOREDO, "Last-Undo/Redo"), (stc.STC_MOD_CHANGEMARKER, "ChangeMarker"), (stc.STC_MOD_BEFOREINSERT, "B4-Insert"), (stc.STC_MOD_BEFOREDELETE, "B4-Delete") ] for flag,text in table: if flag & modType: st = st + text + " " if not st: st = 'UNKNOWN' return st
class STC_ortho(stc.StyledTextCtrl): def __init__(self, *args, **kwargs): stc.StyledTextCtrl.__init__(self, *args, **kwargs) self.spell = STCSpellCheck(self, language="fr_FR") self.SetMarginType(0, stc.STC_MARGIN_NUMBER) self.SetMarginWidth(1, 0) # self.SetScrollWidth(0) # self.SetUseHorizontalScrollBar(False) self.SetWrapMode(stc.STC_WRAP_WORD) # self.SetLayoutCache(stc.STC_CACHE_NONE ) self.toutVerifier = False self.skipEvt = True self.remplace = False self.Bind(stc.EVT_STC_MODIFIED, self.OnModified) # self.Bind(stc.EVT_STC_CHANGE, self.OnChange) self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) self.Bind(wx.EVT_MENU, self._OnMenu) self.Bind(wx.EVT_IDLE, self.OnIdle) self.modified_count = 0 def _OnMenu(self, evt): print 'OnMenu' evt.Skip() def OnContextMenu(self, evt): pos = evt.GetPosition() bpos = self.PositionFromPoint(self.ScreenToClient(pos)) words = self.GetWordFromPosition(bpos) # print dir(evt) # print evt.GetClientObject() spell = self.spell._spelling_dict if spell != None and len(words[0]) > 0 and not spell.check(words[0]): sugg = self.spell.getSuggestions(words[0]) menu = wx.Menu() if len(sugg) == 0: item = wx.MenuItem(menu, wx.ID_ANY, u"Aucune suggestion") item.Enable(False) item1 = menu.AppendItem(item) for w in sugg: item = wx.MenuItem(menu, wx.ID_ANY, w) item1 = menu.AppendItem(item) self.Bind( wx.EVT_MENU, functools.partial( self.Remplacer, mot=w, start=words[1], end=words[2]), item1) self.PopupMenu(menu) menu.Destroy() else: evt.Skip() def Remplacer(self, event=None, mot=u"", start=0, end=0): # print "Remplacer" self.remplace = True self.Replace(start, end, mot) # print "fin Remplacer" def GetWordFromPosition(self, pos): """Get the word at the given position @param pos: int @return: (string, int_start, int_end) """ end = self.WordEndPosition(pos, True) start = self.WordStartPosition(pos, True) word = self.GetTextRange(start, end) return (word, start, end) def SetValue(self, text, event=True): # print "SetValue", text[:10], "..." self.toutVerifier = True self.skipEvt = event wx.CallAfter(self.SetText, text) def OnModified(self, evt): # NOTE: on really big insertions, evt.GetText can cause a # MemoryError on MSW, so I've commented this dprint out. mod = evt.GetModificationType() # print "mod", mod & stc.STC_MOD_BEFOREINSERT, mod & stc.STC_MOD_CHANGEFOLD, mod & stc.STC_MOD_CONTAINER, mod & stc.STC_MOD_BEFOREDELETE if mod & stc.STC_MOD_INSERTTEXT or mod & stc.STC_MOD_DELETETEXT: # or self.toutVerifier: # print "OnModified", self.toutVerifier #print("(%s) at %d: text=%s len=%d" % (self.transModType(evt.GetModificationType()),evt.GetPosition(), repr(evt.GetText()), evt.GetLength())) if self.toutVerifier: # print " toutVerifier" pos = 1 last = self.GetLastPosition() else: pos = evt.GetPosition() last = pos + evt.GetLength() self.toutVerifier = False self.spell.addDirtyRange(pos, last, evt.GetLinesAdded(), mod & stc.STC_MOD_DELETETEXT) #self.modified_count += 1 #if self.modified_count > 10: # wx.CallAfter(self.spell.processDirtyRanges) # self.modified_count = 0 # print self.skipEvt evt.Skip(self.skipEvt) self.skipEvt = True else: evt.Skip(False) # if self.remplace: # evt.Skip() # self.remplace = False # else: # evt.Skip(False) # def OnIdle(self, evt): self.spell.processIdleBlock() def transModType(self, modType): st = "" table = [(stc.STC_MOD_INSERTTEXT, "InsertText"), (stc.STC_MOD_DELETETEXT, "DeleteText"), (stc.STC_MOD_CHANGESTYLE, "ChangeStyle"), (stc.STC_MOD_CHANGEFOLD, "ChangeFold"), (stc.STC_PERFORMED_USER, "UserFlag"), (stc.STC_PERFORMED_UNDO, "Undo"), (stc.STC_PERFORMED_REDO, "Redo"), (stc.STC_LASTSTEPINUNDOREDO, "Last-Undo/Redo"), (stc.STC_MOD_CHANGEMARKER, "ChangeMarker"), (stc.STC_MOD_BEFOREINSERT, "B4-Insert"), (stc.STC_MOD_BEFOREDELETE, "B4-Delete")] for flag, text in table: if flag & modType: st = st + text + " " if not st: st = 'UNKNOWN' return st