Skip to content

Commit

Permalink
Made it so on district size change grid_width not invalid but the clo…
Browse files Browse the repository at this point in the history
…sest possible, highlight restart button on parameter change, and only highlight play button on start
  • Loading branch information
mazore committed Jan 16, 2021
1 parent bb290a0 commit 83e6987
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 11 deletions.
6 changes: 3 additions & 3 deletions ui/control_panel/buttons.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@
class PlayPauseButton(tk.Button):
def __init__(self, control_panel):
self.root = control_panel.root
super().__init__(control_panel, command=self.play_pause, width=5)
super().__init__(control_panel, bg='yellow', command=self.play_pause, width=5)
self.update_config()

def play_pause(self):
self.config(bg='SystemButtonFace')
if self.root.canvas.running:
self.root.canvas.pause()
else:
self.root.canvas.run()

def update_config(self):
"""Update the text of the button"""
font_suffix = '' if self.root.canvas.running else ' bold'
text = 'Pause' if self.root.canvas.running else 'Play'
self.config(font=self.root.font + font_suffix, text=text)
self.config(text=text)


class RestartButton(tk.Button):
Expand Down
1 change: 1 addition & 0 deletions ui/parameter_panel/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ def set_parameter(self, name, value):
def on_restart(self):
for adjuster in self.adjusters.values():
adjuster.label.config(font=self.root.font)
self.root.control_panel.restart_button.config(bg='SystemButtonFace')
7 changes: 5 additions & 2 deletions ui/parameter_panel/adjusters.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,11 @@ def get_choices(self):
return [districts_per_row * district_width for districts_per_row in range(2, 15)]

def test_invalid(self):
if self.get() not in self.get_choices():
self.set('invalid')
choices = self.get_choices()
current = self.get()
if current not in choices:
closest = min(choices, key=lambda val: abs(val - current))
self.set(closest)


class NumSwapsAdjuster(EntryAdjusterType):
Expand Down
16 changes: 10 additions & 6 deletions ui/parameter_panel/parameter_adjuster_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ def __init__(self, parameter_panel, name, pad_y=0, advanced=False, update_on_cha
self.pad_y = pad_y
self.advanced = advanced
self.update_on_change = update_on_change
self.is_changed = False # if is changed from current simulation parameters

self.var = tk.StringVar(value=str(getattr(parameter_panel.root.parameters, name)))
self.var.trace('w', self.on_var_change)
Expand Down Expand Up @@ -51,17 +52,20 @@ def on_var_change(self, *_):
self.parameter_panel.set_parameter(self.name, value)
else:
self.update_boldness()
if value == 'invalid':
self.label.config(fg='red')
else:
self.label.config(fg='black')
self.label.config(fg='red' if value == 'invalid' else 'black')
self.after_choice(value)

def update_boldness(self):
is_changed = self.get() != getattr(self.parameter_panel.root.parameters, self.name)
font = self.bold_font if is_changed else self.parameter_panel.root.font
self.is_changed = self.get() != getattr(self.parameter_panel.root.parameters, self.name)
font = self.bold_font if self.is_changed else self.parameter_panel.root.font
self.label.config(font=font)

if not hasattr(self.parameter_panel, 'adjusters'):
return
any_changed = any(adjuster.is_changed for adjuster in self.parameter_panel.adjusters.values())
bg = 'SystemButtonFace' if not any_changed else 'yellow'
self.parameter_panel.root.control_panel.restart_button.config(bg=bg)

def after_choice(self, choice):
"""Overridden by subclasses, called after the variable is changed. Typically used to ensure other entered
parameters are valid"""
Expand Down

0 comments on commit 83e6987

Please sign in to comment.