win_bots_menu.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // package win_bots_menu -- меню бото-фермы
  2. package win_bots_menu
  3. import (
  4. "fmt"
  5. tea "github.com/charmbracelet/bubbletea"
  6. "wartank/desktop/win_base"
  7. "wartank/pkg/alias"
  8. "wartank/pkg/cons"
  9. "wartank/pkg/types"
  10. )
  11. // WinBotsMenu -- окно меню бото-фермы
  12. type WinBotsMenu struct {
  13. *win_base.WinBase
  14. model tea.Model // Модель для обработки
  15. }
  16. // NewWinBotsMenu -- возвращает новое окно меню бото-фермы
  17. func NewWinBotsMenu(desk types.IDesktop) (*WinBotsMenu, error) {
  18. winBase, err := win_base.NewWinBase(desk, cons.WinBotsMenu)
  19. if err != nil {
  20. return nil, fmt.Errorf("NewWinBotsMenu(): in create WinBase, err=\n\t%w", err)
  21. }
  22. sf := &WinBotsMenu{
  23. WinBase: winBase,
  24. }
  25. return sf, nil
  26. }
  27. // Update -- обрабатывает команду цикла
  28. func (sf *WinBotsMenu) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  29. winName := alias.AWinName("")
  30. switch msg := msg.(type) {
  31. // Может клавиша нажата
  32. case tea.KeyMsg:
  33. switch msg.String() { // Да, нажато, а что именно?
  34. case "esc": // Вернуться на шаг назад
  35. winName = cons.WinDefault
  36. case "1": // Выбор один
  37. winName = cons.WinBotsAddLogin
  38. }
  39. }
  40. if winName != "" {
  41. sf.Desk().SetWin(winName)
  42. return sf.model, nil
  43. }
  44. return nil, nil
  45. }
  46. // View -- перерисовывание окна по требованию
  47. func (sf *WinBotsMenu) View() string {
  48. s := "=Меню бото-фермы вар-танк=\n\n"
  49. s += "[1]-Добавить бота\n"
  50. s += "[2]-Удалить бота\n"
  51. s += "[3]-Список ботов\n"
  52. s += "\n\n[ctrl+q]-выход [esc]-отмена\n"
  53. return s
  54. }