Pārlūkot izejas kodu

d01 Вытаскивание окна в отдельный пакет

SVI 2 gadi atpakaļ
vecāks
revīzija
e1ef754ede

+ 55 - 65
desktop/desktop.go

@@ -12,6 +12,7 @@ import (
 	"wartank/desktop/win_config"
 	"wartank/desktop/win_config_server"
 	"wartank/desktop/win_config_server_host_input"
+	"wartank/desktop/win_config_server_login_input"
 	"wartank/desktop/win_default"
 	"wartank/pkg/alias"
 	"wartank/pkg/cons"
@@ -69,6 +70,13 @@ func NewDesktop() (*Desktop, error) {
 			}
 			sf.dictWin[winConfigServerHostInput.Name()] = winConfigServerHostInput
 		}
+		{ // WinConfigServerLoginInput
+			winConfigServerLoginInput, err := win_config_server_login_input.NewWinConfigServerLoginInput(sf)
+			if err != nil {
+				return nil, fmt.Errorf("NewDesktop(): in create WinConfigServerLoginInput, err=\n\t%w", err)
+			}
+			sf.dictWin[winConfigServerLoginInput.Name()] = winConfigServerLoginInput
+		}
 	}
 	sf.winName = cons.WinDefault
 	go sf.tick()
@@ -139,69 +147,55 @@ func (sf *Desktop) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		return mod_, cmd_
 	}
 	/*
-		 case ModeInputLoginServer:
-		// 	switch msg := msg.(type) {
-		// 	// Может клавиша нажата
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Вернуться на шаг назад
-		// 			desk.winName = ModeConfigServer
-		// 		case "enter": // Нажатие "enter" или "пробел" переключает выбранный элемент списка
-		// 			desk.login = desk.textInput.Value()
-		// 			desk.winName = ModeConfigServer
-		// 		default:
-		// 			desk.textInput, cmd = desk.textInput.Update(msg)
-		// 		}
-		// 	}
 		 case ModeInputPassServer:
-		// 	switch msg := msg.(type) {
-		// 	// Может клавиша нажата
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Вернуться на шаг назад
-		// 			desk.winName = ModeConfigServer
-		// 		case "enter": // Нажатие "enter" или "пробел" переключает выбранный элемент списка
-		// 			desk.pass = desk.textInput.Value()
-		// 			desk.winName = ModeConfigServer
-		// 		default:
-		// 			desk.textInput, cmd = desk.textInput.Update(msg)
-		// 		}
-		// 	}
+			switch msg := msg.(type) {
+			// Может клавиша нажата
+			case tea.KeyMsg:
+				switch msg.String() { // Да, нажато, а что именно?
+				case "esc": // Вернуться на шаг назад
+					desk.winName = ModeConfigServer
+				case "enter": // Нажатие "enter" или "пробел" переключает выбранный элемент списка
+					desk.pass = desk.textInput.Value()
+					desk.winName = ModeConfigServer
+				default:
+					desk.textInput, cmd = desk.textInput.Update(msg)
+				}
+			}
 		 case ModeConnectServer:
-		// 	switch msg := msg.(type) {
-		// 	// Может клавиша нажата
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Нажатие "esc" прекращает подключение к серверу
-		// 			desk.winName = ModeConfigServer
-		// 		}
-		// 	}
+			switch msg := msg.(type) {
+			// Может клавиша нажата
+			case tea.KeyMsg:
+				switch msg.String() { // Да, нажато, а что именно?
+				case "esc": // Нажатие "esc" прекращает подключение к серверу
+					desk.winName = ModeConfigServer
+				}
+			}
 		 case ModeLoginServer:
-		// 	switch msg := msg.(type) {
-		// 	// Может клавиша нажата
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Нажатие "esc" прекращает логин на сервер
-		// 			desk.winName = ModeConfig
-		// 		}
-		// 	}
+			switch msg := msg.(type) {
+			// Может клавиша нажата
+			case tea.KeyMsg:
+				switch msg.String() { // Да, нажато, а что именно?
+				case "esc": // Нажатие "esc" прекращает логин на сервер
+					desk.winName = ModeConfig
+				}
+			}
 		 case ModeServerMakeAdmin:
-		// 	switch msg := msg.(type) {
-		// 	// Может клавиша нажата
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Нажатие "esc" прекращает создание админа
-		// 			desk.winName = ModeConfig
-		// 		}
-		// 	}
+			switch msg := msg.(type) {
+			// Может клавиша нажата
+			case tea.KeyMsg:
+				switch msg.String() { // Да, нажато, а что именно?
+				case "esc": // Нажатие "esc" прекращает создание админа
+					desk.winName = ModeConfig
+				}
+			}
 		 case ModeShowMenuBot:
 		 	// Может клавиша нажата
 		 	switch msg := msg.(type) {
-		// 	case tea.KeyMsg:
-		// 		switch msg.String() { // Да, нажато, а что именно?
-		// 		case "esc": // Нажатие "esc" прекращает показ меню
-		// 			desk.winName = ModeConfig
-		// 		}
+			case tea.KeyMsg:
+				switch msg.String() { // Да, нажато, а что именно?
+				case "esc": // Нажатие "esc" прекращает показ меню
+					desk.winName = ModeConfig
+				}
 		 	}
 		// Возвращает обновлённую модель дляe Bubble Tea runtime для обработки.
 		//Здесь команду возвращать надо.
@@ -215,8 +209,6 @@ func (sf *Desktop) View() string {
 	s += desk.dictWin[desk.winName].View()
 	/*
 		switch desk.winName {
-		case ModeInputLoginServer: // Ввод логина для входа на сервер
-			s += desk.winLoginServer()
 		case ModeInputPassServer: // ввод пароля
 			s += desk.winPassServer()
 		case ModeConnectServer: // Режим подключения к серверу
@@ -295,13 +287,6 @@ func (sf *Desktop) winPassServer() string {
 	return s
 }
 
-func (sf *Desktop) winLoginServer() string {
-	s := "=Ввод логина для сервера вар-танк=\n\n"
-	s += fmt.Sprintf(">%v\n", desk.textInput.View())
-	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
-	return s
-}
-
 */
 
 // IsLogin -- возвращает признак логина на сервер ботов
