Skip to content

Commit 286db31

Browse files
Action param edit/add/dup/delete in place
1 parent 265dabb commit 286db31

11 files changed

+427
-131
lines changed

src/cdlgmdfdm.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,24 @@ CDlgMdfDM::initDialogData(CMDF* pmdf, CMDF_DecisionMatrix* pdm, int index)
127127
this,
128128
SLOT(delAction()));
129129

130-
setLevel(pdm->getLevel());
131-
setPage(pdm->getStartPage());
130+
setLevel(pmdf->getLevel());
131+
ui->comboLevel->setEnabled(false);
132+
132133
setOffset(pdm->getStartOffset());
133134
setRows(pdm->getRowCount());
134-
setSize(pdm->getRowSize());
135+
136+
if (0 == pmdf->getLevel()) {
137+
setPage(pdm->getStartPage());
138+
setSize(8);
139+
ui->spinRowSize->setEnabled(false);
140+
}
141+
else {
142+
setPage(0);
143+
ui->spinStartPage->setEnabled(false);
144+
setSize(pdm->getRowSize());
145+
}
146+
147+
135148

136149
// Render available actions
137150
renderActions();

src/cdlgmdfdm.ui

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@
115115
</widget>
116116
</item>
117117
<item row="4" column="1">
118-
<widget class="QSpinBox" name="spinRowSize"/>
118+
<widget class="QSpinBox" name="spinRowSize">
119+
<property name="maximum">
120+
<number>255</number>
121+
</property>
122+
</widget>
119123
</item>
120124
<item row="5" column="0">
121125
<widget class="QLabel" name="label_10">

src/cdlgmdfdmaction.cpp

Lines changed: 103 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ CDlgMdfDmAction::CDlgMdfDmAction(QWidget* parent)
8888
connect(ui->btnDelActionParam,
8989
SIGNAL(clicked()),
9090
this,
91-
SLOT(delActionParam()));
91+
SLOT(deleteActionParam()));
9292

9393
vscpworks* pworks = (vscpworks*)QCoreApplication::instance();
9494

