TerminalUI

TerminalUI 是驅動 UI 執行邏輯的主要實作。

建立 TerminalUI

您可以手動建構 TerminalUI,但建議的方式是使用 TerminalUIBuilder 建構器,它會為您自動配置並設定所需的服務。

@Autowired
TerminalUIBuilder builder;

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

配置視圖

TerminalUI 有一個輔助方法 configure(View),可用於將所需的整合設定到 eventloop 和其他服務中。

TerminalUI ui;

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

執行 UI 迴圈

執行 TerminalUI 執行迴圈是一個阻塞操作。您需要一種方法從迴圈中退出,例如 退出應用程式

TerminalUI ui;

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

退出應用程式

如果您想使用正常的 CTRL-Q 組合鍵退出應用程式,請監聽事件並請求 interrupt

@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 支援擁有一個活動的模態視圖。模態視圖位於所有其他視圖之上,並接收所有輸入事件。

TerminalUI ui;

void sample() {
	DialogView dialog = new DialogView();
	// set modal
	ui.setModal(dialog);
	// clear modal
	ui.setModal(null);
}
由於視圖不應直接了解任何關於 TerminalUi 的資訊,因此介面 ViewService 公開了模態相關的功能。