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 |