From f6a5c15eacf023e0e6d27afc54304ddb5022ec4a Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Thu, 30 Oct 2025 00:32:21 -0300 Subject: [PATCH] Add TUI integration and refactor setup logic - Introduced `RichInterface` to support Textual User Interface (TUI) functionality. - Enhanced `Application` class to initialize and configure TUI based on arguments. - Added `ui` module with a base `UIInterface` and `RichInterface` implementation. - Updated argument parsing logic to handle TUI-specific options. --- src/metar_navigate/application.py | 18 +++++++++++++++--- src/metar_navigate/ui/__init__.py | 3 +++ src/metar_navigate/ui/ui.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/metar_navigate/ui/__init__.py create mode 100644 src/metar_navigate/ui/ui.py diff --git a/src/metar_navigate/application.py b/src/metar_navigate/application.py index 0ea0464..2dfcfd3 100644 --- a/src/metar_navigate/application.py +++ b/src/metar_navigate/application.py @@ -2,6 +2,7 @@ import argparse import sys import rich +from metar_navigate.ui import RichInterface from metar_navigate.utils import ConfigManager class Application: @@ -9,14 +10,25 @@ class Application: self.parser = None self.args = None self.config = ConfigManager() + self.ui = None - - def setup(self): - self._validate_args() + def setup(self) -> None: if self.config.read_config() is None: rich.print("[bold red]No config file found. Please run metarNavigate --configure[/bold red] ") + self._validate_args() + + if self.args.no_tui: + self.ui = RichInterface() + if self.args.configure: + self.ui.setup(configure=True) + if self.args.detailed: + self.ui.setup(detailed=True) + + + + def _validate_args(self): self.parser = argparse.ArgumentParser() self.parser.add_argument("--no-tui", action="store_true", help="disables the TUI") diff --git a/src/metar_navigate/ui/__init__.py b/src/metar_navigate/ui/__init__.py new file mode 100644 index 0000000..7f15867 --- /dev/null +++ b/src/metar_navigate/ui/__init__.py @@ -0,0 +1,3 @@ +from .ui import RichInterface + +__all__ = ["RichInterface"] \ No newline at end of file diff --git a/src/metar_navigate/ui/ui.py b/src/metar_navigate/ui/ui.py new file mode 100644 index 0000000..f6ce152 --- /dev/null +++ b/src/metar_navigate/ui/ui.py @@ -0,0 +1,30 @@ +from abc import ABC, abstractmethod + +from rich import Console + + +class UIInterface(ABC): + + @abstractmethod + def setup(self): + pass + @abstractmethod + def run(self): + pass + + +class RichInterface(UIInterface): + def __init__(self): + super().__init__() + self.console = Console() + self.console.show_cursor(False) + self.mode = None + + def setup(self,**kwargs): + for key, value in kwargs.items(): + if key == "configures" and value == True: + self.mode = "configure" + else: + self.mode = "run" + def run(self): + pass \ No newline at end of file