diff --git a/logic/application.py b/logic/application.py index f112d24..f234dba 100644 --- a/logic/application.py +++ b/logic/application.py @@ -12,7 +12,7 @@ from PIL import ImageTk, Image from io import BytesIO import webbrowser -from ui.ui import UserInterface, create_main_window +from ui.ui import UserInterface from config.config import AppConfig from utils.language_util import ImportLanguageDialog from ui.file_menu import FileMenu @@ -53,7 +53,8 @@ def __init__(self, root): self.available_languages = {lang.name: lang.alpha2 for lang in iso639.languages} self.server_running = False - self.setup_ui() + #self.setup_ui() + self.bind_events() self.start_server_thread(start=True) @@ -106,29 +107,7 @@ def set_scroll_to_center(self): self.ui.canvas.configure(scrollregion=self.ui.canvas.bbox("all")) self.ui.canvas.yview_moveto(0.1) - def setup_ui(self): - self.language_label = ctk.CTkLabel(self.ui.sidebar_frame, text="Switch Display Language:") - self.language_label.grid(row=4, column=0, padx=10, pady=0, sticky="nw") - - self.language = tk.StringVar(self.root) - self.language.set("Choose") - - self.language_switcher = ctk.CTkOptionMenu(self.ui.sidebar_frame, variable=self.language, state="normal", values=(), width=10) - self.language_switcher.grid(row=5, column=0, padx=10, pady=0, sticky="nwe") - self.language_switcher.configure(values=(), command=lambda choice: self.update_label()) - - self.imported_languages_label = ctk.CTkLabel(self.ui.sidebar_frame, fg_color="transparent", text_color=("gray10", "#DCE4EE"), text="Imported Languages:") - self.imported_languages_label.grid(row=6, column=0, padx=10, pady=10, sticky="w") - - self.server_status_menu_label = ctk.CTkLabel(self.ui.sidebar_frame, fg_color="transparent", font=("", 20), text_color=("gray10", "#DCE4EE"), text=f"Server Status:") - self.server_status_menu_label.grid(row=7, column=0, padx=10, pady=0, sticky="nw") - - self.server_status_label = ctk.CTkLabel(self.ui.sidebar_frame, fg_color="transparent", text_color=("gray10", "#DCE4EE"), text=f"{self.url}") - self.server_status_label.grid(row=8, column=0, padx=10, pady=0, sticky="nw") - - self.server_indicator = tk.Canvas(self.ui.sidebar_frame, width=12, height=12, bg="red", bd=0, highlightthickness=0) - self.server_indicator.grid(row=7, column=0, padx=10, pady=10, sticky="e") - + def bind_events(self): self.root.bind("", self.on_key_press) @@ -143,15 +122,15 @@ def start_server_thread(self, start): server_thread.start() self.server_running = True if self.local_ip == "127.0.0.1": - self.server_status_label.configure(text=f"LOCAL - No network detected") - self.server_indicator.configure(bg="red") + self.ui.server_status_label.configure(text=f"LOCAL - No network detected") + self.ui.server_indicator.configure(bg="red") else: - self.server_status_label.configure(text=f"Live\n http://{self.local_ip}:{self.port_number}") - self.server_indicator.configure(bg="green") + self.ui.server_status_label.configure(text=f"Live\n http://{self.local_ip}:{self.port_number}") + self.ui.server_indicator.configure(bg="green") else: self.server_running = False - self.server_status_label.configure(text=f"Idle") - self.server_indicator.configure(bg="red") + self.ui.server_status_label.configure(text=f"Idle") + self.ui.server_indicator.configure(bg="red") def change_port(self): reserved_ports = [80, 443, 8080, 8443] @@ -159,8 +138,8 @@ def change_port(self): if self.server_running: self.start_server_thread(start=False) self.server_running = False - self.server_status_label.configure(text=f"Idle") - self.server_indicator.configure(bg="red") + self.ui.server_status_label.configure(text=f"Idle") + self.ui.server_indicator.configure(bg="red") while True: new_port = simpledialog.askstring("Change Port", "Enter new port number between 1024 and 65535:", parent=self.root) @@ -174,11 +153,11 @@ def change_port(self): server_thread.start() self.server_running = True if self.local_ip == "127.0.0.1": - self.server_status_label.configure(text=f"LOCAL - No network detected") - self.server_indicator.configure(bg="red") + self.ui.server_status_label.configure(text=f"LOCAL - No network detected") + self.ui.server_indicator.configure(bg="red") else: - self.server_status_label.configure(text=f"Live\n http://{self.local_ip}:{self.port_number}") - self.server_indicator.configure(bg="green") + self.ui.server_status_label.configure(text=f"Live\n http://{self.local_ip}:{self.port_number}") + self.ui.server_indicator.configure(bg="green") break else: tk.messagebox.showerror("Invalid Port", "The selected port is already reserved or invalid.") @@ -244,10 +223,9 @@ def import_additional_translation(self, language_name, language_code): if language_code not in self.language_switcher_values: self.language_switcher_values.append(language_name) self.language_switcher_values.sort() - self.language_switcher.configure(values=tuple(self.language_switcher_values)) - - self.language.set(language_name) - self.update_label() + self.ui.language_switcher.configure(command=lambda choice: self.update_label()) + self.language.set(language_name) + self.update_label() @staticmethod @@ -367,6 +345,10 @@ def update_label(self): self.ui.current_line_label.bind("", lambda event, line=self.current_line: self.set_current_line(line)) self.ui.progress.set(self.current_line / (max(len(self.combined_lines), max(len(lang_lines) for lang_lines in self.additional_languages.values())) - 1)) + + self.ui.server_status_label.configure(text=f"http://{self.local_ip}:{self.port_number}") + self.ui.server_indicator.configure(bg="green") + for i in range(5): prev_index = max(self.current_line - (5-i), 0) diff --git a/requirements.txt b/requirements.txt index 45d9892..ba1de3b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -55,7 +55,6 @@ MouseInfo==0.1.3 networkx==3.2.1 numpy==1.26.3 openai==1.6.1 --e git+ssh://git@github.com/odonald/Opera-Access.git@d4f7fc933ce37067654cff218c7c1fb299fc45d8#egg=Opera_Access outcome==1.3.0.post0 packaging==23.2 pathspec==0.12.1 @@ -73,9 +72,9 @@ Pygments==2.17.2 pyinstaller==6.0.0 pyinstaller-hooks-contrib==2023.9 PyMsgBox==1.0.9 -pyobjc-core==10.2 -pyobjc-framework-Cocoa==10.2 -pyobjc-framework-Quartz==10.2 +#pyobjc-core==10.2 +#pyobjc-framework-Cocoa==10.2 +#pyobjc-framework-Quartz==10.2 pypandoc==1.12 pyparsing==3.1.1 pyperclip==1.8.2 diff --git a/ui/ui.py b/ui/ui.py index b980aca..014b369 100644 --- a/ui/ui.py +++ b/ui/ui.py @@ -20,12 +20,20 @@ def __init__(self, root): self.previous_line_button = self.create_previous_line_button() self.next_line_button = self.create_next_line_button() self.line_number_entry = self.create_line_number_entry() - self.go_button = self.create_go_button(None) # The actual command will be set in Application class - self.website_button = self.create_website_button() # This line remains unchanged - self.show_qr_button = self.create_show_qr_button() # Pass the actual command - self.import_translation_button = self.create_import_translation_button() # This line remains unchanged - self.previous_line_button = self.create_previous_line_button() # This line remains unchanged - self.next_line_button = self.create_next_line_button() # This line remains unchanged + self.go_button = self.create_go_button(None) + self.website_button = self.create_website_button() + self.show_qr_button = self.create_show_qr_button() + self.import_translation_button = self.create_import_translation_button() + self.previous_line_button = self.create_previous_line_button() + self.next_line_button = self.create_next_line_button() + + # New methods added from setup_ui + self.language_label = self.create_language_label() + self.language_switcher = self.create_language_switcher() + self.imported_languages_label = self.create_imported_languages_label() + self.server_status_menu_label = self.create_server_status_menu_label() + self.server_status_label = self.create_server_status_label() + self.server_indicator = self.create_server_indicator() def create_website_button(self): website_button = ctk.CTkButton(self.sidebar_frame, fg_color="transparent", text_color=("gray10", "#DCE4EE"), border_width=2, text="Open Website") @@ -131,6 +139,39 @@ def labels_inner_frame(self): for index, label in enumerate(next_line_labels, start=6): label.grid(row=index, column=0, padx=10, pady=10) return current_line_label, prev_line_labels, next_line_labels + + def create_language_label(self): + language_label = ctk.CTkLabel(self.sidebar_frame, text="Switch Display Language:") + language_label.grid(row=4, column=0, padx=10, pady=0, sticky="nw") + return language_label + + def create_language_switcher(self): + language = tk.StringVar(self.root) + language.set("Choose") + language_switcher = ctk.CTkOptionMenu(self.sidebar_frame, variable=language, state="normal", values=(), width=10) + language_switcher.grid(row=5, column=0, padx=10, pady=0, sticky="nwe") + language_switcher.configure(values=(), command=lambda choice: None) # Update command later + return language_switcher + + def create_imported_languages_label(self): + imported_languages_label = ctk.CTkLabel(self.sidebar_frame, fg_color="transparent", text_color=("gray10", "#DCE4EE"), text="Imported Languages:") + imported_languages_label.grid(row=6, column=0, padx=10, pady=10, sticky="w") + return imported_languages_label + + def create_server_status_menu_label(self): + server_status_menu_label = ctk.CTkLabel(self.sidebar_frame, fg_color="transparent", font=("", 20), text_color=("gray10", "#DCE4EE"), text=f"Server Status:") + server_status_menu_label.grid(row=7, column=0, padx=10, pady=0, sticky="nw") + return server_status_menu_label + + def create_server_status_label(self): + server_status_label = ctk.CTkLabel(self.sidebar_frame, fg_color="transparent", text_color=("gray10", "#DCE4EE"), text=f"") + server_status_label.grid(row=8, column=0, padx=10, pady=0, sticky="nw") + return server_status_label + + def create_server_indicator(self): + server_indicator = tk.Canvas(self.sidebar_frame, width=12, height=12, bg="red", bd=0, highlightthickness=0) + server_indicator.grid(row=7, column=0, padx=10, pady=10, sticky="e") + return server_indicator class Events: def change_appearance_mode_event(new_appearance_mode: str):