Major refactoring continued
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
|
||||
set(datamodels_SRCS
|
||||
rawitemdatamodels.cpp
|
||||
rawitemfilteredmodel.cpp
|
||||
compounditemmodels.cpp
|
||||
filtereditemmodels.cpp
|
||||
)
|
||||
|
||||
set(datamodels_HDRS
|
||||
rawitemdatamodels.h
|
||||
rawitemfilteredmodel.h
|
||||
compounditemmodels.h
|
||||
filtereditemmodels.h
|
||||
)
|
||||
|
||||
qt5_wrap_cpp(datamodels_SRCS ${datamodels_HDRS})
|
||||
|
||||
+195
-106
@@ -18,30 +18,81 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "rawitemdatamodels.h"
|
||||
#include "compounditemmodels.h"
|
||||
#include "generalsettings.h"
|
||||
#include "eeprominterface.h"
|
||||
#include "modeldata.h"
|
||||
#include "adjustmentreference.h"
|
||||
|
||||
// static
|
||||
QString AbstractItemModel::idToString(const int value)
|
||||
{
|
||||
switch (value) {
|
||||
case IMID_Unknown:
|
||||
return "Unknown";
|
||||
case IMID_RawSource:
|
||||
return "RawSource";
|
||||
case IMID_RawSwitch:
|
||||
return "RawSwitch";
|
||||
case IMID_Curve:
|
||||
return "Curve";
|
||||
case IMID_GVarRef:
|
||||
return "GVarRef";
|
||||
case IMID_ThrSource:
|
||||
return "ThrSource";
|
||||
case IMID_CustomFuncAction:
|
||||
return "CustomFuncAction";
|
||||
case IMID_CustomFuncResetParam:
|
||||
return "CustomFuncResetParam";
|
||||
case IMID_TeleSource:
|
||||
return "TeleSource";
|
||||
case IMID_CurveRefType:
|
||||
return "CurveRefType";
|
||||
case IMID_CurveRefFunc:
|
||||
return "CurveRefFunc";
|
||||
default:
|
||||
return "Custom";
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void AbstractItemModel::dumpItemModelContents(AbstractItemModel * itemModel)
|
||||
{
|
||||
if (itemModel) {
|
||||
qDebug() << "modelid:" << itemModel->getId();
|
||||
qDebug() << "id:" << itemModel->getId() << "name:" << itemModel->getName();
|
||||
|
||||
for (int i = 0; i < itemModel->rowCount(); ++i) {
|
||||
qDebug() << "row:" << i
|
||||
<< "text:" << itemModel->data(itemModel->index(i, 0), Qt::DisplayRole).toString()
|
||||
<< "id:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::ItemIdRole).toInt()
|
||||
<< "avail:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IsAvailableRole).toBool()
|
||||
<< "flags:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::ItemFlagsRole).toInt()
|
||||
<< "type:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::ItemTypeRole).toInt();
|
||||
<< "id:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Id).toInt()
|
||||
<< "avail:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Available).toBool()
|
||||
<< "flags:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Flags).toInt()
|
||||
<< "type:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Type).toInt();
|
||||
}
|
||||
}
|
||||
else
|
||||
qDebug() << "Error: model did not cast";
|
||||
qDebug() << "Error: model not of class AbstractItemModel";
|
||||
}
|
||||
|
||||
//
|
||||
// AbstractStaticItemModel
|
||||
//
|
||||
|
||||
void AbstractStaticItemModel::loadItemList()
|
||||
{
|
||||
foreach (const ListItem *item, itemList) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setText(item->text);
|
||||
modelItem->setData(item->id, IMDR_Id);
|
||||
modelItem->setData(item->type, IMDR_Type);
|
||||
modelItem->setData(item->flags, IMDR_Flags);
|
||||
modelItem->setData(item->isAvailable, IMDR_Available);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
|
||||
itemList.clear();
|
||||
};
|
||||
|
||||
//
|
||||
// RawSourceItemModel
|
||||
//
|
||||
@@ -50,8 +101,8 @@ RawSourceItemModel::RawSourceItemModel(const GeneralSettings * const generalSett
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(RawSourceId);
|
||||
setUpdateMask(AllTriggers &~ (CurvesUpdated | ScriptsUpdated));
|
||||
setId(IMID_RawSource);
|
||||
setUpdateMask(IMUE_All &~ (IMUE_Curves | IMUE_Scripts));
|
||||
|
||||
addItems(SOURCE_TYPE_NONE, RawSource::NoneGroup, 1);
|
||||
for (int i = 0; i < firmware->getCapability(LuaScripts); i++)
|
||||
@@ -74,7 +125,7 @@ RawSourceItemModel::RawSourceItemModel(const GeneralSettings * const generalSett
|
||||
void RawSourceItemModel::setDynamicItemData(QStandardItem * item, const RawSource & src) const
|
||||
{
|
||||
item->setText(src.toString(modelData, generalSettings, boardType));
|
||||
item->setData(src.isAvailable(modelData, generalSettings, boardType), IsAvailableRole);
|
||||
item->setData(src.isAvailable(modelData, generalSettings, boardType), IMDR_Available);
|
||||
}
|
||||
|
||||
void RawSourceItemModel::addItems(const RawSourceType & type, const int group, const int count, const int start)
|
||||
@@ -82,21 +133,21 @@ void RawSourceItemModel::addItems(const RawSourceType & type, const int group, c
|
||||
for (int i = start; i < start + count; i++) {
|
||||
const RawSource src = RawSource(type, i);
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(src.toValue(), ItemIdRole);
|
||||
modelItem->setData(type, ItemTypeRole);
|
||||
modelItem->setData(group, ItemFlagsRole);
|
||||
modelItem->setData(src.toValue(), IMDR_Id);
|
||||
modelItem->setData(type, IMDR_Type);
|
||||
modelItem->setData(group, IMDR_Flags);
|
||||
setDynamicItemData(modelItem, src);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
}
|
||||
|
||||
void RawSourceItemModel::update(const UpdateTrigger trigger)
|
||||
void RawSourceItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), RawSource(item(i)->data(ItemIdRole).toInt()));
|
||||
setDynamicItemData(item(i), RawSource(item(i)->data(IMDR_Id).toInt()));
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -110,8 +161,8 @@ RawSwitchItemModel::RawSwitchItemModel(const GeneralSettings * const generalSett
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(RawSwitchId);
|
||||
setUpdateMask(FlightModesUpdated | LogicalSwitchesUpdated | TeleSensorsUpdated);
|
||||
setId(IMID_RawSwitch);
|
||||
setUpdateMask(IMUE_FlightModes | IMUE_LogicalSwitches | IMUE_TeleSensors);
|
||||
|
||||
// Descending switch direction: NOT (!) switches
|
||||
addItems(SWITCH_TYPE_ACT, -1);
|
||||
@@ -143,7 +194,7 @@ RawSwitchItemModel::RawSwitchItemModel(const GeneralSettings * const generalSett
|
||||
void RawSwitchItemModel::setDynamicItemData(QStandardItem * item, const RawSwitch & rsw) const
|
||||
{
|
||||
item->setText(rsw.toString(boardType, generalSettings, modelData));
|
||||
item->setData(rsw.isAvailable(modelData, generalSettings, boardType), IsAvailableRole);
|
||||
item->setData(rsw.isAvailable(modelData, generalSettings, boardType), IMDR_Available);
|
||||
}
|
||||
|
||||
void RawSwitchItemModel::addItems(const RawSwitchType & type, int count)
|
||||
@@ -186,21 +237,21 @@ void RawSwitchItemModel::addItems(const RawSwitchType & type, int count)
|
||||
for ( ; i < count; ++i) {
|
||||
RawSwitch rs(type, i + rawIdxAdj);
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(rs.toValue(), ItemIdRole);
|
||||
modelItem->setData(type, ItemTypeRole);
|
||||
modelItem->setData(context, ItemFlagsRole);
|
||||
modelItem->setData(rs.toValue(), IMDR_Id);
|
||||
modelItem->setData(type, IMDR_Type);
|
||||
modelItem->setData(context, IMDR_Flags);
|
||||
setDynamicItemData(modelItem, rs);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
}
|
||||
|
||||
void RawSwitchItemModel::update(const UpdateTrigger trigger)
|
||||
void RawSwitchItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), RawSwitch(item(i)->data(ItemIdRole).toInt()));
|
||||
setDynamicItemData(item(i), RawSwitch(item(i)->data(IMDR_Id).toInt()));
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -214,22 +265,19 @@ CurveItemModel::CurveItemModel(const GeneralSettings * const generalSettings, co
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(CurveId);
|
||||
setId(IMID_Curve);
|
||||
|
||||
if (!modelData)
|
||||
return;
|
||||
|
||||
setUpdateMask(CurvesUpdated);
|
||||
setUpdateMask(IMUE_Curves);
|
||||
|
||||
const int count = firmware->getCapability(NumCurves);
|
||||
|
||||
for (int i = -count ; i <= count; ++i) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
int flags = i < 0 ? DataGroups::NegativeGroup : DataGroups::PositiveGroup;
|
||||
if (i == 0)
|
||||
flags |= DataGroups::NoneGroup;
|
||||
modelItem->setData(flags, ItemFlagsRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
modelItem->setData(i < 0 ? IMDG_Negative : i > 0 ? IMDG_Positive : IMDG_None, IMDR_Flags);
|
||||
setDynamicItemData(modelItem, i);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
@@ -239,16 +287,16 @@ void CurveItemModel::setDynamicItemData(QStandardItem * item, const int value) c
|
||||
{
|
||||
CurveReference cr = CurveReference(CurveReference::CURVE_REF_CUSTOM, value);
|
||||
item->setText(cr.toString(modelData, false));
|
||||
item->setData(cr.isAvailable(), IsAvailableRole);
|
||||
item->setData(cr.isAvailable(), IMDR_Available);
|
||||
}
|
||||
|
||||
void CurveItemModel::update(const UpdateTrigger trigger)
|
||||
void CurveItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), item(i)->data(ItemIdRole).toInt());
|
||||
setDynamicItemData(item(i), item(i)->data(IMDR_Id).toInt());
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -262,12 +310,12 @@ GVarReferenceItemModel::GVarReferenceItemModel(const GeneralSettings * const gen
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(GVarRefId);
|
||||
setId(IMID_GVarRef);
|
||||
|
||||
if (!modelData)
|
||||
return;
|
||||
|
||||
setUpdateMask(GVarsUpdated | FlightModesUpdated | LogicalSwitchesUpdated);
|
||||
setUpdateMask(IMUE_GVars | IMUE_FlightModes | IMUE_LogicalSwitches);
|
||||
|
||||
const int count = firmware->getCapability(Gvars);
|
||||
|
||||
@@ -284,8 +332,8 @@ void GVarReferenceItemModel::addItems(int count)
|
||||
for ( ; i < count; ++i) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
AdjustmentReference ar(AdjustmentReference::ADJUST_REF_GVAR, i);
|
||||
modelItem->setData(ar.toValue(), ItemIdRole);
|
||||
modelItem->setData(i < 0 ? DataGroups::NegativeGroup : DataGroups::PositiveGroup, ItemFlagsRole);
|
||||
modelItem->setData(ar.toValue(), IMDR_Id);
|
||||
modelItem->setData(i < 0 ? IMDG_Negative : i > 0 ? IMDG_Positive : IMDG_None, IMDR_Flags);
|
||||
setDynamicItemData(modelItem, ar);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
@@ -294,16 +342,16 @@ void GVarReferenceItemModel::addItems(int count)
|
||||
void GVarReferenceItemModel::setDynamicItemData(QStandardItem * item, const AdjustmentReference & ar) const
|
||||
{
|
||||
item->setText(ar.toString(modelData, false));
|
||||
item->setData(ar.isAvailable(), IsAvailableRole);
|
||||
item->setData(ar.isAvailable(), IMDR_Available);
|
||||
}
|
||||
|
||||
void GVarReferenceItemModel::update(const UpdateTrigger trigger)
|
||||
void GVarReferenceItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), AdjustmentReference(item(i)->data(ItemIdRole).toInt()));
|
||||
setDynamicItemData(item(i), AdjustmentReference(item(i)->data(IMDR_Id).toInt()));
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -317,16 +365,16 @@ ThrottleSourceItemModel::ThrottleSourceItemModel(const GeneralSettings * const g
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(ThrSourceId);
|
||||
setId(IMID_ThrSource);
|
||||
|
||||
if (!modelData)
|
||||
return;
|
||||
|
||||
setUpdateMask(TimersUpdated | InputsUpdated | TeleSensorsUpdated);
|
||||
setUpdateMask(IMUE_Timers | IMUE_Inputs | IMUE_TeleSensors);
|
||||
|
||||
for (int i = 0; i < modelData->thrTraceSrcCount(); i++) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
setDynamicItemData(modelItem, i);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
@@ -335,16 +383,16 @@ ThrottleSourceItemModel::ThrottleSourceItemModel(const GeneralSettings * const g
|
||||
void ThrottleSourceItemModel::setDynamicItemData(QStandardItem * item, const int value) const
|
||||
{
|
||||
item->setText(modelData->thrTraceSrcToString(value));
|
||||
item->setData(modelData->isThrTraceSrcAvailable(generalSettings, value), IsAvailableRole);
|
||||
item->setData(modelData->isThrTraceSrcAvailable(generalSettings, value), IMDR_Available);
|
||||
}
|
||||
|
||||
void ThrottleSourceItemModel::update(const UpdateTrigger trigger)
|
||||
void ThrottleSourceItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), item(i)->data(ItemIdRole).toInt());
|
||||
setDynamicItemData(item(i), item(i)->data(IMDR_Id).toInt());
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -358,13 +406,13 @@ CustomFuncActionItemModel::CustomFuncActionItemModel(const GeneralSettings * con
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(CustomFuncActionId);
|
||||
setUpdateMask(AllTriggers &~ (CurvesUpdated | ScriptsUpdated));
|
||||
setId(IMID_CustomFuncAction);
|
||||
setUpdateMask(IMUE_All &~ (IMUE_Curves | IMUE_Scripts));
|
||||
|
||||
for (int i = 0; i < AssignFunc::FuncCount; i++) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
modelItem->setData(CustomFunctionData::funcContext(i), ItemFlagsRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
modelItem->setData(CustomFunctionData::funcContext(i), IMDR_Flags);
|
||||
setDynamicItemData(modelItem, i);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
@@ -373,16 +421,16 @@ CustomFuncActionItemModel::CustomFuncActionItemModel(const GeneralSettings * con
|
||||
void CustomFuncActionItemModel::setDynamicItemData(QStandardItem * item, const int value) const
|
||||
{
|
||||
item->setText(CustomFunctionData(AssignFunc(value)).funcToString(modelData));
|
||||
item->setData(CustomFunctionData::isFuncAvailable(value), IsAvailableRole);
|
||||
item->setData(CustomFunctionData::isFuncAvailable(value), IMDR_Available);
|
||||
}
|
||||
|
||||
void CustomFuncActionItemModel::update(const UpdateTrigger trigger)
|
||||
void CustomFuncActionItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), item(i)->data(ItemIdRole).toInt());
|
||||
setDynamicItemData(item(i), item(i)->data(IMDR_Id).toInt());
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -396,12 +444,12 @@ CustomFuncResetParamItemModel::CustomFuncResetParamItemModel(const GeneralSettin
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(CustomFuncResetParamId);
|
||||
setUpdateMask(TeleSensorsUpdated);
|
||||
setId(IMID_CustomFuncResetParam);
|
||||
setUpdateMask(IMUE_TeleSensors);
|
||||
|
||||
for (int i = 0; i < CustomFunctionData::resetParamCount(modelData); i++) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
setDynamicItemData(modelItem, i);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
@@ -412,16 +460,16 @@ void CustomFuncResetParamItemModel::setDynamicItemData(QStandardItem * item, con
|
||||
CustomFunctionData cfd = CustomFunctionData(AssignFunc::FuncReset);
|
||||
cfd.param = value;
|
||||
item->setText(cfd.paramToString(modelData));
|
||||
item->setData(CustomFunctionData::isResetParamAvailable(modelData, value), IsAvailableRole);
|
||||
item->setData(CustomFunctionData::isResetParamAvailable(modelData, value), IMDR_Available);
|
||||
}
|
||||
|
||||
void CustomFuncResetParamItemModel::update(const UpdateTrigger trigger)
|
||||
void CustomFuncResetParamItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i)
|
||||
setDynamicItemData(item(i), item(i)->data(ItemIdRole).toInt());
|
||||
setDynamicItemData(item(i), item(i)->data(IMDR_Id).toInt());
|
||||
|
||||
emit updateComplete();
|
||||
}
|
||||
@@ -435,21 +483,18 @@ TelemetrySourceItemModel::TelemetrySourceItemModel(const GeneralSettings * const
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractDynamicItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(TeleSourceId);
|
||||
setId(IMID_TeleSource);
|
||||
|
||||
if (!modelData)
|
||||
return;
|
||||
|
||||
setUpdateMask(TeleSensorsUpdated);
|
||||
setUpdateMask(IMUE_TeleSensors);
|
||||
const int count = firmware->getCapability(Sensors);
|
||||
|
||||
for (int i = -count; i <= count; ++i) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
int flags = i < 0 ? DataGroups::NegativeGroup : DataGroups::PositiveGroup;
|
||||
if (i == 0)
|
||||
flags |= DataGroups::NoneGroup;
|
||||
modelItem->setData(flags, ItemFlagsRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
modelItem->setData(i < 0 ? IMDG_Negative : i > 0 ? IMDG_Positive : IMDG_None, IMDR_Flags);
|
||||
setDynamicItemData(modelItem, i);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
@@ -458,16 +503,16 @@ TelemetrySourceItemModel::TelemetrySourceItemModel(const GeneralSettings * const
|
||||
void TelemetrySourceItemModel::setDynamicItemData(QStandardItem * item, const int value) const
|
||||
{
|
||||
item->setText(SensorData::sourceToString(modelData, value));
|
||||
item->setData(SensorData::isSourceAvailable(modelData, value), IsAvailableRole);
|
||||
item->setData(SensorData::isSourceAvailable(modelData, value), IMDR_Available);
|
||||
}
|
||||
|
||||
void TelemetrySourceItemModel::update(const UpdateTrigger trigger)
|
||||
void TelemetrySourceItemModel::update(const int event)
|
||||
{
|
||||
if (doUpdate(trigger)) {
|
||||
if (doUpdate(event)) {
|
||||
emit aboutToBeUpdated();
|
||||
|
||||
for (int i = 0; i < rowCount(); ++i) {
|
||||
setDynamicItemData(item(i), item(i)->data(ItemIdRole).toInt());
|
||||
setDynamicItemData(item(i), item(i)->data(IMDR_Id).toInt());
|
||||
}
|
||||
|
||||
emit updateComplete();
|
||||
@@ -482,13 +527,13 @@ CurveRefTypeItemModel::CurveRefTypeItemModel(const GeneralSettings * const gener
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractStaticItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(CurveRefTypeId);
|
||||
setId(IMID_CurveRefType);
|
||||
|
||||
for (int i = 0; i <= CurveReference::MAX_CURVE_REF_TYPE; i++) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setText(CurveReference::typeToString((CurveReference::CurveRefType)i));
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
modelItem->setData(CurveReference::isTypeAvailable((CurveReference::CurveRefType)i), IsAvailableRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
modelItem->setData(CurveReference::isTypeAvailable((CurveReference::CurveRefType)i), IMDR_Available);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
}
|
||||
@@ -501,22 +546,43 @@ CurveRefFuncItemModel::CurveRefFuncItemModel(const GeneralSettings * const gener
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
AbstractStaticItemModel(generalSettings, modelData, firmware, board, boardType)
|
||||
{
|
||||
setId(CurveRefFuncId);
|
||||
setId(IMID_CurveRefFunc);
|
||||
|
||||
for (int i = 1; i <= CurveReference::functionCount(); i++) {
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setText(CurveReference::functionToString(i));
|
||||
modelItem->setData(i, ItemIdRole);
|
||||
modelItem->setData(CurveReference::isFunctionAvailable(i), IsAvailableRole);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
modelItem->setData(CurveReference::isFunctionAvailable(i), IMDR_Available);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// ItemModelsFactory
|
||||
// PrecisionItemModel
|
||||
//
|
||||
|
||||
ItemModelsFactory::ItemModelsFactory(const GeneralSettings * const generalSettings, const ModelData * const modelData) :
|
||||
PrecisionItemModel::PrecisionItemModel(const int minDecimals, const int maxDecimals, const QString suffix, const bool placeholders) :
|
||||
AbstractStaticItemModel()
|
||||
{
|
||||
for (int i = minDecimals, j = maxDecimals; j >= 0; i++, j--) {
|
||||
QString str = QString("0.%1").arg(QString(i, '0'));
|
||||
if (placeholders)
|
||||
str.append(QString(j, '_'));
|
||||
if (!suffix.isEmpty())
|
||||
str.append(QString(" %1").arg(suffix));
|
||||
QStandardItem * modelItem = new QStandardItem();
|
||||
modelItem->setText(str);
|
||||
modelItem->setData(i, IMDR_Id);
|
||||
modelItem->setData(true, IMDR_Available);
|
||||
appendRow(modelItem);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// CompoundItemModelFactory
|
||||
//
|
||||
|
||||
CompoundItemModelFactory::CompoundItemModelFactory(const GeneralSettings * const generalSettings, const ModelData * const modelData) :
|
||||
generalSettings(generalSettings),
|
||||
modelData(modelData)
|
||||
{
|
||||
@@ -525,43 +591,43 @@ ItemModelsFactory::ItemModelsFactory(const GeneralSettings * const generalSettin
|
||||
boardType = getCurrentBoard();
|
||||
}
|
||||
|
||||
ItemModelsFactory::~ItemModelsFactory()
|
||||
CompoundItemModelFactory::~CompoundItemModelFactory()
|
||||
{
|
||||
unregisterItemModels();
|
||||
delete board;
|
||||
}
|
||||
|
||||
void ItemModelsFactory::addItemModel(const AbstractItemModel::ItemModelId id)
|
||||
void CompoundItemModelFactory::addItemModel(const int id)
|
||||
{
|
||||
switch (id) {
|
||||
case AbstractItemModel::RawSourceId:
|
||||
case AbstractItemModel::IMID_RawSource:
|
||||
registerItemModel(new RawSourceItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::RawSwitchId:
|
||||
case AbstractItemModel::IMID_RawSwitch:
|
||||
registerItemModel(new RawSwitchItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::CurveId:
|
||||
case AbstractItemModel::IMID_Curve:
|
||||
registerItemModel(new CurveItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::GVarRefId:
|
||||
case AbstractItemModel::IMID_GVarRef:
|
||||
registerItemModel(new GVarReferenceItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::ThrSourceId:
|
||||
case AbstractItemModel::IMID_ThrSource:
|
||||
registerItemModel(new ThrottleSourceItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::CustomFuncActionId:
|
||||
case AbstractItemModel::IMID_CustomFuncAction:
|
||||
registerItemModel(new CustomFuncActionItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::CustomFuncResetParamId:
|
||||
case AbstractItemModel::IMID_CustomFuncResetParam:
|
||||
registerItemModel(new CustomFuncResetParamItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::TeleSourceId:
|
||||
case AbstractItemModel::IMID_TeleSource:
|
||||
registerItemModel(new TelemetrySourceItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::CurveRefTypeId:
|
||||
case AbstractItemModel::IMID_CurveRefType:
|
||||
registerItemModel(new CurveRefTypeItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
case AbstractItemModel::CurveRefFuncId:
|
||||
case AbstractItemModel::IMID_CurveRefFunc:
|
||||
registerItemModel(new CurveRefFuncItemModel(generalSettings, modelData, firmware, board, boardType));
|
||||
break;
|
||||
default:
|
||||
@@ -570,28 +636,35 @@ void ItemModelsFactory::addItemModel(const AbstractItemModel::ItemModelId id)
|
||||
}
|
||||
}
|
||||
|
||||
void ItemModelsFactory::registerItemModel(AbstractItemModel * itemModel)
|
||||
int CompoundItemModelFactory::registerItemModel(AbstractItemModel * itemModel)
|
||||
{
|
||||
if (itemModel && !getItemModel(itemModel->getId())) {
|
||||
registeredItemModels.push_back(itemModel);
|
||||
if (itemModel) {
|
||||
if (!isItemModelRegistered(itemModel->getId())) {
|
||||
setSourceId(itemModel);
|
||||
registeredItemModels.append(itemModel);
|
||||
return itemModel->getId();
|
||||
}
|
||||
else
|
||||
return itemModel->getId();
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
void ItemModelsFactory::unregisterItemModels()
|
||||
void CompoundItemModelFactory::unregisterItemModels()
|
||||
{
|
||||
foreach (AbstractItemModel *itemModel, registeredItemModels) {
|
||||
delete itemModel;
|
||||
}
|
||||
}
|
||||
|
||||
void ItemModelsFactory::unregisterItemModel(const AbstractItemModel::ItemModelId id)
|
||||
void CompoundItemModelFactory::unregisterItemModel(const int id)
|
||||
{
|
||||
AbstractItemModel * itemModel = getItemModel(id);
|
||||
if (itemModel)
|
||||
delete itemModel;
|
||||
}
|
||||
|
||||
AbstractItemModel * ItemModelsFactory::getItemModel(const AbstractItemModel::ItemModelId id) const
|
||||
AbstractItemModel * CompoundItemModelFactory::getItemModel(const int id) const
|
||||
{
|
||||
foreach (AbstractItemModel * itemModel, registeredItemModels) {
|
||||
if (itemModel->getId() == id)
|
||||
@@ -601,16 +674,32 @@ AbstractItemModel * ItemModelsFactory::getItemModel(const AbstractItemModel::Ite
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void ItemModelsFactory::update(const AbstractItemModel::UpdateTrigger trigger)
|
||||
bool CompoundItemModelFactory::isItemModelRegistered(const int id) const
|
||||
{
|
||||
foreach (AbstractItemModel * itemModel, registeredItemModels) {
|
||||
itemModel->update(trigger);
|
||||
if (itemModel->getId() == id)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void CompoundItemModelFactory::update(const int event)
|
||||
{
|
||||
foreach (AbstractItemModel * itemModel, registeredItemModels) {
|
||||
itemModel->update(event);
|
||||
}
|
||||
}
|
||||
|
||||
void ItemModelsFactory::dumpAllItemModelContents() const
|
||||
void CompoundItemModelFactory::dumpAllItemModelContents() const
|
||||
{
|
||||
foreach (AbstractItemModel * itemModel, registeredItemModels) {
|
||||
AbstractItemModel::dumpItemModelContents(itemModel);
|
||||
}
|
||||
}
|
||||
|
||||
void CompoundItemModelFactory::setSourceId(AbstractItemModel * itemModel)
|
||||
{
|
||||
if (itemModel && itemModel->getId() == AbstractItemModel::IMID_Unknown)
|
||||
itemModel->setId(AbstractItemModel::IMID_ReservedCount + registeredItemModels.count());
|
||||
}
|
||||
+120
-71
@@ -18,8 +18,8 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef RAWITEMDATAMODELS_H
|
||||
#define RAWITEMDATAMODELS_H
|
||||
#ifndef COMPOUNDITEMMODELS_H
|
||||
#define COMPOUNDITEMMODELS_H
|
||||
|
||||
#include "rawsource.h"
|
||||
#include "rawswitch.h"
|
||||
@@ -35,51 +35,53 @@ class AbstractItemModel: public QStandardItemModel
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum ItemModelId {
|
||||
UnknownId,
|
||||
RawSourceId,
|
||||
RawSwitchId,
|
||||
CurveId,
|
||||
GVarRefId,
|
||||
ThrSourceId,
|
||||
CustomFuncActionId,
|
||||
CustomFuncResetParamId,
|
||||
TeleSourceId,
|
||||
CurveRefTypeId,
|
||||
CurveRefFuncId
|
||||
IMID_Unknown,
|
||||
IMID_RawSource,
|
||||
IMID_RawSwitch,
|
||||
IMID_Curve,
|
||||
IMID_GVarRef,
|
||||
IMID_ThrSource,
|
||||
IMID_CustomFuncAction,
|
||||
IMID_CustomFuncResetParam,
|
||||
IMID_TeleSource,
|
||||
IMID_CurveRefType,
|
||||
IMID_CurveRefFunc,
|
||||
IMID_ReservedCount,
|
||||
IMID_Custom
|
||||
};
|
||||
Q_ENUM(ItemModelId)
|
||||
|
||||
enum DataRoles {
|
||||
ItemIdRole = Qt::UserRole,
|
||||
ItemTypeRole,
|
||||
ItemFlagsRole,
|
||||
IsAvailableRole
|
||||
enum ItemModelDataRoles {
|
||||
IMDR_Id = Qt::UserRole,
|
||||
IMDR_Type,
|
||||
IMDR_Flags,
|
||||
IMDR_Available
|
||||
};
|
||||
Q_ENUM(DataRoles)
|
||||
Q_ENUM(ItemModelDataRoles)
|
||||
|
||||
enum DataGroups {
|
||||
NoneGroup = 0x01,
|
||||
NegativeGroup = 0x02,
|
||||
PositiveGroup = 0x04
|
||||
enum ItemModelDataGroups {
|
||||
IMDG_None = 0x01,
|
||||
IMDG_Negative = 0x02,
|
||||
IMDG_Positive = 0x04
|
||||
};
|
||||
Q_ENUM(DataGroups)
|
||||
Q_ENUM(ItemModelDataGroups)
|
||||
|
||||
enum UpdateTrigger {
|
||||
SystemRefresh = 1 << 0,
|
||||
ChannelsUpdated = 1 << 1,
|
||||
CurvesUpdated = 1 << 2,
|
||||
FlightModesUpdated = 1 << 3,
|
||||
GVarsUpdated = 1 << 4,
|
||||
InputsUpdated = 1 << 5,
|
||||
LogicalSwitchesUpdated = 1 << 6,
|
||||
ScriptsUpdated = 1 << 7,
|
||||
TeleSensorsUpdated = 1 << 8,
|
||||
TimersUpdated = 1 << 9,
|
||||
AllTriggers = SystemRefresh | ChannelsUpdated | CurvesUpdated | FlightModesUpdated | GVarsUpdated | InputsUpdated |
|
||||
LogicalSwitchesUpdated | ScriptsUpdated | TeleSensorsUpdated | TimersUpdated,
|
||||
NoTriggers = 0
|
||||
enum ItemModelUpdateEvent {
|
||||
IMUE_None = 0,
|
||||
IMUE_SystemRefresh = 1 << 0,
|
||||
IMUE_Channels = 1 << 1,
|
||||
IMUE_Curves = 1 << 2,
|
||||
IMUE_FlightModes = 1 << 3,
|
||||
IMUE_GVars = 1 << 4,
|
||||
IMUE_Inputs = 1 << 5,
|
||||
IMUE_LogicalSwitches = 1 << 6,
|
||||
IMUE_Scripts = 1 << 7,
|
||||
IMUE_TeleSensors = 1 << 8,
|
||||
IMUE_Timers = 1 << 9,
|
||||
IMUE_All = IMUE_SystemRefresh | IMUE_Channels | IMUE_Curves | IMUE_FlightModes | IMUE_GVars | IMUE_Inputs |
|
||||
IMUE_LogicalSwitches | IMUE_Scripts | IMUE_TeleSensors | IMUE_Timers
|
||||
};
|
||||
Q_ENUM(UpdateTrigger)
|
||||
Q_ENUM(ItemModelUpdateEvent)
|
||||
|
||||
explicit AbstractItemModel(const GeneralSettings * const generalSettings, const ModelData * const modelData,
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
@@ -88,24 +90,30 @@ class AbstractItemModel: public QStandardItemModel
|
||||
modelData(modelData),
|
||||
firmware(firmware),
|
||||
board(board),
|
||||
boardType(boardType)
|
||||
{}
|
||||
boardType(boardType),
|
||||
m_id(IMID_Unknown),
|
||||
m_name(""),
|
||||
m_updateMask(IMUE_None)
|
||||
{}
|
||||
|
||||
virtual ~AbstractItemModel() {};
|
||||
|
||||
void setId(ItemModelId id) { m_id = id; }
|
||||
ItemModelId getId () const { return m_id; }
|
||||
virtual ~AbstractItemModel() {}
|
||||
|
||||
void setId(int id) { m_id = id; }
|
||||
int getId () const { return m_id; }
|
||||
bool isReservedModelId() const { return m_id > IMID_Unknown && m_id < IMID_ReservedCount; }
|
||||
void setName(QString name) { m_name = name; }
|
||||
QString getName() const { return isReservedModelId() ? idToString(m_id) : m_name; }
|
||||
void setUpdateMask(const int mask) { m_updateMask = mask; }
|
||||
int getUpdateMask() const { return m_updateMask; }
|
||||
inline bool doUpdate(const UpdateTrigger trigger) const { return m_updateMask & (int)trigger; }
|
||||
|
||||
AbstractItemModel * getItemModel(const ItemModelId id) const;
|
||||
inline bool doUpdate(const int event) const { return m_updateMask & event; }
|
||||
|
||||
AbstractItemModel * getItemModel(const int id) const;
|
||||
|
||||
static void dumpItemModelContents(AbstractItemModel * itemModel);
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) = 0;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) = 0;
|
||||
|
||||
protected:
|
||||
const GeneralSettings * generalSettings;
|
||||
@@ -115,21 +123,46 @@ class AbstractItemModel: public QStandardItemModel
|
||||
const Board::Type boardType;
|
||||
|
||||
private:
|
||||
ItemModelId m_id = UnknownId;
|
||||
int m_updateMask = 0;
|
||||
int m_id = IMID_Unknown;
|
||||
QString m_name = "";
|
||||
int m_updateMask = IMUE_None;
|
||||
|
||||
static QString idToString(const int value);
|
||||
};
|
||||
|
||||
class AbstractStaticItemModel: public AbstractItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit AbstractStaticItemModel(const GeneralSettings * const generalSettings, const ModelData * const modelData,
|
||||
Firmware * firmware, const Boards * const board, const Board::Type boardType) :
|
||||
explicit AbstractStaticItemModel(const GeneralSettings * const generalSettings = nullptr, const ModelData * const modelData = nullptr,
|
||||
Firmware * firmware = nullptr, const Boards * const board = nullptr,
|
||||
const Board::Type boardType = Board::BOARD_UNKNOWN) :
|
||||
AbstractItemModel(generalSettings, modelData, firmware, board, boardType) {}
|
||||
virtual ~AbstractStaticItemModel() {};
|
||||
|
||||
inline void appendToItemList(QString text, int id, bool isAvailable = true, int type = 0, int flags = 0)
|
||||
{ itemList.append(new ListItem(text, id, isAvailable, type, flags)); }
|
||||
|
||||
void loadItemList();
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override final {}
|
||||
virtual void update(const int event) override final {}
|
||||
|
||||
protected:
|
||||
struct ListItem
|
||||
{
|
||||
QString text;
|
||||
int id;
|
||||
bool isAvailable;
|
||||
int type;
|
||||
int flags;
|
||||
|
||||
ListItem() {}
|
||||
ListItem(QString p_text, int p_id, bool p_isAvailable, int p_type, int p_flags) :
|
||||
text(p_text), id(p_id), isAvailable(p_isAvailable), type(p_type), flags(p_flags) {}
|
||||
};
|
||||
|
||||
QVector<ListItem *> itemList;
|
||||
};
|
||||
|
||||
class AbstractDynamicItemModel: public AbstractItemModel
|
||||
@@ -142,7 +175,7 @@ class AbstractDynamicItemModel: public AbstractItemModel
|
||||
virtual ~AbstractDynamicItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) {}
|
||||
virtual void update(const int event = IMUE_SystemRefresh) {}
|
||||
|
||||
signals:
|
||||
void aboutToBeUpdated();
|
||||
@@ -158,7 +191,7 @@ class RawSourceItemModel: public AbstractDynamicItemModel
|
||||
virtual ~RawSourceItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const RawSource & src) const;
|
||||
@@ -174,7 +207,7 @@ class RawSwitchItemModel: public AbstractDynamicItemModel
|
||||
virtual ~RawSwitchItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const RawSwitch & rsw) const;
|
||||
@@ -190,7 +223,7 @@ class CurveItemModel: public AbstractDynamicItemModel
|
||||
virtual ~CurveItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const int value) const;
|
||||
@@ -205,7 +238,7 @@ class GVarReferenceItemModel: public AbstractDynamicItemModel
|
||||
virtual ~GVarReferenceItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const AdjustmentReference & ar) const;
|
||||
@@ -221,7 +254,7 @@ class ThrottleSourceItemModel: public AbstractDynamicItemModel
|
||||
virtual ~ThrottleSourceItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const int value) const;
|
||||
@@ -236,7 +269,7 @@ class CustomFuncActionItemModel: public AbstractDynamicItemModel
|
||||
virtual ~CustomFuncActionItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const int value) const;
|
||||
@@ -251,7 +284,7 @@ class CustomFuncResetParamItemModel: public AbstractDynamicItemModel
|
||||
virtual ~CustomFuncResetParamItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const int value) const;
|
||||
@@ -266,7 +299,7 @@ class TelemetrySourceItemModel: public AbstractDynamicItemModel
|
||||
virtual ~TelemetrySourceItemModel() {};
|
||||
|
||||
public slots:
|
||||
virtual void update(const UpdateTrigger trigger = SystemRefresh) override;
|
||||
virtual void update(const int event = IMUE_SystemRefresh) override;
|
||||
|
||||
protected:
|
||||
virtual void setDynamicItemData(QStandardItem * item, const int value) const;
|
||||
@@ -290,18 +323,31 @@ class CurveRefFuncItemModel : public AbstractStaticItemModel
|
||||
virtual ~CurveRefFuncItemModel() {};
|
||||
};
|
||||
|
||||
class ItemModelsFactory
|
||||
class PrecisionItemModel : public AbstractStaticItemModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PrecisionItemModel(const int minDecimals, const int maxDecimals, const QString suffix = "", const bool placeholders = false);
|
||||
virtual ~PrecisionItemModel() {};
|
||||
};
|
||||
|
||||
//
|
||||
// CompoundItemModelFactory
|
||||
//
|
||||
|
||||
class CompoundItemModelFactory
|
||||
{
|
||||
public:
|
||||
ItemModelsFactory(const GeneralSettings * const generalSettings, const ModelData * const modelData);
|
||||
virtual ~ItemModelsFactory();
|
||||
CompoundItemModelFactory(const GeneralSettings * const generalSettings, const ModelData * const modelData);
|
||||
virtual ~CompoundItemModelFactory();
|
||||
|
||||
void addItemModel(const AbstractItemModel::ItemModelId id);
|
||||
void registerItemModel(AbstractItemModel * itemModel);
|
||||
void addItemModel(const int id);
|
||||
int registerItemModel(AbstractItemModel * itemModel);
|
||||
void unregisterItemModels();
|
||||
void unregisterItemModel(const AbstractItemModel::ItemModelId id);
|
||||
AbstractItemModel * getItemModel(const AbstractItemModel::ItemModelId id) const;
|
||||
void update(const AbstractItemModel::UpdateTrigger trigger = AbstractItemModel::SystemRefresh);
|
||||
void unregisterItemModel(const int id);
|
||||
bool isItemModelRegistered(const int id) const;
|
||||
AbstractItemModel * getItemModel(const int id) const;
|
||||
void update(const int event = AbstractItemModel::IMUE_SystemRefresh);
|
||||
void dumpAllItemModelContents() const;
|
||||
|
||||
protected:
|
||||
@@ -311,6 +357,9 @@ class ItemModelsFactory
|
||||
Boards * board;
|
||||
Board::Type boardType;
|
||||
QVector<AbstractItemModel *> registeredItemModels;
|
||||
|
||||
private:
|
||||
void setSourceId(AbstractItemModel * itemModel);
|
||||
};
|
||||
|
||||
#endif // RAWITEMDATAMODELS_H
|
||||
#endif // COMPOUNDITEMMODELS_H
|
||||
+91
-30
@@ -18,13 +18,15 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
FilteredItemModel::FilteredItemModel(AbstractItemModel * sourceModel, int flags) :
|
||||
QSortFilterProxyModel(nullptr),
|
||||
filterFlags(0)
|
||||
filterFlags(0),
|
||||
m_id(0),
|
||||
m_name("")
|
||||
{
|
||||
setFilterRole(AbstractItemModel::IsAvailableRole);
|
||||
setFilterRole(AbstractItemModel::IMDR_Available);
|
||||
setFilterKeyColumn(0);
|
||||
setFilterFlags(flags);
|
||||
setDynamicSortFilter(true);
|
||||
@@ -55,7 +57,7 @@ bool FilteredItemModel::filterAcceptsRow(int sourceRow, const QModelIndex & sour
|
||||
return true;
|
||||
|
||||
bool ok;
|
||||
const int flags = sourceModel()->data(srcIdx, AbstractItemModel::ItemFlagsRole).toInt(&ok);
|
||||
const int flags = sourceModel()->data(srcIdx, AbstractItemModel::IMDR_Flags).toInt(&ok);
|
||||
return (ok && (!flags || (filterFlags & flags)));
|
||||
}
|
||||
|
||||
@@ -85,68 +87,85 @@ void FilteredItemModel::dumpItemModelContents(FilteredItemModel * itemModel)
|
||||
for (int i = 0; i < itemModel->rowCount(); ++i) {
|
||||
qDebug() << "row:" << i
|
||||
<< "text:" << itemModel->data(itemModel->index(i, 0), Qt::DisplayRole).toString()
|
||||
<< "id:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::ItemIdRole).toInt()
|
||||
<< "avail:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IsAvailableRole).toBool()
|
||||
<< "flags:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::ItemFlagsRole).toInt()
|
||||
<< "type:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::ItemTypeRole).toInt();
|
||||
<< "id:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Id).toInt()
|
||||
<< "avail:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Available).toBool()
|
||||
<< "flags:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Flags).toInt()
|
||||
<< "type:" << itemModel->data(itemModel->index(i, 0), AbstractItemModel::IMDR_Type).toInt();
|
||||
}
|
||||
}
|
||||
else
|
||||
qDebug() << "Error: model did not cast";
|
||||
qDebug() << "Error: model not of class FilteredItemModel";
|
||||
}
|
||||
|
||||
//
|
||||
// FilteredItemModelsFactory
|
||||
// FilteredItemModelFactory
|
||||
//
|
||||
|
||||
FilteredItemModelsFactory::FilteredItemModelsFactory()
|
||||
FilteredItemModelFactory::FilteredItemModelFactory()
|
||||
{
|
||||
}
|
||||
|
||||
FilteredItemModelsFactory::~FilteredItemModelsFactory()
|
||||
FilteredItemModelFactory::~FilteredItemModelFactory()
|
||||
{
|
||||
unregisterItemModels();
|
||||
}
|
||||
|
||||
int FilteredItemModelsFactory::registerItemModel(FilteredItemModel * itemModel, QString name)
|
||||
int FilteredItemModelFactory::registerItemModel(FilteredItemModel * itemModel, const QString name, const int id)
|
||||
{
|
||||
if (itemModel) {
|
||||
if (isItemModelRegistered(name))
|
||||
qDebug() << "Warning: item model already registered with name:" << name;
|
||||
const int id = registeredItemModels.count();
|
||||
itemModel->setId(id);
|
||||
itemModel->setName(name);
|
||||
registeredItemModels.push_back(itemModel);
|
||||
return id;
|
||||
if (isItemModelRegistered(name)) {
|
||||
qDebug() << "Error: item model already registered with name:" << name;
|
||||
return 0;
|
||||
}
|
||||
else if (id > -1 && isItemModelRegistered(id)) {
|
||||
qDebug() << "Error: item model already registered with id:" << id;
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
int fid = id;
|
||||
if (fid < 0) {
|
||||
fid = registeredItemModels.count() + 1;
|
||||
AbstractItemModel * mdl = qobject_cast<AbstractItemModel *>(itemModel->sourceModel());
|
||||
if (mdl) {
|
||||
fid += mdl->getId() * 128;
|
||||
}
|
||||
}
|
||||
itemModel->setId(fid);
|
||||
itemModel->setName(name);
|
||||
registeredItemModels.append(itemModel);
|
||||
return fid;
|
||||
}
|
||||
}
|
||||
|
||||
qDebug() << "Error: invalid filtered item model pointer";
|
||||
return 0;
|
||||
}
|
||||
|
||||
void FilteredItemModelsFactory::unregisterItemModels()
|
||||
void FilteredItemModelFactory::unregisterItemModels()
|
||||
{
|
||||
foreach (FilteredItemModel * itemModel, registeredItemModels) {
|
||||
delete itemModel;
|
||||
}
|
||||
}
|
||||
|
||||
void FilteredItemModelsFactory::unregisterItemModel(const int id)
|
||||
void FilteredItemModelFactory::unregisterItemModel(const int id)
|
||||
{
|
||||
FilteredItemModel * itemModel = getItemModel(id);
|
||||
if (itemModel)
|
||||
delete itemModel;
|
||||
}
|
||||
|
||||
bool FilteredItemModelsFactory::isItemModelRegistered(const int id) const
|
||||
bool FilteredItemModelFactory::isItemModelRegistered(const int id) const
|
||||
{
|
||||
return getItemModel(id);
|
||||
}
|
||||
|
||||
bool FilteredItemModelsFactory::isItemModelRegistered(const QString name) const
|
||||
bool FilteredItemModelFactory::isItemModelRegistered(const QString name) const
|
||||
{
|
||||
return getItemModel(name);
|
||||
}
|
||||
|
||||
FilteredItemModel * FilteredItemModelsFactory::getItemModel(const int id) const
|
||||
FilteredItemModel * FilteredItemModelFactory::getItemModel(const int id) const
|
||||
{
|
||||
foreach (FilteredItemModel * itemModel, registeredItemModels) {
|
||||
if (itemModel->getId() == id)
|
||||
@@ -156,7 +175,7 @@ FilteredItemModel * FilteredItemModelsFactory::getItemModel(const int id) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
FilteredItemModel * FilteredItemModelsFactory::getItemModel(const QString name) const
|
||||
FilteredItemModel * FilteredItemModelFactory::getItemModel(const QString name) const
|
||||
{
|
||||
foreach (FilteredItemModel * itemModel, registeredItemModels) {
|
||||
if (itemModel->getName() == name)
|
||||
@@ -166,26 +185,68 @@ FilteredItemModel * FilteredItemModelsFactory::getItemModel(const QString name)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void FilteredItemModelsFactory::update()
|
||||
void FilteredItemModelFactory::update()
|
||||
{
|
||||
foreach (FilteredItemModel * itemModel, registeredItemModels) {
|
||||
itemModel->update();
|
||||
}
|
||||
}
|
||||
|
||||
void FilteredItemModelsFactory::dumpItemModelContents(const int id) const
|
||||
void FilteredItemModelFactory::dumpItemModelContents(const int id) const
|
||||
{
|
||||
FilteredItemModel::dumpItemModelContents(getItemModel(id));
|
||||
}
|
||||
|
||||
void FilteredItemModelsFactory::dumpItemModelContents(const QString name) const
|
||||
void FilteredItemModelFactory::dumpItemModelContents(const QString name) const
|
||||
{
|
||||
FilteredItemModel::dumpItemModelContents(getItemModel(name));
|
||||
}
|
||||
|
||||
void FilteredItemModelsFactory::dumpAllItemModelContents() const
|
||||
void FilteredItemModelFactory::dumpAllItemModelContents() const
|
||||
{
|
||||
foreach (FilteredItemModel * itemModel, registeredItemModels) {
|
||||
FilteredItemModel::dumpItemModelContents(itemModel);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// CurveRefFilteredFactory
|
||||
//
|
||||
|
||||
CurveRefFilteredFactory::CurveRefFilteredFactory(CompoundItemModelFactory * sharedItemModels, const int curveFlags, const int gvarRefFlags)
|
||||
{
|
||||
if (!sharedItemModels) {
|
||||
qDebug() << "Error: invalid compound item model factory pointer";
|
||||
return;
|
||||
}
|
||||
|
||||
registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_Curve), curveFlags),
|
||||
fidToString(CRFIM_CURVE), CRFIM_CURVE);
|
||||
registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_GVarRef), gvarRefFlags),
|
||||
fidToString(CRFIM_GVARREF), CRFIM_GVARREF);
|
||||
registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_CurveRefType)),
|
||||
fidToString(CRFIM_TYPE), CRFIM_TYPE);
|
||||
registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_CurveRefFunc)),
|
||||
fidToString(CRFIM_FUNC), CRFIM_FUNC);
|
||||
}
|
||||
|
||||
CurveRefFilteredFactory::~CurveRefFilteredFactory()
|
||||
{
|
||||
}
|
||||
|
||||
// static
|
||||
QString CurveRefFilteredFactory::fidToString(const int value)
|
||||
{
|
||||
switch(value) {
|
||||
case CRFIM_CURVE:
|
||||
return "Curves";
|
||||
case CRFIM_GVARREF:
|
||||
return "Global Variables";
|
||||
case CRFIM_TYPE:
|
||||
return "Types";
|
||||
case CRFIM_FUNC:
|
||||
return "Functions";
|
||||
default:
|
||||
return CPN_STR_UNKNOWN_ITEM;
|
||||
}
|
||||
}
|
||||
+27
-24
@@ -18,10 +18,10 @@
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
#ifndef RAWITEMFILTEREDMODEL_H
|
||||
#define RAWITEMFILTEREDMODEL_H
|
||||
#ifndef FILTEREDITEMMODELS_H
|
||||
#define FILTEREDITEMMODELS_H
|
||||
|
||||
#include "rawitemdatamodels.h"
|
||||
#include "compounditemmodels.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QSortFilterProxyModel>
|
||||
@@ -32,12 +32,12 @@ class FilteredItemModel: public QSortFilterProxyModel
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum DataFilters {
|
||||
AllFilter = AbstractItemModel::NegativeGroup | AbstractItemModel::NoneGroup | AbstractItemModel::PositiveGroup,
|
||||
AllExcludeNoneFilter = AllFilter &~ AbstractItemModel::NoneGroup,
|
||||
NegativeFilter = AbstractItemModel::NegativeGroup | AbstractItemModel::NoneGroup,
|
||||
NegativeExcludeNoneFilter = AbstractItemModel::NegativeGroup,
|
||||
PositiveFilter = AbstractItemModel::PositiveGroup | AbstractItemModel::NoneGroup,
|
||||
PositiveExcludeNoneFilter = AbstractItemModel::PositiveGroup
|
||||
AllFilter = AbstractItemModel::IMDG_Negative | AbstractItemModel::IMDG_None | AbstractItemModel::IMDG_Positive,
|
||||
AllExcludeNoneFilter = AllFilter &~ AbstractItemModel::IMDG_None,
|
||||
NegativeFilter = AbstractItemModel::IMDG_Negative | AbstractItemModel::IMDG_None,
|
||||
NegativeExcludeNoneFilter = AbstractItemModel::IMDG_Negative,
|
||||
PositiveFilter = AbstractItemModel::IMDG_Positive | AbstractItemModel::IMDG_None,
|
||||
PositiveExcludeNoneFilter = AbstractItemModel::IMDG_Positive
|
||||
};
|
||||
Q_ENUM(DataFilters)
|
||||
|
||||
@@ -73,13 +73,13 @@ class FilteredItemModel: public QSortFilterProxyModel
|
||||
QString m_name = "";
|
||||
};
|
||||
|
||||
class FilteredItemModelsFactory
|
||||
class FilteredItemModelFactory
|
||||
{
|
||||
public:
|
||||
FilteredItemModelsFactory();
|
||||
virtual ~FilteredItemModelsFactory();
|
||||
explicit FilteredItemModelFactory();
|
||||
virtual ~FilteredItemModelFactory();
|
||||
|
||||
int registerItemModel(FilteredItemModel * itemModel, QString name);
|
||||
int registerItemModel(FilteredItemModel * itemModel, const QString name, const int id = -1);
|
||||
void unregisterItemModels();
|
||||
void unregisterItemModel(const int id);
|
||||
bool isItemModelRegistered(const int id) const;
|
||||
@@ -96,17 +96,20 @@ class FilteredItemModelsFactory
|
||||
QVector<FilteredItemModel *> registeredItemModels;
|
||||
};
|
||||
|
||||
class CurveRefFilteredFactory : public FilteredItemModelFactory
|
||||
{
|
||||
public:
|
||||
enum FilteredItemModelId {
|
||||
CRFIM_CURVE,
|
||||
CRFIM_GVARREF,
|
||||
CRFIM_TYPE,
|
||||
CRFIM_FUNC
|
||||
};
|
||||
|
||||
#define FILTEREDITEMMODELCONNECT(fltrmodel) \
|
||||
connect(fltrmodel, SIGNAL(aboutToBeUpdated()), this, SLOT(onItemModelAboutToBeUpdated())); \
|
||||
connect(fltrmodel, SIGNAL(updateComplete()), this, SLOT(onItemModelUpdateComplete()));
|
||||
explicit CurveRefFilteredFactory(CompoundItemModelFactory * sharedItemModels, const int curveFlags = 0, const int gvarRefFlags = 0);
|
||||
virtual ~CurveRefFilteredFactory();
|
||||
|
||||
#define FILTEREDITEMMODEL(fltrmodel, class, modelid, flags) \
|
||||
fltrmodel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::modelid), flags); \
|
||||
FILTEREDITEMMODELCONNECT(fltrmodel)
|
||||
static QString fidToString(const int value);
|
||||
};
|
||||
|
||||
#define FILTEREDITEMMODELNOFLAGS(fltrmodel, class, modelid) \
|
||||
fltrmodel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::modelid)); \
|
||||
FILTEREDITEMMODELCONNECT(fltrmodel)
|
||||
|
||||
#endif // RAWITEMFILTEREDMODEL_H
|
||||
#endif // FILTEREDITEMMODELS_H
|
||||
@@ -20,8 +20,8 @@
|
||||
|
||||
#include "itemmodelfactory.h"
|
||||
|
||||
#include "rawitemdatamodels.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "compounditemmodels.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
#include "eeprominterface.h"
|
||||
#include "generalsettings.h"
|
||||
@@ -102,7 +102,7 @@ void ItemModelFactory::unregisterItemModel(const AbstractItemModel::ItemModelId
|
||||
delete itemModel;
|
||||
}
|
||||
|
||||
QAbstractItemModel * ItemModelsFactory::getItemModel(const AbstractItemModel::ItemModelId id) const
|
||||
QAbstractItemModel * CompoundItemModelFactory::getItemModel(const AbstractItemModel::ItemModelId id) const
|
||||
{
|
||||
foreach (AbstractItemModel * itemModel, registeredItemModels) {
|
||||
if (itemModel->getId() == id)
|
||||
@@ -127,7 +127,7 @@ void ItemModelFactory::dumpAllItemModelContents() const
|
||||
}
|
||||
|
||||
//
|
||||
// FilteredItemModelsFactory
|
||||
// FilteredItemModelFactory
|
||||
//
|
||||
|
||||
FilteredItemModelFactory::FilteredItemModelFactory()
|
||||
|
||||
@@ -49,11 +49,11 @@ class ItemModelFactory
|
||||
QVector<AbstractItemModel *> registeredItemModels;
|
||||
};
|
||||
|
||||
class FilteredItemModelsFactory
|
||||
class FilteredItemModelFactory
|
||||
{
|
||||
public:
|
||||
FilteredItemModelsFactory();
|
||||
virtual ~FilteredItemModelsFactory();
|
||||
FilteredItemModelFactory();
|
||||
virtual ~FilteredItemModelFactory();
|
||||
|
||||
int registerItemModel(FilteredItemModel * itemModel, QString name);
|
||||
void unregisterItemModels();
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "adjustmentreference.h"
|
||||
#include "helpers.h"
|
||||
#include "modeldata.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
const QString CurveReference::toString(const ModelData * model, bool verbose) const
|
||||
{
|
||||
@@ -144,29 +144,9 @@ int CurveReference::functionCount()
|
||||
* CurveReferenceUIManager
|
||||
*/
|
||||
|
||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveValueCB, CurveReference & curveRef, const ModelData & model,
|
||||
FilteredItemModel * curveItemModel, FilteredItemModel * gvarItemModel,
|
||||
FilteredItemModel * typeItemModel, FilteredItemModel * funcItemModel, QObject * parent) :
|
||||
QObject(parent),
|
||||
curveTypeCB(nullptr),
|
||||
curveGVarCB(nullptr),
|
||||
curveValueSB(nullptr),
|
||||
curveValueCB(curveValueCB),
|
||||
curveRef(curveRef),
|
||||
model(model),
|
||||
lock(false),
|
||||
curveItemModel(curveItemModel),
|
||||
gvarItemModel(gvarItemModel),
|
||||
typeItemModel(typeItemModel),
|
||||
funcItemModel(funcItemModel)
|
||||
{
|
||||
init(parent);
|
||||
}
|
||||
|
||||
CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheckBox * curveGVarCB, QSpinBox * curveValueSB,
|
||||
QComboBox * curveValueCB, CurveReference & curveRef, const ModelData & model,
|
||||
FilteredItemModel * curveItemModel, FilteredItemModel * gvarItemModel,
|
||||
FilteredItemModel * typeItemModel, FilteredItemModel * funcItemModel, QObject * parent) :
|
||||
CurveRefFilteredFactory * curveRefFilteredFactory, QObject * parent) :
|
||||
QObject(parent),
|
||||
curveTypeCB(curveTypeCB),
|
||||
curveGVarCB(curveGVarCB),
|
||||
@@ -175,24 +155,12 @@ CurveReferenceUIManager::CurveReferenceUIManager(QComboBox * curveTypeCB, QCheck
|
||||
curveRef(curveRef),
|
||||
model(model),
|
||||
lock(false),
|
||||
curveItemModel(curveItemModel),
|
||||
gvarItemModel(gvarItemModel),
|
||||
typeItemModel(typeItemModel),
|
||||
funcItemModel(funcItemModel)
|
||||
{
|
||||
init(parent);
|
||||
}
|
||||
|
||||
CurveReferenceUIManager::~CurveReferenceUIManager()
|
||||
{
|
||||
}
|
||||
|
||||
void CurveReferenceUIManager::init(QObject * parent)
|
||||
filteredModelFactory(curveRefFilteredFactory)
|
||||
{
|
||||
hasCapabilityGvars = getCurrentFirmware()->getCapability(Gvars);
|
||||
|
||||
if (curveTypeCB) {
|
||||
curveTypeCB->setModel(typeItemModel);
|
||||
curveTypeCB->setModel(filteredModelFactory->getItemModel(CurveRefFilteredFactory::CRFIM_TYPE));
|
||||
curveTypeCB->setCurrentIndex(curveTypeCB->findData((int)curveRef.type));
|
||||
connect(curveTypeCB, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged(int)));
|
||||
}
|
||||
@@ -215,6 +183,11 @@ void CurveReferenceUIManager::init(QObject * parent)
|
||||
update();
|
||||
}
|
||||
|
||||
CurveReferenceUIManager::~CurveReferenceUIManager()
|
||||
{
|
||||
delete filteredModelFactory;
|
||||
}
|
||||
|
||||
#define CURVE_REF_UI_GVAR_SHOW (1<<0)
|
||||
#define CURVE_REF_UI_VALUE_SHOW (1<<1)
|
||||
#define CURVE_REF_UI_REF_SHOW (1<<2)
|
||||
@@ -297,13 +270,13 @@ void CurveReferenceUIManager::populateValueCB(QComboBox * cb)
|
||||
switch (curveRef.type) {
|
||||
case CurveReference::CURVE_REF_DIFF:
|
||||
case CurveReference::CURVE_REF_EXPO:
|
||||
cb->setModel(gvarItemModel);
|
||||
cb->setModel(filteredModelFactory->getItemModel(CurveRefFilteredFactory::CRFIM_GVARREF));
|
||||
break;
|
||||
case CurveReference::CURVE_REF_FUNC:
|
||||
cb->setModel(funcItemModel);
|
||||
cb->setModel(filteredModelFactory->getItemModel(CurveRefFilteredFactory::CRFIM_FUNC));
|
||||
break;
|
||||
case CurveReference::CURVE_REF_CUSTOM:
|
||||
cb->setModel(curveItemModel);
|
||||
cb->setModel(filteredModelFactory->getItemModel(CurveRefFilteredFactory::CRFIM_CURVE));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
class ModelData;
|
||||
class FilteredItemModel;
|
||||
class CurveRefFilteredFactory;
|
||||
|
||||
class CurveReference {
|
||||
|
||||
@@ -89,14 +89,13 @@ class CurveReferenceUIManager : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CurveReferenceUIManager(QComboBox *curveValueCB, CurveReference & curve, const ModelData & model,
|
||||
FilteredItemModel * curveItemModel, FilteredItemModel * gvarItemModel, FilteredItemModel * typeItemModel,
|
||||
FilteredItemModel * funcItemModel, QObject * parent = nullptr);
|
||||
explicit CurveReferenceUIManager(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QSpinBox *curveValueSB, QComboBox *curveValueCB,
|
||||
CurveReference & curve, const ModelData & model, CurveRefFilteredFactory * curveRefFilteredFactory,
|
||||
QObject * parent = nullptr);
|
||||
|
||||
CurveReferenceUIManager(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QSpinBox *curveValueSB, QComboBox *curveValueCB,
|
||||
CurveReference & curve, const ModelData & model, FilteredItemModel * curveItemModel,
|
||||
FilteredItemModel * gvarItemModel, FilteredItemModel * typeItemModel,
|
||||
FilteredItemModel * funcItemModel, QObject * parent = nullptr);
|
||||
explicit CurveReferenceUIManager(QComboBox *curveValueCB, CurveReference & curve, const ModelData & model,
|
||||
CurveRefFilteredFactory * curveRefFilteredFactory, QObject * parent = nullptr) :
|
||||
CurveReferenceUIManager(nullptr, nullptr, nullptr, curveValueCB, curve, model, curveRefFilteredFactory, parent) {}
|
||||
|
||||
virtual ~CurveReferenceUIManager();
|
||||
|
||||
@@ -116,12 +115,7 @@ class CurveReferenceUIManager : public QObject {
|
||||
const ModelData & model;
|
||||
bool lock;
|
||||
bool hasCapabilityGvars;
|
||||
FilteredItemModel * curveItemModel;
|
||||
FilteredItemModel * gvarItemModel;
|
||||
FilteredItemModel * typeItemModel;
|
||||
FilteredItemModel * funcItemModel;
|
||||
|
||||
void init(QObject * parent);
|
||||
CurveRefFilteredFactory *filteredModelFactory;
|
||||
void populateValueCB(QComboBox * cb);
|
||||
};
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "radiodata.h"
|
||||
#include "modeldata.h"
|
||||
#include "eeprominterface.h"
|
||||
#include "compounditemmodels.h"
|
||||
|
||||
void SensorData::updateUnit()
|
||||
{
|
||||
@@ -32,9 +33,18 @@ void SensorData::updateUnit()
|
||||
}
|
||||
}
|
||||
|
||||
// TODO depreciated
|
||||
QString SensorData::unitString() const
|
||||
{
|
||||
switch (unit) {
|
||||
return unitToString(unit);
|
||||
}
|
||||
|
||||
// static
|
||||
QString SensorData::unitToString(const int value)
|
||||
{
|
||||
switch (value) {
|
||||
case UNIT_RAW:
|
||||
return tr("Raw (-)");
|
||||
case UNIT_VOLTS:
|
||||
return tr("V");
|
||||
case UNIT_AMPS:
|
||||
@@ -92,7 +102,7 @@ QString SensorData::unitString() const
|
||||
case UNIT_US:
|
||||
return tr("uS");
|
||||
default:
|
||||
return "";
|
||||
return CPN_STR_UNKNOWN_ITEM;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -120,11 +130,71 @@ bool SensorData::isEmpty() const
|
||||
return (!isAvailable() && type == 0 && id == 0 && subid == 0 && instance == 0 && rxIdx == 0 && moduleIdx == 0 && unit == 0 && ratio == 0 && prec == 0 && offset == 0 && autoOffset == 0 && filter == 0 && onlyPositive == 0 && logs == 0);
|
||||
}
|
||||
|
||||
// static
|
||||
QString SensorData::typeToString(const int value)
|
||||
{
|
||||
switch(value) {
|
||||
case TELEM_TYPE_CUSTOM:
|
||||
return tr("Custom");
|
||||
case TELEM_TYPE_CALCULATED:
|
||||
return tr("Calculated");
|
||||
default:
|
||||
return CPN_STR_UNKNOWN_ITEM;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
QString SensorData::formulaToString(const int value)
|
||||
{
|
||||
switch(value) {
|
||||
case TELEM_FORMULA_ADD:
|
||||
return tr("Add");
|
||||
case TELEM_FORMULA_AVERAGE:
|
||||
return tr("Average");
|
||||
case TELEM_FORMULA_MIN:
|
||||
return tr("Minimum");
|
||||
case TELEM_FORMULA_MAX:
|
||||
return tr("Maximum");
|
||||
case TELEM_FORMULA_MULTIPLY:
|
||||
return tr("Multiply");
|
||||
case TELEM_FORMULA_TOTALIZE:
|
||||
return tr("Totalize");
|
||||
case TELEM_FORMULA_CELL:
|
||||
return tr("Cell");
|
||||
case TELEM_FORMULA_CONSUMPTION:
|
||||
return tr("Consumption");
|
||||
case TELEM_FORMULA_DIST:
|
||||
return tr("Distance");
|
||||
default:
|
||||
return CPN_STR_UNKNOWN_ITEM;
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
QString SensorData::cellIndexToString(const int value)
|
||||
{
|
||||
if (value == TELEM_CELL_INDEX_LOWEST)
|
||||
return tr("Lowest");
|
||||
if (value > TELEM_CELL_INDEX_LOWEST && value < TELEM_CELL_INDEX_HIGHEST)
|
||||
return tr("Cell %1").arg(value - TELEM_CELL_INDEX_LOWEST);
|
||||
if (value== TELEM_CELL_INDEX_HIGHEST)
|
||||
return tr("Highest");
|
||||
if (value == TELEM_CELL_INDEX_DELTA)
|
||||
return tr("Delta");
|
||||
return CPN_STR_UNKNOWN_ITEM;
|
||||
}
|
||||
|
||||
// static
|
||||
QString SensorData::precisionToString(const int value)
|
||||
{
|
||||
return QString("0.%1").arg(QString(value, '0'));
|
||||
}
|
||||
|
||||
// static
|
||||
QString SensorData::sourceToString(const ModelData * model, const int index, const bool sign)
|
||||
{
|
||||
if (model) {
|
||||
const QString prfx = sign ? index < 0 ? "-" : "" : "";
|
||||
const QString prfx = sign ? index < 0 ? "-" : "+" : "";
|
||||
|
||||
if (abs(index) > 0) {
|
||||
const SensorData &sd = model->sensorData[abs(index) - 1];
|
||||
@@ -136,23 +206,89 @@ QString SensorData::sourceToString(const ModelData * model, const int index, con
|
||||
else
|
||||
return CPN_STR_NONE_ITEM;
|
||||
}
|
||||
else
|
||||
return "";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
// static
|
||||
bool SensorData::isSourceAvailable(const ModelData * model, const int index)
|
||||
{
|
||||
if (model) {
|
||||
Firmware * firmware = getCurrentFirmware();
|
||||
const int i = abs(index);
|
||||
if (i <= firmware->getCapability(Sensors)) {
|
||||
if (i > 0)
|
||||
return model->sensorData[i - 1].isAvailable();
|
||||
else
|
||||
return true;
|
||||
}
|
||||
Firmware * firmware = getCurrentFirmware();
|
||||
const int sensorcnt = firmware->getCapability(Sensors);
|
||||
const int i = abs(index);
|
||||
|
||||
if (model && sensorcnt > 0 and i <= sensorcnt) {
|
||||
if (i > 0)
|
||||
return model->sensorData[i - 1].isAvailable();
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * SensorData::typeItemModel()
|
||||
{
|
||||
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
|
||||
mdl->setName("sensordata.type");
|
||||
|
||||
for (int i = 0; i <= TELEM_TYPE_LAST; i++) {
|
||||
mdl->appendToItemList(typeToString(i), i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
return mdl;
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * SensorData::formulaItemModel()
|
||||
{
|
||||
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
|
||||
mdl->setName("sensordata.formula");
|
||||
|
||||
for (int i = 0; i <= TELEM_FORMULA_LAST; i++) {
|
||||
mdl->appendToItemList(formulaToString(i), i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
return mdl;
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * SensorData::cellIndexItemModel()
|
||||
{
|
||||
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
|
||||
mdl->setName("sensordata.cellindex");
|
||||
|
||||
for (int i = 0; i <= TELEM_CELL_INDEX_LAST; i++) {
|
||||
mdl->appendToItemList(cellIndexToString(i), i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
return mdl;
|
||||
}
|
||||
|
||||
// static
|
||||
AbstractStaticItemModel * SensorData::unitItemModel()
|
||||
{
|
||||
AbstractStaticItemModel * mdl = new AbstractStaticItemModel();
|
||||
mdl->setName("sensordata.unit");
|
||||
|
||||
for (int i = 0; i <= UNIT_MAX; i++) {
|
||||
QString str = unitToString(i);
|
||||
if (str != CPN_STR_UNKNOWN_ITEM)
|
||||
mdl->appendToItemList(str, i);
|
||||
}
|
||||
|
||||
mdl->loadItemList();
|
||||
return mdl;
|
||||
}
|
||||
|
||||
// static
|
||||
PrecisionItemModel * SensorData::precisionItemModel()
|
||||
{
|
||||
PrecisionItemModel * mdl = new PrecisionItemModel(0, 2);
|
||||
mdl->setName("sensordata.precision");
|
||||
return mdl;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,8 @@ constexpr int CPN_MAX_SENSORS = 60;
|
||||
constexpr int SENSOR_LABEL_LEN = 4;
|
||||
|
||||
class ModelData;
|
||||
class AbstractStaticItemModel;
|
||||
class PrecisionItemModel;
|
||||
|
||||
class SensorData {
|
||||
Q_DECLARE_TR_FUNCTIONS(SensorData)
|
||||
@@ -36,7 +38,8 @@ class SensorData {
|
||||
enum
|
||||
{
|
||||
TELEM_TYPE_CUSTOM,
|
||||
TELEM_TYPE_CALCULATED
|
||||
TELEM_TYPE_CALCULATED,
|
||||
TELEM_TYPE_LAST = TELEM_TYPE_CALCULATED
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -63,6 +66,7 @@ class SensorData {
|
||||
TELEM_CELL_INDEX_6,
|
||||
TELEM_CELL_INDEX_HIGHEST,
|
||||
TELEM_CELL_INDEX_DELTA,
|
||||
TELEM_CELL_INDEX_LAST = TELEM_CELL_INDEX_DELTA
|
||||
};
|
||||
|
||||
enum
|
||||
@@ -169,8 +173,19 @@ class SensorData {
|
||||
void clear() { memset(this, 0, sizeof(SensorData)); }
|
||||
bool isEmpty() const;
|
||||
|
||||
static QString sourceToString(const ModelData * model, const int index, const bool sign = true);
|
||||
static QString sourceToString(const ModelData * model, const int index, const bool sign = false);
|
||||
static bool isSourceAvailable(const ModelData * model, const int index);
|
||||
static QString typeToString(const int value);
|
||||
static QString formulaToString(const int value);
|
||||
static QString cellIndexToString(const int value);
|
||||
static QString unitToString(const int value);
|
||||
static QString precisionToString(const int value);
|
||||
|
||||
static AbstractStaticItemModel * typeItemModel();
|
||||
static AbstractStaticItemModel * formulaItemModel();
|
||||
static AbstractStaticItemModel * cellIndexItemModel();
|
||||
static AbstractStaticItemModel * unitItemModel();
|
||||
static PrecisionItemModel * precisionItemModel();
|
||||
};
|
||||
|
||||
#endif // SENSORDATA_H
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#include "hardware.h"
|
||||
#include "../modeledit/customfunctions.h"
|
||||
#include "verticalscrollarea.h"
|
||||
#include "rawitemdatamodels.h"
|
||||
#include "compounditemmodels.h"
|
||||
|
||||
GeneralEdit::GeneralEdit(QWidget * parent, RadioData & radioData, Firmware * firmware) :
|
||||
QDialog(parent),
|
||||
@@ -56,11 +56,11 @@ GeneralEdit::GeneralEdit(QWidget * parent, RadioData & radioData, Firmware * fir
|
||||
}
|
||||
}
|
||||
|
||||
sharedItemModels = new ItemModelsFactory(&generalSettings, nullptr);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::RawSourceId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::RawSwitchId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CustomFuncActionId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CustomFuncResetParamId);
|
||||
sharedItemModels = new CompoundItemModelFactory(&generalSettings, nullptr);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_RawSource);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_RawSwitch);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_CustomFuncAction);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_CustomFuncResetParam);
|
||||
|
||||
addTab(new GeneralSetupPanel(this, generalSettings, firmware), tr("Setup"));
|
||||
addTab(new CustomFunctionsPanel(this, nullptr, generalSettings, firmware, sharedItemModels), tr("Global Functions"));
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include "eeprominterface.h"
|
||||
#include "genericpanel.h"
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
|
||||
namespace Ui {
|
||||
class GeneralEdit;
|
||||
@@ -73,7 +73,7 @@ class GeneralEdit : public QDialog
|
||||
QVector<GenericPanel *> panels;
|
||||
void addTab(GenericPanel *panel, QString text);
|
||||
void closeEvent(QCloseEvent *event);
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
};
|
||||
|
||||
#endif // _GENERALEDIT_H_
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
#include "channels.h"
|
||||
#include "helpers.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
LimitsGroup::LimitsGroup(Firmware * firmware, TableLayout * tableLayout, int row, int col, int & value, const ModelData & model, int min, int max, int deflt, ModelPanel * panel):
|
||||
firmware(firmware),
|
||||
@@ -96,14 +96,15 @@ void LimitsGroup::updateMinMax(int max)
|
||||
}
|
||||
}
|
||||
}
|
||||
ChannelsPanel::ChannelsPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels):
|
||||
ChannelsPanel::ChannelsPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
sharedItemModels(sharedItemModels)
|
||||
{
|
||||
chnCapability = firmware->getCapability(Outputs);
|
||||
int channelNameMaxLen = firmware->getCapability(ChannelsName);
|
||||
|
||||
FILTEREDITEMMODELNOFLAGS(curveFilteredModel, ChannelsPanel, CurveId)
|
||||
curveFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_Curve));
|
||||
connectItemModelEvents(curveFilteredModel);
|
||||
|
||||
QStringList headerLabels;
|
||||
headerLabels << "#";
|
||||
@@ -473,6 +474,12 @@ void ChannelsPanel::swapData(int idx1, int idx2)
|
||||
}
|
||||
}
|
||||
|
||||
void ChannelsPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &ChannelsPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &ChannelsPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void ChannelsPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
@@ -486,5 +493,5 @@ void ChannelsPanel::onItemModelUpdateComplete()
|
||||
|
||||
void ChannelsPanel::updateItemModels()
|
||||
{
|
||||
sharedItemModels->update(AbstractItemModel::ChannelsUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_Channels);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#include <QtCore>
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
|
||||
constexpr char MIMETYPE_CHANNEL[] = "application/x-companion-channel";
|
||||
@@ -57,7 +57,7 @@ class ChannelsPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ChannelsPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
ChannelsPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~ChannelsPanel();
|
||||
|
||||
public slots:
|
||||
@@ -100,9 +100,10 @@ class ChannelsPanel : public ModelPanel
|
||||
QCheckBox *symlimitsChk[CPN_MAX_CHNOUT];
|
||||
int selectedIndex;
|
||||
int chnCapability;
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
FilteredItemModel *curveFilteredModel;
|
||||
void updateItemModels();
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
#endif // _CHANNELS_H_
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "node.h"
|
||||
#include "edge.h"
|
||||
#include "helpers.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
#define GFX_MARGIN 16
|
||||
|
||||
@@ -110,7 +110,7 @@ float curveSymmetricalX(float x, float coeff, float yMin, float yMid, float yMax
|
||||
}
|
||||
|
||||
CurvesPanel::CurvesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels):
|
||||
CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::Curves),
|
||||
currentCurve(0),
|
||||
@@ -813,7 +813,7 @@ void CurvesPanel::swapData(int idx1, int idx2)
|
||||
|
||||
void CurvesPanel::updateItemModels()
|
||||
{
|
||||
sharedItemModels->update(AbstractItemModel::CurvesUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_Curves);
|
||||
}
|
||||
|
||||
CustomScene::CustomScene(QGraphicsView * view) :
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <QGraphicsScene>
|
||||
#include <QGraphicsView>
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
|
||||
constexpr char MIMETYPE_CURVE[] = "application/x-companion-curve";
|
||||
|
||||
@@ -61,7 +61,7 @@ class CurvesPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CurvesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
CurvesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~CurvesPanel();
|
||||
|
||||
virtual void update();
|
||||
@@ -121,7 +121,7 @@ class CurvesPanel : public ModelPanel
|
||||
bool moveDownAllowed() const;
|
||||
bool moveUpAllowed() const;
|
||||
void swapData(int idx1, int idx2);
|
||||
ItemModelsFactory * sharedItemModels;
|
||||
CompoundItemModelFactory * sharedItemModels;
|
||||
void updateItemModels();
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
*/
|
||||
|
||||
#include "customfunctions.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
#include "helpers.h"
|
||||
#include "appdata.h"
|
||||
|
||||
@@ -67,7 +67,7 @@ void RepeatComboBox::update()
|
||||
}
|
||||
|
||||
CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData * model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels):
|
||||
CompoundItemModelFactory * sharedItemModels):
|
||||
GenericPanel(parent, model, generalSettings, firmware),
|
||||
functions(model ? model->customFn : generalSettings.customFn),
|
||||
mediaPlayerCurrent(-1),
|
||||
@@ -77,10 +77,18 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData * model,
|
||||
lock = true;
|
||||
fswCapability = model ? firmware->getCapability(CustomFunctions) : firmware->getCapability(GlobalFunctions);
|
||||
|
||||
FILTEREDITEMMODEL(rawSwitchFilteredModel, CustomFunctionsPanel, RawSwitchId, model ? RawSwitch::SpecialFunctionsContext : RawSwitch::GlobalFunctionsContext)
|
||||
FILTEREDITEMMODELNOFLAGS(rawSourceAllModel, CustomFunctionsPanel, RawSourceId)
|
||||
FILTEREDITEMMODEL(rawSourceInputsModel, CustomFunctionsPanel, RawSourceId, RawSource::InputSourceGroups)
|
||||
FILTEREDITEMMODEL(rawSourceGVarsModel, CustomFunctionsPanel, RawSourceId, RawSource::GVarsGroup)
|
||||
rawSwitchFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSwitch),
|
||||
model ? RawSwitch::SpecialFunctionsContext : RawSwitch::GlobalFunctionsContext);
|
||||
connectItemModelEvents(rawSwitchFilteredModel);
|
||||
|
||||
rawSourceAllModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource));
|
||||
connectItemModelEvents(rawSourceAllModel);
|
||||
|
||||
rawSourceInputsModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource), RawSource::InputSourceGroups);
|
||||
connectItemModelEvents(rawSourceInputsModel);
|
||||
|
||||
rawSourceGVarsModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource), RawSource::GVarsGroup);
|
||||
connectItemModelEvents(rawSourceGVarsModel);
|
||||
|
||||
if (!firmware->getCapability(VoicesAsNumbers)) {
|
||||
tracksSet = getFilesSet(getSoundsPath(generalSettings), QStringList() << "*.wav" << "*.WAV", firmware->getCapability(VoicesMaxLength));
|
||||
@@ -820,6 +828,12 @@ bool CustomFunctionsPanel::moveUpAllowed() const
|
||||
return selectedIndex > 0;
|
||||
}
|
||||
|
||||
void CustomFunctionsPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &CustomFunctionsPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &CustomFunctionsPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void CustomFunctionsPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#include <QMediaPlayer>
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
class TimerEdit;
|
||||
|
||||
@@ -55,7 +55,7 @@ class CustomFunctionsPanel : public GenericPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
CustomFunctionsPanel(QWidget *parent, ModelData * model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
CustomFunctionsPanel(QWidget *parent, ModelData * model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~CustomFunctionsPanel();
|
||||
|
||||
virtual void update();
|
||||
@@ -96,6 +96,8 @@ class CustomFunctionsPanel : public GenericPanel
|
||||
bool moveUpAllowed() const;
|
||||
void swapData(int idx1, int idx2);
|
||||
void resetCBsAndRefresh(int idx);
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
|
||||
FilteredItemModel * rawSwitchFilteredModel;
|
||||
FilteredItemModel * rawSourceAllModel;
|
||||
FilteredItemModel * rawSourceInputsModel;
|
||||
|
||||
@@ -20,13 +20,11 @@
|
||||
|
||||
#include "expodialog.h"
|
||||
#include "ui_expodialog.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
#include "helpers.h"
|
||||
|
||||
ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, GeneralSettings & generalSettings,
|
||||
Firmware * firmware, QString & inputName, FilteredItemModel * rawSourceFilteredModel,
|
||||
FilteredItemModel * rawSwitchFilteredModel, FilteredItemModel * curveFilteredModel,
|
||||
FilteredItemModel * gvarFilteredModel, FilteredItemModel * crTypeFilteredModel, FilteredItemModel * crFuncFilteredModel) :
|
||||
Firmware * firmware, QString & inputName, CompoundItemModelFactory * sharedItemModels) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::ExpoDialog),
|
||||
model(model),
|
||||
@@ -39,6 +37,9 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
dialogFilteredItemModels = new FilteredItemModelFactory();
|
||||
int id;
|
||||
|
||||
QLabel * lb_fp[CPN_MAX_FLIGHT_MODES] = {ui->lb_FP0, ui->lb_FP1, ui->lb_FP2, ui->lb_FP3, ui->lb_FP4, ui->lb_FP5, ui->lb_FP6, ui->lb_FP7, ui->lb_FP8 };
|
||||
QCheckBox * tmp[CPN_MAX_FLIGHT_MODES] = {ui->cb_FP0, ui->cb_FP1, ui->cb_FP2, ui->cb_FP3, ui->cb_FP4, ui->cb_FP5, ui->cb_FP6, ui->cb_FP7, ui->cb_FP8 };
|
||||
for (int i = 0; i < CPN_MAX_FLIGHT_MODES; i++) {
|
||||
@@ -51,10 +52,15 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
|
||||
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);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, ed->curve, model,
|
||||
curveFilteredModel, gvarFilteredModel, crTypeFilteredModel, crFuncFilteredModel, this);
|
||||
|
||||
ui->switchesCB->setModel(rawSwitchFilteredModel);
|
||||
curveRefFilteredItemModels = new CurveRefFilteredFactory(sharedItemModels,
|
||||
firmware->getCapability(HasInputDiff) ? 0 : FilteredItemModel::PositiveFilter);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, ed->curve, model,
|
||||
curveRefFilteredItemModels, this);
|
||||
|
||||
id = dialogFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSwitch),
|
||||
RawSwitch::MixesContext), "RawSwitch");
|
||||
ui->switchesCB->setModel(dialogFilteredItemModels->getItemModel(id));
|
||||
ui->switchesCB->setCurrentIndex(ui->switchesCB->findData(ed->swtch.toValue()));
|
||||
|
||||
ui->sideCB->setCurrentIndex(ed->mode - 1);
|
||||
@@ -85,7 +91,10 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
|
||||
if (firmware->getCapability(VirtualInputs)) {
|
||||
ui->inputName->setMaxLength(firmware->getCapability(InputsLength));
|
||||
ui->sourceCB->setModel(rawSourceFilteredModel);
|
||||
id = dialogFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource),
|
||||
(RawSource::InputSourceGroups & ~ RawSource::NoneGroup & ~RawSource::InputsGroup)),
|
||||
"RawSource");
|
||||
ui->sourceCB->setModel(dialogFilteredItemModels->getItemModel(id));
|
||||
ui->sourceCB->setCurrentIndex(ui->sourceCB->findData(ed->srcRaw.toValue()));
|
||||
ui->inputName->setValidator(new QRegExpValidator(rx, this));
|
||||
ui->inputName->setText(inputName);
|
||||
@@ -137,9 +146,10 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
|
||||
ExpoDialog::~ExpoDialog()
|
||||
{
|
||||
delete ui;
|
||||
delete gvWeightGroup;
|
||||
delete gvOffsetGroup;
|
||||
delete ui;
|
||||
delete dialogFilteredItemModels;
|
||||
}
|
||||
|
||||
void ExpoDialog::updateScale()
|
||||
|
||||
@@ -26,7 +26,9 @@
|
||||
#include "modelprinter.h"
|
||||
|
||||
class GVarGroup;
|
||||
class FilteredItemModel;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModelFactory;
|
||||
class CurveRefFilteredFactory;
|
||||
class CurveReferenceUIManager;
|
||||
|
||||
namespace Ui {
|
||||
@@ -37,9 +39,7 @@ class ExpoDialog : public QDialog {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expodata, GeneralSettings & generalSettings,
|
||||
Firmware * firmware, QString & inputName, FilteredItemModel * rawSourceFilteredModel,
|
||||
FilteredItemModel * rawSwitchFilteredModel, FilteredItemModel * curveFilteredModel, FilteredItemModel * gvarFilteredModel,
|
||||
FilteredItemModel * crTypeFilteredModel, FilteredItemModel * crFuncFilteredModel);
|
||||
Firmware * firmware, QString & inputName, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~ExpoDialog();
|
||||
|
||||
protected:
|
||||
@@ -66,6 +66,8 @@ class ExpoDialog : public QDialog {
|
||||
ModelPrinter modelPrinter;
|
||||
bool lock;
|
||||
QCheckBox * cb_fp[CPN_MAX_FLIGHT_MODES];
|
||||
FilteredItemModelFactory *dialogFilteredItemModels;
|
||||
CurveRefFilteredFactory *curveRefFilteredItemModels;
|
||||
};
|
||||
|
||||
#endif // _EXPODIALOG_H_
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
#include "flightmodes.h"
|
||||
#include "ui_flightmode.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
#include "helpers.h"
|
||||
#include "customdebug.h"
|
||||
|
||||
@@ -32,8 +32,7 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
|
||||
phase(model.flightModeData[phaseIdx])
|
||||
{
|
||||
ui->setupUi(this);
|
||||
connect(rawSwitchFilteredModel, &FilteredItemModel::aboutToBeUpdated, this, &FlightModePanel::onItemModelAboutToBeUpdated);
|
||||
connect(rawSwitchFilteredModel, &FilteredItemModel::updateComplete, this, &FlightModePanel::onItemModelUpdateComplete);
|
||||
connectItemModelEvents(rawSwitchFilteredModel);
|
||||
|
||||
ui->labelName->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
ui->labelName->setToolTip(tr("Popup menu available"));
|
||||
@@ -1362,6 +1361,12 @@ void FlightModePanel::gvSwapData(int idx1, int idx2)
|
||||
}
|
||||
}
|
||||
|
||||
void FlightModePanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &FlightModePanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &FlightModePanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void FlightModePanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
@@ -1376,11 +1381,12 @@ void FlightModePanel::onItemModelUpdateComplete()
|
||||
/**********************************************************/
|
||||
|
||||
FlightModesPanel::FlightModesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels):
|
||||
CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
sharedItemModels(sharedItemModels)
|
||||
{
|
||||
FILTEREDITEMMODEL(rawSwitchFilteredModel, FlightModesPanel, RawSwitchId, RawSwitch::MixesContext)
|
||||
rawSwitchFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSwitch), RawSwitch::MixesContext);
|
||||
connectItemModelEvents(rawSwitchFilteredModel);
|
||||
|
||||
modesCount = firmware->getCapability(FlightModes);
|
||||
|
||||
@@ -1435,6 +1441,12 @@ void FlightModesPanel::update()
|
||||
emit updated();
|
||||
}
|
||||
|
||||
void FlightModesPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &FlightModesPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &FlightModesPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void FlightModesPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
}
|
||||
@@ -1445,8 +1457,8 @@ void FlightModesPanel::onItemModelUpdateComplete()
|
||||
|
||||
void FlightModesPanel::updateItemModels()
|
||||
{
|
||||
sharedItemModels->update(AbstractItemModel::FlightModesUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::GVarsUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_FlightModes);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_GVars);
|
||||
}
|
||||
|
||||
void FlightModesPanel::onTabIndexChanged(int index)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "modeledit.h"
|
||||
#include "eeprominterface.h"
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
|
||||
constexpr char MIMETYPE_FLIGHTMODE[] = "application/x-companion-flightmode";
|
||||
@@ -139,6 +139,7 @@ class FlightModePanel : public ModelPanel
|
||||
bool gvMoveDownAllowed() const;
|
||||
bool gvMoveUpAllowed() const;
|
||||
void gvSwapData(int idx1, int idx2);
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
class FlightModesPanel : public ModelPanel
|
||||
@@ -146,7 +147,7 @@ class FlightModesPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
FlightModesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
FlightModesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~FlightModesPanel();
|
||||
|
||||
public slots:
|
||||
@@ -166,10 +167,11 @@ class FlightModesPanel : public ModelPanel
|
||||
|
||||
int modesCount;
|
||||
QTabWidget *tabWidget;
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
FilteredItemModel *rawSwitchFilteredModel;
|
||||
QVector<GenericPanel *> panels;
|
||||
void updateItemModels();
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
#endif // _FLIGHTMODES_H_
|
||||
|
||||
@@ -21,15 +21,16 @@
|
||||
#include "heli.h"
|
||||
#include "ui_heli.h"
|
||||
#include "helpers.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
HeliPanel::HeliPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels):
|
||||
HeliPanel::HeliPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::Heli)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
FILTEREDITEMMODEL(rawSourceFilteredModel, HeliPanel, RawSourceId, RawSource::InputSourceGroups)
|
||||
rawSourceFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource), RawSource::InputSourceGroups);
|
||||
connectItemModelEvents(rawSourceFilteredModel);
|
||||
|
||||
connect(ui->swashType, SIGNAL(currentIndexChanged(int)), this, SLOT(edited()));
|
||||
connect(ui->swashRingVal, SIGNAL(editingFinished()), this, SLOT(edited()));
|
||||
@@ -116,6 +117,12 @@ void HeliPanel::edited()
|
||||
}
|
||||
}
|
||||
|
||||
void HeliPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &HeliPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &HeliPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void HeliPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#include "modeledit.h"
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
|
||||
namespace Ui {
|
||||
@@ -35,7 +35,7 @@ class HeliPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
HeliPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
HeliPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~HeliPanel();
|
||||
void update();
|
||||
|
||||
@@ -47,6 +47,7 @@ class HeliPanel : public ModelPanel
|
||||
private:
|
||||
Ui::Heli *ui;
|
||||
FilteredItemModel * rawSourceFilteredModel;
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
#endif // _HELI_H_
|
||||
|
||||
@@ -21,20 +21,19 @@
|
||||
#include "inputs.h"
|
||||
#include "expodialog.h"
|
||||
#include "helpers.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels):
|
||||
InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
expoInserted(false),
|
||||
modelPrinter(firmware, generalSettings, model),
|
||||
sharedItemModels(sharedItemModels)
|
||||
sharedItemModels(sharedItemModels),
|
||||
modelsUpdateCnt(0)
|
||||
{
|
||||
FILTEREDITEMMODEL(rawSourceFilteredModel, InputsPanel, RawSourceId,(RawSource::InputSourceGroups & ~ RawSource::NoneGroup & ~RawSource::InputsGroup))
|
||||
FILTEREDITEMMODEL(rawSwitchFilteredModel, InputsPanel, RawSwitchId, RawSwitch::MixesContext)
|
||||
FILTEREDITEMMODEL(curveFilteredModel, InputsPanel, CurveId, firmware->getCapability(HasInputDiff) ? 0 : FilteredItemModel::PositiveFilter)
|
||||
FILTEREDITEMMODELNOFLAGS(gvarFilteredModel, InputsPanel, GVarRefId)
|
||||
FILTEREDITEMMODELNOFLAGS(crTypeFilteredModel, InputsPanel, CurveRefTypeId)
|
||||
FILTEREDITEMMODELNOFLAGS(crFuncFilteredModel, InputsPanel, CurveRefFuncId)
|
||||
connectItemModelEvents(AbstractItemModel::IMID_RawSource);
|
||||
connectItemModelEvents(AbstractItemModel::IMID_RawSwitch);
|
||||
connectItemModelEvents(AbstractItemModel::IMID_Curve);
|
||||
connectItemModelEvents(AbstractItemModel::IMID_GVarRef);
|
||||
|
||||
inputsCount = firmware->getCapability(VirtualInputs);
|
||||
if (inputsCount == 0)
|
||||
@@ -74,12 +73,6 @@ InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & g
|
||||
|
||||
InputsPanel::~InputsPanel()
|
||||
{
|
||||
delete rawSourceFilteredModel;
|
||||
delete rawSwitchFilteredModel;
|
||||
delete curveFilteredModel;
|
||||
delete gvarFilteredModel;
|
||||
delete crTypeFilteredModel;
|
||||
delete crFuncFilteredModel;
|
||||
}
|
||||
|
||||
void InputsPanel::update()
|
||||
@@ -195,8 +188,7 @@ void InputsPanel::gm_openExpo(int index)
|
||||
if (firmware->getCapability(VirtualInputs))
|
||||
inputName = model->inputNames[ed.chn];
|
||||
|
||||
ExpoDialog *dlg = new ExpoDialog(this, *model, &ed, generalSettings, firmware, inputName, rawSourceFilteredModel, rawSwitchFilteredModel,
|
||||
curveFilteredModel, gvarFilteredModel, crTypeFilteredModel, crFuncFilteredModel);
|
||||
ExpoDialog *dlg = new ExpoDialog(this, *model, &ed, generalSettings, firmware, inputName, sharedItemModels);
|
||||
if (dlg->exec()) {
|
||||
model->expoData[index] = ed;
|
||||
if (firmware->getCapability(VirtualInputs))
|
||||
@@ -732,18 +724,31 @@ int InputsPanel::getInputIndexFromSelected()
|
||||
return idx;
|
||||
}
|
||||
|
||||
void InputsPanel::connectItemModelEvents(const int id)
|
||||
{
|
||||
AbstractDynamicItemModel * itemModel = qobject_cast<AbstractDynamicItemModel *>(sharedItemModels->getItemModel(id));
|
||||
if (itemModel) {
|
||||
connect(itemModel, &AbstractDynamicItemModel::aboutToBeUpdated, this, &InputsPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &AbstractDynamicItemModel::updateComplete, this, &InputsPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
}
|
||||
|
||||
void InputsPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
modelsUpdateCnt++;
|
||||
}
|
||||
|
||||
void InputsPanel::onItemModelUpdateComplete()
|
||||
{
|
||||
update();
|
||||
lock = false;
|
||||
modelsUpdateCnt--;
|
||||
if (modelsUpdateCnt < 1) {
|
||||
update();
|
||||
lock = false;
|
||||
}
|
||||
}
|
||||
|
||||
void InputsPanel::updateItemModels()
|
||||
{
|
||||
sharedItemModels->update(AbstractItemModel::InputsUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_Inputs);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include "mixerslistwidget.h"
|
||||
#include "modelprinter.h"
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
|
||||
constexpr char MIMETYPE_EXPO[] = "application/x-companion-expo";
|
||||
@@ -35,7 +35,7 @@ class InputsPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~InputsPanel();
|
||||
|
||||
virtual void update();
|
||||
@@ -72,13 +72,8 @@ class InputsPanel : public ModelPanel
|
||||
ModelPrinter modelPrinter;
|
||||
int selectedIdx;
|
||||
int inputIdx;
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
FilteredItemModel *rawSourceFilteredModel;
|
||||
FilteredItemModel *rawSwitchFilteredModel;
|
||||
FilteredItemModel *curveFilteredModel;
|
||||
FilteredItemModel *gvarFilteredModel;
|
||||
FilteredItemModel *crTypeFilteredModel;
|
||||
FilteredItemModel *crFuncFilteredModel;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
int modelsUpdateCnt;
|
||||
|
||||
int getExpoIndex(unsigned int dch);
|
||||
bool gm_insertExpo(int idx);
|
||||
@@ -100,6 +95,7 @@ class InputsPanel : public ModelPanel
|
||||
int getIndexFromSelected();
|
||||
int getInputIndexFromSelected();
|
||||
void updateItemModels();
|
||||
void connectItemModelEvents(const int id);
|
||||
};
|
||||
|
||||
#endif // _INPUTS_H_
|
||||
|
||||
@@ -19,21 +19,25 @@
|
||||
*/
|
||||
|
||||
#include "logicalswitches.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
#include "helpers.h"
|
||||
|
||||
#include <TimerEdit>
|
||||
|
||||
LogicalSwitchesPanel::LogicalSwitchesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels):
|
||||
CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
sharedItemModels(sharedItemModels),
|
||||
selectedIndex(0),
|
||||
modelsUpdateCnt(0)
|
||||
{
|
||||
FILTEREDITEMMODEL(rawSwitchFilteredModel, LogicalSwitchesPanel, RawSwitchId, RawSwitch::LogicalSwitchesContext)
|
||||
rawSwitchFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSwitch),
|
||||
RawSwitch::LogicalSwitchesContext);
|
||||
connectItemModelEvents(rawSwitchFilteredModel);
|
||||
|
||||
const int srcGroups = firmware->getCapability(GvarsInCS) ? 0 : (RawSource::AllSourceGroups & ~RawSource::GVarsGroup);
|
||||
FILTEREDITEMMODEL(rawSourceFilteredModel, LogicalSwitchesPanel, RawSourceId, srcGroups)
|
||||
rawSourceFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource), srcGroups);
|
||||
connectItemModelEvents(rawSourceFilteredModel);
|
||||
|
||||
lsCapability = firmware->getCapability(LogicalSwitches);
|
||||
lsCapabilityExt = firmware->getCapability(LogicalSwitchesExt);
|
||||
@@ -642,7 +646,13 @@ void LogicalSwitchesPanel::swapData(int idx1, int idx2)
|
||||
void LogicalSwitchesPanel::updateItemModels()
|
||||
{
|
||||
lock = true;
|
||||
sharedItemModels->update(AbstractItemModel::LogicalSwitchesUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_LogicalSwitches);
|
||||
}
|
||||
|
||||
void LogicalSwitchesPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &LogicalSwitchesPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &LogicalSwitchesPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void LogicalSwitchesPanel::onItemModelAboutToBeUpdated()
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
#include "modeledit.h"
|
||||
#include "radiodata.h"
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
class TimerEdit;
|
||||
|
||||
@@ -35,7 +35,7 @@ class LogicalSwitchesPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
LogicalSwitchesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
LogicalSwitchesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~LogicalSwitchesPanel();
|
||||
|
||||
virtual void update();
|
||||
@@ -74,7 +74,7 @@ class LogicalSwitchesPanel : public ModelPanel
|
||||
QDoubleSpinBox * dsbDelay[CPN_MAX_LOGICAL_SWITCHES];
|
||||
QComboBox * cbSource1[CPN_MAX_LOGICAL_SWITCHES];
|
||||
QComboBox * cbSource2[CPN_MAX_LOGICAL_SWITCHES];
|
||||
ItemModelsFactory * sharedItemModels;
|
||||
CompoundItemModelFactory * sharedItemModels;
|
||||
FilteredItemModel * rawSwitchFilteredModel;
|
||||
FilteredItemModel * rawSourceFilteredModel;
|
||||
int selectedIndex;
|
||||
@@ -89,6 +89,7 @@ class LogicalSwitchesPanel : public ModelPanel
|
||||
bool moveUpAllowed() const;
|
||||
int modelsUpdateCnt;
|
||||
void updateItemModels();
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
#endif // _LOGICALSWITCHES_H_
|
||||
|
||||
@@ -21,13 +21,11 @@
|
||||
#include "mixerdialog.h"
|
||||
#include "ui_mixerdialog.h"
|
||||
#include "radiodata.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
#include "helpers.h"
|
||||
|
||||
MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
FilteredItemModel * rawSourceFilteredModel, FilteredItemModel * rawSwitchFilteredModel,
|
||||
FilteredItemModel * curveFilteredModel, FilteredItemModel * gvarFilteredModel,
|
||||
FilteredItemModel * crTypeFilteredModel, FilteredItemModel * crFuncFilteredModel) :
|
||||
CompoundItemModelFactory * sharedItemModels) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::MixerDialog),
|
||||
model(model),
|
||||
@@ -38,6 +36,9 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
dialogFilteredItemModels = new FilteredItemModelFactory();
|
||||
int id;
|
||||
|
||||
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
||||
QLabel * lb_fp[CPN_MAX_FLIGHT_MODES] = {ui->lb_FP0, ui->lb_FP1, ui->lb_FP2, ui->lb_FP3, ui->lb_FP4, ui->lb_FP5, ui->lb_FP6, ui->lb_FP7, ui->lb_FP8 };
|
||||
QCheckBox * tmp[CPN_MAX_FLIGHT_MODES] = {ui->cb_FP0, ui->cb_FP1, ui->cb_FP2, ui->cb_FP3, ui->cb_FP4, ui->cb_FP5, ui->cb_FP6, ui->cb_FP7, ui->cb_FP8 };
|
||||
@@ -47,15 +48,20 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
|
||||
|
||||
this->setWindowTitle(tr("DEST -> %1").arg(RawSource(SOURCE_TYPE_CH, md->destCh - 1).toString(&model, &generalSettings)));
|
||||
|
||||
ui->sourceCB->setModel(rawSourceFilteredModel);
|
||||
id = dialogFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource),
|
||||
((RawSource::InputSourceGroups | RawSource::ScriptsGroup) & ~ RawSource::NoneGroup)),
|
||||
"RawSource");
|
||||
ui->sourceCB->setModel(dialogFilteredItemModels->getItemModel(id));
|
||||
ui->sourceCB->setCurrentIndex(ui->sourceCB->findData(md->srcRaw.toValue()));
|
||||
|
||||
int limit = firmware->getCapability(OffsetWeight);
|
||||
|
||||
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);
|
||||
curveRefFilteredItemModels = new CurveRefFilteredFactory(sharedItemModels,
|
||||
firmware->getCapability(HasMixerExpo) ? 0 : FilteredItemModel::PositiveFilter);
|
||||
curveGroup = new CurveReferenceUIManager(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueSB, ui->curveValueCB, md->curve, model,
|
||||
curveFilteredModel, gvarFilteredModel, crTypeFilteredModel, crFuncFilteredModel, this);
|
||||
curveRefFilteredItemModels, this);
|
||||
|
||||
ui->MixDR_CB->setChecked(md->noExpo == 0);
|
||||
|
||||
@@ -107,7 +113,9 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData * mixdata,
|
||||
}
|
||||
}
|
||||
|
||||
ui->switchesCB->setModel(rawSwitchFilteredModel);
|
||||
id = dialogFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSwitch),
|
||||
RawSwitch::MixesContext), "RawSwitch");
|
||||
ui->switchesCB->setModel(dialogFilteredItemModels->getItemModel(id));
|
||||
ui->switchesCB->setCurrentIndex(ui->switchesCB->findData(md->swtch.toValue()));
|
||||
ui->warningCB->setCurrentIndex(md->mixWarn);
|
||||
ui->mltpxCB->setCurrentIndex(md->mltpx);
|
||||
@@ -153,6 +161,7 @@ MixerDialog::~MixerDialog()
|
||||
delete ui;
|
||||
delete gvWeightGroup;
|
||||
delete gvOffsetGroup;
|
||||
delete dialogFilteredItemModels;
|
||||
}
|
||||
|
||||
void MixerDialog::changeEvent(QEvent *e)
|
||||
|
||||
@@ -25,7 +25,9 @@
|
||||
#include "eeprominterface.h"
|
||||
|
||||
class GVarGroup;
|
||||
class FilteredItemModel;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModelFactory;
|
||||
class CurveRefFilteredFactory;
|
||||
class CurveReferenceUIManager;
|
||||
|
||||
namespace Ui {
|
||||
@@ -36,8 +38,7 @@ class MixerDialog : public QDialog {
|
||||
Q_OBJECT
|
||||
public:
|
||||
MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
FilteredItemModel * rawSourceFilteredModel, FilteredItemModel * rawSwitchFilteredModel, FilteredItemModel * curveFilteredModel,
|
||||
FilteredItemModel * gvarFilteredModel, FilteredItemModel * crTypeFilteredModel, FilteredItemModel * crFuncFilteredModel);
|
||||
CompoundItemModelFactory * sharedItemModels);
|
||||
~MixerDialog();
|
||||
|
||||
protected:
|
||||
@@ -62,6 +63,8 @@ class MixerDialog : public QDialog {
|
||||
GVarGroup * gvOffsetGroup;
|
||||
CurveReferenceUIManager * curveGroup;
|
||||
QCheckBox * cb_fp[CPN_MAX_FLIGHT_MODES];
|
||||
FilteredItemModelFactory *dialogFilteredItemModels;
|
||||
CurveRefFilteredFactory *curveRefFilteredItemModels;
|
||||
};
|
||||
|
||||
#endif // _MIXERDIALOG_H_
|
||||
|
||||
@@ -20,21 +20,20 @@
|
||||
|
||||
#include "mixes.h"
|
||||
#include "helpers.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels):
|
||||
MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
mixInserted(false),
|
||||
highlightedSource(0),
|
||||
modelPrinter(firmware, generalSettings, model),
|
||||
sharedItemModels(sharedItemModels)
|
||||
sharedItemModels(sharedItemModels),
|
||||
modelsUpdateCnt(0)
|
||||
{
|
||||
FILTEREDITEMMODEL(rawSourceFilteredModel, MixesPanel, RawSourceId,((RawSource::InputSourceGroups | RawSource::ScriptsGroup) & ~ RawSource::NoneGroup))
|
||||
FILTEREDITEMMODEL(rawSwitchFilteredModel, MixesPanel, RawSwitchId, RawSwitch::MixesContext)
|
||||
FILTEREDITEMMODEL(curveFilteredModel, MixesPanel, CurveId, firmware->getCapability(HasMixerExpo) ? 0 : FilteredItemModel::PositiveFilter)
|
||||
FILTEREDITEMMODELNOFLAGS(gvarFilteredModel, MixesPanel, GVarRefId)
|
||||
FILTEREDITEMMODELNOFLAGS(crTypeFilteredModel, MixesPanel, CurveRefTypeId)
|
||||
FILTEREDITEMMODELNOFLAGS(crFuncFilteredModel, MixesPanel, CurveRefFuncId)
|
||||
connectItemModelEvents(AbstractItemModel::IMID_RawSource);
|
||||
connectItemModelEvents(AbstractItemModel::IMID_RawSwitch);
|
||||
connectItemModelEvents(AbstractItemModel::IMID_Curve);
|
||||
connectItemModelEvents(AbstractItemModel::IMID_GVarRef);
|
||||
|
||||
QGridLayout * mixesLayout = new QGridLayout(this);
|
||||
|
||||
@@ -69,12 +68,6 @@ MixesPanel::MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
|
||||
|
||||
MixesPanel::~MixesPanel()
|
||||
{
|
||||
delete rawSourceFilteredModel;
|
||||
delete rawSwitchFilteredModel;
|
||||
delete curveFilteredModel;
|
||||
delete gvarFilteredModel;
|
||||
delete crTypeFilteredModel;
|
||||
delete crFuncFilteredModel;
|
||||
}
|
||||
|
||||
void MixesPanel::update()
|
||||
@@ -190,8 +183,7 @@ void MixesPanel::gm_openMix(int index)
|
||||
|
||||
MixData mixd(model->mixData[index]);
|
||||
|
||||
MixerDialog *dlg = new MixerDialog(this, *model, &mixd, generalSettings, firmware, rawSourceFilteredModel, rawSwitchFilteredModel,
|
||||
curveFilteredModel, gvarFilteredModel, crTypeFilteredModel, crFuncFilteredModel);
|
||||
MixerDialog *dlg = new MixerDialog(this, *model, &mixd, generalSettings, firmware, sharedItemModels);
|
||||
if(dlg->exec()) {
|
||||
model->mixData[index] = mixd;
|
||||
emit modified();
|
||||
@@ -547,13 +539,26 @@ void MixesPanel::clearMixes()
|
||||
}
|
||||
}
|
||||
|
||||
void MixesPanel::connectItemModelEvents(const int id)
|
||||
{
|
||||
AbstractDynamicItemModel * itemModel = qobject_cast<AbstractDynamicItemModel *>(sharedItemModels->getItemModel(id));
|
||||
if (itemModel) {
|
||||
connect(itemModel, &AbstractDynamicItemModel::aboutToBeUpdated, this, &MixesPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &AbstractDynamicItemModel::updateComplete, this, &MixesPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
}
|
||||
|
||||
void MixesPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
modelsUpdateCnt++;
|
||||
}
|
||||
|
||||
void MixesPanel::onItemModelUpdateComplete()
|
||||
{
|
||||
update();
|
||||
lock = false;
|
||||
modelsUpdateCnt--;
|
||||
if (modelsUpdateCnt < 1) {
|
||||
update();
|
||||
lock = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include "mixerdialog.h"
|
||||
#include "modelprinter.h"
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
|
||||
class MixesPanel : public ModelPanel
|
||||
@@ -34,7 +34,7 @@ class MixesPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
MixesPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~MixesPanel();
|
||||
|
||||
virtual void update();
|
||||
@@ -68,13 +68,8 @@ class MixesPanel : public ModelPanel
|
||||
bool mixInserted;
|
||||
unsigned int highlightedSource;
|
||||
ModelPrinter modelPrinter;
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
FilteredItemModel *rawSourceFilteredModel;
|
||||
FilteredItemModel *rawSwitchFilteredModel;
|
||||
FilteredItemModel *curveFilteredModel;
|
||||
FilteredItemModel *gvarFilteredModel;
|
||||
FilteredItemModel *crTypeFilteredModel;
|
||||
FilteredItemModel *crFuncFilteredModel;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
int modelsUpdateCnt;
|
||||
|
||||
int getMixerIndex(unsigned int dch);
|
||||
bool gm_insertMix(int idx);
|
||||
@@ -86,6 +81,7 @@ class MixesPanel : public ModelPanel
|
||||
void setSelectedByMixList(QList<int> list);
|
||||
void AddMixerLine(int dest);
|
||||
QString getMixerText(int dest, bool newChannel);
|
||||
void connectItemModelEvents(const int id);
|
||||
};
|
||||
|
||||
#endif // _MIXES_H_
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include "customfunctions.h"
|
||||
#include "telemetry.h"
|
||||
#include "appdata.h"
|
||||
#include "rawitemdatamodels.h"
|
||||
#include "compounditemmodels.h"
|
||||
|
||||
ModelEdit::ModelEdit(QWidget * parent, RadioData & radioData, int modelId, Firmware * firmware) :
|
||||
QDialog(parent),
|
||||
@@ -53,17 +53,17 @@ ModelEdit::ModelEdit(QWidget * parent, RadioData & radioData, int modelId, Firmw
|
||||
GeneralSettings &generalSettings = radioData.generalSettings;
|
||||
ModelData &model = radioData.models[modelId];
|
||||
|
||||
sharedItemModels = new ItemModelsFactory(&generalSettings, &model);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::RawSourceId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::RawSwitchId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CurveId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::GVarRefId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::ThrSourceId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CustomFuncActionId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CustomFuncResetParamId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::TeleSourceId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CurveRefTypeId);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::CurveRefFuncId);
|
||||
sharedItemModels = new CompoundItemModelFactory(&generalSettings, &model);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_RawSource);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_RawSwitch);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_Curve);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_GVarRef);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_ThrSource);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_CustomFuncAction);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_CustomFuncResetParam);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_TeleSource);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_CurveRefType);
|
||||
sharedItemModels->addItemModel(AbstractItemModel::IMID_CurveRefFunc);
|
||||
|
||||
s1.report("Init");
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include "genericpanel.h"
|
||||
|
||||
class RadioData;
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
|
||||
namespace Ui {
|
||||
class ModelEdit;
|
||||
@@ -63,7 +63,7 @@ class ModelEdit : public QDialog
|
||||
RadioData &radioData;
|
||||
Firmware *firmware;
|
||||
QVector<GenericPanel *> panels;
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
|
||||
void addTab(GenericPanel * panel, QString text);
|
||||
void launchSimulation();
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include "ui_setup.h"
|
||||
#include "ui_setup_timer.h"
|
||||
#include "ui_setup_module.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
#include "appdata.h"
|
||||
#include "modelprinter.h"
|
||||
#include "multiprotocols.h"
|
||||
@@ -38,8 +38,7 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
|
||||
ui(new Ui::Timer)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
connect(rawSwitchFilteredModel, &FilteredItemModel::aboutToBeUpdated, this, &TimerPanel::onItemModelAboutToBeUpdated);
|
||||
connect(rawSwitchFilteredModel, &FilteredItemModel::updateComplete, this, &TimerPanel::onItemModelUpdateComplete);
|
||||
connectItemModelEvents(rawSwitchFilteredModel);
|
||||
|
||||
lock = true;
|
||||
|
||||
@@ -173,6 +172,12 @@ void TimerPanel::on_name_editingFinished()
|
||||
}
|
||||
}
|
||||
|
||||
void TimerPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &TimerPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &TimerPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void TimerPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
lock = true;
|
||||
@@ -993,14 +998,18 @@ void ModulePanel::onClearAccessRxClicked()
|
||||
/******************************************************************************/
|
||||
|
||||
SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels) :
|
||||
CompoundItemModelFactory * sharedItemModels) :
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::Setup),
|
||||
sharedItemModels(sharedItemModels)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
FILTEREDITEMMODEL(rawSwitchFilteredModel, SetupPanel, RawSwitchId, RawSwitch::TimersContext)
|
||||
FILTEREDITEMMODELNOFLAGS(thrSourceFilteredModel, SetupPanel, ThrSourceId)
|
||||
|
||||
rawSwitchFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSwitch), RawSwitch::TimersContext);
|
||||
connectItemModelEvents(rawSwitchFilteredModel);
|
||||
|
||||
thrSourceFilteredModel = new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_ThrSource));
|
||||
connectItemModelEvents(thrSourceFilteredModel);
|
||||
|
||||
Board::Type board = firmware->getBoard();
|
||||
|
||||
@@ -1755,6 +1764,12 @@ void SetupPanel::onTimerNameChanged()
|
||||
updateItemModels();
|
||||
}
|
||||
|
||||
void SetupPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
{
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &SetupPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &SetupPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
void SetupPanel::onItemModelAboutToBeUpdated()
|
||||
{
|
||||
}
|
||||
@@ -1765,5 +1780,5 @@ void SetupPanel::onItemModelUpdateComplete()
|
||||
|
||||
void SetupPanel::updateItemModels()
|
||||
{
|
||||
sharedItemModels->update(AbstractItemModel::TimersUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_Timers);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
constexpr char MIMETYPE_TIMER[] = "application/x-companion-timer";
|
||||
|
||||
class ItemModelsFactory;
|
||||
class CompoundItemModelFactory;
|
||||
class FilteredItemModel;
|
||||
|
||||
namespace Ui {
|
||||
@@ -61,6 +61,7 @@ class TimerPanel : public ModelPanel
|
||||
private:
|
||||
TimerData & timer;
|
||||
Ui::Timer * ui;
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
class ModulePanel : public ModelPanel
|
||||
@@ -132,7 +133,7 @@ class SetupPanel : public ModelPanel
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, ItemModelsFactory * sharedItemModels);
|
||||
SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~SetupPanel();
|
||||
|
||||
virtual void update();
|
||||
@@ -194,10 +195,11 @@ class SetupPanel : public ModelPanel
|
||||
bool moveTimerDownAllowed() const;
|
||||
bool moveTimerUpAllowed() const;
|
||||
void swapTimerData(int idx1, int idx2);
|
||||
ItemModelsFactory * sharedItemModels;
|
||||
CompoundItemModelFactory * sharedItemModels;
|
||||
FilteredItemModel * rawSwitchFilteredModel;
|
||||
FilteredItemModel * thrSourceFilteredModel;
|
||||
void updateItemModels();
|
||||
};
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
};
|
||||
|
||||
#endif // _SETUP_H_
|
||||
|
||||
@@ -27,12 +27,17 @@
|
||||
|
||||
#include <TimerEdit>
|
||||
|
||||
constexpr char FIM_NAME_RAWSOURCE[] {"Raw Source"};
|
||||
constexpr char FIM_NAME_TELEALLSRC[] {"Tele All Source"};
|
||||
constexpr char FIM_NAME_TELEPOSSRC[] {"Tele Pos Source"};
|
||||
constexpr char FIM_RAWSOURCE[] {"Raw Source"};
|
||||
constexpr char FIM_TELEALLSRC[] {"Tele All Source"};
|
||||
constexpr char FIM_TELEPOSSRC[] {"Tele Pos Source"};
|
||||
constexpr char FIM_SENSORTYPE[] {"Sensor.Type"};
|
||||
constexpr char FIM_SENSORFORMULA[] {"Sensor.Formula"};
|
||||
constexpr char FIM_SENSORCELLINDEX[] {"Sensor.CellIndex"};
|
||||
constexpr char FIM_SENSORUNIT[] {"Sensor.Unit"};
|
||||
constexpr char FIM_SENSORPRECISION[] {"Sensor.Precision"};
|
||||
|
||||
TelemetryCustomScreen::TelemetryCustomScreen(QWidget *parent, ModelData & model, FrSkyScreenData & screen, GeneralSettings & generalSettings,
|
||||
Firmware * firmware, const bool & parentLock, FilteredItemModelsFactory * localFilteredItemModels):
|
||||
Firmware * firmware, const bool & parentLock, FilteredItemModelFactory * panelFilteredItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::TelemetryCustomScreen),
|
||||
screen(screen),
|
||||
@@ -41,7 +46,7 @@ TelemetryCustomScreen::TelemetryCustomScreen(QWidget *parent, ModelData & model,
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
FilteredItemModel * rawSourceFilteredModel = localFilteredItemModels->getItemModel(FIM_NAME_RAWSOURCE);
|
||||
FilteredItemModel * rawSourceFilteredModel = panelFilteredItemModels->getItemModel(FIM_RAWSOURCE);
|
||||
connectItemModelEvents(rawSourceFilteredModel);
|
||||
|
||||
for (int l = 0; l < firmware->getCapability(TelemetryCustomScreensLines); l++) {
|
||||
@@ -321,24 +326,26 @@ void TelemetryCustomScreen::onItemModelUpdateComplete()
|
||||
|
||||
TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor, int sensorIndex, int sensorCapability, ModelData & model,
|
||||
GeneralSettings & generalSettings, Firmware * firmware, const bool & parentLock,
|
||||
FilteredItemModelsFactory * localFilteredItemModels) :
|
||||
FilteredItemModelFactory * panelFilteredItemModels) :
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::TelemetrySensor),
|
||||
sensor(sensor),
|
||||
//lock(false),
|
||||
sensorIndex(sensorIndex),
|
||||
selectedIndex(0),
|
||||
sensorCapability(sensorCapability),
|
||||
modelsUpdateCnt(0),
|
||||
parentLock(parentLock)
|
||||
{
|
||||
// TODO ui definition housekeeping
|
||||
// - remove all predefined combobox lists leaving to code
|
||||
// - use Auto types for consistency
|
||||
ui->setupUi(this);
|
||||
FilteredItemModel * fltmdl;
|
||||
|
||||
FilteredItemModel * teleAllSrcFilteredModel = localFilteredItemModels->getItemModel(FIM_NAME_TELEALLSRC);
|
||||
connectItemModelEvents(teleAllSrcFilteredModel);
|
||||
FilteredItemModel * telePosSrcFilteredModel = localFilteredItemModels->getItemModel(FIM_NAME_TELEPOSSRC);
|
||||
connectItemModelEvents(telePosSrcFilteredModel);
|
||||
connectItemModelEvents(panelFilteredItemModels->getItemModel(FIM_TELEALLSRC));
|
||||
connectItemModelEvents(panelFilteredItemModels->getItemModel(FIM_TELEPOSSRC));
|
||||
|
||||
lock = true;
|
||||
ui->numLabel->setText(tr("TELE%1").arg(sensorIndex + 1));
|
||||
ui->numLabel->setProperty("index", sensorIndex);
|
||||
ui->numLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
|
||||
@@ -353,6 +360,9 @@ TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor,
|
||||
connect(ui->numLabel, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(on_customContextMenuRequested(QPoint)));
|
||||
ui->id->setField(sensor.id, this);
|
||||
ui->instance->setField(sensor.instance, this);
|
||||
ui->type->setModel(panelFilteredItemModels->getItemModel(FIM_SENSORTYPE));
|
||||
ui->formula->setModel(panelFilteredItemModels->getItemModel(FIM_SENSORFORMULA));
|
||||
ui->unit->setModel(panelFilteredItemModels->getItemModel(FIM_SENSORUNIT));
|
||||
ui->ratio->setField(sensor.ratio, this);
|
||||
ui->offset->setField(sensor.offset, this);
|
||||
ui->autoOffset->setField(sensor.autoOffset, this);
|
||||
@@ -360,29 +370,29 @@ TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor,
|
||||
ui->logs->setField(sensor.logs, this);
|
||||
ui->persistent->setField(sensor.persistent, this);
|
||||
ui->onlyPositive->setField(sensor.onlyPositive, this);
|
||||
ui->gpsSensor->setModel(telePosSrcFilteredModel);
|
||||
fltmdl = panelFilteredItemModels->getItemModel(FIM_TELEPOSSRC);
|
||||
ui->gpsSensor->setModel(fltmdl);
|
||||
ui->gpsSensor->setField(sensor.gps, this);
|
||||
ui->altSensor->setModel(telePosSrcFilteredModel);
|
||||
ui->altSensor->setModel(fltmdl);
|
||||
ui->altSensor->setField(sensor.alt, this);
|
||||
ui->ampsSensor->setModel(telePosSrcFilteredModel);
|
||||
ui->ampsSensor->setModel(fltmdl);
|
||||
ui->ampsSensor->setField(sensor.amps, this);
|
||||
ui->cellsSensor->setModel(telePosSrcFilteredModel);
|
||||
ui->cellsSensor->setModel(fltmdl);
|
||||
ui->cellsSensor->setField(sensor.source, this);
|
||||
ui->cellsIndex->addItem(tr("Lowest"), SensorData::TELEM_CELL_INDEX_LOWEST);
|
||||
for (int i = SensorData::TELEM_CELL_INDEX_LOWEST + 1; i < SensorData::TELEM_CELL_INDEX_HIGHEST; i++)
|
||||
ui->cellsIndex->addItem(tr("Cell %1").arg(i), i);
|
||||
ui->cellsIndex->addItem(tr("Highest"), SensorData::TELEM_CELL_INDEX_HIGHEST);
|
||||
ui->cellsIndex->addItem(tr("Delta"), SensorData::TELEM_CELL_INDEX_DELTA);
|
||||
ui->cellsIndex->setModel(panelFilteredItemModels->getItemModel(FIM_SENSORCELLINDEX));
|
||||
ui->cellsIndex->setField(sensor.index);
|
||||
ui->source1->setModel(teleAllSrcFilteredModel);
|
||||
fltmdl = panelFilteredItemModels->getItemModel(FIM_TELEALLSRC);
|
||||
ui->source1->setModel(fltmdl);
|
||||
ui->source1->setField(sensor.sources[0], this);
|
||||
ui->source2->setModel(teleAllSrcFilteredModel);
|
||||
ui->source2->setModel(fltmdl);
|
||||
ui->source2->setField(sensor.sources[1], this);
|
||||
ui->source3->setModel(teleAllSrcFilteredModel);
|
||||
ui->source3->setModel(fltmdl);
|
||||
ui->source3->setField(sensor.sources[2], this);
|
||||
ui->source4->setModel(teleAllSrcFilteredModel);
|
||||
ui->source4->setModel(fltmdl);
|
||||
ui->source4->setField(sensor.sources[3], this);
|
||||
ui->prec->setField(sensor.prec, 0, 2, false, "", this);
|
||||
ui->prec->setField(sensor.prec, 0, 2, false, "", this); // TODO replace autoprecisioncombobox with autocombobox and filtereditemmodel
|
||||
lock = false;
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -393,6 +403,7 @@ TelemetrySensorPanel::~TelemetrySensorPanel()
|
||||
|
||||
void TelemetrySensorPanel::update()
|
||||
{
|
||||
// TODO use bit mask
|
||||
bool isConfigurable = false;
|
||||
bool gpsFieldsDisplayed = false;
|
||||
bool cellsFieldsDisplayed = false;
|
||||
@@ -404,8 +415,8 @@ void TelemetrySensorPanel::update()
|
||||
|
||||
lock = true;
|
||||
ui->name->setText(sensor.label);
|
||||
ui->type->setCurrentIndex(sensor.type);
|
||||
ui->unit->setCurrentIndex(sensor.unit);
|
||||
ui->type->setCurrentIndex(ui->type->findData(sensor.type));
|
||||
ui->unit->setCurrentIndex(ui->unit->findData(sensor.unit));
|
||||
ui->id->updateValue();
|
||||
ui->instance->updateValue();
|
||||
ui->ratio->updateValue();
|
||||
@@ -431,7 +442,7 @@ void TelemetrySensorPanel::update()
|
||||
ui->originLabel->hide();
|
||||
ui->origin->hide();
|
||||
ui->formula->show();
|
||||
ui->formula->setCurrentIndex(sensor.formula);
|
||||
ui->formula->setCurrentIndex(ui->formula->findData(sensor.formula));
|
||||
isConfigurable = (sensor.formula < SensorData::TELEM_FORMULA_CELL);
|
||||
gpsFieldsDisplayed = (sensor.formula == SensorData::TELEM_FORMULA_DIST);
|
||||
cellsFieldsDisplayed = (sensor.formula == SensorData::TELEM_FORMULA_CELL);
|
||||
@@ -525,7 +536,7 @@ void TelemetrySensorPanel::on_name_editingFinished()
|
||||
void TelemetrySensorPanel::on_type_currentIndexChanged(int index)
|
||||
{
|
||||
if (!isLocked()) {
|
||||
sensor.type = index;
|
||||
sensor.type = ui->type->itemData(index).toInt();
|
||||
update();
|
||||
emit modified();
|
||||
}
|
||||
@@ -534,7 +545,7 @@ void TelemetrySensorPanel::on_type_currentIndexChanged(int index)
|
||||
void TelemetrySensorPanel::on_formula_currentIndexChanged(int index)
|
||||
{
|
||||
if (!isLocked()) {
|
||||
sensor.formula = index;
|
||||
sensor.formula = ui->formula->itemData(index).toInt();
|
||||
if (sensor.formula == SensorData::TELEM_FORMULA_CELL) {
|
||||
sensor.prec = 2;
|
||||
sensor.unit = SensorData::UNIT_VOLTS;
|
||||
@@ -554,7 +565,7 @@ void TelemetrySensorPanel::on_formula_currentIndexChanged(int index)
|
||||
void TelemetrySensorPanel::on_unit_currentIndexChanged(int index)
|
||||
{
|
||||
if (!isLocked()) {
|
||||
sensor.unit = index;
|
||||
sensor.unit = ui->unit->itemData(index).toInt();
|
||||
if (sensor.unit == SensorData::UNIT_FAHRENHEIT) {
|
||||
sensor.prec = 0;
|
||||
}
|
||||
@@ -710,7 +721,7 @@ void TelemetrySensorPanel::onItemModelUpdateComplete()
|
||||
/******************************************************/
|
||||
|
||||
TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels):
|
||||
CompoundItemModelFactory * sharedItemModels):
|
||||
ModelPanel(parent, model, generalSettings, firmware),
|
||||
ui(new Ui::Telemetry),
|
||||
sharedItemModels(sharedItemModels),
|
||||
@@ -718,20 +729,37 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
localFilteredItemModels = new FilteredItemModelsFactory();
|
||||
int newid;
|
||||
panelItemModels = new CompoundItemModelFactory(&generalSettings, &model);
|
||||
panelFilteredItemModels = new FilteredItemModelFactory();
|
||||
int id;
|
||||
|
||||
newid = localFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::RawSourceId)),
|
||||
FIM_NAME_RAWSOURCE);
|
||||
connectItemModelEvents(localFilteredItemModels->getItemModel(newid));
|
||||
id = panelFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_RawSource)),
|
||||
FIM_RAWSOURCE);
|
||||
connectItemModelEvents(id);
|
||||
|
||||
newid = localFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::TeleSourceId)),
|
||||
FIM_NAME_TELEALLSRC);
|
||||
connectItemModelEvents(localFilteredItemModels->getItemModel(newid));
|
||||
id = panelFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_TeleSource)),
|
||||
FIM_TELEALLSRC);
|
||||
connectItemModelEvents(id);
|
||||
|
||||
newid = localFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::TeleSourceId),
|
||||
FilteredItemModel::PositiveFilter), FIM_NAME_TELEPOSSRC);
|
||||
connectItemModelEvents(localFilteredItemModels->getItemModel(newid));
|
||||
id = panelFilteredItemModels->registerItemModel(new FilteredItemModel(sharedItemModels->getItemModel(AbstractItemModel::IMID_TeleSource),
|
||||
FilteredItemModel::PositiveFilter),
|
||||
FIM_TELEPOSSRC);
|
||||
connectItemModelEvents(id);
|
||||
|
||||
id = panelItemModels->registerItemModel(SensorData::typeItemModel());
|
||||
panelFilteredItemModels->registerItemModel(new FilteredItemModel(panelItemModels->getItemModel(id)), FIM_SENSORTYPE);
|
||||
|
||||
id = panelItemModels->registerItemModel(SensorData::formulaItemModel());
|
||||
panelFilteredItemModels->registerItemModel(new FilteredItemModel(panelItemModels->getItemModel(id)), FIM_SENSORFORMULA);
|
||||
|
||||
id = panelItemModels->registerItemModel(SensorData::cellIndexItemModel());
|
||||
panelFilteredItemModels->registerItemModel(new FilteredItemModel(panelItemModels->getItemModel(id)), FIM_SENSORCELLINDEX);
|
||||
|
||||
id = panelItemModels->registerItemModel(SensorData::unitItemModel());
|
||||
panelFilteredItemModels->registerItemModel(new FilteredItemModel(panelItemModels->getItemModel(id)), FIM_SENSORUNIT);
|
||||
|
||||
id = panelItemModels->registerItemModel(SensorData::precisionItemModel());
|
||||
panelFilteredItemModels->registerItemModel(new FilteredItemModel(panelItemModels->getItemModel(id)), FIM_SENSORPRECISION);
|
||||
|
||||
sensorCapability = firmware->getCapability(Sensors);
|
||||
if (sensorCapability > CPN_MAX_SENSORS) // TODO should be role of getCapability
|
||||
@@ -741,7 +769,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
model.frsky.usrProto = 1;
|
||||
}
|
||||
|
||||
ui->varioSource->setModel(localFilteredItemModels->getItemModel(FIM_NAME_TELEPOSSRC));
|
||||
ui->varioSource->setModel(panelFilteredItemModels->getItemModel(FIM_TELEPOSSRC));
|
||||
ui->varioSource->setField(model.frsky.varioSource, this);
|
||||
ui->varioCenterSilent->setField(model.frsky.varioCenterSilent, this);
|
||||
ui->A1GB->hide();
|
||||
@@ -749,7 +777,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
|
||||
for (int i = 0; i < sensorCapability; ++i) {
|
||||
TelemetrySensorPanel * panel = new TelemetrySensorPanel(this, model.sensorData[i], i, sensorCapability, model, generalSettings,
|
||||
firmware, lock, localFilteredItemModels);
|
||||
firmware, lock, panelFilteredItemModels);
|
||||
ui->sensorsLayout->addWidget(panel);
|
||||
sensorPanels[i] = panel;
|
||||
connect(panel, SIGNAL(dataModified()), this, SLOT(on_dataModifiedSensor()));
|
||||
@@ -762,9 +790,9 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
}
|
||||
|
||||
if (IS_TARANIS_X9(firmware->getBoard())) {
|
||||
ui->voltsSource->setModel(localFilteredItemModels->getItemModel(FIM_NAME_TELEPOSSRC));
|
||||
ui->voltsSource->setModel(panelFilteredItemModels->getItemModel(FIM_TELEPOSSRC));
|
||||
ui->voltsSource->setField(model.frsky.voltsSource, this);
|
||||
ui->altitudeSource->setModel(localFilteredItemModels->getItemModel(FIM_NAME_TELEPOSSRC));
|
||||
ui->altitudeSource->setModel(panelFilteredItemModels->getItemModel(FIM_TELEPOSSRC));
|
||||
ui->altitudeSource->setField(model.frsky.altitudeSource, this);
|
||||
}
|
||||
else {
|
||||
@@ -773,7 +801,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
|
||||
for (int i = 0; i < firmware->getCapability(TelemetryCustomScreens); i++) {
|
||||
TelemetryCustomScreen * tab = new TelemetryCustomScreen(this, model, model.frsky.screens[i], generalSettings, firmware, lock,
|
||||
localFilteredItemModels);
|
||||
panelFilteredItemModels);
|
||||
ui->customScreens->addTab(tab, tr("Telemetry screen %1").arg(i + 1));
|
||||
telemetryCustomScreens[i] = tab;
|
||||
connect(tab, &TelemetryCustomScreen::modified, this, &TelemetryPanel::onModified);
|
||||
@@ -787,7 +815,8 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
TelemetryPanel::~TelemetryPanel()
|
||||
{
|
||||
delete ui;
|
||||
delete localFilteredItemModels;
|
||||
delete panelFilteredItemModels;
|
||||
delete panelItemModels;
|
||||
}
|
||||
|
||||
void TelemetryPanel::update()
|
||||
@@ -839,7 +868,7 @@ void TelemetryPanel::setup()
|
||||
|
||||
ui->rssiSourceLabel->show();
|
||||
ui->rssiSourceLabel->setText(tr("Source"));
|
||||
ui->rssiSourceCB->setModel(localFilteredItemModels->getItemModel(FIM_NAME_TELEPOSSRC));
|
||||
ui->rssiSourceCB->setModel(panelFilteredItemModels->getItemModel(FIM_TELEPOSSRC));
|
||||
ui->rssiSourceCB->setField(model->rssiSource, this);
|
||||
ui->rssiSourceCB->show();
|
||||
|
||||
@@ -1053,12 +1082,13 @@ void TelemetryPanel::swapData(int idx1, int idx2)
|
||||
|
||||
void TelemetryPanel::on_dataModifiedSensor()
|
||||
{
|
||||
sharedItemModels->update(AbstractItemModel::TeleSensorsUpdated);
|
||||
sharedItemModels->update(AbstractItemModel::IMUE_TeleSensors);
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::connectItemModelEvents(const FilteredItemModel * itemModel)
|
||||
void TelemetryPanel::connectItemModelEvents(const int id)
|
||||
{
|
||||
FilteredItemModel * itemModel = panelFilteredItemModels->getItemModel(id);
|
||||
connect(itemModel, &FilteredItemModel::aboutToBeUpdated, this, &TelemetryPanel::onItemModelAboutToBeUpdated);
|
||||
connect(itemModel, &FilteredItemModel::updateComplete, this, &TelemetryPanel::onItemModelUpdateComplete);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#include "modeledit.h"
|
||||
#include "eeprominterface.h"
|
||||
#include "rawitemfilteredmodel.h"
|
||||
#include "filtereditemmodels.h"
|
||||
|
||||
constexpr char MIMETYPE_TELE_SENSOR[] {"application/x-companion-tele-sensor"};
|
||||
|
||||
@@ -42,7 +42,7 @@ class TelemetryCustomScreen: public ModelPanel
|
||||
|
||||
public:
|
||||
TelemetryCustomScreen(QWidget *parent, ModelData & model, FrSkyScreenData & screen, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
const bool & parentLock, FilteredItemModelsFactory * localFilteredItemModels);
|
||||
const bool & parentLock, FilteredItemModelFactory * panelFilteredItemModels);
|
||||
~TelemetryCustomScreen();
|
||||
void update();
|
||||
|
||||
@@ -81,7 +81,7 @@ class TelemetrySensorPanel: public ModelPanel
|
||||
public:
|
||||
TelemetrySensorPanel(QWidget *parent, SensorData & sensor, int sensorIndex, int sensorCapability, ModelData & model,
|
||||
GeneralSettings & generalSettings, Firmware * firmware, const bool & parentLock,
|
||||
FilteredItemModelsFactory * localFilteredItemModels);
|
||||
FilteredItemModelFactory * panelFilteredItemModels);
|
||||
~TelemetrySensorPanel();
|
||||
void update();
|
||||
|
||||
@@ -116,7 +116,6 @@ class TelemetrySensorPanel: public ModelPanel
|
||||
private:
|
||||
Ui::TelemetrySensor * ui;
|
||||
SensorData & sensor;
|
||||
//bool lock = false;
|
||||
int sensorIndex = 0;
|
||||
int selectedIndex = 0;
|
||||
int sensorCapability;
|
||||
@@ -136,7 +135,7 @@ class TelemetryPanel : public ModelPanel
|
||||
|
||||
public:
|
||||
TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware,
|
||||
ItemModelsFactory * sharedItemModels);
|
||||
CompoundItemModelFactory * sharedItemModels);
|
||||
virtual ~TelemetryPanel();
|
||||
virtual void update();
|
||||
|
||||
@@ -171,14 +170,15 @@ class TelemetryPanel : public ModelPanel
|
||||
TelemetryCustomScreen *telemetryCustomScreens[4];
|
||||
TelemetrySensorPanel *sensorPanels[CPN_MAX_SENSORS];
|
||||
int sensorCapability;
|
||||
ItemModelsFactory *sharedItemModels;
|
||||
FilteredItemModelsFactory *localFilteredItemModels;
|
||||
CompoundItemModelFactory *sharedItemModels;
|
||||
CompoundItemModelFactory *panelItemModels;
|
||||
FilteredItemModelFactory *panelFilteredItemModels;
|
||||
int modelsUpdateCnt;
|
||||
|
||||
void setup();
|
||||
void telBarUpdate();
|
||||
void swapData(int idx1, int idx2);
|
||||
void connectItemModelEvents(const FilteredItemModel * itemModel);
|
||||
void connectItemModelEvents(const int id);
|
||||
inline bool isLocked() { return lock; }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user