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 |