Skip to content

Commit

Permalink
Automatic resizing of results table
Browse files Browse the repository at this point in the history
- Results table now can be automatically resized every time the rows
setting is changed and saved.
- Will only save to JSON file if settings are saved.
  • Loading branch information
macph committed Nov 28, 2016
1 parent e415434 commit 4834695
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 17 deletions.
42 changes: 29 additions & 13 deletions ec/tk.py
Expand Up @@ -62,7 +62,7 @@ def __init__(self, parent, **kwargs):

self.settings, self.setdialog, self.message = (None,) * 3
self.exists = True
self.load_settings(self.file, self.default_settings)
self.load_settings()

self._kph = None
self._method = tk.StringVar()
Expand Down Expand Up @@ -144,25 +144,25 @@ def body(self):
self.result = Result(self)
self.result.grid(row=5, column=0, columnspan=5)

def load_settings(self, filename, defaults):
def load_settings(self):
""" Loads settings from a JSON file. If no setttings are found, will
use predefined settings instead.
"""
try:
with open(filename, 'r') as jf:
with open(self.file, 'r') as jf:
settings = json.load(jf)
except FileNotFoundError:
settings = defaults
settings = self.default_settings
self.exists = False
self.message = ('Settings file not found. The default options '
'have been selected.')
except json.JSONDecodeError:
settings = defaults
settings = self.default_settings
self.message = ('The settings file cannot be loaded. The default '
'options have been selected.')

if settings.keys() != self.default_settings.keys():
self.settings = defaults
self.settings = self.default_settings
self.message = ('The settings has the wrong keys. Try resaving the'
' file. The default options have been selected.')
else:
Expand All @@ -177,6 +177,19 @@ def open_settings_dialog(self, event=None):
except AttributeError:
self.setdialog = SettingsDialog(self, self.parent)

def save_settings(self):
""" Saves settings to a JSON file. If the settings are the same no
action is taken.
"""
with open(self.file, 'r') as jf:
old_settings = json.load(jf)
if old_settings == self.settings:
# Settings same; no need to save
return
# Else:
with open(self.file, 'w') as jf:
json.dump(self.settings, jf, indent=4, sort_keys=True)

def refresh_method(self, event=None):
""" Command to refresh method description and data entries depending
on which method was selected.
Expand Down Expand Up @@ -369,10 +382,6 @@ def load_settings(self):
for k, v in self.temp_settings.items():
v.set(self.parent.settings.get(k, self.parent.default_settings[k]))

def save_settings(self):
for k, v in self.temp_settings.items():
self.parent.settings[k] = v.get()

def body(self):
self.container.columnconfigure(2, pad=text_length(1))
for i in range(6):
Expand Down Expand Up @@ -419,9 +428,12 @@ def body(self):
).grid(row=5, column=2, sticky=tk.E)

def save(self, event=None):
self.save_settings()
with open(self.parent.file, 'w') as jf:
json.dump(self.parent.settings, jf, indent=4)
for k, v in self.temp_settings.items():
self.parent.settings[k] = v.get()
# Sets results table to new value of rows.
self.parent.result.refresh_rows(
self.parent.settings.get('results rows', 5))
self.parent.save_settings()
self.withdraw()

def move(self, offset=30):
Expand Down Expand Up @@ -753,6 +765,10 @@ def create_table(self):
tv.grid(sticky=(tk.N, tk.S, tk.W, tk.E))
self.treeview = tv

def refresh_rows(self, rows, event=None):
if self.treeview.cget('height') != rows:
self.treeview.config(height=rows)

def load_table(self, data):
""" Loads table using data (list of tuples). """
for sec in data:
Expand Down
2 changes: 1 addition & 1 deletion ec/version.py
@@ -1 +1 @@
__version__ = '0.8.4'
__version__ = '0.8.5'
6 changes: 3 additions & 3 deletions ec_settings.json
@@ -1,6 +1,6 @@
{
"speed units": "mph",
"split static curve": true,
"decimal places": 2,
"results rows": 6,
"decimal places": 2
"speed units": "mph",
"split static curve": true
}

0 comments on commit 4834695

Please sign in to comment.