libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
listview.h
Go to the documentation of this file.
1
8#pragma once
9
11#include <promeki/core/string.h>
13#include <promeki/tui/widget.h>
14
16
17class TuiPainter;
18class TuiPalette;
19
29class TuiListView : public TuiWidget {
30 PROMEKI_OBJECT(TuiListView, TuiWidget)
31 public:
32 TuiListView(ObjectBase *parent = nullptr);
33 ~TuiListView() override;
34
35 void addItem(const String &item);
36 void insertItem(int index, const String &item);
37 void setItems(const StringList &items);
38 void clear();
39
40 int currentIndex() const { return _currentIndex; }
41 void setCurrentIndex(int index);
42
43 String currentItem() const;
44 int count() const { return static_cast<int>(_items.size()); }
45
47 int scrollOffset() const { return _scrollOffset; }
48
59 void scrollBy(int delta);
60
65 void ensureVisible(int index);
66
67 Size2Di32 sizeHint() const override;
68
69 PROMEKI_SIGNAL(currentItemChanged, int)
70 PROMEKI_SIGNAL(itemActivated, int)
71
72 protected:
73 void paintEvent(TuiPaintEvent *e) override;
74 void keyEvent(KeyEvent *e) override;
75 void mouseEvent(MouseEvent *e) override;
76
77 private:
78 StringList _items;
79 int _currentIndex = -1;
80 int _scrollOffset = 0;
81 bool _dragging = false;
82 int _dragOffset = 0;
83
84 int contentWidth() const;
85 void paintScrollbar(TuiPainter &painter, const TuiPalette &pal);
86 int thumbPos() const;
87 int thumbSize() const;
88 int trackHeight() const;
89};
90
Event delivered when a key is pressed or released.
Definition keyevent.h:22
Dynamic array container wrapping std::vector.
Definition list.h:40
size_t size() const noexcept
Returns the number of elements in the list.
Definition list.h:301
Event delivered for mouse input.
Definition mouseevent.h:23
Base object for promeki.
Definition objectbase.h:129
ObjectBase * parent() const
Returns the parent object, if one. nullptr if none.
Definition objectbase.h:258
Manages a list of strings.
Definition stringlist.h:21
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
Scrollable list of items with keyboard and mouse navigation.
Definition listview.h:29
void ensureVisible(int index)
Adjusts the scroll offset so that the given index is visible.
int scrollOffset() const
Returns the current scroll offset.
Definition listview.h:47
void paintEvent(TuiPaintEvent *e) override
Called to paint the widget. Override in subclasses.
void scrollBy(int delta)
Scrolls the viewport by the given number of items.
Size2Di32 sizeHint() const override
Returns the preferred size. Override in subclasses.
void keyEvent(KeyEvent *e) override
Called on keyboard input. Override in subclasses.
void mouseEvent(MouseEvent *e) override
Called on mouse input. Override in subclasses.
Event delivered when a TUI widget needs to repaint.
Definition widget.h:28
Painting context for TUI widgets.
Definition painter.h:26
Style palette for TUI widgets.
Definition palette.h:35
Base class for all TUI widgets.
Definition widget.h:88
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19