| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package chat
- import (
- "github.com/ayn2op/discordo/internal/config"
- "github.com/ayn2op/tview"
- "github.com/ayn2op/tview/help"
- "github.com/ayn2op/tview/keybind"
- "github.com/ayn2op/tview/picker"
- )
- type attachmentItem struct {
- label string
- open func()
- }
- type attachmentsPicker struct {
- *picker.Model
- cfg *config.Config
- chatView *Model
- items []attachmentItem
- browseMode bool
- }
- var _ help.KeyMap = (*attachmentsPicker)(nil)
- func newAttachmentsPicker(cfg *config.Config, chatView *Model) *attachmentsPicker {
- ap := &attachmentsPicker{
- Model: picker.NewModel(),
- cfg: cfg,
- chatView: chatView,
- }
- ConfigurePicker(ap.Model, cfg, "Attachments")
- return ap
- }
- func (ap *attachmentsPicker) SetItems(items []attachmentItem) {
- ap.items = items
- pickerItems := make(picker.Items, 0, len(items))
- for i, item := range items {
- pickerItems = append(pickerItems, picker.Item{
- Text: item.label,
- FilterText: item.label,
- Reference: i,
- })
- }
- ap.Model.SetItems(pickerItems)
- }
- func (ap *attachmentsPicker) close() {
- ap.chatView.RemoveLayer(attachmentsListLayerName)
- ap.chatView.app.SetFocus(ap.chatView.messagesList)
- }
- func (ap *attachmentsPicker) resetBrowse() { ap.browseMode = false }
- func (ap *attachmentsPicker) HandleEvent(event tview.Event) tview.Command {
- switch event := event.(type) {
- case *tview.KeyEvent:
- if cmd, handled := pickerBrowseHandleKey(event, &ap.browseMode, ap.Model, func() { ap.close() }); handled {
- return cmd
- }
- case *picker.SelectedEvent:
- index, ok := event.Reference.(int)
- if !ok {
- return nil
- }
- if index < 0 || index >= len(ap.items) {
- return nil
- }
- ap.items[index].open()
- ap.close()
- return nil
- case *picker.CancelEvent:
- ap.close()
- return nil
- }
- return ap.Model.HandleEvent(event)
- }
- func (ap *attachmentsPicker) ShortHelp() []keybind.Keybind {
- return pickerShortHelp(ap.cfg.Keybinds.Picker)
- }
- func (ap *attachmentsPicker) FullHelp() [][]keybind.Keybind {
- return pickerFullHelp(ap.cfg.Keybinds.Picker)
- }
|