diff --git a/hyprland_conf.txt b/hyprland_conf.txt index 53bd829..8315215 100644 --- a/hyprland_conf.txt +++ b/hyprland_conf.txt @@ -1,8 +1,13 @@ +# Main window + # 1. Заставляем окно всегда открываться в плавающем режиме -windowrule = match:class ^(Focustimer)$, float 1 - -# 2. Задаем ему начальный размер на уровне оконного менеджера -windowrule = match:class ^(Focustimer)$, size 120 140 - +windowrule = match:title ^(Focus-Timer)$, float 1 +# 2. Жестко задаем ему начальный размер на уровне оконного менеджера +windowrule = match:title ^(Focus-Timer)$, size 120 140 # 3. Прикалываем окно, чтобы оно отображалось на всех воркспейсах -windowrule = match:class ^(Focustimer)$, pin 1 +windowrule = match:title ^(Focus-Timer)$, pin 1 + +# Toplevel window + +windowrule = match:title ^(Statistics)$, float 1 +windowrule = match:title ^(Statistics)$, size 180 200 diff --git a/main.py b/main.py index 2780b27..15d6163 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,7 @@ import tkinter as tk import os from datetime import datetime +from customtkinter import CTkScrollableFrame, CTkLabel STORAGE_PATH = os.path.expanduser("~/.config/focus-timer/data.txt") @@ -56,7 +57,7 @@ def handle_transition(): match current_state: case "FOCUS": current_state = STATE_WORK - seconds_left = 4200 + seconds_left = 42 # 4200 distractions = 0 case "WORK": @@ -74,7 +75,7 @@ def start_button_f(): global current_state, seconds_left, distractions distractions = 0 current_state = STATE_FOCUS - seconds_left = 1200 + seconds_left = 12 # 1200 tick() update_ui() @@ -98,14 +99,13 @@ def break_button_f(): global current_state, seconds_left current_state = STATE_BREAK - seconds_left = 1500 + seconds_left = 15 # 1500 update_timer_label() create_post() update_ui() def complete_task_button_f(): - create_post() break_button_f() def create_post(): @@ -169,12 +169,57 @@ def update_ui(): start_button.config(fg="yellow", activebackground="yellow") start_button.pack(side="bottom", pady="15") +def open_stats_window(event): + st_win = tk.Toplevel() + st_win.title("Statistics") + st_win.configure(background="#17153b") + st_win.geometry("180x200") + st_win.minsize(180, 200) + st_win.maxsize(180, 200) + st_win.resizable(False, False) + + + lines= [] + if os.path.exists(STORAGE_PATH): + with open(STORAGE_PATH, "r", encoding="utf-8") as f: + for line in f: + line = line.strip() + if line and ":" in line: + lines.append(line) + else: + show_problems_label(st_win) + + + if lines: + scroll_frame = CTkScrollableFrame(st_win) + scroll_frame.configure(fg_color="#c8acd6", corner_radius=10) + scroll_frame.pack(fill="both", expand=True, padx=10, pady=15) + with open(STORAGE_PATH, "r", encoding="utf-8") as f: + line_c = 1 + for line in f: + line = line.strip() + if line_c % 2 == 0: + label_c1 = CTkLabel(scroll_frame, text=line, font=("Helvetica", 16), fg_color="#975fb3", text_color="black", corner_radius=15) + label_c1.pack(side="top", fill="x", pady=2, expand=True) + else: + label_c2 = CTkLabel(scroll_frame, text=line, font=("Helvetica", 16), fg_color="#af74cc", text_color="black", corner_radius=15) + label_c2.pack(side="top", fill="x", pady=5, expand=True) + line_c += 1 + else: + show_problems_label(st_win) + + +def show_problems_label(master): + info_label = tk.Label(master, text="No one entries have been\n registered yet.\n Or file does not exist. \n :(", bg="#17153b", fg="#C8ACD6", font=("Helvetica", 16)) + info_label.pack(anchor="center", fill="both", expand=True) + text_label = tk.Label(app, font=("Helvetica", 14, "bold"), bg="#17153b") text_label.pack(side="top", pady="15") timer_label = tk.Label(app, text="hh:mm:ss",fg="#C8ACD6",background="#17153B",font=("Helvetica", 25) , anchor="center") timer_label.pack(expand=True,fill="y") + start_button = tk.Button(app, text="Start.", command=start_button_f, activeforeground="black", background="#17153b", relief="flat", bd="0") distracted_button = tk.Button(app, text="I got distracted.", command=distracted_button_f, fg="red", bg="#17153b", relief="flat", bd="0", activebackground="red", activeforeground="black") @@ -183,5 +228,10 @@ complete_task_button = tk.Button(app, text="Complete the task.", command=complet break_button = tk.Button(app, text="Go break :3", command=break_button_f, fg="orange", bg="#17153b", relief="flat", bd="0", activebackground="orange", activeforeground="black") + +app.bind("", open_stats_window) +app.bind("", open_stats_window) + + update_ui() app.mainloop()