package ui import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" ) type CreateThreadScreen struct { uiManager *UIManager content *fyne.Container boardCode string } func NewCreateThreadScreen(uiManager *UIManager, boardCode string) *CreateThreadScreen { cts := &CreateThreadScreen{ uiManager: uiManager, boardCode: boardCode, content: container.NewVBox(), } cts.setupContent() return cts } func (cts *CreateThreadScreen) setupContent() { cts.content.Objects = nil titleLabel := widget.NewLabel(fmt.Sprintf("Создать тред в /%s/", cts.boardCode)) titleLabel.TextStyle = fyne.TextStyle{Bold: true} cts.content.Add(titleLabel) titleEntry := widget.NewEntry() titleEntry.SetPlaceHolder("Заголовок треда") cts.content.Add(titleEntry) textEntry := widget.NewMultiLineEntry() textEntry.SetPlaceHolder("Текст треда") textEntry.Resize(fyne.NewSize(300, 200)) cts.content.Add(textEntry) passcode := cts.uiManager.GetPasscode() if passcode != "" { passcodeLabel := widget.NewLabel("Passcode настроен ✓") passcodeLabel.TextStyle = fyne.TextStyle{Bold: true} cts.content.Add(passcodeLabel) } else { passcodeLabel := widget.NewLabel("Passcode не настроен - постинг может быть ограничен\nи могут быть неожиданные ПРОБЛЕЕМЫ\n(подробнее в настройках)") passcodeLabel.TextStyle = fyne.TextStyle{Bold: true} cts.content.Add(passcodeLabel) } buttonsContainer := container.NewHBox() createButton := widget.NewButton("Создать тред", func() { title := titleEntry.Text text := textEntry.Text if title == "" { cts.uiManager.ShowError("Ошибка", "Заголовок не может быть пустым") return } if text == "" { cts.uiManager.ShowError("Ошибка", "Текст не может быть пустым") return } cts.uiManager.ShowInfo("Создание треда", "Отправляем тред...") passcode := cts.uiManager.GetPasscode() err := cts.uiManager.GetAPIClient().CreateThread(cts.boardCode, title, text, passcode) if err != nil { cts.uiManager.ShowError("Ошибка", fmt.Sprintf("Не удалось создать тред: %v", err)) return } cts.uiManager.ClearCacheForBoard(cts.boardCode) cts.uiManager.ShowInfo("Успех", "Тред создан успешно!") cts.uiManager.GoBack() cts.uiManager.RefreshCurrentScreen() }) cancelButton := widget.NewButton("Отмена", func() { cts.uiManager.GoBack() }) buttonsContainer.Add(createButton) buttonsContainer.Add(cancelButton) cts.content.Add(buttonsContainer) cts.content.Refresh() } func (cts *CreateThreadScreen) GetContent() fyne.CanvasObject { return cts.content } func (cts *CreateThreadScreen) GetTitle() string { return fmt.Sprintf("Создать тред /%s/", cts.boardCode) } func (cts *CreateThreadScreen) OnShow() { cts.setupContent() } func (cts *CreateThreadScreen) OnHide() { // Ничего не делаем при скрытии }