mirror of
https://github.com/opentx/opentx.git
synced 2025-07-23 00:05:17 +03:00
PR 7939
This commit is contained in:
parent
0c2358d35a
commit
4318d113f3
5 changed files with 168 additions and 119 deletions
|
@ -338,6 +338,7 @@ class ModelData {
|
||||||
value = swtch.toValue();
|
value = swtch.toValue();
|
||||||
}
|
}
|
||||||
void sortMixes();
|
void sortMixes();
|
||||||
|
void updateResetParam(CustomFunctionData * cfd);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MODELDATA_H
|
#endif // MODELDATA_H
|
||||||
|
|
|
@ -59,7 +59,7 @@ QString RawSwitch::toString(Board::Type board, const GeneralSettings * const gen
|
||||||
tr("THs"), tr("TH%"), tr("THt")
|
tr("THs"), tr("TH%"), tr("THt")
|
||||||
};
|
};
|
||||||
|
|
||||||
const QStringList directionIndicators = QStringList()
|
static const QStringList directionIndicators = QStringList()
|
||||||
<< CPN_STR_SW_INDICATOR_UP
|
<< CPN_STR_SW_INDICATOR_UP
|
||||||
<< CPN_STR_SW_INDICATOR_NEUT
|
<< CPN_STR_SW_INDICATOR_NEUT
|
||||||
<< CPN_STR_SW_INDICATOR_DN;
|
<< CPN_STR_SW_INDICATOR_DN;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include "node.h"
|
#include "node.h"
|
||||||
#include "edge.h"
|
#include "edge.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
#include "rawitemfilteredmodel.h"
|
||||||
|
|
||||||
#define GFX_MARGIN 16
|
#define GFX_MARGIN 16
|
||||||
|
|
||||||
|
@ -108,10 +109,11 @@ float curveSymmetricalX(float x, float coeff, float yMin, float yMid, float yMax
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
||||||
Curves::Curves(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware):
|
CurvesPanel::CurvesPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CommonItemModels * commonItemModels):
|
||||||
ModelPanel(parent, model, generalSettings, firmware),
|
ModelPanel(parent, model, generalSettings, firmware),
|
||||||
ui(new Ui::Curves),
|
ui(new Ui::Curves),
|
||||||
currentCurve(0)
|
currentCurve(0),
|
||||||
|
commonItemModels(commonItemModels)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
@ -230,12 +232,12 @@ Curves::Curves(QWidget * parent, ModelData & model, GeneralSettings & generalSet
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Curves::~Curves()
|
CurvesPanel::~CurvesPanel()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::editCurve()
|
void CurvesPanel::editCurve()
|
||||||
{
|
{
|
||||||
QPushButton *button = (QPushButton *)sender();
|
QPushButton *button = (QPushButton *)sender();
|
||||||
int index = button->property("index").toInt();
|
int index = button->property("index").toInt();
|
||||||
|
@ -243,7 +245,7 @@ void Curves::editCurve()
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::plotCurve(bool checked)
|
void CurvesPanel::plotCurve(bool checked)
|
||||||
{
|
{
|
||||||
QCheckBox *chk = (QCheckBox *)sender();
|
QCheckBox *chk = (QCheckBox *)sender();
|
||||||
int index = chk->property("index").toInt();
|
int index = chk->property("index").toInt();
|
||||||
|
@ -251,7 +253,7 @@ void Curves::plotCurve(bool checked)
|
||||||
updateCurve();
|
updateCurve();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::update()
|
void CurvesPanel::update()
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
|
@ -266,12 +268,12 @@ void Curves::update()
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::setCurrentCurve(int index)
|
void CurvesPanel::setCurrentCurve(int index)
|
||||||
{
|
{
|
||||||
currentCurve = index;
|
currentCurve = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::updateCurveType()
|
void CurvesPanel::updateCurveType()
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
|
@ -297,7 +299,7 @@ void Curves::updateCurveType()
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::updateCurve()
|
void CurvesPanel::updateCurve()
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
|
@ -371,7 +373,7 @@ void Curves::updateCurve()
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::updateCurvePoints()
|
void CurvesPanel::updateCurvePoints()
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
|
@ -405,7 +407,7 @@ void Curves::updateCurvePoints()
|
||||||
lock = false;
|
lock = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onPointEdited()
|
void CurvesPanel::onPointEdited()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
int index = sender()->property("index").toInt();
|
int index = sender()->property("index").toInt();
|
||||||
|
@ -417,7 +419,7 @@ void Curves::onPointEdited()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onNodeMoved(int x, int y)
|
void CurvesPanel::onNodeMoved(int x, int y)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
lock = true;
|
lock = true;
|
||||||
|
@ -435,20 +437,20 @@ void Curves::onNodeMoved(int x, int y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onNodeFocus()
|
void CurvesPanel::onNodeFocus()
|
||||||
{
|
{
|
||||||
int index = sender()->property("index").toInt();
|
int index = sender()->property("index").toInt();
|
||||||
spny[index]->setFocus();
|
spny[index]->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onNodeUnfocus()
|
void CurvesPanel::onNodeUnfocus()
|
||||||
{
|
{
|
||||||
int index = sender()->property("index").toInt();
|
int index = sender()->property("index").toInt();
|
||||||
spny[index]->clearFocus();
|
spny[index]->clearFocus();
|
||||||
updateCurve();
|
updateCurve();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Curves::allowCurveType(int points, CurveData::CurveType type)
|
bool CurvesPanel::allowCurveType(int points, CurveData::CurveType type)
|
||||||
{
|
{
|
||||||
int totalpoints = 0;
|
int totalpoints = 0;
|
||||||
for (int i = 0; i < maxCurves; i++) {
|
for (int i = 0; i < maxCurves; i++) {
|
||||||
|
@ -466,7 +468,7 @@ bool Curves::allowCurveType(int points, CurveData::CurveType type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::on_curvePoints_currentIndexChanged(int index)
|
void CurvesPanel::on_curvePoints_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
int numpoints = ((QComboBox *)sender())->itemData(index).toInt();
|
int numpoints = ((QComboBox *)sender())->itemData(index).toInt();
|
||||||
|
@ -489,7 +491,7 @@ void Curves::on_curvePoints_currentIndexChanged(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::on_curveCustom_currentIndexChanged(int index)
|
void CurvesPanel::on_curveCustom_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
CurveData::CurveType type = (CurveData::CurveType)index;
|
CurveData::CurveType type = (CurveData::CurveType)index;
|
||||||
|
@ -513,20 +515,23 @@ void Curves::on_curveCustom_currentIndexChanged(int index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::on_curveSmooth_currentIndexChanged(int index)
|
void CurvesPanel::on_curveSmooth_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
model->curves[currentCurve].smooth = index;
|
model->curves[currentCurve].smooth = index;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::on_curveName_editingFinished()
|
void CurvesPanel::on_curveName_editingFinished()
|
||||||
{
|
{
|
||||||
|
if (ui->curveName->text() != model->curves[currentCurve].name) {
|
||||||
memset(model->curves[currentCurve].name, 0, sizeof(model->curves[currentCurve].name));
|
memset(model->curves[currentCurve].name, 0, sizeof(model->curves[currentCurve].name));
|
||||||
strcpy(model->curves[currentCurve].name, ui->curveName->text().toLatin1());
|
strcpy(model->curves[currentCurve].name, ui->curveName->text().toLatin1());
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Curves::resizeEvent(QResizeEvent *event)
|
void CurvesPanel::resizeEvent(QResizeEvent *event)
|
||||||
{
|
{
|
||||||
QRect qr = ui->curvePreview->contentsRect();
|
QRect qr = ui->curvePreview->contentsRect();
|
||||||
ui->curvePreview->scene()->setSceneRect(GFX_MARGIN, GFX_MARGIN, qr.width() - GFX_MARGIN * 2, qr.height() - GFX_MARGIN * 2);
|
ui->curvePreview->scene()->setSceneRect(GFX_MARGIN, GFX_MARGIN, qr.width() - GFX_MARGIN * 2, qr.height() - GFX_MARGIN * 2);
|
||||||
|
@ -534,7 +539,7 @@ void Curves::resizeEvent(QResizeEvent *event)
|
||||||
ModelPanel::resizeEvent(event);
|
ModelPanel::resizeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::on_curveType_currentIndexChanged(int index)
|
void CurvesPanel::on_curveType_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
unsigned int flags = templates[index].flags;
|
unsigned int flags = templates[index].flags;
|
||||||
ui->curveCoeffLabel->setVisible(flags & CURVE_COEFF_ENABLE);
|
ui->curveCoeffLabel->setVisible(flags & CURVE_COEFF_ENABLE);
|
||||||
|
@ -548,7 +553,7 @@ void Curves::on_curveType_currentIndexChanged(int index)
|
||||||
ui->yMin->setValue(-100);
|
ui->yMin->setValue(-100);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::addTemplate(QString name, unsigned int flags, curveFunction function)
|
void CurvesPanel::addTemplate(QString name, unsigned int flags, curveFunction function)
|
||||||
{
|
{
|
||||||
CurveCreatorTemplate tmpl;
|
CurveCreatorTemplate tmpl;
|
||||||
tmpl.name = name;
|
tmpl.name = name;
|
||||||
|
@ -558,7 +563,7 @@ void Curves::addTemplate(QString name, unsigned int flags, curveFunction functio
|
||||||
ui->curveType->addItem(name);
|
ui->curveType->addItem(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::on_curveApply_clicked()
|
void CurvesPanel::on_curveApply_clicked()
|
||||||
{
|
{
|
||||||
int index = ui->curveType->currentIndex();
|
int index = ui->curveType->currentIndex();
|
||||||
int numpoints = model->curves[currentCurve].count;
|
int numpoints = model->curves[currentCurve].count;
|
||||||
|
@ -595,14 +600,14 @@ void Curves::on_curveApply_clicked()
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onPointSizeEdited()
|
void CurvesPanel::onPointSizeEdited()
|
||||||
{
|
{
|
||||||
if (!lock) {
|
if (!lock) {
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onNodeDelete()
|
void CurvesPanel::onNodeDelete()
|
||||||
{
|
{
|
||||||
int index = sender()->property("index").toInt();
|
int index = sender()->property("index").toInt();
|
||||||
int numpoints = model->curves[currentCurve].count;
|
int numpoints = model->curves[currentCurve].count;
|
||||||
|
@ -620,7 +625,7 @@ void Curves::onNodeDelete()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onSceneNewPoint(int x, int y)
|
void CurvesPanel::onSceneNewPoint(int x, int y)
|
||||||
{
|
{
|
||||||
if ((model->curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) && (model->curves[currentCurve].count < CPN_MAX_POINTS)) {
|
if ((model->curves[currentCurve].type == CurveData::CURVE_TYPE_CUSTOM) && (model->curves[currentCurve].count < CPN_MAX_POINTS)) {
|
||||||
int newidx = 0;
|
int newidx = 0;
|
||||||
|
@ -651,7 +656,7 @@ void Curves::onSceneNewPoint(int x, int y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::onCustomContextMenuRequested(QPoint pos)
|
void CurvesPanel::onCustomContextMenuRequested(QPoint pos)
|
||||||
{
|
{
|
||||||
QPushButton *button = (QPushButton *)sender();
|
QPushButton *button = (QPushButton *)sender();
|
||||||
selectedIndex = button->property("index").toInt();
|
selectedIndex = button->property("index").toInt();
|
||||||
|
@ -673,7 +678,7 @@ void Curves::onCustomContextMenuRequested(QPoint pos)
|
||||||
contextMenu.exec(globalPos);
|
contextMenu.exec(globalPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Curves::hasClipboardData(QByteArray * data) const
|
bool CurvesPanel::hasClipboardData(QByteArray * data) const
|
||||||
{
|
{
|
||||||
const QClipboard * clipboard = QApplication::clipboard();
|
const QClipboard * clipboard = QApplication::clipboard();
|
||||||
const QMimeData * mimeData = clipboard->mimeData();
|
const QMimeData * mimeData = clipboard->mimeData();
|
||||||
|
@ -685,22 +690,22 @@ bool Curves::hasClipboardData(QByteArray * data) const
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Curves::insertAllowed() const
|
bool CurvesPanel::insertAllowed() const
|
||||||
{
|
{
|
||||||
return ((selectedIndex < maxCurves - 1) && (model->curves[maxCurves - 1].isEmpty()));
|
return ((selectedIndex < maxCurves - 1) && (model->curves[maxCurves - 1].isEmpty()));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Curves::moveDownAllowed() const
|
bool CurvesPanel::moveDownAllowed() const
|
||||||
{
|
{
|
||||||
return selectedIndex < maxCurves - 1;
|
return selectedIndex < maxCurves - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Curves::moveUpAllowed() const
|
bool CurvesPanel::moveUpAllowed() const
|
||||||
{
|
{
|
||||||
return selectedIndex > 0;
|
return selectedIndex > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmClear(bool prompt)
|
void CurvesPanel::cmClear(bool prompt)
|
||||||
{
|
{
|
||||||
if (prompt) {
|
if (prompt) {
|
||||||
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Clear Curve. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Clear Curve. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
||||||
|
@ -710,10 +715,11 @@ void Curves::cmClear(bool prompt)
|
||||||
model->curves[selectedIndex].clear();
|
model->curves[selectedIndex].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_CLEAR, selectedIndex);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_CLEAR, selectedIndex);
|
||||||
update();
|
update();
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmClearAll()
|
void CurvesPanel::cmClearAll()
|
||||||
{
|
{
|
||||||
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Clear all Curves. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Clear all Curves. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
||||||
return;
|
return;
|
||||||
|
@ -723,10 +729,11 @@ void Curves::cmClearAll()
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_CLEAR, i);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_CLEAR, i);
|
||||||
}
|
}
|
||||||
update();
|
update();
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmCopy()
|
void CurvesPanel::cmCopy()
|
||||||
{
|
{
|
||||||
QByteArray data;
|
QByteArray data;
|
||||||
data.append((char*)&model->curves[selectedIndex], sizeof(CurveData));
|
data.append((char*)&model->curves[selectedIndex], sizeof(CurveData));
|
||||||
|
@ -735,7 +742,7 @@ void Curves::cmCopy()
|
||||||
QApplication::clipboard()->setMimeData(mimeData,QClipboard::Clipboard);
|
QApplication::clipboard()->setMimeData(mimeData,QClipboard::Clipboard);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmCut()
|
void CurvesPanel::cmCut()
|
||||||
{
|
{
|
||||||
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Cut Curve. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Cut Curve. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
||||||
return;
|
return;
|
||||||
|
@ -743,7 +750,7 @@ void Curves::cmCut()
|
||||||
cmClear(false);
|
cmClear(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmDelete()
|
void CurvesPanel::cmDelete()
|
||||||
{
|
{
|
||||||
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Delete Curve. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
if (QMessageBox::question(this, CPN_STR_APP_NAME, tr("Delete Curve. Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)
|
||||||
return;
|
return;
|
||||||
|
@ -752,40 +759,43 @@ void Curves::cmDelete()
|
||||||
model->curves[maxCurves - 1].clear();
|
model->curves[maxCurves - 1].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_SHIFT, selectedIndex, 0, -1);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_SHIFT, selectedIndex, 0, -1);
|
||||||
update();
|
update();
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmInsert()
|
void CurvesPanel::cmInsert()
|
||||||
{
|
{
|
||||||
memmove(&model->curves[selectedIndex + 1], &model->curves[selectedIndex], (CPN_MAX_CURVES - (selectedIndex + 1)) * sizeof(CurveData));
|
memmove(&model->curves[selectedIndex + 1], &model->curves[selectedIndex], (CPN_MAX_CURVES - (selectedIndex + 1)) * sizeof(CurveData));
|
||||||
model->curves[selectedIndex].clear();
|
model->curves[selectedIndex].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_SHIFT, selectedIndex, 0, 1);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_SHIFT, selectedIndex, 0, 1);
|
||||||
update();
|
update();
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmMoveDown()
|
void CurvesPanel::cmMoveDown()
|
||||||
{
|
{
|
||||||
swapData(selectedIndex, selectedIndex + 1);
|
swapData(selectedIndex, selectedIndex + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmMoveUp()
|
void CurvesPanel::cmMoveUp()
|
||||||
{
|
{
|
||||||
swapData(selectedIndex, selectedIndex - 1);
|
swapData(selectedIndex, selectedIndex - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::cmPaste()
|
void CurvesPanel::cmPaste()
|
||||||
{
|
{
|
||||||
QByteArray data;
|
QByteArray data;
|
||||||
if (hasClipboardData(&data)) {
|
if (hasClipboardData(&data)) {
|
||||||
CurveData *cd = &model->curves[selectedIndex];
|
CurveData *cd = &model->curves[selectedIndex];
|
||||||
memcpy(cd, data.constData(), sizeof(CurveData));
|
memcpy(cd, data.constData(), sizeof(CurveData));
|
||||||
update();
|
update();
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Curves::swapData(int idx1, int idx2)
|
void CurvesPanel::swapData(int idx1, int idx2)
|
||||||
{
|
{
|
||||||
if ((idx1 != idx2) && (!model->curves[idx1].isEmpty() || !model->curves[idx2].isEmpty())) {
|
if ((idx1 != idx2) && (!model->curves[idx1].isEmpty() || !model->curves[idx2].isEmpty())) {
|
||||||
CurveData cdtmp = model->curves[idx2];
|
CurveData cdtmp = model->curves[idx2];
|
||||||
|
@ -795,10 +805,16 @@ void Curves::swapData(int idx1, int idx2)
|
||||||
memcpy(cd1, &cdtmp, sizeof(CurveData));
|
memcpy(cd1, &cdtmp, sizeof(CurveData));
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_SWAP, idx1, idx2);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_CURVE, ModelData::REF_UPD_ACT_SWAP, idx1, idx2);
|
||||||
update();
|
update();
|
||||||
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CurvesPanel::updateItemModels()
|
||||||
|
{
|
||||||
|
commonItemModels->update(CommonItemModels::RMO_CURVES);
|
||||||
|
}
|
||||||
|
|
||||||
CustomScene::CustomScene(QGraphicsView * view) :
|
CustomScene::CustomScene(QGraphicsView * view) :
|
||||||
QGraphicsScene(view)
|
QGraphicsScene(view)
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,13 +31,14 @@
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, GeneralSettings & generalSettings, Firmware * firmware, QWidget * prevFocus, RawSwitchFilterItemModel * switchModel):
|
TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, GeneralSettings & generalSettings, Firmware * firmware, QWidget * prevFocus, RawItemFilteredModel * rawSwitchFilteredModel):
|
||||||
ModelPanel(parent, model, generalSettings, firmware),
|
ModelPanel(parent, model, generalSettings, firmware),
|
||||||
timer(timer),
|
timer(timer),
|
||||||
ui(new Ui::Timer)
|
ui(new Ui::Timer)
|
||||||
{
|
{
|
||||||
|
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataAboutToBeUpdated, this, &TimerPanel::onModelDataAboutToBeUpdated);
|
||||||
|
connect(rawSwitchFilteredModel, &RawItemFilteredModel::dataUpdateComplete, this, &TimerPanel::onModelDataUpdateComplete);
|
||||||
|
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
|
@ -48,11 +49,10 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ui->name->setMaxLength(length);
|
ui->name->setMaxLength(length);
|
||||||
//ui->name->setText(timer.name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mode
|
// Mode
|
||||||
ui->mode->setModel(switchModel);
|
ui->mode->setModel(rawSwitchFilteredModel);
|
||||||
ui->mode->setCurrentIndex(ui->mode->findData(timer.mode.toValue()));
|
ui->mode->setCurrentIndex(ui->mode->findData(timer.mode.toValue()));
|
||||||
connect(ui->mode, SIGNAL(activated(int)), this, SLOT(onModeChanged(int)));
|
connect(ui->mode, SIGNAL(activated(int)), this, SLOT(onModeChanged(int)));
|
||||||
|
|
||||||
|
@ -94,6 +94,7 @@ TimerPanel::~TimerPanel()
|
||||||
void TimerPanel::update()
|
void TimerPanel::update()
|
||||||
{
|
{
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
ui->name->setText(timer.name);
|
ui->name->setText(timer.name);
|
||||||
|
|
||||||
int hour = timer.val / 3600;
|
int hour = timer.val / 3600;
|
||||||
|
@ -165,11 +166,23 @@ void TimerPanel::on_name_editingFinished()
|
||||||
if (QString(timer.name) != ui->name->text()) {
|
if (QString(timer.name) != ui->name->text()) {
|
||||||
int length = ui->name->maxLength();
|
int length = ui->name->maxLength();
|
||||||
strncpy(timer.name, ui->name->text().toLatin1(), length);
|
strncpy(timer.name, ui->name->text().toLatin1(), length);
|
||||||
|
emit nameChanged();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TimerPanel::onModelDataAboutToBeUpdated()
|
||||||
|
{
|
||||||
|
lock = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TimerPanel::onModelDataUpdateComplete()
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
lock = false;
|
||||||
|
}
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
#define FAILSAFE_CHANNEL_HOLD 2000
|
#define FAILSAFE_CHANNEL_HOLD 2000
|
||||||
|
@ -703,8 +716,8 @@ void ModulePanel::on_channelsCount_editingFinished()
|
||||||
{
|
{
|
||||||
if (!lock && module.channelsCount != ui->channelsCount->value()) {
|
if (!lock && module.channelsCount != ui->channelsCount->value()) {
|
||||||
module.channelsCount = ui->channelsCount->value();
|
module.channelsCount = ui->channelsCount->value();
|
||||||
update();
|
|
||||||
emit channelsRangeChanged();
|
emit channelsRangeChanged();
|
||||||
|
update();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -713,8 +726,8 @@ void ModulePanel::on_channelsStart_editingFinished()
|
||||||
{
|
{
|
||||||
if (!lock && module.channelsStart != (unsigned)ui->channelsStart->value() - 1) {
|
if (!lock && module.channelsStart != (unsigned)ui->channelsStart->value() - 1) {
|
||||||
module.channelsStart = (unsigned)ui->channelsStart->value() - 1;
|
module.channelsStart = (unsigned)ui->channelsStart->value() - 1;
|
||||||
update();
|
|
||||||
emit channelsRangeChanged();
|
emit channelsRangeChanged();
|
||||||
|
update();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -978,18 +991,20 @@ void ModulePanel::onClearAccessRxClicked()
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware):
|
SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CommonItemModels * commonItemModels):
|
||||||
ModelPanel(parent, model, generalSettings, firmware),
|
ModelPanel(parent, model, generalSettings, firmware),
|
||||||
ui(new Ui::Setup)
|
ui(new Ui::Setup),
|
||||||
|
commonItemModels(commonItemModels)
|
||||||
{
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
rawSwitchFilteredModel = new RawItemFilteredModel(commonItemModels->rawSwitchItemModel(), RawSwitch::TimersContext, this);
|
||||||
|
|
||||||
Board::Type board = firmware->getBoard();
|
Board::Type board = firmware->getBoard();
|
||||||
|
|
||||||
lock = true;
|
lock = true;
|
||||||
|
|
||||||
memset(modules, 0, sizeof(modules));
|
memset(modules, 0, sizeof(modules));
|
||||||
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
||||||
ui->name->setValidator(new QRegExpValidator(rx, this));
|
ui->name->setValidator(new QRegExpValidator(rx, this));
|
||||||
ui->name->setMaxLength(firmware->getCapability(ModelName));
|
ui->name->setMaxLength(firmware->getCapability(ModelName));
|
||||||
|
@ -1062,18 +1077,16 @@ SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & ge
|
||||||
}
|
}
|
||||||
|
|
||||||
QWidget * prevFocus = ui->image;
|
QWidget * prevFocus = ui->image;
|
||||||
RawSwitchFilterItemModel * swModel = new RawSwitchFilterItemModel(&generalSettings, &model, RawSwitch::TimersContext, this);
|
|
||||||
connect(this, &SetupPanel::updated, swModel, &RawSwitchFilterItemModel::update);
|
|
||||||
|
|
||||||
timersCount = firmware->getCapability(Timers);
|
timersCount = firmware->getCapability(Timers);
|
||||||
|
|
||||||
for (int i = 0; i < CPN_MAX_TIMERS; i++) {
|
for (int i = 0; i < CPN_MAX_TIMERS; i++) {
|
||||||
if (i < timersCount) {
|
if (i < timersCount) {
|
||||||
timers[i] = new TimerPanel(this, model, model.timers[i], generalSettings, firmware, prevFocus, swModel);
|
timers[i] = new TimerPanel(this, model, model.timers[i], generalSettings, firmware, prevFocus, rawSwitchFilteredModel);
|
||||||
ui->gridLayout->addWidget(timers[i], 1+i, 1);
|
ui->gridLayout->addWidget(timers[i], 1+i, 1);
|
||||||
connect(timers[i], &TimerPanel::modified, this, &SetupPanel::modified);
|
connect(timers[i], &TimerPanel::modified, this, &SetupPanel::modified);
|
||||||
|
connect(timers[i], &TimerPanel::nameChanged, this, &SetupPanel::onTimerNameChanged);
|
||||||
connect(this, &SetupPanel::updated, timers[i], &TimerPanel::update);
|
connect(this, &SetupPanel::updated, timers[i], &TimerPanel::update);
|
||||||
connect(this, &SetupPanel::timerUpdated, timers[i], &TimerPanel::update);
|
|
||||||
prevFocus = timers[i]->getLastFocus();
|
prevFocus = timers[i]->getLastFocus();
|
||||||
// TODO more reliable method required
|
// TODO more reliable method required
|
||||||
QLabel *label = findChild<QLabel *>(QString("label_timer%1").arg(i + 1));
|
QLabel *label = findChild<QLabel *>(QString("label_timer%1").arg(i + 1));
|
||||||
|
@ -1627,7 +1640,7 @@ void SetupPanel::cmTimerClear(bool prompt)
|
||||||
|
|
||||||
model->timers[selectedTimerIndex].clear();
|
model->timers[selectedTimerIndex].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_CLEAR, selectedTimerIndex);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_CLEAR, selectedTimerIndex);
|
||||||
emit timerUpdated();
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1640,7 +1653,7 @@ void SetupPanel::cmTimerClearAll()
|
||||||
model->timers[i].clear();
|
model->timers[i].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_CLEAR, i);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_CLEAR, i);
|
||||||
}
|
}
|
||||||
emit timerUpdated();
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1674,7 +1687,7 @@ void SetupPanel::cmTimerDelete()
|
||||||
}
|
}
|
||||||
model->timers[maxidx].clear();
|
model->timers[maxidx].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_SHIFT, selectedTimerIndex, 0, -1);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_SHIFT, selectedTimerIndex, 0, -1);
|
||||||
emit timerUpdated();
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1687,7 +1700,7 @@ void SetupPanel::cmTimerInsert()
|
||||||
}
|
}
|
||||||
model->timers[selectedTimerIndex].clear();
|
model->timers[selectedTimerIndex].clear();
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_SHIFT, selectedTimerIndex, 0, 1);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_SHIFT, selectedTimerIndex, 0, 1);
|
||||||
emit timerUpdated();
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1707,7 +1720,7 @@ void SetupPanel::cmTimerPaste()
|
||||||
if (hasTimerClipboardData(&data)) {
|
if (hasTimerClipboardData(&data)) {
|
||||||
TimerData *td = &model->timers[selectedTimerIndex];
|
TimerData *td = &model->timers[selectedTimerIndex];
|
||||||
memcpy(td, data.constData(), sizeof(TimerData));
|
memcpy(td, data.constData(), sizeof(TimerData));
|
||||||
emit timerUpdated();
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1721,7 +1734,17 @@ void SetupPanel::swapTimerData(int idx1, int idx2)
|
||||||
memcpy(td2, td1, sizeof(TimerData));
|
memcpy(td2, td1, sizeof(TimerData));
|
||||||
memcpy(td1, &tdtmp, sizeof(TimerData));
|
memcpy(td1, &tdtmp, sizeof(TimerData));
|
||||||
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_SWAP, idx1, idx2);
|
model->updateAllReferences(ModelData::REF_UPD_TYPE_TIMER, ModelData::REF_UPD_ACT_SWAP, idx1, idx2);
|
||||||
emit timerUpdated();
|
updateItemModels();
|
||||||
emit modified();
|
emit modified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetupPanel::onTimerNameChanged()
|
||||||
|
{
|
||||||
|
updateItemModels();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetupPanel::updateItemModels()
|
||||||
|
{
|
||||||
|
commonItemModels->update(CommonItemModels::RMO_TIMERS);
|
||||||
|
}
|
||||||
|
|
|
@ -26,7 +26,8 @@
|
||||||
|
|
||||||
constexpr char MIMETYPE_TIMER[] = "application/x-companion-timer";
|
constexpr char MIMETYPE_TIMER[] = "application/x-companion-timer";
|
||||||
|
|
||||||
class RawSwitchFilterItemModel;
|
class CommonItemModels;
|
||||||
|
class RawItemFilteredModel;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class Setup;
|
class Setup;
|
||||||
|
@ -39,7 +40,7 @@ class TimerPanel : public ModelPanel
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, GeneralSettings & generalSettings, Firmware * firmware, QWidget *prevFocus, RawSwitchFilterItemModel * switchModel);
|
TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, GeneralSettings & generalSettings, Firmware * firmware, QWidget *prevFocus, RawItemFilteredModel * switchModel);
|
||||||
virtual ~TimerPanel();
|
virtual ~TimerPanel();
|
||||||
|
|
||||||
virtual void update();
|
virtual void update();
|
||||||
|
@ -50,6 +51,11 @@ class TimerPanel : public ModelPanel
|
||||||
void on_value_editingFinished();
|
void on_value_editingFinished();
|
||||||
void on_minuteBeep_toggled(bool checked);
|
void on_minuteBeep_toggled(bool checked);
|
||||||
void on_name_editingFinished();
|
void on_name_editingFinished();
|
||||||
|
void onModelDataAboutToBeUpdated();
|
||||||
|
void onModelDataUpdateComplete();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void nameChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TimerData & timer;
|
TimerData & timer;
|
||||||
|
@ -125,7 +131,7 @@ class SetupPanel : public ModelPanel
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware);
|
SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, Firmware * firmware, CommonItemModels * commonItemModels);
|
||||||
virtual ~SetupPanel();
|
virtual ~SetupPanel();
|
||||||
|
|
||||||
virtual void update();
|
virtual void update();
|
||||||
|
@ -133,7 +139,6 @@ class SetupPanel : public ModelPanel
|
||||||
signals:
|
signals:
|
||||||
void extendedLimitsToggled();
|
void extendedLimitsToggled();
|
||||||
void updated();
|
void updated();
|
||||||
void timerUpdated();
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void on_name_editingFinished();
|
void on_name_editingFinished();
|
||||||
|
@ -164,6 +169,7 @@ class SetupPanel : public ModelPanel
|
||||||
void cmTimerPaste();
|
void cmTimerPaste();
|
||||||
void cmTimerMoveDown();
|
void cmTimerMoveDown();
|
||||||
void cmTimerMoveUp();
|
void cmTimerMoveUp();
|
||||||
|
void onTimerNameChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::Setup *ui;
|
Ui::Setup *ui;
|
||||||
|
@ -185,6 +191,9 @@ class SetupPanel : public ModelPanel
|
||||||
bool moveTimerDownAllowed() const;
|
bool moveTimerDownAllowed() const;
|
||||||
bool moveTimerUpAllowed() const;
|
bool moveTimerUpAllowed() const;
|
||||||
void swapTimerData(int idx1, int idx2);
|
void swapTimerData(int idx1, int idx2);
|
||||||
|
CommonItemModels * commonItemModels;
|
||||||
|
RawItemFilteredModel * rawSwitchFilteredModel;
|
||||||
|
void updateItemModels();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _SETUP_H_
|
#endif // _SETUP_H_
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue