Ejemplo n.º 1
0
func (w *Dialog) init(owner walk.RootWidget) (err error) {
	if w.Dialog, err = walk.NewDialog(owner); err != nil {
		return err
	}

	succeeded := false
	defer func() {
		if !succeeded {
			w.Dispose()
		}
	}()

	var font *walk.Font
	if font == nil {
		font = nil
	}

	w.SetName("Dialog")
	if err := w.SetClientSize(walk.Size{400, 300}); err != nil {
		return err
	}
	if err := w.SetTitle(`Dialog`); err != nil {
		return err
	}

	// Tab order

	succeeded = true

	return nil
}
Ejemplo n.º 2
0
func (d Dialog) Create(owner walk.RootWidget) error {
	w, err := walk.NewDialog(owner)
	if err != nil {
		return err
	}

	tlwi := topLevelWindowInfo{
		Name:               d.Name,
		Disabled:           d.Disabled,
		Hidden:             d.Hidden,
		Font:               d.Font,
		MinSize:            d.MinSize,
		MaxSize:            d.MaxSize,
		ContextMenuActions: d.ContextMenuActions,
		DataBinder:         d.DataBinder,
		Layout:             d.Layout,
		Children:           d.Children,
	}

	return InitWidget(tlwi, w, func() error {
		if err := w.SetTitle(d.Title); err != nil {
			return err
		}

		if err := w.SetSize(d.Size.toW()); err != nil {
			return err
		}

		if d.DefaultButton != nil {
			if err := w.SetDefaultButton(*d.DefaultButton); err != nil {
				return err
			}
		}
		if d.CancelButton != nil {
			if err := w.SetCancelButton(*d.CancelButton); err != nil {
				return err
			}
		}

		if d.AssignTo != nil {
			*d.AssignTo = w
		}

		return nil
	})
}
Ejemplo n.º 3
0
Archivo: dialog.go Proyecto: etel/walk
func (d Dialog) Create(parent walk.Container) error {
	var owner walk.RootWidget
	if o, ok := parent.(walk.RootWidget); ok {
		owner = o
	}

	w, err := walk.NewDialog(owner)
	if err != nil {
		return err
	}

	return InitWidget(d, w, func() error {
		if err := w.SetTitle(d.Title); err != nil {
			return err
		}

		if err := w.SetSize(d.Size.toW()); err != nil {
			return err
		}

		if d.DefaultButton != nil {
			if err := w.SetDefaultButton(*d.DefaultButton); err != nil {
				return err
			}
		}
		if d.CancelButton != nil {
			if err := w.SetCancelButton(*d.CancelButton); err != nil {
				return err
			}
		}

		if d.AssignTo != nil {
			*d.AssignTo = w
		}

		return nil
	})
}
Ejemplo n.º 4
0
func (d Dialog) Create(owner walk.Form) error {
	w, err := walk.NewDialog(owner)
	if err != nil {
		return err
	}

	tlwi := topLevelWindowInfo{
		Name:             d.Name,
		Font:             d.Font,
		ToolTipText:      "",
		MinSize:          d.MinSize,
		MaxSize:          d.MaxSize,
		ContextMenuItems: d.ContextMenuItems,
		DataBinder:       d.DataBinder,
		Layout:           d.Layout,
		Children:         d.Children,
		OnKeyDown:        d.OnKeyDown,
		OnKeyPress:       d.OnKeyPress,
		OnKeyUp:          d.OnKeyUp,
		OnMouseDown:      d.OnMouseDown,
		OnMouseMove:      d.OnMouseMove,
		OnMouseUp:        d.OnMouseUp,
		OnSizeChanged:    d.OnSizeChanged,
	}

	var db *walk.DataBinder
	if d.DataBinder.AssignTo == nil {
		d.DataBinder.AssignTo = &db
	}

	builder := NewBuilder(nil)

	w.SetSuspended(true)
	builder.Defer(func() error {
		w.SetSuspended(false)
		return nil
	})

	return builder.InitWidget(tlwi, w, func() error {
		if err := w.SetTitle(d.Title); err != nil {
			return err
		}

		if err := w.SetSize(d.Size.toW()); err != nil {
			return err
		}

		if d.DefaultButton != nil {
			if err := w.SetDefaultButton(*d.DefaultButton); err != nil {
				return err
			}

			if db := *d.DataBinder.AssignTo; db != nil {
				(*d.DefaultButton).SetEnabled(db.CanSubmit())

				db.CanSubmitChanged().Attach(func() {
					(*d.DefaultButton).SetEnabled(db.CanSubmit())
				})
			}
		}
		if d.CancelButton != nil {
			if err := w.SetCancelButton(*d.CancelButton); err != nil {
				return err
			}
		}

		if d.AssignTo != nil {
			*d.AssignTo = w
		}

		return nil
	})
}
Ejemplo n.º 5
0
func (w *MyDialog) init(owner walk.RootWidget) (err error) {
	if w.Dialog, err = walk.NewDialog(owner); err != nil {
		return err
	}

	succeeded := false
	defer func() {
		if !succeeded {
			w.Dispose()
		}
	}()

	var font *walk.Font
	if font == nil {
		font = nil
	}

	w.SetName("Dialog")
	if err := w.SetClientSize(walk.Size{598, 300}); err != nil {
		return err
	}
	if err := w.SetTitle(`Dialog`); err != nil {
		return err
	}

	// noProgressBtn
	if w.ui.noProgressBtn, err = walk.NewPushButton(w); err != nil {
		return err
	}
	w.ui.noProgressBtn.SetName("noProgressBtn")
	if err := w.ui.noProgressBtn.SetBounds(walk.Rectangle{40, 60, 161, 23}); err != nil {
		return err
	}
	if err := w.ui.noProgressBtn.SetText(`NoProgress`); err != nil {
		return err
	}
	if err := w.ui.noProgressBtn.SetMinMaxSize(walk.Size{0, 0}, walk.Size{161, 16777215}); err != nil {
		return err
	}

	// indeterminateBtn
	if w.ui.indeterminateBtn, err = walk.NewPushButton(w); err != nil {
		return err
	}
	w.ui.indeterminateBtn.SetName("indeterminateBtn")
	if err := w.ui.indeterminateBtn.SetBounds(walk.Rectangle{40, 90, 161, 23}); err != nil {
		return err
	}
	if err := w.ui.indeterminateBtn.SetText(`Indeterminate`); err != nil {
		return err
	}
	if err := w.ui.indeterminateBtn.SetMinMaxSize(walk.Size{0, 0}, walk.Size{161, 16777215}); err != nil {
		return err
	}

	// normalBtn
	if w.ui.normalBtn, err = walk.NewPushButton(w); err != nil {
		return err
	}
	w.ui.normalBtn.SetName("normalBtn")
	if err := w.ui.normalBtn.SetBounds(walk.Rectangle{40, 120, 161, 23}); err != nil {
		return err
	}
	if err := w.ui.normalBtn.SetText(`Normal`); err != nil {
		return err
	}
	if err := w.ui.normalBtn.SetMinMaxSize(walk.Size{0, 0}, walk.Size{161, 16777215}); err != nil {
		return err
	}

	// errBtn
	if w.ui.errBtn, err = walk.NewPushButton(w); err != nil {
		return err
	}
	w.ui.errBtn.SetName("errBtn")
	if err := w.ui.errBtn.SetBounds(walk.Rectangle{40, 150, 161, 23}); err != nil {
		return err
	}
	if err := w.ui.errBtn.SetText(`Error`); err != nil {
		return err
	}

	// pausedBtn
	if w.ui.pausedBtn, err = walk.NewPushButton(w); err != nil {
		return err
	}
	w.ui.pausedBtn.SetName("pausedBtn")
	if err := w.ui.pausedBtn.SetBounds(walk.Rectangle{40, 180, 161, 23}); err != nil {
		return err
	}
	if err := w.ui.pausedBtn.SetText(`Paused`); err != nil {
		return err
	}

	// startBtn
	if w.ui.startBtn, err = walk.NewPushButton(w); err != nil {
		return err
	}
	w.ui.startBtn.SetName("startBtn")
	if err := w.ui.startBtn.SetBounds(walk.Rectangle{290, 180, 75, 23}); err != nil {
		return err
	}
	if err := w.ui.startBtn.SetText(`START`); err != nil {
		return err
	}

	// Tab order

	succeeded = true

	return nil
}
Ejemplo n.º 6
0
func (mw *MyDialog) init(owner walk.Form) (err error) {
	// 设置最小化
	mw.SetMinimizeBox(true)
	// 禁用最大化
	mw.SetMaximizeBox(false)
	// 设置窗口固定
	mw.SetFixedSize(true)
	// // 设置窗口前置
	// mw.SetWindowPos(true)

	mw.Dialog, err = walk.NewDialog(owner)
	mw.checkError(err)

	succeeded := false
	defer func() {
		if !succeeded {
			mw.Dispose()
		}
	}()

	// 设置主窗体大小
	err = mw.SetClientSize(walk.Size{700, 560})
	mw.checkError(err)

	// 设置主窗体标题
	err = mw.SetTitle("iMan-打包工具   V【" + _VERSION_ + "】")
	mw.checkError(err)

	// 设置
	mw.ui.SettingMenu, _ = walk.NewMenu()
	mw.ui.SettingAction = walk.NewMenuAction(mw.ui.SettingMenu)
	mw.ui.SettingAction.SetText("设置")

	mw.ui.ServerAction = walk.NewAction()
	mw.ui.ServerAction.SetText("服务器")

	mw.ui.SettingMenu.Actions().Add(mw.ui.ServerAction)

	// 帮助
	mw.ui.HelpMenu, _ = walk.NewMenu()
	mw.ui.HelpAction = walk.NewMenuAction(mw.ui.HelpMenu)
	mw.ui.HelpAction.SetText("帮助")

	mw.ui.AboutAction = walk.NewAction()
	mw.ui.AboutAction.SetText("关于")

	mw.ui.HelpMenu.Actions().Add(mw.ui.AboutAction)

	// 菜单配置
	mw.Menu().Actions().Add(mw.ui.SettingAction)
	mw.Menu().Actions().Add(mw.ui.HelpAction)

	// 设置字体和图标
	fountTitle, _ := walk.NewFont("幼圆", 10, walk.FontBold)
	otherFont, _ := walk.NewFont("幼圆", 10, 0)

	// 开始打包
	mw.ui.StartPackingBtn, err = walk.NewPushButton(mw)
	mw.checkError(err)

	mw.ui.StartPackingBtn.SetText("开始打包")

	mw.ui.StartPackingBtn.SetBounds(walk.Rectangle{310, 20, 75, 30})

	// 版本配置
	mw.ui.VersionGb, err = walk.NewGroupBox(mw)
	mw.checkError(err)
	mw.ui.VersionGb.SetTitle("版本配置")
	mw.ui.VersionGb.SetFont(otherFont)

	err = mw.ui.VersionGb.SetBounds(walk.Rectangle{10, 60, 330, 260})
	mw.checkError(err)

	// 版本类型
	mw.ui.VersionTypeLb, err = walk.NewLabel(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.VersionTypeLb.SetText("版本类型:")
	mw.ui.VersionTypeLb.SetFont(fountTitle)

	mw.ui.VersionTypeLb.SetBounds(walk.Rectangle{10, 20, 70, 25})

	// 测试版
	mw.ui.VersionTestRadio, err = walk.NewRadioButton(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.VersionTestRadio.SetText("测试版")

	mw.ui.VersionTestRadio.SetBounds(walk.Rectangle{110, 20, 60, 25})
	mw.ui.VersionTestRadio.SetChecked(true)

	// 正式版
	mw.ui.VersionOffRadio, err = walk.NewRadioButton(mw.ui.VersionGb)
	mw.checkError(err)
	mw.ui.VersionOffRadio.SetText("正式版")

	mw.ui.VersionOffRadio.SetBounds(walk.Rectangle{180, 20, 70, 25})

	// 主版本号
	mw.ui.MasterVersionLb, err = walk.NewLabel(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.MasterVersionLb.SetText("主版本号:")
	mw.ui.MasterVersionLb.SetFont(fountTitle)

	mw.ui.MasterVersionLb.SetBounds(walk.Rectangle{10, 60, 70, 25})

	// 主版本号内容
	mw.ui.MasterVersionLe, err = walk.NewLineEdit(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.MasterVersionLe.SetBounds(walk.Rectangle{110, 60, 60, 25})

	// 生成版本号
	mw.ui.PackVersionLb, err = walk.NewLabel(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.PackVersionLb.SetText("生成版本:")
	mw.ui.PackVersionLb.SetFont(fountTitle)

	mw.ui.PackVersionLb.SetBounds(walk.Rectangle{10, 100, 70, 25})

	// 生成版本号内容
	mw.ui.PackVersionLe, err = walk.NewLineEdit(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.PackVersionLe.SetEnabled(false)

	mw.ui.PackVersionLe.SetBounds(walk.Rectangle{110, 100, 140, 25})

	// PC助手
	mw.ui.PcHelperLb, err = walk.NewLabel(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.PcHelperLb.SetText("PC助手:")
	mw.ui.PcHelperLb.SetFont(fountTitle)

	mw.ui.PcHelperLb.SetBounds(walk.Rectangle{10, 140, 70, 25})

	// PC助手上传路径
	mw.ui.PcHelperLe, err = walk.NewLineEdit(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.PcHelperLe.SetBounds(walk.Rectangle{110, 140, 150, 25})

	// PC助手上传按钮
	mw.ui.PcUploadBtn, err = walk.NewPushButton(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.PcUploadBtn.SetText("上传")
	mw.ui.PcUploadBtn.SetBounds(walk.Rectangle{270, 140, 50, 25})

	// Android助手
	mw.ui.AndroidHelperLb, err = walk.NewLabel(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.AndroidHelperLb.SetText("Android助手:")
	mw.ui.AndroidHelperLb.SetFont(fountTitle)

	mw.ui.AndroidHelperLb.SetBounds(walk.Rectangle{10, 180, 100, 25})

	// Android助手上传路径
	mw.ui.AndroidHelperLe, err = walk.NewLineEdit(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.AndroidHelperLe.SetBounds(walk.Rectangle{110, 180, 150, 25})

	// Android助手上传按钮
	mw.ui.AndUploadBtn, err = walk.NewPushButton(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.AndUploadBtn.SetText("上传")

	mw.ui.AndUploadBtn.SetBounds(walk.Rectangle{270, 180, 50, 25})

	// Web 数据库
	mw.ui.WebSqlLb, err = walk.NewLabel(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.WebSqlLb.SetText("Web 数据库:")
	mw.ui.WebSqlLb.SetFont(fountTitle)

	mw.ui.WebSqlLb.SetBounds(walk.Rectangle{10, 220, 90, 25})

	// Web 数据库上传路径
	mw.ui.WebSqlLe, err = walk.NewLineEdit(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.WebSqlLe.SetBounds(walk.Rectangle{110, 220, 150, 25})

	// Web 数据库上传按钮
	mw.ui.WebSqlBtn, err = walk.NewPushButton(mw.ui.VersionGb)
	mw.checkError(err)

	mw.ui.WebSqlBtn.SetText("上传")

	mw.ui.WebSqlBtn.SetBounds(walk.Rectangle{270, 220, 50, 25})

	// 打包内容配置
	mw.ui.PackGb, err = walk.NewGroupBox(mw)
	mw.checkError(err)

	mw.ui.PackGb.SetTitle("打包内容配置")
	mw.ui.PackGb.SetFont(otherFont)

	mw.ui.PackGb.SetBounds(walk.Rectangle{355, 60, 335, 260})

	// 全选
	mw.ui.CheckAllLb, err = walk.NewLabel(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.CheckAllLb.SetText("全选:")
	mw.ui.CheckAllLb.SetFont(fountTitle)

	mw.ui.CheckAllLb.SetBounds(walk.Rectangle{10, 20, 55, 25})

	// 全选框
	mw.ui.CheckAllCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)
	mw.ui.CheckAllCb.SetVisible(true)

	mw.ui.CheckAllCb.SetBounds(walk.Rectangle{80, 20, 70, 25})

	// 服务器
	mw.ui.ServerLb, err = walk.NewLabel(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.ServerLb.SetText("服务器:")
	mw.ui.ServerLb.SetFont(fountTitle)

	mw.ui.ServerLb.SetBounds(walk.Rectangle{10, 50, 55, 25})

	// Java Web复选框
	mw.ui.JavaWebCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.JavaWebCb.SetText("Java Web")

	mw.ui.JavaWebCb.SetBounds(walk.Rectangle{80, 50, 80, 25})

	// Web 数据库复选框
	mw.ui.WebSqlCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.WebSqlCb.SetText("Web 数据库")

	mw.ui.WebSqlCb.SetBounds(walk.Rectangle{170, 50, 90, 25})

	// PC助手
	mw.ui.PcHelperCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.PcHelperCb.SetText("PC助手")

	mw.ui.PcHelperCb.SetBounds(walk.Rectangle{80, 90, 60, 25})

	// Android助手
	mw.ui.AndroidHelperCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.AndroidHelperCb.SetText("Android助手")

	mw.ui.AndroidHelperCb.SetBounds(walk.Rectangle{170, 90, 90, 25})

	// 控制器
	mw.ui.ControlLb, err = walk.NewLabel(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.ControlLb.SetText("控制器:")
	mw.ui.ControlLb.SetFont(fountTitle)

	mw.ui.ControlLb.SetBounds(walk.Rectangle{10, 130, 55, 25})

	// Linux knl
	mw.ui.LinuxKnlCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.LinuxKnlCb.SetText("Linux Knl")

	mw.ui.LinuxKnlCb.SetBounds(walk.Rectangle{80, 130, 80, 25})

	// Linux App
	mw.ui.LinuxAppCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.LinuxAppCb.SetText("Linux App")

	mw.ui.LinuxAppCb.SetBounds(walk.Rectangle{170, 130, 80, 25})

	// Linux Ruby
	mw.ui.LinuxRubyCb, err = walk.NewCheckBox(mw.ui.PackGb)
	mw.checkError(err)

	mw.ui.LinuxRubyCb.SetText("Linux Ruby")

	mw.ui.LinuxRubyCb.SetBounds(walk.Rectangle{80, 170, 90, 25})

	// 打包日志
	mw.ui.PackLogLb, err = walk.NewLabel(mw)
	mw.checkError(err)

	mw.ui.PackLogLb.SetText("打包日志")
	mw.ui.PackLogLb.SetFont(fountTitle)

	mw.ui.PackLogLb.SetBounds(walk.Rectangle{20, 330, 60, 20})

	// 日志输出
	mw.ui.lv, err = NewLogView(mw)
	mw.checkError(err)

	err = mw.ui.lv.SetBounds(walk.Rectangle{10, 360, 680, 190})
	mw.checkError(err)

	log.SetOutput(mw.ui.lv)

	// img, _ = walk.NewIconFromResourceId(7)
	// mw.ui.browseBtn.SetImage(img)
	// mw.ui.browseBtn.SetImageAboveText(false)
	// mw.ui.browseBtn.SetBackground(bg)

	// reader, _ := os.Open("../../img/folder_add.png")
	// add, _, _ := image.Decode(reader)
	// var img walk.Image
	// img, _ = walk.NewBitmapFromImage(add)

	// mw.ui.browseBtn.SetImage(img)

	// img, _ = walk.NewImageFromFile("../../img/arrow_divide.png")
	// mw.ui.uploadBtn.SetImage(img)

	succeeded = true

	return nil
}
Ejemplo n.º 7
0
func (mw *MyDialog) init(owner walk.Form) (err error) {
	// 设置最小化
	mw.SetMinimizeBox(true)
	// 禁用最大化
	mw.SetMaximizeBox(false)
	// 窗口屏幕居中
	mw.SetFixedSize(true)

	mw.Dialog, err = walk.NewDialog(owner)
	mw.checkError(err)

	succeeded := false
	defer func() {
		if !succeeded {
			mw.Dispose()
		}
	}()

	// 设置主窗体大小
	mw.SetClientSize(walk.Size{600, 450})
	mw.checkError(err)

	// 设置主窗体标题
	mw.SetTitle("邮件群发-by Cody.Guo")
	mw.checkError(err)

	// 设置上传组合窗体
	mw.ui.mailListGb, err = walk.NewGroupBox(mw)
	mw.checkError(err)

	err = mw.ui.mailListGb.SetTitle("发送邮件列表")
	mw.checkError(err)

	err = mw.ui.mailListGb.SetBounds(walk.Rectangle{7, 8, 165, 434})
	mw.checkError(err)

	// 邮件编辑框
	mw.ui.mailListLe, err = walk.NewTextEdit(mw.ui.mailListGb)
	mw.checkError(err)

	err = mw.ui.mailListLe.SetBounds(walk.Rectangle{7, 25, 155, 405})
	mw.checkError(err)

	// 邮件服务器配置
	mw.ui.mailServerGb, err = walk.NewGroupBox(mw)
	mw.checkError(err)
	err = mw.ui.mailServerGb.SetTitle("邮件服务器配置")
	mw.checkError(err)
	err = mw.ui.mailServerGb.SetBounds(walk.Rectangle{185, 8, 405, 113})
	mw.checkError(err)

	// 用户名
	mw.ui.userNameLb, err = walk.NewLabel(mw.ui.mailServerGb)
	mw.checkError(err)
	err = mw.ui.userNameLb.SetText("用户名:")
	mw.checkError(err)
	err = mw.ui.userNameLb.SetBounds(walk.Rectangle{8, 20, 80, 20})
	mw.checkError(err)

	// 用户名编辑框
	mw.ui.userNameLe, err = walk.NewLineEdit(mw.ui.mailServerGb)
	mw.checkError(err)
	mw.ui.userNameLe.SetText(MS.UserName)

	err = mw.ui.userNameLe.SetBounds(walk.Rectangle{110, 20, 150, 20})
	mw.checkError(err)

	// 密码
	mw.ui.passwdLb, err = walk.NewLabel(mw.ui.mailServerGb)
	mw.checkError(err)

	err = mw.ui.passwdLb.SetText("密码:")
	mw.checkError(err)

	err = mw.ui.passwdLb.SetBounds(walk.Rectangle{8, 50, 80, 20})
	mw.checkError(err)

	// 密码编辑框
	mw.ui.passwdLe, err = walk.NewLineEdit(mw.ui.mailServerGb)
	mw.checkError(err)
	mw.ui.passwdLe.SetText(MS.Passwd)

	err = mw.ui.passwdLe.SetBounds(walk.Rectangle{110, 50, 150, 20})
	mw.checkError(err)

	mw.ui.passwdLe.SetPasswordMode(true)

	// SMTP服务器
	mw.ui.smtpLb, err = walk.NewLabel(mw.ui.mailServerGb)
	mw.checkError(err)

	err = mw.ui.smtpLb.SetText("SMTP服务器:")
	mw.checkError(err)

	err = mw.ui.smtpLb.SetBounds(walk.Rectangle{8, 80, 90, 20})
	mw.checkError(err)

	// // SMTP服务器编辑框
	mw.ui.smtpLe, err = walk.NewLineEdit(mw.ui.mailServerGb)
	mw.checkError(err)
	mw.ui.smtpLe.SetText(MS.Smtp)

	err = mw.ui.smtpLe.SetBounds(walk.Rectangle{110, 80, 150, 20})
	mw.checkError(err)

	// PORT 25
	mw.ui.portLe, err = walk.NewLineEdit(mw.ui.mailServerGb)
	mw.checkError(err)

	mw.ui.portLe.SetBounds(walk.Rectangle{270, 80, 30, 20})
	mw.ui.portLe.SetText(MS.Port)

	// 发送配置
	mw.ui.mailContentGb, err = walk.NewGroupBox(mw)
	mw.checkError(err)

	mw.ui.mailContentGb.SetTitle("发送配置")
	err = mw.ui.mailContentGb.SetBounds(walk.Rectangle{185, 135, 405, 187})
	mw.checkError(err)

	// 邮件主题
	mw.ui.mailSubLb, err = walk.NewLabel(mw.ui.mailContentGb)
	mw.checkError(err)

	mw.ui.mailSubLb.SetText("邮件主题:")
	err = mw.ui.mailSubLb.SetBounds(walk.Rectangle{8, 20, 80, 20})
	mw.checkError(err)

	// 邮件主题编辑框
	mw.ui.mailSubLe, err = walk.NewLineEdit(mw.ui.mailContentGb)
	mw.checkError(err)
	mw.ui.mailSubLe.SetText(MS.Subject)

	err = mw.ui.mailSubLe.SetBounds(walk.Rectangle{110, 20, 150, 20})
	mw.checkError(err)

	// 邮件内容
	mw.ui.mailBodyLb, err = walk.NewLabel(mw.ui.mailContentGb)
	mw.checkError(err)

	mw.ui.mailBodyLb.SetText("邮件内容:")
	err = mw.ui.mailBodyLb.SetBounds(walk.Rectangle{8, 50, 80, 20})
	mw.checkError(err)

	// 邮件内容编辑框
	mw.ui.mailBodyLe, err = walk.NewTextEdit(mw.ui.mailContentGb)
	mw.checkError(err)

	mw.ui.mailBodyLe.SetText(MS.Body)

	err = mw.ui.mailBodyLe.SetBounds(walk.Rectangle{110, 50, 280, 100})
	mw.checkError(err)

	// 附件
	mw.ui.mailAdjLb, err = walk.NewLabel(mw.ui.mailContentGb)
	mw.checkError(err)

	mw.ui.mailAdjLb.SetText("附件:")
	err = mw.ui.mailAdjLb.SetBounds(walk.Rectangle{8, 160, 80, 20})
	mw.checkError(err)

	// 附件编辑框
	mw.ui.mailAdjLe, err = walk.NewLineEdit(mw.ui.mailContentGb)
	mw.checkError(err)

	err = mw.ui.mailAdjLe.SetBounds(walk.Rectangle{110, 160, 150, 20})
	mw.checkError(err)

	mw.ui.mailAdjLe.SetText(MS.Adjunct)

	mw.ui.mailAdjLe.SetReadOnly(true)

	// 浏览
	mw.ui.browseBtn, err = walk.NewPushButton(mw.ui.mailContentGb)
	mw.checkError(err)
	mw.ui.browseBtn.SetText("浏览")
	err = mw.ui.browseBtn.SetBounds(walk.Rectangle{270, 155, 35, 30})
	mw.checkError(err)

	// 日志
	mw.ui.logLb, err = walk.NewLabel(mw)
	mw.checkError(err)

	mw.ui.logLb.SetText("日志")

	err = mw.ui.logLb.SetBounds(walk.Rectangle{185, 325, 30, 20})
	mw.checkError(err)

	// 日志输出
	mw.ui.lv, err = NewLogView(mw)
	mw.checkError(err)

	err = mw.ui.lv.SetBounds(walk.Rectangle{185, 345, 405, 70})
	mw.checkError(err)

	log.SetOutput(mw.ui.lv)

	// 发送邮件
	mw.ui.sendBtn, err = walk.NewPushButton(mw)
	mw.checkError(err)

	mw.ui.sendBtn.SetText("开始发送")

	err = mw.ui.sendBtn.SetBounds(walk.Rectangle{350, 420, 80, 30})
	mw.checkError(err)

	// // 设置背景
	// color := walk.RGB(255, 0, 0)
	// bg, _ := walk.NewSolidColorBrush(color)
	// mw.SetBackground(bg)

	// 设置字体和图标
	fount, _ := walk.NewFont("宋体", 11, 0)
	mw.SetFont(fount)
	mw.ui.mailListGb.SetFont(fount)
	mw.ui.mailServerGb.SetFont(fount)
	mw.ui.mailContentGb.SetFont(fount)

	succeeded = true

	return nil
}