comparison src/gui/dialog/settings/recognition.cc @ 147:6fdf0632c003

track: use a bit of a more sane way to manage recognition it also works with the new animia API
author Paper <mrpapersonic@gmail.com>
date Tue, 14 Nov 2023 13:19:40 -0500
parents 69db40272acd
children e41505d24733
comparison
equal deleted inserted replaced
146:d8a61e7e2a36 147:6fdf0632c003
1 #include "core/session.h" 1 #include "core/session.h"
2 #include "core/strings.h" 2 #include "core/strings.h"
3 #include "gui/dialog/settings.h" 3 #include "gui/dialog/settings.h"
4 #include "track/types.h" 4
5 #include <QListWidget> 5 #include <QListWidget>
6 #include <QListWidgetItem> 6 #include <QListWidgetItem>
7 #include <QGroupBox> 7 #include <QGroupBox>
8 #include <QCheckBox> 8 #include <QCheckBox>
9 #include <QLabel> 9 #include <QLabel>
10 #include <QSizePolicy> 10 #include <QSizePolicy>
11 #include <QVBoxLayout> 11 #include <QVBoxLayout>
12
12 #include <algorithm> 13 #include <algorithm>
13
14 Q_DECLARE_METATYPE(Track::Types::MediaPlayer);
15 14
16 QWidget* SettingsPageRecognition::CreatePlayersWidget() { 15 QWidget* SettingsPageRecognition::CreatePlayersWidget() {
17 QWidget* result = new QWidget(this); 16 QWidget* result = new QWidget(this);
18 result->setAutoFillBackground(true); 17 result->setAutoFillBackground(true);
19 result->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); 18 result->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
39 QListWidget* listwidget = new QListWidget(widget); 38 QListWidget* listwidget = new QListWidget(widget);
40 for (size_t i = 0; i < players.size(); i++) { 39 for (size_t i = 0; i < players.size(); i++) {
41 const auto& player = players[i]; 40 const auto& player = players[i];
42 { 41 {
43 QListWidgetItem* item = new QListWidgetItem(listwidget); 42 QListWidgetItem* item = new QListWidgetItem(listwidget);
44 item->setCheckState(player.GetEnabled() ? Qt::Checked : Qt::Unchecked); 43 item->setCheckState(player.first ? Qt::Checked : Qt::Unchecked);
45 item->setText(Strings::ToQString(player.GetName() + " (" + player.GetExecutable() + ")")); 44 item->setText(Strings::ToQString(player.second.name));
46 item->setData(Qt::UserRole, QVariant::fromValue(i)); 45 item->setData(Qt::UserRole, QVariant::fromValue(i));
47 } 46 }
48 } 47 }
49 connect(listwidget, &QListWidget::itemChanged, this, [this](QListWidgetItem* item){ 48 connect(listwidget, &QListWidget::itemChanged, this, [this](QListWidgetItem* item){
50 if (!item) 49 if (!item)
51 return; 50 return;
52 size_t i = item->data(Qt::UserRole).toUInt(); 51 size_t i = item->data(Qt::UserRole).toUInt();
53 players[i].SetEnabled(item->checkState()); 52 players[i].first = item->checkState();
54 }); 53 });
55 /* this is down here because the listwidget state depends on it */ 54 /* this is down here because the listwidget state depends on it */
56 connect(checkbox, &QCheckBox::stateChanged, this, [this, listwidget](int state) { 55 connect(checkbox, &QCheckBox::stateChanged, this, [this, listwidget](int state) {
57 detect_media_players = (state == Qt::Checked); 56 detect_media_players = (state == Qt::Checked);
58 listwidget->setEnabled(detect_media_players); 57 listwidget->setEnabled(detect_media_players);
63 } 62 }
64 63
65 full_layout->addWidget(widget); 64 full_layout->addWidget(widget);
66 } 65 }
67 66
68 {
69 /* Feed link */
70 QWidget* widget = new QWidget(result);
71 QVBoxLayout* widget_layout = new QVBoxLayout(widget);
72
73 {
74 QLabel* label = new QLabel(tr("Allowed file extensions:"), widget);
75 widget_layout->addWidget(label);
76 }
77
78 {
79 QListWidget* listwidget = new QListWidget(widget);
80 for (size_t i = 0; i < extensions.size(); i++) {
81 const auto& extension = extensions[i];
82 {
83 QListWidgetItem* item = new QListWidgetItem(listwidget);
84 item->setCheckState(extension.GetEnabled() ? Qt::Checked : Qt::Unchecked);
85 item->setText(Strings::ToQString("." + extension.GetExtension()));
86 item->setData(Qt::UserRole, QVariant::fromValue(i));
87 }
88 }
89 connect(listwidget, &QListWidget::itemChanged, this, [this](QListWidgetItem* item){
90 if (!item)
91 return;
92 size_t i = item->data(Qt::UserRole).toUInt();
93 extensions[i].SetEnabled(item->checkState());
94 });
95
96 widget_layout->addWidget(listwidget);
97 }
98
99 full_layout->addWidget(widget);
100 }
101
102 full_layout->setSpacing(10); 67 full_layout->setSpacing(10);
103 68
104 return result; 69 return result;
105 } 70 }
106 71
107 void SettingsPageRecognition::SaveInfo() { 72 void SettingsPageRecognition::SaveInfo() {
108 session.config.recognition.detect_media_players = detect_media_players; 73 session.config.recognition.detect_media_players = detect_media_players;
109 session.recognition.players = players; 74 session.config.recognition.players = players;
110 session.recognition.extensions = extensions;
111 } 75 }
112 76
113 SettingsPageRecognition::SettingsPageRecognition(QWidget* parent) 77 SettingsPageRecognition::SettingsPageRecognition(QWidget* parent)
114 : SettingsPage(parent, tr("Recognition")), 78 : SettingsPage(parent, tr("Recognition")),
115 players(session.recognition.players), 79 players(session.config.recognition.players) {
116 extensions(session.recognition.extensions) {
117 detect_media_players = session.config.recognition.detect_media_players; 80 detect_media_players = session.config.recognition.detect_media_players;
118 AddTab(CreatePlayersWidget(), tr("Media players")); 81 AddTab(CreatePlayersWidget(), tr("Media players"));
119 } 82 }