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