24#include "TGo4LockGuard.h"
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 ? false : cl->InheritsFrom(TGo4Parameter::Class());
78 (cl && 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 && previtem) {
105 QMessageBox msgBox(QMessageBox::Question,
"Parameter editor",
106 QString(
"Current parameter %1 is modified!\nNew parameter %2 is selected.").arg(previtem).arg(itemname));
108 auto btnContinue = msgBox.addButton(
"Continue with current", QMessageBox::ActionRole);
109 msgBox.addButton(
"Start with new", QMessageBox::ActionRole);
110 msgBox.setDefaultButton(btnContinue);
113 if (msgBox.clickedButton() == btnContinue)
120 ParamNameLbl->setText(itemname);
124 QString iconname =
":/icons/right.png";
125 QString tooltip =
"Refresh parameter values from analysis";
132 AddLink(itemname,
"ParameterLock");
134 iconname =
":/icons/refresh.png";
135 tooltip =
"Refresh parameter values from source";
136 AddLink(itemname,
"Parameter");
141 RefreshButton->setIcon(QIcon(iconname));
142 RefreshButton->setToolTip(tooltip);
151 ParamNameLbl->setText(
"");
152 ParamClassLbl->setText(
"");
156 RefreshButton->setEnabled(
false);
157 ApplyButton->setEnabled(
false);
164 PleaseUpdateLabel->setVisible(
false);
169 RefreshButton->setEnabled(par !=
nullptr);
170 ApplyButton->setEnabled(par !=
nullptr);
173 fItems =
new TObjArray(100);
178 ParamClassLbl->setText(QString(
" - ")+par->ClassName());
183 PleaseUpdateLabel->setVisible(
false);
189 RefreshButton->setEnabled(status !=
nullptr);
200 ParamClassLbl->setText(QString(
" - ") + status->
GetObjectClass());
205 PleaseUpdateLabel->setVisible(
false);
211 MemberTable->setRowCount(0);
219 MemberTable->horizontalHeaderItem(
fiColType)->setText(
"Type");
220 MemberTable->horizontalHeaderItem(
fiColName)->setText(
"Name");
221 MemberTable->horizontalHeaderItem(
fiColValue)->setText(
"Value");
222 MemberTable->horizontalHeaderItem(
fiColComment)->setText(
"Comments");
224 int memnum =
fItems->GetLast()+1;
225 MemberTable->setRowCount(memnum);
227 MemberTable->verticalHeader()->hide();
229#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
230 int ih = QApplication::fontMetrics().height();
232 int ih = QFontMetricsF(QApplication::font()).height();
234 for (
int row = 0; row < memnum; row++) {
235 MemberTable->setRowHeight(row, ih);
238 QTableWidgetItem* item =
new QTableWidgetItem(info->
GetTypeName());
239 item->setFlags(item->flags() & ~Qt::ItemIsEditable);
240 MemberTable->setItem(row,
fiColType, item);
242 item =
new QTableWidgetItem(info->
GetFullName(buf));
243 item->setFlags(item->flags() & ~Qt::ItemIsEditable);
244 MemberTable->setItem(row,
fiColName, item);
248 item->setFlags(item->flags() | Qt::ItemIsEditable);
250 item->setFlags(item->flags() & ~ Qt::ItemIsEditable);
253 item =
new QTableWidgetItem(info->GetTitle());
254 item->setFlags(item->flags() & ~Qt::ItemIsEditable);
257 MemberTable->setRowHidden(row, !info->
IsVisible());
274 for (
int n = 0; n <=
fItems->GetLast(); n++) {
279 PleaseUpdateLabel->setVisible(
true);
287 QString txt = MemberTable->item(row, col)->text();
290 PleaseUpdateLabel->setVisible(
true);
311 QTableWidgetItem* item = MemberTable->itemAt (pnt);
313 if (!item || (MemberTable->column(item) !=
fiColName))
return;
315 int row = MemberTable->row(item);
322 contextMenu.addAction(
"Array View");
324 if (row<fItems->GetLast()) {
337 contextMenu.exec(QCursor::pos());
343 contextMenu.addAction(
"Modify Fitter");
349 if (fitter && (info->
GetObject() != fitter))
351 contextMenu.exec(QCursor::pos());
360 for (
int n = 0; n <=
fItems->GetLast(); n++) {
399 fitter =
new TGo4Fitter(
"Fitter",
"Fitter from parameter editor");
406 PleaseUpdateLabel->setVisible(
true);
417 if (fitter) info->
SetObject(fitter, kTRUE);
429 if (par->SetMemberValues(
fItems))
431 PleaseUpdateLabel->setVisible(
false);
436 if (!parclass)
return;
437 if (!gROOT->GetClass(parclass)) {
438 QMessageBox::warning(
this,
"Parameter editor",
439 QString(
"Parameter class ") + parclass +
" not known to gui");
442 TString foldname, parname;
450 QMessageBox::warning(
this,
"Parameter editor",
451 QString(
"Can not crate parameter object of class ") + parclass);
455 QFileDialog fd(
this, QString(
"Save ") +
fItemName +
" in root file",
456 QString(),
"ROOT (*.root);;ROOT XML (*.xml)");
457 fd.setFileMode( QFileDialog::AnyFile);
458 fd.setAcceptMode(QFileDialog::AcceptSave);
459 fd.selectFile(
"file.root");
460 if (fd.exec() != QDialog::Accepted)
return;
462 QStringList flst = fd.selectedFiles();
463 if (flst.isEmpty())
return;
465 TFile *f = TFile::Open(flst[0].toLatin1().constData(),
"UPDATE");
467 f->WriteTObject(par, par->GetName(),
"WriteDelete");
484 TString foldname, parname;
488 if (!parclass)
return;
496 PleaseUpdateLabel->setVisible(
false);
const char * ItemClassName(const char *name)
TGo4ServerProxy * DefineServerObject(const char *itemname, TString *objname=nullptr, Bool_t onlyanalysis=kTRUE)
void RequestObjectStatus(const char *name, TGo4Slot *tgtslot)
Central class of Go4Fit package.
const char * GetObjectClass() const
ClassName of the described object.
void linkedObjectUpdated(const char *linkname, TObject *obj) override
virtual void GetFitterFromEditor()
TGo4ParaEdit(QWidget *parent=nullptr, const char *name=nullptr)
bool IsAcceptDrag(const char *itemname, TClass *cl, int kind) override
virtual void TableContextMenu(const QPoint &)
virtual void ChangedTable(int row, int col)
virtual void clearTextFields()
void DropItem(const char *itemname, TClass *cl, int kind) override
virtual void ApplyClicked()
virtual void TableDoubleClick(int row, int col)
virtual void RefreshClicked()
virtual void DecArrayIndex()
virtual void RefreshWidget(TGo4Parameter *par)
virtual void ExpandShrinkArray()
void linkedObjectRemoved(const char *linkname) override
void ResetWidget() override
virtual void IncArrayIndex()
virtual void EditFitter()
virtual void ShowVisibleItems()
virtual void WorkWithParameter(const char *itemname, bool isrefresh)
const char * GetTypeName() const
const char * GetFullName(TString &buf) const
Int_t GetMemberId() const
void SetObject(TObject *obj, Bool_t owner)
const char * GetStrValue() const
Bool_t IsArrayItem() const
void SetVisible(Bool_t on=kTRUE)
TObject * GetObject() const
void SetStrValue(const char *value)
Bool_t IsFitterItem() const
Bool_t CanStrEdit() const
Status object for an analysis parameter.
TGo4Parameter * CreateParameter()
TObjArray * GetMemberValues(Bool_t takeit=kFALSE)
Base class for all parameter aggregations, e.g.
void GetMemberValues(TObjArray *fItems)
special base class for remote data servers like DABC, HTTP, hist server
virtual Bool_t CanSubmitObjects() const
static void ProduceFolderAndName(const char *fullname, TString &foldername, TString &objectname)
Bool_t AssignObject(TObject *obj, Bool_t owner)