Skip to content
This repository was archived by the owner on Aug 10, 2024. It is now read-only.

Commit b8c4a05

Browse files
committed
v0.3.0 Resolve #8
1 parent b84d28a commit b8c4a05

File tree

3 files changed

+31
-10
lines changed

3 files changed

+31
-10
lines changed

src/class_form.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,23 @@ def handle_event(self, event: Message) -> None:
106106
lesson.delay,
107107
next_lesson.prepare - lesson.finish
108108
)
109+
self.main_window.class_advance_label['text'] = "下课"
109110
elif event[0] == MessageEnum.ClassAdvance:
110-
self.set_windows_topmost(False)
111-
self.state.lesson_state = LessonState.AtClass
112-
if self.state.current_lesson > 0:
113-
self.main_window.class_labels[
114-
self.state.current_lesson - 1]['fg'] = self.state.color_theme.fg
115-
self.main_window.class_labels[self.state.current_lesson]['fg'] = self.state.color_theme.hint
111+
if event[1] == 'on':
112+
self.set_windows_topmost(False)
113+
self.state.lesson_state = LessonState.AtClass
114+
if self.state.current_lesson > 0:
115+
self.main_window.class_labels[
116+
self.state.current_lesson - 1]['fg'] = self.state.color_theme.fg
117+
self.main_window.class_labels[self.state.current_lesson]['fg'] = self.state.color_theme.hint
118+
self.main_window.class_advance_label['text'] = "下课"
119+
else:
120+
self.state.current_lesson += 1
121+
if self.state.current_lesson < len(self.state.lessons):
122+
self.state.lesson_state = LessonState.Break
123+
else:
124+
self.state.lesson_state = LessonState.AfterSchool
125+
self.main_window.class_advance_label['text'] = "上课"
116126

117127
else:
118128
assert False, event # unreachable
@@ -126,8 +136,10 @@ def handle_poll(self, event: PollResult, update: bool) -> bool:
126136
return True
127137
elif event[0] == PollEnum.ClassBegin:
128138
self.set_windows_topmost(False)
139+
self.main_window.class_advance_label['text'] = "下课"
129140
elif event[0] == PollEnum.ClassFinish:
130141
self.set_windows_topmost(True)
142+
self.main_window.class_advance_label['text'] = "上课"
131143
elif event[0] == PollEnum.ClassPrepare:
132144
if update:
133145
self.main_window.bell()
@@ -171,11 +183,12 @@ def poll_update(self):
171183
self.format_minutes(last, min(MIN_POINT, total / 2)), total
172184
)
173185
current_lesson = self.state.current_lesson
186+
pass_ratio = max(min(last / total, 1), 0)
174187
if current_lesson > 0:
175188
self.main_window.class_labels[current_lesson]['fg'] = self.state.color_theme.gradient(
176-
last / total / 2)
189+
pass_ratio / 2)
177190
self.main_window.class_labels[
178-
current_lesson - 1]['fg'] = self.state.color_theme.gradient(1 - last / total / 2)
191+
current_lesson - 1]['fg'] = self.state.color_theme.gradient(1 - pass_ratio / 2)
179192
elif self.state.lesson_state == LessonState.BeforeSchool:
180193
first_lesson = self.state.i_lesson(0)
181194
text = "{}".format(self.format_minutes(self.minute(

src/states.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class MessageEnum(Enum):
2828

2929
Message = Union[
3030
tuple[Literal[MessageEnum.ShutDown]],
31-
tuple[Literal[MessageEnum.ClassAdvance]],
31+
tuple[Literal[MessageEnum.ClassAdvance], Union[Literal['on'], Literal['off']]],
3232
tuple[Literal[MessageEnum.HideTemporarily]],
3333
tuple[Literal[MessageEnum.Resize], int]
3434
]

src/windows.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ def __init__(self, state: State) -> None:
128128
self.weekday_label = ClickableLabel(
129129
self, "", self.st.font, self.change_weekday, state)
130130
self.class_labels: list[Label] = []
131+
self.class_advance_label: Label = Label(self)
131132

132133
def load(self):
133134
"""(Re)Load the window. Generate and place labels and buttons on the window."""
@@ -179,6 +180,8 @@ def place(w: Widget):
179180
text, func, color = btn
180181
button = ClickableLabel(self, text, small_font, func, self.st)
181182
button['fg'] = color
183+
if text == "上课":
184+
self.class_advance_label = button
182185
if i % 2 == 0:
183186
button.place(x=x, y=padding_y)
184187
else:
@@ -218,7 +221,12 @@ def class_advance(self, _: Any) -> None:
218221
name = self.st.i_lesson(current_lesson).name
219222
hint = f"此操作将会提前进入下一节课: {name}。确定吗?"
220223
if messagebox.askokcancel("操作确认", hint): # type: ignore
221-
self.st.queue.put((MessageEnum.ClassAdvance, ))
224+
self.st.queue.put((MessageEnum.ClassAdvance, 'on'))
225+
elif lesson_state in [LessonState.AtClass]:
226+
name = self.st.i_lesson(current_lesson).name
227+
hint = f"此操作会提前下课 (本节为 {name})。确定吗?"
228+
if messagebox.askokcancel("操作确认", hint): # type: ignore
229+
self.st.queue.put((MessageEnum.ClassAdvance, 'off'))
222230
else:
223231
messagebox.showinfo("提示", HINT) # type: ignore
224232

0 commit comments

Comments
 (0)