// package win_config -- окно конфигурирования package win_config import ( "fmt" tea "github.com/charmbracelet/bubbletea" "wartank/desktop/win_base" "wartank/pkg/alias" "wartank/pkg/cons" "wartank/pkg/types" ) // WinConfig -- окно конфигурирования type WinConfig struct { *win_base.WinBase model tea.Model // Модель для обработки } // NewWinConfig -- возвращает новое окно конфигурирования func NewWinConfig(desk types.IDesktop) (*WinConfig, error) { winBase, err := win_base.NewWinBase(desk, cons.WinConfig) if err != nil { return nil, fmt.Errorf("NewWinConfig(): in create WinBase, err=\n\t%w", err) } sf := &WinConfig{ WinBase: winBase, } return sf, nil } // Update -- обрабатывает команду цикла func (sf *WinConfig) Update(msg tea.Msg) (tea.Model, tea.Cmd) { winName := alias.AWinName("") switch msg := msg.(type) { // Может клавиша нажата case tea.KeyMsg: switch msg.String() { // Да, нажато, а что именно? case "esc": // Вернуться на шаг назад winName = cons.WinDefault case "1": // Выбор один winName = cons.WinConfigServer case "2": // Вход на сервер if !sf.Desk().IsConnect() { winName = cons.WinServerConnect } case "3": // Логин на сервер if !sf.Desk().IsLogin() { winName = cons.WinLoginServer } case "4": // Создать админа winName = cons.WinServerMakeAdmin case "5": // Показать меню бото-фермы winName = cons.WinShowMenuBot } } if winName != "" { sf.Desk().SetWin(winName) return sf.model, nil } return nil, nil } // View -- перерисовывание окна по требованию func (sf *WinConfig) View() string { s := "Настройки клиента\n\n" s += "[1]-Настройки сервера\n" s += "[2]-Вход на сервер\n" s += "[3]-Логин на сервер\n" s += "[4]-Сделать админа на бот-сервере\n" s += "[5]-Меню бото-фермы\n" s += "\n\n[ctrl+q]-выход [esc]-назад\n" return s }