@@ -318,3 +303,8 @@ func (sf *Desktop) IsConnect() bool {
 func (sf *Desktop) SetHost(hostName string) {
 	sf.host = hostName
 }
+
+// SetLogin -- устанавливает логин бото-фермы
+func (sf *Desktop) SetLogin(login string) {
+	sf.login = login
+}

+ 1 - 1
desktop/win_config_server/win_config_server.go

@@ -51,7 +51,7 @@ func (sf *WinConfigServer) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 			sf.textInput.Reset()
 			sf.textInput.Placeholder = "localhost:18050"
 		case "2": // Выбор логина для входа
-			winName = cons.WinInputLoginServer
+			winName = cons.WinConfigServerLoginInput
 			sf.textInput.Reset()
 			sf.textInput.Placeholder = "login"
 		case "3": // Выбор пароля для входа

+ 0 - 1
desktop/win_config_server_host_input/win_config_server_host_input.go

@@ -61,7 +61,6 @@ func (sf *WinConfigServerHostInput) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 	}
 	if winName != "" {
 		sf.Desk().SetWin(winName)
-		return nil, nil
 	}
 	return nil, nil
 }

+ 72 - 0
desktop/win_config_server_login_input/win_config_server_login_input.go

@@ -0,0 +1,72 @@
+// package win_config_server_login_input -- окно ввода логина бото-фермы
+package win_config_server_login_input
+
+import (
+	"fmt"
+
+	"github.com/charmbracelet/bubbles/textinput"
+	tea "github.com/charmbracelet/bubbletea"
+
+	"wartank/desktop/win_base"
+	"wartank/pkg/alias"
+	"wartank/pkg/cons"
+	"wartank/pkg/types"
+)
+
+// WinConfigServerLoginInput -- конфигурация для ввода логина хоста к бото-серверу вар-танк
+type WinConfigServerLoginInput struct {
+	*win_base.WinBase
+	textInput textinput.Model
+}
+
+// NewWinConfigServerLoginInput -- возвращает новое окно для ввода логина хоста к бото-серверу вар-танк
+func NewWinConfigServerLoginInput(desk types.IDesktop) (*WinConfigServerLoginInput, error) {
+	winBase, err := win_base.NewWinBase(desk, cons.WinConfigServerLoginInput)
+	if err != nil {
+		return nil, fmt.Errorf("NewWinConfigServerLoginInput(): in create WinBase, err=\n\t%w", err)
+	}
+	sf := &WinConfigServerLoginInput{
+		WinBase:   winBase,
+		textInput: textinput.New(),
+	}
+	sf.textInput.Placeholder = "admin"
+	sf.textInput.Focus()
+	sf.textInput.Width = 30
+	_ = tea.Model(sf)
+	return sf, nil
+}
+
+// Init -- настраивает окно для бабл-теа
+func (sf *WinConfigServerLoginInput) Init() tea.Cmd {
+	return textinput.Blink
+}
+
+// Update -- обрабатывает команду цикла
+func (sf *WinConfigServerLoginInput) 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.WinConfigServer
+		case "enter": // Нажатие "enter" или "пробел" переключает выбранный элемент списка
+			sf.Desk().SetLogin(sf.textInput.Value())
+			winName = cons.WinConfigServer
+		default:
+			sf.textInput, _ = sf.textInput.Update(msg)
+		}
+	}
+	if winName != "" {
+		sf.Desk().SetWin(winName)
+	}
+	return nil, nil
+}
+
+// View -- перерисовывание окна по требованию
+func (sf *WinConfigServerLoginInput) View() string {
+	s := "=Ввод логина для сервера вар-танк=\tWinConfigServerLoginInput\n\n"
+	s += fmt.Sprintf(">%v\n", sf.textInput.View())
+	s += "\n\n[ctrl+q]-выход [esc]-назад\n"
+	return s
+}

