110 lines
3.3 KiB
Python
110 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Test the text input widget system
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src', 'scripts'))
|
|
|
|
import mcrfpy
|
|
from text_input_widget import FocusManager, TextInput
|
|
|
|
|
|
def create_demo():
|
|
"""Create demo scene with text inputs"""
|
|
# Create scene
|
|
mcrfpy.createScene("text_demo")
|
|
scene = mcrfpy.sceneUI("text_demo")
|
|
|
|
# Background
|
|
bg = mcrfpy.Frame(0, 0, 800, 600)
|
|
bg.fill_color = (40, 40, 40, 255)
|
|
scene.append(bg)
|
|
|
|
# Title
|
|
title = mcrfpy.Caption("Text Input Widget Demo", 20, 20)
|
|
title.fill_color = (255, 255, 255, 255)
|
|
scene.append(title)
|
|
|
|
# Focus manager
|
|
focus_mgr = FocusManager()
|
|
|
|
# Create inputs
|
|
inputs = []
|
|
|
|
# Name input
|
|
name_input = TextInput(50, 100, 300, label="Name:", placeholder="Enter your name")
|
|
name_input._focus_manager = focus_mgr
|
|
focus_mgr.register(name_input)
|
|
name_input.add_to_scene(scene)
|
|
inputs.append(name_input)
|
|
|
|
# Email input
|
|
email_input = TextInput(50, 160, 300, label="Email:", placeholder="user@example.com")
|
|
email_input._focus_manager = focus_mgr
|
|
focus_mgr.register(email_input)
|
|
email_input.add_to_scene(scene)
|
|
inputs.append(email_input)
|
|
|
|
# Tags input
|
|
tags_input = TextInput(50, 220, 400, label="Tags:", placeholder="comma, separated, tags")
|
|
tags_input._focus_manager = focus_mgr
|
|
focus_mgr.register(tags_input)
|
|
tags_input.add_to_scene(scene)
|
|
inputs.append(tags_input)
|
|
|
|
# Comment input
|
|
comment_input = TextInput(50, 280, 500, height=30, label="Comment:", placeholder="Add a comment...")
|
|
comment_input._focus_manager = focus_mgr
|
|
focus_mgr.register(comment_input)
|
|
comment_input.add_to_scene(scene)
|
|
inputs.append(comment_input)
|
|
|
|
# Status display
|
|
status = mcrfpy.Caption("Ready for input...", 50, 360)
|
|
status.fill_color = (150, 255, 150, 255)
|
|
scene.append(status)
|
|
|
|
# Update handler
|
|
def update_status(text=None):
|
|
values = [inp.get_text() for inp in inputs]
|
|
status.text = f"Data: {values[0]} | {values[1]} | {values[2]} | {values[3]}"
|
|
|
|
# Set change handlers
|
|
for inp in inputs:
|
|
inp.on_change = update_status
|
|
|
|
# Keyboard handler
|
|
def handle_keys(scene_name, key):
|
|
if not focus_mgr.handle_key(key):
|
|
if key == "Tab":
|
|
focus_mgr.focus_next()
|
|
elif key == "Escape":
|
|
print("\nFinal values:")
|
|
for i, inp in enumerate(inputs):
|
|
print(f" Field {i+1}: '{inp.get_text()}'")
|
|
sys.exit(0)
|
|
|
|
mcrfpy.keypressScene("text_demo", handle_keys)
|
|
mcrfpy.setScene("text_demo")
|
|
|
|
# Run demo test
|
|
def run_test(timer_name):
|
|
print("\n=== Text Input Widget Test ===")
|
|
print("Features:")
|
|
print("- Click to focus fields")
|
|
print("- Tab to navigate between fields")
|
|
print("- Type to enter text")
|
|
print("- Backspace/Delete to edit")
|
|
print("- Home/End for cursor movement")
|
|
print("- Placeholder text")
|
|
print("- Visual focus indication")
|
|
print("- Press Escape to exit")
|
|
print("\nTry it out!")
|
|
|
|
mcrfpy.setTimer("info", run_test, 100)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
create_demo() |