// Main entry and GUI construction func main() { LANG = queryRegLayoutId(LANG_ID) var ( mw *walk.MainWindow currentLayout = getKeyboardLayout() // Get current system layout. layoutPresent = checkLanguage() // Check if installed language is present and can be loaded. triggered = true infoText string ldtMain *walk.LineEdit btnMain *walk.PushButton ) if layoutPresent { infoText = INFO_TEXT } else { infoText = "The layout does not seem to be present on your system. Please install it first." } MainWindow{ AssignTo: &mw, Title: "kasahorow " + LANG_STRING + " Writer", MaxSize: Size{600, 200}, MinSize: Size{600, 200}, Layout: VBox{}, Children: []Widget{ MultilineLabel{Text: infoText}, LineEdit{AssignTo: &ldtMain}, PushButton{ AssignTo: &btnMain, Enabled: layoutPresent, Text: "Switch back to default layout.", OnClicked: func() { if triggered { triggered = false activateKeyboardLayout(currentLayout, KFL_SETFORPROCESS) btnMain.SetText("Switch to " + LANG_STRING + ".") } else { triggered = true loadLanguage() btnMain.SetText("Switch back to default layout.") } }, }, }, }.Create() if layoutPresent { mw.Synchronize(loadLanguage) // Load new layout in main GUI thread. } ic, _ := walk.NewIconFromResource("kasahorow") mw.SetIcon(ic) mw.Run() }
func main() { LoadData() chEnd = make(chan bool) var emails, body, msgbox *walk.TextEdit var user, password, host, subject *walk.LineEdit var startBtn *walk.PushButton MainWindow{ Title: "邮件群发器 By 一曲忧伤", MinSize: Size{800, 600}, Layout: HBox{}, Children: []Widget{ TextEdit{AssignTo: &emails, Text: SJ.Send, ToolTipText: "待发送邮件列表,每行一个"}, VSplitter{ Children: []Widget{ LineEdit{AssignTo: &user, Text: SJ.Name, CueBanner: "请输入邮箱用户名"}, LineEdit{AssignTo: &password, Text: SJ.Pwd, PasswordMode: true, CueBanner: "请输入邮箱登录密码"}, LineEdit{AssignTo: &host, Text: SJ.Host, CueBanner: "SMTP服务器:端口"}, LineEdit{AssignTo: &subject, Text: SJ.Subject, CueBanner: "请输入邮件主题……"}, TextEdit{AssignTo: &body, Text: SJ.Body, ToolTipText: "请输入邮件内容", ColumnSpan: 2}, TextEdit{AssignTo: &msgbox, ReadOnly: true}, PushButton{ AssignTo: &startBtn, Text: "开始群发", OnClicked: func() { SJ.Name = user.Text() SJ.Pwd = password.Text() SJ.Host = host.Text() SJ.Subject = subject.Text() SJ.Body = body.Text() SJ.Send = emails.Text() SaveData() if runing == false { runing = true startBtn.SetText("停止发送") go sendThread(msgbox, emails) } else { runing = false startBtn.SetText("开始群发") } }, }, }, }, }, }.Run() }
func main() { fout, _ := os.Create("dialer.log") defer fout.Close() bo := bufio.NewWriter(fout) defer bo.Flush() util.INFO.SetOutput(bo) util.ERROR.SetOutput(bo) bin, err := ioutil.ReadFile("config.json") if err == nil { json.Unmarshal(bin, config) } else { util.ERROR.Log(err) err = nil } var usr, pwd *walk.LineEdit var raddr, rusr, rpwd *walk.LineEdit var lb, rb *walk.PushButton var mode *walk.ComboBox var mw *walk.MainWindow var db *walk.DataBinder var laddr, lusr, lpwd *walk.Splitter go func() { for mw == nil { runtime.Gosched() } ic, err := walk.NewIconFromResourceId(6) if err == nil { // func onLoad() { db.SetAutoSubmit(true) mw.SetIcon(ic) switch config.RouterType { case "hiwifi": laddr.SetVisible(true) lusr.SetVisible(false) lpwd.SetVisible(true) case "openwrt": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) case "asus": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) default: laddr.SetVisible(false) lusr.SetVisible(false) lpwd.SetVisible(false) } mw.SetSize(walk.Size{0, 0}) // } } }() MainWindow{ AssignTo: &mw, Title: TITLE, MinSize: Size{340, 0}, Layout: VBox{}, DataBinder: DataBinder{ AssignTo: &db, DataSource: config, }, Children: []Widget{ HSplitter{ Children: []Widget{ Label{Text: "用户名", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("Username"), AssignTo: &usr, MaxSize: Size{0, 20}}, }, MaxSize: Size{0, 20}, }, HSplitter{ Children: []Widget{ Label{Text: "密码", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("Password"), AssignTo: &pwd, MaxSize: Size{0, 20}, PasswordMode: true, OnMouseDown: func(x, y int, button walk.MouseButton) { pwd.SetPasswordMode(false) }, OnMouseUp: func(x, y int, button walk.MouseButton) { pwd.SetPasswordMode(true) }, }, }, MaxSize: Size{0, 20}, }, HSplitter{ Children: []Widget{ Label{Text: "模式", MaxSize: Size{60, 20}}, ComboBox{AssignTo: &mode, Editable: true, Value: Bind("RouterType"), Model: []string{"local", "10.0.x.x(手动填写)", "openwrt", "hiwifi", "asus"}, MaxSize: Size{0, 20}, OnCurrentIndexChanged: func() { switch mode.CurrentIndex() { case 2: //"openwrt": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) case 3: //"hiwifi": config.RouterAddr = "192.168.199.1" laddr.SetVisible(true) lusr.SetVisible(false) lpwd.SetVisible(true) case 4: //"asus": laddr.SetVisible(true) lusr.SetVisible(true) lpwd.SetVisible(true) default: laddr.SetVisible(false) lusr.SetVisible(false) lpwd.SetVisible(false) } mw.SetSize(walk.Size{0, 0}) }, }, }, MaxSize: Size{0, 20}, }, HSplitter{ AssignTo: &laddr, Children: []Widget{ Label{Text: "路由地址", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("RouterAddr"), AssignTo: &raddr, MaxSize: Size{0, 20}}, }, MaxSize: Size{0, 20}, }, HSplitter{ AssignTo: &lusr, Children: []Widget{ Label{Text: "路由用户名", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("RouterUser"), AssignTo: &rusr, MaxSize: Size{0, 20}}, }, MaxSize: Size{0, 20}, }, HSplitter{ AssignTo: &lpwd, Children: []Widget{ Label{Text: "路由密码", MaxSize: Size{60, 20}}, LineEdit{Text: Bind("RouterPwd"), AssignTo: &rpwd, MaxSize: Size{0, 20}, PasswordMode: true, OnMouseDown: func(x, y int, button walk.MouseButton) { rpwd.SetPasswordMode(false) }, OnMouseUp: func(x, y int, button walk.MouseButton) { rpwd.SetPasswordMode(true) }, }, }, MaxSize: Size{0, 20}, }, HSplitter{ Children: []Widget{ PushButton{ AssignTo: &lb, Text: "开始连接", OnClicked: func() { if mode.Text() == "10.0.x.x(手动填写)" { walk.MsgBox(mw, "请填写IP", "手动填写需要自己获取IP 你可在路由器中自己查找 本地拨号请用local", walk.MsgBoxOK) return } lb.SetText("连接中...") lb.SetEnabled(false) rb.SetEnabled(false) go func() { d := netdialer.NewDialer(usr.Text(), pwd.Text()) d.UserIP = selectMode(mode.Text()) if d.UserIP == "" { walk.MsgBox(mw, "连接失败", "请检查设置", walk.MsgBoxOK) d = nil return } d.ConnectDirect() mw.SetTitle(TITLE + " [" + d.UserIP + "]") d = nil lb.SetEnabled(true) rb.SetEnabled(true) lb.SetText("开始连接") if err == nil { walk.MsgBox(mw, "连接成功", "感谢使用", walk.MsgBoxOK) util.INFO.Log("连接成功: 感谢使用") } else { walk.MsgBox(mw, "连接失败", err.Error(), walk.MsgBoxOK) util.INFO.Log("连接失败: ", err.Error()) } }() }, }, PushButton{ AssignTo: &rb, Text: "断开连接", OnClicked: func() { if mode.Text() == "10.0.x.x(手动填写)" { walk.MsgBox(mw, "请填写IP", "手动填写需要自己获取IP 你可在路由器中自己查找", walk.MsgBoxOK) return } rb.SetText("断开中...") lb.SetEnabled(false) rb.SetEnabled(false) go func() { d := netdialer.NewDialer(usr.Text(), pwd.Text()) d.UserIP = selectMode(mode.Text()) if d.UserIP == "" { walk.MsgBox(mw, "连接失败", "请检查设置", walk.MsgBoxOK) util.INFO.Log("连接失败: 请检查设置") d = nil return } err := d.DisconnectDirect() mw.SetTitle(TITLE + " [" + d.UserIP + "]") d = nil lb.SetEnabled(true) rb.SetEnabled(true) rb.SetText("断开连接") if err == nil { walk.MsgBox(mw, "断开成功", "感谢使用", walk.MsgBoxOK) util.INFO.Log("断开成功: 感谢使用") } else { walk.MsgBox(mw, "断开失败", err.Error(), walk.MsgBoxOK) util.INFO.Log("断开失败: ", err.Error()) } }() }, }, }, MaxSize: Size{0, 20}, }, }, }.Run() saveConfig(config) bo.Flush() }
func main() { mw := new(MyMainWindow) var openButton *walk.PushButton var hostEdit, destEdit, portEdit *walk.LineEdit var logTextEdit *walk.TextEdit closeMessage := make(chan int) MainWindow{ AssignTo: &mw.MainWindow, Title: "SCREAMO", MinSize: Size{600, 400}, Layout: VBox{}, Children: []Widget{ Composite{ Layout: Grid{}, Children: []Widget{ Label{ Row: 0, Column: 0, Text: "JmsHost:", }, LineEdit{ AssignTo: &hostEdit, Row: 0, Column: 1, Text: "192.168.1.105", }, Label{ Row: 1, Column: 0, Text: "JmsDest:", }, LineEdit{ AssignTo: &destEdit, Row: 1, Column: 1, Text: "/topic/IDC.QuoteExchange.bond2app", }, Label{ Row: 2, Column: 0, Text: "JmsPort:", }, LineEdit{ AssignTo: &portEdit, Row: 2, Column: 1, Text: "61612", }, }, }, Composite{ Layout: HBox{}, Children: []Widget{ PushButton{ AssignTo: &openButton, Text: "Open", OnClicked: func() { if openButton.Text() == "Open" { go openstomp(hostEdit.Text(), destEdit.Text(), portEdit.Text(), logTextEdit, closeMessage) openButton.SetText("Close") } else { go stopstomp(closeMessage) openButton.SetText("Open") } }, }, PushButton{ Text: "Clear", OnClicked: func() { logTextEdit.SetText("") }, }, }, }, TextEdit{ AssignTo: &logTextEdit, MinSize: Size{100, 50}, Text: "", ReadOnly: true, }, }, }.Run() }
func main() { MustRegisterCondition("isSpecialMode", isSpecialMode) mw := new(MyMainWindow) var openAction, showAboutBoxAction *walk.Action var recentMenu *walk.Menu var toggleSpecialModePB *walk.PushButton if err := (MainWindow{ AssignTo: &mw.MainWindow, Title: "Walk Actions Example", MenuItems: []MenuItem{ Menu{ Text: "&File", Items: []MenuItem{ Action{ AssignTo: &openAction, Text: "&Open", Image: "../img/open.png", Enabled: Bind("enabledCB.Checked"), Visible: Bind("openVisibleCB.Checked"), Shortcut: Shortcut{walk.ModControl, walk.KeyO}, OnTriggered: mw.openAction_Triggered, }, Menu{ AssignTo: &recentMenu, Text: "Recent", }, Separator{}, Action{ Text: "E&xit", OnTriggered: func() { mw.Close() }, }, }, }, Menu{ Text: "&Help", Items: []MenuItem{ Action{ AssignTo: &showAboutBoxAction, Text: "About", OnTriggered: mw.showAboutBoxAction_Triggered, }, }, }, }, ToolBarItems: []MenuItem{ ActionRef{&openAction}, Menu{ Text: "New A", Image: "../img/document-new.png", Items: []MenuItem{ Action{ Text: "A", OnTriggered: mw.newAction_Triggered, }, Action{ Text: "B", OnTriggered: mw.newAction_Triggered, }, Action{ Text: "C", OnTriggered: mw.newAction_Triggered, }, }, OnTriggered: mw.newAction_Triggered, }, Separator{}, Menu{ Text: "View", Image: "../img/document-properties.png", Items: []MenuItem{ Action{ Text: "X", OnTriggered: mw.changeViewAction_Triggered, }, Action{ Text: "Y", OnTriggered: mw.changeViewAction_Triggered, }, Action{ Text: "Z", OnTriggered: mw.changeViewAction_Triggered, }, }, }, Separator{}, Action{ Text: "Special", Image: "../img/system-shutdown.png", Enabled: Bind("isSpecialMode && enabledCB.Checked"), OnTriggered: mw.specialAction_Triggered, }, }, ContextMenuItems: []MenuItem{ ActionRef{&showAboutBoxAction}, }, MinSize: Size{300, 200}, Layout: VBox{}, Children: []Widget{ CheckBox{ Name: "enabledCB", Text: "Open / Special Enabled", Checked: true, }, CheckBox{ Name: "openVisibleCB", Text: "Open Visible", Checked: true, }, PushButton{ AssignTo: &toggleSpecialModePB, Text: "Enable Special Mode", OnClicked: func() { isSpecialMode.SetSatisfied(!isSpecialMode.Satisfied()) if isSpecialMode.Satisfied() { toggleSpecialModePB.SetText("Disable Special Mode") } else { toggleSpecialModePB.SetText("Enable Special Mode") } }, }, }, }.Create()); err != nil { log.Fatal(err) } addRecentFileActions := func(texts ...string) { for _, text := range texts { a := walk.NewAction() a.SetText(text) a.Triggered().Attach(mw.openAction_Triggered) recentMenu.Actions().Add(a) } } addRecentFileActions("Foo", "Bar", "Baz") mw.Run() }
func main() { LoadData() chEnd = make(chan bool) var emails, body, msgbox *walk.TextEdit var user, password, host, subject *walk.LineEdit var db *walk.DataBinder var ep walk.ErrorPresenter var startBtn *walk.PushButton mw := new(MyMainWindow) mw.SetFixedSize(false) mw.SetMaximizeBox(false) MainWindow{ Title: "邮件群发器 By 一曲忧伤", MinSize: Size{300, 200}, AssignTo: &mw.MainWindow, DataBinder: DataBinder{ AssignTo: &db, DataSource: SJ, ErrorPresenter: ErrorPresenterRef{&ep}, }, ScreenCenter: true, Layout: HBox{}, Children: []Widget{ TextEdit{ AssignTo: &emails, Text: SJ.Send, ToolTipText: "待发送邮件列表,每行一个", }, VSplitter{ Children: []Widget{ LineEdit{ AssignTo: &user, Text: Bind(SJ.Name, Regexp{"^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$"}), CueBanner: "请输入邮箱用户名", }, LineEdit{ AssignTo: &password, Text: SJ.Pwd, PasswordMode: true, CueBanner: "请输入邮箱登录密码", }, LineEdit{ AssignTo: &host, Text: Bind(SJ.Host, Regexp{"^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$"}), CueBanner: "SMTP服务器:端口", }, LineEdit{AssignTo: &subject, MaxLength: 10, Text: Bind(SJ.Subject, Regexp{"^([a-z0-9A-Z])+$"}), CueBanner: "请输入邮件主题……", }, TextEdit{AssignTo: &body, Text: Bind(SJ.Body, SelRequired{}), ToolTipText: "请输入邮件内容", ColumnSpan: 2, }, TextEdit{AssignTo: &msgbox, ReadOnly: true, }, LineErrorPresenter{ AssignTo: &ep, ColumnSpan: 2, ToolTipText: "测试", }, PushButton{ AssignTo: &startBtn, Text: "开始群发", OnClicked: func() { if err := db.Submit(); err == nil { SJ.Name = user.Text() SJ.Pwd = password.Text() SJ.Host = host.Text() SJ.Subject = subject.Text() SJ.Body = body.Text() SJ.Send = emails.Text() SaveData() if runing == false { runing = true startBtn.SetText("停止发送") go sendThread(msgbox, emails) } else { runing = false startBtn.SetText("开始群发") } } else { return } }, }, }, }, }, }.Run() }