分享

持久化变量 aardio

 zip11 2022-05-30 发布于湖北

fsys.config 实际上是对 fsys.table的封装,

fsys.table的功能是是将table对象映射为硬盘文件 - 以创建一个可持久化的table对象,在aardio中数组、哈希表、结构体等等都是table(请参考语法文档)。

fsys.table使用 table.tostring() 函数将一个table转换为aardio代码并写入一个字符串对象(忽略表的所有函数成员)。然后将此字符串写入硬盘,在加载文件时,使用 eval()函数解析aardio 代码重新生成table对象。

fsys.table的用法非常简单,最简单的例子:

import fsys.table;

var ftbl = fsys.table("/test/test.table"); //注意目录或文件不存在时会自动创建

ftbl.name = 123;

上面的ftbl对象就象一个普通的table对象那样使用,

区别是在线程结束时,他会自动更新对应的硬盘文件的值( 控制台程序直接点关闭按钮 - 这种异常终止程序时不会更新硬盘文件)。

ftbl对象 还提供以下成员函数:

ftbl.load() 函数用于再次从硬盘文件重新载入值。

ftbl.save() 函数用于手动保存表到硬盘文件。

ftbl.mixin() 函数用于将参数指定的表混入到当前对象,类似table.assign ()函数。

ftbl.mix() 函数同样是混入表到当前对象,但是不会覆盖已经存在的值,类似 table.mix() 函数。

ftbl.beforeSave 用于自定义一个回调函数,可在保存配置文件以前自动调用。

fsys.config与fsys.table类似,区别是创建参数是一个文件目录,而不是指定一个文件路径。

在获取fsys.config配置对象的成员时,自动将其生成一个fsys.table对象,

示例代码:

import fsys.config;

config = fsys.config("/config/")

config.uiSetting.height = 123;

config的成员配置文件名不能以下划线开始,例如 config._uiSetting 这样写是错的。

上面的 config.uiSetting 将会自动生成一个fsys.talbe对象 - 对应的硬盘文件存储于创建 fsys.config对象时指定的 "/config/"目录下(即 config.uiSetting 对应的硬盘文件为 "/config/uiSetting.table").

config仅提供一个函数,即 config.saveAll() 用于保存所有的配置文件。

当然即使你不调用这个函数,在退出程序时,也会自动保存(除非程序意外终止)。

如果你不希望将配置文件保存在当前目录,而是系统的AppData目录(这也是推荐的做法),那么可以象下面这样写

config = ..fsys.config(

    ..fsys.getSpecial( 0x1c /*_CSIDL_LOCAL_APPDATA*/ ,"/应用程序名/" )

);

win.form创建的窗口对象,可以使用 bindConfig() 函数将控件绑定到配置文件,示例:

import fsys.config;

config = fsys.config("/config/");

//将窗口控件绑定到配置文件 config.mainForm

winform.bindConfig( config.winform,{

    edit = "text";

    radiobutton = "checked";

    checkbox = "checked";

    combobox = "selIndex";

} );

这个函数的第一个参数指定一个fsys.table对象,

第二个参数可选指定一个表(可省略此参数),键为控件类名,值为需要同步到配置文件的属性。

窗口在绑定配置文件以后,在窗口销毁后,控件指定的值将会自动同步到配置文件。

下面是一个更完整的例子,演示了如何重置控件的值、如何手动保存配置:

import win.ui;

/*DSG{{*/

winform = ..win.form(text="aardio form";right=599;bottom=399)

winform.add(

btnReset={cls="button";text="重置";left=389;top=351;right=521;bottom=379;z=3};

btnSave={cls="button";text="保存";left=231;top=351;right=363;bottom=379;z=1};

edit3={cls="edit";text="edit3";left=44;top=42;right=407;bottom=68;edge=1;multiline=1;z=2}

)

/*}}*/

import fsys.config;

config = fsys.config("/config/");

//将窗口控件绑定到配置文件 config.mainForm

winform.bindConfig( config.winform,{

    edit = "text";

} );

//取消或重置为初始值

winform.btnReset.oncommand = function(id,event){

    config.winform.load();

}

//也可以手动保存配置文件

winform.btnSave.oncommand = function(id,event){

    config.winform.save();

}

winform.show();

win.loopMessage();

绑定配置文件的窗口能自动同步控件的指定值到配置文件。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多