ターミナル UI

TerminalUI は、UI 実行ロジックを駆動するための主要な実装です。

ターミナル UI の作成

TerminalUI を手動でビルドすることもできますが、TerminalUIBuilder ビルドを使用することをお勧めします。ビルドは自動的に構成され、必要なサービスが設定されます。

@Autowired
TerminalUIBuilder builder;

void sample() {
	TerminalUI ui = builder.build();
	// do something with ui
}

ビューの構成

TerminalUI にはヘルパーメソッドの configure(View) があり、イベントループやその他のサービスに必要な統合を設定するために使用できます。

TerminalUI ui;

void sample() {
	BoxView view = new BoxView();
	ui.configure(view);
}

UI ループの実行

TerminalUI 実行ループの実行はブロック操作です。ループを終了する方法 (たとえば、アプリを終了しています ) が必要になります。

TerminalUI ui;

void sample() {
	ui.run();
}

アプリを終了しています

通常の CTRL-Q キーの組み合わせを使用してアプリを終了する場合は、イベントをリッスンし、割り込みをリクエストします。

@Autowired
Terminal terminal;

void sample() {
	TerminalUI ui = new TerminalUI(terminal);
	BoxView view = new BoxView();
	ui.configure(view);
	ui.setRoot(view, true);
	EventLoop eventLoop = ui.getEventLoop();
	eventLoop.keyEvents()
		.subscribe(event -> {
			if (event.getPlainKey() == Key.q && event.hasCtrl()) {
				eventLoop.dispatch(ShellMessageBuilder.ofInterrupt());
			}
		});
	ui.run();
}

モーダルビュー

TerminalUI は、1 つのアクティブなモーダルビューをサポートします。モーダルビューは他のすべてのビューの上に配置され、すべての入力イベントを受け取ります。

TerminalUI ui;

void sample() {
	DialogView dialog = new DialogView();
	// set modal
	ui.setModal(dialog);
	// clear modal
	ui.setModal(null);
}
ビューは TerminalUi について直接何も知る必要がないため、インターフェース ViewService はモーダル関連の関数を公開します。