import wx
import wx.stc as stc
import re

AutoFillStartLen=2
AutoFillMinWordLen=4
choices=[]

choices.sort()
MyChoices=' '.join(choices)      
class MySTC(stc.StyledTextCtrl):
    def __init__(self, parent, size=wx.DefaultSize, style=0,menu=None):
        stc.StyledTextCtrl.__init__(self, parent, size=size, style=style)
        self.SetCaretLineBack('#eeeed1')
        self.SetCaretWidth(3)
        self.SetCaretLineVisible(True)
        self.MyChoices=MyChoices 
        self.Bind(stc.EVT_STC_CHARADDED , self.OnAutoFill)
        self.Bind( wx.EVT_KEY_DOWN , self.OnKeyDown, self )
        self.Bind(wx.EVT_RIGHT_DOWN,self.SetPopupComment)
        
    def OnContextMenu(self, event):
        print 'Right click'
        self.Bind(wx.EVT_MENU, self.OnPopupRemove, id=-1)
        menu = wx.Menu()
        item = wx.MenuItem(menu, wx.ID_ANY,"Remove Word")
        menu.AppendItem(item)
        self.PopupMenu(menu)
        menu.Destroy()    
    def SetPopupComment(self,event):
        menu = wx.Menu()
        menu.Append(wx.ID_UNDO,"&Undo")
        menu.Append(wx.ID_REDO,'Redo')
        menu.AppendSeparator()
        menu.Append(wx.ID_CUT,"Cu&t" )
        menu.Append(wx.ID_COPY, "Copy")
        menu.Append(wx.ID_PASTE,"&Paste")
        menu.Append(wx.ID_DELETE,"&Delete")
        menu.AppendSeparator()
        menu.Append(wx.ID_SELECTALL,'Select All')
        menu.AppendSeparator()
        menu.Append(4, "RemoveWord")
        
        self.Bind(wx.EVT_MENU, self.OnUndo,id=wx.ID_UNDO)
        self.Bind(wx.EVT_MENU, self.OnRedo,id=wx.ID_REDO)
        self.Bind(wx.EVT_MENU, self.OnCut,id=wx.ID_CUT)
        self.Bind(wx.EVT_MENU, self.OnCopy,id=wx.ID_COPY)
        self.Bind(wx.EVT_MENU, self.OnPaste, id=wx.ID_PASTE)
        self.Bind(wx.EVT_MENU, self.OnDelete, id=wx.ID_DELETE)
        self.Bind(wx.EVT_MENU, self.OnSelectAll, id=wx.ID_SELECTALL)
        self.Bind(wx.EVT_MENU, self.OnRemoveWord,id=4)

        #wx.EVT_MENU(self, wx.ID_ANY, self.OnPopupRemove)
        self.PopupMenu(menu)
        menu.Destroy()
        event.Skip() 
    def OnUndo(self,event):
        self.Undo()
    def OnRedo(self,event):
        self.Redo()
    def OnCut(self,event):
        self.Cut()
    def OnCopy(self,event):
        self.Copy()
    def OnPaste(self,event):
        self.Paste()
    def OnDelete(self,event):
        self.Clear()
    def OnSelectAll(self,event):
        self.SelectAll()
    def OnRemoveWord(self,event):
        print 'RemoveWord Event'
    
    def OnAutoFill(self,event):
        p = self.GetCurrentPos()
        st = self.WordStartPosition(p, 1)
        en = self.WordEndPosition(p, 1)
        self.CurentWord=self.GetTextRange(st,en)
        if p-st>AutoFillStartLen:stc.StyledTextCtrl.AutoCompShow(self,(p-st),self.MyChoices)
 
    
    
    def AddWord(self,WordToAdd):
        if len(WordToAdd) >AutoFillMinWordLen:
            WordInList=False
            for num, colVal in enumerate(choices):
                choice=re.match(WordToAdd,choices[num])
                if choice:
                    WordInList=True
                    break
            else:
                choices.append(WordToAdd)
                choices.sort()
                self.MyChoices=' '.join(choices)
                    
    def OnKeyDown(self,event):
          if event.GetKeyCode() == wx.WXK_SPACE:
              self.AddWord(self.CurentWord)
          event.Skip()


class TestFrame(wx.Frame):

    def __init__(self):
        global MainEditor
        wx.Frame.__init__(self, None, -1, 'Walts Program')
        MainEditor = MySTC(self)

        
if __name__=="__main__":
    app = wx.App(0)
    win = TestFrame()
    win.Show(True)
    app.MainLoop()
