From 8c58f0149026ecfa6887b079bfa02333db664c79 Mon Sep 17 00:00:00 2001 From: Sudo-Ivan Date: Thu, 29 May 2025 15:39:20 -0500 Subject: [PATCH] cleanup and improve UI --- ren_browser/ui/ui.py | 59 ++++++++++---------------------------------- 1 file changed, 13 insertions(+), 46 deletions(-) diff --git a/ren_browser/ui/ui.py b/ren_browser/ui/ui.py index e9fda85..0625d8c 100644 --- a/ren_browser/ui/ui.py +++ b/ren_browser/ui/ui.py @@ -11,34 +11,25 @@ from ren_browser.tabs.tabs import TabsManager def build_ui(page: Page): import ren_browser.app as app_module - # Page properties - page.title = "Ren Browser" page.theme_mode = ft.ThemeMode.DARK - page.appbar = ft.AppBar(title=ft.Text("Ren Browser")) + page.appbar = ft.AppBar() page.padding = 20 - # Maximize window for wide screens page.window.maximized = True - # Initialize page fetcher and announce service page_fetcher = PageFetcher() - # Sidebar announces list in a scrollable ListView within a NavigationDrawer announce_list = ft.ListView(expand=True, spacing=1) def update_announces(ann_list): announce_list.controls.clear() for ann in ann_list: label = ann.display_name or ann.destination_hash - # Use display_name for tab title, fallback to "Anonymous"; set URL bar to full path def on_click_ann(e, dest=ann.destination_hash, disp=ann.display_name): title = disp or "Anonymous" - # Full URL including page path full_url = f"{dest}:/page/index.mu" placeholder = render_plaintext(f"Fetching content for {full_url}") tab_manager._add_tab_internal(title, placeholder) idx = len(tab_manager.manager.tabs) - 1 - # Set URL bar to full URL tab = tab_manager.manager.tabs[idx] tab["url_field"].value = full_url - # Select the new tab and refresh UI tab_manager.select_tab(idx) page.update() def fetch_and_update(): @@ -49,18 +40,15 @@ def build_ui(page: Page): import ren_browser.app as app_module app_module.log_error(str(ex)) result = f"Error: {ex}" - # Skip update if tab has been closed or index out of range try: tab = tab_manager.manager.tabs[idx] except IndexError: return - # Use micron renderer for .mu pages, fallback to plaintext if req.page_path.endswith(".mu"): new_control = render_micron(result) else: new_control = render_plaintext(result) tab["content_control"] = new_control - # Replace the content control in the tab's column tab["content"].controls[0] = new_control if tab_manager.manager.index == idx: tab_manager.content_container.content = tab["content"] @@ -69,24 +57,20 @@ def build_ui(page: Page): announce_list.controls.append(ft.TextButton(label, on_click=on_click_ann)) page.update() AnnounceService(update_callback=update_announces) - # Make sidebar collapsible via drawer page.drawer = ft.NavigationDrawer( controls=[ - ft.Text("Announcements", weight=ft.FontWeight.BOLD), + ft.Text("Announcements", weight=ft.FontWeight.BOLD, text_align=ft.TextAlign.CENTER, expand=True), ft.Divider(), announce_list, ], ) - # Add hamburger button to toggle drawer page.appbar.leading = ft.IconButton( ft.Icons.MENU, tooltip="Toggle sidebar", on_click=lambda e: (setattr(page.drawer, 'open', not page.drawer.open), page.update()), ) - # Dynamic tabs manager for pages tab_manager = TabsManager(page) - # Add Settings button using external settings module from ren_browser.ui.settings import open_settings_tab page.appbar.actions = [ft.IconButton(ft.Icons.SETTINGS, tooltip="Settings", on_click=lambda e: open_settings_tab(page, tab_manager))] Shortcuts(page, tab_manager) @@ -95,6 +79,15 @@ def build_ui(page: Page): tab_manager.manager.tabs[tab_manager.manager.index]["url_field"], tab_manager.manager.tabs[tab_manager.manager.index]["go_btn"], ], + expand=True, + spacing=4, + vertical_alignment=ft.CrossAxisAlignment.CENTER, + ) + page.appbar.title = ft.Container( + content=url_bar, + padding=ft.padding.only(top=3), + expand=True, + alignment=ft.alignment.center_left, ) orig_select_tab = tab_manager.select_tab def _select_tab_and_update_url(i): @@ -104,42 +97,16 @@ def build_ui(page: Page): url_bar.controls.extend([tab["url_field"], tab["go_btn"]]) page.update() tab_manager.select_tab = _select_tab_and_update_url - def _update_content_width(e=None): - # Use page.width for current content width - width = page.width - (page.padding * 2) - if width < 0: - width = 0 - tab_manager.content_container.width = width - _update_content_width() - page.on_resized = lambda e: (_update_content_width(), page.update()) main_area = ft.Column( expand=True, - controls=[ - tab_manager.tab_bar, - url_bar, - tab_manager.content_container, - ], + controls=[tab_manager.tab_bar, tab_manager.content_container], ) - # Layout: main content only (sidebar in drawer) layout = ft.Row(expand=True, controls=[main_area]) - # Render main layout with status page.add( ft.Column( expand=True, - controls=[ - layout, - ft.Row( - [ - ft.Text( - f"Renderer: {app_module.RENDERER}", - color=ft.Colors.GREY, - size=12, - ), - ], - alignment=ft.MainAxisAlignment.END, - ), - ], + controls=[layout], ), )