diff options
author | Jan Holthuis <jholthuis@mixxx.org> | 2021-12-15 00:23:58 +0100 |
---|---|---|
committer | Jan Holthuis <jholthuis@mixxx.org> | 2021-12-15 00:23:58 +0100 |
commit | 978dc31ac1d3d9e4e2fa762f16b8f5aa0fb18837 (patch) | |
tree | 204922e9be3477731c5b0f4725f64ce3a65be9b7 | |
parent | c45eadbfdfa8d7f1c7f416e05169025bf2509af8 (diff) |
DlgDeveloperTools: Move SortFilterProxy into ControlSortFilterModel for QML
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | res/qml/DeveloperToolsWindow.qml | 3 | ||||
-rw-r--r-- | src/control/controlsortfiltermodel.cpp | 32 | ||||
-rw-r--r-- | src/control/controlsortfiltermodel.h | 26 | ||||
-rw-r--r-- | src/dialog/dlgdevelopertools.cpp | 3 | ||||
-rw-r--r-- | src/dialog/dlgdevelopertools.h | 5 | ||||
-rw-r--r-- | src/qml/qmlapplication.cpp | 4 |
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", |