diff options
Diffstat (limited to 'ui/widget/room-list.go')
-rw-r--r-- | ui/widget/room-list.go | 140 |
1 files changed, 0 insertions, 140 deletions
diff --git a/ui/widget/room-list.go b/ui/widget/room-list.go deleted file mode 100644 index d2fb543..0000000 --- a/ui/widget/room-list.go +++ /dev/null @@ -1,140 +0,0 @@ -// gomuks - A terminal Matrix client written in Go. -// Copyright (C) 2018 Tulir Asokan -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package widget - -import ( - "fmt" - "strconv" - - "github.com/gdamore/tcell" - "maunium.net/go/gomuks/matrix/rooms" - "maunium.net/go/tview" -) - -type RoomList struct { - *tview.Box - - indices map[*rooms.Room]int - items []*rooms.Room - selected *rooms.Room - - // The item main text color. - mainTextColor tcell.Color - // The text color for selected items. - selectedTextColor tcell.Color - // The background color for selected items. - selectedBackgroundColor tcell.Color -} - -func NewRoomList() *RoomList { - return &RoomList{ - Box: tview.NewBox(), - indices: make(map[*rooms.Room]int), - items: []*rooms.Room{}, - - mainTextColor: tcell.ColorWhite, - selectedTextColor: tcell.ColorWhite, - selectedBackgroundColor: tcell.ColorDarkGreen, - } -} - -func (list *RoomList) Add(room *rooms.Room) { - list.indices[room] = len(list.items) - list.items = append(list.items, room) - if list.selected == nil { - list.selected = room - } -} - -func (list *RoomList) Remove(room *rooms.Room) { - index, ok := list.indices[room] - if !ok { - return - } - delete(list.indices, room) - list.items = append(list.items[0:index], list.items[index+1:]...) - if len(list.items) == 0 { - list.selected = nil - } -} - -func (list *RoomList) Clear() { - list.indices = make(map[*rooms.Room]int) - list.items = []*rooms.Room{} - list.selected = nil -} - -func (list *RoomList) SetSelected(room *rooms.Room) { - list.selected = room -} - -// Draw draws this primitive onto the screen. -func (list *RoomList) Draw(screen tcell.Screen) { - list.Box.Draw(screen) - - x, y, width, height := list.GetInnerRect() - bottomLimit := y + height - - var offset int - currentItemIndex, hasSelected := list.indices[list.selected] - if hasSelected && currentItemIndex >= height { - offset = currentItemIndex + 1 - height - } - - // Draw the list items. - for index, item := range list.items { - if index < offset { - continue - } - - if y >= bottomLimit { - break - } - - text := item.GetTitle() - - lineWidth := width - - style := tcell.StyleDefault.Foreground(list.mainTextColor) - if item == list.selected { - style = style.Foreground(list.selectedTextColor).Background(list.selectedBackgroundColor) - } - if item.HasNewMessages { - style = style.Bold(true) - } - - if item.UnreadMessages > 0 { - unreadMessageCount := "99+" - if item.UnreadMessages < 100 { - unreadMessageCount = strconv.Itoa(item.UnreadMessages) - } - if item.Highlighted { - unreadMessageCount += "!" - } - unreadMessageCount = fmt.Sprintf("(%s)", unreadMessageCount) - writeLine(screen, tview.AlignRight, unreadMessageCount, x+lineWidth-6, y, 6, style) - lineWidth -= len(unreadMessageCount) + 1 - } - - writeLine(screen, tview.AlignLeft, text, x, y, lineWidth, style) - - y++ - if y >= bottomLimit { - break - } - } -} |