feat(appgui): 添加应用GUI界面支持及包类型管理

新增appgui API用于绘制顶部和底部状态栏,提供一致的UI界面
在package.json中添加type字段区分应用和API包类型
更新安装程序以使用新的appgui界面
修改pkg程序以支持根据包类型安装到不同目录
添加appgui使用文档和演示程序
This commit is contained in:
2025-09-12 17:10:44 +08:00
parent 429b98ab00
commit 0bb365cadb
7 changed files with 346 additions and 33 deletions

View File

@@ -0,0 +1,64 @@
-- appgui_demo.lua
-- Demonstration of the appgui API for drawing top and bottom bars
local appgui = require("appgui")
local term = require("term")
local colors = require("colors")
-- Clear the screen before starting
term.clear()
-- Draw the top bar with default colors (white text on blue background)
appgui.topbar("LeonOS App GUI Demo")
-- Add some content in the middle
print()
print("This is a demonstration of the appgui API.")
print()
print("The top bar shows the application title.")
print("The bottom bar shows the status information.")
print()
print("Press any key to see custom colors...")
-- Wait for a key press
os.pullEvent("key")
-- Clear the screen and redraw with custom colors
term.clear()
appgui.topbar("Custom Colored Top Bar", colors.yellow, colors.red)
-- Add some content
print()
print("Now with custom colors!")
print()
print("Top bar: Yellow text on Red background")
print()
print("Press any key to continue...")
-- Wait for a key press
os.pullEvent("key")
-- Clear the screen and draw both top and bottom bars
term.clear()
appgui.topbar("Complete GUI Demo")
appgui.downbar("Status: Running - Press Q to quit")
-- Add some content in the middle
print()
print("Now you can see both top and bottom bars.")
print()
print("Try resizing the terminal window to see how the text stays centered.")
print()
print("Press Q to exit this demo.")
-- Main loop to handle key presses
while true do
local event, key = os.pullEvent("key")
if key == 16 then -- Q key
break
end
end
-- Clear the screen before exiting
term.clear()
print("AppGUI Demo has ended.")

View File

@@ -54,6 +54,7 @@ local function create_package(pkg_name)
description = "A new package for LeonOS",
author = "LeonOS User",
license = "MIT",
type = "app", -- 默认类型为app
dependencies = {},
files = {
pkg_name .. ".lua"
@@ -288,18 +289,25 @@ local function install_github_package(repo_path, options)
meta_file:write(textutils.serializeJSON(meta, false))
meta_file:close()
-- 下载并安装文件
-- 根据package类型确定安装目录
print("Installing version: " .. pkg_version)
local app_dir = "/app"
if not fs.exists(app_dir) then
fs.makeDir(app_dir)
local install_dir
if meta.type and meta.type == "api" then
install_dir = "/leonos/apis"
else
install_dir = "/app" -- 默认安装到app目录
end
-- 确保安装目录存在
if not fs.exists(install_dir) then
fs.makeDir(install_dir)
end
local success_count = 0
local fail_count = 0
for _, file_path in ipairs(meta.files or {}) do
local dest = fs.combine(app_dir, file_path)
local dest = fs.combine(install_dir, file_path)
if download_github_package_file(repo_path, file_path, dest) then
print("Installed: " .. file_path)
@@ -386,17 +394,23 @@ local function install_package(pkg_name, options)
return false
end
-- 安装文件
-- 根据package类型确定安装目录
print("Installing version: " .. latest_version)
-- 确保app目录存在
local app_dir = "/app"
if not fs.exists(app_dir) then
fs.makeDir(app_dir)
local install_dir
if meta.type and meta.type == "api" then
install_dir = "/leonos/apis"
else
install_dir = "/app" -- 默认安装到app目录
end
-- 确保安装目录存在
if not fs.exists(install_dir) then
fs.makeDir(install_dir)
end
for _, file_path in ipairs(meta.files or {}) do
local src = fs.combine(version_path, file_path)
local dest = fs.combine(app_dir, file_path)
local dest = fs.combine(install_dir, file_path)
-- 确保目标目录存在
local dest_dir = fs.getDir(dest)
@@ -508,9 +522,14 @@ local function remove_package(pkg_name)
file:close()
local ok, meta = pcall(textutils.unserializeJSON, meta_content)
if ok and meta then
-- 除包文件
-- 除包文件
for _, file_path in ipairs(meta.files or {}) do
local dest = fs.combine("/rom", file_path)
local dest
if meta.type and meta.type == "api" then
dest = fs.combine("/leonos/apis", file_path)
else
dest = fs.combine("/app", file_path)
end
if fs.exists(dest) then
fs.delete(dest)
print("Removed: " .. file_path)