Rewrite EffectSelectDialog to add effect groups and delete Qt Designer UI file (#7024)
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
* EffectSelectDialog.h - dialog to choose effect plugin
|
||||
*
|
||||
* Copyright (c) 2006-2009 Tobias Doerffel <tobydox/at/users.sourceforge.net>
|
||||
* Copyright (c) 2023 Lost Robot <r94231/at/gmail.com>
|
||||
*
|
||||
* This file is part of LMMS - https://lmms.io
|
||||
*
|
||||
@@ -25,49 +26,86 @@
|
||||
#ifndef LMMS_GUI_EFFECT_SELECT_DIALOG_H
|
||||
#define LMMS_GUI_EFFECT_SELECT_DIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QStandardItemModel>
|
||||
|
||||
#include "Effect.h"
|
||||
|
||||
|
||||
namespace Ui { class EffectSelectDialog; }
|
||||
#include <QDialog>
|
||||
#include <QHeaderView>
|
||||
#include <QKeyEvent>
|
||||
#include <QMouseEvent>
|
||||
#include <QPushButton>
|
||||
#include <QRegExp>
|
||||
#include <QScrollArea>
|
||||
#include <QSortFilterProxyModel>
|
||||
#include <QStandardItemModel>
|
||||
#include <QTableView>
|
||||
|
||||
namespace lmms::gui
|
||||
{
|
||||
|
||||
class DualColumnFilterProxyModel : public QSortFilterProxyModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DualColumnFilterProxyModel(QObject* parent = nullptr) : QSortFilterProxyModel(parent)
|
||||
{
|
||||
}
|
||||
|
||||
void setEffectTypeFilter(const QString& filter)
|
||||
{
|
||||
m_effectTypeFilter = filter;
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
protected:
|
||||
bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override
|
||||
{
|
||||
QModelIndex nameIndex = sourceModel()->index(source_row, 0, source_parent);
|
||||
QModelIndex typeIndex = sourceModel()->index(source_row, 1, source_parent);
|
||||
|
||||
QString name = sourceModel()->data(nameIndex, Qt::DisplayRole).toString();
|
||||
QString type = sourceModel()->data(typeIndex, Qt::DisplayRole).toString();
|
||||
|
||||
QRegExp nameRegExp(filterRegExp());
|
||||
nameRegExp.setCaseSensitivity(Qt::CaseInsensitive);
|
||||
|
||||
bool nameFilterPassed = nameRegExp.indexIn(name) != -1;
|
||||
bool typeFilterPassed = type.contains(m_effectTypeFilter, Qt::CaseInsensitive);
|
||||
|
||||
return nameFilterPassed && typeFilterPassed;
|
||||
}
|
||||
|
||||
private:
|
||||
QString m_effectTypeFilter;
|
||||
};
|
||||
|
||||
|
||||
class EffectSelectDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
EffectSelectDialog( QWidget * _parent );
|
||||
~EffectSelectDialog() override;
|
||||
|
||||
Effect * instantiateSelectedPlugin( EffectChain * _parent );
|
||||
EffectSelectDialog(QWidget* parent);
|
||||
|
||||
Effect* instantiateSelectedPlugin(EffectChain* parent);
|
||||
|
||||
protected slots:
|
||||
void acceptSelection();
|
||||
void rowChanged( const QModelIndex &, const QModelIndex & );
|
||||
void sortAgain();
|
||||
void rowChanged(const QModelIndex&, const QModelIndex&);
|
||||
void updateSelection();
|
||||
|
||||
|
||||
bool eventFilter(QObject* obj, QEvent* event) override;
|
||||
|
||||
private:
|
||||
Ui::EffectSelectDialog * ui;
|
||||
|
||||
EffectKeyList m_effectKeys;
|
||||
EffectKey m_currentSelection;
|
||||
|
||||
QStandardItemModel m_sourceModel;
|
||||
QSortFilterProxyModel m_model;
|
||||
QWidget * m_descriptionWidget;
|
||||
|
||||
} ;
|
||||
|
||||
DualColumnFilterProxyModel m_model;
|
||||
QWidget* m_descriptionWidget;
|
||||
QTableView* m_pluginList;
|
||||
QScrollArea* m_scrollArea;
|
||||
QLineEdit* m_filterEdit;
|
||||
};
|
||||
|
||||
} // namespace lmms::gui
|
||||
|
||||
#endif // LMMS_GUI_EFFECT_SELECT_DIALOG_H
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user