editors/TextViewer.py
changeset 3682 c613afdab571
parent 3319 e6c758e41f82
child 3688 c2992796a859
equal deleted inserted replaced
3681:3da9a6e6fb19 3682:c613afdab571
   128         # Indentation size
   128         # Indentation size
   129         self.Editor.SetTabWidth(2)
   129         self.Editor.SetTabWidth(2)
   130         self.Editor.SetUseTabs(0)
   130         self.Editor.SetUseTabs(0)
   131 
   131 
   132         self.Editor.SetModEventMask(wx.stc.STC_MOD_BEFOREINSERT |
   132         self.Editor.SetModEventMask(wx.stc.STC_MOD_BEFOREINSERT |
   133                                     wx.stc.STC_MOD_BEFOREDELETE |
   133                                     wx.stc.STC_MOD_BEFOREDELETE)
   134                                     wx.stc.STC_PERFORMED_USER)
       
   135 
   134 
   136         self.Bind(wx.stc.EVT_STC_STYLENEEDED, self.OnStyleNeeded, self.Editor)
   135         self.Bind(wx.stc.EVT_STC_STYLENEEDED, self.OnStyleNeeded, self.Editor)
   137         self.Editor.Bind(wx.stc.EVT_STC_MARGINCLICK, self.OnMarginClick)
   136         self.Editor.Bind(wx.stc.EVT_STC_MARGINCLICK, self.OnMarginClick)
   138         self.Editor.Bind(wx.stc.EVT_STC_UPDATEUI, self.OnUpdateUI)
   137         self.Editor.Bind(wx.stc.EVT_STC_UPDATEUI, self.OnUpdateUI)
   139         self.Editor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
   138         self.Editor.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
   211         self.Highlights = []
   210         self.Highlights = []
   212         self.SearchParams = None
   211         self.SearchParams = None
   213         self.SearchResults = None
   212         self.SearchResults = None
   214         self.CurrentFindHighlight = None
   213         self.CurrentFindHighlight = None
   215 
   214 
       
   215     Buffering = "Off"
   216     def OnModification(self, event):
   216     def OnModification(self, event):
   217         if not self.DisableEvents:
   217         if not self.DisableEvents:
   218             mod_type = event.GetModificationType()
   218             mod_type = event.GetModificationType()
   219             if mod_type & wx.stc.STC_MOD_BEFOREINSERT:
   219             if mod_type & wx.stc.STC_MOD_BEFOREINSERT:
   220                 if self.CurrentAction is None:
   220                 if self.CurrentAction is None:
   221                     self.StartBuffering()
   221                     self.Buffering = "ShouldStart"
   222                 elif self.CurrentAction[0] != "Add" or self.CurrentAction[1] != event.GetPosition() - 1:
   222                 elif self.CurrentAction[0] != "Add" or self.CurrentAction[1] != event.GetPosition() - 1:
   223                     self.Controler.EndBuffering()
   223                     self.Buffering = "ShouldRestart"
   224                     self.StartBuffering()
       
   225                 self.CurrentAction = ("Add", event.GetPosition())
   224                 self.CurrentAction = ("Add", event.GetPosition())
   226                 wx.CallAfter(self.RefreshModel)
   225                 self.RefreshModelAfter()
   227             elif mod_type & wx.stc.STC_MOD_BEFOREDELETE:
   226             elif mod_type & wx.stc.STC_MOD_BEFOREDELETE:
   228                 if self.CurrentAction is None:
   227                 if self.CurrentAction is None:
   229                     self.StartBuffering()
   228                     self.Buffering = "ShouldStart"
   230                 elif self.CurrentAction[0] != "Delete" or self.CurrentAction[1] != event.GetPosition() + 1:
   229                 elif self.CurrentAction[0] != "Delete" or self.CurrentAction[1] != event.GetPosition() + 1:
   231                     self.Controler.EndBuffering()
   230                     self.Buffering = "ShouldRestart"
   232                     self.StartBuffering()
       
   233                 self.CurrentAction = ("Delete", event.GetPosition())
   231                 self.CurrentAction = ("Delete", event.GetPosition())
   234                 wx.CallAfter(self.RefreshModel)
   232                 self.RefreshModelAfter()
   235         event.Skip()
   233         event.Skip()
   236 
   234 
   237     def OnDoDrop(self, event):
   235     def OnDoDrop(self, event):
   238         try:
   236         try:
   239             values = eval(event.GetDragText())
   237             values = eval(event.GetDragText())
   377             elif values[1] == "Constant":
   375             elif values[1] == "Constant":
   378                 event.SetDragText(values[0])
   376                 event.SetDragText(values[0])
   379             elif values[3] == self.TagName:
   377             elif values[3] == self.TagName:
   380                 self.ResetBuffer()
   378                 self.ResetBuffer()
   381                 event.SetDragText(values[0])
   379                 event.SetDragText(values[0])
   382                 wx.CallAfter(self.RefreshModel)
   380                 self.RefreshModelAfter()
   383             else:
   381             else:
   384                 message = _("Variable don't belong to this POU!")
   382                 message = _("Variable don't belong to this POU!")
   385             if message is not None:
   383             if message is not None:
   386                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
   384                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
   387                 dialog.ShowModal()
   385                 dialog.ShowModal()
   427         if self.ParentWindow:
   425         if self.ParentWindow:
   428             self.ParentWindow.RefreshTitle()
   426             self.ParentWindow.RefreshTitle()
   429             self.ParentWindow.RefreshFileMenu()
   427             self.ParentWindow.RefreshFileMenu()
   430             self.ParentWindow.RefreshEditMenu()
   428             self.ParentWindow.RefreshEditMenu()
   431 
   429 
       
   430     def EndBuffering(self):
       
   431         self.Controler.EndBuffering()
       
   432 
   432     def ResetBuffer(self):
   433     def ResetBuffer(self):
   433         if self.CurrentAction is not None:
   434         if self.CurrentAction is not None:
   434             self.Controler.EndBuffering()
   435             self.EndBuffering()
   435             self.CurrentAction = None
   436             self.CurrentAction = None
       
   437             self.Buffering == "Off"
   436 
   438 
   437     def GetBufferState(self):
   439     def GetBufferState(self):
   438         if not self.Debug and self.TextSyntax != "ALL":
   440         if not self.Debug and self.TextSyntax != "ALL":
   439             return self.Controler.GetBufferState()
   441             return self.Controler.GetBufferState()
   440         return False, False
   442         return False, False
   832         else:
   834         else:
   833             if self.CurrentFindHighlight is not None:
   835             if self.CurrentFindHighlight is not None:
   834                 self.RemoveHighlight(*self.CurrentFindHighlight)
   836                 self.RemoveHighlight(*self.CurrentFindHighlight)
   835             self.CurrentFindHighlight = None
   837             self.CurrentFindHighlight = None
   836 
   838 
       
   839     pending_model_refresh=False
   837     def RefreshModel(self):
   840     def RefreshModel(self):
       
   841         self.pending_model_refresh=False
   838         self.RefreshJumpList()
   842         self.RefreshJumpList()
   839         self.Colourise(0, -1)
   843         self.Colourise(0, -1)
       
   844 
       
   845         if self.Buffering == "ShouldStart":
       
   846             self.StartBuffering()
       
   847             self.Buffering == "On"
       
   848         elif self.Buffering == "ShouldRestart":
       
   849             self.EndBuffering()
       
   850             self.StartBuffering()
       
   851             self.Buffering == "On"
       
   852 
   840         self.Controler.SetEditedElementText(self.TagName, self.GetText())
   853         self.Controler.SetEditedElementText(self.TagName, self.GetText())
   841         self.ResetSearchResults()
   854         self.ResetSearchResults()
       
   855 
       
   856     def RefreshModelAfter(self):
       
   857         if self.pending_model_refresh:
       
   858             return
       
   859         self.pending_model_refresh=True
       
   860         wx.CallAfter(self.RefreshModel)
   842 
   861 
   843     def OnKeyDown(self, event):
   862     def OnKeyDown(self, event):
   844         key = event.GetKeyCode()
   863         key = event.GetKeyCode()
   845         if self.Controler is not None:
   864         if self.Controler is not None:
   846 
   865