| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 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 {
- cfg := ap.cfg.Keybinds.Picker
- return []keybind.Keybind{cfg.Up.Keybind, cfg.Down.Keybind, cfg.Select.Keybind, cfg.Cancel.Keybind}
- }
- func (ap *attachmentsPicker) FullHelp() [][]keybind.Keybind {
- cfg := ap.cfg.Keybinds.Picker
- return [][]keybind.Keybind{
- {cfg.Up.Keybind, cfg.Down.Keybind, cfg.Top.Keybind, cfg.Bottom.Keybind},
- {cfg.Select.Keybind, cfg.Cancel.Keybind},
- }
- }
|