win_main.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. }
  23. // NewWinMain -- возвращает новое главное окно
  24. func NewWinMain(serv types.IServer) (*WinMain, error) {
  25. if serv == nil {
  26. return nil, fmt.Errorf("NewWinMain(): IServer==nil")
  27. }
  28. sf := &WinMain{
  29. Window: serv.Gui().FyneApp().NewWindow("Бото-ферма [wartank.ru]"),
  30. app: serv.Gui().FyneApp(),
  31. serv: serv,
  32. }
  33. green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
  34. text1 := canvas.NewText("Список ботов", green)
  35. sf.boxLeft = container.NewVBox(text1)
  36. { // Получить список всех ботов
  37. lstBots := sf.serv.ServBots().ListBot()
  38. for _, bot := range lstBots {
  39. sf.botLogin = bot.Name()
  40. sf.btnAddClick()
  41. }
  42. }
  43. btnAddBot := widget.NewButton("Добавить бота", sf.btnAddClick)
  44. btnExit := widget.NewButton("Выход", sf.btnExitClick)
  45. boxDown := container.NewHBox(btnAddBot, layout.NewSpacer(), btnExit)
  46. boxBorder := container.NewBorder(nil, nil, sf.boxLeft, nil, sf.boxLeft)
  47. boxMain := container.NewBorder(nil, boxDown, nil, nil, boxBorder)
  48. sf.Resize(fyne.NewSize(640, 480))
  49. sf.SetContent(boxMain)
  50. return sf, nil
  51. }
  52. func (sf *WinMain) btnAddClick() {
  53. log.Println("btnAddclick()")
  54. winAddBot := sf.app.NewWindow("Новый бот")
  55. entLogin := widget.NewEntry()
  56. entPass := widget.NewEntry()
  57. form := &widget.Form{
  58. Items: []*widget.FormItem{ // we can specify items in the constructor
  59. {Text: "Логин", Widget: entLogin},
  60. {Text: "Пароль", Widget: entPass},
  61. },
  62. OnSubmit: func() { // optional, handle form submission
  63. sf.botLogin = entLogin.Text
  64. sf.botPass = entPass.Text
  65. },
  66. }
  67. winAddBot.Resize(fyne.NewSize(640, 480))
  68. winAddBot.SetContent(form)
  69. winAddBot.Show()
  70. }
  71. // Добавляет бота на жкран
  72. func (sf *WinMain)addBot(){
  73. log.Println("Form submitted:", entLogin.Text)
  74. log.Println("multiline:", entPass.Text)
  75. winAddBot.Close()
  76. btnBot := widget.NewButton(sf.botLogin, sf.btnBotClick())
  77. sf.boxLeft.Add(btnBot)
  78. err := sf.serv.ServBots().AddBot(sf.botLogin, sf.botPass)
  79. if err != nil {
  80. log.Printf("WinMain.btnAddclick().OnSubmit(): in add bot to ferma, err=\n\t%v\n", err)
  81. }
  82. }
  83. func (sf *WinMain) btnBotClick() func() {
  84. _botLogin := sf.botLogin
  85. _botPass := sf.botPass
  86. return func() {
  87. log.Printf("btnBotClick().fn(): botName=%q\tbotPass=%q\n", _botLogin, _botPass)
  88. }
  89. }
  90. func (sf *WinMain) btnExitClick() {
  91. log.Println("btnExitClick()")
  92. sf.app.Quit()
  93. }