19 #include "qclipboard.h"
20 #include "qstylefactory.h"
21 #include "qfileinfo.h"
23 #include <QtCore/QString>
24 #include <QtCore/QDateTime>
25 #include <QtCore/QTimer>
26 #include <QtCore/QProcess>
27 #include <QtCore/QHash>
28 #include <QtCore/QSignalMapper>
29 #include <QtCore/QDir>
31 #include <QApplication>
33 #include <QDockWidget>
41 #include <QToolButton>
42 #include <QMessageBox>
43 #include <QColorDialog>
44 #include <QFileDialog>
45 #include <QFontDialog>
46 #include <QInputDialog>
47 #include <QMdiSubWindow>
49 #include <QDesktopServices>
54 #include "Riostream.h"
70 #include "TGo4LockGuard.h"
148 setWindowIcon(QIcon(
":/icons/go4logo2_big.png"));
187 TH1I* h1 =
new TH1I(
"histo1",
"histo title", 100, -10., 10.);
188 h1->FillRandom(
"gaus",10000);
202 gStyle->SetPalette(1);
203 gStyle->SetCanvasColor(10);
204 gStyle->SetPadColor(10);
205 gStyle->SetFrameFillColor(10);
206 gStyle->SetStatColor(0);
212 fxMdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
213 fxMdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
228 QDockWidget* BrowserDockWin =
new QDockWidget(
"Browser",
this);
229 BrowserDockWin->setObjectName(
"BrowserDock");
230 TGo4Browser* browser =
new TGo4Browser(BrowserDockWin,
"Browser");
231 browser->setWindowFlags(Qt::Widget);
233 browser->StartWorking();
234 BrowserDockWin->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
235 BrowserDockWin->setWidget(browser);
236 BrowserDockWin->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
237 addDockWidget(Qt::LeftDockWidgetArea, BrowserDockWin);
239 QAction* BrowserDockAction=BrowserDockWin->toggleViewAction();
240 BrowserDockAction->setShortcut(QKeySequence(
"F6"));
243 #if (QT_VERSION >= 0x040700) && (QT_VERSION <= 0x040909)
244 browser->setMinimumWidth(230);
247 QDockWidget* LogDockWin =
new QDockWidget(
"Log window",
this);
248 LogDockWin->setObjectName(
"LogInfoDock");
249 TGo4LogInfo* loginfo =
new TGo4LogInfo(
this,
"LogInfo");
251 LogDockWin->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
252 LogDockWin->setWidget(loginfo);
253 LogDockWin->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
254 addDockWidget(Qt::BottomDockWidgetArea, LogDockWin);
256 QAction* LogDockWinAction=LogDockWin->toggleViewAction();
257 LogDockWinAction->setShortcut(QKeySequence(
"F7"));
259 QDockWidget* MBSDockWin =
new QDockWidget(
"MBS monitor",
this);
260 MBSDockWin->setObjectName(
"MbsViewerDock");
261 TGo4MBSViewer* mbs =
new TGo4MBSViewer(MBSDockWin,
"MBSViewer");
262 mbs->setWindowFlags(Qt::Widget);
264 MBSDockWin->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
265 MBSDockWin->setWidget(mbs);
266 MBSDockWin->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
267 addDockWidget(Qt::BottomDockWidgetArea, MBSDockWin);
269 QAction* MBSDockAction=MBSDockWin->toggleViewAction();
270 MBSDockAction->setShortcut(QKeySequence(
"F8"));
274 QDockWidget* DABCDockWin =
new QDockWidget(
"DABC monitor",
this);
275 DABCDockWin->setObjectName(
"DABCMonitorDock");
276 TGo4DabcMonitor*
dabc =
new TGo4DabcMonitor(DABCDockWin,
"DabcMonitor");
277 dabc->setWindowFlags(Qt::Widget);
279 DABCDockWin->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
280 DABCDockWin->setWidget(dabc);
281 DABCDockWin->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
282 addDockWidget(Qt::BottomDockWidgetArea, DABCDockWin);
283 QAction* DABCDockWinAction=DABCDockWin->toggleViewAction();
284 DABCDockWinAction->setShortcut(QKeySequence(
"F9"));
289 QToolBar* DividePanelBar = addToolBar(
"Canvas Tools");
290 DividePanelBar->setObjectName(
"DividePadDock");
291 TGo4DividePad* dividepanel =
new TGo4DividePad(
this,
"DividePad");
292 DividePanelBar->addWidget(dividepanel);
294 QToolBar* stylebar = addToolBar(
"Color Tools");
295 stylebar->setObjectName(
"Go4StyleDock");
296 fxStyle =
new TGo4Style(
this,
"Go4Style");
299 QToolBar* BrowserOptionsPanel = addToolBar(
"Browser Options");
300 BrowserOptionsPanel->setObjectName(
"BrowserOptionsDock");
301 TGo4BrowserOptions* bropt =
new TGo4BrowserOptions(
this,
"BrowserOptions");
303 BrowserOptionsPanel->addWidget(bropt);
304 bropt->StartWorking();
306 QToolBar* DrawOptionPanel = addToolBar(
"Draw Options");
307 DrawOptionPanel->setObjectName(
"DrawOptionsDock");
308 TGo4HisDrawOptions* drawopt =
new TGo4HisDrawOptions(
this,
"DrawOptions");
309 DrawOptionPanel->addWidget(drawopt);
310 DrawOptionPanel->adjustSize();
312 QToolBar* DrawOptionShortPanel = addToolBar(
"Hist Draw Options");
313 DrawOptionShortPanel->setObjectName(
"HisDrawOptionsDock");
314 TGo4HisDrawOptionsShort* drawopts =
new TGo4HisDrawOptionsShort(
this,
"HisDrawOptions");
315 DrawOptionShortPanel->addWidget(drawopts);
316 DrawOptionShortPanel->adjustSize();
318 QToolBar* ScaleOptionBar = addToolBar(
"Zoom Tools");
319 ScaleOptionBar->setObjectName(
"ScaleOptionsDock");
320 TGo4ScaleOptions* scopt =
new TGo4ScaleOptions(
this,
"ScaleOptions");
322 ScaleOptionBar->addWidget(scopt);
323 ScaleOptionBar->adjustSize();
325 QToolBar* commandlinebar = addToolBar(
"Go4 Command Line");
326 commandlinebar->setObjectName(
"CommandLineDock");
327 TGo4CommandLine* cli =
new TGo4CommandLine(
this,
"CommandLine");
329 commandlinebar->addWidget(cli);
331 QToolBar* tviewerdock = addToolBar(
"Tree viewer");
332 tviewerdock->setObjectName(
"TreeViewerDock");
333 TGo4TreeViewer* tviewer =
new TGo4TreeViewer(
this,
"TreeViewer");
335 tviewerdock->addWidget(tviewer);
355 menuBar()->addSeparator();
357 QMenu* helpMenu = menuBar()->addMenu(
"&Help");
358 helpMenu->addAction(
"&Introduction (user manual)",
this, SLOT(
IntroHelpSlot()), Key_F1);
359 helpMenu->addAction(
"&Reference manual",
this, SLOT(
RefHelpSlot()));
360 helpMenu->addAction(
"&Fit Tutorial",
this, SLOT(
FitHelpSlot()));
361 helpMenu->addSeparator();
362 helpMenu->addAction(
"About &Qt",
this, SLOT(
aboutQt()), Key_F2 );
363 helpMenu->addAction(
"About R&OOT",
this, SLOT(
aboutROOT()), Key_F3);
365 helpMenu->addAction(
"About &DABC",
this, SLOT(
aboutDABC()));
366 helpMenu->addAction(
"About &Go4",
this, SLOT(
about()), Key_F4);
368 const char* libs = gSystem->Getenv(
"GO4USERLIBRARY");
371 QStringList LibList = QString(libs).split(
":",QString::SkipEmptyParts);
373 for (QStringList::Iterator it=LibList.begin(); it!=LibList.end(); ++it)
374 gSystem->Load((*it).toLatin1().constData());
393 statusBar()->showMessage(
"Ready");
394 statusBar()->setSizeGripEnabled(
true);
397 if (!sfmt.isEmpty()) gStyle->SetStatFormat(sfmt.toLatin1().constData());
415 QString GO4STR(
"Go4 ");
417 QString GO4STR1 = GO4STR;
418 GO4STR1.append(
"<br>");
419 GO4STR1.append(
"The Go4 (GSI Object Oriented On-line Off-line system) is based on ROOT<br> with the specific requirements of the low and medium energy nuclear and atomic<br> physics experiments implemented as extensions.<br> See <a href='http://go4.gsi.de'>http://go4.gsi.de</a> for more information") ;
421 QMessageBox AboutGo4(GO4STR, GO4STR1, QMessageBox::NoIcon,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton ,
this);
422 AboutGo4.setIconPixmap(QPixmap(
":/icons/go4logo2_big.png"));
423 AboutGo4.setTextFormat(Qt::RichText);
429 QMessageBox::aboutQt(
this,
"Qt");
434 QString mestring(
"This Go4 uses ROOT ");
435 mestring.append(gROOT->GetVersion());
436 mestring.append(
"<br> ROOT is an object-oriented framework <br>for large scale scientific <br>data analysis and data mining.<br> It has been developed at CERN<br> See <a href='http://root.cern.ch'>http://root.cern.ch</a> for more information");
437 QMessageBox AboutRoot(
"ROOT", mestring,
438 QMessageBox::NoIcon,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton ,
this);
439 AboutRoot.setIconPixmap(QPixmap(
":/icons/root.png"));
440 AboutRoot.setTextFormat(Qt::RichText);
446 QString mestring(
"This Go4 uses DABC ");
450 mestring.append(
"<undef>");
451 mestring.append(
"<br>DABC (Data Acquisition Backbone Core) is <br> framework to build multi-threaded multi-node DAQ applications.<br> It is developed in GSI.<br> See <a href='http://dabc.gsi.de'>http://dabc.gsi.de</a> for more information");
452 QMessageBox AboutDabc(
"DABC", mestring,
453 QMessageBox::NoIcon,QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton ,
this);
454 AboutDabc.setIconPixmap(QPixmap(
":/icons/dabc.png"));
455 AboutDabc.setTextFormat(Qt::RichText);
463 QMenu* settMenu = menuBar()->addMenu(
"&Settings");
465 QMenu* sub = createPopupMenu();
466 sub->setTitle(
"Sh&ow/hide");
467 settMenu->addMenu(sub);
471 QMenu *style = settMenu->addMenu(
"St&yle");
473 QMenu* prefMenu = settMenu->addMenu(
"&Preferences");
493 #if QT_VERSION >= QT_VERSION_CHECK(5,6,0)
494 prefMenu->addAction(
"GUI HighDPI Scale factor...",
this, SLOT(
ScaleFactorSlot()));
497 QMenu* panelMenu = settMenu->addMenu(
"&Panel defaults");
499 panelMenu->addAction(
"&Canvas color...",
this, SLOT(
CanvasColorSlot()));
505 panelMenu->addAction(
"Statistics box...",
this, SLOT(
OptStatsSlot()));
535 panelMenu->addAction(
"TH1 draw opt ...",
this, SLOT(
TH1DrawOptSlot()));
536 panelMenu->addAction(
"TH2 draw opt ...",
this, SLOT(
TH2DrawOptSlot()));
537 panelMenu->addAction(
"TH3 draw opt ...",
this, SLOT(
TH3DrawOptSlot()));
546 QMenu* termMenu = settMenu->addMenu(
"&Terminal");
555 settMenu->addAction(
"&Break hotstart execution",
this, SLOT(
StopGUIScriptSlot()));
560 QActionGroup *ag =
new QActionGroup(
this);
561 ag->setExclusive(
true );
562 QSignalMapper *styleMapper =
new QSignalMapper(
this );
563 connect(styleMapper, SIGNAL(mapped(
const QString&)),
this, SLOT(
SetStyleSlot(
const QString&)));
565 QStringList list = QStyleFactory::keys();
567 QHash<QString, int> stylesDict;
568 for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
569 QString styleStr = *it;
570 QString styleAccel = styleStr;
571 if ( stylesDict[styleAccel.left(1)] ) {
572 for ( uint i = 0; i < styleAccel.length(); i++ ) {
573 if ( !stylesDict[styleAccel.mid( i, 1 )] ) {
574 stylesDict.insert(styleAccel.mid( i, 1 ), 1);
575 styleAccel = styleAccel.insert( i,
'&' );
580 stylesDict.insert(styleAccel.left(1), 1);
581 styleAccel =
"&"+styleAccel;
583 QAction *act =
new QAction(styleAccel,
this);
584 act->setCheckable(
true);
586 act->setChecked(
true);
588 connect( act, SIGNAL(triggered()), styleMapper, SLOT(map()) );
589 styleMapper->setMapping(act, styleStr);
592 style->addAction(act);
598 QMenu* fileMenu = menuBar()->addMenu(
"&File");
600 fileMenu->addAction(QIcon(
":/icons/open.png" ),
"&Open...",
602 fileMenu->addAction(QIcon(
":/icons/network.png" ),
"Open &Remote...",
605 fileMenu->addAction(QIcon(
":/icons/dabc.png" ),
"Connect &DABC...",
607 fileMenu->addAction(QIcon(
":/icons/http.png" ),
"Connect &HTTP...",
609 fileMenu->addAction(QIcon(
":/icons/histserv.png" ),
"Open HIST &Server...",
611 fileMenu->addAction(QIcon(
":/icons/filesave.png" ),
"Save memor&y...",
613 fileMenu->addAction(QIcon(
":/icons/close.png" ),
"Close all files",
615 fileMenu->addAction(QIcon(
":/icons/exit.png" ),
"E&xit",
616 this, SLOT(close()), CTRL+Key_X );
621 QToolBar *FileBar = addToolBar(
"File Toolbar" );
622 FileBar->setObjectName(
"FileToolBar");
624 FileBar->addAction( QIcon(
":/icons/open.png" ),
"Open a local file from disk",
627 FileBar->addAction( QIcon(
":/icons/network.png" ),
"Open a remote file from server",
631 FileBar->addAction( QIcon(
":/icons/dabc.png" ),
"Connect to DABC server",
634 FileBar->addAction( QIcon(
":/icons/http.png" ),
"Connect to HTTP server",
637 FileBar->addAction( QIcon(
":/icons/histserv.png" ),
"Connect to running histogram server",
640 FileBar->addAction( QIcon(
":/icons/filesave.png" ),
"Save the content of the browser to a root file",
643 FileBar->addAction( QIcon(
":/icons/close.png" ),
"Close all root files in file browser",
646 FileBar->addAction( QIcon(
":/icons/exit.png" ),
"Exit the Go4",
647 this, SLOT(close()));
652 QMenu* toolMenu = menuBar()->addMenu(
"&Tools");
654 toolMenu->addAction(QIcon(
":/icons/chart.png" ),
"&View panel",
656 toolMenu->addAction(QIcon(
":/icons/fitpanel.png" ),
"&Fit panel...",
658 toolMenu->addAction(QIcon(
":/icons/hislist.png" ),
"&Histogram properties...",
660 toolMenu->addAction(QIcon(
":/icons/hiscre.png" ),
"Create New H&istogram...",
662 toolMenu->addAction(QIcon(
":/icons/condlist.png" ),
"C&ondition properties...",
664 toolMenu->addAction(QIcon(
":/icons/condcre.png" ),
"Create new &condition...",
666 toolMenu->addAction(QIcon(
":/icons/zoom.png" ),
"&Event printout...",
668 toolMenu->addAction(QIcon(
":/icons/dynlist.png" ),
"Create &dyn. list entry ...",
670 toolMenu->addAction(QIcon(
":/icons/dllicon.png" ),
"Load li&braries ...",
672 toolMenu->addAction(QIcon(
":/icons/user.png" ),
"&User GUI ...",
678 QToolBar *ToolBar = addToolBar(
"Go4 tools");
679 ToolBar->setObjectName(
"Go4ToolsBar");
681 ToolBar->addAction( QIcon(
":/icons/chart.png" ),
"Create a new view panel",
684 ToolBar->addAction( QIcon(
":/icons/fitpanel.png" ),
"Show/hide the Go4 Fit Panel",
687 ToolBar->addAction( QIcon(
":/icons/hislist.png" ),
"Show histogram properties window",
690 ToolBar->addAction( QIcon(
":/icons/hiscre.png" ),
"Create new ROOT Histogram",
693 ToolBar->addAction( QIcon(
":/icons/condlist.png" ),
"Show condition properties window",
696 ToolBar->addAction( QIcon(
":/icons/condcre.png" ),
"Create new condition in analysis",
699 ToolBar->addAction( QIcon(
":/icons/zoom.png" ),
"Event printout and examination window",
702 ToolBar->addAction( QIcon(
":/icons/dynlist.png" ),
"Create new Dynamic list entry",
705 ToolBar->addAction( QIcon(
":/icons/dllicon.png" ),
"Load Libraries",
708 ToolBar->addAction( QIcon(
":/icons/user.png" ),
"Start user panel",
714 QMenu* anMenu = menuBar()->addMenu(
"&Analysis");
717 anMenu->addAction(QIcon(
":/icons/launchanal.png" ),
"Lau&nch analysis...",
720 anMenu->addAction(QIcon(
":/icons/connect.png"),
"&Connect to running server...",
724 anMenu->addAction(QIcon(
":/icons/connect.png" ),
"&Prepare for client connection...",
728 anMenu->addAction(QIcon(
":/icons/disconnect.png"),
"Disconnect from analysis",
732 anMenu->addAction(QIcon(
":/icons/shutanal.png"),
"Shutdown analysis",
736 anMenu->addAction(QIcon(
":/icons/restart.png"),
"Submit+S&tart",
740 anMenu->addAction(QIcon(
":/icons/start.png"),
"&Start",
744 anMenu->addAction(QIcon(
":/icons/Stop.png"),
"Stop (&Halt)",
748 anMenu->addAction(QIcon(
":/icons/control.png"),
"Confi&guration...",
752 anMenu->addAction(QIcon(
":/icons/analysiswin.png"),
"Analysis &Window",
758 QToolBar *AnalBar = addToolBar(
"Analysis Toolbar");
759 AnalBar->setObjectName(
"AnalysisToolBar");
760 AnalBar->setToolTip(
"Analysis related tool buttons");
780 bool on = !
fxMdiArea->subWindowList().isEmpty();
794 windowsMenu->addAction(
"Save L&ogwindow", loginfo, SLOT(SaveLogInfo()));
795 windowsMenu->addAction(
"Clear &Logwindow", loginfo, SLOT(ClearLogInfo()));
797 windowsMenu->addAction(
"Save L&ogwindow")->setEnabled(
false);
798 windowsMenu->addAction(
"Clear &Logwindow")->setEnabled(
false);
803 windowsMenu->addAction(
"Save &Analysis window", anw, SLOT(SaveAnalysisOutput()));
804 windowsMenu->addAction(
"Clear Analysis &window", anw, SLOT(ClearAnalysisOutput()));
806 windowsMenu->addAction(
"Save &Analysis window")->setEnabled(
false);
807 windowsMenu->addAction(
"Clear Analysis &window")->setEnabled(
false);
816 QList<QMdiSubWindow *> windows =
fxMdiArea->subWindowList();
817 for (
int i=0; i< windows.count(); i++ ) {
818 QAction* act =
new QAction(windows.at(i)->widget()->windowTitle(),
winMapper);
819 act->setCheckable(
true);
820 act->setChecked(
fxMdiArea->activeSubWindow() == windows.at(i));
824 connect(act, SIGNAL(triggered()),
winMapper, SLOT(map()) );
831 QList<QMdiSubWindow *> windows =
fxMdiArea->subWindowList();
832 for (
int i = 0; i < windows.count(); i++ )
833 windows.at(i)->widget()->showMinimized();
838 QList<QMdiSubWindow *> windows =
fxMdiArea->subWindowList();
842 for (
int i = 0; i < windows.count(); i++ ) {
843 windows.at(i)->move(x, y);
852 else showFullScreen();
859 QList<QMdiSubWindow *> windows =
fxMdiArea->subWindowList();
860 if ((
id>=0) && (
id<windows.count())) {
861 windows.at(
id)->widget()->showNormal();
862 windows.at(
id)->widget()->setFocus();
866 typedef void* (*TStartUserGuiFunc)(QWidget* parent);
870 QString dirname, libname;
874 if ((usergui!=0) && (strlen(usergui)>0)) {
875 QFileInfo info(usergui);
878 dirname = info.path();
879 libname = info.fileName();
885 if ((dirname.length()>0) && (dirname[dirname.length()-1]!=
'/')) dirname+=
"/";
888 bool defaultnames = libname.length()==0;
890 libname =
"libGo4UserGui";
894 libname = dirname + libname;
896 std::cout <<
"Try usergui: " << libname.toLatin1().constData() << std::endl;
900 if (gSystem->Load(libname.toLatin1().constData())>=0) {
902 startfunc = (
TStartUserGuiFunc) gSystem->DynFindSymbol(libname.toLatin1().constData(),
"StartUserPanel");
908 userpanel->setObjectName(
"UserPanel");
913 userpanel->ensurePolished();
917 StatusMessage(
"StartUserPanel() function did not create user widget");
921 std::cout <<
"Start user GUI from ";
922 if (dirname.length()>0)
923 std::cout << dirname.toLatin1().constData() << std::endl;
925 std::cout <<
"$LD_LIBRARY_PATH=" << gSystem->Getenv(
"LD_LIBRARY_PATH") << std::endl;
927 if (loaded) gSystem->Unload(libname.toLatin1().constData());
936 if (userpanel!=0)
return;
939 if (gSystem->Getenv(
"GO4USERGUI")!=0)
940 if (
startUserGUI(gSystem->Getenv(
"GO4USERGUI")))
return;
947 QMessageBox::critical(
this,
"Starting user GUI",
"No suitable libraries found");
960 name = QString(
"Panel") + QString::number(n);
961 }
while ((edslot!=0) && (edslot->
FindChild(name.toLatin1().constData())!=0));
963 TGo4ViewPanel* panel =
new TGo4ViewPanel(
fxMdiArea, name.toLatin1().constData());
975 panel->ensurePolished();
976 panel->CompleteInitialization();
980 int DivX(1), DivY(1);
982 TGo4DividePad* divpad = findChild<TGo4DividePad*>(
"DividePad");
985 DivX = divpad->SpinBoxX->value();
986 DivY = divpad->SpinBoxY->value();
988 if (DivX * DivY < ndiv) {
989 DivX = (int) TMath::Sqrt(ndiv*1.);
991 while (DivX*DivY<ndiv) DivY++;
993 panel->Divide(DivX, DivY);
1006 if (newx + sub->width() >
fxMdiArea->width()) newx = 0;
1007 if (newy + sub->height() >
fxMdiArea->height()) newy = 0;
1008 sub->move(newx, newy);
1019 if(QMessageBox::question(
this,
"Go4 GUI",
"Really Exit Go4?",
1020 QMessageBox::Yes | QMessageBox::No ,
1021 QMessageBox::Yes) != QMessageBox::Yes ) {
1033 bool realshutdown =
false;
1044 statusBar()->showMessage(
"Exit.... please wait");
1045 QApplication::setOverrideCursor(Qt::WaitCursor);
1050 statusBar()->showMessage(
"Closing GUI...");
1063 if (
Browser()->FindServer()!=0) {
1071 QMessageBox box(QMessageBox::Critical,
"Exit GUI",
"Analysis is not (yet) shutdown correctly");
1072 QPushButton *wait_btn = box.addButton(
"Wait 10 s more", QMessageBox::AcceptRole);
1073 QAbstractButton *kill_btn = box.addButton(
"Kill analysis", QMessageBox::DestructiveRole);
1074 QAbstractButton *exit_btn = box.addButton(
"Exit immediately", QMessageBox::DestructiveRole);
1075 QAbstractButton *cancel_btn = box.addButton(
"Cancel quit", QMessageBox::RejectRole);
1076 box.setDefaultButton(wait_btn);
1080 if (box.clickedButton() == wait_btn) {
1086 if ((box.clickedButton() == cancel_btn) || (box.clickedButton() == 0)) {
1087 std::cout <<
"Keep GUI running, press exit once again" << std::endl;
1091 if (box.clickedButton() == kill_btn) {
1092 std::cout <<
"Killing analysis" << std::endl;
1096 if (box.clickedButton() == exit_btn) {
1097 std::cout <<
"GUI closed with analysis still running - may lead to analysis task running forever" << std::endl;
1098 std::cout <<
"Please check running processes with \"ps\" and probably, kill analysis with \"killall go4analysis\" command" << std::endl;
1101 std::cout <<
"----- Exiting Go4 GUI now -----" << std::endl;
1107 QFileDialog fd(
this,
1108 "Select a ROOT file to open it in the Go4 Disk Browser",
1110 QString(
"Root files (*.root);;Root xml files (*.xml);;All files (*.*)"));
1112 fd.setFileMode( QFileDialog::ExistingFiles);
1114 if ( fd.exec() != QDialog::Accepted )
return;
1116 QStringList list = fd.selectedFiles();
1117 QStringList::Iterator it = list.begin();
1118 while( it != list.end() ) {
1119 QString fileName = *it;
1128 TGo4OpenRemoteDialog fd(
this);
1129 if (fd.exec() != QDialog::Accepted)
return;
1131 QString ftype = fd.GetFileType();
1132 QString host = fd.GetServer();
1135 if(ftype.contains(
"root:"))
1136 urlpath =
"root://" + host +
"/";
1138 if (ftype.contains(
"rfio:")) {
1140 urlpath=
"rfio:" + host +
":/";
1144 if (ftype.contains(
"http:")) {
1146 urlpath=
"http://" + host +
"/";
1151 QString fileName = fd.GetFileName();
1153 if(!fileName.isEmpty() && !fileName.contains(
".root"))
1154 fileName.append(
".root");
1156 fileName = urlpath + fileName;
1164 QString dabcnode = QInputDialog::getText(
1165 this,
"Establish connection with DABC",
"Provide dabc server name",
1166 QLineEdit::Normal, QString::null, &ok);
1169 if (!
Browser()->ConnectDabc(dabcnode.toLatin1().constData()))
1170 QMessageBox::warning(0,
"DABC server",
"Cannot connect to DABC server");
1181 httpaddr = QInputDialog::getText(
1182 this,
"Establish connection with HTTP",
"Provide http server name",
1183 QLineEdit::Normal, fulladdress, &ok);
1185 QStringList nameportlist = httpaddr.split(
":");
1188 if(nameportlist.at(0).contains(
"http")) {
1193 if(nameportlist.size()<portindex+1 || nameportlist.at(portindex).isEmpty()){
1194 QMessageBox::warning(0,
"HTTP server connection",
"Could not connect. Please specify port number!");
1197 QString host = nameportlist.at(nameindex);
1198 QStringList hostnamelist = nameportlist.at(nameindex).split(
"//");
1199 if(hostnamelist.size()>1) host = hostnamelist.at(1);
1210 if (!exec)
return 0;
1214 if (serv)
StatusMessage(QString(
"Connect with http server %1 %2").arg(httpaddr).arg(serv->
IsGo4Analysis() ?
" as GO4 analysis" :
""));
1223 TGo4LogInfo* loginfo = (TGo4LogInfo*)
FindGo4Widget(
"LogInfo",
false);
1224 if (loginfo!=0) loginfo->WorkWithInfo(serv->
LoginfoSlot());
1235 TGo4HServerConnection dlg(
this,
"Connect to remote HServer",
true );
1242 if (dlg.exec() != QDialog::Accepted)
return;
1250 dlg.PortNumberSpin->value(),
1251 dlg.BaseName->text().toLatin1().constData(),
1252 dlg.UserPassEdt->text().toLatin1().constData(),
1253 dlg.FilterList->text().toLatin1().constData()))
1254 QMessageBox::warning(0,
"HServer",
"Cannot connect to histogram server");
1259 QFileDialog fd(
this,
1261 "Select root file to fetch and export all browser objects" :
1262 "Select root file to export all local browser objects",
1265 fd.setFileMode( QFileDialog::AnyFile);
1266 fd.setAcceptMode(QFileDialog::AcceptSave);
1267 fd.selectFile(
"export.root");
1269 if (fd.exec() != QDialog::Accepted)
return;
1271 QStringList flst = fd.selectedFiles();
1272 if (flst.isEmpty())
return;
1274 QString fname = flst[0];
1276 if (fname.indexOf(
".root", 0, Qt::CaseInsensitive)<0) fname+=
".root";
1279 QMessageBox::warning(
this,
"Save data to file",
"Specified file can not be created");
1293 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
1294 size = QInputDialog::getInt(
this,
1295 "Analysis terminal history size in bytes (minimum 10000 bytes)",
1296 "Input 0 if full analysis history should be preserved",
1297 size, 0, 100000000, 10000, &ok);
1299 size = QInputDialog::getInteger(
this,
1300 "Analysis terminal history size in bytes (minimum 10000 bytes)",
1301 "Input 0 if full analysis history should be preserved",
1302 size, 0, 100000000, 10000, &ok);
1306 if ((size>0) && (size<10000)) size = 10000;
1318 TGo4LogSettings dlg;
1319 if (dlg.exec() != QDialog::Accepted)
return;
1321 if(dlg.LogfileWrite->isChecked())
1322 TGo4Log::OpenLogfile(dlg.LogfileName->text().toLatin1().constData(),
"Logfile for Go4 GUI",
true);
1332 QApplication::setOverrideCursor( Qt::WaitCursor );
1336 bool result = QDesktopServices::openUrl(QUrl::fromLocalFile(surl));
1339 StatusMessage(msg ? QString(msg) : QString(
"Show ") + filename);
1343 QApplication::restoreOverrideCursor();
1348 HelpWindow(
"docs/Go4Introduction.pdf",
"Show Go4 Introduction manual...");
1353 HelpWindow(
"docs/Go4Reference.pdf",
"Show Go4 Reference manual...");
1358 HelpWindow(
"docs/Go4FitTutorial.pdf",
"Show Go4 Fit tutorial...");
1378 QFont font= QFontDialog::getFont(&ok, QApplication::font(),
this);
1383 QApplication::setFont(font);
1396 if (anw) anw->setFont(font);
1412 QString str = QInputDialog::getText(
this,
"Analysis terminal timestamp format",
1413 "Time format (empty resets to yyyy-MM-dd hh:mm:ss.zzz)",
1418 str =
"yyyy-MM-dd hh:mm:ss.zzz";
1446 QApplication::setStyle(style);
1451 QString output = QDateTime::currentDateTime().toString(Qt::ISODate);
1452 output.append(
": ");
1453 output.append(mess);
1454 statusBar()->showMessage(output, 0);
1471 QString capt =
"Go4 ";
1474 capt += gSystem->HostName();
1480 setWindowTitle(capt);
1483 if (pr==0) flag = (ht==0 ?
true:
false) ;
1500 if (pr==0) flag = (ht==0 ?
true:
false) ;
1506 if (pr==0) flag = (ht==0 ?
false:
true);
1516 bool iscontrolling(
false), issubmit(
false);
1532 if ((go4_serv==0) && (root_serv!=0)) {
1573 QColor c = QColorDialog::getColor();
1580 TGo4MarkerSettings mset;
1581 if (mset.exec() != QDialog::Accepted)
return;
1587 TGo4OptStatsSettings stset;
1588 if (stset.exec() != QDialog::Accepted)
return;
1610 bool s =
faClone->isChecked();
1645 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
1646 w = QInputDialog::getInt(
this,
1647 "Default line width for object drawing",
1648 "Input 1 to preserve default value",
1651 w = QInputDialog::getInteger(
this,
1652 "Default line width for object drawing",
1653 "Input 1 to preserve default value",
1667 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
1668 w = QInputDialog::getInt(
this,
1669 "Default fill color for 1D objects (histogram and graph) drawing",
1670 "Input 0 for no fill",
1673 w = QInputDialog::getInteger(
this,
1674 "Default fill color for 1D objects (histogram and graph) drawing",
1675 "Input 0 for no fill",
1688 #if QT_VERSION >= QT_VERSION_CHECK(4,6,0)
1689 w = QInputDialog::getInt(
this,
1690 "Default fill style for 1D objects (histogram and graph) drawing",
1691 "Input 1001 for solid fill",
1692 w, 0, 4000, 1, &ok);
1694 w = QInputDialog::getInteger(
this,
1695 "Default fill style for 1D objects (histogram and graph) drawing",
1696 "Input 1001 for solid fill",
1697 w, 0, 4000, 1, &ok);
1707 QString str = QInputDialog::getText(
this,
1708 "Default draw options for TH1 class",
1709 "Input draw options",
1717 QString str = QInputDialog::getText(
this,
1718 "Default draw options for TH2 class",
1719 "Input draw options",
1727 QString str = QInputDialog::getText(
this,
1728 "Default draw options for TH3 class",
1729 "Input draw options",
1737 QString str = QInputDialog::getText(
this,
1738 "Default draw options for TGraph class",
1739 "Input draw options",
1750 if (s0.isEmpty()) s0 = gStyle->GetStatFormat();
1752 QString str = QInputDialog::getText(
this,
1753 "Printf argument for float values - gStyle->GetStatFormat()",
1754 "Input format string like 6.4g (empty - ROOT default)",
1755 QLineEdit::Normal, s0, &ok);
1759 gStyle->SetStatFormat();
1761 gStyle->SetStatFormat(str.toLatin1().constData());
1770 int min=0, def=0, max =0;
1773 palvals.sprintf(
"%d:%d:%d",min,def,max);
1774 QString str = QInputDialog::getText(
this,
1775 "Default Palette options",
1776 "Input - MinIndex:DefaultIndex:MaxIndex",
1777 QLineEdit::Normal, palvals, &ok);
1779 QStringList parts=str.split(
":");
1780 min=parts[0].toInt();
1781 def=parts[1].toInt();
1782 max=parts[2].toInt();
1786 fxStyle->SetPaletteRange(min,def,max);
1793 #if QT_VERSION >= QT_VERSION_CHECK(5,6,0)
1798 w = QInputDialog::getDouble(
this,
1800 "Please set scale factor. Restart GUI to apply!",
1812 QMessageBox::warning(
this,
"Launch analysis",
"Please disconnect analysis first");
1817 TGo4StartClient dlg;
1818 if (dlg.exec()!=QDialog::Accepted)
return;
1826 TString launchcmd, killcmd;
1827 Bool_t res = kFALSE;
1838 if (
ConnectHttpSlot(addr.toLatin1().constData(),0,0,
false, true )!=0) {
1839 StatusMessage(
"Connected to exisiting analysis webserver!");
1840 std::cout<<
"!!! Connected to exisiting analysis webserver "<<addr.toLatin1().constData()<<
"!!! "<<std::endl;
1845 2, shellmode, termmode,
1848 workdir.toLatin1().constData(),
1858 if ((termmode==2) || (termmode==3)) {
1859 gSystem->Exec(launchcmd.Data());
1862 anw->
StartAnalysisShell(launchcmd.Data(), (shellmode==0) ? workdir.toLatin1().constData() : 0,
true);
1881 workdir.toLatin1().constData(),
1886 if (res && (anw!=0) && (termmode==1)) {
1887 anw->
StartAnalysisShell(launchcmd.Data(), (shellmode==0) ? workdir.toLatin1().constData() : 0,
false);
1897 workdir.toLatin1().constData(),
1910 if ((isserver==1) && interactive) {
1919 if ((ana!=0) && interactive)
1920 QMessageBox::information(
this,
"Prepare for client connection",
1921 "Now you can start client from other shell (node) and connect to port " +
1929 if (force_recreate || (anw->
HasOutput() && !needoutput)) {
1941 anw->ensurePolished();
1944 QToolBar* dock = addToolBar(
"Analysis control");
1945 dock->setObjectName(
"AnalysisControlBar");
1948 dock->addWidget(anw);
1960 if ((serv==0) || (dynamic_cast<TGo4AnalysisProxy*>(serv)!=0) || (serv->
DebugOutputSlot()==0))
return;
1978 const char* analisysitem =
"Analysis";
1990 dynamic_cast<TGo4AnalysisProxy*> (analslot->
GetProxy());
1992 if (anal==0)
return 0;
1996 TGo4LogInfo* loginfo = (TGo4LogInfo*)
FindGo4Widget(
"LogInfo",
false);
2050 if ((anw!=0) && anw->
HasOutput())
return;
2052 bool shouldexists =
false;
2056 shouldexists =
true;
2058 shouldexists =
true;
2061 if (shouldexists && (anw==0)) {
2076 TGo4AnalysisStatusMonitor* status =
2077 dynamic_cast<TGo4AnalysisStatusMonitor*
>
2082 status =
new TGo4AnalysisStatusMonitor(statusBar(),
"AnalysisStatusMonitor");
2084 statusBar()->addWidget(status);
2092 status->RemoveLink(
"Ratemeter",
true);
2093 statusBar()->removeWidget(status);
2113 delete conf->parentWidget();
2119 conf =
new TGo4AnalysisConfiguration(
fxMdiArea,
"AnalysisConfiguration");
2129 conf->WorkWithAnalysis(anal);
2145 QMessageBox::warning(
this,
"Connect client",
"Analysis task is already connected");
2150 QString pass = password;
2152 TGo4ConnectServer dlg;
2155 if (dlg.exec()!=QDialog::Accepted)
return;
2156 pass = dlg.getInput();
2170 def ? 0 : pass.toLatin1().constData());
2171 StatusMessage(
"Connecting running analysis.... Please wait");
2183 QString
msg(
"Connecting analysis http server at ");
2184 msg.append(fulladdress).append(QString(
", Please wait"));
2188 pass.toLatin1().constData(),
false,
false);
2245 if (serv==0)
return;
2254 QMessageBox::Warning,
2255 "Disconnect from analysis",
2256 "Analysis runs inside go4 widget.\n"
2257 "If one only disconnects from the analysis,\n"
2258 "it remains invisible and difficult to stop.\n"
2259 "To shutdown it later, one need to reconnect with go4 gui again.\""
2260 "It is recommended to shutdown analysis now",
2261 QMessageBox::Ok | QMessageBox::Close | QMessageBox::Abort);
2263 msgBox.setButtonText(QMessageBox::Ok,
"Shutdown");
2264 msgBox.setButtonText(QMessageBox::Close,
"Disconnect");
2265 msgBox.setButtonText(QMessageBox::Abort,
"Cancel");
2267 switch (msgBox.exec()) {
2268 case QMessageBox::Ok: shutdown =
true;
break;
2269 case QMessageBox::Close: shutdown =
false;
break;
2273 if (QMessageBox::warning(
this,
"Disconnect analysis",
2274 QString(
"Really disconnect from analysis task?"),
2275 QString(
"Disconnect"),
2277 QString::null, 0)!=0)
return;
2287 int res = QMessageBox::warning(
this,
"Shutdown analysis",
2288 QString(
"Really shutdown analysis task?"),
2289 QString(
"Shutdown"),
2296 bool realshutdown =
false;
2313 if (serv==0)
return false;
2319 StatusMessage(
"Press Ctrl+S or choose Analysis->Start from the Menu to start the analysis");
2344 if (cmd.Length()>0) {
2346 StatusMessage(TString::Format(
"Submit %s command to the server", cmd.Data()).Data());
2361 if (cmd.Length()>0) {
2363 StatusMessage(TString::Format(
"Submit %s command to the server", cmd.Data()).Data());
2372 int res = QMessageBox::warning(
this,
"Kill analysis process",
2373 QString(
"Kill analysis by shell command: ") +
fKillCommand +
" ?",
2393 QProcess* killprocess =
new QProcess;
2395 QTimer::singleShot(10000, killprocess, SLOT(deleteLater()));
2397 StatusMessage(
"Can not kill analysis. Do it by OS commands");
2406 if (
fxOM==0)
return 0;
2411 if (widgslot==0)
return 0;
2416 if ((widg!=0) && activate) {
2417 if(!widg->isVisible()){
2430 TGo4FitPanel* fitpanel = (TGo4FitPanel*)
FindGo4Widget(
"FitPanel",
true);
2433 fitpanel =
new TGo4FitPanel(
fxMdiArea,
"FitPanel");
2437 fitpanel->ensurePolished();
2440 fitpanel->parentWidget()->showNormal();
2441 fitpanel->setFocus();
2448 TGo4HistogramInfo* hinfo = (TGo4HistogramInfo*)
FindGo4Widget(
"HistogramInfo",
true);
2450 hinfo =
new TGo4HistogramInfo(
fxMdiArea,
"HistogramInfo");
2454 hinfo->ensurePolished();
2455 hinfo->adjustSize();
2463 TGo4ConditionInfo* cinfo = (TGo4ConditionInfo*)
FindGo4Widget(
"ConditionInfo",
true);
2465 cinfo =
new TGo4ConditionInfo(
fxMdiArea,
"ConditionInfo");
2469 cinfo->ensurePolished();
2470 cinfo->adjustSize();
2478 TGo4LoadedLibraries llib(
this);
2486 TGo4Browser* br = (TGo4Browser*)
FindGo4Widget(
"Browser",
false);
2487 if (br!=0) br->ShootUpdateTimer();
2493 TGo4ParaEdit* pedit = (TGo4ParaEdit*)
FindGo4Widget(
"ParaEdit",
true);
2498 if (!cl->IsLoaded()) {
2499 QMessageBox::warning(0,
"Parameter editor", QString(
"Cannot start parameter editor for incomplete class ") + cl->GetName());
2505 pedit =
new TGo4ParaEdit(
fxMdiArea,
"ParaEdit");
2508 pedit->ensurePolished();
2514 pedit->WorkWithParameter(itemname,
false);
2521 TGo4EditDynEntry* dedit = (TGo4EditDynEntry*)
FindGo4Widget(
"EditDynEntry",
true);
2524 dedit =
new TGo4EditDynEntry(
fxMdiArea,
"EditDynEntry");
2528 dedit->ensurePolished();
2537 TGo4ConditionEditor* wedit = (TGo4ConditionEditor*)
FindGo4Widget(
"ConditionEditor",
true);
2539 wedit =
new TGo4ConditionEditor(
fxMdiArea,
"ConditionEditor");
2543 wedit->ensurePolished();
2551 TGo4EventInfo* einfo = (TGo4EventInfo*)
FindGo4Widget(
"EventInfo",
true);
2554 einfo =
new TGo4EventInfo(
fxMdiArea,
"EventInfo");
2558 einfo->ensurePolished();
2567 return (TGo4AnalysisConfiguration*)
FindGo4Widget(
"AnalysisConfiguration",
false);
2573 QWidget* mdi = conf ? conf->parentWidget() : 0;
2578 if (mdi->isVisible())
2585 if (conf->GetNumSteps() == 0)
2594 if (mdi->isMinimized())
2610 QWidget* mdi = anw->parentWidget();
2612 if (mdi->isVisible()) {
2617 if (mdi->isMinimized()) mdi->showNormal();
2620 QToolBar* dock =
dynamic_cast<QToolBar*
> (anw->parentWidget());
2621 if (dock->isVisible())
2634 anw->parentWidget()->close();
2636 QToolBar* bar =
dynamic_cast<QToolBar*
> (anw->parentWidget());
2648 TGo4MBSViewer* mbs =
2649 dynamic_cast<TGo4MBSViewer*
> (
FindGo4Widget(
"MBSViewer",
false));
2651 if (mbs->parentWidget()->isVisible()) {
2652 mbs->parentWidget()->hide();
2654 mbs->SetNode(nodename);
2655 mbs->parentWidget()->show();
2662 TGo4SetScaleValues* scl = 0;
2664 QList<QMdiSubWindow *> windows =
fxMdiArea->subWindowList();
2665 for (
int i=0; i < windows.count(); ++i ) {
2666 scl =
dynamic_cast<TGo4SetScaleValues*
> (windows.at(i)->widget());
2671 scl =
new TGo4SetScaleValues(
fxMdiArea,
"ScaleValues", Qt::WindowStaysOnTopHint);
2674 scl->ensurePolished();
2677 scl->parentWidget()->close();
2685 TGo4CreateNewHistogram dlg(
this);
2689 dlg.SetLocalAvaliable(isremote!=1);
2691 if (dlg.exec() != QDialog::Accepted)
return;
2692 TH1* h1 = dlg.MakeHistogram();
2697 if (dlg.GetSelectedCmd()==1) {
2700 if (newitem.Length()>0)
2703 newitem.Data(), h1->IsA());
2706 if ((dlg.GetSelectedCmd()==2) && (an!=0)) {
2712 if (h1!=0)
delete h1;
2719 QMessageBox::information(
this,
"Create new condition",
"Cannot create new condition before analysis setup");
2723 TGo4CreateNewCondition dlg(
this);
2725 if (dlg.exec() != QDialog::Accepted)
return;
2728 if (cond==0)
return;
2743 QMessageBox::information(
this,
"Create new dynamic entry",
"Cannot create new entry before analysis setup");
2747 TGo4CreateNewDynEntry dlg(
this);
2749 if (dlg.exec() != QDialog::Accepted)
return;
2752 if (entry==0)
return;
2765 if (editor==0)
return;
2766 connect(editor, SIGNAL(widgetService(
QGo4Widget*,
int,
const char*,
void*)),
2774 if ((br==0) || (itemname==0) || strlen(itemname)==0 )
return 0;
2778 if (guislot==0)
return 0;
2780 std::cerr <<
" Problem with gui slots" << std::endl;
2786 pad = panel->GetCanvas();
2788 if (pad==0) pad = panel->GetActivePad();
2793 panel->SetActivePad(pad);
2794 panel->ShootRepaintTimer();
2811 if ((br==0) || (itemname==0))
return 0;
2813 TString fileslotname;
2814 const char* filepath = 0;
2819 int answer = QMessageBox::question(
this,
"Writing object to file",
2820 QString(
"Overwrite ") + filepath +
" in file " + fileslotname.Data(),
2821 "Overwrite",
"Save to other file",
"Cancel");
2822 if (answer==2)
return false;
2828 QString root_fmt =
"ROOT (*.root)";
2829 QString xml_fmt =
"ROOT XML (*.xml)";
2831 QFileDialog fd(
this, QString(
"Save ") + itemname +
" in root file",
fLastFileDir);
2832 fd.setFileMode(QFileDialog::AnyFile);
2833 fd.setAcceptMode(QFileDialog::AcceptSave);
2834 fd.setNameFilters(QStringList() << root_fmt << xml_fmt);
2836 if (fd.exec() == QDialog::Accepted) {
2837 QStringList flst = fd.selectedFiles();
2838 if (!flst.isEmpty()) {
2839 QString filename = flst[0];
2840 if (fd.selectedNameFilter()==xml_fmt) {
2841 if (!filename.endsWith(
".xml")) filename.append(
".xml");
2843 if (!filename.endsWith(
".root")) filename.append(
".root");
2845 res = br->
SaveItemToFile(itemname, filename.toLatin1().constData(), subfolder);
2856 if (panel==0)
return;
2858 TCanvas* can= panel->GetCanvas();
2862 QFileDialog fd(
this, QString(
"Save ") + panel->objectName() +
" As",
fLastFileDir);
2863 fd.setFileMode( QFileDialog::AnyFile );
2864 fd.setAcceptMode(QFileDialog::AcceptSave);
2866 QString PS =
"Post Script (*.ps)";
2867 QString PS_Portrait =
"Post Script Portrait (*.ps)";
2868 QString PS_Landscape =
"Post Script Landscape (*.ps)";
2869 QString EPS =
"Encapsulated Post Script (*.eps)";
2870 QString EPS_Preview =
"Encapsulated Post Script preview (*.eps)";
2871 QString GIF =
"GIF format (*.gif)";
2872 QString PDF =
"PDF format (*.pdf)";
2873 QString SVG =
"SVG format (*.svg)";
2874 QString XPM =
"XPM format (*.xpm)";
2875 QString PNG =
"PNG format (*.png)";
2876 QString JPG =
"JPG format (*.jpg)";
2877 QString TIFF =
"TIFF format (*.tiff)";
2879 QString CXXM =
"C++ Macro (*.C)";
2880 QString ROOTM =
"root file (*.root)";
2886 flt << PS_Landscape;
2893 #if ROOT_VERSION_CODE >= ROOT_VERSION(4,4,2)
2903 fd.setNameFilters(flt);
2905 if (fd.exec() != QDialog::Accepted)
return;
2911 can = (TCanvas*) panel->GetCanvas()->Clone();
2912 can->SetName(
"PrintoutPad");
2915 QStringList flst = fd.selectedFiles();
2916 if (flst.isEmpty())
return;
2918 QString filename = flst[0];
2919 QString filter = fd.selectedNameFilter();
2923 const char* opt =
"ps";
2927 if (!filename.endsWith(
".eps")) filename.append(
".eps");
2929 if(filter==EPS_Preview) {
2931 if (!filename.endsWith(
".eps")) filename.append(
".eps");
2935 if (!filename.endsWith(
".ps")) filename.append(
".ps");
2937 if(filter==PS_Portrait) {
2939 if (!filename.endsWith(
".ps")) filename.append(
".ps");
2941 if(filter==PS_Landscape) {
2943 if (!filename.endsWith(
".ps")) filename.append(
".ps");
2947 if (!filename.endsWith(
".gif")) filename.append(
".gif");
2951 if (!filename.endsWith(
".pdf")) filename.append(
".pdf");
2955 if (!filename.endsWith(
".svg")) filename.append(
".svg");
2959 if (!filename.endsWith(
".xpm")) filename.append(
".xpm");
2963 if (!filename.endsWith(
".png")) filename.append(
".png");
2967 if (!filename.endsWith(
".jpg")) filename.append(
".jpg");
2971 if (!filename.endsWith(
".tiff")) filename.append(
".tiff");
2975 if (!filename.endsWith(
".C")) filename.append(
".C");
2977 if (filter==ROOTM) {
2979 if (!filename.endsWith(
".root")) filename.append(
".root");
2984 panel->ResetPadFillColors(can,0);
2986 gROOT->SetBatch(kTRUE);
2988 can->Print(filename.toLatin1().constData(), opt);
2993 gROOT->SetBatch(kFALSE);
3010 if (widget==0)
return 0;
3012 QString EditorName = widget->objectName();
3015 editorslotname +=
"/";
3016 editorslotname += EditorName;
3018 if ((edslot==0) && force) {
3020 edslot =
fxOM->
GetSlot(editorslotname.toLatin1().constData());
3034 if ((actpanel!=0) && actpanel->IsRepaintTimerActive())
3035 actpanel->checkRepaintSlot();
3041 for (
int n=0;n<topslot->
NumChilds();n++) {
3046 if (wproxy==0)
continue;
3048 TGo4ViewPanel* panel =
3049 dynamic_cast<TGo4ViewPanel*
> (wproxy->
GetWidget());
3051 if ((panel!=0) && (panel!=actpanel))
3052 if (panel->IsRepaintTimerActive()) {
3053 panel->checkRepaintSlot();
3066 if (editor==0)
return;
3071 if (edslot==0)
return;
3073 switch (serviceid) {
3075 QDragEnterEvent*
event = (QDragEnterEvent*) par;
3076 if ((event==0) || !
event->mimeData()->hasText())
return;
3078 QString eventstr =
event->mimeData()->text();
3080 bool accept =
false;
3084 accept = editor->
IsAcceptDrag(eventstr.toLatin1().constData(), cl, kind);
3087 if (accept)
event->acceptProposedAction();
3092 QDropEvent*
event = (QDropEvent*) par;
3094 if ((event==0) || !
event->mimeData()->hasText())
return;
3096 QString eventstr =
event->mimeData()->text();
3097 event->acceptProposedAction();
3103 TGo4ViewPanel* panel =
dynamic_cast<TGo4ViewPanel*
> (editor);
3104 TGo4FitPanel* fitpanel =
dynamic_cast<TGo4FitPanel*
> (editor);
3106 panel->DropOnPad((TPad*)str, eventstr.toLatin1().constData(), cl, kind);
3109 fitpanel->DropOnPanel(event, eventstr.toLatin1().constData(), cl, kind);
3111 editor->
DropItem(eventstr.toLatin1().constData(), cl, kind);
3117 TClass* cl = (TClass*) par;
3118 int id = str!=0 ? QString(str).toInt() : 0;
3120 if (cl->InheritsFrom(TH1::Class()))
3123 if (cl->InheritsFrom(TGo4Condition::Class()) && (
id!=0))
3126 if (cl->InheritsFrom(TGo4DynamicEntry::Class()) && (
id!=0))
3131 void** res = (
void**) par;
3132 res[0] =
DisplayBrowserItem(str, (TGo4ViewPanel*) res[0], (TPad*) res[1], *((
bool*)res[2]), *((
int*) res[3]), 0);
3137 TGo4ViewPanel** res = (TGo4ViewPanel**) par;
3140 for (
int n=0;n<topslot->
NumChilds();n++) {
3145 if (wproxy==0)
continue;
3147 TGo4ViewPanel* panel =
3148 dynamic_cast<TGo4ViewPanel*
> (wproxy->
GetWidget());
3151 if (panel->FindPadWithItem(str)!=0) {
3162 for (
int n=0;n<topslot->
NumChilds();n++) {
3167 if (wproxy==0)
continue;
3169 TGo4ViewPanel* panel =
3170 dynamic_cast<TGo4ViewPanel*
> (wproxy->
GetWidget());
3173 panel->UndrawItemOnPanel(str);
3188 TGo4TreeViewer* tviewer =
3189 dynamic_cast<TGo4TreeViewer*
> (
FindGo4Widget(
"TreeViewer",
false));
3191 tviewer->WorkWithLeaf(str);
3192 tviewer->parentWidget()->show();
3199 if (cl->InheritsFrom(TGo4Fitter::Class())) {
3201 TGo4ViewPanel* panel =
dynamic_cast<TGo4ViewPanel*
> (editor);
3202 fitpanel->WorkWithFitter(str, panel, panel==0 ? 0 : panel->GetActivePad());
3204 if (cl->InheritsFrom(TGo4Parameter::Class())) {
3207 if (cl->InheritsFrom(TH1::Class())) {
3209 hinfo->WorkWithHistogram(str);
3211 if (cl->InheritsFrom(TGo4Condition::Class())) {
3213 wedit->WorkWithCondition(str);
3215 if (cl->InheritsFrom(TGo4DynamicEntry::Class())) {
3217 dedit->WorkWithEntry(str);
3219 if (cl->InheritsFrom(TGo4AnalysisStatus::Class())) {
3232 einfo->WorkWithEvent(str);
3236 if (cl->InheritsFrom(TH1::Class())) {
3238 hinfo->WorkWithHistogram(str);
3240 if (cl->InheritsFrom(TGo4Condition::Class())) {
3242 cinfo->WorkWithCondition(str);
3252 if (obj->InheritsFrom(TGo4Fitter::Class())) {
3254 fitpanel->WorkWithFitterInSlot(slot);
3260 const char* subfolder = (
const char*) par;
3261 bool* replace = (
bool*) par;
3263 * ((
char*) par) = res ? 1 : 0;
3268 TObject** obj = (TObject**) par;
3270 if (res) *obj = (TObject*) 1;
else *obj = 0;
3280 TGo4ViewPanel** res = (TGo4ViewPanel**) par;
3286 bool* res = (
bool*) par;
3298 TObject** obj = (TObject**) par;
3300 QString** res = (QString**) par;
3302 if (itemname.Length()>0)
3303 *res =
new QString(itemname.Data());
3316 QByteArray ba = editor->objectName().toLatin1();
3318 if (str==0) str = ba.constData();
3321 str,
"link to browser item");
3330 QByteArray ba = editor->objectName().toLatin1();
3331 if (str==0) str = ba.constData();
3336 str,
"direct link to OM slot");
3349 if (parent==0) parent = edslot;
3354 brslot->GetName(),
"link in specific subfolder");
3386 if (edslot==0)
return;
3387 const char** res = (
const char**) par;
3393 void** res = (
void**) par;
3402 if (edslot==0)
return;
3404 if (link==0)
return;
3406 TObject** res = (TObject**) par;
3416 if (edslot==0)
return;
3418 if (link!=0) link->
Delete();
3423 if ((str==0) || (strcmp(str,
"complete")!=0))
3434 if (edslot==subslot)
continue;
3447 if (edslot==0)
break;
3457 TGo4ViewPanel** res = (TGo4ViewPanel**) par;
3463 if (strcmp(str,
"CloseAnalysisWindow")==0) {
3469 if (strcmp(str,
"PrintAnalysisHistograms")==0) {
3474 if (strcmp(str,
"PrintAnalysisConditions")==0) {
3479 if (strcmp(str,
"DisplayMbsMonitor")==0) {
3483 if (strcmp(str,
"SubmitAnalysisSettings")==0) {
3487 if (strcmp(str,
"CloseAnalysisSettings")==0) {
3495 if (strcmp(str,
"SubmitStartAnalysis")==0) {
3499 if (strcmp(str,
"StartAnalysis")==0) {
3503 if (strcmp(str,
"StopAnalysis")==0) {
3507 if (strcmp(str,
"TerminateAnalysis")==0) {
3511 if (strcmp(str,
"UpdateGuiLayout")==0) {
3515 if (strcmp(str,
"StartEventInfo")==0) {
3519 if (strcmp(str,
"ActivateConditionEditor")==0) {
3520 TGo4ConditionEditor* w =
3521 (TGo4ConditionEditor*)
FindGo4Widget(
"ConditionEditor",
true);
3524 w->RefreshWidget(
true);
3528 if (strcmp(str,
"SavePanelCanvas")==0) {
3532 if (strcmp(str,
"ToggleScaleValues")==0) {
3536 if (strcmp(str,
"GetFitterFromFitPanel")==0) {
3537 TGo4FitPanel* panel = (TGo4FitPanel*)
FindGo4Widget(
"FitPanel",
false);
3539 if ((panel!=0) && (res!=0))
3540 *res = panel->GetFitter();
3543 if (strcmp(str,
"CloneFitterFromFitPanel")==0) {
3544 TGo4FitPanel* panel = (TGo4FitPanel*)
FindGo4Widget(
"FitPanel",
false);
3546 if ((panel!=0) && (res!=0))
3547 *res = panel->CloneFitter();
3554 TGo4ViewPanel* panel = (TGo4ViewPanel*) editor;
3579 TGo4ViewPanel* panel = (TGo4ViewPanel*) editor;
3580 TPad* pad = (TPad*) par;
3592 if (fname==0)
return;
3605 if (exec==0)
return;
3614 if (QApplication::overrideCursor()==0)
3615 QApplication::setOverrideCursor(Qt::WaitCursor);
3619 QApplication::restoreOverrideCursor();
3633 QFileDialog::getSaveFileName(
this,
3634 "Create GUI script dialog",
3636 QString(
"GUI hotstart script (*") + ext +
")");
3637 if (fileName.length()==0)
return;
3639 int pos = fileName.indexOf(ext);
3641 if ((pos<0) || (pos!=fileName.length()-ext.length()))
3653 QToolBar* AnalysisMacroBar = addToolBar(
"Analysis Command Buttons");
3654 AnalysisMacroBar->setObjectName(
"AnalysisCommandToolBar");
3657 TGo4UserCommands* companel =
new TGo4UserCommands(
this,
"UserCommands");
3659 AnalysisMacroBar->addWidget(companel);
3660 AnalysisMacroBar->adjustSize();
3672 if ((name==0) || (*name==0))
return 0;
3674 TGo4ViewPanel* panel =
dynamic_cast<TGo4ViewPanel*
> (
FindGo4Widget(name,
false));
3676 if (panel!=0)
return panel;
3680 for (Int_t n=0;n<slot->
NumChilds();n++) {
3683 panel = wproxy==0 ? 0 :
dynamic_cast<TGo4ViewPanel*
> (wproxy->
GetWidget());
3686 if (strcmp(panel->GetPanelName(), name)==0)
return panel;
Bool_t IsAnalysisSettingsReady() const
void PaletteSettingsSlot()
QAction * faWindowRubberBand
TGo4ConditionEditor * StartConditionEditor()
void setDrawDateFlag(bool on=true)
QString GetSettLoaction()
virtual Bool_t IsViewer()
void setScreenScaleFactor(double factor)
TGo4Proxy * GetProxy(const char *name)
QAction * faDisconnectAnal
bool getSavePadWhiteBackground()
void OpenRemoteFileSlot()
void OpenFile(const char *fname)
void CreateNewHistSlot(int isremote=-1)
Bool_t ContinueExecution()
void HotStart(const char *fname)
QString getTGraphDrawOpt()
virtual Bool_t IsConnected()
QString getClientAccountName()
void EstablishAnalysisWindowForHttp()
void storeMainWindowState(QMainWindow *src)
void StatusMessage(const QString &mess)
void ChangeTerminalFontSlot()
TGo4AnalysisProxy * AddAnalysisProxy(bool isserver, bool needoutput)
void setTH1DrawOpt(const QString &value)
void setHideTGo4EventElement(bool on=true)
void ChangeDrawDateFlagSlot()
TString SaveToMemory(const char *pathname, TObject *obj, Bool_t ownership, Bool_t overwrite=kFALSE)
TObject * GetBrowserObject(const char *name, Int_t update=0)
double getScreenScaleFactor()
virtual Bool_t IsAdministrator()
void SetProxy(TGo4Proxy *cont)
void ConnectHServerSlot()
TGo4Slot * UpdateObjectSlot()
void ToggleFullScreenSlot()
void LaunchClientSlot(bool interactive=true)
void setFetchDataWhenCopy(bool on=true)
Int_t ItemKind(const char *name)
bool SaveBrowserItemToFile(const char *itemname, const char *subfolder)
void setPadEventStatus(bool on)
bool getFetchDataWhenCopy()
TGo4MainWindow(QApplication *)
void AddFile(const char *pathname, const char *filename)
void ChangeFetchWhenDrawSlot()
QString getTermTimeFormat()
Bool_t IsItemRemote(const char *name)
TGo4Proxy * GetProxy() const
void checkPanelRepaintSlot()
void setDrawFillColor(int col)
void ConnectGo4Widget(QGo4Widget *editor)
Bool_t LaunchAsClient(TString &launchcmd, TString &killcmd, Int_t shellkind, Int_t konsole, const char *name, const char *remotehost, const char *remotedir, const char *remoteexe, Int_t exe_kind=0, const char *exeargs=0)
void HelpWindow(const char *filename, const char *msg=0)
void setPaletteOpt(int min, int def, int max)
void ToggleAnalysisConfiguration()
TGo4AnalysisConfiguration * EstablishAnalysisConfiguration(int level)
void MakeFolder(const char *pathname)
QAction * faTermTimeStamp
QAction * faFetchWhenSave
virtual Bool_t IsGo4Analysis() const
void CreateNewConditionSlot(bool forothereditor=false)
void setHServFilter(const QString &)
void ChangeHideEventElement()
virtual TGo4ServerProxy * ConnectHttp(const char *servername, const char *account=0, const char *pass=0)
TGo4ParaEdit * StartParaEdit(const char *itemname=0)
QAction * faHideEventElement
virtual void CloseAnalysisSettings()
TClass * ItemClass(const char *name)
static const char * FileExtension()
void DeleteChilds(const char *startedwith=0)
QString getClientExec(int mode=-1)
TGo4AnalysisStatusMonitor * EstablishRatemeter(int level)
QAction * faFetchWhenDraw
static void SetIgnoreLevel(Int_t level)
void SetAnalysisLaunched(Int_t on=1)
void UpdateDockAnalysisWindow()
void ChangeDrawOnceSlot()
bool SubmitAnalysisSettings()
void ToggleMbsMonitor(const char *nodename)
virtual Bool_t IsConnected()
virtual Bool_t RefreshNamesList()
static void OutputEnable(Bool_t on=kTRUE)
void StartAnalysisShell(const char *cmd, const char *workdir=0, bool aschildprocess=false)
virtual Bool_t IsAdministrator()
void ConnectServerSlot(bool interactive=true, const char *password="")
void ChangeFetchWhenCopySlot()
virtual void RequestAnalysisSettings()
virtual Bool_t IsController()
static void OpenLogfile(const char *name=0, const char *headercomment=0, Bool_t appendmode=kFALSE)
void setTH3DrawOpt(const QString &value)
TGo4ServerProxy * FindServer(const char *itemname=0, Bool_t asanalysis=kTRUE)
Bool_t ConnectHServer(const char *servername, Int_t portnumber, const char *basename, const char *userpass, const char *filter)
virtual Bool_t IsAnalysisServer() const
void CheckConnectingCounterSlot()
void ShutdownAnalysisSlot(bool interactive=true)
void SetHistorySize(int sz)
void setSavePadWhiteBackground(bool on)
int getClientControllerMode()
virtual void StartAnalysis()
Bool_t SaveBrowserToFile(const char *filename, Bool_t prefetch=kFALSE, const char *selectedpath=0, const char *description=0)
void setTermHistorySize(int sz)
static TGo4Script * ScriptInstance()
TGo4FitPanel * StartFitPanel()
TGo4Slot * DataSlot(const char *item)
void ChangeTerminalTimeStampSlot()
Bool_t ConnectToServer(const char *remotehost, Int_t remoteport, Int_t ascontroller, const char *accesspass)
TGo4BrowserProxy * Browser()
virtual Bool_t IsAdministrator()
TGo4Slot * RatemeterSlot()
void InputTerminalParametersSlot()
TObject * GetAssignedObject()
TGo4SetScaleValues * ToggleScaleValues()
void SetDefaultReceiver(TGo4ObjectManager *rcv, const char *path)
void SavePanelCanvas(TGo4ViewPanel *panel)
void WorkWithDebugOutput(TGo4Slot *slot)
void SetAnalysisReady(Bool_t on=kTRUE)
void setFetchDataWhenDraw(bool on=true)
void setCloneFlag(bool on=true)
void setPadCrosshair(bool on)
void UpdateCaptionButtons()
TGo4Slot * DebugOutputSlot()
virtual Bool_t IsConnected()
TGo4Slot * FindChild(const char *name)
void ResponseOnPanelEvent(int funcid, TGo4ViewPanel *panel, TPad *pad)
void windowsMenuAboutToShow()
virtual void ResetDebugOutputRequests()
virtual const char * GetContainedObjectInfo()
static void DeleteInstance()
Bool_t DefineFileObject(const char *itemname, TString &filedataslot, const char **filepath)
TGo4HistogramInfo * StartHistogramInfo()
void CreateMemoryFolder(const char *foldername=0)
static Int_t DelayMillisec()
Int_t IsAnalysisLaunched() const
void ChangeSaveWhiteBackgroundSlot()
bool getMbsMonitorMonitorActive()
void setHServPort(int port)
TGo4Slot * MakeObjSlot(const char *foldername, const char *name=0, const char *title=0)
virtual Bool_t IsAnalysisServer() const
bool getTermShowTimestamp()
void AddAnalysisMacrosBar()
bool TerminateOnClose() const
void setTermFont(const QFont &)
TGo4AnalysisWindow * EstablishAnalysisWindow(bool needoutput, bool withkillbnt=false, bool force_recreate=false)
virtual Bool_t IsController()
virtual Bool_t UpdateAnalysisObject(const char *objectname, TObject *obj)
void setAppStyle(const QString &)
TGo4Slot * GetSlot(const char *name, Bool_t force=kFALSE)
void setDrawLineWidth(int w=1)
QAction * faFetchWhenCopy
int getClientConnectMode()
TGo4EventInfo * StartEventInfo()
void windowsMenuActivated(int id)
QAction * faSumbStartAnal
static Bool_t GetLaunchString(TString &launchcmd, TString &killcmd, Int_t serverkind, Int_t shellkind, Int_t konsole, const char *name, const char *remotehost, const char *remotedir, const char *remoteexe, Int_t guiport, Int_t exe_kind=0, const char *exeargs=0)
void setDrawOnceFlag(bool on=true)
TGo4ViewPanel * GetActivePanel()
void WorkWithUpdateObjectCmd(TGo4Slot *slot)
bool getFetchDataWhenSave()
void ChangeCloneFlagSlot()
void SetMonitorBlockingFlag(Bool_t blocked=kFALSE)
static const char * Message(Int_t prio, const char *text,...)
void *(* TStartUserGuiFunc)(QWidget *parent)
void setFetchDataWhenSave(bool on=true)
virtual Bool_t CanSubmitObjects()
static void ProduceScript(const char *filename, TGo4MainWindow *main)
void restoreMainWindowState(QMainWindow *tgt)
TGo4Slot * BrowserSlot(const char *item)
QSignalMapper * winMapper
virtual ~TGo4MainWindow()
TGo4ViewPanel * FindViewPanel(const char *name)
bool startUserGUI(const char *)
void AddProxy(const char *pathname, TGo4Proxy *cont, const char *name, const char *title="title")
bool getFetchDataWhenDraw()
virtual void SubmitAnalysisSettings()
void CreateGUIScriptSlot()
void CreateNewDynEntrySlot(bool forothereditor=false)
TGo4AnalysisProxy * FindAnalysis(const char *itemname=0)
void setMoveSubwindowRubberBand(bool on=true)
QGo4Widget * FindGo4Widget(const char *name, bool activate)
static const char * GetLinkedName(TGo4Slot *slot)
void CloseFiles(const char *pathname)
TGo4EditDynEntry * StartEditDynEntry()
void setDrawTimeFlag(bool on=true)
Bool_t StartScriptExecution(const char *fname)
void SetStyleSlot(const QString &)
QSize lastPanelSize(const QString &kind="ViewPanel", int dfltwidth=450, int dfltheight=250)
void editorServiceSlot(QGo4Widget *editor, int serviceid, const char *str, void *par)
void setTH2DrawOpt(const QString &value)
void DisconnectAnalysisSlot(bool interactive=true)
void setHServName(const QString &)
void GStyleStatFormatSlot()
virtual void Delete(Option_t *opt="")
void SubmitStartAnalysisSlot()
virtual void StopAnalysis()
bool getClientDefaultPass()
static TString subGO4SYS(const char *subdir)
void setClientNode(const QString &)
TGo4ServerProxy * ConnectHttpSlot(const char *addr=0, const char *user=0, const char *pass=0, bool with_qt_process=false, bool get_analysis_config=false)
void UpdateTimeStampFormat()
virtual void closeEvent(QCloseEvent *ce)
TString GetFullName(TGo4Slot *toparent=0)
virtual Bool_t DelayedRefreshNamesList(Int_t delay_sec)
void getPaletteOpt(int &min, int &def, int &max)
static void SetLinkedName(TGo4Slot *slot, const char *itemname)
void setTermShowTimestamp(bool on)
void setDrawFillStyle(int style)
void setDrawItemFlag(bool on=true)
void setCanvasColor(int red, int green, int blue)
bool getMoveSubwindowRubberBand()
void ChangeFetchWhenSaveSlot()
void ChangeDrawTimeFlagSlot()
TGo4ViewPanel * DisplayBrowserItem(const char *itemname, TGo4ViewPanel *panel, TPad *pad, bool activate, int updatelevel, const char *drawopt)
static const char * GetDabcVersion()
void AppendOutputBuffer(const QString &value, int prio=0)
TGo4AnalysisConfiguration * FindAnalysisConfiguration()
virtual TString FindCommand(const char *name)
void ChangeDrawItemFlagSlot()
QString getGStyleStatFormat()
TGo4ViewPanel * MakeNewPanel(int div=0)
void CloseAnalysisWindow()
void TerminateAnalysis(bool interactive=true)
const char * LastTypedPassword() const
Bool_t UpdateObjectInFile(const char *itemname, const char *fileslotname, const char *filepath)
virtual Bool_t SubmitCommand(const char *name, Int_t waitres=-1, const char *arg1=0, const char *arg2=0, const char *arg3=0)
static void AutoEnable(Bool_t on=kTRUE)
TGo4AnalysisWindow * FindAnalysisWindow()
void setClientConnectMode(int)
QMdiSubWindow * AddGo4SubWindow(QWidget *widget, Qt::WindowFlags flags=0)
TGo4Slot * GetChild(Int_t n) const
bool getHideTGo4EventElement()
void setHServBase(const QString &)
void MarkerSettingsSlot()
bool RemoveAnalysisProxy(int waittime=30, bool servershutdown=false)
void setGStyleStatFormat(const QString &)
Bool_t UpdateAnalysisItem(const char *itemname, TObject *obj=0)
virtual void DisconnectAnalysis(Int_t waittime=30, Bool_t servershutdown=kFALSE)
void ToggleAnalysisWindow()
void CascadeMdiPosition(QWidget *sub)
void setTermTimeFormat(const QString &form)
static Bool_t IsAutoEnabled()
void ChangeTerminalTimeStampFormatSlot()
void setAppFont(const QFont &)
void setPadSuperimpose(bool on)
void ChangeWindowRubberBandSlot()
void ToggleMonitoring(Int_t period)
void TerminateAnalysisProcess()
void PrepareForClientConnectionSlot(bool interactive=true)
TGo4Slot * AddLink(TGo4Slot *source, const char *pathname, const char *linkname, const char *linktitle)
TGo4ConditionInfo * StartConditionInfo()
Bool_t SaveItemToFile(const char *itemname, const char *filename, const char *subfolder=0)
TGo4Slot * GetWidgetTopSlot(QGo4Widget *widget, bool force)
void setTGraphDrawOpt(const QString &value)
void WaitForNewObject(bool isobjectforeditor)
static void LogfileEnable(Bool_t on=kTRUE)
static Bool_t LaunchAsServer(TString &launchcmd, TString &killcmd, Int_t shellkind, Int_t konsole, const char *name, const char *remotehost, Int_t remoteport, const char *remotedir, const char *remoteexe, Int_t exe_kind=0, const char *exeargs=0)