Changeset ab10343 in flowtimer
- Timestamp:
- 08/29/24 18:24:29 (9 months ago)
- Branches:
- guix
- Children:
- b4adb9d
- Parents:
- 58e7315
- Location:
- flowtimer
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
flowtimer/Schedule.py
r58e7315 rab10343 17 17 self.blocks = blocks 18 18 self.current_block = blocks[0] 19 self. state = "initial"19 self._state = "initial" 20 20 21 21 @classmethod … … 89 89 }) 90 90 91 def state(self): 92 if self.is_completed(): 93 return "completed" 94 return self._state 95 91 96 def start(self): 92 self. state = "running"97 self._state = "running" 93 98 self.current_block.start() 94 99 95 100 def pause(self): 96 self. state = "paused"101 self._state = "paused" 97 102 98 def running(self):99 return self. state == "running"103 def is_initial(self): 104 return self._state == 'initial' 100 105 101 def paused(self): 102 return self.state == "paused" 106 def is_running(self): 107 return self._state == "running" 108 109 def is_paused(self): 110 return self._state == "paused" 103 111 104 112 def abort(self): 105 113 self.current_block.abort() 106 self. state = "aborted"114 self._state = "aborted" 107 115 108 116 def current_block_is_final(self): … … 110 118 return index == (len(self.blocks) - 1) 111 119 112 def completed(self):120 def is_completed(self): 113 121 if (self.current_block.completed()) and (self.current_block_is_final()): 114 self.state = "completed"115 122 return True 116 123 else: 117 124 return False 118 125 119 def aborted(self):120 return self. state == "aborted"126 def is_aborted(self): 127 return self._state == "aborted" 121 128 122 def terminated(self):123 return (self. aborted() or self.completed())129 def is_terminated(self): 130 return (self.is_aborted() or self.is_completed()) 124 131 125 132 def advance_to_next_block(self): … … 155 162 156 163 def tick(self, ticks): 157 if not self. completed():164 if not self.is_completed(): 158 165 self.current_block.tick(ticks) 159 166 if self.current_block.completed(): 160 167 if self.current_block_is_final(): 161 self. state = "completed"168 self._state = "completed" 162 169 else: 163 170 self.skip() -
flowtimer/configs/colors.json
r58e7315 rab10343 1 1 { 2 2 "color_list": [ 3 { 4 "title": "Completed", 5 "widget": "red", 6 "sequence_label": "red", 7 "center_frame": "red" 8 }, 3 9 { 4 10 "title": "Huddle", -
flowtimer/main.py
r58e7315 rab10343 18 18 self.photo = ImageTk.PhotoImage(file=Path(__file__).parent / 19 19 'resources' / 'flowtimer_startbg_new.png') 20 self.config_state = 'default'21 20 print("Config:", config_file) 22 21 self.schedule = self.load_config(config_file) … … 24 23 self.build_gui() 25 24 if autostart: 26 self. start()25 self.toggle_play_pause() 27 26 28 27 def build_gui(self): … … 42 41 43 42 self.label_headline = tk.Label(self.headline_frame, 44 text=( "Hochintensive Intervallarbeit"),43 text=(self.schedule.current_block.title), 45 44 bg='white', fg='grey', font="serif 20") 46 45 self.label_headline.pack(side='left', fill='both', expand=True) 47 46 48 self.label_config = tk.LabelFrame(self.headline_frame, text="config: ", 47 self.label_config = tk.LabelFrame(self.headline_frame, 48 text=f"config: {self.schedule.title}", 49 49 bg='white', font="serif 12") 50 50 self.label_config.pack(side='right', fill='both', expand=False, … … 85 85 self.quit_button.pack(side='left', fill='both', ipady=20, expand=True) 86 86 87 self.parent.resizable(False, False) 88 87 89 def ticks_left_in_phase(self): 88 90 if self.schedule.current_block.is_sequence(): … … 91 93 return self.schedule.current_block.ticks_left 92 94 93 def color _for_phase(self, a_title):94 return next((d for d in self.color sif d.get('title') == a_title), None)95 def colors_for_phase(self, a_title): 96 return next((d for d in self.color_scheme if d.get('title') == a_title), None) 95 97 96 98 def current_title(self): … … 115 117 return f"{(self.ticks_left_in_phase() // 60)} min left in phase {self.current_title()}" 116 118 119 # FIXME: This logic looks like shit. Refactor it!!! 117 120 def tick(self): 118 if not self.schedule.running(): 121 current_process = self.after(1000, self.tick) 122 if self.schedule.is_terminated(): 123 self.label_sequence.config(text=("\n" + "\nTime over !"), 124 bg=self.colors_for_phase("Completed").get('sequence_label'), 125 fg="white") 126 self.label_duration.config(text="", bg=self.colors_for_phase("Completed").get('duration_label'), 127 fg="white") 128 self.progressbar.pack_forget() 129 self.center_frame.configure(bg=self.colors_for_phase("Completed").get('center_frame')) 130 self.after_cancel(current_process) 131 self.skip_button['state'] = 'disabled' 132 self.skip_button.config(fg="ivory3") 133 self.freeze_button['state'] = 'disabled' 134 self.freeze_button.config(fg="ivory3") 119 135 return 120 self.label_start.pack_forget() 121 current_process = self.after(1000, self.tick) 122 if self.schedule.state == 'initial': 123 self.label_sequence.config(text=("\n" + str(self.schedule.current_block.title) + "...")) 124 self.label_duration.config(text=self.current_time_status()) 125 self.schedule.start() 136 if self.schedule.is_running(): 126 137 self.schedule.tick(1*self.tick_speed) 127 else: 128 if self.schedule.running(): 129 self.schedule.tick(1*self.tick_speed) 130 self.progressbar["value"] = (self.schedule.current_block.initial_ticks - 131 self.schedule.current_block.ticks_left) % 60 132 self.progressbar.update() 133 self.label_duration.config(text=self.current_time_status()) 134 self.label_config_text.config(text=self.current_config()) 135 else: 136 self.label_sequence.config(text=("\n" + "\nTime over !"), bg="red", fg="white") 137 self.label_duration.config(text="", bg="red", fg="white") 138 self.progressbar.pack_forget() 139 self.center_frame.configure(bg="red") 140 self.after_cancel(current_process) 141 self.skip_button['state'] = 'disabled' 142 self.skip_button.config(fg="ivory3") 143 self.freeze_button['state'] = 'disabled' 144 self.freeze_button.config(fg="ivory3") 138 self.progressbar["value"] = (self.schedule.current_block.initial_ticks - 139 self.schedule.current_block.ticks_left) % 60 140 self.progressbar.update() 141 self.label_duration.config(text=self.current_time_status(), font='times 22') 142 self.label_config_text.config(text=self.current_config()) 145 143 146 144 def skip(self): … … 148 146 149 147 def toggle_play_pause(self): 150 if not self.schedule.running(): 148 if self.schedule.is_initial(): 149 self.label_start.pack_forget() 150 self.schedule.start() 151 self.tick() 152 return 153 if not self.schedule.is_running(): 151 154 self.freeze_button.config(relief="raised", fg='black') 152 155 self.label_sequence.config(fg="white") … … 157 160 self.schedule.pause() 158 161 self.freeze_button.config(relief="sunken", fg="red") 159 self.label_sequence.config(text=("\n" + "\n! timer paused !"), fg="red", bg="black") 162 self.label_sequence.config(text=("timer paused !"), fg="red", bg="black", 163 font='times 72') 160 164 self.label_duration.config(text="", bg="black") 161 165 self.center_frame.config(bg="black") … … 190 194 191 195 def select_config(self): 192 self.config_state = 'user'193 196 self.config_files = [("all files", "*.json")] 194 197 self.answer = filedialog.askopenfilename(parent=root, … … 205 208 default=Path(__file__).parent / 'configs' / 'default.json', 206 209 help='use --config /path/to/config_file.json to specify the configuration of the timer') 207 parser.add_argument('--color ', dest='color_file', required=False,210 parser.add_argument('--colors', dest='color_file', required=False, 208 211 default=Path(__file__).parent / 'configs' / 'colors.json') 209 212 args = parser.parse_args()
Note:
See TracChangeset
for help on using the changeset viewer.