win_main.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // package win_main -- главное коно бото-фермы
  2. package win_main
  3. import (
  4. "fmt"
  5. "image/color"
  6. "log"
  7. "fyne.io/fyne/v2"
  8. "fyne.io/fyne/v2/canvas"
  9. "fyne.io/fyne/v2/container"
  10. "fyne.io/fyne/v2/layout"
  11. "fyne.io/fyne/v2/widget"
  12. "wartank/pkg/types"
  13. )
  14. // WinMain -- главное окно приложения
  15. type WinMain struct {
  16. fyne.Window
  17. serv types.IServer
  18. app fyne.App
  19. botLogin string
  20. botPass string
  21. boxLeft *fyne.Container
  22. tabBot *container.AppTabs
  23. }
  24. // NewWinMain -- возвращает новое главное окно
  25. func NewWinMain(serv types.IServer) (*WinMain, error) {
  26. if serv == nil {
  27. return nil, fmt.Errorf("NewWinMain(): IServer==nil")
  28. }
  29. sf := &WinMain{
  30. Window: serv.Gui().FyneApp().NewWindow("Бото-ферма [wartank.ru]"),
  31. app: serv.Gui().FyneApp(),
  32. serv: serv,
  33. }
  34. green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
  35. text1 := canvas.NewText("Список ботов", green)
  36. sf.boxLeft = container.NewVBox(text1)
  37. { // Получить список всех ботов
  38. lstBots := sf.serv.ServBots().ListBot()
  39. for _, bot := range lstBots {
  40. sf.botLogin = bot.Name()
  41. sf.addBot()
  42. }
  43. }
  44. btnAddBot := widget.NewButton("Добавить бота", sf.btnAddClick)
  45. btnExit := widget.NewButton("Выход", sf.btnExitClick)
  46. boxDown := container.NewHBox(btnAddBot, layout.NewSpacer(), btnExit)
  47. entLogin := widget.NewEntry()
  48. entPass := widget.NewEntry()
  49. formLogin := &widget.Form{
  50. Items: []*widget.FormItem{ // we can specify items in the constructor
  51. {Text: "Логин", Widget: entLogin},
  52. {Text: "Пароль", Widget: entPass},
  53. },
  54. }
  55. tabLogin := container.NewTabItem("Логин", formLogin)
  56. sf.tabBot = container.NewAppTabs(tabLogin)
  57. boxBorder := container.NewBorder(nil, nil, sf.boxLeft, nil, sf.boxLeft, sf.tabBot)
  58. boxMain := container.NewBorder(nil, boxDown, nil, nil, boxBorder)
  59. sf.Resize(fyne.NewSize(640, 480))
  60. sf.SetContent(boxMain)
  61. return sf, nil
  62. }
  63. func (sf *WinMain) btnAddClick() {
  64. log.Println("btnAddclick()")
  65. winAddBot := sf.app.NewWindow("Новый бот")
  66. entLogin := widget.NewEntry()
  67. entPass := widget.NewEntry()
  68. form := &widget.Form{
  69. Items: []*widget.FormItem{ // we can specify items in the constructor
  70. {Text: "Логин", Widget: entLogin},
  71. {Text: "Пароль", Widget: entPass},
  72. },
  73. OnSubmit: func() { // optional, handle form submission
  74. sf.botLogin = entLogin.Text
  75. sf.botPass = entPass.Text
  76. winAddBot.Close()
  77. go sf.addBot()
  78. },
  79. }
  80. winAddBot.Resize(fyne.NewSize(640, 480))
  81. winAddBot.SetContent(form)
  82. winAddBot.Show()
  83. }
  84. // Добавляет бота на жкран
  85. func (sf *WinMain) addBot() {
  86. log.Printf("WinMain.addBot(): %q\n", sf.botLogin)
  87. btnBot := widget.NewButton(sf.botLogin, sf.btnBotClick())
  88. sf.boxLeft.Add(btnBot)
  89. err := sf.serv.ServBots().AddBot(sf.botLogin, sf.botPass)
  90. if err != nil {
  91. log.Printf("WinMain.addBot().OnSubmit(): in add bot to ferma, err=\n\t%v\n", err)
  92. }
  93. }
  94. func (sf *WinMain) btnBotClick() func() {
  95. _botLogin := sf.botLogin
  96. _botPass := sf.botPass
  97. return func() {
  98. log.Printf("btnBotClick().fn(): botName=%q\tbotPass=%q\n", _botLogin, _botPass)
  99. }
  100. }
  101. func (sf *WinMain) btnExitClick() {
  102. log.Println("btnExitClick()")
  103. sf.Close()
  104. sf.app.Quit()
  105. sf.serv.CancelApp()
  106. }