文档中心

控件开发_自动布局和配置文件

02.控件的配置文件

风格文件、翻译文件和布局文件的使用可以简化程序的编写,并增加程序的灵活性。

但开发者通过函数分别加载风格文件,翻译文件和布局文件(注意最后加载布局文件,因为布局文件会用到风格和翻译)仍较为繁琐,系统支持将这些需要加载的文件都写到另外一个配置文件中,如:

#注释(直到换行)

[global]
var1="some string"
var2=10
var3={
    var4=5
    var5=”value”
}
[translate]
zh_CN="../trans/trans_file1"
en_US="../trans/trans_file2"
[style]
"../style/style_file1"
"../style/style_file2"
[layout]
"../layout/layout_file"
调用下面的函数加载这个配置文件。
void TwConfigParseFile(const char * file);

例如:
/* 假定程序为/some/path/bin/file1,配置文件为/some/path/etc/file5 */
TwConfigParseFile(TGetExecutePath(“../etc/file5”));

[translate]下面的字符串内容会根据当前的语言环境变量选择一个作为翻译文件加 载,如当前的环境变量中有“ LC_ALL=zh_CN.UTF-8” ,表示语言环境是中文简体,那么就会实际加载“ ../trans/trans_file1” 这个文件(注意翻译文件必须是 UTF-8编码)。

[style]下面的字符串内容当做风格文件加载,如果有多个风格文件,都会被加载。

[layout]下面的字符串内容会当做布局文件加载,如果有多个布局文件,都会被加载。 该函数会自动先加载翻译文件和风格文件,最后加载布局文件,即使在配置文件中先写布局文件。

注意:在配置文件中加载的文件路径都是相对于该配置文件所在的目录。

通过配置文件,前面 hello程序的例子又可以简化为:

#include <TWidget/TWidget.h> //包含控件系统的头文件
TWidget *root, *mainwindow, *button_ok, *button_cancel; //定义用到的控件指针
void cancel_click_callback(void *obj, T_ID event, TTable *in, void *arg, TExist *exist)
{
    exit(0); //退出程序
}
void ok_click_callback(void *obj, T_ID event, TTable *in, void *arg, TExist *exist)
{
    TLogD("you have click button %s\n", TwGetCaption(obj, NULL));
}
int main(int argc, char **argv)
{
    root = TwAppInit(); //初始化控件系统,得到根窗口指针
    TwConfigParseFile(NULL, TGetExecutePath(“../etc/file5”));
    button_ok = TObjectGetFromName(“button_ok”);
    button_cancel = TObjectGetFromName(“button_cancel”);
    TObjectAddEventHandler(button_ok,CLICKED,ok_click_callback,NULL);
    TObjectAddEventHandler(button_cancel,CLICKED,cancel_click_callback, NULL);
}

配置文件中还可以存放应用程序需要的其他配置信息,这些其他的配置信息可以放在其他的节中,比如上例中的[global]节。通过下面的函数可以取得这些配置信息:

Tint TwConfigGetInt(char *section, char *name);//获取[section]节中的 name 的整数值
char * TwConfigGetString(char *section, char *name);//获取一个字符串
TTable * TwConfigGetTable(char *section, char *name);//获取一个子 table

例如获取前面例子文件中的信息:
char * var1 = TwConfigGetString(“global”, “var1”);
Tint var2 = TwConfigGetInt(“global”, “var2”);
TTable *var3 = TwConfigGetTable(“global, var3”);
Tint var4 = TTableGetInt(var3, “var4”);
char *var5 = TTableGetString(var3, “var5”, NULL);
注意:当不存在指定名字的配置信息或者类型不配置时,返回 0或 NULL。