@@ -236,10 +236,10 @@ CDlgMdfDmAction::renderActionParams(void)
236236
for (int i = 0; i < pActionParamList->size(); i++) {
237237
CMDF_ActionParameter* pactionparam = (*pActionParamList)[i];
238238
if (nullptr != pactionparam) {
239-
QString str = QString("Offset: %1 - %2").arg(pactionparam->getOffset()).arg(pactionparam->getName().c_str());
239+
QString str = QString("Offset: %1 - %2").arg(pactionparam->getOffset()).arg(pactionparam->getName().c_str());
240240
QListWidgetItem* pitem = new QListWidgetItem(str, ui->listActionParams);
241241
if (nullptr != pitem) {
242-
pitem->setData(QListWidgetItem::UserType,pactionparam->getOffset());
242+
pitem->setData(QListWidgetItem::UserType, pactionparam->getOffset());
243243
ui->listActionParams->addItem(pitem);
244244
}
245245
}
@@ -262,8 +262,8 @@ CDlgMdfDmAction::editActionParam(void)
262262
int idx = ui->listActionParams->currentRow();
263263

264264
QListWidgetItem* pitem = ui->listActionParams->currentItem();
265-
printf("data=%d\n",pitem->data(QListWidgetItem::UserType).toUInt());
266-
CMDF_ActionParameter* pactionparam = m_paction->getActionParam(pitem->data(QListWidgetItem::UserType).toUInt());
265+
printf("data=%d\n", pitem->data(QListWidgetItem::UserType).toUInt());
266+
CMDF_ActionParameter* pactionparam = m_paction->getActionParam(pitem->data(QListWidgetItem::UserType).toUInt());
267267

268268
CDlgMdfDmActionParam dlg(this);
269269
dlg.initDialogData(m_pmdf, pactionparam);
@@ -285,6 +285,39 @@ CDlgMdfDmAction::editActionParam(void)
285285
void
286286
CDlgMdfDmAction::addActionParam(void)
287287
{
288+
bool ok;
289+
290+
// Save the selected row
291+
int idx = ui->listActionParams->currentRow();
292+
293+
// QListWidgetItem* pitem = ui->listActionParams->currentItem();
294+
// printf("data=%d\n", pitem->data(QListWidgetItem::UserType).toUInt());
295+
// CMDF_ActionParameter* pactionparam = m_paction->getActionParam(pitem->data(QListWidgetItem::UserType).toUInt());
296+
297+
CMDF_ActionParameter* pactionparam = new (CMDF_ActionParameter);
298+
if (nullptr == pactionparam) {
299+
return;
300+
}
301+
302+
adddlg:
303+
CDlgMdfDmActionParam dlg(this);
304+
dlg.initDialogData(m_pmdf, pactionparam);
305+
// If DM is level I only offset 0 is allowd
306+
if (VSCP_LEVEL1 == m_pmdf->getLevel()) {
307+
dlg.setOffsetReadOnly();
308+
}
309+
if (QDialog::Accepted == dlg.exec()) {
310+
if (!m_paction->addActionParam(pactionparam)) {
311+
QMessageBox::warning(this, tr("MDF add new action parameter"), tr("Action parameter with offset %1 is already define. Must be unique.").arg(pactionparam->getOffset()));
312+
goto adddlg;
313+
}
314+
ui->listActionParams->clear();
315+
renderActionParams();
316+
ui->listActionParams->setCurrentRow(idx);
317+
}
318+
else {
319+
delete pactionparam;
320+
}
288321
}
289322

290323
///////////////////////////////////////////////////////////////////////////////
@@ -294,6 +327,47 @@ CDlgMdfDmAction::addActionParam(void)
294327
void
295328
CDlgMdfDmAction::dupActionParam(void)
296329
{
330+
bool ok;
331+
332+
// Save the selected row
333+
int idx = ui->listActionParams->currentRow();
334+
335+
QListWidgetItem* pitem = ui->listActionParams->currentItem();
336+
// printf("data=%d\n", pitem->data(QListWidgetItem::UserType).toUInt());
337+
CMDF_ActionParameter* pactionparam = m_paction->getActionParam(pitem->data(QListWidgetItem::UserType).toUInt());
338+
if (nullptr == pactionparam) {
339+
return;
340+
}
341+
342+
CMDF_ActionParameter* pactionparamnew = new (CMDF_ActionParameter);
343+
if (nullptr == pactionparamnew) {
344+
return;
345+
}
346+
347+
pactionparamnew->setOffset(pactionparam->getOffset());
348+
pactionparamnew->setName(pactionparam->getName());
349+
pactionparamnew->setMin(pactionparam->getMin());
350+
pactionparamnew->setMax(pactionparam->getMax());
351+
352+
adddlg:
353+
CDlgMdfDmActionParam dlg(this);
354+
dlg.initDialogData(m_pmdf, pactionparamnew);
355+
// If DM is level I only offset 0 is allowd
356+
if (VSCP_LEVEL1 == m_pmdf->getLevel()) {
357+
dlg.setOffsetReadOnly();
358+
}
359+
if (QDialog::Accepted == dlg.exec()) {
360+
if (!m_paction->addActionParam(pactionparamnew)) {
361+
QMessageBox::warning(this, tr("MDF add new action parameter"), tr("Action parameter with offset %1 is already define. Must be unique.").arg(pactionparam->getOffset()));
362+
goto adddlg;
363+
}
364+
ui->listActionParams->clear();
365+
renderActionParams();
366+
ui->listActionParams->setCurrentRow(idx);
367+
}
368+
else {
369+
delete pactionparam;
370+
}
297371
}
298372

299373
///////////////////////////////////////////////////////////////////////////////
@@ -303,6 +377,29 @@ CDlgMdfDmAction::dupActionParam(void)
303377
void
304378
CDlgMdfDmAction::deleteActionParam(void)
305379
{
380+
bool ok;
381+
382+
// Save the selected row
383+
int idx = ui->listActionParams->currentRow();
384+
385+
QListWidgetItem* pitem = ui->listActionParams->currentItem();
386+
CMDF_ActionParameter* pactionparam = m_paction->getActionParam(pitem->data(QListWidgetItem::UserType).toUInt());
387+
if (nullptr == pactionparam) {
388+
return;
389+
}
390+
391+
if (QMessageBox::No == QMessageBox::question(this,
392+
tr("MDF delete action parameter"),
393+
tr("Delete action parameter with offset %1.").arg(pactionparam->getOffset()))) {
394+
return;
395+
}
396+
397+
if (!m_paction->deleteActionParam(pactionparam)) {
398+
QMessageBox::warning(this, tr("MDF add new action parameter"), tr("Failed to remove action parameter with offset %1.").arg(pactionparam->getOffset()));
399+
}
400+
401+
renderActionParams();
402+
ui->listActionParams->setCurrentRow(idx);
306403
}
307404

308405
///////////////////////////////////////////////////////////////////////////////
@@ -314,7 +411,7 @@ CDlgMdfDmAction::accept()
314411
{
315412
std::string str;
316413
if (nullptr != m_paction) {
317-
m_paction ->setCode(getCode());
414+
m_paction->setCode(getCode());
318415
m_paction->setName(getName().toStdString());
319416
}
320417
else {

src/cdlgmdfdmactionparam.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,15 @@ CDlgMdfDmActionParam::initDialogData(CMDF* pmdf, CMDF_ActionParameter* pactionpa
134134
this->setFixedSize(this->size());
135135
}
136136

137+
///////////////////////////////////////////////////////////////////////////////
138+
// setOffsetReadOnly
139+
//
137140

141+
void CDlgMdfDmActionParam::setOffsetReadOnly(void)
142+
{
143+
ui->spinOffset->setValue(0);
144+
ui->spinOffset->setEnabled(false);
145+
}
138146

139147
// ----------------------------------------------------------------------------
140148
// Getters & Setters

src/cdlgmdfdmactionparam.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,12 @@ class CDlgMdfDmActionParam : public QDialog {
6464
*/
6565
void initDialogData(CMDF *pmdf, CMDF_ActionParameter* pactionparam, int index = 0);
6666

67+
/*!
68+
Set offset input field to read only
69+
Used by level I as it is always zero for level I DM's
70+
*/
71+
void setOffsetReadOnly(void);
72+
6773
/// @brief Rener action parameters
6874
void renderActionParams(void);
6975

src/cdlgmdfdmactionparam.ui

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@
9090
<item row="3" column="1">
9191
<widget class="QSpinBox" name="spinMax">
9292
<property name="maximum">
93-
<number>65535</number>
93+
<number>255</number>
94+
</property>
95+
<property name="value">
96+
<number>255</number>
9497
</property>
9598
</widget>
9699
</item>

0 commit comments

Comments
 (0)