31 #ifdef G4UI_BUILD_QT_SESSION
45 #include <qapplication.h>
46 #include <qmessagebox.h>
47 #include <qlineedit.h>
51 #include <qpushbutton.h>
53 #include <qsplitter.h>
54 #include <qscrollbar.h>
57 #include <qtextedit.h>
58 #include <qsignalmapper.h>
59 #include <qtabwidget.h>
61 #include <qstringlist.h>
63 #include <qmainwindow.h>
65 #include <qlistwidget.h>
66 #include <qtreewidget.h>
67 #include <qheaderview.h>
68 #include <qgroupbox.h>
69 #include <qscrollarea.h>
71 #include <qradiobutton.h>
72 #include <qbuttongroup.h>
73 #include <qcombobox.h>
74 #include <qsignalmapper.h>
76 #include <qcolordialog.h>
78 #include <qfiledialog.h>
79 #include <qdesktopwidget.h>
80 #include <qtablewidget.h>
85 static G4bool exitSession =
true;
86 static G4bool exitPause =
true;
115 ,fCoutTBTextArea(NULL)
118 ,fHistoryTBTableList(NULL)
119 ,fHelpTreeWidget(NULL)
121 ,fHistoryTBWidget(NULL)
122 ,fCoutDockWidget(NULL)
124 ,fSceneTreeComponentsTBWidget(NULL)
126 ,fViewerTabWidget(NULL)
129 ,fHelpVSplitter(NULL)
130 ,fParameterHelpLabel(NULL)
131 ,fParameterHelpTable(NULL)
134 ,fStringSeparator(
"__$$$@%%###__")
138 #ifdef G4MULTITHREADED
139 ,fThreadsFilterComboBox(NULL)
141 ,fDefaultViewerFirstPageHTMLText(
"")
142 ,fMoveSelected(false)
143 ,fRotateSelected(true)
144 ,fPickSelected(false)
145 ,fZoomInSelected(false)
146 ,fZoomOutSelected(false)
149 G4Qt* interactorManager = G4Qt::getInstance (argc,argv,(
char*)
"Qt");
150 if (!(QApplication*)interactorManager->GetMainInteractor()) {
155 G4cout <<
"G4UIQt : Unable to init Qt. Aborted" <<
G4endl;
165 Q_FOREACH (QWidget *widget, QApplication::allWidgets()) {
166 if ((found==
false) && (widget->inherits(
"QMainWindow"))) {
176 G4cout <<
"G4UIQt : Found an external App with a QMainWindow already defined. Aborted" <<
G4endl;
180 fMainWindow =
new QMainWindow();
182 fMainWindow->setCorner( Qt::TopLeftCorner, Qt::LeftDockWidgetArea );
183 fMainWindow->setCorner( Qt::TopRightCorner, Qt::RightDockWidgetArea );
184 fMainWindow->setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea );
185 fMainWindow->setCorner( Qt::BottomRightCorner, Qt::RightDockWidgetArea );
187 fMainWindow->setCentralWidget(CreateViewerWidget());
188 fMainWindow->addDockWidget(Qt::LeftDockWidgetArea, CreateUITabWidget());
189 fMainWindow->addDockWidget(Qt::BottomDockWidgetArea, CreateCoutTBWidget());
196 masterG4coutDestination =
this;
198 fMainWindow->setWindowTitle(QFileInfo( QCoreApplication::applicationFilePath() ).fileName());
199 fMainWindow->move(QPoint(50,50));
204 fMainWindow->resize(fUIDockWidget->width()+fCoutDockWidget->width()+20,
205 fUIDockWidget->height()+fCoutDockWidget->height()+20);
208 fCommandArea->setFocus(Qt::TabFocusReason);
212 qRegisterMetaType<QTextCursor>(
"QTextCursor");
215 AddTabWidget(fStartPage,
"Useful tips");
218 #if QT_VERSION < 0x040200
221 fMainWindow->setVisible(
false);
235 masterG4coutDestination = 0;
238 if (fMainWindow!=NULL) {
245 QWidget* G4UIQt::CreateHistoryTBWidget(
248 fHistoryTBWidget =
new QWidget();
250 QVBoxLayout *layoutHistoryTB =
new QVBoxLayout();
251 fHistoryTBTableList =
new QListWidget();
252 fHistoryTBTableList->setSelectionMode(QAbstractItemView::SingleSelection);
253 connect(fHistoryTBTableList, SIGNAL(itemSelectionChanged()), SLOT(CommandHistoryCallback()));
254 fHistoryTBTableList->installEventFilter(
this);
256 layoutHistoryTB->addWidget(fHistoryTBTableList);
258 fHistoryTBWidget->setLayout(layoutHistoryTB);
259 return fHistoryTBWidget;
265 QWidget* G4UIQt::CreateHelpTBWidget(
268 fHelpTBWidget =
new QWidget();
270 QWidget *helpWidget =
new QWidget();
271 QHBoxLayout *helpLayout =
new QHBoxLayout();
272 QVBoxLayout *vLayout =
new QVBoxLayout();
273 fHelpVSplitter =
new QSplitter(Qt::Vertical);
274 fHelpLine =
new QLineEdit();
275 helpLayout->addWidget(
new QLabel(
"Search :"));
276 helpLayout->addWidget(fHelpLine);
277 connect( fHelpLine, SIGNAL( editingFinished () ),
this, SLOT( LookForHelpStringCallback() ) );
282 fParameterHelpLabel =
new QTextEdit();
283 fParameterHelpLabel->setReadOnly(
true);
284 fParameterHelpTable =
new QTableWidget();
288 if (fHelpTreeWidget) {
289 fHelpVSplitter->addWidget(fHelpTreeWidget);
291 fHelpVSplitter->addWidget(fParameterHelpLabel);
292 fHelpVSplitter->addWidget(fParameterHelpTable);
294 fParameterHelpLabel->setVisible(
false);
295 fParameterHelpTable->setVisible(
false);
296 QSizePolicy policy = QSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);
297 policy.setVerticalStretch(4);
298 if (fHelpTreeWidget) {
299 fHelpTreeWidget->setSizePolicy(policy);
301 policy = QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Preferred);
302 policy.setVerticalStretch(1);
303 fParameterHelpLabel->setSizePolicy(policy);
304 fParameterHelpTable->setSizePolicy(policy);
306 vLayout->addWidget(helpWidget);
307 vLayout->addWidget(fHelpVSplitter,1);
308 vLayout->setContentsMargins(5,5,5,5);
310 helpWidget->setLayout(helpLayout);
311 fHelpTBWidget->setLayout(vLayout);
313 return fHelpTBWidget;
319 G4UIDockWidget* G4UIQt::CreateCoutTBWidget(
322 const char *
const search[] = {
334 "OOOOOOOOOOOOOOOOOOO",
335 "OOOOOOOOOOOOOOOOOOO",
336 "OOOOOOOo. .oOOOOOO",
339 "OOOOO. XOOOOX .OOOO",
342 "OOOOO. XOOOOo .OOOO",
346 "OOOOOOOOOOOOO. XOO",
347 "OOOOOOOOOOOOOO. XOO",
348 "OOOOOOOOOOOOOOOoOOO",
349 "OOOOOOOOOOOOOOOOOOO",
350 "OOOOOOOOOOOOOOOOOOO",
351 "OOOOOOOOOOOOOOOOOOO",
352 "OOOOOOOOOOOOOOOOOOO"
355 const char *
const clear[] = {
367 "OOOOOOOOOOOOOOOOOOOO",
370 "OOOOOOOOOOOOOOOOOOOO",
371 "OOOOOOOOOOOOOOOOOOOO",
372 "OOOO XXXXXXXXXX OOOO",
373 "OOO XOOOOOOOOOO OOO",
374 "OOOOXOooOooOooO OOOO",
375 "OOOOXOooOooOooO OOOO",
376 "OOOOXOooOooOooO OOOO",
377 "OOOOXOooOooOooO OOOO",
378 "OOOOXOooOooOooO OOOO",
379 "OOOOXOooOooOooO OOOO",
380 "OOOOXOooOooOooO OOOO",
381 "OOOOXOooOooOooO OOOO",
382 "OOOOXOooOooOooO OOOO",
383 "OOOOXOooOooOooO OOOO",
384 "OOOOXOOOOOOOOOO OOOO",
385 "OOOOOooooooooooOOOOO",
386 "OOOOOO........OOOOOO"
389 fSearchIcon =
new QPixmap(search);
390 fClearIcon =
new QPixmap(clear);
392 QWidget* coutTBWidget =
new QWidget();
394 QVBoxLayout *layoutCoutTB =
new QVBoxLayout();
396 fCoutTBTextArea =
new QTextEdit();
399 fCoutTBTextArea->setFontFamily(
"Courier");
400 fCoutTBTextArea->setFontPointSize(12);
402 fCoutFilter =
new QLineEdit();
403 fCoutFilter->setToolTip(
"Filter output by...");
405 #if QT_VERSION > 0x050100
406 fCoutFilter->addAction(*fSearchIcon,QLineEdit::TrailingPosition);
407 fCoutFilter->setStyleSheet (
"border-radius:7px;");
409 QPushButton *coutTBFilterButton =
new QPushButton();
410 coutTBFilterButton->setIcon(*fSearchIcon);
411 coutTBFilterButton->setStyleSheet (
"padding-left: 0px; border:0px;");
412 fCoutFilter->setStyleSheet (
"padding-right: 0px;");
415 QPushButton *coutTBClearButton =
new QPushButton();
416 coutTBClearButton->setIcon(*fClearIcon);
417 coutTBClearButton->setToolTip(
"Clear console output");
418 coutTBClearButton->setStyleSheet (
"border-radius:7px;");
419 connect(coutTBClearButton, SIGNAL(clicked()), SLOT(ClearButtonCallback()));
420 connect(fCoutFilter, SIGNAL(textEdited (
const QString &)), SLOT(CoutFilterCallback(
const QString &)));
422 fCoutTBTextArea->setReadOnly(
true);
424 QWidget* coutButtonWidget =
new QWidget();
425 QHBoxLayout* layoutCoutTBButtons =
new QHBoxLayout();
427 #ifdef G4MULTITHREADED
429 fThreadsFilterComboBox =
new QComboBox();
430 fThreadsFilterComboBox->setInsertPolicy(QComboBox::InsertAlphabetically);
431 connect(fThreadsFilterComboBox, SIGNAL(activated(
int)),
this, SLOT(ThreadComboBoxCallback(
int)));
433 UpdateCoutThreadFilter();
435 fThreadsFilterComboBox->setToolTip(
"Thread selection in output");
436 layoutCoutTBButtons->addWidget(
new QLabel(
" Threads:"));
437 layoutCoutTBButtons->addWidget(fThreadsFilterComboBox);
440 layoutCoutTBButtons->addWidget(fCoutFilter);
441 #if QT_VERSION <= 0x050100
442 layoutCoutTBButtons->addWidget(coutTBFilterButton);
444 layoutCoutTBButtons->addWidget(coutTBClearButton);
445 coutButtonWidget->setLayout(layoutCoutTBButtons);
448 layoutCoutTBButtons->setContentsMargins(3,3,3,0);
450 layoutCoutTB->addWidget(coutButtonWidget);
451 layoutCoutTB->addWidget(fCoutTBTextArea);
453 coutTBWidget->setLayout(layoutCoutTB);
455 fCoutTBTextArea->setMinimumSize(100,100);
458 QWidget* commandLineWidget =
new QWidget();
459 QHBoxLayout *layoutCommandLine =
new QHBoxLayout();
463 fCommandLabel =
new QLabel(
"");
465 fCommandArea =
new QLineEdit();
466 fCommandArea->installEventFilter(
this);
467 fCommandArea->activateWindow();
469 fCommandArea->setFocusPolicy ( Qt::StrongFocus );
470 fCommandArea->setFocus(Qt::TabFocusReason);
471 fCommandArea->setToolTip(
"Apply command");
474 layoutCommandLine->addWidget(fCommandLabel);
475 layoutCommandLine->addWidget(fCommandArea);
478 connect(fCommandArea, SIGNAL(returnPressed()), SLOT(CommandEnteredCallback()));
479 connect(fCommandArea, SIGNAL(textEdited(
const QString &)), SLOT(CommandEditedCallback(
const QString &)));
482 commandLineWidget->setLayout(layoutCommandLine);
483 commandLineWidget->setMinimumSize(50,50);
485 layoutCoutTB->addWidget(commandLineWidget);
487 fCoutDockWidget =
new G4UIDockWidget (
"Output");
488 fCoutDockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
490 fCoutDockWidget->setWidget(coutTBWidget);
491 return fCoutDockWidget;
497 QWidget* G4UIQt::CreateVisParametersTBWidget(
506 G4UIDockWidget* G4UIQt::CreateUITabWidget(
509 fUITabWidget =
new QTabWidget();
512 fUITabWidget->addTab(CreateSceneTreeComponentsTBWidget(),
"Scene tree");
513 fUITabWidget->addTab(CreateHelpTBWidget(),
"Help");
514 fUITabWidget->addTab(CreateHistoryTBWidget(),
"History");
515 fUITabWidget->setCurrentWidget(fHelpTBWidget);
517 fUITabWidget->setTabToolTip (0,
"Scene component tree. Only available in Stored mode");
518 fUITabWidget->setTabToolTip (1,
"Help widget");
519 fUITabWidget->setTabToolTip (2,
"All commands history");
520 connect(fUITabWidget, SIGNAL(currentChanged(
int)), SLOT(ToolBoxActivated(
int)));
522 fUIDockWidget =
new G4UIDockWidget (
"Scene tree, Help, History");
523 fUIDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
525 fUIDockWidget->setWidget(fUITabWidget);
527 return fUIDockWidget;
531 QWidget* G4UIQt::CreateSceneTreeComponentsTBWidget(){
533 fSceneTreeComponentsTBWidget =
new QTabWidget();
535 #if QT_VERSION < 0x040200
536 fSceneTreeComponentsTBWidget->hide();
538 fSceneTreeComponentsTBWidget->setVisible(
false);
541 return fSceneTreeComponentsTBWidget;
545 QWidget* G4UIQt::CreateViewerWidget(){
549 SetStartPage(std::string(
"<table width='100%'><tr><td width='30%'></td><td><div ")+
550 "style='color: rgb(140, 31, 31); font-size: xx-large; font-family: Garamond, serif; padding-bottom: 0px; font-weight: normal'>Geant4: "+
551 QApplication::applicationName ().toStdString()+
552 "</div></td><td width='40%'> <br/><i>http://geant4.web.cern.ch/geant4/</i></td></tr></table>"+
554 "<div style='background:#EEEEEE;'><b>Tooltips :</b><ul>"+
555 "<li><b>Start a new viewer :</b><br />"+
556 "<i>'/vis/open/...'<br />"+
557 "For example '/vis/open OGL'</i></li>"+
558 "<li><b>Execute a macro file :</b><br />"+
559 "<i>'/control/execute my_macro_file'</i></li>"+
562 "<div style='background:#EEEEEE;'><b>Documentation :</b><ul>"+
563 "<li><b>Visualization tutorial :</b><br />"+
564 "<i><a href='http://geant4.in2p3.fr/spip.php?article60&lang=en'>Geant4 Qt User Interface tutorial </a>: http://geant4.in2p3.fr/spip.php?article60&lang=en</i></li>"+
565 "<li><b>Visualisation publication :</b><br />"+
566 "<i><a href='http://www.worldscientific.com/doi/abs/10.1142/S1793962313400011'>The Geant4 Visualization System - A Multi-Driver Graphics System</b><br />, Allison, J. et al., International Journal of Modeling, Simulation, and Scientific Computing, Vol. 4, Suppl. 1 (2013) 1340001</a>:<br/> http://www.worldscientific.com/doi/abs/10.1142/S1793962313400011</i></li>"+
569 "<div style='background:#EEEEEE;'><b>Getting Help :</b><ul>"+
570 "<li><b>If problems arise, try <a href='http://geant4-hn.slac.stanford.edu:5090/Geant4-HyperNews/index'>browsing the user forum</a> to see whether or not your problem has already been encountered.<br /> If it hasn't, you can post it and Geant4 developers will do their best to find a solution. This is also a good place to<br /> discuss Geant4 topics in general.</b> http://geant4-hn.slac.stanford.edu:5090/Geant4-HyperNews/index"+
571 "<li><b>Get a look at <a href='http://geant4.kek.jp/geant4/support/index.shtml'>Geant4 User support pages</a>: <i>http://geant4.kek.jp/geant4/support/index.shtml</i></b></li>"+
577 if (fViewerTabWidget == NULL) {
578 fViewerTabWidget =
new G4QTabWidget();
579 #if QT_VERSION < 0x040500
581 fViewerTabWidget->setTabsClosable (
true);
584 #if QT_VERSION < 0x040200
586 fViewerTabWidget->setUsesScrollButtons (
true);
589 #if QT_VERSION < 0x040500
591 connect(fViewerTabWidget, SIGNAL(tabCloseRequested(
int)),
this, SLOT(TabCloseCallback(
int)));
593 connect(fViewerTabWidget, SIGNAL(currentChanged (
int ) ), SLOT(UpdateTabWidget(
int)));
597 QSizePolicy policy = QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
598 policy.setVerticalStretch(4);
599 fViewerTabWidget->setSizePolicy(policy);
601 fViewerTabWidget->setMinimumSize(40,40);
603 return fViewerTabWidget;
609 QTabWidget* G4UIQt::GetSceneTreeComponentsTBWidget(
612 return fSceneTreeComponentsTBWidget;
620 bool G4UIQt::AddViewerTab(
625 if (fViewerTabWidget == NULL) {
628 fViewerTabWidget->addTab(aWidget,title.c_str());
636 bool G4UIQt::AddViewerTabFromFile(
641 if (fViewerTabWidget == NULL) {
646 if(UI==NULL)
return 0;
647 std::ifstream file(UI->
FindMacroPath(fileName.c_str()).data());
650 std::string content( (std::istreambuf_iterator<char>(file) ),
651 (std::istreambuf_iterator<char>() ) );
653 QTextEdit* text =
new QTextEdit();
654 text->setAcceptRichText (
true);
655 text->setContentsMargins(5,5,5,5);
656 text->setText(QString(
"<pre>")+content.c_str()+
"</pre>");
657 text->setReadOnly(
true);
658 fViewerTabWidget->addTab(text,title.c_str());
669 bool G4UIQt::AddTabWidget(
680 #if QT_VERSION < 0x050100
681 #if QT_VERSION >= 0x050000
682 QString message = QString(
683 "This Qt version [")+qVersion ()+
"] has some issues with the OpenGL viewer.\n"+
684 "To prevent problems, you are not allowed to open a Store nor Immediate viewer.\n" +
686 "Please upgrade to Qt version >= 5.1\n";
688 QMessageBox::warning(fMainWindow, tr(
"Warning"),
689 tr(message.toStdString().c_str()),
696 if (fViewerTabWidget == NULL) {
697 fViewerTabWidget =
new G4QTabWidget();
698 #if QT_VERSION < 0x040500
700 fViewerTabWidget->setTabsClosable (
true);
703 #if QT_VERSION < 0x040200
705 fViewerTabWidget->setUsesScrollButtons (
true);
708 #if QT_VERSION < 0x040500
710 connect(fViewerTabWidget, SIGNAL(tabCloseRequested(
int)),
this, SLOT(TabCloseCallback(
int)));
712 connect(fViewerTabWidget, SIGNAL(currentChanged (
int ) ), SLOT(UpdateTabWidget(
int)));
719 aWidget->setParent(fViewerTabWidget);
722 fViewerTabWidget->addTab(aWidget,name);
724 fViewerTabWidget->setCurrentIndex(fViewerTabWidget->count()-1);
727 #if QT_VERSION < 0x040200
728 fViewerTabWidget->setLastTabCreated(fViewerTabWidget->currentIndex());
730 fViewerTabWidget->setLastTabCreated(fViewerTabWidget->currentIndex());
741 void G4UIQt::SetStartPage(
742 const std::string& text)
745 fDefaultViewerFirstPageHTMLText = text;
748 fStartPage =
new QTextEdit();
749 fStartPage->setAcceptRichText (
true);
750 fStartPage->setContentsMargins(5,5,5,5);
751 fStartPage->setReadOnly(
true);
753 fStartPage->setText(fDefaultViewerFirstPageHTMLText.c_str());
757 void G4UIQt::UpdateTabWidget(
int tabNumber) {
758 if ( fViewerTabWidget == NULL) {
759 fViewerTabWidget =
new G4QTabWidget;
762 fViewerTabWidget->setCurrentIndex(tabNumber);
765 fViewerTabWidget->setTabSelected(
false);
767 #if QT_VERSION < 0x040200
768 fViewerTabWidget->show();
770 fViewerTabWidget->setVisible(
true);
774 fViewerTabWidget->setTabSelected(
true);
780 void G4UIQt::ResizeTabWidget( QResizeEvent* e) {
781 if ( fViewerTabWidget) {
782 for (
G4int a=0;
a<fViewerTabWidget->count() ;
a++) {
783 fViewerTabWidget->widget(
a)->resize(e->size());
794 G4Qt* interactorManager = G4Qt::getInstance ();
798 QCoreApplication::sendPostedEvents () ;
800 #if QT_VERSION < 0x040200
803 fMainWindow->setVisible(
true);
807 fCommandArea->setFocus();
809 interactorManager->DisableSecondaryLoop ();
810 if ((QApplication*)interactorManager->GetMainInteractor())
811 ((QApplication*)interactorManager->GetMainInteractor())->exec();
813 interactorManager->EnableSecondaryLoop ();
823 void G4UIQt::Prompt (
827 if (!aPrompt)
return;
829 fCommandLabel->setText((
char*)aPrompt.
data());
834 void G4UIQt::SessionTerminate (
837 G4Qt* interactorManager = G4Qt::getInstance ();
838 fMainWindow->close();
839 ((QApplication*)interactorManager->GetMainInteractor())->exit();
852 void G4UIQt::PauseSessionStart (
858 if(aState==
"G4_pause> ") {
859 SecondaryLoop (
"Pause, type continue to exit this state");
862 if(aState==
"EndOfEvent") {
864 SecondaryLoop (
"End of event, type continue to exit this state");
874 void G4UIQt::SecondaryLoop (
878 if (!aPrompt)
return;
880 G4Qt* interactorManager = G4Qt::getInstance ();
884 ((QApplication*)interactorManager)->processEvents(QEventLoop::WaitForMoreEvents);
885 if(exitPause==
true)
break;
890 #ifdef G4MULTITHREADED
904 G4int G4UIQt::ReceiveG4cout (
908 if (!aString)
return 0;
910 #ifdef G4MULTITHREADED
916 if (aString.
contains(
"*** This is just a warning message. ***")) {
917 return ReceiveG4cerr(aString);
923 G4UIOutputString txt = G4UIOutputString(QString((
char*)aString.
data()).trimmed(),GetThreadPrefix());
924 fG4OutputString.push_back(txt);
926 #ifdef G4MULTITHREADED
927 QString result = FilterOutput(txt,fThreadsFilterComboBox->currentText(),fCoutFilter->text());
929 QString result = FilterOutput(txt,
"",fCoutFilter->text());
932 if (result.isEmpty()) {
935 QColor previousColor = fCoutTBTextArea->textColor();
936 fCoutTBTextArea->setTextColor(Qt::black);
937 fCoutTBTextArea->append(result);
938 fCoutTBTextArea->setTextColor(previousColor);
939 fCoutTBTextArea->ensureCursorVisible ();
941 #ifdef G4MULTITHREADED
942 UpdateCoutThreadFilter();
953 G4int G4UIQt::ReceiveG4cerr (
957 if (!aString)
return 0;
959 #ifdef G4MULTITHREADED
966 G4UIOutputString txt = G4UIOutputString(QString((
char*)aString.
data()).trimmed(),
969 fG4OutputString.push_back(txt);
971 #ifdef G4MULTITHREADED
972 QString result = FilterOutput(txt,fThreadsFilterComboBox->currentText(),fCoutFilter->text());
974 QString result = FilterOutput(txt,
"",fCoutFilter->text());
976 if (result.isEmpty()) {
981 if (QString(aString.
data()).trimmed() !=
"") {
985 QMessageBox::critical(fMainWindow,
"Error",QString(fLastErrMessage.data())+
"\n"+aString.
data());
988 QColor previousColor = fCoutTBTextArea->textColor();
989 fCoutTBTextArea->setTextColor(
Qt::red);
990 fCoutTBTextArea->append(result);
991 fCoutTBTextArea->setTextColor(previousColor);
992 fCoutTBTextArea->ensureCursorVisible ();
994 if (QString(aString.
data()).trimmed() !=
"") {
995 fLastErrMessage = aString;
997 #ifdef G4MULTITHREADED
998 UpdateCoutThreadFilter();
1004 G4String G4UIQt::GetThreadPrefix() {
1006 #ifdef G4MULTITHREADED
1008 if(UI==NULL)
return "";
1016 return threadPrefix;
1020 #ifdef G4MULTITHREADED
1021 void G4UIQt::UpdateCoutThreadFilter() {
1023 if(UI==NULL)
return;
1026 if (fThreadsFilterComboBox->count() < 2) {
1027 if ( fThreadsFilterComboBox->findText(
"All", Qt::MatchExactly) == -1) {
1028 fThreadsFilterComboBox->addItem(
"All");
1031 if (fThreadsFilterComboBox->count() < 2) {
1032 if ( fThreadsFilterComboBox->findText(
"Master", Qt::MatchExactly) == -1) {
1033 fThreadsFilterComboBox->addItem(
"Master");
1039 if ( fThreadsFilterComboBox->findText(prefix.
data(), Qt::MatchExactly) == -1) {
1040 fThreadsFilterComboBox->addItem(prefix.
data());
1052 void G4UIQt::AddMenu (
1057 if (aName == NULL)
return;
1058 if (aLabel == NULL)
return;
1060 QMenu *fileMenu =
new QMenu(aLabel);
1061 fMainWindow->menuBar()->addMenu(fileMenu);
1073 void G4UIQt::AddButton (
1076 ,
const char* aCommand
1079 if(aMenu==NULL)
return;
1080 if(aLabel==NULL)
return;
1081 if(aCommand==NULL)
return;
1083 QMenu *parentTmp = (QMenu*)GetInteractor(aMenu);
1085 if(parentTmp==NULL) {
1090 G4cout <<
"Menu name " << aMenu<<
" does not exist, please define it before using it."<<
G4endl;
1097 if(UI==NULL)
return;
1101 G4int cmdEndPos = cmd.find_first_of(
" \t");
1102 if(cmdEndPos!=
G4int(std::string::npos)) {
1103 cmd.erase(cmdEndPos);
1106 if(treeTop->
FindPath(cmd) == NULL) {
1111 G4cout <<
"Warning: command '"<< cmd <<
"' does not exist, please define it before using it."<<
G4endl;
1115 QSignalMapper *signalMapper =
new QSignalMapper(
this);
1116 QAction *action = parentTmp->addAction(aLabel, signalMapper, SLOT(map()));
1118 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(ButtonCallback(
const QString&)));
1119 signalMapper->setMapping(action, QString(aCommand));
1128 void G4UIQt::AddIcon(
const char* aLabel,
const char* aIconFile,
const char* aCommand,
const char* aFileName){
1129 if(aLabel==NULL)
return;
1131 if (aCommand==NULL) {
1132 if (std::string(aIconFile) ==
"user_icon") {
1137 bool userToolBar =
false;
1139 if (std::string(aIconFile) ==
"user_icon") {
1147 G4cout <<
"Warning: file '"<< aFileName <<
"' is incorrect or does not exist, this command will not be build"<<
G4endl;
1152 }
else if (std::string(aIconFile) ==
"open") {
1153 const char *
const xpm[]={
1196 " =)!)!!!!~ *#$'' ",
1197 " {]^/((_({- %%%%%%%%%%% ",
1198 " {(^_^^^^:<{{{{{{{{{{{{{[& ",
1199 " {/_/(((((/]]]]]]]]]]]/]!# ",
1200 " {/^(((((_^^^^^^^^^^^^^^:# ",
1201 " {/^(((_^^____________^^}$ ",
1202 " {/^(((((/////////////((!# ",
1203 " {/^/^_:<|||||||||||||||@@****1 ",
1204 " {/^/^(<[)||||||||||||||))!!}<; ",
1205 " {/^_(:|234444444444444444432)1 ",
1206 " {/_^/<)34444444444444444443}, ",
1207 " {/^(2{:41111111111111111142|5 ",
1208 " {3^3<:31111111111111111143}- ",
1209 " {/^2<:31111111111111111441|' ",
1210 " {_/<:41111111111111111143}, ",
1211 " {(4<:31111111111111111144!# ",
1212 " )4))44111111111111111144}, ",
1213 " )2<:31111111111111111144{# ",
1214 " @|:14444444444444444444}* ",
1215 " ;@434444444444444444434<# ",
1216 " ;[))))))))))))))))))))!~ ",
1217 " ++++++++++++++++++++++;% ",
1223 }
else if (std::string(aIconFile) ==
"save") {
1224 const char *
const xpm[]={
1252 " +++++++++++++++++++++++++ ",
1253 " +@##+$%%%%%%%%%%%%%%%&*$%&+ ",
1254 " +=-;@>,,''',,,,,,,',,)&!,)+ ",
1255 " +;-~@>,,,,,,,,,,,,,,,>$!,)+ ",
1256 " +=-~@>,,,,,{]]]]]^,,,>*&$&+ ",
1257 " +=-~@>,,,,,'{^{^^{,,,>*#=#+ ",
1258 " +=-~@>,,,,,,,,,,,,,,,>@~/=+ ",
1259 " +=-~@>,,,{{{''''{',,,>@~-=+ ",
1260 " +=-~@>,,'^]]]]]]({,,,>@~-=+ ",
1261 " +=-~@>,,,{{{{{{{{{,,,>@~-=+ ",
1262 " +=-~@>,,,,,'{^{{^{,,,>@~-=+ ",
1263 " +=-~@>,,,,,]]]]]]],,,>@~-=+ ",
1264 " +=-~*>,,,,,,,,,,,,,,,>@~-=+ ",
1265 " +=-~@>,,,,,,,,,,,,,,,>@~-=+ ",
1266 " +=-/=$%%%%%%%%%%%%%%%$=/-=+ ",
1267 " +=---;###############;---=+ ",
1268 " +=---////////////////----=+ ",
1269 " +=----------------///----=+ ",
1270 " +=---=@##############@#--=+ ",
1271 " +=---@+++++++++++*%))_+~-=+ ",
1272 " +=---#+++++++++++&:,,>@~-=+ ",
1273 " +=---#+++++++++++$',,>@~-=+ ",
1274 " +=---#+++++++++++&!,,>@~-=+ ",
1275 " +=/--#+++++++++++&',,>@~-=+ ",
1276 " @;--#+++++++++++$',,>@~-=+ ",
1277 " @;;@+++++++++++*)!>%@=;#+ ",
1278 " @++++++++++++++*&**++@++ ",
1284 }
else if (std::string(aIconFile) ==
"move") {
1285 const char *
const xpm[]={
1318 " ')&$$$$*@@ @@*$$$$&)' ",
1319 " ')&$$$$*@@ @@*$$$$&+' ",
1338 }
else if (std::string(aIconFile) ==
"rotate") {
1339 const char *
const xpm[]={
1375 " --------!*{{{*&, ",
1376 " -------=){*{{{>>{) ",
1377 " ,!-----= ){& ,&{{@",
1378 " ,*>!----= &>& )@",
1381 " @{* '! ,-!=~^,@ ",
1382 " @& == {/(----!^ ",
1385 " !-!!======!!(((---! ",
1386 " ='--------------! ",
1403 }
else if (std::string(aIconFile) ==
"pick") {
1404 const char *
const xpm[]={
1442 }
else if (std::string(aIconFile) ==
"zoom_in") {
1443 const char *
const xpm[]={
1465 " ++.%%%+&&&*%%.++ ",
1466 " .+#%%%%+&&&*%%.#+ ",
1467 " ++..%%%+&&&*%%%.++ ",
1468 " +#.+++++&&&*++++.+ ",
1469 " @.+&&&&&&&&&&&&&+@ ",
1470 " @#+&&&&&&&&&&&&&+@ ",
1471 " @.+&&&&&&&&&&&&&+. ",
1472 " +++@***+&&&****@+. ",
1473 " ....++++&&&*++++.. ",
1474 " ++.===+&&&*%=.++ ",
1475 " @..==+&&&*=..@#& ",
1476 " .@+#.+&&&@-+@@*@ ",
1477 " +++.++++++ *+@* ",
1490 }
else if (std::string(aIconFile) ==
"zoom_out") {
1491 const char *
const xpm[]={
1513 " ++.$$$$$$$$$$.++ ",
1514 " .+#$$$$$$$$$$$.#+ ",
1515 " ++..$$$$$$$$$$$.++ ",
1516 " +#.+++++++++++++.+ ",
1517 " @.+&&&&&&&&&&&&&+@ ",
1518 " @#+&&&&&&&&&&&&&+@ ",
1519 " @.+&&&&&&&&&&&&&+. ",
1520 " +++@***********@+. ",
1521 " ....++++++++++++.. ",
1522 " ++.===$$$$$$=.++ ",
1523 " @..===$$$$=..@#& ",
1524 " .@+#.$$$..-+@@*@ ",
1525 " +++#--.+++ *+@* ",
1538 }
else if (std::string(aIconFile) ==
"wireframe") {
1539 const char *
const xpm[]={
1568 " +&********&@-***; ",
1569 " +@@@&**&@@@@@@$ @*-&>&+ ",
1570 " +*****&+ %*@ ,**'# ",
1571 " @***)!~ @*{&*****+ ",
1572 " @*!]***&+ +-*^**'~!*@ ",
1573 " @*~ +@&**&@@@@@@&****&+ ~*@ ",
1574 " @*@ +&********&-*= @*@ ",
1575 " @*@ $%@-*-@$ @*@ @*@ ",
1576 " @*@ @*@ %*% @*@ ",
1577 " @*@ %*% %*% @*@ ",
1578 " @*@ %*% %*% @*@ ",
1579 " @*@ %*% %*% @*@ ",
1580 " @*@ %*% %*% @*@ ",
1581 " @*@ %*% %*% @*@ ",
1582 " @*@ @*@ %*% @*@ ",
1583 " @*@ =*-+ @*@ @*@ ",
1584 " @*@ $%@@&****&@-*-+ @*@ ",
1585 " @*@ $@&*****&@@&******&~~!*@ ",
1586 " @*{/***&@@%$ $@-*-&*****+ ",
1587 " @*)*)(-~ @*@ ~)**] ",
1588 " +*******&@@@@+ %*_+]**] ",
1589 " +@@@@@&******&@%+_*^**]# ",
1590 " $%@@@&****:**&+ ",
1599 }
else if (std::string(aIconFile) ==
"solid") {
1600 const char *
const xpm[]={
1638 " +-;>>>>>>>>>,')!~ ",
1639 " {]@@-;>>>>>>>>>>>>^/(_= ",
1640 " {:>>>>>>>>>>>>>>>>><//[)!= ",
1641 " ]>>>>>>>>>>>>>>>>>><////[)} ",
1642 " @>>>>>>>>>>>>>>>>>><//////| ",
1643 " @>>>>>>>>>>>>>>>>>><//////| ",
1644 " @>>>>>>>>>>>>>>>>>><//////| ",
1645 " @>>>>>>>>>>>>>>>>>><//////| ",
1646 " @>>>>>>>>>>>>>>>>>><//////| ",
1647 " @>>>>>>>>>>>>>>>>>><//////| ",
1648 " @>>>>>>>>>>>>>>>>>><//////| ",
1649 " @>>>>>>>>>>>>>>>>>><//////| ",
1650 " @>>>>>>>>>>>>>>>>>><//////| ",
1651 " @>>>>>>>>>>>>>>>>>><//////| ",
1652 " @>>>>>>>>>>>>>>>>>><//////| ",
1653 " @>>>>>>>>>>>>>>>>>><//////| ",
1654 " @>>>>>>>>>>>>>>>>>><//////| ",
1655 " @>>>>>>>>>>>>>>>>>><//////| ",
1656 " @>>>>>>>>>>>>>>>>>></////[1 ",
1657 " @>>>>>>>>>>>>>>>>>><////[*2 ",
1658 " {:>>>>>>>>>>>>>>>>><//[)12 ",
1659 " +@@@@@-;>>>>>>>>>><[)13 ",
1669 }
else if (std::string(aIconFile) ==
"hidden_line_removal") {
1670 const char *
const xpm[]={
1690 " +#$$$$$$$$#@&$$$* ",
1691 " =-@@#$$#@@@@@-= @$&#;>= ",
1692 " =$$$$$#+ -$@ *$$%+ ",
1693 " -$&@-= -$- #$$$= ",
1709 " -$&@@@-= -$- =>;, ",
1710 " =$$$$$$$#@@@-= -$'+#$$, ",
1711 " =-@@@@#$$$$$$#@-+'$)$$#+ ",
1712 " =-@@@#$$$$)$$#+ ",
1721 }
else if (std::string(aIconFile) ==
"hidden_line_and_surface_removal") {
1722 const char *
const xpm[]={
1768 " ++@%####&*=-#+;>, ",
1769 " +++++@'=)))))))!)~+{]^++ ",
1770 " +$%&*=)!!!!!!!!!)~+/(]_+++ ",
1771 " +#-))!!!!!!!!!!!)~+/(::<[+ ",
1772 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1773 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1774 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1775 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1776 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1777 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1778 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1779 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1780 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1781 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1782 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1783 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1784 " +#)!!!!!!!!!!!!!!}+/::::{+ ",
1785 " +#)!!!!!!!!!!!!!!}+/:::|1+ ",
1786 " +$#}}~23!!!!!!!!)~+/(]45, ",
1787 " +++++++@#}}~23!!)~+678++ ",
1788 " ++++++@#~90+a++ ",
1798 }
else if (std::string(aIconFile) ==
"perspective") {
1799 const char *
const xpm[]={
1809 " ................ ",
1810 " ....+++++++++++++++. ",
1811 " ...++++..+.........+++. ",
1812 " ..++..............++..+. ",
1813 " .+++++++++++++++++.. .+. ",
1814 " .+...............+. .+. ",
1815 " .+. .+. .+. .+. ",
1816 " .+. .+. .+. .+. ",
1817 " .+. .+. .+. .+. ",
1818 " .+. .+. .+. .+. ",
1819 " .+. .+. .+. .+. ",
1820 " .+. .+. .+. .+. ",
1821 " .+. .+. .+. .+. ",
1822 " .+. .+. .+. .+. ",
1823 " .+. .+......+....+. ",
1824 " .+. ..++++++.+.++++. ",
1825 " .+. .++.......+...+.. ",
1826 " .+. .++. .+..++. ",
1827 " .+. ..+.. .+..+. ",
1830 " .+++.............++. ",
1831 " .+++++++++++++++++. ",
1832 " ................... ",
1838 }
else if (std::string(aIconFile) ==
"ortho") {
1839 const char *
const xpm[]={
1847 " ................... ",
1848 " ..@@@@@@@@@@@@@@@@@. ",
1849 " ..@@@.............@@@. ",
1850 " ..@@.@. ..@..@. ",
1851 " ..@@ ..@. .@@...@. ",
1852 " ..@@..............@@.. .@. ",
1853 " .@@@@@@@@@@@@@@@@@.. .@. ",
1854 " .@...............@. .@. ",
1855 " .@. .@. .@. .@. ",
1856 " .@. .@. .@. .@. ",
1857 " .@. .@. .@. .@. ",
1858 " .@. .@. .@. .@. ",
1859 " .@. .@. .@. .@. ",
1860 " .@. .@. .@. .@. ",
1861 " .@. .@. .@. .@. ",
1862 " .@. .@. .@. .@. ",
1863 " .@. .@. .@. .@. ",
1864 " .@. .@. .@. .@. ",
1865 " .@. .@........@......@. ",
1866 " .@. .@@@@@@@@@.@.@@@@@@. ",
1867 " .@. .@@+........@....@@.. ",
1868 " .@...@. .@...@... ",
1870 " .@@@.............@@@.. ",
1871 " .@@@@@@@@@@@@@@@@@... ",
1872 " ................... ",
1883 G4cout <<
"Parameter"<< aIconFile <<
" not defined"<<
G4endl;
1887 QToolBar *currentToolbar = NULL;
1889 if (fToolbarUser == NULL) {
1890 fToolbarUser =
new QToolBar();
1891 fToolbarUser->setIconSize (QSize(20,20));
1892 fMainWindow->addToolBar(Qt::TopToolBarArea, fToolbarUser);
1894 currentToolbar = fToolbarUser;
1896 if (fToolbarApp == NULL) {
1897 fToolbarApp =
new QToolBar();
1898 fToolbarApp->setIconSize (QSize(20,20));
1899 fMainWindow->addToolBar(Qt::TopToolBarArea, fToolbarApp);
1901 currentToolbar = fToolbarApp;
1904 QSignalMapper *signalMapper =
new QSignalMapper(
this);
1905 QAction *action = currentToolbar->addAction(pix,aLabel, signalMapper, SLOT(map()));
1909 if (std::string(aIconFile) ==
"open") {
1910 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(OpenIconCallback(
const QString &)));
1911 QString txt = aCommand + fStringSeparator + aLabel;
1912 signalMapper->setMapping(action, QString(txt));
1915 }
else if (std::string(aIconFile) ==
"save") {
1916 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(SaveIconCallback(
const QString&)));
1917 QString txt = aCommand + fStringSeparator + aLabel;
1918 signalMapper->setMapping(action, QString(txt));
1921 }
else if ((std::string(aIconFile) ==
"move") ||
1922 (std::string(aIconFile) ==
"rotate") ||
1923 (std::string(aIconFile) ==
"pick") ||
1924 (std::string(aIconFile) ==
"zoom_out") ||
1925 (std::string(aIconFile) ==
"zoom_in")) {
1926 action->setCheckable(
TRUE);
1927 action->setChecked(
TRUE);
1928 action->setData(aIconFile);
1930 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(ChangeCursorStyle(
const QString&)));
1931 signalMapper->setMapping(action, QString(aIconFile));
1933 if (std::string(aIconFile) ==
"move") {
1934 SetIconMoveSelected();
1936 if (std::string(aIconFile) ==
"rotate") {
1937 SetIconRotateSelected();
1939 if (std::string(aIconFile) ==
"pick") {
1940 SetIconPickSelected();
1942 if (std::string(aIconFile) ==
"zoom_in") {
1943 SetIconZoomInSelected();
1945 if (std::string(aIconFile) ==
"zoom_out") {
1946 SetIconZoomOutSelected();
1950 }
else if ((std::string(aIconFile) ==
"hidden_line_removal") ||
1951 (std::string(aIconFile) ==
"hidden_line_and_surface_removal") ||
1952 (std::string(aIconFile) ==
"solid") ||
1953 (std::string(aIconFile) ==
"wireframe")) {
1954 action->setCheckable(
TRUE);
1955 action->setChecked(
TRUE);
1956 action->setData(aIconFile);
1957 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(ChangeSurfaceStyle(
const QString&)));
1958 signalMapper->setMapping(action, QString(aIconFile));
1960 if (std::string(aIconFile) ==
"hidden_line_removal") {
1961 SetIconHLRSelected();
1963 if (std::string(aIconFile) ==
"hidden_line_and_surface_removal") {
1964 SetIconHLHSRSelected();
1966 if (std::string(aIconFile) ==
"solid") {
1967 SetIconSolidSelected();
1969 if (std::string(aIconFile) ==
"wireframe") {
1970 SetIconWireframeSelected();
1974 }
else if ((std::string(aIconFile) ==
"perspective") ||
1975 (std::string(aIconFile) ==
"ortho")) {
1976 action->setCheckable(
TRUE);
1977 action->setChecked(
TRUE);
1978 action->setData(aIconFile);
1979 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(ChangePerspectiveOrtho(
const QString&)));
1980 signalMapper->setMapping(action, QString(aIconFile));
1982 if (std::string(aIconFile) ==
"perspective") {
1983 SetIconPerspectiveSelected();
1985 if (std::string(aIconFile) ==
"ortho") {
1986 SetIconOrthoSelected();
1993 if(UI==NULL)
return;
1995 if (aCommand != NULL) {
1996 if(treeTop->
FindPath(aCommand) == NULL) {
2001 G4cout <<
"Warning: command '"<< aCommand <<
"' does not exist, please define it before using it."<<
G4endl;
2006 connect(signalMapper, SIGNAL(mapped(
const QString &)),
this, SLOT(ButtonCallback(
const QString&)));
2007 signalMapper->setMapping(action, QString(aCommand));
2013 void G4UIQt::ActivateCommand(
2017 if (!fHelpTreeWidget) {
2021 size_t i = newCommand.
index(
" ");
2023 if( i != std::string::npos )
2025 G4String newValue = newCommand(i+1,newCommand.length()-(i+1));
2027 targetCom = ModifyToFullPathCommand( newValue );
2029 if (targetCom !=
"") {
2030 OpenHelpTreeOnCommand(targetCom.
data());
2033 fUITabWidget->setCurrentWidget(fHelpTBWidget);
2044 void G4UIQt::InitHelpTreeAndVisParametersWidget()
2047 if (! fHelpTreeWidget ) {
2048 fHelpTreeWidget =
new QTreeWidget();
2052 fHelpTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
2054 labels << QString(
"Command");
2055 fHelpTreeWidget->setHeaderLabels(labels);
2058 connect(fHelpTreeWidget, SIGNAL(itemSelectionChanged ()),
this, SLOT(HelpTreeClicCallback()));
2059 connect(fHelpTreeWidget, SIGNAL(itemDoubleClicked (QTreeWidgetItem*,
int)),
this, SLOT(HelpTreeDoubleClicCallback()));
2068 void G4UIQt::FillHelpTree()
2070 if (! fHelpTreeWidget ) {
2071 InitHelpTreeAndVisParametersWidget();
2074 QString searchText = fHelpLine->text();
2076 if (searchText ==
"") {
2083 if (fParameterHelpLabel) {
2084 fParameterHelpLabel->setText(
"Choose a command in the command tree");
2085 fParameterHelpTable->setVisible(
false);
2089 #if QT_VERSION < 0x040200
2092 fHelpLine->setText(
"");
2097 if(UI==NULL)
return;
2101 QTreeWidgetItem * newItem = NULL;
2102 QString commandText =
"";
2103 for (
int a=0;
a<treeSize;
a++) {
2110 for (
int b=0;b<fHelpTreeWidget->topLevelItemCount();b++) {
2112 newItem = FindTreeItem(fHelpTreeWidget->topLevelItem(b),commandText);
2115 if (newItem == NULL) {
2117 newItem =
new QTreeWidgetItem();
2118 newItem->setText(0,GetShortCommandPath(commandText));
2119 fHelpTreeWidget->addTopLevelItem(newItem);
2123 CreateHelpTree(newItem,treeTop->
GetTree(
a+1));
2134 void G4UIQt::CreateHelpTree(
2135 QTreeWidgetItem *aParent
2139 if (aParent == NULL)
return;
2140 if (aCommandTree == NULL)
return;
2144 QTreeWidgetItem * newItem;
2146 QString commandText =
"";
2150 commandText = QString((
char*)(aCommandTree->
GetTree(
a+1)->
GetPathName()).data()).trimmed();
2153 newItem = FindTreeItem(aParent,commandText);
2154 if (newItem == NULL) {
2155 newItem =
new QTreeWidgetItem();
2156 newItem->setText(0,GetShortCommandPath(commandText));
2157 aParent->addChild(newItem);
2159 CreateHelpTree(newItem,aCommandTree->
GetTree(
a+1));
2166 QStringList stringList;
2170 newItem = FindTreeItem(aParent,commandText);
2171 if (newItem == NULL) {
2172 newItem =
new QTreeWidgetItem();
2173 newItem->setText(0,GetShortCommandPath(commandText));
2174 aParent->addChild(newItem);
2176 #if QT_VERSION < 0x040202
2177 fHelpTreeWidget->setItemExpanded(newItem,
false);
2179 newItem->setExpanded(
false);
2193 bool G4UIQt::CreateVisCommandGroupAndToolBox(
2200 QString commandText = QString((
char*)(aCommand->
GetCommandPath().
data())).section(
"/",-aDepthLevel);
2202 if (commandText == NULL) {
2208 QWidget* newParentWidget = NULL;
2210 QString commandSection = commandText.left(commandText.indexOf(
"/"));
2212 if (aDepthLevel == 1) {
2213 QToolBox* currentParent =
dynamic_cast<QToolBox*
>(aParent);
2214 if (currentParent != 0){
2217 for (
int a=0;
a<currentParent->count();
a++) {
2218 if (currentParent->itemText(
a) == commandSection) {
2220 newParentWidget = currentParent->widget(
a);
2226 newParentWidget =
new QGroupBox();
2227 newParentWidget->setLayout(
new QVBoxLayout());
2228 if (currentParent != 0){
2229 currentParent->addItem(newParentWidget,commandSection);
2231 if (!aParent->layout()) {
2232 aParent->setLayout(
new QVBoxLayout());
2234 aParent->layout()->addWidget(newParentWidget);
2237 if (commandText.indexOf(
"/") == -1) {
2242 for(
G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) {
2243 guidance += QString((
char*)(aCommand->
GetGuidanceLine(i_thGuidance)).data()) +
"\n";
2245 newParentWidget->setToolTip(guidance);
2248 QScrollArea* sc =
dynamic_cast<QScrollArea*
>(newParentWidget->parent()->parent());
2250 sc->ensureWidgetVisible(newParentWidget);
2257 QGroupBox* currentParent =
dynamic_cast<QGroupBox*
>(aParent);
2258 if (currentParent != 0){
2262 if (aDepthLevel == 2){
2263 QToolBox* parentToolBox =
dynamic_cast<QToolBox*
>(currentParent->parent()->parent()->parent());
2264 if (parentToolBox != 0) {
2268 for (
int a=0;
a<aParent->layout()->count();
a++) {
2269 QGroupBox* gb =
dynamic_cast<QGroupBox*
>(aParent->layout()->itemAt(
a)->widget());
2271 if (gb->title() == commandSection) {
2273 newParentWidget = gb;
2281 newParentWidget =
new QGroupBox();
2282 newParentWidget->setLayout(
new QVBoxLayout());
2283 if (!aParent->layout()) {
2284 aParent->setLayout(
new QVBoxLayout());
2286 aParent->layout()->addWidget(newParentWidget);
2292 for(
G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) {
2293 guidance += QString((
char*)(aCommand->
GetGuidanceLine(i_thGuidance)).data()) +
"\n";
2295 newParentWidget->setToolTip(guidance);
2300 if (commandText.indexOf(
"/") == -1) {
2301 if (CreateCommandWidget(aCommand, newParentWidget,isDialog)) {
2305 CreateVisCommandGroupAndToolBox(aCommand,newParentWidget, aDepthLevel-1,isDialog);
2318 bool G4UIQt::CreateCommandWidget(
G4UIcommand* aCommand, QWidget* aParent,
bool isDialog) {
2320 if (aCommand == NULL) {
2327 if( n_parameterEntry > 0 ) {
2331 QWidget* paramWidget =
new QWidget();
2332 QGridLayout* gridLayout =
new QGridLayout();
2333 paramWidget->setLayout(gridLayout);
2336 unsigned int nbColorParameter = 0;
2337 bool isStillColorParameter =
false;
2338 bool isColorDialogAdded =
false;
2339 QLabel* redLabel = NULL;
2340 QLabel* greenLabel = NULL;
2341 QString redDefaultStr =
"";
2342 QString greenDefaultStr =
"";
2343 QString blueDefaultStr =
"";
2344 QWidget* redInput = NULL;
2345 QWidget* greenInput = NULL;
2347 for(
G4int i_thParameter=0; i_thParameter<n_parameterEntry; i_thParameter++ ) {
2350 QLabel* label =
new QLabel(QString((
char*)(param->
GetParameterName()).data()));
2352 if ((label->text() ==
"red") || (label->text() ==
"red_or_string")){
2353 nbColorParameter ++;
2354 isStillColorParameter =
true;
2355 }
else if ((label->text() ==
"green") && isStillColorParameter) {
2356 nbColorParameter ++;
2357 }
else if ((label->text() ==
"blue") && isStillColorParameter) {
2358 nbColorParameter ++;
2359 }
else if (!isColorDialogAdded) {
2362 if (nbColorParameter == 1) {
2363 gridLayout->addWidget(redLabel,i_thParameter-1,0);
2364 gridLayout->addWidget(redInput,i_thParameter-1,1);
2365 }
else if (nbColorParameter == 2) {
2366 gridLayout->addWidget(redLabel,i_thParameter-2,0);
2367 gridLayout->addWidget(redInput,i_thParameter-2,1);
2368 gridLayout->addWidget(greenLabel,i_thParameter-1,0);
2369 gridLayout->addWidget(greenInput,i_thParameter-1,1);
2371 nbColorParameter = 0;
2374 QWidget* input = NULL;
2376 input =
new QLineEdit();
2378 dynamic_cast<QLineEdit*
>(input)->setText(QString((
char*)(param->
GetDefaultValue()).data()));
2380 if (((label->text() ==
"red") || (label->text() ==
"red_or_string")) && isStillColorParameter) {
2382 }
else if ((label->text() ==
"green") && isStillColorParameter) {
2384 }
else if ((label->text() ==
"green") && isStillColorParameter) {
2389 input =
new QWidget();
2390 QHBoxLayout* layout =
new QHBoxLayout();
2391 input->setLayout(layout);
2393 QButtonGroup* buttons =
new QButtonGroup();
2394 QRadioButton* radioOff =
new QRadioButton(
"0");
2395 QRadioButton* radioOn =
new QRadioButton(
"1");
2396 buttons->addButton(radioOn);
2397 buttons->addButton(radioOff);
2398 layout->addWidget(radioOn);
2399 layout->addWidget(radioOff);
2402 QString defaultValue = QString((
char*)(param->
GetDefaultValue()).data());
2403 if (defaultValue ==
"0") {
2404 radioOff->setChecked(
true);
2405 }
else if (defaultValue ==
"1") {
2406 radioOn->setChecked(
true);
2409 input =
new QComboBox();
2411 QStringList list = candidates.split (
" ");
2414 QString defaultValue = QString((
char*)(param->
GetDefaultValue()).data());
2415 for (
int a=0;
a<list.size();
a++) {
2416 dynamic_cast<QComboBox*
>(input)->addItem(list.at(
a));
2417 if (list.at(
a) == defaultValue) {
2418 dynamic_cast<QComboBox*
>(input)->setCurrentIndex(
a);
2423 input =
new QLineEdit();
2425 dynamic_cast<QLineEdit*
>(input)->setText(QString((
char*)(param->
GetDefaultValue()).data()));
2428 input =
new QWidget();
2429 QHBoxLayout* layout =
new QHBoxLayout();
2430 input->setLayout(layout);
2432 QButtonGroup* buttons =
new QButtonGroup();
2433 QRadioButton* radioOff =
new QRadioButton(
"off");
2434 QRadioButton* radioOn =
new QRadioButton(
"on");
2435 buttons->addButton(radioOn);
2436 buttons->addButton(radioOff);
2437 layout->addWidget(radioOn);
2438 layout->addWidget(radioOff);
2441 QString defaultValue = QString((
char*)(param->
GetDefaultValue()).data());
2442 if (defaultValue ==
"off") {
2443 radioOff->setChecked(
true);
2444 }
else if (defaultValue ==
"on") {
2445 radioOn->setChecked(
true);
2449 input =
new QLineEdit();
2450 dynamic_cast<QLineEdit*
>(input)->setText(QString((
char*)(param->
GetDefaultValue()).data()));
2453 txt +=
"\nParameter : " + QString((
char*)(param->
GetParameterName()).data()) +
"\n";
2457 txt +=
" Parameter type : " + QString(QChar(param->
GetParameterType())) +
"\n";
2459 txt +=
" Omittable : True\n";
2461 txt +=
" Omittable : False\n";
2464 txt +=
" Default value : taken from the current value\n";
2466 txt +=
" Default value : " + QString((
char*)(param->
GetDefaultValue()).data())+
"\n";
2469 txt +=
" Parameter range : " + QString((
char*)(param->
GetParameterRange()).data())+
"\n";
2475 if (isStillColorParameter && (nbColorParameter != 0)) {
2476 if ((label->text() ==
"red") || (label->text() ==
"red_or_string")) {
2479 }
else if (label->text() ==
"green") {
2482 }
else if (label->text() ==
"blue") {
2488 if ((redDefaultStr !=
"") && (redDefaultStr !=
"") && (redDefaultStr !=
"")) {
2489 qc.setRgbF(redDefaultStr.toDouble(),
2490 greenDefaultStr.toDouble(),
2491 blueDefaultStr.toDouble());
2493 QPixmap pixmap = QPixmap(QSize(16, 16));
2495 QPainter painter(&pixmap);
2496 painter.setPen(Qt::black);
2497 painter.drawRect(0,0,15,15);
2499 input =
new QPushButton(
"Change color");
2500 dynamic_cast<QPushButton*
>(input)->setIcon(pixmap);
2501 dynamic_cast<QPushButton*
>(input)->setAccessibleName(redDefaultStr+
" "+greenDefaultStr+
" "+blueDefaultStr);
2502 label =
new QLabel(
"Choose color");
2506 gridLayout->addWidget(label,i_thParameter-nbColorParameter,0);
2507 input->setToolTip(
"Select the current color");
2508 gridLayout->addWidget(input,i_thParameter-nbColorParameter,1);
2511 QSignalMapper* signalMapper =
new QSignalMapper(
this);
2512 signalMapper->setMapping(input,input);
2513 connect(input, SIGNAL(clicked()), signalMapper, SLOT(map()));
2514 connect(signalMapper, SIGNAL(mapped(QWidget*)),
this, SLOT(ChangeColorCallback(QWidget*)));
2516 isColorDialogAdded =
true;
2517 isStillColorParameter =
false;
2520 gridLayout->addWidget(label,i_thParameter-nbColorParameter,0);
2521 input->setToolTip(txt);
2522 gridLayout->addWidget(input,i_thParameter-nbColorParameter,1);
2528 gridLayout->addWidget(name,n_parameterEntry-nbColorParameter,0);
2530 QPushButton* applyButton =
new QPushButton(
"Apply");
2533 gridLayout->addWidget(applyButton,n_parameterEntry-nbColorParameter,1);
2535 QSignalMapper* signalMapper =
new QSignalMapper(
this);
2536 signalMapper->setMapping(applyButton, paramWidget);
2537 connect(applyButton, SIGNAL(clicked()), signalMapper, SLOT(map()));
2538 connect(signalMapper, SIGNAL(mapped(QWidget*)),
this, SLOT(VisParameterCallback(QWidget*)));
2542 applyButton->setAutoDefault(
TRUE );
2543 applyButton->setDefault(
TRUE );
2544 gridLayout->addWidget(applyButton,n_parameterEntry-nbColorParameter,0);
2546 QPushButton* cancelButton =
new QPushButton( tr(
"&Cancel" ));
2547 cancelButton->setAutoDefault(
TRUE );
2548 gridLayout->addWidget(cancelButton,n_parameterEntry-nbColorParameter,1);
2550 QSignalMapper* signalMapper =
new QSignalMapper(
this);
2551 signalMapper->setMapping(applyButton, paramWidget);
2552 connect(applyButton, SIGNAL(clicked()), signalMapper, SLOT(map()));
2553 connect(signalMapper, SIGNAL(mapped(QWidget*)),
this, SLOT(VisParameterCallback(QWidget*)));
2555 QWidget * parentCheck = aParent;
2556 QDialog* parentDialog = NULL;
2558 while ((parentCheck->parentWidget()) != NULL) {
2559 parentCheck = parentCheck->parentWidget();
2560 parentDialog =
dynamic_cast<QDialog*
>(parentCheck);
2562 connect( applyButton, SIGNAL( clicked() ), parentDialog, SLOT( accept() ) );
2563 connect( cancelButton, SIGNAL( clicked() ), parentDialog, SLOT( reject() ) );
2572 if (!aParent->layout()) {
2573 aParent->setLayout(
new QVBoxLayout());
2575 aParent->layout()->addWidget(paramWidget);
2586 QTreeWidgetItem* G4UIQt::FindTreeItem(
2587 QTreeWidgetItem *aParent
2588 ,
const QString& aCommand
2591 if (aParent == NULL)
return NULL;
2594 QString myCommand = aCommand;
2596 if (myCommand.lastIndexOf(
"/") == (myCommand.size()-1)) {
2597 myCommand = myCommand.left(myCommand.size()-1);
2600 if (GetLongCommandPath(aParent) == myCommand)
2603 QTreeWidgetItem * tmp = NULL;
2604 for (
int a=0;
a<aParent->childCount();
a++) {
2606 tmp = FindTreeItem(aParent->child(
a),myCommand);
2620 QString G4UIQt::GetCommandList (
2626 if (aCommand == NULL)
2634 if ((commandPath ==
"") &&
2635 (rangeString ==
"") &&
2636 (n_guidanceEntry == 0) &&
2637 (n_parameterEntry == 0)) {
2641 if((commandPath.length()-1)!=
'/') {
2642 txt +=
"Command " + QString((
char*)(commandPath).data()) +
"\n";
2644 txt +=
"Guidance :\n";
2646 for(
G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) {
2647 txt += QString((
char*)(aCommand->
GetGuidanceLine(i_thGuidance)).data()) +
"\n";
2649 if( ! rangeString.
isNull() ) {
2650 txt +=
" Range of parameters : " + QString((
char*)(rangeString).data()) +
"\n";
2652 if( n_parameterEntry > 0 ) {
2657 for(
G4int i_thParameter=0; i_thParameter<n_parameterEntry; i_thParameter++ ) {
2659 txt +=
"\nParameter : " + QString((
char*)(param->
GetParameterName()).data()) +
"\n";
2662 txt +=
" Parameter type : " + QString(QChar(param->
GetParameterType())) +
"\n";
2664 txt +=
" Omittable : True\n";
2666 txt +=
" Omittable : False\n";
2669 txt +=
" Default value : taken from the current value\n";
2671 txt +=
" Default value : " + QString((
char*)(param->
GetDefaultValue()).data())+
"\n";
2674 txt +=
" Parameter range : " + QString((
char*)(param->
GetParameterRange()).data())+
"\n";
2692 void G4UIQt::updateHelpArea (
2696 if (!fParameterHelpLabel)
2698 if (!fParameterHelpTable)
2701 fParameterHelpLabel->setTextInteractionFlags(Qt::NoTextInteraction);
2703 if (aCommand == NULL)
2711 if ((commandPath ==
"") &&
2712 (rangeString ==
"") &&
2713 (n_guidanceEntry == 0) &&
2714 (n_parameterEntry == 0)) {
2718 if((commandPath.length()-1)!=
'/') {
2719 txt +=
"<b>Command </b> " + QString((
char*)(commandPath).data()) +
"<br />";
2721 txt +=
"<b>Guidance :</b> ";
2723 for(
G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ ) {
2724 txt += QString((
char*)(aCommand->
GetGuidanceLine(i_thGuidance)).data()) +
"<br />";
2726 if( ! rangeString.
isNull() ) {
2727 txt +=
"<b>Range of parameters : </b> " + QString((
char*)(rangeString).data()) +
"<br />";
2731 fParameterHelpLabel->setHtml(txt);
2733 if( n_parameterEntry > 0 ) {
2738 fParameterHelpTable->clear();
2739 fParameterHelpTable->setRowCount(n_parameterEntry);
2740 fParameterHelpTable->setColumnCount(8);
2741 fParameterHelpTable->setHorizontalHeaderLabels(QStringList() <<
2750 fParameterHelpTable->setColumnWidth(2,60);
2752 fParameterHelpTable->verticalHeader()->setVisible(
false);
2753 fParameterHelpTable->setAlternatingRowColors (
true);
2754 #if QT_VERSION < 0x050000
2755 fParameterHelpTable->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
2756 fParameterHelpTable->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch);
2758 fParameterHelpTable->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
2759 fParameterHelpTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
2761 fParameterHelpTable->setWordWrap(
true);
2763 QTableWidgetItem* t = fParameterHelpTable->horizontalHeaderItem(1);
2764 QFont fnt = t->font();
2765 int size = fnt.pointSize();
2766 fnt.setPointSize(size-2);
2768 for(
G4int a=0;
a<n_parameterEntry;
a++ ) {
2770 fParameterHelpTable->setItem(
a, 0,
new QTableWidgetItem(QString::number(
a+1)));
2772 fParameterHelpTable->setItem(
a, 1,
new QTableWidgetItem(QString((
char*)(param->
GetParameterName()).data())));
2774 fParameterHelpTable->setItem(
a, 2,
new QTableWidgetItem(QString((
char*)(param->
GetParameterGuidance()).data())));
2776 fParameterHelpTable->setItem(
a, 3,
new QTableWidgetItem(QString(QChar(param->
GetParameterType()))));
2779 fParameterHelpTable->setItem(
a, 4,
new QTableWidgetItem(QString(
"True")));
2781 fParameterHelpTable->setItem(
a, 4,
new QTableWidgetItem(QString(
"False")));
2784 fParameterHelpTable->setItem(
a, 5,
new QTableWidgetItem(QString(
"taken from the current value")));
2786 fParameterHelpTable->setItem(
a, 5,
new QTableWidgetItem(QString((
char*)(param->
GetDefaultValue()).data())));
2789 fParameterHelpTable->setItem(
a, 6,
new QTableWidgetItem(QString((
char*)(param->
GetParameterRange()).data())));
2792 fParameterHelpTable->setItem(
a, 7,
new QTableWidgetItem(QString((
char*)(param->
GetParameterCandidates()).data())));
2795 for (
int b=0; b<8; b++) {
2796 QTableWidgetItem* tmp = fParameterHelpTable->item(
a,b);
2798 tmp->setToolTip(tmp->text());
2799 tmp->setFlags(Qt::NoItemFlags);
2800 tmp->setForeground(QBrush());
2804 fParameterHelpTable->resizeRowToContents(
a);
2806 for (
int c=0; c<8; c++) {
2808 fParameterHelpTable->resizeColumnToContents(c);
2811 fParameterHelpLabel->setVisible(
true);
2812 fParameterHelpTable->setVisible(
true);
2823 G4bool G4UIQt::IsGUICommand(
2827 if (aCommand == NULL)
2832 if( n_parameterEntry > 0 ) {
2837 for(
G4int i_thParameter=0; i_thParameter<n_parameterEntry; i_thParameter++ ) {
2859 G4bool G4UIQt::GetHelpChoice(
2874 bool G4UIQt::eventFilter(
2879 bool moveCommandCursor =
false;
2880 if (aObj == NULL)
return false;
2881 if (aEvent == NULL)
return false;
2883 if (aObj == fHistoryTBTableList) {
2884 if (aEvent->type() == QEvent::KeyPress) {
2885 fCommandArea->setFocus();
2888 if (aObj == fCommandArea) {
2889 if (aEvent->type() == QEvent::KeyPress) {
2890 QKeyEvent *e =
static_cast<QKeyEvent*
>(aEvent);
2891 if ((e->key() == (Qt::Key_Down)) ||
2892 (e->key() == (Qt::Key_PageDown)) ||
2893 (e->key() == (Qt::Key_Up)) ||
2894 (e->key() == (Qt::Key_PageUp))) {
2895 int selection = fHistoryTBTableList->currentRow();
2896 if (fHistoryTBTableList->count()) {
2897 if (selection == -1) {
2898 selection = fHistoryTBTableList->count()-1;
2900 if (e->key() == (Qt::Key_Down)) {
2901 if (selection <(fHistoryTBTableList->count()-1))
2903 }
else if (e->key() == (Qt::Key_PageDown)) {
2904 selection = fHistoryTBTableList->count()-1;
2905 }
else if (e->key() == (Qt::Key_Up)) {
2908 }
else if (e->key() == (Qt::Key_PageUp)) {
2912 fHistoryTBTableList->clearSelection();
2913 #if QT_VERSION < 0x040202
2914 fHistoryTBTableList->setItemSelected(fHistoryTBTableList->item(selection),
true);
2916 fHistoryTBTableList->item(selection)->setSelected(
true);
2918 fHistoryTBTableList->setCurrentItem(fHistoryTBTableList->item(selection));
2920 moveCommandCursor =
true;
2921 }
else if (e->key() == (Qt::Key_Tab)) {
2922 G4String ss = Complete(fCommandArea->text().toStdString().c_str());
2923 fCommandArea->setText((
char*)(ss.
data()));
2929 }
else if (((e->modifiers () == Qt::ControlModifier) || (e->modifiers () == Qt::MetaModifier)) && (e->key() == Qt::Key_A)) {
2930 fCommandArea->home(
false);
2932 }
else if (((e->modifiers () == Qt::ControlModifier) || (e->modifiers () == Qt::MetaModifier)) && (e->key() == Qt::Key_E)) {
2933 fCommandArea->end(
false);
2940 if (moveCommandCursor ==
true) {
2941 fCommandArea->setCursorPosition ( fCommandArea->text().length() );
2942 fCommandArea->setCursorPosition (4);
2945 res = QObject::eventFilter(aObj, aEvent);
2961 void G4UIQt::ShowHelpCallback (
2970 void G4UIQt::ClearButtonCallback (
2973 fCoutTBTextArea->clear();
2974 fG4OutputString.clear();
2979 void G4UIQt::ExitSession (
2985 void G4UIQt::ExitHelp(
2993 void G4UIQt::CommandEnteredCallback (
2997 QStringList list = fCommandArea->text().split(QRegExp(
"[\r\n]"),QString::SkipEmptyParts);
3000 for (
int a=0;
a< list.size();
a++) {
3001 QString txt (list[
a].trimmed());
3003 fHistoryTBTableList->addItem(txt);
3004 fHistoryTBTableList->clearSelection();
3005 fHistoryTBTableList->setCurrentItem(NULL);
3006 fCommandArea->setText(
"");
3007 G4Qt* interactorManager = G4Qt::getInstance ();
3008 if (interactorManager) {
3009 interactorManager->FlushAndWaitExecution();
3012 G4String command = txt.toStdString().c_str();
3013 if (command(0,4) !=
"help") {
3014 ApplyShellCommand (command,exitSession,exitPause);
3016 ActivateCommand(command);
3021 fCommandArea->setFocus();
3026 if(exitSession==
true)
3035 void G4UIQt::CommandEditedCallback(
const QString &)
3037 QStringList list = fCommandArea->text().split(QRegExp(
"[\r\n]"),QString::SkipEmptyParts);
3039 if (list.size() > 1) {
3040 for (
int a=0;
a<list.size()-1;
a++) {
3042 fCommandArea->setText(list[
a]);
3044 CommandEnteredCallback();
3047 fCommandArea->setText(list[list.size()-1]);
3054 void G4UIQt::VisParameterCallback(QWidget* widget){
3055 if (widget == NULL) {
3060 QGridLayout* grid =
dynamic_cast<QGridLayout*
>(widget->layout());
3065 #if QT_VERSION < 0x040400
3066 QWidget* name = grid->itemAt(grid->columnCount()*(grid->rowCount()-2))->widget();
3068 QWidget* name = grid->itemAtPosition(grid->rowCount()-1,0)->widget();
3070 if (dynamic_cast<QLabel*>(name) == 0) {
3073 command += (
dynamic_cast<QLabel*
>(
name))->text()+
" ";
3075 for (
int a=0;
a<grid->rowCount()-1;
a++) {
3076 #if QT_VERSION < 0x040400
3077 QWidget* widgetTmp = grid->itemAt(
a*grid->columnCount()+1)->widget();
3079 QWidget* widgetTmp = grid->itemAtPosition(
a,1)->widget();
3083 if (widgetTmp != NULL) {
3085 if (dynamic_cast<QLineEdit*>(widgetTmp) != 0) {
3086 command += (
dynamic_cast<QLineEdit*
>(widgetTmp))->text()+
" ";
3088 }
else if (dynamic_cast<QComboBox*>(widgetTmp) != 0){
3089 command += (
dynamic_cast<QComboBox*
>(widgetTmp))->itemText((dynamic_cast<QComboBox*>(widgetTmp))->currentIndex())+
" ";
3092 }
else if (dynamic_cast<QPushButton*>(widgetTmp) != 0){
3093 command += widgetTmp->accessibleName()+
" ";
3096 }
else if (dynamic_cast<QWidget*>(widgetTmp) != 0){
3097 if (widgetTmp->layout()->count() > 0){
3098 if (dynamic_cast<QRadioButton*>(widgetTmp->layout()->itemAt(0)->widget()) != 0) {
3099 QAbstractButton * checked = (
dynamic_cast<QRadioButton*
>(widgetTmp->layout()->itemAt(0)->widget()))->group()->checkedButton();
3101 command += (
dynamic_cast<QRadioButton*
>(widgetTmp->layout()->itemAt(0)->widget()))->group()->checkedButton()->text()+
" ";
3109 if (command !=
"") {
3123 void G4UIQt::ButtonCallback (
3124 const QString& aCommand
3131 if(UI==NULL)
return;
3138 if (IsGUICommand(command)) {
3139 QDialog* menuParameterDialog =
new QDialog();
3141 if (CreateVisCommandGroupAndToolBox(command,menuParameterDialog,1,
true)) {
3142 menuParameterDialog->setWindowTitle (aCommand);
3143 menuParameterDialog->setSizePolicy (QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum));
3146 menuParameterDialog->exec();
3152 ApplyShellCommand(ss,exitSession,exitPause);
3157 if(exitSession==
true)
3165 void G4UIQt::HelpTreeClicCallback (
3168 QTreeWidgetItem* item = NULL;
3169 if (!fHelpTreeWidget)
3172 QList<QTreeWidgetItem *> list =fHelpTreeWidget->selectedItems();
3175 item = list.first();
3180 if(UI==NULL)
return;
3183 std::string itemText = GetLongCommandPath(item).toStdString();
3186 if (item->childCount() > 0) {
3192 updateHelpArea(command);
3198 fParameterHelpLabel->setVisible(
true);
3200 fParameterHelpTable->setVisible(
false);
3207 void G4UIQt::HelpTreeDoubleClicCallback (
3210 HelpTreeClicCallback();
3212 QTreeWidgetItem* item = NULL;
3213 if (!fHelpTreeWidget)
3216 QList<QTreeWidgetItem *> list =fHelpTreeWidget->selectedItems();
3219 item = list.first();
3223 fCommandArea->clear();
3224 fCommandArea->setText(GetLongCommandPath(item));
3231 void G4UIQt::CommandHistoryCallback(
3234 QListWidgetItem* item = NULL;
3235 if (!fHistoryTBTableList)
3239 QList<QListWidgetItem *> list =fHistoryTBTableList->selectedItems();
3242 item = list.first();
3245 fCommandArea->setText(item->text());
3249 void G4UIQt::ThreadComboBoxCallback(
int) {
3250 CoutFilterCallback(
"");
3254 void G4UIQt::CoutFilterCallback(
3257 FilterAllOutputTextArea();
3259 fCoutTBTextArea->repaint();
3260 fCoutTBTextArea->verticalScrollBar()->setSliderPosition(fCoutTBTextArea->verticalScrollBar()->maximum());
3265 QString G4UIQt::FilterOutput(
3266 const G4UIOutputString& output
3267 ,
const QString& currentThread
3268 ,
const QString& filter
3271 #ifdef G4MULTITHREADED
3272 if ((currentThread ==
"All") ||
3273 (currentThread == output.fThread)) {
3275 if (currentThread ==
"") {
3277 if (output.fText.contains(QRegExp(filter))) {
3278 return output.fText;
3285 void G4UIQt::FilterAllOutputTextArea() {
3287 QString currentThread =
"";
3288 #ifdef G4MULTITHREADED
3289 currentThread = fThreadsFilterComboBox->currentText();
3290 if (currentThread ==
"Master") {
3294 QString filter = fCoutFilter->text();
3295 G4String previousOutputStream =
"";
3297 fCoutTBTextArea->clear();
3298 fCoutTBTextArea->setTextColor(QColor(Qt::black));
3300 for (
unsigned int a=0;
a<fG4OutputString.size();
a++) {
3301 G4UIOutputString out = fG4OutputString[
a];
3302 if (FilterOutput(out,currentThread,filter) !=
"") {
3305 if (out.fOutputStream != previousOutputStream) {
3306 previousOutputStream = out.fOutputStream;
3307 if (out.fOutputStream ==
"info") {
3308 fCoutTBTextArea->setTextColor(QColor(Qt::black));
3310 fCoutTBTextArea->setTextColor(QColor(
Qt::red));
3313 fCoutTBTextArea->
append(out.fText);
3316 fCoutTBTextArea->setTextColor(QColor(Qt::black));
3324 void G4UIQt::LookForHelpStringCallback(
3327 QString searchText = fHelpLine->text();
3329 fParameterHelpLabel->setText(
"");
3330 fParameterHelpTable->setVisible(
false);
3331 if (searchText ==
"") {
3333 fHelpTreeWidget->clear();
3339 OpenHelpTreeOnCommand(searchText);
3344 void G4UIQt::OpenHelpTreeOnCommand(
3345 const QString & searchText
3350 if(UI==NULL)
return;
3356 fHelpTreeWidget->clear();
3362 QMap<int,QString> commandResultMap;
3363 QMap<int,QString> commandChildResultMap;
3365 for (
int a=0;
a<treeSize;
a++) {
3367 tmp = GetCommandList (command).count(searchText,Qt::CaseInsensitive);
3369 commandResultMap.insertMulti(tmp,QString((
char*)(treeTop->
GetTree(
a+1)->
GetPathName()).data()));
3372 commandChildResultMap = LookForHelpStringInChildTree(treeTop->
GetTree(
a+1),searchText);
3374 if (!commandChildResultMap.empty()) {
3375 QMap<int,QString>::const_iterator i = commandChildResultMap.constBegin();
3376 while (i != commandChildResultMap.constEnd()) {
3377 commandResultMap.insertMulti(i.key(),i.value());
3380 commandChildResultMap.clear();
3385 fHelpTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
3386 fHelpTreeWidget->setColumnCount(2);
3388 labels << QString(
"Command") << QString(
"Match");
3389 fHelpTreeWidget->setHeaderLabels(labels);
3391 if (commandResultMap.empty()) {
3392 fParameterHelpLabel->setText(
"No match found");
3393 fParameterHelpTable->setVisible(
false);
3397 QMap<int,QString>::const_iterator i = commandResultMap.constEnd();
3400 float multValue = 10.0/(float)(i.key());
3401 QString progressChar =
"|";
3402 QString progressStr =
"|";
3404 QTreeWidgetItem * newItem;
3407 if (i == commandResultMap.constBegin()) {
3410 for(
int a=0;
a<int(i.key()*multValue);
a++) {
3411 progressStr += progressChar;
3413 newItem =
new QTreeWidgetItem();
3414 QString commandStr = i.value().trimmed();
3416 if (commandStr.indexOf(
"/") == 0) {
3417 commandStr = commandStr.right(commandStr.size()-1);
3420 newItem->setText(0,commandStr);
3421 newItem->setText(1,progressStr);
3422 fHelpTreeWidget->addTopLevelItem(newItem);
3423 #if QT_VERSION < 0x040200
3425 newItem->setForeground ( 1, QBrush(
Qt::blue) );
3430 fHelpTreeWidget->resizeColumnToContents (0);
3431 fHelpTreeWidget->sortItems(1,Qt::DescendingOrder);
3438 QMap<int,QString> G4UIQt::LookForHelpStringInChildTree(
3440 ,
const QString & text
3443 QMap<int,QString> commandResultMap;
3444 if (aCommandTree == NULL)
return commandResultMap;
3449 QMap<int,QString> commandChildResultMap;
3453 tmp = GetCommandList (command).count(text,Qt::CaseInsensitive);
3455 commandResultMap.insertMulti(tmp,QString((
char*)(aCommandTree->
GetTree(
a+1)->
GetPathName()).data()));
3458 commandChildResultMap = LookForHelpStringInChildTree(aCommandTree->
GetTree(
a+1),text);
3460 if (!commandChildResultMap.empty()) {
3462 QMap<int,QString>::const_iterator i = commandChildResultMap.constBegin();
3463 while (i != commandChildResultMap.constEnd()) {
3464 commandResultMap.insertMulti(i.key(),i.value());
3467 commandChildResultMap.clear();
3474 tmp = GetCommandList (command).count(text,Qt::CaseInsensitive);
3480 return commandResultMap;
3484 QString G4UIQt::GetShortCommandPath(
3488 if (commandPath.indexOf(
"/") == 0) {
3489 commandPath = commandPath.right(commandPath.size()-1);
3492 commandPath = commandPath.right(commandPath.size()-commandPath.lastIndexOf(
"/",-2)-1);
3494 if (commandPath.lastIndexOf(
"/") == (commandPath.size()-1)) {
3495 commandPath = commandPath.left(commandPath.size()-1);
3502 QString G4UIQt::GetLongCommandPath(
3503 QTreeWidgetItem* item
3506 if (item == NULL)
return "";
3509 QString itemText =
"";
3510 itemText = item->text(0);
3512 while (item->parent() != NULL) {
3513 itemText = item->parent()->text(0)+
"/"+itemText;
3514 item = item->parent();
3516 itemText =
"/"+itemText;
3522 void G4UIQt::ChangeColorCallback(QWidget* widget) {
3523 if (widget == NULL) {
3527 QPushButton* button =
dynamic_cast<QPushButton*
>(widget);
3531 QString value = button->accessibleName();
3534 old.setRgbF(value.section(
" ",0,1).toDouble(),
3535 value.section(
" ",1,2).toDouble(),
3536 value.section(
" ",2,3).toDouble());
3537 #if QT_VERSION < 0x040500
3539 QColor color = QColor(QColorDialog::getRgba (old.rgba(),&
a,fUITabWidget));
3541 QColor color = QColorDialog::getColor(old,
3544 QColorDialog::ShowAlphaChannel);
3548 if (color.isValid()) {
3550 QPixmap pixmap = QPixmap(QSize(16, 16));
3551 pixmap.fill (color);
3552 QPainter painter(&pixmap);
3553 painter.setPen(Qt::black);
3554 painter.drawRect(0,0,15,15);
3556 button->setAccessibleName(QString::number(color.redF())+
" "+
3557 QString::number(color.greenF())+
" "+
3558 QString::number(color.blueF())+
" "
3560 button->setIcon(pixmap);
3567 void G4UIQt::ChangeCursorStyle(
const QString& action) {
3571 fMoveSelected =
true;
3572 fPickSelected =
true;
3573 fRotateSelected =
true;
3574 fZoomInSelected =
true;
3575 fZoomOutSelected =
true;
3577 if (fToolbarApp == NULL)
return;
3578 QList<QAction *> list = fToolbarApp->actions ();
3579 for (
int i = 0; i < list.size(); ++i) {
3580 if (list.at(i)->data().toString () == action) {
3581 list.at(i)->setChecked(
TRUE);
3582 if (list.at(i)->data().toString () ==
"pick") {
3585 }
else if (list.at(i)->data().toString () ==
"move") {
3586 fMoveSelected =
false;
3587 list.at(i)->setChecked(
FALSE);
3588 }
else if (list.at(i)->data().toString () ==
"pick") {
3589 fPickSelected =
false;
3590 list.at(i)->setChecked(
FALSE);
3592 }
else if (list.at(i)->data().toString () ==
"rotate") {
3593 fRotateSelected =
false;
3594 list.at(i)->setChecked(
FALSE);
3595 }
else if (list.at(i)->data().toString () ==
"zoom_in") {
3596 fZoomInSelected =
false;
3597 list.at(i)->setChecked(
FALSE);
3598 }
else if (list.at(i)->data().toString () ==
"zoom_out") {
3599 fZoomOutSelected =
false;
3600 list.at(i)->setChecked(
FALSE);
3613 void G4UIQt::ChangeSurfaceStyle(
const QString& action) {
3617 if (fToolbarApp == NULL)
return;
3618 QList<QAction *> list = fToolbarApp->actions ();
3619 for (
int i = 0; i < list.size(); ++i) {
3620 if (list.at(i)->data().toString () == action) {
3621 list.at(i)->setChecked(
TRUE);
3622 }
else if (list.at(i)->data().toString () ==
"hidden_line_removal") {
3623 list.at(i)->setChecked(
FALSE);
3624 }
else if (list.at(i)->data().toString () ==
"hidden_line_and_surface_removal") {
3625 list.at(i)->setChecked(
FALSE);
3626 }
else if (list.at(i)->data().toString () ==
"solid") {
3627 list.at(i)->setChecked(
FALSE);
3628 }
else if (list.at(i)->data().toString () ==
"wireframe") {
3629 list.at(i)->setChecked(
FALSE);
3634 if (action ==
"hidden_line_removal") {
3638 }
else if (action ==
"hidden_line_and_surface_removal") {
3642 }
else if (action ==
"solid") {
3646 }
else if (action ==
"wireframe") {
3653 void G4UIQt::OpenIconCallback(
const QString& aParam) {
3655 QString aCommand = aParam.left(aParam.indexOf(fStringSeparator));
3656 QString aLabel = aParam.mid(aParam.indexOf(fStringSeparator)+fStringSeparator.length());
3658 QString nomFich = QFileDialog::getOpenFileName(fMainWindow, aLabel, fLastOpenPath,
"Macro files (*.mac)");
3659 if (nomFich !=
"") {
3662 fLastOpenPath = dir.absoluteFilePath(nomFich);
3667 void G4UIQt::SaveIconCallback(
const QString& aParam) {
3669 QString aCommand = aParam.left(aParam.indexOf(fStringSeparator));
3670 QString aLabel = aParam.mid(aParam.indexOf(fStringSeparator)+fStringSeparator.length());
3672 QString nomFich = QFileDialog::getSaveFileName(fMainWindow, aLabel, fLastOpenPath,
"Macro files (*.mac)");
3673 if (nomFich !=
"") {
3676 fLastOpenPath = dir.absoluteFilePath(nomFich);
3682 void G4UIQt::ChangePerspectiveOrtho(
const QString& action) {
3686 if (fToolbarApp == NULL)
return;
3687 QList<QAction *> list = fToolbarApp->actions ();
3688 QString checked =
"";
3689 for (
int i = 0; i < list.size(); ++i) {
3690 if (list.at(i)->data().toString () == action) {
3691 list.at(i)->setChecked(
TRUE);
3692 checked = list.at(i)->data().toString ();
3693 }
else if (list.at(i)->data().toString () ==
"persepective") {
3694 list.at(i)->setChecked(
FALSE);
3695 }
else if (list.at(i)->data().toString () ==
"ortho") {
3696 list.at(i)->setChecked(
FALSE);
3700 if ((action ==
"ortho") && (checked ==
"ortho")) {
3702 }
else if ((action ==
"perspective") && (checked ==
"perspective")) {
3709 void G4UIQt::SetIconMoveSelected() {
3711 fMoveSelected =
true;
3712 fRotateSelected =
false;
3713 fPickSelected =
false;
3714 fZoomInSelected =
false;
3715 fZoomOutSelected =
false;
3717 if (fToolbarApp == NULL)
return;
3718 QList<QAction *> list = fToolbarApp->actions ();
3719 for (
int i = 0; i < list.size(); ++i) {
3720 if (list.at(i)->data().toString () ==
"move") {
3721 list.at(i)->setChecked(
TRUE);
3722 }
else if (list.at(i)->data().toString () ==
"rotate") {
3723 list.at(i)->setChecked(
FALSE);
3724 }
else if (list.at(i)->data().toString () ==
"pick") {
3725 list.at(i)->setChecked(
FALSE);
3726 }
else if (list.at(i)->data().toString () ==
"zoom_in") {
3727 list.at(i)->setChecked(
FALSE);
3728 }
else if (list.at(i)->data().toString () ==
"zoom_out") {
3729 list.at(i)->setChecked(
FALSE);
3735 void G4UIQt::SetIconRotateSelected() {
3737 fRotateSelected =
true;
3738 fMoveSelected =
false;
3739 fPickSelected =
false;
3740 fZoomInSelected =
false;
3741 fZoomOutSelected =
false;
3743 if (fToolbarApp == NULL)
return;
3744 QList<QAction *> list = fToolbarApp->actions ();
3745 for (
int i = 0; i < list.size(); ++i) {
3746 if (list.at(i)->data().toString () ==
"rotate") {
3747 list.at(i)->setChecked(
TRUE);
3748 }
else if (list.at(i)->data().toString () ==
"move") {
3749 list.at(i)->setChecked(
FALSE);
3750 }
else if (list.at(i)->data().toString () ==
"pick") {
3751 list.at(i)->setChecked(
FALSE);
3752 }
else if (list.at(i)->data().toString () ==
"zoom_in") {
3753 list.at(i)->setChecked(
FALSE);
3754 }
else if (list.at(i)->data().toString () ==
"zoom_out") {
3755 list.at(i)->setChecked(
FALSE);
3761 void G4UIQt::SetIconPickSelected() {
3763 fPickSelected =
true;
3764 fMoveSelected =
false;
3765 fRotateSelected =
false;
3766 fZoomInSelected =
false;
3767 fZoomOutSelected =
false;
3769 if (fToolbarApp == NULL)
return;
3770 QList<QAction *> list = fToolbarApp->actions ();
3771 for (
int i = 0; i < list.size(); ++i) {
3772 if (list.at(i)->data().toString () ==
"pick") {
3773 list.at(i)->setChecked(
TRUE);
3774 }
else if (list.at(i)->data().toString () ==
"move") {
3775 list.at(i)->setChecked(
FALSE);
3776 }
else if (list.at(i)->data().toString () ==
"rotate") {
3777 list.at(i)->setChecked(
FALSE);
3778 }
else if (list.at(i)->data().toString () ==
"zoom_in") {
3779 list.at(i)->setChecked(
FALSE);
3780 }
else if (list.at(i)->data().toString () ==
"zoom_out") {
3781 list.at(i)->setChecked(
FALSE);
3787 void G4UIQt::SetIconZoomInSelected() {
3789 fZoomInSelected =
true;
3790 fMoveSelected =
false;
3791 fRotateSelected =
false;
3792 fPickSelected =
false;
3793 fZoomOutSelected =
false;
3795 if (fToolbarApp == NULL)
return;
3796 QList<QAction *> list = fToolbarApp->actions ();
3797 for (
int i = 0; i < list.size(); ++i) {
3798 if (list.at(i)->data().toString () ==
"zoom_in") {
3799 list.at(i)->setChecked(
TRUE);
3800 }
else if (list.at(i)->data().toString () ==
"move") {
3801 list.at(i)->setChecked(
FALSE);
3802 }
else if (list.at(i)->data().toString () ==
"rotate") {
3803 list.at(i)->setChecked(
FALSE);
3804 }
else if (list.at(i)->data().toString () ==
"pick") {
3805 list.at(i)->setChecked(
FALSE);
3806 }
else if (list.at(i)->data().toString () ==
"zoom_out") {
3807 list.at(i)->setChecked(
FALSE);
3813 void G4UIQt::SetIconZoomOutSelected() {
3815 fZoomOutSelected =
true;
3816 fMoveSelected =
false;
3817 fRotateSelected =
false;
3818 fPickSelected =
false;
3819 fZoomInSelected =
false;
3821 if (fToolbarApp == NULL)
return;
3822 QList<QAction *> list = fToolbarApp->actions ();
3823 for (
int i = 0; i < list.size(); ++i) {
3824 if (list.at(i)->data().toString () ==
"zoom_out") {
3825 list.at(i)->setChecked(
TRUE);
3826 }
else if (list.at(i)->data().toString () ==
"move") {
3827 list.at(i)->setChecked(
FALSE);
3828 }
else if (list.at(i)->data().toString () ==
"rotate") {
3829 list.at(i)->setChecked(
FALSE);
3830 }
else if (list.at(i)->data().toString () ==
"pick") {
3831 list.at(i)->setChecked(
FALSE);
3832 }
else if (list.at(i)->data().toString () ==
"zoom_in") {
3833 list.at(i)->setChecked(
FALSE);
3839 void G4UIQt::SetIconSolidSelected() {
3842 if (fToolbarApp == NULL)
return;
3843 QList<QAction *> list = fToolbarApp->actions ();
3844 for (
int i = 0; i < list.size(); ++i) {
3845 if (list.at(i)->data().toString () ==
"solid") {
3846 list.at(i)->setChecked(
TRUE);
3847 }
else if (list.at(i)->data().toString () ==
"hidden_line_removal") {
3848 list.at(i)->setChecked(
FALSE);
3849 }
else if (list.at(i)->data().toString () ==
"hidden_line_and_surface_removal") {
3850 list.at(i)->setChecked(
FALSE);
3851 }
else if (list.at(i)->data().toString () ==
"wireframe") {
3852 list.at(i)->setChecked(
FALSE);
3858 void G4UIQt::SetIconWireframeSelected() {
3861 if (fToolbarApp == NULL)
return;
3862 QList<QAction *> list = fToolbarApp->actions ();
3863 for (
int i = 0; i < list.size(); ++i) {
3864 if (list.at(i)->data().toString () ==
"wireframe") {
3865 list.at(i)->setChecked(
TRUE);
3866 }
else if (list.at(i)->data().toString () ==
"hidden_line_removal") {
3867 list.at(i)->setChecked(
FALSE);
3868 }
else if (list.at(i)->data().toString () ==
"hidden_line_and_surface_removal") {
3869 list.at(i)->setChecked(
FALSE);
3870 }
else if (list.at(i)->data().toString () ==
"solid") {
3871 list.at(i)->setChecked(
FALSE);
3877 void G4UIQt::SetIconHLRSelected() {
3880 if (fToolbarApp == NULL)
return;
3881 QList<QAction *> list = fToolbarApp->actions ();
3882 for (
int i = 0; i < list.size(); ++i) {
3883 if (list.at(i)->data().toString () ==
"hidden_line_removal") {
3884 list.at(i)->setChecked(
TRUE);
3885 }
else if (list.at(i)->data().toString () ==
"solid") {
3886 list.at(i)->setChecked(
FALSE);
3887 }
else if (list.at(i)->data().toString () ==
"hidden_line_and_surface_removal") {
3888 list.at(i)->setChecked(
FALSE);
3889 }
else if (list.at(i)->data().toString () ==
"wireframe") {
3890 list.at(i)->setChecked(
FALSE);
3896 void G4UIQt::SetIconHLHSRSelected() {
3899 if (fToolbarApp == NULL)
return;
3900 QList<QAction *> list = fToolbarApp->actions ();
3901 for (
int i = 0; i < list.size(); ++i) {
3902 if (list.at(i)->data().toString () ==
"hidden_line_and_surface_removal") {
3903 list.at(i)->setChecked(
TRUE);
3904 }
else if (list.at(i)->data().toString () ==
"solid") {
3905 list.at(i)->setChecked(
FALSE);
3906 }
else if (list.at(i)->data().toString () ==
"hidden_line_removal") {
3907 list.at(i)->setChecked(
FALSE);
3908 }
else if (list.at(i)->data().toString () ==
"wireframe") {
3909 list.at(i)->setChecked(
FALSE);
3915 void G4UIQt::SetIconPerspectiveSelected() {
3918 if (fToolbarApp == NULL)
return;
3919 QList<QAction *> list = fToolbarApp->actions ();
3920 for (
int i = 0; i < list.size(); ++i) {
3921 if (list.at(i)->data().toString () ==
"perspective") {
3922 list.at(i)->setChecked(
TRUE);
3923 }
else if (list.at(i)->data().toString () ==
"ortho") {
3924 list.at(i)->setChecked(
FALSE);
3931 void G4UIQt::SetIconOrthoSelected() {
3934 if (fToolbarApp == NULL)
return;
3935 QList<QAction *> list = fToolbarApp->actions ();
3936 for (
int i = 0; i < list.size(); ++i) {
3937 if (list.at(i)->data().toString () ==
"ortho") {
3938 list.at(i)->setChecked(
TRUE);
3939 }
else if (list.at(i)->data().toString () ==
"perspective") {
3940 list.at(i)->setChecked(
FALSE);
3947 G4QTabWidget::G4QTabWidget(
3951 ):QTabWidget(aParent)
3952 ,fTabSelected(false)
3954 ,fPreferedSizeX(sizeX+6)
3955 ,fPreferedSizeY(sizeY+58)
3957 setMinimumSize(100,100);
3958 QSizePolicy policy = QSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);
3959 setSizePolicy(policy);
3962 G4QTabWidget::G4QTabWidget(
3964 ,fTabSelected(false)
3972 G4UIOutputString::G4UIOutputString(
3980 if (!GetOutputList().contains(QString(
" ")+outputStream+
" ")) {
3981 fOutputStream =
"info";
3983 fOutputStream = outputStream;
3988 #if QT_VERSION < 0x040500
3989 void G4UIQt::TabCloseCallback(
int){
3991 void G4UIQt::TabCloseCallback(
int a){
3993 #if QT_VERSION < 0x040500
3995 if (fViewerTabWidget == NULL)
return;
3998 QWidget* temp = fViewerTabWidget->widget(a);
4000 fViewerTabWidget->removeTab (a);
4008 void G4UIQt::ToolBoxActivated(
int a){
4010 if (fUITabWidget->widget(a) == fHelpTBWidget) {
4013 }
else if (fUITabWidget->widget(a) == fSceneTreeComponentsTBWidget) {
4014 #if QT_VERSION < 0x040200
4015 fSceneTreeComponentsTBWidget->show();
4017 fSceneTreeComponentsTBWidget->setVisible(
true);
4023 void G4QTabWidget::paintEvent(
4028 if (currentWidget()) {
4030 if ( isTabSelected()) {
4034 QString text = tabText (currentIndex());
4036 if (fLastCreated == -1) {
4037 QTextEdit* edit =
dynamic_cast<QTextEdit*
>(currentWidget());
4039 QString paramSelect = QString(
"/vis/viewer/select ")+text;
4048 setTabSelected(
false);
4054 G4UIDockWidget::G4UIDockWidget(QString txt):
4059 void G4UIDockWidget::closeEvent(QCloseEvent *aEvent) {
4060 setFloating (
false);
G4UIcommandTree * FindCommandTree(const char *commandPath)
Try to match a command or a path with the one given.
G4MTcoutDestination * GetThreadCout()
G4String GetParameterCandidates() const
const G4String & GetRange() const
G4UIcommand * FindPath(const char *commandPath) const
G4String strip(G4int strip_Type=trailing, char c=' ')
G4int GetCommandEntry() const
G4String GetParameterName() const
G4UIcommand * GetCommand(G4int i)
G4String GetFullPrefixString() const
G4int GetTreeEntry() const
G4int GetVerboseLevel() const
void SetSession(G4UIsession *const value)
const G4String & GetGuidanceLine(G4int i) const
#define G4MUTEX_INITIALIZER
void SetG4UIWindow(G4UIsession *const value)
static G4UImanager * GetUIpointer()
G4bool IsOmittable() const
G4String GetPrefixString() const
static G4StateManager * GetStateManager()
G4GLOB_DLL std::ostream G4cout
str_size index(const char *, G4int pos=0) const
G4UIcommandTree * GetTree(G4int i)
G4UIparameter * GetParameter(G4int i) const
const G4String & GetCommandPath() const
G4ApplicationState GetCurrentState() const
const G4String GetPathName() const
G4bool contains(const std::string &) const
const char * data() const
const G4String GetTitle() const
G4UIcommandTree * GetTree() const
G4String & append(const G4String &)
G4String GetDefaultValue() const
void SetCoutDestination(G4UIsession *const value)
const G4UIcommand * GetGuidance() const
char GetParameterType() const
const G4String GetParameterGuidance() const
G4String GetParameterRange() const
G4int GetGuidanceEntries() const
G4int GetParameterEntries() const
G4String FindMacroPath(const G4String &fname) const
G4bool GetCurrentAsDefault() const
G4int ApplyCommand(const char *aCommand)