Files
onepilot/tsk/tools_menu/ui.py
T
2025-09-06 21:02:37 -07:00

66 lines
2.7 KiB
Python

# tsk/tools_menu/ui.py
import pyray as rl
from openpilot.system.ui.lib.application import gui_app
from tsk.tools_menu.actions import tsk_extractor_action, tsk_guide_action, tsk_uninstaller_action # Import actions
from tsk.tools_menu.keyboard import KeyboardDialog
from tsk.ui.button import Button
from tsk.ui.header import Header
from tsk.ui.layout import Layout, Theme # Import Theme
class ToolsMenuUI:
"""Renders the Tools Menu with buttons for TSK actions."""
def __init__(self):
"""Initializes the Tools Menu."""
self.header = Header()
header_height = self.header._calculate_height()
key_status_height = Theme.key_status_font_size * 1.5 # Approximate height
combined_header_height = header_height + key_status_height
rect = rl.Rectangle(0, 0, gui_app.width, gui_app.height) # Dummy rectangle for initial calculations
button_height = Layout.calculate_button_dimensions(rect.height, combined_header_height)
# --- Calculate Positions for the Three Main Buttons ---
start_x, start_y = Layout.calculate_button_positions(rect, combined_header_height, 3)
button1_x = start_x
button2_x = start_x + (600 + 80)
button3_x = start_x + 2 * (600 + 80)
button_y = start_y
# --- Create the Three Main Buttons ---
self.extractor_button = Button(tsk_extractor_action,
[{"text": "TSK Extractor", "x_offset": 55, "y_offset": (button_height / 2) - 45}],
600, button_height, button1_x, button_y, 90)
self.keyboard_button = Button(KeyboardDialog.ask,
[{"text": "TSK Keyboard", "x_offset": 45, "y_offset": (button_height / 2) - 45}], 600,
button_height, button2_x, button_y, 90)
self.uninstaller_button = Button(tsk_uninstaller_action, [
{"text": "TSK Uninstaller", "x_offset": 25, "y_offset": (button_height / 2) - 45}], 600, button_height, button3_x,
button_y, 90)
# --- Create the "Tell me what to do next" Button ---
guide_button_width = (3 * 600) + (2 * 80)
guide_button_height = 200
guide_button_x = start_x
guide_button_y = button_y + button_height + 80
self.guide_button = Button(tsk_guide_action, [
{
"text": "Tell me what to do next",
"x_offset": (guide_button_width - rl.measure_text_ex(gui_app.font(), "Tell me what to do next", 90, 1.0).x) / 2,
"y_offset": 60,
}
], guide_button_width, guide_button_height, guide_button_x, guide_button_y, 90)
def render(self, rect: rl.Rectangle) -> None:
"""Renders the Tools Menu."""
self.extractor_button.render()
self.keyboard_button.render()
self.uninstaller_button.render()
self.guide_button.render()