fix signal ref

This commit is contained in:
2025-10-11 16:45:50 +08:00
parent 8e95fe8ad1
commit bc8b5fec8b
9 changed files with 37 additions and 18 deletions

2
.gitignore vendored
View File

@@ -3,7 +3,7 @@ node_modules
event/ event/
build/ build/
reference/ reference/
src/*/*.md src/**/*.md
QWEN.md QWEN.md

View File

@@ -5,6 +5,7 @@
pnpm pnpm
craftos-pc craftos-pc
qwen-code qwen-code
gemini-cli
]; ];
# https://devenv.sh/languages/ # https://devenv.sh/languages/

View File

@@ -1,5 +1,5 @@
import { UIComponent } from "./UIComponent"; import { UIComponent } from "./UIComponent";
import { Signal } from "./signal"; import { Signal } from "./Signal";
import { KeyEvent } from "../event"; import { KeyEvent } from "../event";
/** /**

View File

@@ -1,5 +1,5 @@
import { UIComponent } from "./UIComponent"; import { UIComponent } from "./UIComponent";
import { Signal } from "./signal"; import { Signal } from "./Signal";
import { KeyEvent, CharEvent } from "../event"; import { KeyEvent, CharEvent } from "../event";
/** /**

View File

@@ -1,5 +1,5 @@
import { UIComponent } from "./UIComponent"; import { UIComponent } from "./UIComponent";
import { Signal } from "./signal"; import { Signal } from "./Signal";
import { KeyEvent } from "../event"; import { KeyEvent } from "../event";
/** /**

View File

@@ -1,12 +1,12 @@
import { UIComponent } from "./UIComponent"; import { UIComponent } from "./UIComponent";
import { Signal } from "./signal"; import { Signal } from "./Signal";
import { KeyEvent } from "../event"; import { KeyEvent } from "../event";
/** /**
* Tab component that allows switching between different pages * Tab component that allows switching between different pages
* Similar to QT's TabWidget, currently implementing horizontal tabs only * Similar to QT's TabWidget, currently implementing horizontal tabs only
*/ */
export class TabWidget extends UIComponent { export class TabBar extends UIComponent {
// Tab data structure - simple array of tab names // Tab data structure - simple array of tab names
private tabs: string[]; private tabs: string[];
private currentIndex: number; private currentIndex: number;

View File

@@ -1,4 +1,4 @@
import { Signal } from "./signal"; import { Signal } from "./Signal";
import { KeyEvent, CharEvent, TimerEvent } from "../event"; import { KeyEvent, CharEvent, TimerEvent } from "../event";
import { UIObject } from "./UIObject"; import { UIObject } from "./UIObject";
/** /**

View File

@@ -4,13 +4,13 @@
* Provides input/output, option selection and keyboard event handling * Provides input/output, option selection and keyboard event handling
*/ */
import { Signal } from "./signal"; import { Signal } from "./Signal";
import { UIObject } from "./UIObject"; import { UIObject } from "./UIObject";
import { UIComponent } from "./UIComponent"; import { UIComponent } from "./UIComponent";
import { TextLabel } from "./TextLabel"; import { TextLabel } from "./TextLabel";
import { InputField } from "./InputField"; import { InputField } from "./InputField";
import { OptionSelector } from "./OptionSelector"; import { OptionSelector } from "./OptionSelector";
import { TabWidget } from "./TabWidget"; import { TabBar } from "./TabBar";
import { UIWindow } from "./UIWindow"; import { UIWindow } from "./UIWindow";
import { TUIApplication } from "./TUIApplication"; import { TUIApplication } from "./TUIApplication";
import { Button } from "./Button"; import { Button } from "./Button";
@@ -23,7 +23,7 @@ export {
TextLabel, TextLabel,
InputField, InputField,
OptionSelector, OptionSelector,
TabWidget, TabBar,
UIWindow, UIWindow,
TUIApplication, TUIApplication,
Button, Button,

View File

@@ -7,7 +7,7 @@ import {
TextLabel, TextLabel,
InputField, InputField,
OptionSelector, OptionSelector,
TabWidget, TabBar,
Button, Button,
} from "../lib/ccTUI"; } from "../lib/ccTUI";
@@ -46,11 +46,27 @@ const optionSelector = new OptionSelector(
const statusLabel = new TextLabel("LableStatus", 5, 11, "Status: Ready"); const statusLabel = new TextLabel("LableStatus", 5, 11, "Status: Ready");
// Create a button // Create a button
const button = new Button("ButtonSubmit", 5, 13, "Submit", colors.white, colors.blue); const button = new Button(
"ButtonSubmit",
5,
13,
"Submit",
colors.white,
colors.blue,
);
// Create tab widget with sample tabs - using longer tab names for testing // Create tab widget with sample tabs - using longer tab names for testing
const tabNames = ["Home", "Settings", "User Profile", "Messages", "About Us", "Documentation", "Advanced Settings", "Account Management"]; const tabNames = [
const tabWidget = new TabWidget("TabWidget", 5, 3, 50, tabNames, 0); "Home",
"Settings",
"User Profile",
"Messages",
"About Us",
"Documentation",
"Advanced Settings",
"Account Management",
];
const tabBar = new TabBar("TabWidget", 5, 3, 50, tabNames, 0);
// Add components to the application // Add components to the application
app.addComponent(title); app.addComponent(title);
@@ -60,10 +76,10 @@ app.addComponent(optionLabel);
app.addComponent(optionSelector); app.addComponent(optionSelector);
app.addComponent(statusLabel); app.addComponent(statusLabel);
app.addComponent(button); app.addComponent(button);
app.addComponent(tabWidget); app.addComponent(tabBar);
// Set focus to the input field initially // Set focus to the input field initially
app.getWindow().setFocusFor(tabWidget); app.getWindow().setFocusFor(tabBar);
// Connect events // Connect events
optionSelector.onSelectionChanged.connect((data) => { optionSelector.onSelectionChanged.connect((data) => {
@@ -80,7 +96,7 @@ inputField.onTextChanged.connect((value) => {
} }
}); });
tabWidget.onTabChanged.connect((data) => { tabBar.onTabChanged.connect((data) => {
statusLabel.setText( statusLabel.setText(
`Status: Tab changed to ${data?.name} (index: ${data?.index})`, `Status: Tab changed to ${data?.name} (index: ${data?.index})`,
); );
@@ -89,7 +105,9 @@ tabWidget.onTabChanged.connect((data) => {
button.onClick.connect(() => { button.onClick.connect(() => {
const inputValue = inputField.getValue(); const inputValue = inputField.getValue();
const selectedOption = optionSelector.getSelectedValue(); const selectedOption = optionSelector.getSelectedValue();
statusLabel.setText(`Status: Submitted - Input: "${inputValue}", Option: "${selectedOption}"`); statusLabel.setText(
`Status: Submitted - Input: "${inputValue}", Option: "${selectedOption}"`,
);
}); });
// Run the application // Run the application