From 1059281a8962dd7529318b529aeda02ca8544722 Mon Sep 17 00:00:00 2001 From: emkael Date: Sun, 7 Jul 2019 21:24:44 +0200 Subject: Tracing dirty state of edited file --- jfr_playoff/gui/__init__.py | 11 +++++++++-- jfr_playoff/gui/frames/__init__.py | 2 +- jfr_playoff/gui/variables.py | 7 +++++-- 3 files changed, 15 insertions(+), 5 deletions(-) (limited to 'jfr_playoff') diff --git a/jfr_playoff/gui/__init__.py b/jfr_playoff/gui/__init__.py index 2a890d1..6f94df2 100644 --- a/jfr_playoff/gui/__init__.py +++ b/jfr_playoff/gui/__init__.py @@ -15,7 +15,8 @@ class PlayoffGUI(tk.Tk): self.newFileIndex = 0 self._title = tk.StringVar() self._title.trace('w', self._setTitle) - self._dirty = False + self._dirty = tk.BooleanVar() + self._dirty.trace('w', self._setTitle) self._filepath = None def run(self): @@ -28,8 +29,12 @@ class PlayoffGUI(tk.Tk): self.openFile(sys.argv[1]) else: self.newFile() + self.bind('<>', self._onFileChange, add='+') self.mainloop() + def _onFileChange(self, *args): + self._dirty.set(True) + def _setValues(self, config): for tab in self.tabs.values(): tab.setValues(config) @@ -42,18 +47,20 @@ class PlayoffGUI(tk.Tk): self.newFileIndex += 1 self._title.set('Nowa drabinka %d' % (self.newFileIndex)) self._resetValues() + self.after(0, self._dirty.set, False) def _setTitle(self, *args): self.title('%s - %s%s' % ( 'TeamyPlayOff', self._title.get(), - '* ' if self._dirty else '' + ' *' if self._dirty.get() else '' )) def openFile(self, filepath): self._filepath = filepath self._title.set(os.path.basename(filepath)) self._setValues(json.load(open(filepath))) + self.after(0, self._dirty.set, False) def getDbConfig(self): return self.tabs['NetworkTab'].getDB() diff --git a/jfr_playoff/gui/frames/__init__.py b/jfr_playoff/gui/frames/__init__.py index e50231d..bef832f 100644 --- a/jfr_playoff/gui/frames/__init__.py +++ b/jfr_playoff/gui/frames/__init__.py @@ -440,7 +440,7 @@ class TraceableText(tk.Text): self._variableLock = True self.delete('1.0', tk.END) self.insert(tk.END, self._variable.get()) - self._varaibleLock = False + self._variableLock = False def _proxy(self, command, *args): cmd = (self._orig, command) + args diff --git a/jfr_playoff/gui/variables.py b/jfr_playoff/gui/variables.py index abb3cc1..8927179 100644 --- a/jfr_playoff/gui/variables.py +++ b/jfr_playoff/gui/variables.py @@ -5,10 +5,13 @@ import tkinter as tk class NotifyVar(tk.Variable): def __init__(self, *args, **kwargs): tk.Variable.__init__(self, *args, **kwargs) - self.trace('w', self._onChange) + self._prevValue = self.get() + self._root.after(0, self.trace, 'w', self._onChange) def _onChange(self, *args): - self._root.event_generate('<>', when='tail') + if self._prevValue != self.get(): + self._root.event_generate('<>', when='tail') + self._prevValue = self.get() class NotifyStringVar(NotifyVar, tk.StringVar): pass -- cgit v1.2.3