Skip to content

Commit 8a12e14

Browse files
committed
Preset fragment: use model-based lists and move code into PresetManager singleton
1 parent 13ae06b commit 8a12e14

File tree

13 files changed

+251
-191
lines changed

13 files changed

+251
-191
lines changed

src/MainWindow.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ MainWindow::MainWindow(QString exepath,
144144
_refreshTick = new QTimer(this);
145145
connect(_refreshTick, &QTimer::timeout, this, &MainWindow::fireTimerSignal);
146146
_refreshTick->start(1000);
147+
148+
connect(&PresetManager::instance(), &PresetManager::wantsToWriteConfig, this, &MainWindow::applyConfig);
147149
}
148150

149151
// Allocate pointers and init important variables
@@ -249,7 +251,7 @@ MainWindow::MainWindow(QString exepath,
249251
determineIrsSelection();
250252
applyConfig();
251253
});
252-
connect(_trayIcon, &TrayIcon::loadPreset, &PresetManager::instance(), &PresetManager::load);
254+
connect(_trayIcon, &TrayIcon::loadPreset, &PresetManager::instance(), &PresetManager::loadFromPath);
253255
connect(_trayIcon, &TrayIcon::changeDisableFx, ui->disableFX, &QPushButton::setChecked);
254256
connect(_trayIcon, &TrayIcon::changeDisableFx, this, &MainWindow::applyConfig);
255257

@@ -268,13 +270,10 @@ MainWindow::MainWindow(QString exepath,
268270
_presetFragment = new FragmentHost<PresetFragment*>(new PresetFragment(_audioService, this), WAF::LeftSide, this);
269271
_settingsFragment = new FragmentHost<SettingsFragment*>(new SettingsFragment(_trayIcon, _audioService, this), WAF::BottomSide, this);
270272

271-
connect(_presetFragment->fragment(), &PresetFragment::wantsToWriteConfig, this, &MainWindow::applyConfig);
272273
connect(_settingsFragment->fragment(), &SettingsFragment::launchSetupWizard, this, &MainWindow::launchFirstRunSetup);
273274
connect(_settingsFragment->fragment(), &SettingsFragment::requestEelScriptExtract, this, &MainWindow::extractDefaultEelScripts);
274275
connect(_settingsFragment->fragment(), &SettingsFragment::reopenSettings, _settingsFragment, &FragmentHost<SettingsFragment*>::slideOutIn);
275276
connect(_styleHelper, &StyleHelper::iconColorChanged, _settingsFragment->fragment(), &SettingsFragment::updateButtonStyle);
276-
277-
connect(qApp, &QApplication::aboutToQuit, this, &MainWindow::saveGraphicEQView);
278277
}
279278

280279
// Init 3-dot menu button
@@ -495,6 +494,7 @@ void MainWindow::fireTimerSignal()
495494
void MainWindow::closeEvent(QCloseEvent *event)
496495
{
497496
QSettings().setValue("geometry", saveGeometry());
497+
saveGraphicEQView();
498498

499499
#ifdef Q_OS_OSX
500500

@@ -611,7 +611,7 @@ void MainWindow::loadExternalFile()
611611
return;
612612
}
613613

614-
PresetManager::instance().load(filename);
614+
PresetManager::instance().loadFromPath(filename);
615615
}
616616

617617
void MainWindow::saveExternalFile()
@@ -629,7 +629,7 @@ void MainWindow::saveExternalFile()
629629
}
630630

631631
applyConfig();
632-
PresetManager::instance().save(filename);
632+
PresetManager::instance().saveToPath(filename);
633633
}
634634

635635
// ---Config IO
@@ -1382,17 +1382,19 @@ void MainWindow::restoreGraphicEQView()
13821382
QVariantMap state;
13831383
state = ConfigIO::readFile(AppConfig::instance().getGraphicEQConfigFilePath());
13841384

1385-
if (state.count() >= 1)
1385+
ConfigContainer conf;
1386+
conf.setConfigMap(state);
1387+
if (state.count() >= 4 && conf.getInt("scrollY") != 0)
13861388
{
13871389
ui->graphicEq->loadPreferences(state);
13881390
}
13891391
else
13901392
{
13911393
ConfigContainer pref;
1392-
pref.setValue("scrollX", 165.346);
1393-
pref.setValue("scrollY", 50);
1394+
pref.setValue("scrollX", 102);
1395+
pref.setValue("scrollY", 825);
13941396
pref.setValue("zoomX", 0.561);
1395-
pref.setValue("zoomY", 0.713);
1397+
pref.setValue("zoomY", 3.822);
13961398
ui->graphicEq->loadPreferences(pref.getConfigMap());
13971399
}
13981400
}

