@@ -279,6 +279,9 @@ def format_text(self, text):
279279 def mark_data_dirty (self ):
280280 self ._data .mark_dirty ()
281281
282+ def mark_data_pristine (self ):
283+ self ._data .unmark_dirty ()
284+
282285 def _create_target (self ):
283286 data = self ._data .data
284287 target_class = type (data )
@@ -313,7 +316,7 @@ def __init__(self, parent, title, data_validator):
313316 'txt number of spaces' , 4 )
314317 self ._create_ui (title )
315318 self ._data = None
316- self ._dirty = False
319+ self ._dirty = 0 # 0 is False and 1 is True, when changed on this editor
317320 self ._position = None
318321 self ._showing_list = False
319322 self ._tab_open = None
@@ -606,13 +609,14 @@ def write_ident(self):
606609 self ._editor .WriteText (spaces )
607610
608611 def reset (self ):
609- self ._dirty = False
612+ self ._dirty = 0
610613
611614 def save (self , * args ):
612615 self .store_position ()
613616 if self .dirty and not self ._data_validator .validate_and_update (
614617 self ._data , self ._editor .utf8_text ):
615618 return False
619+ self .reset ()
616620 self .GetFocus (None )
617621 return True
618622
@@ -621,9 +625,11 @@ def delete(self):
621625 if self ._editor .GetSelectionStart () == self ._editor .GetSelectionEnd ():
622626 self ._editor .CharRight ()
623627 self ._editor .DeleteBack ()
628+ self ._mark_file_dirty (self ._editor .GetModify ())
624629
625630 def cut (self ):
626631 self ._editor .Cut ()
632+ self ._mark_file_dirty (self ._editor .GetModify ())
627633
628634 def copy (self ):
629635 self ._editor .Copy ()
@@ -634,17 +640,20 @@ def paste(self):
634640 self ._editor .Paste ()
635641 elif focus == self ._search_field :
636642 self ._search_field .Paste ()
643+ self ._mark_file_dirty (self ._editor .GetModify ())
637644
638645 def select_all (self ):
639646 self ._editor .SelectAll ()
640647
641648 def undo (self ):
642649 self ._editor .Undo ()
643650 self .store_position ()
651+ self ._mark_file_dirty (self ._editor .GetModify ())
644652
645653 def redo (self ):
646654 self ._editor .Redo ()
647655 self .store_position ()
656+ self ._mark_file_dirty (self ._editor .GetModify ())
648657
649658 def remove_and_store_state (self ):
650659 if self ._editor :
@@ -685,9 +694,8 @@ def _revert(self):
685694 def OnEditorKey (self , event ):
686695 if not self .is_focused (): # DEBUG was typing text when at Grid Editor
687696 return
688- keycode = event .GetKeyCode ()
689- if (keycode >= ord (' ' )) and not self .dirty and self ._editor .GetModify ():
690- self ._mark_file_dirty ()
697+ # DEBUG keycode = event.GetKeyCode(); if (keycode >= ord(' ')) and
698+ self ._mark_file_dirty (self ._editor .GetModify ())
691699 event .Skip ()
692700
693701 def OnKeyDown (self , event ):
@@ -828,10 +836,14 @@ def OnSettingsChanged(self, data):
828836 if setting == 'txt number of spaces' :
829837 self ._tab_size = self ._parent ._app .settings .get ('txt number of spaces' , 4 )
830838
831- def _mark_file_dirty (self ):
839+ def _mark_file_dirty (self , dirty = True ):
832840 if self ._data :
833- self ._dirty = True
834- self ._data .mark_data_dirty ()
841+ if dirty :
842+ self ._data .mark_data_dirty ()
843+ self ._dirty = 1
844+ elif self ._dirty == 1 :
845+ self ._data .mark_data_pristine ()
846+ self ._dirty = 0
835847
836848
837849class RobotDataEditor (stc .StyledTextCtrl ):
0 commit comments