Example #1
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.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
Example #2
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
Example #3
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
Example #4
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.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