comparison src/gui/widgets/sidebar.cc @ 370:ea3a74ed2ef9

*: hm, last commit wasn't quite finished?
author Paper <paper@tflc.us>
date Fri, 25 Jul 2025 10:22:04 -0400
parents 91ac90a34003
children
comparison
equal deleted inserted replaced
369:47c9f8502269 370:ea3a74ed2ef9
2 #include <QFrame> 2 #include <QFrame>
3 #include <QListWidget> 3 #include <QListWidget>
4 #include <QListWidgetItem> 4 #include <QListWidgetItem>
5 #include <QMouseEvent> 5 #include <QMouseEvent>
6 6
7 SideBar::SideBar(QWidget* parent) : QListWidget(parent) { 7 SideBar::SideBar(QWidget *parent) : QListWidget(parent)
8 {
8 setFrameShape(QFrame::NoFrame); 9 setFrameShape(QFrame::NoFrame);
9 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 10 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
10 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 11 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
11 setSelectionMode(QAbstractItemView::SingleSelection); 12 setSelectionMode(QAbstractItemView::SingleSelection);
12 setSelectionBehavior(QAbstractItemView::SelectItems); 13 setSelectionBehavior(QAbstractItemView::SelectItems);
18 19
19 connect(this, &QListWidget::currentRowChanged, this, 20 connect(this, &QListWidget::currentRowChanged, this,
20 [this](int index) { emit CurrentItemChanged(RemoveSeparatorsFromIndex(index)); }); 21 [this](int index) { emit CurrentItemChanged(RemoveSeparatorsFromIndex(index)); });
21 } 22 }
22 23
23 void SideBar::SetCurrentItem(int index) { 24 void SideBar::SetCurrentItem(int index)
25 {
24 setCurrentRow(AddSeparatorsToIndex(index)); 26 setCurrentRow(AddSeparatorsToIndex(index));
25 } 27 }
26 28
27 int SideBar::GetCurrentItem() { 29 int SideBar::GetCurrentItem()
30 {
28 return RemoveSeparatorsFromIndex(currentRow()); 31 return RemoveSeparatorsFromIndex(currentRow());
29 } 32 }
30 33
31 void SideBar::SetBackgroundTransparent(bool yes) { 34 void SideBar::SetBackgroundTransparent(bool yes)
35 {
32 viewport()->setAutoFillBackground(!yes); 36 viewport()->setAutoFillBackground(!yes);
33 } 37 }
34 38
35 QListWidgetItem* SideBar::AddItem(QString name, QIcon icon) { 39 QListWidgetItem *SideBar::AddItem(QString name, QIcon icon)
36 QListWidgetItem* item = new QListWidgetItem(this); 40 {
41 QListWidgetItem *item = new QListWidgetItem(this);
37 item->setText(name); 42 item->setText(name);
38 if (!icon.isNull()) 43 if (!icon.isNull())
39 item->setIcon(icon); 44 item->setIcon(icon);
40 return item; 45 return item;
41 } 46 }
42 47
43 QIcon SideBar::CreateIcon(const char* file) { 48 QIcon SideBar::CreateIcon(const char *file)
49 {
44 QPixmap pixmap(file, "PNG"); 50 QPixmap pixmap(file, "PNG");
45 QIcon result; 51 QIcon result;
46 result.addPixmap(pixmap, QIcon::Normal); 52 result.addPixmap(pixmap, QIcon::Normal);
47 result.addPixmap(pixmap, QIcon::Selected); 53 result.addPixmap(pixmap, QIcon::Selected);
48 return result; 54 return result;
49 } 55 }
50 56
51 QListWidgetItem* SideBar::AddSeparator() { 57 QListWidgetItem *SideBar::AddSeparator()
52 QListWidgetItem* item = new QListWidgetItem(this); 58 {
53 QFrame* line = new QFrame(this); 59 QListWidgetItem *item = new QListWidgetItem(this);
60 QFrame *line = new QFrame(this);
54 line->setFrameShape(QFrame::HLine); 61 line->setFrameShape(QFrame::HLine);
55 line->setFrameShadow(QFrame::Sunken); 62 line->setFrameShadow(QFrame::Sunken);
56 line->setMouseTracking(true); 63 line->setMouseTracking(true);
57 line->setEnabled(false); 64 line->setEnabled(false);
58 65
60 item->setFlags(Qt::NoItemFlags); 67 item->setFlags(Qt::NoItemFlags);
61 item->setBackground(QBrush(Qt::transparent)); 68 item->setBackground(QBrush(Qt::transparent));
62 return item; 69 return item;
63 } 70 }
64 71
65 int SideBar::AddSeparatorsToIndex(int index) { 72 int SideBar::AddSeparatorsToIndex(int index)
73 {
66 int separators = 0, items = 0; 74 int separators = 0, items = 0;
67 75
68 for (; items <= index;) { 76 for (; items <= index;) {
69 if (IndexIsSeparator(indexFromItem(item(items + separators)))) { 77 if (IndexIsSeparator(indexFromItem(item(items + separators)))) {
70 separators++; 78 separators++;
74 } 82 }
75 83
76 return index + separators; 84 return index + separators;
77 } 85 }
78 86
79 int SideBar::RemoveSeparatorsFromIndex(int index) { 87 int SideBar::RemoveSeparatorsFromIndex(int index)
88 {
80 int i = 0, items = 0; 89 int i = 0, items = 0;
81 for (; i < index; i++) { 90 for (; i < index; i++) {
82 if (!IndexIsSeparator(indexFromItem(item(i)))) 91 if (!IndexIsSeparator(indexFromItem(item(i))))
83 items++; 92 items++;
84 } 93 }
85 return items; 94 return items;
86 } 95 }
87 96
88 bool SideBar::IndexIsSeparator(QModelIndex index) const { 97 bool SideBar::IndexIsSeparator(QModelIndex index) const
98 {
89 return !index.isValid() || !(index.flags() & Qt::ItemIsEnabled); 99 return !index.isValid() || !(index.flags() & Qt::ItemIsEnabled);
90 } 100 }
91 101
92 QItemSelectionModel::SelectionFlags SideBar::selectionCommand(const QModelIndex& index, const QEvent*) const { 102 QItemSelectionModel::SelectionFlags SideBar::selectionCommand(const QModelIndex &index, const QEvent *) const
103 {
93 if (IndexIsSeparator(index)) 104 if (IndexIsSeparator(index))
94 return QItemSelectionModel::NoUpdate; 105 return QItemSelectionModel::NoUpdate;
95 return QItemSelectionModel::ClearAndSelect; 106 return QItemSelectionModel::ClearAndSelect;
96 } 107 }
97 108
98 void SideBar::mouseMoveEvent(QMouseEvent* event) { 109 void SideBar::mouseMoveEvent(QMouseEvent *event)
110 {
99 if (!IndexIsSeparator(indexAt(event->pos()))) 111 if (!IndexIsSeparator(indexAt(event->pos())))
100 setCursor(Qt::PointingHandCursor); 112 setCursor(Qt::PointingHandCursor);
101 else 113 else
102 unsetCursor(); 114 unsetCursor();
103 QListView::mouseMoveEvent(event); 115 QListView::mouseMoveEvent(event);