Source code for bauiv1lib.url

# Released under the MIT License. See LICENSE for details.
#
"""UI functionality related to URLs."""

from __future__ import annotations

import bauiv1 as bui


[docs] class ShowURLWindow(bui.Window): """A window presenting a URL to the user visually.""" def __init__(self, address: str): # in some cases we might want to show it as a qr code # (for long URLs especially) app = bui.app assert app.classic is not None uiscale = app.ui_v1.uiscale self._address = address self._width = 800 self._height = 450 super().__init__( root_widget=bui.containerwidget( size=(self._width, self._height + 40), transition='in_right', scale=( 1.25 if uiscale is bui.UIScale.SMALL else 1.25 if uiscale is bui.UIScale.MEDIUM else 1.25 ), ) ) bui.textwidget( parent=self._root_widget, position=(self._width * 0.5, self._height - 10), size=(0, 0), color=app.ui_v1.title_color, h_align='center', v_align='center', text=bui.Lstr(resource='directBrowserToURLText'), maxwidth=self._width * 0.95, ) bui.textwidget( parent=self._root_widget, position=(self._width * 0.5, self._height - 60), size=(0, 0), scale=1.3, color=app.ui_v1.infotextcolor, h_align='center', v_align='center', text=address, maxwidth=self._width * 0.95, ) button_width = 200 qr_size = 220 bui.imagewidget( parent=self._root_widget, position=( self._width * 0.5 - qr_size * 0.5, self._height * 0.5 - qr_size * 0.5 + 10, ), size=(qr_size, qr_size), texture=bui.get_qrcode_texture(address), ) xoffs = 0 if bui.clipboard_is_supported(): xoffs = -150 btn = bui.buttonwidget( parent=self._root_widget, position=( self._width * 0.5 - button_width * 0.5 + xoffs, 20, ), size=(button_width, 65), autoselect=True, label=bui.Lstr(resource='copyText'), on_activate_call=self._copy, ) xoffs = 150 btn = bui.buttonwidget( parent=self._root_widget, position=(self._width * 0.5 - button_width * 0.5 + xoffs, 20), size=(button_width, 65), autoselect=True, label=bui.Lstr(resource='doneText'), on_activate_call=self._done, ) # we have no 'cancel' button but still want to be able to # hit back/escape/etc to leave.. bui.containerwidget( edit=self._root_widget, selected_child=btn, start_button=btn, on_cancel_call=btn.activate, ) def _copy(self) -> None: bui.clipboard_set_text(self._address) bui.screenmessage(bui.Lstr(resource='copyConfirmText'), color=(0, 1, 0)) def _done(self) -> None: bui.containerwidget(edit=self._root_widget, transition='out_left')
# Docs-generation hack; import some stuff that we likely only forward-declared # in our actual source code so that docs tools can find it. from typing import (Coroutine, Any, Literal, Callable, Generator, Awaitable, Sequence, Self) import asyncio from concurrent.futures import Future from pathlib import Path from enum import Enum