| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- // 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
- tabBot *container.AppTabs
- }
- // 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.addBot()
- }
- }
- btnAddBot := widget.NewButton("Добавить бота", sf.btnAddClick)
- btnExit := widget.NewButton("Выход", sf.btnExitClick)
- boxDown := container.NewHBox(btnAddBot, layout.NewSpacer(), btnExit)
- entLogin := widget.NewEntry()
- entPass := widget.NewEntry()
- formLogin := &widget.Form{
- Items: []*widget.FormItem{ // we can specify items in the constructor
- {Text: "Логин", Widget: entLogin},
- {Text: "Пароль", Widget: entPass},
- },
- }
- tabLogin := container.NewTabItem("Логин", formLogin)
- sf.tabBot = container.NewAppTabs(tabLogin)
- boxBorder := container.NewBorder(nil, nil, sf.boxLeft, nil, sf.boxLeft, sf.tabBot)
- 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.Close()
- go sf.addBot()
- },
- }
- winAddBot.Resize(fyne.NewSize(640, 480))
- winAddBot.SetContent(form)
- winAddBot.Show()
- }
- // Добавляет бота на жкран
- func (sf *WinMain) addBot() {
- log.Printf("WinMain.addBot(): %q\n", sf.botLogin)
- 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.addBot().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.Close()
- sf.app.Quit()
- sf.serv.CancelApp()
- }
|