00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "TGo4AnalysisConfiguration.h"
00015
00016 #include <QFileDialog>
00017 #include "TClass.h"
00018 #include "TGo4ConfigStep.h"
00019 #include "TGo4AnalysisStatus.h"
00020 #include "TGo4AnalysisStepStatus.h"
00021 #include "TGo4AnalysisProxy.h"
00022
00023
00024 TGo4AnalysisConfiguration::TGo4AnalysisConfiguration(QWidget *parent, const char* name) :
00025 QGo4Widget(parent, name)
00026 {
00027 setupUi(this);
00028
00029 fSourcePath = ".";
00030 fStorePath = ".";
00031 fConfigPath = ".";
00032 fAutoSavePath = ".";
00033 fbTypingMode = true;
00034 setCanDestroyWidget(false);
00035 }
00036
00037
00038 bool TGo4AnalysisConfiguration::IsAcceptDrag(const char* itemname, TClass* cl, int kind)
00039 {
00040 return false;
00041
00042
00043 }
00044
00045 void TGo4AnalysisConfiguration::DropItem(const char* itemname, TClass* cl, int kind)
00046 {
00047
00048
00049
00050
00051 }
00052
00053 void TGo4AnalysisConfiguration::linkedObjectUpdated(const char* linkname, TObject* obj)
00054 {
00055 if (strcmp(linkname,"Status")==0) {
00056 parentWidget()->raise();
00057 parentWidget()->show();
00058 if (parentWidget()->isMinimized()) parentWidget()->showNormal();
00059 RefreshWidget();
00060
00061 TGo4AnalysisProxy* anal =
00062 dynamic_cast<TGo4AnalysisProxy*>(GetLinked("Analysis", 0));
00063 if (anal!=0)
00064 anal->RefreshNamesList();
00065 }
00066 }
00067
00068 void TGo4AnalysisConfiguration::linkedObjectRemoved(const char* linkname)
00069 {
00070 ShootCloseWidget(true);
00071 }
00072
00073 void TGo4AnalysisConfiguration::WorkWithAnalysis(TGo4AnalysisProxy* anal)
00074 {
00075 ResetWidget();
00076 if (anal==0) {
00077 ShootCloseWidget(true);
00078 return;
00079 }
00080
00081 AddLink(anal->ParentSlot(), "Analysis");
00082 AddLink(anal->SettingsSlot(), "Status");
00083 RefreshWidget();
00084 }
00085
00086 void TGo4AnalysisConfiguration::ResetWidget()
00087 {
00088 QGo4Widget::ResetWidget();
00089
00090 QWidget* w = 0;
00091 do {
00092 w = TabSteps->currentWidget();
00093 if (w!=0) {
00094 TabSteps->removeTab(TabSteps->indexOf(w));
00095 delete w;
00096 }
00097 } while (w!=0);
00098 }
00099
00100 void TGo4AnalysisConfiguration::RefreshWidget()
00101 {
00102 TGo4AnalysisStatus* status =
00103 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00104 if (status==0) return;
00105
00106 fbTypingMode = false;
00107
00108 QWidget* w = 0;
00109 do {
00110 w = TabSteps->currentWidget();
00111 if (w!=0) {
00112 TabSteps->removeTab(TabSteps->indexOf(w));
00113 delete w;
00114 }
00115 } while (w!=0);
00116
00117 for(int i=0; i<status->GetNumberOfSteps(); i++) {
00118 TGo4AnalysisStepStatus* stepstatus = status->GetStepStatus(i);
00119 if (stepstatus==0) continue;
00120 QString StepName = stepstatus->GetName();
00121 TGo4ConfigStep* NewStep = new TGo4ConfigStep(TabSteps, StepName.toLatin1().constData());
00122 NewStep->SetStepStatus(this, stepstatus, status->GetNumberOfSteps() > 1 ? i : -1);
00123 TabSteps->insertTab(i, NewStep, NewStep->GetTabTitle());
00124 }
00125
00126 TabSteps->setCurrentIndex(0);
00127 TabSteps->adjustSize();
00128
00129 SetAutoSaveConfig(status->GetAutoFileName(),
00130 status->GetAutoSaveInterval(),
00131 status->GetAutoSaveCompression(),
00132 status->IsAutoSaveOn(),
00133 status->IsAutoSaveOverwrite());
00134
00135 SetAnalysisConfigFile(status->GetConfigFileName());
00136
00137 parentWidget()->showNormal();
00138 parentWidget()->adjustSize();
00139
00140 fbTypingMode = true;
00141 }
00142
00143 void TGo4AnalysisConfiguration::ChangeTabTitle(TGo4ConfigStep* step, int number)
00144 {
00145 if (number>=0)
00146 TabSteps->setTabText(number, step->GetTabTitle());
00147 }
00148
00149
00150 QString TGo4AnalysisConfiguration::GetSourcePath()
00151 {
00152 return fSourcePath;
00153 }
00154
00155 QString TGo4AnalysisConfiguration::GetStorePath()
00156 {
00157 return fStorePath;
00158 }
00159
00160 void TGo4AnalysisConfiguration::SetSourcePath(const QString & v)
00161 {
00162 fSourcePath = v;
00163 }
00164
00165 void TGo4AnalysisConfiguration::SetStorePath(const QString & v)
00166 {
00167 fStorePath = v;
00168 }
00169
00170 void TGo4AnalysisConfiguration::RequestAnalysisStatus()
00171 {
00172 TGo4AnalysisProxy* anal =
00173 dynamic_cast<TGo4AnalysisProxy*>(GetLinked("Analysis", 0));
00174 if (anal!=0)
00175 anal->RequestAnalysisSettings();
00176 }
00177
00178 void TGo4AnalysisConfiguration::FileDialog_ConfFile()
00179 {
00180 QFileDialog fd(this,
00181 "Select a configuration file",
00182 fConfigPath,
00183 " Configuration file (*.root)");
00184 fd.setFileMode( QFileDialog::AnyFile);
00185 if (fd.exec() != QDialog::Accepted) return;
00186 QStringList flst = fd.selectedFiles();
00187 QString fileName = flst.isEmpty() ? QString() : flst[0];
00188 fConfigPath = fd.directory().path();
00189 if(!fileName.endsWith(".root")) fileName.append(".root");
00190 ConfigFileName->setText(fileName);
00191 }
00192
00193 void TGo4AnalysisConfiguration::FileDialog_AutoSave()
00194 {
00195 QFileDialog fd( this,
00196 "Select file name for autosaving",
00197 fAutoSavePath,
00198 "Auto Save File (*.root)");
00199 fd.setFileMode(QFileDialog::AnyFile);
00200 fd.setAcceptMode(QFileDialog::AcceptSave);
00201 if (fd.exec() != QDialog::Accepted) return;
00202
00203 QStringList flst = fd.selectedFiles();
00204 if (flst.isEmpty()) return;
00205
00206 QString fileName = flst[0];
00207 fAutoSavePath = fd.directory().path();
00208 if(!fileName.endsWith(".root")) fileName.append(".root");
00209 AutoSaveFileName->setText(fileName);
00210 LineEdit_AutoSaveFile();
00211 }
00212
00213 void TGo4AnalysisConfiguration::LineEdit_AutoSaveFile()
00214 {
00215 QString fname = AutoSaveFileName->text().trimmed();
00216 TGo4AnalysisStatus* status =
00217 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00218 if ((status!=0) && fbTypingMode)
00219 status->SetAutoFileName(fname.toLatin1().constData());
00220 }
00221
00222 void TGo4AnalysisConfiguration::SetCompressionLevel( int t)
00223 {
00224 TGo4AnalysisStatus* status =
00225 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00226 if ((status!=0) && fbTypingMode)
00227 status->SetAutoSaveCompression(t);
00228 }
00229
00230 void TGo4AnalysisConfiguration::LoadConfiguration()
00231 {
00232 QString fname = ConfigFileName->text().trimmed();
00233 TGo4AnalysisProxy* anal =
00234 dynamic_cast<TGo4AnalysisProxy*>(GetLinked("Analysis", 0));
00235 if (anal!=0)
00236 anal->LoadConfigFile(fname.toLatin1().constData());
00237 RequestAnalysisStatus();
00238 }
00239
00240 void TGo4AnalysisConfiguration::SaveConfiguration()
00241 {
00242 QString fname = ConfigFileName->text().trimmed();
00243 TGo4AnalysisProxy* anal =
00244 dynamic_cast<TGo4AnalysisProxy*>(GetLinked("Analysis", 0));
00245 if (anal!=0)
00246 anal->SaveConfigFile(fname.toLatin1().constData());
00247 }
00248
00249 void TGo4AnalysisConfiguration::SubmitConfiguration()
00250 {
00251 ServiceCall("SubmitAnalysisSettings");
00252 }
00253
00254 void TGo4AnalysisConfiguration::SubmitAndStart()
00255 {
00256 ServiceCall("SubmitStartAnalysis");
00257 parentWidget()->hide();
00258 }
00259
00260 void TGo4AnalysisConfiguration::CloseAnalysis()
00261 {
00262 ServiceCall("CloseAnalysisSettings");
00263 }
00264
00265 void TGo4AnalysisConfiguration::SetAutoSaveInterval(int t)
00266 {
00267 TGo4AnalysisStatus* status =
00268 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00269 if ((status!=0) && fbTypingMode)
00270 status->SetAutoSaveInterval(t);
00271 }
00272
00273 void TGo4AnalysisConfiguration::SetAutoSaveOverwrite(bool overwrite)
00274 {
00275 TGo4AnalysisStatus* status =
00276 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00277 if ((status!=0) && fbTypingMode)
00278 status->SetAutoSaveOverwrite(overwrite);
00279 }
00280
00281 void TGo4AnalysisConfiguration::WriteAutoSave()
00282 {
00283 TGo4AnalysisStatus* status =
00284 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00285 TGo4AnalysisProxy* anal =
00286 dynamic_cast<TGo4AnalysisProxy*>(GetLinked("Analysis", 0));
00287
00288 if ((anal!=0) && (status!=0))
00289 anal->WriteAutoSave(status->GetAutoFileName(),
00290 status->GetAutoSaveCompression(),
00291 status->IsAutoSaveOverwrite());
00292 }
00293
00294 void TGo4AnalysisConfiguration::EnableAutoSaveSlot(bool enabled)
00295 {
00296 TGo4AnalysisStatus* status =
00297 dynamic_cast<TGo4AnalysisStatus*> (GetLinked("Status",0));
00298 if ((status!=0) && fbTypingMode)
00299 status->SetAutoSaveOn(enabled);
00300 AutoSaveInterval->setEnabled(enabled);
00301 }
00302
00303 int TGo4AnalysisConfiguration::GetNumSteps()
00304 {
00305 return TabSteps->count();
00306 }
00307
00308 TGo4ConfigStep* TGo4AnalysisConfiguration::GetStepConfig(int n)
00309 {
00310 if ((n<0) || (n>=TabSteps->count())) return 0;
00311 return dynamic_cast<TGo4ConfigStep*> (TabSteps->widget(n));
00312 }
00313
00314 TGo4ConfigStep* TGo4AnalysisConfiguration::FindStepConfig(QString name)
00315 {
00316 for (int n=0;n<GetNumSteps();n++) {
00317 TGo4ConfigStep* conf = GetStepConfig(n);
00318 if (conf!=0)
00319 if (conf->GetStepName()==name) return conf;
00320 }
00321 return 0;
00322 }
00323
00324 void TGo4AnalysisConfiguration::SetAutoSaveConfig(QString filename,
00325 int interval,
00326 int compression,
00327 bool enabled,
00328 bool overwrite)
00329 {
00330 AutoSaveFileName->setText(filename);
00331 AutoSaveInterval->setValue(interval);
00332 CompLevel->setValue(compression);
00333
00334 AutoSaveOverwrite->setChecked(overwrite);
00335 AutoSaveEnable->setChecked(enabled);
00336
00337 AutoSaveInterval->setEnabled(enabled);
00338 }
00339
00340 void TGo4AnalysisConfiguration::GetAutoSaveConfig(QString& filename,
00341 int& interval,
00342 int& compression,
00343 bool& enabled,
00344 bool& overwrite)
00345 {
00346 filename = AutoSaveFileName->text();
00347 interval = AutoSaveInterval->value();
00348 compression = CompLevel->value();
00349
00350 overwrite = AutoSaveOverwrite->isChecked();
00351 enabled = AutoSaveEnable->isChecked();
00352 }
00353
00354 void TGo4AnalysisConfiguration::SetAnalysisConfigFile(QString filename)
00355 {
00356 ConfigFileName->setText(filename);
00357 }
00358
00359 void TGo4AnalysisConfiguration::GetAnalysisConfigFile(QString& filename)
00360 {
00361 filename = ConfigFileName->text();
00362 }
00363
00364 void TGo4AnalysisConfiguration::DisplayMbsMonitor(const QString& mbsname )
00365 {
00366 ServiceCall("DisplayMbsMonitor", (void*) mbsname.toLatin1().constData());
00367 }