17 #include <QMessageBox>
18 #include <QFileDialog>
22 #include "TObjArray.h"
24 #include "TGo4LockGuard.h"
38 QObject::connect(MemberTable, SIGNAL(cellChanged(
int,
int)),
this, SLOT(
ChangedTable(
int,
int)));
40 QObject::connect(ApplyButton, SIGNAL(pressed()),
this, SLOT(
ApplyClicked()));
41 QObject::connect(RefreshButton, SIGNAL(pressed()),
this, SLOT(
RefreshClicked()));
42 QObject::connect(ClearButton, SIGNAL(pressed()),
this, SLOT(
clearTextFields()));
43 QObject::connect(MemberTable, SIGNAL(cellDoubleClicked(
int,
int)),
this, SLOT(
TableDoubleClick(
int,
int)));
44 QObject::connect(MemberTable, SIGNAL(customContextMenuRequested(
const QPoint &)),
this, SLOT(
ContextMenu(
const QPoint &)));
45 QObject::connect(SavePar, SIGNAL(clicked()),
this, SLOT(
saveFile()));
48 PleaseUpdateLabel->setVisible(
false);
49 parentWidget()->adjustSize();
51 ParamNameLbl->setText(
"");
52 ParamClassLbl->setText(
"");
56 MemberTable->setContextMenuPolicy(Qt::CustomContextMenu);
57 MemberTable->horizontalHeader()->setStretchLastSection(
true);
72 return (cl==0) ?
false : cl->InheritsFrom(TGo4Parameter::Class());
78 ((cl!=0) && cl->InheritsFrom(TGo4Parameter::Class())))
84 if (strcmp(linkname,
"Parameter")==0)
87 if (strcmp(linkname,
"ParStatus")==0)
95 if (strcmp(linkname,
"Fitter")!=0)
101 if (PleaseUpdateLabel->isVisible() && !isrefresh) {
104 if ((par!=0) && (previtem!=0)) {
105 int res = QMessageBox::warning(
this,
"Parameter editor",
106 QString(
"Current parameter %1 is modified!\n"
107 "New parameter %2 is selected.").arg(previtem).arg(itemname),
108 QString(
"Continue with current"),
109 QString(
"Start with new"), QString(), 0);
118 ParamNameLbl->setText(itemname);
122 QString iconname =
":/icons/right.png";
123 QString tooltip =
"Refresh parameter values from analysis";
130 AddLink(itemname,
"ParameterLock");
132 iconname =
":/icons/refresh.png";
133 tooltip =
"Refresh parameter values from source";
134 AddLink(itemname,
"Parameter");
139 RefreshButton->setIcon(QIcon(iconname));
140 RefreshButton->setToolTip(tooltip);
149 ParamNameLbl->setText(
"");
150 ParamClassLbl->setText(
"");
154 RefreshButton->setEnabled(
false);
155 ApplyButton->setEnabled(
false);
162 PleaseUpdateLabel->setVisible(
false);
167 RefreshButton->setEnabled(par!=0);
168 ApplyButton->setEnabled(par!=0);
171 fItems =
new TObjArray(100);
176 ParamClassLbl->setText(QString(
" - ")+par->ClassName());
181 PleaseUpdateLabel->setVisible(
false);
187 RefreshButton->setEnabled(status!=0);
198 ParamClassLbl->setText(QString(
" - ") + status->
GetObjectClass());
203 PleaseUpdateLabel->setVisible(
false);
209 MemberTable->setRowCount(0);
217 MemberTable->horizontalHeaderItem(
fiColType)->setText(
"Type");
218 MemberTable->horizontalHeaderItem(
fiColName)->setText(
"Name");
219 MemberTable->horizontalHeaderItem(
fiColValue)->setText(
"Value");
220 MemberTable->horizontalHeaderItem(
fiColComment)->setText(
"Comments");
222 int memnum =
fItems->GetLast()+1;
223 MemberTable->setRowCount(memnum);
225 MemberTable->verticalHeader()->hide();
227 #if QT_VERSION < QT_VERSION_CHECK(6,0,0)
228 int ih = QApplication::fontMetrics().height();
230 int ih = QFontMetricsF(QApplication::font()).height();
232 for(
int row=0; row<memnum; row++) {
233 MemberTable->setRowHeight(row, ih);
236 QTableWidgetItem* item =
new QTableWidgetItem(info->
GetTypeName());
237 item->setFlags(item->flags() & ~
Qt::ItemIsEditable);
238 MemberTable->setItem(row,
fiColType, item);
240 item =
new QTableWidgetItem(info->
GetFullName(buf));
241 item->setFlags(item->flags() & ~
Qt::ItemIsEditable);
242 MemberTable->setItem(row,
fiColName, item);
246 item->setFlags(item->flags() | Qt::ItemIsEditable);
248 item->setFlags(item->flags() & ~ Qt::ItemIsEditable);
251 item =
new QTableWidgetItem(info->GetTitle());
252 item->setFlags(item->flags() & ~
Qt::ItemIsEditable);
255 MemberTable->setRowHidden(row, !info->
IsVisible());
272 for(
int n=0;n<=
fItems->GetLast();n++) {
277 PleaseUpdateLabel->setVisible(
true);
285 QString txt = MemberTable->item(row, col)->text();
288 PleaseUpdateLabel->setVisible(
true);
310 QTableWidgetItem* item = MemberTable->itemAt (pnt);
312 if ((item==0) || (MemberTable->column(item) !=
fiColName))
return;
314 int row = MemberTable->row(item);
320 QMenu contextMenu(
this );
321 contextMenu.addAction(
"Array View");
323 if (row<fItems->GetLast()) {
326 contextMenu.addAction(
"++ \t(next index)",
this, SLOT(
IncArrayIndex()));
332 contextMenu.addAction(
"-- \t(prev index)",
this, SLOT(
DecArrayIndex()));
336 contextMenu.exec(QCursor::pos());
341 QMenu contextMenu(
this );
342 contextMenu.addAction(
"Modify Fitter");
344 contextMenu.addAction(
"Edit...",
this, SLOT(
EditFitter()));
348 if ((fitter!=0) && (info->
GetObject()!=fitter))
350 contextMenu.exec(QCursor::pos());
359 for(
int n=0;n<=
fItems->GetLast();n++) {
398 fitter=
new TGo4Fitter(
"Fitter",
"Fitter from parameter editor");
405 PleaseUpdateLabel->setVisible(
true);
416 if (fitter!=0) info->
SetObject(fitter, kTRUE);
430 PleaseUpdateLabel->setVisible(
false);
434 if (parclass==0)
return;
435 if (gROOT->GetClass(parclass)==0) {
436 QMessageBox::warning(
this,
"Parameter editor",
437 QString(
"Parameter class ") + parclass +
" not known to gui");
440 TString foldname, parname;
448 QMessageBox::warning(
this,
"Parameter editor",
449 QString(
"Can not crate parameter object of class ") + parclass);
453 QFileDialog fd(
this, QString(
"Save ") +
fItemName +
" in root file",
454 QString(),
"ROOT (*.root);;ROOT XML (*.xml)");
455 fd.setFileMode( QFileDialog::AnyFile);
456 fd.setAcceptMode(QFileDialog::AcceptSave);
457 fd.selectFile(
"file.root");
458 if (fd.exec() != QDialog::Accepted)
return;
460 QStringList flst = fd.selectedFiles();
461 if (flst.isEmpty())
return;
463 TFile* f = TFile::Open(flst[0].toLatin1().constData(),
"UPDATE");
465 f->WriteTObject(par, par->GetName(),
"WriteDelete");
482 TString foldname, parname;
486 if (parclass==0)
return;
494 PleaseUpdateLabel->setVisible(
false);
TObject * GetObject() const
virtual void linkedObjectRemoved(const char *linkname)
virtual void DropItem(const char *itemname, TClass *cl, int kind)
const char * GetFullName(TString &buf)
virtual void ChangedTable(int row, int col)
virtual void GetFitterFromEditor()
TGo4ServerProxy * DefineServerObject(const char *itemname, TString *objname=0, Bool_t onlyanalysis=kTRUE)
virtual void ApplyClicked()
virtual void WorkWithParameter(const char *itemname, bool isrefresh)
Bool_t CanStrEdit() const
virtual void RefreshWidget(TGo4Parameter *par)
void SetStrValue(const char *value)
TObjArray * GetMemberValues(Bool_t takeit=kFALSE)
virtual void linkedObjectUpdated(const char *linkname, TObject *obj)
void SetObject(TObject *obj, Bool_t owner)
Bool_t IsArrayItem() const
TGo4ParaEdit(QWidget *parent=0, const char *name=0)
void RequestObjectStatus(const char *name, TGo4Slot *tgtslot)
const char * ItemClassName(const char *name)
virtual Bool_t CanSubmitObjects()
virtual void clearTextFields()
Bool_t SetMemberValues(TObjArray *fItems)
virtual void ExpandShrinkArray()
const char * GetObjectClass() const
const char * GetStrValue() const
static void ProduceFolderAndName(const char *fullname, TString &foldername, TString &objectname)
virtual void EditFitter()
virtual void IncArrayIndex()
Bool_t AssignObject(TObject *obj, Bool_t owner)
const char * GetTypeName() const
void SetVisible(Bool_t on=kTRUE)
virtual void TableDoubleClick(int row, int col)
virtual bool IsAcceptDrag(const char *itemname, TClass *cl, int kind)
Int_t GetMemberId() const
virtual void DecArrayIndex()
virtual void ShowVisibleItems()
virtual void RefreshClicked()
Bool_t IsFitterItem() const
virtual void ResetWidget()
virtual void ContextMenu(const QPoint &)
void GetMemberValues(TObjArray *fItems)