src/data/PresetManager.cpp

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,23 @@ PresetManager::PresetManager() : _presetModel(new PresetListModel(this))
1414
loadRules();
1515
}
1616

17-
void PresetManager::load(const QString &filename)
17+
bool PresetManager::exists(const QString &name) const
18+
{
19+
return QFile::exists(AppConfig::instance().getPath("presets/") + name + ".conf");
20+
}
21+
22+
bool PresetManager::loadFromPath(const QString &filename)
1823
{
1924
const QString &src = filename;
2025
const QString dest = AppConfig::instance().getDspConfPath();
2126

27+
if (!QFile::exists(src))
28+
{
29+
// Preset does not exist anymore, rescan presets
30+
this->_presetModel->rescan();
31+
return false;
32+
}
33+
2234
if (QFile::exists(dest))
2335
{
2436
QFile::remove(dest);
@@ -27,10 +39,44 @@ void PresetManager::load(const QString &filename)
2739
QFile::copy(src, dest);
2840
Log::debug("PresetManager::load: Loading from " + filename);
2941
DspConfig::instance().load();
42+
return true;
43+
}
44+
45+
46+
bool PresetManager::load(const QString &name)
47+
{
48+
return loadFromPath(AppConfig::instance().getPath("presets/") + name + ".conf");
49+
}
50+
51+
void PresetManager::rename(const QString &name, const QString &newName)
52+
{
53+
auto path = AppConfig::instance().getPath("presets/") + name + ".conf";
54+
if (QFile::exists(path))
55+
{
56+
QFile::rename(path, QDir(path).filePath(newName + ".conf"));
57+
}
58+
this->_presetModel->rescan();
59+
}
60+
61+
void PresetManager::remove(const QString &name)
62+
{
63+
auto path = AppConfig::instance().getPath("presets/") + name + ".conf";
64+
if (QFile::exists(path))
65+
{
66+
QFile::remove(path);
67+
}
68+
this->_presetModel->rescan();
69+
}
70+
71+
void PresetManager::save(const QString &name)
72+
{
73+
saveToPath(AppConfig::instance().getPath("presets/") + name + ".conf");
3074
}
3175

32-
void PresetManager::save(const QString &filename)
76+
void PresetManager::saveToPath(const QString &filename)
3377
{
78+
emit wantsToWriteConfig();
79+
3480
const QString src = AppConfig::instance().getDspConfPath();
3581
const QString &dest = filename;
3682

@@ -41,6 +87,7 @@ void PresetManager::save(const QString &filename)
4187

4288
QFile::copy(src, dest);
4389
Log::debug("PresetManager::save: Saving to " + filename);
90+
this->_presetModel->rescan();
4491
}
4592

4693
void PresetManager::onOutputDeviceChanged(const QString &deviceName, const QString &deviceId)
@@ -49,7 +96,7 @@ void PresetManager::onOutputDeviceChanged(const QString &deviceName, const QStri
4996
{
5097
if(rule.deviceId == deviceId)
5198
{
52-
load(AppConfig::instance().getPath("presets/" + rule.preset + ".conf"));
99+
loadFromPath(AppConfig::instance().getPath("presets/" + rule.preset + ".conf"));
53100
emit presetAutoloaded(deviceName);
54101
break;
55102
}

src/data/PresetManager.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,24 @@ class PresetManager : public QObject
2222
PresetManager(PresetManager const &) = delete;
2323
PresetManager();
2424

25-
QVector<PresetRule> rules() const;
25+
bool exists(const QString& name) const;
2626

27+
QVector<PresetRule> rules() const;
2728
void setRules(const QVector<PresetRule> &newRules);
2829

2930
PresetListModel *presetModel() const;
3031

3132
signals:
3233
void presetAutoloaded(const QString& deviceName);
34+
void wantsToWriteConfig();
3335

3436
public slots:
35-
void save(const QString &filename);
36-
void load(const QString &filename);
37+
void saveToPath(const QString &filename);
38+
bool loadFromPath(const QString &filename);
39+
void rename(const QString &name, const QString &newName);
40+
void remove(const QString &name);
41+
bool load(const QString &filename);
42+
void save(const QString &name);
3743

3844
void onOutputDeviceChanged(const QString& deviceName, const QString& deviceId);
3945

src/data/model/PresetListModel.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
PresetListModel::PresetListModel(QObject *parent)
88
: QAbstractListModel(parent)
99
{
10+
rescan();
1011
}
1112

1213
int PresetListModel::rowCount(const QModelIndex &parent) const

src/interface/CTableView.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include "CTableView.h"
2+
3+
void CTableView::paintEvent(QPaintEvent *e) {
4+
QTableView::paintEvent(e);
5+
6+
if (!emptyViewEnabled || (model() && model()->rowCount(rootIndex()) > 0))
7+
{
8+
return;
9+
}
10+
11+
QPainter p(this->viewport());
12+
p.setPen(this->palette().placeholderText().color());
13+
p.drawText(rect(), Qt::AlignCenter, emptyViewTitle);
14+
}
15+
16+
bool CTableView::getEmptyViewEnabled() const
17+
{
18+
return emptyViewEnabled;
19+
}
20+
21+
void CTableView::setEmptyViewEnabled(bool newEmptyViewEnabled)
22+
{
23+
emptyViewEnabled = newEmptyViewEnabled;
24+
}
25+
26+
QString CTableView::getEmptyViewTitle() const
27+
{
28+
return emptyViewTitle;
29+
}
30+
31+
void CTableView::setEmptyViewTitle(const QString &newEmptyViewTitle)
32+
{
33+
emptyViewTitle = newEmptyViewTitle;
34+
}

src/interface/CTableView.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#ifndef CTABLEVIEW_H
2+
#define CTABLEVIEW_H
3+
4+
#include <QTableView>
5+
#include <QPainter>
6+
7+
class CTableView : public QTableView
8+
{
9+
Q_OBJECT
10+
public:
11+
CTableView(QWidget* parent = 0) : QTableView(parent) {}
12+
13+
bool getEmptyViewEnabled() const;
14+
void setEmptyViewEnabled(bool newEmptyViewEnabled);
15+
16+
QString getEmptyViewTitle() const;
17+
void setEmptyViewTitle(const QString &newEmptyViewTitle);
18+
19+
protected:
20+
void paintEvent(QPaintEvent *e);
21+
22+
private:
23+
bool emptyViewEnabled = false;
24+
QString emptyViewTitle;
25+
26+
};
27+
28+
#endif // CTABLEVIEW_H

src/interface/dialog/PresetRuleDialog.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ PresetRuleDialog::PresetRuleDialog(IAudioService* service, QWidget *parent) :
3030
ui->ruleTable->setItemDelegate(ruleDelegate);
3131
ui->ruleTable->setModel(ruleModel);
3232
ui->ruleTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
33+
ui->ruleTable->setEmptyViewEnabled(true);
34+
ui->ruleTable->setEmptyViewTitle("No rules defined");
3335

3436
ruleModel->load();
3537
deviceModel->load(service->sinkDevices());

src/interface/dialog/PresetRuleDialog.ui

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<number>0</number>
3535
</property>
3636
<item>
37-
<widget class="QTableView" name="ruleTable">
37+
<widget class="CTableView" name="ruleTable">
3838
<property name="selectionMode">
3939
<enum>QAbstractItemView::ExtendedSelection</enum>
4040
</property>
@@ -44,6 +44,9 @@
4444
<property name="sortingEnabled">
4545
<bool>false</bool>
4646
</property>
47+
<attribute name="verticalHeaderVisible">
48+
<bool>false</bool>
49+
</attribute>
4750
</widget>
4851
</item>
4952
</layout>
@@ -100,6 +103,13 @@
100103
</item>
101104
</layout>
102105
</widget>
106+
<customwidgets>
107+
<customwidget>
108+
<class>CTableView</class>
109+
<extends>QTableView</extends>
110+
<header>interface/CTableView.h</header>
111+
</customwidget>
112+
</customwidgets>
103113
<resources/>
104114
<connections/>
105115
</ui>

0 commit comments

Comments
 (0)