mirror of
https://github.com/opentx/opentx.git
synced 2025-07-26 09:45:21 +03:00
Merge pull request #8160 from opentx/elecpower/crv_ref_add_model
Add shared curves ui data model to curve reference
This commit is contained in:
commit
061d04309a
11 changed files with 49 additions and 26 deletions
|
@ -39,7 +39,7 @@ set(firmwares_QT
|
||||||
qt5_wrap_cpp(firmwares_SRCS ${firmwares_QT})
|
qt5_wrap_cpp(firmwares_SRCS ${firmwares_QT})
|
||||||
|
|
||||||
add_library(firmwares ${firmwares_SRCS} ${firmwares_HDRS})
|
add_library(firmwares ${firmwares_SRCS} ${firmwares_HDRS})
|
||||||
target_link_libraries(firmwares ${CPN_COMMON_LIB} Qt5::Core Qt5::Xml Qt5::Widgets)
|
target_link_libraries(firmwares ${CPN_COMMON_LIB} datamodels Qt5::Core Qt5::Xml Qt5::Widgets)
|
||||||
target_include_directories(firmwares
|
target_include_directories(firmwares
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_SOURCE_DIR}
|
${CMAKE_SOURCE_DIR}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "adjustmentreference.h"
|
#include "adjustmentreference.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
#include "modeldata.h"
|
#include "modeldata.h"
|
||||||
|
#include "rawitemfilteredmodel.h"
|
||||||
|
|
||||||
const QString CurveReference::toString(const ModelData * model, bool verbose) const
|
const QString CurveReference::toString(const ModelData * model, bool verbose) const
|
||||||
{
|
{
|
||||||
|
@ -109,11 +110,14 @@ constexpr int CURVE_REF_UI_HIDE_NEGATIVE_CURVES { 0x04 };
|
||||||
|
|
||||||
// static
|
// static
|
||||||
bool CurveReferenceUIManager::firsttime { true };
|
bool CurveReferenceUIManager::firsttime { true };
|
||||||
int CurveReferenceUIManager::flags{ 0 };
|
int CurveReferenceUIManager::flags { 0 };
|
||||||
bool CurveReferenceUIManager::hasCapabilityGvars{ false };
|
bool CurveReferenceUIManager::hasCapabilityGvars { false };
|
||||||
int CurveReferenceUIManager::numCurves{ 0 };
|
int CurveReferenceUIManager::numCurves { 0 };
|
||||||
|
RawItemFilteredModel * CurveReferenceUIManager::curveItemModel { nullptr };
|
||||||
|
QStandardItemModel * CurveReferenceUIManager::tempModel { nullptr };
|
||||||
|
|
||||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, CurveReference & curve, const ModelData & model, QObject * parent) :
|
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, CurveReference & curve, const ModelData & model,
|
||||||
|
RawItemFilteredModel * curveItemModel, QObject * parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
curveTypeCB(nullptr),
|
curveTypeCB(nullptr),
|
||||||
curveGVarCB(nullptr),
|
curveGVarCB(nullptr),
|
||||||
|
@ -123,11 +127,12 @@ CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, Curve
|
||||||
model(model),
|
model(model),
|
||||||
lock(false)
|
lock(false)
|
||||||
{
|
{
|
||||||
init();
|
init(curveItemModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheckBox * curveGVarCB, QSpinBox * curveValueSB, QComboBox * curveValueCB,
|
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheckBox * curveGVarCB, QSpinBox * curveValueSB,
|
||||||
CurveReference & curve, const ModelData & model, QObject * parent) :
|
QComboBox * curveValueCB, CurveReference & curve, const ModelData & model,
|
||||||
|
RawItemFilteredModel * curveItemModel, QObject * parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
curveTypeCB(curveTypeCB),
|
curveTypeCB(curveTypeCB),
|
||||||
curveGVarCB(curveGVarCB),
|
curveGVarCB(curveGVarCB),
|
||||||
|
@ -137,20 +142,24 @@ CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheck
|
||||||
model(model),
|
model(model),
|
||||||
lock(false)
|
lock(false)
|
||||||
{
|
{
|
||||||
init();
|
init(curveItemModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
CurveReferenceUIManager::~CurveReferenceUIManager()
|
CurveReferenceUIManager::~CurveReferenceUIManager()
|
||||||
{
|
{
|
||||||
|
delete tempModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CurveReferenceUIManager::init()
|
void CurveReferenceUIManager::init(RawItemFilteredModel * curveModel)
|
||||||
{
|
{
|
||||||
|
tempModel = new QStandardItemModel();
|
||||||
|
|
||||||
if (firsttime) {
|
if (firsttime) {
|
||||||
firsttime = false;
|
firsttime = false;
|
||||||
Firmware * fw = getCurrentFirmware();
|
Firmware * fw = getCurrentFirmware();
|
||||||
hasCapabilityGvars = fw->getCapability(Gvars);
|
hasCapabilityGvars = fw->getCapability(Gvars);
|
||||||
numCurves = fw->getCapability(NumCurves);
|
numCurves = fw->getCapability(NumCurves);
|
||||||
|
curveItemModel = curveModel;
|
||||||
|
|
||||||
if (!fw->getCapability(HasInputDiff))
|
if (!fw->getCapability(HasInputDiff))
|
||||||
flags |= (CURVE_REF_UI_HIDE_DIFF | CURVE_REF_UI_HIDE_NEGATIVE_CURVES);
|
flags |= (CURVE_REF_UI_HIDE_DIFF | CURVE_REF_UI_HIDE_NEGATIVE_CURVES);
|
||||||
|
@ -276,23 +285,22 @@ void CurveReferenceUIManager::populateTypeCB(QComboBox * cb, const CurveReferenc
|
||||||
void CurveReferenceUIManager::populateValueCB(QComboBox * cb, const CurveReference & curveRef, const ModelData * model)
|
void CurveReferenceUIManager::populateValueCB(QComboBox * cb, const CurveReference & curveRef, const ModelData * model)
|
||||||
{
|
{
|
||||||
if (cb) {
|
if (cb) {
|
||||||
cb->clear();
|
cb->setModel(tempModel); // do not want to clear/alter the shared curves model and set to nullptr is invalid
|
||||||
|
|
||||||
switch (curveRef.type) {
|
switch (curveRef.type) {
|
||||||
case CurveReference::CURVE_REF_DIFF:
|
case CurveReference::CURVE_REF_DIFF:
|
||||||
case CurveReference::CURVE_REF_EXPO:
|
case CurveReference::CURVE_REF_EXPO:
|
||||||
|
cb->clear();
|
||||||
Helpers::populateGVCB(*cb, curveRef.value, *model);
|
Helpers::populateGVCB(*cb, curveRef.value, *model);
|
||||||
break;
|
break;
|
||||||
case CurveReference::CURVE_REF_FUNC:
|
case CurveReference::CURVE_REF_FUNC:
|
||||||
|
cb->clear();
|
||||||
for (int i = 1; i <= MAX_CURVE_REF_FUNC; i++) {
|
for (int i = 1; i <= MAX_CURVE_REF_FUNC; i++) {
|
||||||
cb->addItem(CurveReference::functionToString(i), i);
|
cb->addItem(CurveReference::functionToString(i), i);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CurveReference::CURVE_REF_CUSTOM:
|
case CurveReference::CURVE_REF_CUSTOM:
|
||||||
// TODO replace with ui datamodel
|
cb->setModel(curveItemModel);
|
||||||
for (int i = ((flags & CURVE_REF_UI_HIDE_NEGATIVE_CURVES) ? 0 : -numCurves); i <= numCurves; i++) {
|
|
||||||
cb->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, i).toString(model, false), i);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -25,9 +25,11 @@
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
|
|
||||||
class ModelData;
|
class ModelData;
|
||||||
|
class RawItemFilteredModel;
|
||||||
|
|
||||||
class CurveReference {
|
class CurveReference {
|
||||||
|
|
||||||
|
@ -83,11 +85,12 @@ class CurveReferenceUIManager : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CurveReferenceUIManager(QComboBox *curveValueCB, CurveReference & curve, const ModelData & model, QObject * parent = nullptr);
|
CurveReferenceUIManager(QComboBox *curveValueCB, CurveReference & curve, const ModelData & model,
|
||||||
|
RawItemFilteredModel * curveItemModel, QObject * parent = nullptr);
|
||||||
CurveReferenceUIManager(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QSpinBox *curveValueSB, QComboBox *curveValueCB,
|
CurveReferenceUIManager(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QSpinBox *curveValueSB, QComboBox *curveValueCB,
|
||||||
CurveReference & curve, const ModelData & model, QObject * parent = nullptr);
|
CurveReference & curve, const ModelData & model, RawItemFilteredModel * curveItemModel, QObject * parent = nullptr);
|
||||||
virtual ~CurveReferenceUIManager();
|
virtual ~CurveReferenceUIManager();
|
||||||
void init();
|
void init(RawItemFilteredModel * curveModel);
|
||||||
void update();
|
void update();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
@ -109,6 +112,8 @@ class CurveReferenceUIManager : public QObject {
|
||||||
static int flags;
|
static int flags;
|
||||||
static bool hasCapabilityGvars;
|
static bool hasCapabilityGvars;
|
||||||
static int numCurves;
|
static int numCurves;
|
||||||
|
static RawItemFilteredModel * curveItemModel;
|
||||||
|
static QStandardItemModel * tempModel;
|
||||||
|
|
||||||
static void populateTypeCB(QComboBox * cb, const CurveReference & curveRef);
|
static void populateTypeCB(QComboBox * cb, const CurveReference & curveRef);
|
||||||
static void populateValueCB(QComboBox * cb, const CurveReference & curveRef, const ModelData * model = nullptr);
|
static void populateValueCB(QComboBox * cb, const CurveReference & curveRef, const ModelData * model = nullptr);
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings,
|
ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings,
|
||||||
Firmware * firmware, QString & inputName, RawItemFilteredModel * rawSourceModel,
|
Firmware * firmware, QString & inputName, RawItemFilteredModel * rawSourceModel,
|
||||||
RawItemFilteredModel * rawSwitchModel) :
|
RawItemFilteredModel * rawSwitchModel, RawItemFilteredModel * curveItemModel) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::ExpoDialog),
|
ui(new Ui::ExpoDialog),
|
||||||
model(model),
|
model(model),
|
||||||
|
@ -50,7 +50,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||||
|
|
||||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, -100, 100);
|
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, -100, 100);
|
||||||
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, model, 0, -100, 100);
|
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, model, 0, -100, 100);
|
||||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, ed->curve, model, this);
|
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, ed->curve, model, curveItemModel, this);
|
||||||
|
|
||||||
ui->switchesCB->setModel(rawSwitchModel);
|
ui->switchesCB->setModel(rawSwitchModel);
|
||||||
ui->switchesCB->setCurrentIndex(ui->switchesCB->findData(ed->swtch.toValue()));
|
ui->switchesCB->setCurrentIndex(ui->switchesCB->findData(ed->swtch.toValue()));
|
||||||
|
|
|
@ -38,7 +38,7 @@ class ExpoDialog : public QDialog {
|
||||||
public:
|
public:
|
||||||
ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expodata, GeneralSettings & generalSettings,
|
ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expodata, GeneralSettings & generalSettings,
|
||||||
Firmware * firmware, QString & inputName, RawItemFilteredModel * rawSourceItemModel,
|
Firmware * firmware, QString & inputName, RawItemFilteredModel * rawSourceItemModel,
|
||||||
RawItemFilteredModel * rawSwitchItemModel);
|
RawItemFilteredModel * rawSwitchItemModel, RawItemFilteredModel * curveItemModel);
|
||||||
~ExpoDialog();
|
~ExpoDialog();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -37,6 +37,10 @@ InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & g
|
||||||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &InputsPanel::onModelDataAboutToBeUpdated);
|
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &InputsPanel::onModelDataAboutToBeUpdated);
|
||||||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &InputsPanel::onModelDataUpdateComplete);
|
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &InputsPanel::onModelDataUpdateComplete);
|
||||||
|
|
||||||
|
curveFilteredModel = new RawItemFilteredModel(commonItemModels->curveItemModel(), RawItemFilteredModel::AllFilter, this);
|
||||||
|
connect(curveFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &InputsPanel::onModelDataAboutToBeUpdated);
|
||||||
|
connect(curveFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &InputsPanel::onModelDataUpdateComplete);
|
||||||
|
|
||||||
inputsCount = firmware->getCapability(VirtualInputs);
|
inputsCount = firmware->getCapability(VirtualInputs);
|
||||||
if (inputsCount == 0)
|
if (inputsCount == 0)
|
||||||
inputsCount = CPN_MAX_STICKS;
|
inputsCount = CPN_MAX_STICKS;
|
||||||
|
@ -190,7 +194,7 @@ void InputsPanel::gm_openExpo(int index)
|
||||||
if (firmware->getCapability(VirtualInputs))
|
if (firmware->getCapability(VirtualInputs))
|
||||||
inputName = model->inputNames[ed.chn];
|
inputName = model->inputNames[ed.chn];
|
||||||
|
|
||||||
ExpoDialog *dlg = new ExpoDialog(this, *model, &ed, generalSettings, firmware, inputName, rawSourceFilteredModel, rawSwitchFilteredModel);
|
ExpoDialog *dlg = new ExpoDialog(this, *model, &ed, generalSettings, firmware, inputName, rawSourceFilteredModel, rawSwitchFilteredModel, curveFilteredModel);
|
||||||
if (dlg->exec()) {
|
if (dlg->exec()) {
|
||||||
model->expoData[index] = ed;
|
model->expoData[index] = ed;
|
||||||
if (firmware->getCapability(VirtualInputs))
|
if (firmware->getCapability(VirtualInputs))
|
||||||
|
|
|
@ -75,6 +75,7 @@ class InputsPanel : public ModelPanel
|
||||||
CommonItemModels * commonItemModels;
|
CommonItemModels * commonItemModels;
|
||||||
RawItemFilteredModel *rawSourceFilteredModel;
|
RawItemFilteredModel *rawSourceFilteredModel;
|
||||||
RawItemFilteredModel *rawSwitchFilteredModel;
|
RawItemFilteredModel *rawSwitchFilteredModel;
|
||||||
|
RawItemFilteredModel *curveFilteredModel;
|
||||||
|
|
||||||
int getExpoIndex(unsigned int dch);
|
int getExpoIndex(unsigned int dch);
|
||||||
bool gm_insertExpo(int idx);
|
bool gm_insertExpo(int idx);
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
|
||||||
MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
||||||
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel) :
|
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel, RawItemFilteredModel * curveItemModel) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::MixerDialog),
|
ui(new Ui::MixerDialog),
|
||||||
model(model),
|
model(model),
|
||||||
|
@ -52,7 +52,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
|
||||||
|
|
||||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, md->weight, model, 100, -limit, limit);
|
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, md->weight, model, 100, -limit, limit);
|
||||||
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, md->sOffset, model, 0, -limit, limit);
|
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, md->sOffset, model, 0, -limit, limit);
|
||||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, md->curve, model, this);
|
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, md->curve, model, curveItemModel, this);
|
||||||
|
|
||||||
ui->MixDR_CB->setChecked(md->noExpo == 0);
|
ui->MixDR_CB->setChecked(md->noExpo == 0);
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ class MixerDialog : public QDialog {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
||||||
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel);
|
RawItemFilteredModel * rawSourceModel, RawItemFilteredModel * rawSwitchModel, RawItemFilteredModel * curveItemModel);
|
||||||
~MixerDialog();
|
~MixerDialog();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -37,6 +37,10 @@ MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
|
||||||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
|
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
|
||||||
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
|
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
|
||||||
|
|
||||||
|
curveFilteredModel = new RawItemFilteredModel(commonItemModels->curveItemModel(), RawItemFilteredModel::AllFilter, this);
|
||||||
|
connect(curveFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &MixesPanel::onModelDataAboutToBeUpdated);
|
||||||
|
connect(curveFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &MixesPanel::onModelDataUpdateComplete);
|
||||||
|
|
||||||
QGridLayout * mixesLayout = new QGridLayout(this);
|
QGridLayout * mixesLayout = new QGridLayout(this);
|
||||||
|
|
||||||
mixersListWidget = new MixersListWidget(this, false); // TODO enum
|
mixersListWidget = new MixersListWidget(this, false); // TODO enum
|
||||||
|
@ -185,7 +189,7 @@ void MixesPanel::gm_openMix(int index)
|
||||||
|
|
||||||
MixData mixd(model->mixData[index]);
|
MixData mixd(model->mixData[index]);
|
||||||
|
|
||||||
MixerDialog *dlg = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceFilteredModel, rawSwitchFilteredModel);
|
MixerDialog *dlg = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceFilteredModel, rawSwitchFilteredModel, curveFilteredModel);
|
||||||
if(dlg->exec()) {
|
if(dlg->exec()) {
|
||||||
model->mixData[index] = mixd;
|
model->mixData[index] = mixd;
|
||||||
emit modified();
|
emit modified();
|
||||||
|
|
|
@ -71,6 +71,7 @@ class MixesPanel : public ModelPanel
|
||||||
CommonItemModels * commonItemModels;
|
CommonItemModels * commonItemModels;
|
||||||
RawItemFilteredModel *rawSourceFilteredModel;
|
RawItemFilteredModel *rawSourceFilteredModel;
|
||||||
RawItemFilteredModel *rawSwitchFilteredModel;
|
RawItemFilteredModel *rawSwitchFilteredModel;
|
||||||
|
RawItemFilteredModel *curveFilteredModel;
|
||||||
|
|
||||||
int getMixerIndex(unsigned int dch);
|
int getMixerIndex(unsigned int dch);
|
||||||
bool gm_insertMix(int idx);
|
bool gm_insertMix(int idx);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue