diff --git a/controller/HomeController.py b/controller/HomeController.py index 40f0d59..65fca5f 100644 --- a/controller/HomeController.py +++ b/controller/HomeController.py @@ -26,9 +26,13 @@ class HomeController: :controller: -> The main application cpntroller. :webpic: -> The webpicdownloader instance. """ + # Setub variables self.__main_controller = controller self.__webpic = webpic + # Subscribe to events + controller.subscribe_to_quite_event(self.on_quit) + # START View methods def set_view(self, view) -> None: """ @@ -49,10 +53,7 @@ class HomeController: :frame: -> The frame we want to launch. """ - #self.__main_controller.change_frame(frame) - self.__view.add_log("Salut comment vas tu ? 1") - self.__view.add_log("Salut comment vas tu ? 2") - self.__view.show_success_message("Super tu as réussi la quête !") + self.__main_controller.change_frame(frame) def on_download_requested(self, url: str, name: str) -> None: """ @@ -72,11 +73,16 @@ class HomeController: # Verify variable and start AsyncTask if url.strip() and name.strip() : - AsyncTask(download_task).start() + AsyncTask(download_task) else: self.__view.show_error_message("Opss, the url or folder name are not valid!") # END View events # START Controller methods - - # END Controller methods + def on_quit(self) -> None: + """ + [event function for controller] + => Call this event when a request to exit is thrown. + """ + print("Quit... homecontroller") + # END Controller methods \ No newline at end of file diff --git a/controller/MainController.py b/controller/MainController.py index d35a61a..5c8f6b7 100644 --- a/controller/MainController.py +++ b/controller/MainController.py @@ -12,6 +12,7 @@ class MainController: # Variables __config: dict = None __view = None + __quite_event_subscribers: list = None # Constructor def __init__(self, config: dict) -> None: @@ -20,7 +21,9 @@ class MainController: :config: -> The application configuration (a dictionary). """ + # Setup variables self.__config = config + self.__quite_event_subscribers = [] # START View methods def set_view(self, view) -> None: @@ -38,14 +41,16 @@ class MainController: => Event launch when you ask to open the current folder. """ # TODO on_open_folder - pass + print("on_open_folder") # TODO remove def on_quite(self) -> None: """ [event function for view] => Event launch when you ask to quit the program. """ - print("You asked to quit...") # TODO remove + for callback in self.__quite_event_subscribers: + callback() + print("on_quite") # TODO remove self.__view.close_window() # End the program def on_check_for_update(self) -> None: @@ -62,7 +67,7 @@ class MainController: => Event launched when a request for more information arise. """ # TODO on_about - pass + print("on_about") # END View methods # START Controller methods @@ -87,3 +92,9 @@ class MainController: else: raise ValueError("Unable to find a configuration with this name") # END Controller methods + + # START Controller events + def subscribe_to_quite_event(self, callback) -> None: + # TODO + self.__quite_event_subscribers.append(callback) + # END Controller events diff --git a/util/AsyncTask.py b/util/AsyncTask.py index c843da1..120b50b 100644 --- a/util/AsyncTask.py +++ b/util/AsyncTask.py @@ -14,6 +14,7 @@ class AsyncTask(threading.Thread): @since 2022-09-01 """ # Variables + __stop = None __callback = None __args: list = None @@ -30,6 +31,7 @@ class AsyncTask(threading.Thread): :args: -> Argument to pass to the function when executing it. """ super().__init__() + self.__stop = threading.Event() self.__callback = callback self.__args = args @@ -37,4 +39,8 @@ class AsyncTask(threading.Thread): """ [!] : This function should not be used! Start the task with {AsyncTask.start()}! """ - self.__callback(*self.__args) \ No newline at end of file + self.__callback(*self.__args) + + def stop(self) -> None: + # TODO + self.__stop.set() \ No newline at end of file diff --git a/view/HomeView.py b/view/HomeView.py index 1fd2904..a0df3d1 100644 --- a/view/HomeView.py +++ b/view/HomeView.py @@ -2,7 +2,6 @@ import tkinter as tk import tkinter.font as tfont from tkinter import ttk from tkinter import scrolledtext as tst -from controller.Frames import Frames from controller.HomeController import HomeController class HomeView(ttk.Frame):