completely new CustomDialog form

This commit is contained in:
Guido Ranzuglia granzuglia 2009-11-18 16:56:43 +00:00
parent d7f98f649e
commit bcc9cf2b78
4 changed files with 231 additions and 32 deletions

View File

@ -31,46 +31,87 @@ using namespace vcg;
CustomDialog::CustomDialog(RichParameterSet& curparset, RichParameterSet& defparset, QWidget * parent)
:QDialog(parent),curParSet(curparset),defParSet(defparset)
{
maxlen[0] = 0;
maxlen[1] = 0;
setModal(false);
closebut = new QPushButton("Close",this);
//QVBoxLayout* layout = new QVBoxLayout(parent);
QGridLayout* layout = new QGridLayout(parent);
setLayout(layout);
listwid = new QListWidget(this);
for(int ii = 0;ii < curParSet.paramList.size();++ii)
tw = new QTableWidget(curParSet.paramList.size(),2,this);
fillTable();
int totlen = 0;
for (unsigned int jj =0; jj < 2;++jj)
{
//butt = new QPushButton(richparset.paramList.at(ii)->name,this);
QListWidgetItem* item = new QListWidgetItem(curParSet.paramList.at(ii)->name,listwid);
mp.insert(item,curParSet.paramList.at(ii));
//connect(butt,SIGNAL(clicked()),this,SLOT(openSubDialog()));
tw->setColumnWidth(jj,maxlen[jj]);
totlen += maxlen[jj];
}
layout->addWidget(listwid,0,0,1,4);
layout->addWidget(closebut,1,3);
connect(listwid,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(openSubDialog(QListWidgetItem*)));
setMinimumWidth(totlen);
layout->addWidget(tw,0,0,1,5);
layout->addWidget(closebut,1,4,1,1);
connect(tw,SIGNAL(itemDoubleClicked(QTableWidgetItem* )),this,SLOT(openSubDialog(QTableWidgetItem*)));
connect(closebut,SIGNAL(clicked()),this,SLOT(close()));
}
void CustomDialog::openSubDialog( QListWidgetItem* itm )
void CustomDialog::openSubDialog( QTableWidgetItem* itm )
{
QMap<QListWidgetItem*,RichParameter*>::iterator it = mp.find(itm);
if (it != mp.end())
{
RichParameter *defPar = defParSet.findParameter(it.value()->name);
SettingDialog* setdial = new SettingDialog(it.value(),defPar,this);
connect(setdial,SIGNAL(applySettingSignal()),this,SIGNAL(applyCustomSetting()));
setdial->exec();
delete setdial;
}
int rprow = tw->row(itm);
RichParameter *defPar = defParSet.findParameter(vrp[rprow]->name);
SettingDialog* setdial = new SettingDialog(vrp[rprow],defPar,this);
connect(setdial,SIGNAL(applySettingSignal()),this,SIGNAL(applyCustomSetting()));
connect(setdial,SIGNAL(applySettingSignal()),this,SLOT(updateSettings()));
setdial->exec();
delete setdial;
}
void CustomDialog::updateSettings()
{
fillTable();
}
CustomDialog::~CustomDialog()
{
delete listwid;
delete tw;
delete closebut;
//RichParameter will be destroyed elsewhere
//for(QMap<QListWidgetItem*,RichParameter*>::iterator it = mp.begin();it != mp.end();it++)
// delete it.key();
}
void CustomDialog::fillTable()
{
RichParameterToQTableWidgetItemConstructor v;
QStringList slst;
slst.push_back("Variable Name");
slst.push_back("Variable Value");
tw->setHorizontalHeaderLabels(slst);
tw->setWordWrap(false);
tw->verticalHeader()->hide();
tw->horizontalHeader()->setResizeMode(tw->columnCount() - 1, QHeaderView::Stretch);
int sz = tw->font().pointSize();
for(int ii = 0;ii < curParSet.paramList.size();++ii)
{
QTableWidgetItem* item = new QTableWidgetItem(curParSet.paramList.at(ii)->name);
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled |Qt::ItemIsDropEnabled |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
if (maxlen[0] < item->text().size() * sz)
maxlen[0] = item->text().size() * sz;
//item->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
tw->setItem(ii,0,item);
//butt = new QPushButton(richparset.paramList.at(ii)->name,this);
curParSet.paramList[ii]->accept(v);
v.lastCreated->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled |Qt::ItemIsDropEnabled |Qt::ItemIsUserCheckable |Qt::ItemIsEnabled);
tw->setItem(ii,1,v.lastCreated);
if (maxlen[1] < v.lastCreated->text().size() * sz)
maxlen[1] = v.lastCreated->text().size() * sz;
vrp.push_back(curParSet.paramList.at(ii));
}
}
//Maybe a MeshDocument parameter is needed. See loadFrameContent definition
SettingDialog::SettingDialog( RichParameter* currentPar, RichParameter* defaultPar, QWidget* parent /*= 0*/ )
:QDialog(parent),frame(this),tmppar(NULL),curPar(currentPar),defPar(defaultPar)
@ -79,25 +120,28 @@ SettingDialog::SettingDialog( RichParameter* currentPar, RichParameter* defaultP
savebut = new QPushButton("Save",this);
resetbut = new QPushButton("Reset",this);
applybut = new QPushButton("Apply",this);
loadbut = new QPushButton("Load",this);
closebut = new QPushButton("Close",this);
QGridLayout* dialoglayout = new QGridLayout(parent);
dialoglayout->addWidget(savebut,1,0);
dialoglayout->addWidget(resetbut,1,1);
dialoglayout->addWidget(applybut,1,2);
dialoglayout->addWidget(closebut,1,3);
dialoglayout->addWidget(loadbut,1,2);
dialoglayout->addWidget(applybut,1,3);
dialoglayout->addWidget(closebut,1,4);
RichParameterCopyConstructor cp;
curPar->accept(cp);
tmppar = cp.lastCreated;
frame.loadFrameContent(tmppar);
dialoglayout->addWidget(&frame,0,0,1,4);
dialoglayout->addWidget(&frame,0,0,1,5);
dialoglayout->setSizeConstraint(QLayout::SetFixedSize);
setLayout(dialoglayout);
connect(applybut,SIGNAL(clicked()),this,SLOT(apply()));
connect(resetbut,SIGNAL(clicked()),this,SLOT(reset()));
connect(savebut,SIGNAL(clicked()),this,SLOT(save()));
connect(loadbut,SIGNAL(clicked()),this,SLOT(load()));
connect(closebut,SIGNAL(clicked()),this,SLOT(close()));
}
@ -112,6 +156,7 @@ void SettingDialog::save()
qDebug("Writing into Settings param with name %s and content ****%s****",qPrintable(tmppar->name),qPrintable(docstring));
QSettings setting;
setting.setValue(tmppar->name,QVariant(docstring));
tmppar->pd->defVal->set(*tmppar->val);
}
void SettingDialog::apply()
@ -124,10 +169,16 @@ void SettingDialog::apply()
void SettingDialog::reset()
{
assert(frame.stdfieldwidgets.size() == 1);
qDebug("resetting the value of param %s to the hardwired default",qPrintable(curPar->name));
tmppar->val->set(*defPar->val);
assert(frame.stdfieldwidgets.size() == 1);
frame.stdfieldwidgets.at(0)->setWidgetValue(*tmppar->val);
apply();
}
curPar->val->set(*defPar->val);
void SettingDialog::load()
{
assert(frame.stdfieldwidgets.size() == 1);
frame.stdfieldwidgets.at(0)->resetValue();
}
@ -138,5 +189,6 @@ SettingDialog::~SettingDialog()
delete resetbut;
delete applybut;
delete closebut;
delete loadbut;
//RichParameter Value will be destroyed elsewhere
}

