editors/TextViewer.py
branchwxPython4
changeset 3688 c2992796a859
parent 3429 67a4d207bace
parent 3682 c613afdab571
child 3750 f62625418bff
equal deleted inserted replaced
3679:b6bca75bf3fa 3688:c2992796a859
   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)
   219         self.Highlights = []
   218         self.Highlights = []
   220         self.SearchParams = None
   219         self.SearchParams = None
   221         self.SearchResults = None
   220         self.SearchResults = None
   222         self.CurrentFindHighlight = None
   221         self.CurrentFindHighlight = None
   223 
   222 
       
   223     Buffering = "Off"
   224     def OnModification(self, event):
   224     def OnModification(self, event):
   225         if not self.DisableEvents:
   225         if not self.DisableEvents:
   226             mod_type = event.GetModificationType()
   226             mod_type = event.GetModificationType()
   227             if mod_type & wx.stc.STC_MOD_BEFOREINSERT:
   227             if mod_type & wx.stc.STC_MOD_BEFOREINSERT:
   228                 if self.CurrentAction is None:
   228                 if self.CurrentAction is None:
   229                     self.StartBuffering()
   229                     self.Buffering = "ShouldStart"
   230                 elif self.CurrentAction[0] != "Add" or self.CurrentAction[1] != event.GetPosition() - 1:
   230                 elif self.CurrentAction[0] != "Add" or self.CurrentAction[1] != event.GetPosition() - 1:
   231                     self.Controler.EndBuffering()
   231                     self.Buffering = "ShouldRestart"
   232                     self.StartBuffering()
       
   233                 self.CurrentAction = ("Add", event.GetPosition())
   232                 self.CurrentAction = ("Add", event.GetPosition())
   234                 wx.CallAfter(self.RefreshModel)
   233                 self.RefreshModelAfter()
   235             elif mod_type & wx.stc.STC_MOD_BEFOREDELETE:
   234             elif mod_type & wx.stc.STC_MOD_BEFOREDELETE:
   236                 if self.CurrentAction is None:
   235                 if self.CurrentAction is None:
   237                     self.StartBuffering()
   236                     self.Buffering = "ShouldStart"
   238                 elif self.CurrentAction[0] != "Delete" or self.CurrentAction[1] != event.GetPosition() + 1:
   237                 elif self.CurrentAction[0] != "Delete" or self.CurrentAction[1] != event.GetPosition() + 1:
   239                     self.Controler.EndBuffering()
   238                     self.Buffering = "ShouldRestart"
   240                     self.StartBuffering()
       
   241                 self.CurrentAction = ("Delete", event.GetPosition())
   239                 self.CurrentAction = ("Delete", event.GetPosition())
   242                 wx.CallAfter(self.RefreshModel)
   240                 self.RefreshModelAfter()
   243         event.Skip()
   241         event.Skip()
   244 
   242 
   245     def OnDoDrop(self, event):
   243     def OnDoDrop(self, event):
   246         try:
   244         try:
   247             values = eval(event.GetDragText())
   245             values = eval(event.GetDragText())
   385             elif values[1] == "Constant":
   383             elif values[1] == "Constant":
   386                 event.SetDragText(values[0])
   384                 event.SetDragText(values[0])
   387             elif values[3] == self.TagName:
   385             elif values[3] == self.TagName:
   388                 self.ResetBuffer()
   386                 self.ResetBuffer()
   389                 event.SetDragText(values[0])
   387                 event.SetDragText(values[0])
   390                 wx.CallAfter(self.RefreshModel)
   388                 self.RefreshModelAfter()
   391             else:
   389             else:
   392                 message = _("Variable don't belong to this POU!")
   390                 message = _("Variable don't belong to this POU!")
   393             if message is not None:
   391             if message is not None:
   394                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
   392                 dialog = wx.MessageDialog(self, message, _("Error"), wx.OK | wx.ICON_ERROR)
   395                 dialog.ShowModal()
   393                 dialog.ShowModal()
   435         if self.ParentWindow:
   433         if self.ParentWindow:
   436             self.ParentWindow.RefreshTitle()
   434             self.ParentWindow.RefreshTitle()
   437             self.ParentWindow.RefreshFileMenu()
   435             self.ParentWindow.RefreshFileMenu()
   438             self.ParentWindow.RefreshEditMenu()
   436             self.ParentWindow.RefreshEditMenu()
   439 
   437 
       
   438     def EndBuffering(self):
       
   439         self.Controler.EndBuffering()
       
   440 
   440     def ResetBuffer(self):
   441     def ResetBuffer(self):
   441         if self.CurrentAction is not None:
   442         if self.CurrentAction is not None:
   442             self.Controler.EndBuffering()
   443             self.EndBuffering()
   443             self.CurrentAction = None
   444             self.CurrentAction = None
       
   445             self.Buffering == "Off"
   444 
   446 
   445     def GetBufferState(self):
   447     def GetBufferState(self):
   446         if not self.Debug and self.TextSyntax != "ALL":
   448         if not self.Debug and self.TextSyntax != "ALL":
   447             return self.Controler.GetBufferState()
   449             return self.Controler.GetBufferState()
   448         return False, False
   450         return False, False
   838         else:
   840         else:
   839             if self.CurrentFindHighlight is not None:
   841             if self.CurrentFindHighlight is not None:
   840                 self.RemoveHighlight(*self.CurrentFindHighlight)
   842                 self.RemoveHighlight(*self.CurrentFindHighlight)
   841             self.CurrentFindHighlight = None
   843             self.CurrentFindHighlight = None
   842 
   844 
       
   845     pending_model_refresh=False
   843     def RefreshModel(self):
   846     def RefreshModel(self):
       
   847         self.pending_model_refresh=False
   844         self.RefreshJumpList()
   848         self.RefreshJumpList()
   845         self.Colourise(0, -1)
   849         self.Colourise(0, -1)
       
   850 
       
   851         if self.Buffering == "ShouldStart":
       
   852             self.StartBuffering()
       
   853             self.Buffering == "On"
       
   854         elif self.Buffering == "ShouldRestart":
       
   855             self.EndBuffering()
       
   856             self.StartBuffering()
       
   857             self.Buffering == "On"
       
   858 
   846         self.Controler.SetEditedElementText(self.TagName, self.GetText())
   859         self.Controler.SetEditedElementText(self.TagName, self.GetText())
   847         self.ResetSearchResults()
   860         self.ResetSearchResults()
       
   861 
       
   862     def RefreshModelAfter(self):
       
   863         if self.pending_model_refresh:
       
   864             return
       
   865         self.pending_model_refresh=True
       
   866         wx.CallAfter(self.RefreshModel)
   848 
   867 
   849     def OnKeyDown(self, event):
   868     def OnKeyDown(self, event):
   850         key = event.GetKeyCode()
   869         key = event.GetKeyCode()
   851         if self.Controler is not None:
   870         if self.Controler is not None:
   852 
   871