From 89e908fe2170d50cd30fc7f7d2f60f88183bd8a5 Mon Sep 17 00:00:00 2001 From: Cheney Date: Wed, 15 May 2024 15:44:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + Readme.md | 9 ++++ aardiowin/default.aproj | 10 +++++ aardiowin/lib/config.aardio | 17 +++++++ aardiowin/main.aardio | 85 +++++++++++++++++++++++++++++++++++ aardiowin/web/index.html | 15 +++++++ portable-template/config.json | 11 +++++ 7 files changed, 148 insertions(+) create mode 100644 .gitignore create mode 100644 Readme.md create mode 100644 aardiowin/default.aproj create mode 100644 aardiowin/lib/config.aardio create mode 100644 aardiowin/main.aardio create mode 100644 aardiowin/web/index.html create mode 100644 portable-template/config.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..85e7c1d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/.idea/ diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..ccd2a8b --- /dev/null +++ b/Readme.md @@ -0,0 +1,9 @@ +# AWin +一个基于 aardio 简单封装的窗口,只运行于 Windows 下。用于使用 web 技术快速开发 windows 程序。 + + + +## TODO + [ ] 静态 tray + [ ] 动态 tray + [ ] 日志模块 \ No newline at end of file diff --git a/aardiowin/default.aproj b/aardiowin/default.aproj new file mode 100644 index 0000000..b111c24 --- /dev/null +++ b/aardiowin/default.aproj @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/aardiowin/lib/config.aardio b/aardiowin/lib/config.aardio new file mode 100644 index 0000000..2b8fdc6 --- /dev/null +++ b/aardiowin/lib/config.aardio @@ -0,0 +1,17 @@ +//config 配置文件 +import fsys.config; +config = fsys.config("/config/"); +//config = fsys.config( io.appData("/软件作者/应用程序名/") ); + +//不需要序列化的配置名字前请添加下划线 +namespace config { + __appName = "应用程序名"; + __website = "http://www.aardio.com/"; +} + +/**intellisense(config) +__appName = 应用程序名 +__website = 官方网站 +saveAll() = 写入所有配置到文件 +? = 获取值时指定不以下划线开始的配置表名称,\n返回一个可自动序列化到同名配置文件的表对象。\n如果此对象名以下划线开始,则可以正常读写值不会序列化为配置文件。\n否则不能对此对象直接赋值,只能对配置表对象的成员赋值。\n\n配置表可自动自文件加载,退出线程前自动序列化并存入文件。\n仅序列化以字符串、数值为键的元素,\n仅序列化值为字符串、数值、buffer 以及定义了 _serialize 元方法的成员。\n循环引用的值转换为 null,序列化时忽略成员函数\n!fsys_table. +end intellisense**/ \ No newline at end of file diff --git a/aardiowin/main.aardio b/aardiowin/main.aardio new file mode 100644 index 0000000..41efce4 --- /dev/null +++ b/aardiowin/main.aardio @@ -0,0 +1,85 @@ +import win.ui; + +/* + +载入配置,配置文件读取顺序,后读的可以覆盖先读的值。 +1. 读取当前路径下的 config.json +2. 读取 %APPDATA%/%app% 路径下的 config.json。其中 %APPDATA% 为操作系统提供的当前用户软件目录。 + %app% 为当前路径下的 config.json 中配置的 app + +*/ +gConfig = {} +// 使用示例 +try { + gConfig = loadConfigs() + console.log(configs); +} catch (e) { + console.error(e.message); +} + +/*DSG{{*/ +mainForm = win.form(text="awin";right=759;bottom=469) +mainForm.add() +/*}}*/ + +import web.view; +var theView = web.view(mainForm); + +//导出为 JavaScript 中的 aardio 对象 +theView.external = { + onCounterUpdate = function(name,value){ + if(name!==null && value!==null){ + return "aardio 返回的值:网页中 React 状态值改变了:value:"+value; + } + }; +} + +import wsock.tcp.simpleHttpServer; +/* +如果导入 simpleHttpServer,则单个斜杠开头的路径会转换为嵌入式 HTTP 地址, +如果同时文件名为 index.html ,则上级目录自动设为根目录,前端应用发布根目录使用默认的 "/" 即可,不需要改动。 + +去掉下面的前端项目调试端口号 37151 或发布 EXE 后运行才会打开 "\web\index.html"。 +否则打开 http://localhost:37151 +*/ +theView.go("\web\index.html",37151); + +mainForm.show(); +win.loopMessage(); + + +// 配置载入函数 +function loadConfigs() { + var configs = {}; + var currentPath = file.dir(); + var appDataPath = env.get("APPDATA"); + + // 读取当前路径下的 config.json + var currentConfigPath = file.path(currentPath, "config.json"); + if (file.exists(currentConfigPath)) { + var currentConfigContent = file.read(currentConfigPath); + configs = json.parse(currentConfigContent); + } + + // 从当前路径下的 config.json 中读取 app 值 + var appValue = configs.app; + if (!appValue) { + error("'app' value not found in the config file."); + } + + // 构建 %APPDATA%/%app% 路径 + var appDataConfigPath = file.path(appDataPath, appValue, "config.json"); + + // 读取 %APPDATA%/%app% 路径下的 config.json + if (file.exists(appDataConfigPath)) { + var appDataConfigContent = file.read(appDataConfigPath); + var appDataConfig = json.parse(appDataConfigContent); + + // 合并配置,后读取的覆盖先读取的 + object.merge(configs, appDataConfig, true); + } + + return configs; +} + + diff --git a/aardiowin/web/index.html b/aardiowin/web/index.html new file mode 100644 index 0000000..5ee197e --- /dev/null +++ b/aardiowin/web/index.html @@ -0,0 +1,15 @@ + + + + + + +请在工程中右键点击「网页源码」目录, +然后在弹出菜单中点击「用外部编辑器」打开。 + +在 VSCode 中打开以后,运行 npm install 安装依赖, +然后再运行 npm run build 编译网页代码。 + +最后在 aardio 中点击发布生成 EXE 文件。 + + \ No newline at end of file diff --git a/portable-template/config.json b/portable-template/config.json new file mode 100644 index 0000000..3bee312 --- /dev/null +++ b/portable-template/config.json @@ -0,0 +1,11 @@ +{ + "app" : "", + "title" : "", + "icon" : "", + "backend" : "", + "frontend" : "", + "window" : { + "width" : "", + "height" : "" + } +} \ No newline at end of file