Skip to content

hydra13142/webui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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))

About

用网页模拟的go语言gui

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages