初始化项目

This commit is contained in:
Cheney 2024-05-15 15:44:56 +08:00
commit 89e908fe21
7 changed files with 148 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/.idea/

9
Readme.md Normal file
View File

@ -0,0 +1,9 @@
# AWin
一个基于 aardio 简单封装的窗口,只运行于 Windows 下。用于使用 web 技术快速开发 windows 程序。
## TODO
[ ] 静态 tray
[ ] 动态 tray
[ ] 日志模块

10
aardiowin/default.aproj Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="awin" libEmbed="true" icon="..." ui="win" output="awin.exe" CompanyName="aardio" FileDescription="awin" LegalCopyright="Copyright (C) 作者 2024" ProductName="awin" InternalName="awin" FileVersion="0.0.0.1" ProductVersion="0.0.0.1" publishDir="/dist/" dstrip="false">
<file name="main" path="main.aardio"/>
<folder name="窗体" path="forms" comment="" embed="true" local="false" ignored="false"/>
<folder name="网页" path="web" embed="true" comment="目录" local="true">
<file name="index.html" path="web\index.html" comment="web\index.html"/>
<file name="index.js" path="web\index.js" comment="web\index.js"/>
</folder>
<folder name="网页源码" path="web.src" embed="false" comment="目录" local="false" ignored="true"/>
</project>

View File

@ -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**/

85
aardiowin/main.aardio Normal file
View File

@ -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;
}

15
aardiowin/web/index.html Normal file
View File

@ -0,0 +1,15 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body style="margin:50px;white-space: pre;">
请在工程中右键点击「网页源码」目录,
然后在弹出菜单中点击「用外部编辑器」打开。
在 VSCode 中打开以后,运行 npm install 安装依赖,
然后再运行 npm run build 编译网页代码。
最后在 aardio 中点击发布生成 EXE 文件。
</body>
</html>

View File

@ -0,0 +1,11 @@
{
"app" : "",
"title" : "",
"icon" : "",
"backend" : "",
"frontend" : "",
"window" : {
"width" : "",
"height" : ""
}
}