/*
* Copyright (C) 2008,2009,2010 Thorsten Liebig (Thorsten.Liebig@gmx.de)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*/
#include
#include
#include
#include
#include
#include
#include "QParameterGui.h"
#include "QCSXCAD_Global.h"
QParameter::QParameter(Parameter* para, QWidget* parent) : QGroupBox(parent)
{
clPara=para;
Name=new QLabel("");
Value=new QLineEdit("");
QObject::connect(Value,SIGNAL(textEdited(QString)),this,SLOT(Changed()));
lay = new QGridLayout();
// lay->addWidget(new QLabel(tr("Name: ")),0,0);
// lay->addWidget(Name,0,1);
lay->addWidget(new QLabel(tr("Value: ")),0,0);
lay->addWidget(Value,0,1);
QPushButton* btn = new QPushButton(QIcon(":/images/failed.png"),QString());
QObject::connect(btn,SIGNAL(clicked()),this,SLOT(deleteLater()));
QObject::connect(btn,SIGNAL(clicked()),this,SLOT(DeleteParameter()));
btn->setToolTip(tr("Delete parameter"));
lay->addWidget(btn,0,3);
SweepCB = new QCheckBox();
QObject::connect(SweepCB,SIGNAL(stateChanged(int)),this,SLOT(SweepState(int)));
SweepCB->setToolTip(tr("Sweep this parameter"));
lay->addWidget(SweepCB,0,2);
setLayout(lay);
//setFrameStyle(QFrame::Box);
}
QParameter::~QParameter()
{
}
void QParameter::DeleteParameter()
{
emit Delete(clPara);
}
void QParameter::SweepState(int state)
{
clPara->SetSweep(state);
}
void QParameter::Changed()
{
double val=Value->text().toDouble();
clPara->SetValue(val);
emit ParameterChanged();
}
bool QParameter::Edit()
{
QDialog* diag = new QDialog(this);
QGroupBox* Group=new QGroupBox(tr("Edit Constant Parameter"));
QGridLayout* lay = new QGridLayout();
lay->addWidget(new QLabel(tr("Name: ")),0,0);
QLineEdit* eName= new QLineEdit(QString::fromUtf8(clPara->GetName().c_str()));
lay->addWidget(eName,0,1);
lay->addWidget(new QLabel(tr("Value: ")),1,0);
QLineEdit* eValue=new QLineEdit(QString("%1").arg(clPara->GetValue()));
lay->addWidget(eValue,1,1);
Group->setLayout(lay);
QGridLayout* Grid = new QGridLayout();
Grid->addWidget(Group,0,0,1,2);
QPushButton* PB = new QPushButton(tr("Ok"));
QObject::connect(PB,SIGNAL(clicked()),diag,SLOT(accept()));
Grid->addWidget(PB,1,0);
PB = new QPushButton(tr("Cancel"));
QObject::connect(PB,SIGNAL(clicked()),diag,SLOT(reject()));
Grid->addWidget(PB,1,1);
diag->setLayout(Grid);
diag->show();
diag->setFixedSize(diag->size());
if (diag->exec()==QDialog::Accepted)
{
if (eName->text().isEmpty())
{
QMessageBox::warning(this,tr("Edit Parameter"),tr("Parameter-Name is invalid!"));
return false;
}
clPara->SetName(eName->text().toStdString());
clPara->SetValue(eValue->text().toDouble());
Update();
return true;
}
return false;
}
void QParameter::Update()
{
//Name->setText(clPara->GetName());
setTitle(QString::fromUtf8(clPara->GetName().c_str()));
Value->setText(QString("%1").arg(clPara->GetValue()));
if (clPara->GetSweep()) SweepCB->setCheckState(Qt::Checked);
else SweepCB->setCheckState(Qt::Unchecked);
}
QLinearParameter::QLinearParameter(LinearParameter* para, QWidget* parent) : QParameter(para,parent)
{
slider = new QSlider(Qt::Horizontal);
lay->addWidget(slider,1,0,1,3);
Value->setReadOnly(true);
QObject::connect(slider,SIGNAL(valueChanged(int)),this,SLOT(Changed()));
QPushButton* btn = new QPushButton(QIcon(":/images/edit.png"),QString());
QObject::connect(btn,SIGNAL(clicked()),this,SLOT(Edit()));
lay->addWidget(btn,1,3);
btn->setToolTip(tr("Edit Parameter"));
}
QLinearParameter::~QLinearParameter()
{
}
bool QLinearParameter::Edit()
{
LinearParameter* LP = clPara->ToLinear();
if (LP==NULL) return false;
QDialog* diag = new QDialog(this);
QGroupBox* Group=new QGroupBox(tr("Edit Linear Parameter"));
QGridLayout* lay = new QGridLayout();
lay->addWidget(new QLabel(tr("Name: ")),0,0);
QLineEdit* eName= new QLineEdit(QString::fromUtf8(LP->GetName().c_str()));
lay->addWidget(eName,0,1);
lay->addWidget(new QLabel(tr("Value: ")),1,0);
QLineEdit* eValue=new QLineEdit(QString("%1").arg(LP->GetValue()));
lay->addWidget(eValue,1,1);
lay->addWidget(new QLabel(tr("Start: ")),2,0);
QLineEdit* Start=new QLineEdit(QString("%1").arg(LP->GetMin()));
lay->addWidget(Start,2,1);
lay->addWidget(new QLabel(tr("Stop: ")),3,0);
QLineEdit* Stop=new QLineEdit(QString("%1").arg(LP->GetMax()));
lay->addWidget(Stop,3,1);
lay->addWidget(new QLabel(tr("Step: ")),4,0);
QLineEdit* Step=new QLineEdit(QString("%1").arg(LP->GetStep()));
lay->addWidget(Step,4,1);
Group->setLayout(lay);
QGridLayout* Grid = new QGridLayout();
Grid->addWidget(Group,0,0,1,2);
QPushButton* PB = new QPushButton(tr("Ok"));
QObject::connect(PB,SIGNAL(clicked()),diag,SLOT(accept()));
Grid->addWidget(PB,1,0);
PB = new QPushButton(tr("Cancel"));
QObject::connect(PB,SIGNAL(clicked()),diag,SLOT(reject()));
Grid->addWidget(PB,1,1);
diag->setLayout(Grid);
diag->show();
diag->setFixedSize(diag->size());
if (diag->exec()==QDialog::Accepted)
{
if (eName->text().isEmpty())
{
QMessageBox::warning(this,tr("Edit Parameter"),tr("Parameter-Name is invalid!"));
return false;
}
LP->SetName(eName->text().toStdString());
LP->SetMin(Start->text().toDouble());
LP->SetMax(Stop->text().toDouble());
LP->SetStep(Step->text().toDouble());
LP->SetValue(eValue->text().toDouble());
Update();
return true;
}
return false;
}
void QLinearParameter::Update()
{
QParameter::Update();
LinearParameter* LP=clPara->ToLinear();
if (LP==NULL) return;
if ((LP->GetStep()>0) && (LP->GetMax()>LP->GetMin()))
{
double steps=(LP->GetMax()-LP->GetMin())/LP->GetStep();
double val=(LP->GetValue()-LP->GetMin())/LP->GetStep();
slider->setRange(1,(int)steps+1);
slider->setValue((int)val+1);
}
else slider->setRange(1,1);
}
void QLinearParameter::Changed()
{
LinearParameter* LP=clPara->ToLinear();
if (LP==NULL) return;
double val=LP->GetMin()+LP->GetStep()*(slider->value()-1);
LP->SetValue(val);
Value->setText(QString("%1").arg(LP->GetValue()));
emit ParameterChanged();
}
QParameterSet::QParameterSet(QWidget* parent) : QWidget(parent), ParameterSet()
{
QGridLayout* grid = new QGridLayout();
ParaLay = new QVBoxLayout();
QScrollArea* QSA = new QScrollArea();
QWidget* QW = new QWidget();
QVBoxLayout* QVBL = new QVBoxLayout();
QVBL->addLayout(ParaLay);
QVBL->addStretch(1);
QW->setLayout(QVBL);
QSA->setWidget(QW);
QSA->setWidgetResizable(true);
grid->addWidget(QSA);
// grid->addLayout(ParaLay,0,0,1,2);
// grid->setRowStretch(1,1);
QPushButton* btn = new QPushButton(tr("New"));
QObject::connect(btn,SIGNAL(clicked()),this,SLOT(NewParameter()));
btn->setEnabled(QCSX_Settings.GetEdit());
grid->addWidget(btn,2,0);
setLayout(grid);
}
QParameterSet::~QParameterSet()
{
}
void QParameterSet::SetModified(bool mod)
{
emit ParameterChanged();
ParameterSet::SetModified(mod);
}
void QParameterSet::clear()
{
ParameterSet::clear();
for (int i=0;isetChecked(true);
BG->addButton(RB,0);
lay->addWidget(RB);
RB = new QRadioButton("Linear");
BG->addButton(RB,1);
lay->addWidget(RB);
Group->setLayout(lay);
QGridLayout* Grid = new QGridLayout();
Grid->addWidget(Group,0,0,1,2);
QPushButton* PB = new QPushButton(tr("Ok"));
QObject::connect(PB,SIGNAL(clicked()),diag,SLOT(accept()));
Grid->addWidget(PB,1,0);
PB = new QPushButton(tr("Cancel"));
QObject::connect(PB,SIGNAL(clicked()),diag,SLOT(reject()));
Grid->addWidget(PB,1,1);
diag->setLayout(Grid);
diag->show();
diag->setFixedSize(diag->size());
if (diag->exec()==QDialog::Accepted)
{
Parameter* newPara=NULL;
QParameter* QPara=NULL;
switch (BG->checkedId())
{
case 0:
newPara = new Parameter();
QPara = new QParameter(newPara);
break;
case 1:
newPara = new LinearParameter();
QPara = new QLinearParameter(newPara->ToLinear());
break;
}
if (newPara!=NULL)
{
if (QPara->Edit()==true) LinkParameter(newPara);
else
{
delete newPara;
delete QPara;
}
}
}
}
size_t QParameterSet::DeleteParameter(Parameter* para)
{
if (para!=NULL)
for (int i=0;iGetParameter()==para)
{
delete QPara;
vecQPara.remove(i);
}
}
return ParameterSet::DeleteParameter(para);
}
void QParameterSet::AddParaWid(Parameter* newPara)
{
if (newPara!=NULL)
{
QParameter* QPara=NULL;
switch (newPara->GetType())
{
case 0:
QPara = new QParameter(newPara);
break;
case 1:
QPara = new QLinearParameter(newPara->ToLinear());
break;
default:
QPara=NULL;
break;
}
if (QPara!=NULL)
{
ParaLay->addWidget(QPara);
QObject::connect(QPara,SIGNAL(Delete(Parameter*)),this,SLOT(DeleteParameter(Parameter*)));
QObject::connect(QPara,SIGNAL(ParameterChanged()),this,SLOT(SetModified()));
QPara->Update();
vecQPara.append(QPara);
}
}
}
size_t QParameterSet::LinkParameter(Parameter* newPara)
{
AddParaWid(newPara);
return ParameterSet::LinkParameter(newPara);
}