mirror of
https://github.com/CCLeonOS/LeonOS.git
synced 2026-03-03 15:17:01 +00:00
feat(appgui): 添加应用GUI界面支持及包类型管理
新增appgui API用于绘制顶部和底部状态栏,提供一致的UI界面 在package.json中添加type字段区分应用和API包类型 更新安装程序以使用新的appgui界面 修改pkg程序以支持根据包类型安装到不同目录 添加appgui使用文档和演示程序
This commit is contained in:
64
data/computercraft/lua/rom/programs/appgui_demo.lua
Normal file
64
data/computercraft/lua/rom/programs/appgui_demo.lua
Normal 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.")
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user