// package win_main -- главное коно бото-фермы package win_main import ( "fmt" "image/color" "log" "fyne.io/fyne/v2" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" "wartank/pkg/types" ) // WinMain -- главное окно приложения type WinMain struct { fyne.Window serv types.IServer app fyne.App botLogin string botPass string boxLeft *fyne.Container } // NewWinMain -- возвращает новое главное окно func NewWinMain(serv types.IServer) (*WinMain, error) { if serv == nil { return nil, fmt.Errorf("NewWinMain(): IServer==nil") } sf := &WinMain{ Window: serv.Gui().FyneApp().NewWindow("Бото-ферма [wartank.ru]"), app: serv.Gui().FyneApp(), serv: serv, } green := color.NRGBA{R: 0, G: 180, B: 0, A: 255} text1 := canvas.NewText("Список ботов", green) sf.boxLeft = container.NewVBox(text1) { // Получить список всех ботов lstBots := sf.serv.ServBots().ListBot() for _, bot := range lstBots { sf.botLogin = bot.Name() sf.btnAddClick() } } btnAddBot := widget.NewButton("Добавить бота", sf.btnAddClick) btnExit := widget.NewButton("Выход", sf.btnExitClick) boxDown := container.NewHBox(btnAddBot, layout.NewSpacer(), btnExit) boxBorder := container.NewBorder(nil, nil, sf.boxLeft, nil, sf.boxLeft) boxMain := container.NewBorder(nil, boxDown, nil, nil, boxBorder) sf.Resize(fyne.NewSize(640, 480)) sf.SetContent(boxMain) return sf, nil } func (sf *WinMain) btnAddClick() { log.Println("btnAddclick()") winAddBot := sf.app.NewWindow("Новый бот") entLogin := widget.NewEntry() entPass := widget.NewEntry() form := &widget.Form{ Items: []*widget.FormItem{ // we can specify items in the constructor {Text: "Логин", Widget: entLogin}, {Text: "Пароль", Widget: entPass}, }, OnSubmit: func() { // optional, handle form submission sf.botLogin = entLogin.Text sf.botPass = entPass.Text }, } winAddBot.Resize(fyne.NewSize(640, 480)) winAddBot.SetContent(form) winAddBot.Show() } // Добавляет бота на жкран func (sf *WinMain)addBot(){ log.Println("Form submitted:", entLogin.Text) log.Println("multiline:", entPass.Text) winAddBot.Close() btnBot := widget.NewButton(sf.botLogin, sf.btnBotClick()) sf.boxLeft.Add(btnBot) err := sf.serv.ServBots().AddBot(sf.botLogin, sf.botPass) if err != nil { log.Printf("WinMain.btnAddclick().OnSubmit(): in add bot to ferma, err=\n\t%v\n", err) } } func (sf *WinMain) btnBotClick() func() { _botLogin := sf.botLogin _botPass := sf.botPass return func() { log.Printf("btnBotClick().fn(): botName=%q\tbotPass=%q\n", _botLogin, _botPass) } } func (sf *WinMain) btnExitClick() { log.Println("btnExitClick()") sf.app.Quit() }