win_main.go 3.5 KB

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