View File

@ -65,6 +65,7 @@ public slots:
void save();
void reset();
void apply();
void load();
signals:
void applySettingSignal();
@ -78,6 +79,7 @@ private:
QPushButton* applybut;
QPushButton* resetbut;
QPushButton* closebut;
QPushButton* loadbut;
};
class CustomDialog : public QDialog
@ -89,16 +91,19 @@ public:
//void loadCurrentSetting(RichParameterSet& parset);
public slots:
void openSubDialog(QListWidgetItem* itm);
void openSubDialog(QTableWidgetItem* itm);
void updateSettings();
signals:
void applyCustomSetting();
private:
void fillTable();
RichParameterSet& curParSet;
RichParameterSet& defParSet;
QListWidget* listwid;
QMap<QListWidgetItem*,RichParameter*> mp;
QTableWidget* tw;
QVector<RichParameter*> vrp;
void dispatch(const RichParameter& par);
QPushButton* closebut;
int maxlen[2];
};

View File

@ -453,6 +453,11 @@ void AbsPercWidget::resetWidgetValue()
setValue(rp->pd->defVal->getAbsPerc(),absd->min,absd->max);
}
void AbsPercWidget::setWidgetValue( const Value& nv )
{
const AbsPercDecoration* absd = reinterpret_cast<const AbsPercDecoration*>(&(rp->pd));
setValue(nv.getAbsPerc(),absd->min,absd->max);
}
/******************************************/
// Point3fWidget Implementation
@ -564,9 +569,11 @@ void Point3fWidget::resetWidgetValue()
coordSB[ii]->setText(QString::number(rp->pd->defVal->getPoint3f()[ii],'g',3));
}
void Point3fWidget::setWidgetValue( const Value& nv )
{
for(unsigned int ii = 0; ii < 3;++ii)
coordSB[ii]->setText(QString::number(nv.getPoint3f()[ii],'g',3));
}
ComboWidget::ComboWidget(QWidget *p, RichParameter* rpar) :MeshLabWidget(p,rpar) {
}
@ -630,6 +637,10 @@ void EnumWidget::resetWidgetValue()
enumCombo->setCurrentIndex(rp->pd->defVal->getEnum());
}
void EnumWidget::setWidgetValue( const Value& nv )
{
enumCombo->setCurrentIndex(nv.getEnum());
}
/******************************************/
//MeshEnumWidget Implementation
@ -689,6 +700,12 @@ void MeshWidget::resetWidgetValue()
enumCombo->setCurrentIndex(defaultMeshIndex);
}
void MeshWidget::setWidgetValue( const Value& nv )
{
//WARNING!!!!! I HAVE TO THINK CAREFULLY ABOUT THIS FUNCTION!!!
assert(0);
//enumCombo->setCurrentIndex(md->meshList(nv.getMesh());
}
/******************************************
QVariantListWidget Implementation
@ -965,6 +982,10 @@ void DynamicFloatWidget::resetWidgetValue()
valueLE->setText(QString::number(rp->pd->defVal->getFloat()));
}
void DynamicFloatWidget::setWidgetValue( const Value& nv )
{
valueLE->setText(QString::number(nv.getFloat()));
}
/****************************/
Value& MeshLabWidget::getWidgetValue()
{
@ -1040,6 +1061,11 @@ BoolWidget::~BoolWidget()
delete cb;
}
void BoolWidget::setWidgetValue( const Value& nv )
{
cb->setChecked(nv.getBool());
}
//connect(qle,SIGNAL(editingFinished()),this,SIGNAL(parameterChanged()));
LineEditWidget::LineEditWidget( QWidget* p,RichParameter* rpar )
:MeshLabWidget(p,rpar)
@ -1075,6 +1101,10 @@ void IntWidget::resetWidgetValue()
lned->setText(QString::number(rp->val->getInt()));
}
void IntWidget::setWidgetValue( const Value& nv )
{
lned->setText(QString::number(nv.getInt()));
}
//
FloatWidget::FloatWidget( QWidget* p,RichFloat* rpar )
:LineEditWidget(p,rpar)
@ -1092,6 +1122,10 @@ void FloatWidget::resetWidgetValue()
lned->setText(QString::number(rp->val->getFloat(),'g',3));
}
void FloatWidget::setWidgetValue( const Value& nv )
{
lned->setText(QString::number(nv.getFloat(),'g',3));
}
StringWidget::StringWidget( QWidget* p,RichString* rpar )
:LineEditWidget(p,rpar)
@ -1109,6 +1143,10 @@ void StringWidget::resetWidgetValue()
lned->setText(rp->val->getString());
}
void StringWidget::setWidgetValue( const Value& nv )
{
lned->setText(nv.getString());
}
//Matrix44fWidget::Matrix44fWidget( QWidget* p,RichMatrix44f* rpar )
//:MeshLabWidget(p,rb)
@ -1167,6 +1205,10 @@ void SaveFileWidget::resetWidgetValue()
{
}
void SaveFileWidget::setWidgetValue( const Value& nv )
{
}
/*
ql = new QLabel(fpi.fieldDesc,this);
ql->setToolTip(fpi.fieldToolTip);
@ -1254,8 +1296,70 @@ ColorWidget::~ColorWidget()
delete descLabel;
}
void ColorWidget::setWidgetValue( const Value& nv )
{
QColor cl = nv.getColor();
pickcol = cl;
updateColorInfo(cl);
}
/*
void GetFileNameWidget::launchGetFileNameDialog()
{
}*/
void RichParameterToQTableWidgetItemConstructor::visit( RichBool& pd )
{
if (pd.val->getBool())
lastCreated = new QTableWidgetItem("true"/*,lst*/);
else
lastCreated = new QTableWidgetItem("false"/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichInt& pd )
{
lastCreated = new QTableWidgetItem(QString::number(pd.val->getInt())/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichFloat& pd )
{
lastCreated = new QTableWidgetItem(QString::number(pd.val->getFloat())/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichString& pd )
{
lastCreated = new QTableWidgetItem(pd.val->getString()/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichPoint3f& pd )
{
vcg::Point3f pp = pd.val->getPoint3f();
QString pst = "P3(" + QString::number(pp.X()) + "," + QString::number(pp.Y()) + "," + QString::number(pp.Z()) + ")";
lastCreated = new QTableWidgetItem(pst/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichColor& pd )
{
QPixmap pix(10,10);
pix.fill(pd.val->getColor());
QIcon ic(pix);
lastCreated = new QTableWidgetItem(ic,""/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichAbsPerc& pd )
{
lastCreated = new QTableWidgetItem(QString::number(pd.val->getAbsPerc())/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichEnum& pd )
{
lastCreated = new QTableWidgetItem(QString::number(pd.val->getEnum())/*,lst*/);
}
void RichParameterToQTableWidgetItemConstructor::visit( RichDynamicFloat& pd )
{
lastCreated = new QTableWidgetItem(QString::number(pd.val->getDynamicFloat())/*,lst*/);
}

View File

@ -92,6 +92,7 @@ Added standard plugin window support
#include "interfaces.h"
#include <cassert>
class MeshLabWidget : public QWidget
{
Q_OBJECT
@ -100,6 +101,7 @@ public:
virtual void resetWidgetValue() = 0;
virtual void collectWidgetValue() = 0;
virtual void setWidgetValue(const Value& nv) = 0;
virtual ~MeshLabWidget();
void resetValue();
Value& getWidgetValue();
@ -121,6 +123,7 @@ public:
~BoolWidget();
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
};
@ -135,6 +138,7 @@ public:
~LineEditWidget();
virtual void collectWidgetValue() = 0;
virtual void resetWidgetValue() = 0;
virtual void setWidgetValue(const Value& nv) = 0;
};
@ -146,6 +150,7 @@ public:
~IntWidget(){}
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
};
@ -157,6 +162,7 @@ public:
~FloatWidget(){}
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
};
@ -168,6 +174,7 @@ public:
~StringWidget(){}
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
};
//class Matrix44fWidget : public MeshLabWidget
@ -209,6 +216,7 @@ public:
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
};
@ -229,6 +237,7 @@ class ColorWidget : public MeshLabWidget
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
void initWidgetValue();
private:
@ -258,6 +267,7 @@ public:
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
private:
void setValue(float val, float minV, float maxV);
@ -296,6 +306,7 @@ public:
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
public slots:
void getPoint();
@ -329,6 +340,7 @@ public:
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
public slots:
void setValue(int newv);
@ -365,6 +377,7 @@ public:
void Init(QWidget *p,int newEnum, QStringList values);
virtual void collectWidgetValue() = 0;
virtual void resetWidgetValue() = 0;
virtual void setWidgetValue(const Value& nv) = 0;
int getIndex();
void setIndex(int newEnum);
@ -386,6 +399,7 @@ public:
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
//returns the number of items in the list
int getSize();
@ -403,6 +417,7 @@ public:
~MeshWidget(){};
void collectWidgetValue();
void resetWidgetValue();
void setWidgetValue(const Value& nv);
MeshModel * getMesh();
void setMesh(MeshModel * newMesh);
@ -624,6 +639,29 @@ private:
};
class RichParameterToQTableWidgetItemConstructor : public Visitor
{
public:
RichParameterToQTableWidgetItemConstructor(/*QListWidget* widlst*/):/*lst(widlst),*/lastCreated(NULL){}
void visit(RichBool& pd);
void visit(RichInt& pd);
void visit(RichFloat& pd);
void visit(RichString& pd);
void visit(RichMatrix44f& pd){assert(0);};
void visit(RichPoint3f& pd);
void visit(RichColor& pd);
void visit(RichAbsPerc& pd);
void visit(RichEnum& pd);
void visit(RichFloatList& pd){assert(0);};
void visit(RichDynamicFloat& pd);
void visit(RichOpenFile& pd){assert(0);};
void visit(RichSaveFile& pd){assert(0);};
void visit(RichMesh& pd){assert(0);};
/*QListWidget* lst;*/
QTableWidgetItem* lastCreated;
};