重启项目

This commit is contained in:
Cheney 2024-08-20 14:19:23 +08:00
parent 89e908fe21
commit 76abef7a94
6 changed files with 246 additions and 109 deletions

11
aardiowin/config.json Normal file
View File

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

View File

@ -1,10 +1,8 @@
<?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>
<?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" local="false" ignored="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" ignored="false">
<file name="index.html" path="web\index.html" comment="web\index.html"/>
</folder>
</project>

106
aardiowin/lib/init.aardio Normal file
View File

@ -0,0 +1,106 @@
// init 初始化
import log
// 临时日志
var gLog = log( "awin" );
var gDebug = false;
namespace init{
import fsys
import string
import web.json
// 日志对象
getDebug = function(){
return gDebug;
}
// 日志对象
getLog = function(){
return gLog;
}
// 配置载入函数
loadConfigs = function() {
gLog.print("dir");
var configs = {};
var currentPath = fsys.getCurDir();
gLog.print("currentPath", currentPath);
var appDataPath = string.getenv("APPDATA");
gLog.print("appDataPath", appDataPath);
// 读取当前路径下的 config.json
var currentConfigPath = currentPath ++ "/config.json";
if (io.exist(currentConfigPath)) {
var currentConfigContent = string.load(currentConfigPath);
configs = web.json.parse(currentConfigContent);
}
// 从当前路径下的 config.json 中读取 app 值
var appValue = configs.app;
if (!appValue) {
error("'app' value not found in the config file.");
}
gLog.print("app", appValue);
// 构建 %APPDATA%/%app% 路径
var appDir = appDataPath ++ "/" ++ appValue;
if (! io.exist( appDir )) {
fsys.createDir( appDir )
}
var appDataConfigPath = appDataPath ++ "/" ++ appValue ++ "/config.json";
// 读取 %APPDATA%/%app% 路径下的 config.json
if (io.exist(appDataConfigPath)) {
var appDataConfigContent = string.load(appDataConfigPath);
var appDataConfig = web.json.parse(appDataConfigContent);
// 合并配置,后读取的覆盖先读取的
object.merge(configs, appDataConfig, true);
}
return configs;
};
checkConfig = function (config){
if( ! config.window ){
config.window = {}
}
if( ! config.window.width ) {
config.window.width = 500
}
if( ! config.window.height ) {
config.window.height = 500
}
return config;
}
/*
载入配置,配置文件读取顺序,后读的可以覆盖先读的值。
1. 读取当前路径下的 config.json
2. 读取 %APPDATA%/%app% 路径下的 config.json。其中 %APPDATA% 为操作系统提供的当前用户软件目录。
%app% 为当前路径下的 config.json 中配置的 app
*/
init = function(){
gLog.print("init")
gConfig = {}
// 使用示例
try {
gLog.print("loadConfigs")
io.print("")
gConfig = loadConfigs()
io.print("2")
gConfig = checkConfig( gConfig )
gLog.print(configs);
} catch (e) {
io.print("错误会中断try语句块" ++ e)
gLog.print(e);
}
}
}

40
aardiowin/lib/log.aardio Normal file
View File

@ -0,0 +1,40 @@
// log 日志
import fsys
import fsys.log
import time
var getToday = function(){
var $now = time.now() //当前时间
return "" ++ $now.year ++ $now.month ++ $now.day
}
var todayLogFile = function( name ) {
var appDataPath = string.getenv("APPDATA");
var appPath = appDataPath ++ "/" ++ name;
if (! io.exist( appPath )) {
fsys.createDir( appPath )
}
return appPath ++ "/" ++ name ++ "." ++ getToday() ++ ".log"
}
class log {
ctor( name ){
path = todayLogFile(name);
this = ..fsys.log(path) //调用基类构造对象原型
this.basePrint = this.print;
};
print = function(...){
var t = ..time.now()
t.format="%Y%m%d-%H%M%S ";
var args = {...}
..table.insert(args, tostring(t)) // 通常时间非重要信息,以...作视觉区分方便查看
this.basePrint( ..table.unpack(args) )
};
}

View File

@ -1,85 +1,48 @@
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;
}
import win.ui;
import init;
// 初始化
init.init();
var gConfig = init.loadConfigs();
var gDebug = init.getDebug();
/*DSG{{*/
mainForm = win.form(text="awin";right=gConfig.window.width;bottom=gConfig.window.height;border="thin";max=false;min=false)
mainForm.add()
/*}}*/
// 启动界面
var gLog = init.getLog();
gLog.print("web view")
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
*/
if( gDebug ){
theView.go("\web\index.html",37151);
} else {
theView.go("\web\index.html");
}
mainForm.show();
win.loopMessage();

View File

@ -1,15 +1,34 @@
<!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>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.loader {
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #3498db;
width: 120px;
height: 120px;
margin: auto;
-webkit-animation: spin 2s linear infinite; /* Safari */
animation: spin 2s linear infinite;
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
</head>
<body style="margin:50px;text-align: center; ">
<div class="loader"></div>
<div style="margin-top: 50px"><p>AWin 已经启动,但是 AWin 只是一个没有灵魂的外壳,这里需要被正确替换成真正的应用~</p></div>
</body>
</html>