package ui import ( "fmt" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/widget" ) type AddCommentScreen struct { uiManager *UIManager content *fyne.Container boardCode string threadID int } func NewAddCommentScreen(uiManager *UIManager, boardCode string, threadID int) *AddCommentScreen { acs := &AddCommentScreen{ uiManager: uiManager, boardCode: boardCode, threadID: threadID, content: container.NewVBox(), } acs.setupContent() return acs } func (acs *AddCommentScreen) setupContent() { acs.content.Objects = nil titleLabel := widget.NewLabel(fmt.Sprintf("Добавить комментарий в тред %d /%s/", acs.threadID, acs.boardCode)) titleLabel.TextStyle = fyne.TextStyle{Bold: true} acs.content.Add(titleLabel) textEntry := widget.NewMultiLineEntry() textEntry.SetPlaceHolder("Текст комментария") textEntry.Resize(fyne.NewSize(300, 200)) acs.content.Add(textEntry) passcode := acs.uiManager.GetPasscode() if passcode != "" { passcodeLabel := widget.NewLabel("Passcode настроен") passcodeLabel.TextStyle = fyne.TextStyle{Bold: true} acs.content.Add(passcodeLabel) } else { passcodeLabel := widget.NewLabel("Passcode не настроен - постинг может быть\nограничен и могут быть неожиданные ПРОБЛЕЕМЫ\n(подробнее в настройках)") passcodeLabel.TextStyle = fyne.TextStyle{Bold: true} acs.content.Add(passcodeLabel) } buttonsContainer := container.NewHBox() addButton := widget.NewButton("Добавить комментарий", func() { text := textEntry.Text if text == "" { acs.uiManager.ShowError("Ошибка", "Текст не может быть пустым") return } acs.uiManager.ShowInfo("Добавление комментария", "Отправляем комментарий...") passcode := acs.uiManager.GetPasscode() err := acs.uiManager.GetAPIClient().AddComment(acs.boardCode, acs.threadID, text, passcode) if err != nil { acs.uiManager.ShowError("Ошибка", fmt.Sprintf("Не удалось добавить комментарий: %v", err)) return } acs.uiManager.ClearCacheForThread(acs.threadID) acs.uiManager.ShowInfo("Успех", "Комментарий добавлен успешно!") acs.uiManager.GoBack() if threadDetailScreen, ok := acs.uiManager.GetCurrentScreen().(*ThreadDetailScreen); ok { threadDetailScreen.RefreshThread() } }) cancelButton := widget.NewButton("Отмена", func() { acs.uiManager.GoBack() }) buttonsContainer.Add(addButton) buttonsContainer.Add(cancelButton) acs.content.Add(buttonsContainer) acs.content.Refresh() } func (acs *AddCommentScreen) GetContent() fyne.CanvasObject { return acs.content } func (acs *AddCommentScreen) GetTitle() string { return fmt.Sprintf("Комментарий в тред %d", acs.threadID) } func (acs *AddCommentScreen) OnShow() { acs.setupContent() } func (acs *AddCommentScreen) OnHide() { // Ничего не делаем при скрытии }