annotate src/gui/widgets/sidebar.cc @ 375:abd956418fe9

gui/pages/now_playing: automatically update progress when the episode is "finished"
author Paper <paper@tflc.us>
date Fri, 25 Jul 2025 11:22:55 -0400
parents ea3a74ed2ef9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
1 #include "gui/widgets/sidebar.h"
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
2 #include <QFrame>
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
3 #include <QListWidget>
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
4 #include <QListWidgetItem>
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
5 #include <QMouseEvent>
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
6
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
7 SideBar::SideBar(QWidget *parent) : QListWidget(parent)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
8 {
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
9 setFrameShape(QFrame::NoFrame);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
10 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
11 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
12 setSelectionMode(QAbstractItemView::SingleSelection);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
13 setSelectionBehavior(QAbstractItemView::SelectItems);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
14 setMouseTracking(true);
305
91ac90a34003 core/time: remove Duration class, use regular functions instead
Paper <paper@paper.us.eu.org>
parents: 294
diff changeset
15
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
16 setStyleSheet("QListWidget::item:disabled { background: transparent }");
69
27a19dd6cba1 *: fix up some stuff
Paper <mrpapersonic@gmail.com>
parents: 68
diff changeset
17
294
99cbc51433e4 *: cleanup uses of QPalette
Paper <paper@paper.us.eu.org>
parents: 291
diff changeset
18 SetBackgroundTransparent(true);
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
19
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
20 connect(this, &QListWidget::currentRowChanged, this,
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
21 [this](int index) { emit CurrentItemChanged(RemoveSeparatorsFromIndex(index)); });
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
22 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
23
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
24 void SideBar::SetCurrentItem(int index)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
25 {
58
b7a1c0010ffd sidebar: link view menu and sidebar together
Paper <mrpapersonic@gmail.com>
parents: 46
diff changeset
26 setCurrentRow(AddSeparatorsToIndex(index));
b7a1c0010ffd sidebar: link view menu and sidebar together
Paper <mrpapersonic@gmail.com>
parents: 46
diff changeset
27 }
b7a1c0010ffd sidebar: link view menu and sidebar together
Paper <mrpapersonic@gmail.com>
parents: 46
diff changeset
28
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
29 int SideBar::GetCurrentItem()
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
30 {
112
80f49f623d30 locale: allow switching locales without restarting
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
31 return RemoveSeparatorsFromIndex(currentRow());
80f49f623d30 locale: allow switching locales without restarting
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
32 }
80f49f623d30 locale: allow switching locales without restarting
Paper <mrpapersonic@gmail.com>
parents: 81
diff changeset
33
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
34 void SideBar::SetBackgroundTransparent(bool yes)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
35 {
294
99cbc51433e4 *: cleanup uses of QPalette
Paper <paper@paper.us.eu.org>
parents: 291
diff changeset
36 viewport()->setAutoFillBackground(!yes);
69
27a19dd6cba1 *: fix up some stuff
Paper <mrpapersonic@gmail.com>
parents: 68
diff changeset
37 }
27a19dd6cba1 *: fix up some stuff
Paper <mrpapersonic@gmail.com>
parents: 68
diff changeset
38
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
39 QListWidgetItem *SideBar::AddItem(QString name, QIcon icon)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
40 {
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
41 QListWidgetItem *item = new QListWidgetItem(this);
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
42 item->setText(name);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
43 if (!icon.isNull())
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
44 item->setIcon(icon);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
45 return item;
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
46 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
47
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
48 QIcon SideBar::CreateIcon(const char *file)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
49 {
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
50 QPixmap pixmap(file, "PNG");
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
51 QIcon result;
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
52 result.addPixmap(pixmap, QIcon::Normal);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
53 result.addPixmap(pixmap, QIcon::Selected);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
54 return result;
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
55 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
56
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
57 QListWidgetItem *SideBar::AddSeparator()
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
58 {
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
59 QListWidgetItem *item = new QListWidgetItem(this);
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
60 QFrame *line = new QFrame(this);
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
61 line->setFrameShape(QFrame::HLine);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
62 line->setFrameShadow(QFrame::Sunken);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
63 line->setMouseTracking(true);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
64 line->setEnabled(false);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
65
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
66 setItemWidget(item, line);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
67 item->setFlags(Qt::NoItemFlags);
68
2417121d894e *: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents: 63
diff changeset
68 item->setBackground(QBrush(Qt::transparent));
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
69 return item;
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
70 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
71
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
72 int SideBar::AddSeparatorsToIndex(int index)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
73 {
252
a0eeb2cc7e6d *: resolve make distcheck failures
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
74 int separators = 0, items = 0;
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
75
258
862d0d8619f6 *: HUUUGE changes
Paper <paper@paper.us.eu.org>
parents: 252
diff changeset
76 for (; items <= index;) {
252
a0eeb2cc7e6d *: resolve make distcheck failures
Paper <paper@paper.us.eu.org>
parents: 250
diff changeset
77 if (IndexIsSeparator(indexFromItem(item(items + separators)))) {
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
78 separators++;
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
79 } else {
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
80 items++;
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
81 }
58
b7a1c0010ffd sidebar: link view menu and sidebar together
Paper <mrpapersonic@gmail.com>
parents: 46
diff changeset
82 }
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
83
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
84 return index + separators;
58
b7a1c0010ffd sidebar: link view menu and sidebar together
Paper <mrpapersonic@gmail.com>
parents: 46
diff changeset
85 }
b7a1c0010ffd sidebar: link view menu and sidebar together
Paper <mrpapersonic@gmail.com>
parents: 46
diff changeset
86
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
87 int SideBar::RemoveSeparatorsFromIndex(int index)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
88 {
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
89 int i = 0, items = 0;
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
90 for (; i < index; i++) {
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
91 if (!IndexIsSeparator(indexFromItem(item(i))))
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
92 items++;
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
93 }
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
94 return items;
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
95 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
96
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
97 bool SideBar::IndexIsSeparator(QModelIndex index) const
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
98 {
250
c130f47f6f48 *: many many changes
Paper <paper@paper.us.eu.org>
parents: 236
diff changeset
99 return !index.isValid() || !(index.flags() & Qt::ItemIsEnabled);
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
100 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
101
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
102 QItemSelectionModel::SelectionFlags SideBar::selectionCommand(const QModelIndex &index, const QEvent *) const
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
103 {
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
104 if (IndexIsSeparator(index))
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
105 return QItemSelectionModel::NoUpdate;
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
106 return QItemSelectionModel::ClearAndSelect;
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
107 }
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
108
370
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
109 void SideBar::mouseMoveEvent(QMouseEvent *event)
ea3a74ed2ef9 *: hm, last commit wasn't quite finished?
Paper <paper@tflc.us>
parents: 305
diff changeset
110 {
46
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
111 if (!IndexIsSeparator(indexAt(event->pos())))
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
112 setCursor(Qt::PointingHandCursor);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
113 else
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
114 unsetCursor();
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
115 QListView::mouseMoveEvent(event);
d0adc4aedfc8 *: update...
Paper <mrpapersonic@gmail.com>
parents:
diff changeset
116 }