| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- // 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 // Просмотр параметров бота
- entLogin *widget.Label // Логин текущего бота
- entPass *widget.Entry // Пароль текущего бота
- checkAutoGame *widget.Check // Автоматически играть при старте
- lblFuel *widget.Label // Топливо бота
- }
- // 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)
- btnAddBot := widget.NewButton("Добавить бота", sf.btnAddClick)
- btnExit := widget.NewButton("Выход", sf.btnExitClick)
- boxDown := container.NewHBox(btnAddBot, layout.NewSpacer(), btnExit)
- sf.entLogin = widget.NewLabel("")
- sf.entPass = widget.NewEntry()
- sf.checkAutoGame = widget.NewCheck("", sf.clickAutoGame)
- formLogin := &widget.Form{
- Items: []*widget.FormItem{ // we can specify items in the constructor
- {Text: "Логин", Widget: sf.entLogin},
- {Text: "Пароль", Widget: sf.entPass},
- {Text: "Авто игра", Widget: sf.checkAutoGame},
- },
- }
- tabLogin := container.NewTabItem("Логин", formLogin)
- sf.lblFuel = widget.NewLabel("0")
- itemFuel := widget.NewFormItem("Топливо", sf.lblFuel)
- frmStat := widget.NewForm(itemFuel)
- tabStat := container.NewTabItem("Статистика", frmStat)
- sf.tabBot = container.NewAppTabs(tabLogin, tabStat)
- sf.boxLeft = container.NewVBox(text1)
- 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))
- { // Получить список всех ботов
- lstBots := sf.serv.ServBots().ListBot()
- for _, bot := range lstBots {
- sf.botLogin = bot.Name()
- sf.addBot()
- }
- }
- sf.SetContent(boxMain)
- return sf, nil
- }
- // Выставляет признак автоматического начала игры при запуске бото-фермы
- func (sf *WinMain) clickAutoGame(isAutoGame bool) {
- log.Printf("WinMain.clickAutoGame(): login:%q\t isAutoGame=%v\n", sf.entLogin.Text, isAutoGame)
- sf.botLogin = sf.entLogin.Text
- if sf.botLogin == "" {
- sf.checkAutoGame.Checked = false
- return
- }
- // Сохранить автозапуск бота
- bot := sf.serv.ServBots().Get(sf.botLogin)
- switch isAutoGame {
- case true: // Автозапуск бота
- bot.SetAutoGame()
- default:
- bot.ResetAutoGame()
- }
- }
- func (sf *WinMain) btnAddClick() {
- log.Println("WinMain.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)
- 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)
- return
- }
- btnBot := widget.NewButton(sf.botLogin, sf.btnBotClick())
- sf.boxLeft.Add(btnBot)
- }
- func (sf *WinMain) btnBotClick() func() {
- log.Println("WinMain.btnBotClick()")
- _botLogin := sf.botLogin
- bot := sf.serv.ServBots().Get(_botLogin)
- _botPass := bot.Pass()
- return func() {
- log.Printf("btnBotClick().fn(): botName=%q\tbotPass=%q\tisAuto=%v\n", _botLogin, _botPass, bot.IsAutoGame())
- // Заполнить данными вкладки своего бота
- sf.entLogin.Text = _botLogin
- sf.entLogin.Refresh()
- sf.entPass.Text = _botPass
- sf.entPass.Refresh()
- sf.checkAutoGame.Checked = bot.IsAutoGame()
- sf.checkAutoGame.Refresh()
- fuel := bot.Angar().Fuel()
- sf.lblFuel.Text = fmt.Sprint(fuel.Get())
- sf.lblFuel.Refresh()
- }
- }
- func (sf *WinMain) btnExitClick() {
- log.Println("WinMain.btnExitClick()")
- sf.Close()
- sf.app.Quit()
- sf.serv.CancelApp()
- }
|