summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Holthuis <jholthuis@mixxx.org>2021-12-15 00:23:58 +0100
committerJan Holthuis <jholthuis@mixxx.org>2021-12-15 00:23:58 +0100
commit978dc31ac1d3d9e4e2fa762f16b8f5aa0fb18837 (patch)
tree204922e9be3477731c5b0f4725f64ce3a65be9b7
parentc45eadbfdfa8d7f1c7f416e05169025bf2509af8 (diff)
DlgDeveloperTools: Move SortFilterProxy into ControlSortFilterModel for QML
-rw-r--r--CMakeLists.txt1
-rw-r--r--res/qml/DeveloperToolsWindow.qml3
-rw-r--r--src/control/controlsortfiltermodel.cpp32
-rw-r--r--src/control/controlsortfiltermodel.h26
-rw-r--r--src/dialog/dlgdevelopertools.cpp3
-rw-r--r--src/dialog/dlgdevelopertools.h5
-rw-r--r--src/qml/qmlapplication.cpp4
7 files changed, 65 insertions, 9 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index fec50143f0..6ffa7f11fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -468,6 +468,7 @@ add_library(mixxx-lib STATIC EXCLUDE_FROM_ALL
src/control/controllinpotmeter.cpp
src/control/controllogpotmeter.cpp
src/control/controlmodel.cpp
+ src/control/controlsortfiltermodel.cpp
src/control/controlobject.cpp
src/control/controlobjectscript.cpp
src/control/controlpotmeter.cpp
diff --git a/res/qml/DeveloperToolsWindow.qml b/res/qml/DeveloperToolsWindow.qml
index 6189cec40a..3683c22bad 100644
--- a/res/qml/DeveloperToolsWindow.qml
+++ b/res/qml/DeveloperToolsWindow.qml
@@ -33,7 +33,8 @@ Window {
clip: true
onWidthChanged: forceLayout()
- model: Mixxx.ControlModel {
+ model: Mixxx.ControlSortFilterModel {
+ id: controlModel
}
delegate: DelegateChooser {
diff --git a/src/control/controlsortfiltermodel.cpp b/src/control/controlsortfiltermodel.cpp
new file mode 100644
index 0000000000..4be21b03fe
--- /dev/null
+++ b/src/control/controlsortfiltermodel.cpp
@@ -0,0 +1,32 @@
+#include "control/controlsortfiltermodel.h"
+
+#include "moc_controlsortfiltermodel.cpp"
+
+ControlSortFilterModel::ControlSortFilterModel(QObject* pParent)
+ : QSortFilterProxyModel(pParent), m_pModel(new ControlModel(this)) {
+ setSourceModel(m_pModel);
+ setFilterCaseSensitivity(Qt::CaseInsensitive);
+ setFilterKeyColumn(ControlModel::CONTROL_COLUMN_FILTER);
+}
+
+ControlSortFilterModel::~ControlSortFilterModel() {
+}
+
+bool ControlSortFilterModel::sortDescending() const {
+ return sortOrder() == Qt::DescendingOrder;
+}
+
+void ControlSortFilterModel::sortByColumn(int column, bool descending) {
+ const bool oldColumn = sortColumn();
+ const Qt::SortOrder oldSortOrder = sortOrder();
+ const Qt::SortOrder sortOrder = descending ? Qt::DescendingOrder : Qt::AscendingOrder;
+
+ sort(column, sortOrder);
+
+ if (oldColumn != column) {
+ emit sortColumnChanged(column);
+ }
+ if (oldSortOrder != sortOrder) {
+ emit sortDescendingChanged(descending);
+ }
+}
diff --git a/src/control/controlsortfiltermodel.h b/src/control/controlsortfiltermodel.h
new file mode 100644
index 0000000000..74d2f46ca7
--- /dev/null
+++ b/src/control/controlsortfiltermodel.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <QSortFilterProxyModel>
+#include <QString>
+
+#include "control/controlmodel.h"
+
+class ControlSortFilterModel : public QSortFilterProxyModel {
+ Q_OBJECT
+ Q_PROPERTY(int sortColumn READ sortColumn NOTIFY sortColumnChanged)
+ Q_PROPERTY(bool sortDescending READ sortDescending NOTIFY sortDescendingChanged)
+ public:
+ ControlSortFilterModel(QObject* pParent = nullptr);
+ virtual ~ControlSortFilterModel();
+
+ bool sortDescending() const;
+
+ Q_INVOKABLE void sortByColumn(int sortColumn, bool sortDescending);
+
+ signals:
+ void sortColumnChanged(int sortColumn);
+ void sortDescendingChanged(bool sortDescending);
+
+ private:
+ ControlModel* m_pModel;
+};
diff --git a/src/dialog/dlgdevelopertools.cpp b/src/dialog/dlgdevelopertools.cpp
index 66fc7f7d5e..5946a4ee45 100644
--- a/src/dialog/dlgdevelopertools.cpp
+++ b/src/dialog/dlgdevelopertools.cpp
@@ -14,9 +14,6 @@ DlgDeveloperTools::DlgDeveloperTools(QWidget* pParent,
m_pConfig(pConfig) {
setupUi(this);
- m_controlProxyModel.setSourceModel(&m_controlModel);
- m_controlProxyModel.setFilterCaseSensitivity(Qt::CaseInsensitive);
- m_controlProxyModel.setFilterKeyColumn(ControlModel::CONTROL_COLUMN_FILTER);
controlsTable->setModel(&m_controlProxyModel);
controlsTable->hideColumn(ControlModel::CONTROL_COLUMN_TITLE);
controlsTable->hideColumn(ControlModel::CONTROL_COLUMN_DESCRIPTION);
diff --git a/src/dialog/dlgdevelopertools.h b/src/dialog/dlgdevelopertools.h
index f3e607eac4..2e36d135c5 100644
--- a/src/dialog/dlgdevelopertools.h
+++ b/src/dialog/dlgdevelopertools.h
@@ -5,8 +5,8 @@
#include <QSortFilterProxyModel>
#include <QTimerEvent>
-#include "control/controlmodel.h"
#include "control/controlobject.h"
+#include "control/controlsortfiltermodel.h"
#include "dialog/ui_dlgdevelopertoolsdlg.h"
#include "preferences/usersettings.h"
#include "util/statmodel.h"
@@ -26,8 +26,7 @@ class DlgDeveloperTools : public QDialog, public Ui::DlgDeveloperTools {
private:
UserSettingsPointer m_pConfig;
- ControlModel m_controlModel;
- QSortFilterProxyModel m_controlProxyModel;
+ ControlSortFilterModel m_controlProxyModel;
StatModel m_statModel;
QSortFilterProxyModel m_statProxyModel;
diff --git a/src/qml/qmlapplication.cpp b/src/qml/qmlapplication.cpp
index 5ea4e210a6..a21ce0c847 100644
--- a/src/qml/qmlapplication.cpp
+++ b/src/qml/qmlapplication.cpp
@@ -1,6 +1,6 @@
#include "qmlapplication.h"
-#include "control/controlmodel.h"
+#include "control/controlsortfiltermodel.h"
#include "moc_qmlapplication.cpp"
#include "qml/asyncimageprovider.h"
#include "qml/qmlconfigproxy.h"
@@ -94,7 +94,7 @@ QmlApplication::QmlApplication(
}));
qmlRegisterType<QmlControlProxy>("Mixxx", 0, 1, "ControlProxy");
- qmlRegisterType<ControlModel>("Mixxx", 0, 1, "ControlModel");
+ qmlRegisterType<ControlSortFilterModel>("Mixxx", 0, 1, "ControlSortFilterModel");
qmlRegisterType<QmlWaveformOverview>("Mixxx", 0, 1, "WaveformOverview");
qmlRegisterSingletonType<QmlEffectsManagerProxy>("Mixxx",