Mercurial > minori
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); |