win_config.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // package win_config -- окно конфигурирования
  2. package win_config
  3. import (
  4. "fmt"
  5. tea "github.com/charmbracelet/bubbletea"
  6. "wartank/pkg/alias"
  7. "wartank/pkg/cons"
  8. "wartank/pkg/types"
  9. )
  10. // WinConfig -- окно конфигурирования
  11. type WinConfig struct {
  12. desk types.IDesktop
  13. model tea.Model // Модель для обработки
  14. name alias.AWinName // Имя экрана
  15. }
  16. // NewWinConfig -- возвращает новое окно конфигурирования
  17. func NewWinConfig(desk types.IDesktop) (*WinConfig, error) {
  18. if desk == nil {
  19. return nil, fmt.Errorf("NewWinConfig(): IDesktop==nil")
  20. }
  21. sf := &WinConfig{
  22. desk: desk,
  23. name: cons.WinConfig,
  24. }
  25. return sf, nil
  26. }
  27. // Name -- возвращает собственное имя
  28. func (sf *WinConfig) Name() alias.AWinName {
  29. return sf.name
  30. }
  31. func (sf *WinConfig) Init() tea.Cmd {
  32. // Просто вернуть `nil`, т.е. никаких команд
  33. return nil
  34. }
  35. // Update -- обрабатывает команду цикла
  36. func (sf *WinConfig) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  37. winName := alias.AWinName("")
  38. switch msg := msg.(type) {
  39. // Может клавиша нажата
  40. case tea.KeyMsg:
  41. switch msg.String() { // Да, нажато, а что именно?
  42. case "esc": // Вернуться на шаг назад
  43. winName = cons.WinDefault
  44. case "1": // Выбор один
  45. winName = cons.WinConfigServer
  46. case "2": // Вход на сервер
  47. if !sf.desk.IsConnect() {
  48. winName = cons.WinConnectServer
  49. }
  50. case "3": // Логин на сервер
  51. if !sf.desk.IsLogin() {
  52. winName = cons.WinLoginServer
  53. }
  54. case "4": // Создать админа
  55. winName = cons.WinServerMakeAdmin
  56. case "5": // Показать меню бото-фермы
  57. winName = cons.WinShowMenuBot
  58. }
  59. }
  60. if winName != "" {
  61. sf.desk.SetWin(winName)
  62. return sf.model, nil
  63. }
  64. return nil, nil
  65. }
  66. // View -- перерисовывание окна по требованию
  67. func (sf *WinConfig) View() string {
  68. s := "Настройки клиента\n\n"
  69. s += "[1]-Настройки сервера\n"
  70. s += "[2]-Вход на сервер\n"
  71. s += "[3]-Логин на сервер\n"
  72. s += "[4]-Сделать админа на бот-сервере\n"
  73. s += "[5]-Меню бото-фермы\n"
  74. s += "\n\n[ctrl+q]-выход [esc]-назад\n"
  75. return s
  76. }