summaryrefslogtreecommitdiff
path: root/tests/ui
diff options
context:
space:
mode:
authorruki <[email protected]>2020-12-07 22:36:38 +0800
committerruki <[email protected]>2020-12-07 22:36:38 +0800
commit24b48fde3bb5c1edef6897e9ffa213ec1ae2e556 (patch)
treeafe78ad08217354194484e0214c55677ac3d45c5 /tests/ui
parent83c683cb9f564d73b84750ee1691d58b6b778eed (diff)
add utf8dialog
Diffstat (limited to 'tests/ui')
-rw-r--r--tests/ui/utf8dialog.lua140
1 files changed, 140 insertions, 0 deletions
diff --git a/tests/ui/utf8dialog.lua b/tests/ui/utf8dialog.lua
new file mode 100644
index 000000000..e7de3a075
--- /dev/null
+++ b/tests/ui/utf8dialog.lua
@@ -0,0 +1,140 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License. You may obtain a copy of the License at
+--
+-- http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+-- Copyright (C) 2015-2020, TBOOX Open Source Group.
+--
+-- @author ruki, laelnasan
+-- @file inputdialog.lua
+--
+
+-- imports
+import("core.ui.log")
+import("core.ui.rect")
+import("core.ui.view")
+import("core.ui.label")
+import("core.ui.event")
+import("core.ui.button")
+import("core.ui.boxdialog")
+import("core.ui.textdialog")
+import("core.ui.inputdialog")
+import("core.ui.application")
+
+-- the demo application
+local demo = application()
+
+-- init demo
+function demo:init()
+
+ -- init name
+ application.init(self, "demo")
+
+ -- init background
+ self:background_set("blue")
+
+ -- init main dialog
+ self:insert(self:dialog_main())
+
+ -- init input dialog
+ self:insert(self:dialog_input(), {centerx = true, centery = true})
+
+ -- init tips dialog
+ self:insert(self:dialog_tips(), {centerx = true, centery = true})
+end
+
+-- main dialog
+function demo:dialog_main()
+ local dialog_main = self._DIALOG_MAIN
+ if not dialog_main then
+ dialog_main = boxdialog:new("dialog.main", rect {1, 1, self:width() - 1, self:height() - 1}, "main dialog")
+ dialog_main:text():text_set([[LTUI是一个基于lua的跨平台字符终端UI界面库。
+此框架源于xmake中图形化菜单配置的需求,类似linux kernel的menuconf去配置编译参数,因此基于curses和lua实现了一整套跨平台的字符终端ui库。 而样式风格基本上完全参照的kconfig-frontends,当然用户也可以自己定制不同的ui风格。]])
+ dialog_main:button_add("tips", "< ☝ Tips >", function (v) self:view("dialog.tips"):show(true, {focused = true}) end)
+ dialog_main:button_add("input", "< ☺ Input >", function (v) self:view("dialog.input"):show(true, {focused = true}) end)
+ dialog_main:button_add("help", "< ☕Help >", function (v) self:insert(self:dialog_help()) end)
+ dialog_main:button_add("quit", "< ☠ Quit >", "cm_quit")
+ self._DIALOG_MAIN = dialog_main
+ end
+ return dialog_main
+end
+
+-- help dialog
+function demo:dialog_help()
+ local dialog_help = self._DIALOG_HELP
+ if not dialog_help then
+ dialog_help = textdialog:new("dialog.help", rect {1, 1, self:width() - 1, self:height() - 1}, "README")
+ dialog_help:option_set("scrollable", true)
+ local helptext = nil
+ local file = io.open("./LICENSE.md", 'r')
+ if file then
+ helptext = file:read("*a")
+ file:close()
+ end
+ if helptext then
+ dialog_help:text():text_set(helptext)
+ end
+ dialog_help:button_add("exit", "< Exit >", function (v) self:remove(dialog_help) end)
+ self._DIALOG_HELP = dialog_help
+ end
+ return dialog_help
+end
+
+-- input dialog
+function demo:dialog_input()
+ local dialog_input = self._DIALOG_INPUT
+ if not dialog_input then
+ dialog_input = inputdialog:new("dialog.input", rect {0, 0, 50, 8}):background_set(self:dialog_main():frame():background())
+ dialog_input:frame():background_set("cyan")
+ dialog_input:text():text_set("please input text:"):textattr_set("red")
+ dialog_input:button_add("no", "< No >", function (v) dialog_input:show(false) end)
+ dialog_input:button_add("yes", "< Yes >", function (v)
+ self:dialog_main():text():text_set(dialog_input:textedit():text())
+ dialog_input:show(false)
+ end)
+ dialog_input:show(false)
+ self._DIALOG_INPUT = dialog_input
+ end
+ return dialog_input
+end
+
+-- tips dialog
+function demo:dialog_tips()
+ local dialog_tips = self._DIALOG_TIPS
+ if not dialog_tips then
+ dialog_tips = textdialog:new("dialog.tips", rect {0, 0, 50, 8}):background_set(self:dialog_main():frame():background())
+ dialog_tips:frame():background_set("cyan")
+ dialog_tips:text():text_set("hello ltui! (https://tboox.org)\nA cross-platform terminal ui library based on Lua"):textattr_set("red")
+ dialog_tips:button_add("yes", "< Yes >", function (v) dialog_tips:show(false) end)
+ dialog_tips:button_add("no", "< No >", function (v) dialog_tips:show(false) end)
+ self._DIALOG_TIPS = dialog_tips
+ end
+ return dialog_tips
+end
+
+-- on resize
+function demo:on_resize()
+ self:dialog_main():bounds_set(rect {1, 1, self:width() - 1, self:height() - 1})
+ self:dialog_help():bounds_set(rect {1, 1, self:width() - 1, self:height() - 1})
+ self:center(self:dialog_input(), {centerx = true, centery = true})
+ self:center(self:dialog_tips(), {centerx = true, centery = true})
+ application.on_resize(self)
+end
+
+-- main entry
+function main(...)
+ demo:run(...)
+end