Skip to content

Files

Latest commit

071722c · Sep 5, 2014

History

History
93 lines (65 loc) · 2.76 KB

README.md

File metadata and controls

93 lines (65 loc) · 2.76 KB

webui

用网页模拟的go语言gui

本库是采用网页模拟GUI,以便进行交互。

类型Window,用来盛放控件(个控件都对应某个具体的HTML控件)。

支持如下控件

Button    按钮
Radio     单选框
Check     复选框
Select    选择列表
Text      文本框
Image     图像框
Container 容器(可以盛放控件,或用于嵌入innerHTML)

以上控件都实现了Object接口:

// 所有控件都实现的接口
type Object interface {
	// 返回该控件的HTML排布
	Format(l, t int) string

	// 返回控件的ID
	ID() string

	// 返回控件的操作函数
	DO() func(*Context)
}

Window和Container都具有[]Object类型的Sub字段,可以放入其他控件。

用于交互的数据类型

// 保管从客户端获取的信息
type Import struct {
	Call string            `json:"call"`
	Para map[string]string `json:"param"`
}

// 保管将发给客户端的信息
type Export struct {
	Err string            `json:"error,omitempty"`
	Ans map[string]string `json:"answer"`
}

// 函数运行的环境
type Context struct {
	Hold interface{} // 本地信息
	Import
	Export
}

所有控件都包含有Common字段,Common字段如下:

type Common struct {
    Id, Value     string
    Left, Top     int
    Width, Height int
    Do            func(*Context)
}

控件的操作函数func(*Context)可以处理输入生成输出。输入可以从Call和Para字段获取 ;输出应写入Ans和Err字段。只需要需要修改的控件和属性写入Ans字段,如果出错可以 将错误信息写入Err字段。Hold字段用于保管一些持久性信息。

因此,大小、位置、ID、值和操作函数是所有控件都有的属性。

Param类型即map[string]string,用来供函数获取参数信息,里面是控件的id到值的映射。

注意,复选框的值是被选择的各项的值用"|"连接起来的结果。

使用时,会用到NewHandler函数:

func NewHandler(*Window, string, func()interface{}) *http.ServeMux

该函数会返回一个handler,用它即可实现与页面的交互。

第一个参数表示窗口对象,其内包括多个控件。

第二个参数表示页面文件,如果不存在,函数会自动根据第一个参数生成一个该名字的文件; 如果已经存在,则会使用该文件(不做修改)。这是为了让使用者可以自行设计页面细节, 只要不修改控件的id和值,就不会对交互造成影响。

最后一个参数用于生成连接专一的内部参数,该参数会保存如Context.Hold字段,可以用类 型推断取出。建议该函数参数返回指针。

用法举例:

http.ListenAndServe(":9999", webui.NewHandler(w, "index.htm", nil))