+ 11 - 11
pkg/cons/cons.go

@@ -20,15 +20,15 @@ const (
 )
 
 const (
-	WinDefault               alias.AWinName = "winDefault"
-	WinConfig                alias.AWinName = "winConfig"                // Режим конфигурирования
-	WinConfigServer          alias.AWinName = "winConfigServer"          // Режим конфигуррования сервера
-	WinConfigServerHostInput alias.AWinName = "winConfigServerHostInput" // Режим ввода хоста сервера
-	WinInputLoginServer                                                  // Режим ввода логина на сервер
-	WinInputPassServer                                                   // Режим ввода пароля входа на сервер
-	WinConnectServer                                                     // Режим подключения к серверу
-	WinLoginServer                                                       // Режим логина на сервер
-	WinServerMakeAdmin                                                   // Создать админа для бот-сервера
-	WinServerMakeUser                                                    // Создать пользователя для бот-сервера
-	WinShowMenuBot                                                       // Показать меню ботов
+	WinDefault                alias.AWinName = "winDefault"
+	WinConfig                 alias.AWinName = "winConfig"                 // Режим конфигурирования
+	WinConfigServer           alias.AWinName = "winConfigServer"           // Режим конфигуррования сервера
+	WinConfigServerHostInput  alias.AWinName = "winConfigServerHostInput"  // Режим ввода хоста сервера
+	WinConfigServerLoginInput alias.AWinName = "winConfigServerLoginInput" // Режим ввода логина на сервер
+	WinInputPassServer                                                     // Режим ввода пароля входа на сервер
+	WinConnectServer                                                       // Режим подключения к серверу
+	WinLoginServer                                                         // Режим логина на сервер
+	WinServerMakeAdmin                                                     // Создать админа для бот-сервера
+	WinServerMakeUser                                                      // Создать пользователя для бот-сервера
+	WinShowMenuBot                                                         // Показать меню ботов
 )

+ 2 - 0
pkg/types/idesktop.go

@@ -12,4 +12,6 @@ type IDesktop interface {
 	IsLogin() bool
 	// SetHost -- устанавливает имя хоста бото-фермы
 	SetHost(host string)
+	// SetLogin -- устанавливает логин на бото-ферму
+	SetLogin(login string)
 }