Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

# G4UIQt.cc

Go to the documentation of this file.

    00001 //
    00002 // ********************************************************************
    00003 // * License and Disclaimer                                           *
    00004 // *                                                                  *
    00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
    00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
    00007 // * conditions of the Geant4 Software License,  included in the file *
    00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
    00009 // * include a list of copyright holders.                             *
    00010 // *                                                                  *
    00011 // * Neither the authors of this software system, nor their employing *
    00012 // * institutes,nor the agencies providing financial support for this *
    00013 // * work  make  any representation or  warranty, express or implied, *
    00014 // * regarding  this  software system or assume any liability for its *
    00015 // * use.  Please see the license in the file  LICENSE  and URL above *
    00016 // * for the full disclaimer and the limitation of liability.         *
    00017 // *                                                                  *
    00018 // * This  code  implementation is the result of  the  scientific and *
    00019 // * technical work of the GEANT4 collaboration.                      *
    00020 // * By using,  copying,  modifying or  distributing the software (or *
    00021 // * any work based  on the software)  you  agree  to acknowledge its *
    00022 // * use  in  resulting  scientific  publications,  and indicate your *
    00023 // * acceptance of all terms of the Geant4 Software license.          *
    00024 // ********************************************************************
    00025 //
    00026 //
    00027 // $Id: G4UIQt.cc,v 1.14 2007/05/29 11:09:49 $
    00028 // GEANT4 tag $Name: geant4-08-01 $
    00029 //
    00030 // L. Garnier
    00031
    00032 //#define DEBUG
    00033
    00034 #ifdef G4UI_BUILD_QT_SESSION
    00035
    00036 #include "G4Types.hh"
    00037
    00038 #include <string.h>
    00039
    00040 #include "G4UIQt.hh"
    00041 #include "G4UImanager.hh"
    00042 #include "G4StateManager.hh"
    00043 #include "G4UIcommandTree.hh"
    00044 #include "G4UIcommandStatus.hh"
    00045
    00046 #include "G4Qt.hh"
    00047
    00048 #include <QtGui/qapplication.h>
    00049 #include <QtGui/qwidget.h>
    00050 #include <QtGui/qmenu.h>
    00051 #include <QtGui/qmenubar.h>
    00052 #include <QtGui/qboxlayout.h>
    00053 #include <QtGui/qpushbutton.h>
    00054 #include <QtGui/qlabel.h>
    00055 #include <QtGui/qsplitter.h>
    00056 #include <QtGui/qscrollbar.h>
    00057 #include <QtGui/qdialog.h>
    00058 #include <QtGui/qevent.h>
    00059
    00060 #include <stdlib.h>
    00061
    00062 // Pourquoi Static et non  variables de classe ?
    00063 static G4bool exitSession = true;
    00064 static G4bool exitPause = true;
    00065
    00087 G4UIQt::G4UIQt (
    00088                 int argc,
    00089                 char** argv
    00090                 )
    00091   :fHelpDialog(NULL)
    00092 {
    00093   G4Qt* interactorManager = G4Qt::getInstance ();
    00094   G4UImanager* UI = G4UImanager::GetUIpointer();
    00095   if(UI!=NULL) UI->SetSession(this);
    00096
    00097   fMainWindow = new QMainWindow();
    00098   fMainWindow->setWindowTitle( "G4UI Session" );
    00099   fMainWindow->resize(800,600);
    00100   fMainWindow->move(QPoint(200,100));
    00101
    00102   QSplitter *splitter = new QSplitter(Qt::Vertical);
    00103   fTextArea = new QTextEdit();
    00104   QPushButton *clearButton = new QPushButton("clear");
    00105   connect(clearButton, SIGNAL(clicked()), SLOT(clearButtonCallback()));
    00106
    00107   fCommandHistoryArea = new QListWidget();
    00108   fCommandHistoryArea->setSelectionMode(QAbstractItemView::SingleSelection);
    00109   connect(fCommandHistoryArea, SIGNAL(itemSelectionChanged()), SLOT(commandHistoryCallback()));
    00110   fCommandHistoryArea->installEventFilter(this);
    00111   fCommandLabel = new QLabel();
    00112
    00113   fCommandArea = new QLineEdit();
    00114   fCommandArea->installEventFilter(this);
    00115   fCommandArea->activateWindow();
    00116   connect(fCommandArea, SIGNAL(returnPressed()), SLOT(commandEnteredCallback()));
    00117   //  fCommandArea->setFocusPolicy ( Qt::StrongFocus );
    00118   //  fCommandArea->setFocus(Qt::TabFocusReason);
    00119   fTextArea->setReadOnly(true);
    00120
    00121
    00122   // Set layouts
    00123
    00124   QWidget* topWidget = new QWidget();
    00125   QVBoxLayout *layoutTop = new QVBoxLayout;
    00126
    00127   QWidget* bottomWidget = new QWidget();
    00128   QVBoxLayout *layoutBottom = new QVBoxLayout;
    00129
    00130
    00131   layoutTop->addWidget(fTextArea);
    00132   layoutTop->addWidget(clearButton);
    00133   topWidget->setLayout(layoutTop);
    00134
    00135   layoutBottom->addWidget(fCommandHistoryArea);
    00136   layoutBottom->addWidget(fCommandLabel);
    00137   layoutBottom->addWidget(fCommandArea);
    00138   bottomWidget->setLayout(layoutBottom);
    00139
    00140
    00141   splitter->addWidget(topWidget);
    00142   splitter->addWidget(bottomWidget);
    00143   fMainWindow->setCentralWidget(splitter);
    00144
    00145   // Add a quit subMenu
    00146   QMenu *fileMenu = fMainWindow->menuBar()->addMenu("File");
    00147   fileMenu->addAction("Quitter", fMainWindow, SLOT(close()));
    00148
    00149   // Add a Help menu
    00150   QMenu *helpMenu = fMainWindow->menuBar()->addMenu("Help");
    00151   helpMenu->addAction("Show Help", this, SLOT(showHelpCallback()));
    00152
    00153   // Set the splitter size. The fTextArea sould be 2/3 on the fMainWindow
    00154   QList<int> vals = splitter->sizes();
    00155   if(vals.size()==2) {
    00156     vals[0] = (splitter->orientation()==Qt::Vertical ? splitter->height() : splitter->width())*3/4;
    00157     vals[1] = (splitter->orientation()==Qt::Vertical ? splitter->height() : splitter->width())*1/4;
    00158     splitter->setSizes(vals);
    00159   }
    00160
    00161
    00162   if(UI!=NULL) UI->SetCoutDestination(this);  // TO KEEP
    00163 }
    00164
    00165
    00166
    00167 G4UIQt::~G4UIQt(
    00168 )
    00169 {
    00170   G4UImanager* UI = G4UImanager::GetUIpointer();  // TO KEEP
    00171   if(UI!=NULL) {  // TO KEEP
    00172     UI->SetSession(NULL);  // TO KEEP
    00173     UI->SetCoutDestination(NULL);  // TO KEEP
    00174   }
    00175
    00176
    00177   if (fMainWindow!=NULL)
    00178     delete fMainWindow;
    00179 }
    00180
    00181
    00182
    00183
    00187 G4UIsession* G4UIQt::SessionStart (
    00188 )
    00189 {
    00190
    00191   G4Qt* interactorManager = G4Qt::getInstance ();
    00192   fMainWindow->show();
    00193   Prompt("session");
    00194   exitSession = false;
    00195
    00196
    00197   printf("disable secondary loop\n");
    00198   interactorManager->DisableSecondaryLoop (); // TO KEEP
    00199   ((QApplication*)interactorManager->GetMainInteractor())->exec();
    00200   // on ne passe pas le dessous ? FIXME ????
    00201   // je ne pense pas 13/06
    00202
    00203   //   void* event; // TO KEEP
    00204   //   while((event = interactorManager->GetEvent())!=NULL) {  // TO KEEP
    00205   //     interactorManager->DispatchEvent(event); // TO KEEP
    00206   //     if(exitSession==true) break; // TO KEEP
    00207   //   } // TO KEEP
    00208
    00209   interactorManager->EnableSecondaryLoop ();
    00210   printf("enable secondary loop\n");
    00211   return this;
    00212 }
    00213
    00214
    00221 void G4UIQt::Prompt (
    00222  G4String aPrompt
    00223 )
    00224 {
    00225   fCommandLabel->setText((char*)aPrompt.data());
    00226 }
    00227
    00228
    00229 void G4UIQt::SessionTerminate (
    00230 )
    00231 {
    00232   G4Qt* interactorManager = G4Qt::getInstance ();
    00233   fMainWindow->close();
    00234   ((QApplication*)interactorManager->GetMainInteractor())->exit();
    00235 }
    00236
    00237
    00238
    00247 void G4UIQt::PauseSessionStart (
    00248  G4String aState
    00249 )
    00250 {
    00251   printf("G4UIQt::PauseSessionStart\n");
    00252   if(aState=="G4_pause> ") {  // TO KEEP
    00253     SecondaryLoop ("Pause, type continue to exit this state"); // TO KEEP
    00254   } // TO KEEP
    00255
    00256   if(aState=="EndOfEvent") { // TO KEEP
    00257     // Picking with feed back in event data Done here !!!
    00258     SecondaryLoop ("End of event, type continue to exit this state"); // TO KEEP
    00259   } // TO KEEP
    00260 }
    00261
    00262
    00263
    00268 void G4UIQt::SecondaryLoop (
    00269  G4String aPrompt
    00270 )
    00271 {
    00272   printf("G4UIQt::SecondaryLoop\n");
    00273   G4Qt* interactorManager = G4Qt::getInstance (); // TO KEEP ?
    00274   Prompt(aPrompt); // TO KEEP
    00275   exitPause = false; // TO KEEP
    00276   void* event; // TO KEEP
    00277   while((event = interactorManager->GetEvent())!=NULL) {  // TO KEEP
    00278     interactorManager->DispatchEvent(event); // TO KEEP
    00279     if(exitPause==true) break; // TO KEEP
    00280   } // TO KEEP
    00281   Prompt("session"); // TO KEEP
    00282 }
    00283
    00284
    00285
    00290 G4int G4UIQt::ReceiveG4cout (
    00291  G4String aString
    00292 )
    00293 {
    00294   fTextArea->append(QString((char*)aString.data()).trimmed());
    00295   fTextArea->verticalScrollBar()->setSliderPosition(fTextArea->verticalScrollBar()->maximum());
    00296   return 0;
    00297 }
    00298
    00299
    00304 G4int G4UIQt::ReceiveG4cerr (
    00305  G4String aString
    00306 )
    00307 {
    00308   QColor previousColor = fTextArea->textColor();
    00309   fTextArea->setTextColor(Qt::red);
    00310   fTextArea->append(QString((char*)aString.data()).trimmed());
    00311   fTextArea->setTextColor(previousColor);
    00312   fTextArea->verticalScrollBar()->setSliderPosition(fTextArea->verticalScrollBar()->maximum());
    00313   return 0;
    00314 }
    00315
    00316
    00317
    00323 void G4UIQt::AddMenu (
    00324  const char* aName
    00325 ,const char* aLabel
    00326 )
    00327 {
    00328   QMenu *fileMenu = new QMenu(aLabel);
    00329   fMainWindow->menuBar()->insertMenu(fMainWindow->menuBar()->actions().last(),fileMenu);
    00330   AddInteractor (aName,(G4Interactor)fileMenu);
    00331 }
    00332
    00333
    00340 void G4UIQt::AddButton (
    00341  const char* aMenu
    00342 ,const char* aLabel
    00343 ,const char* aCommand
    00344 )
    00345 {
    00346   if(aMenu==NULL) return; // TO KEEP
    00347   if(aLabel==NULL) return; // TO KEEP
    00348   if(aCommand==NULL) return; // TO KEEP
    00349   QMenu *parent = (QMenu*)GetInteractor(aMenu);
    00350   if(parent==NULL) return;
    00351
    00352   signalMapper = new QSignalMapper(this);
    00353   QAction *action = parent->addAction(aLabel, signalMapper, SLOT(map()));
    00354   signalMapper->setMapping(action, QString(aCommand));
    00355   connect(signalMapper, SIGNAL(mapped(const QString &)),this, SLOT(buttonCallback(const QString&)));
    00356 }
    00357
    00358
    00359
    00360
    00368 void G4UIQt::TerminalHelp(
    00369  G4String newCommand
    00370 )
    00371 {
    00372   if (!fHelpDialog) {
    00373     fHelpDialog = new QDialog;
    00374
    00375     QSplitter *splitter = new QSplitter(Qt::Horizontal);
    00376     fHelpArea = new QTextEdit();
    00377     QPushButton *exitButton = new QPushButton("Exit");
    00378     connect(exitButton, SIGNAL(clicked()), fHelpDialog,SLOT(close()));
    00379     fHelpArea->setReadOnly(true);
    00380
    00381     // the help tree
    00382     G4UImanager* UI = G4UImanager::GetUIpointer();
    00383     if(UI==NULL) return;
    00384     G4UIcommandTree * treeTop = UI->GetTree();
    00385
    00386     // build widget
    00387     fHelpTreeWidget = new QTreeWidget();
    00388     fHelpTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    00389     fHelpTreeWidget->setColumnCount(2);
    00390     fHelpTreeWidget->setColumnHidden(1,true);
    00391     QStringList labels;
    00392     labels << QString("Command") << QString("Description");
    00393     fHelpTreeWidget->setHeaderLabels(labels);
    00394
    00395     QList<QTreeWidgetItem *> items;
    00396     G4int treeSize = treeTop->GetTreeEntry();
    00397     QTreeWidgetItem * newItem;
    00398     for (int a=0;a<treeSize;a++) {
    00399       // Creating new item
    00400       QStringList stringList;
    00401       stringList << QString((char*)(treeTop->GetTree(a+1)->GetPathName()).data()).trimmed()  ;
    00402       stringList << QString((char*)(treeTop->GetTree(a+1)->GetTitle()).data()).trimmed()  ;
    00403
    00404       newItem = new QTreeWidgetItem(stringList);
    00405
    00406       // look for childs
    00407       CreateChildTree(newItem,treeTop->GetTree(a+1));
    00408       items.append(newItem);
    00409     }
    00410     fHelpTreeWidget->insertTopLevelItems(0, items);
    00411
    00412     //connecting callback
    00413     //  QSignalMapper signalMapper = new QSignalMapper(this);
    00414
    00415     connect(fHelpTreeWidget, SIGNAL(itemSelectionChanged ()),this, SLOT(helpTreeCallback()));
    00416
    00417     // Set layouts
    00418
    00419     QVBoxLayout *vLayout = new QVBoxLayout;
    00420
    00421     splitter->addWidget(fHelpTreeWidget);
    00422     splitter->addWidget(fHelpArea);
    00423
    00424     vLayout->addWidget(splitter);
    00425     vLayout->addWidget(exitButton);
    00426     fHelpDialog->setLayout(vLayout);
    00427
    00428   }
    00429
    00430   // Look for the choosen command "newCommand"
    00431   size_t i = newCommand.index(" ");
    00432   G4String targetCom="";
    00433   if( i != std::string::npos )
    00434     {
    00435       G4String newValue = newCommand(i+1,newCommand.length()-(i+1));
    00436       newValue.strip(G4String::both);
    00437       targetCom = ModifyToFullPathCommand( newValue );
    00438       printf("test : av:%s-- ap:%s--\n",((char*)newValue.data()),((char*)targetCom.data()));
    00439     }
    00440   if (targetCom != "") {
    00441     QList<QTreeWidgetItem *> list = fHelpTreeWidget->findItems(QString(((char*)targetCom.data())),Qt::MatchFixedString,0);
    00442     for (int a=0;a<13;a++) {
    00443       printf("verif.... =%s= +%s+\n",fHelpTreeWidget->topLevelItem(a)->text(0).toStdString().c_str(),((char*)targetCom.data()));
    00444     }
    00445
    00446     if (!list.isEmpty()) {
    00447       if (list.first()->childCount() >0)
    00448         list.first()->setExpanded(true);
    00449
    00450       //collapsed open item
    00451       QList<QTreeWidgetItem *> selected;
    00452       selected = fHelpTreeWidget->selectedItems();
    00453       if ( selected.count() != 0 ) {
    00454         fHelpTreeWidget->collapseItem (selected.at( 0 ) );
    00455       }
    00456
    00457       // clear old selection
    00458       fHelpTreeWidget->clearSelection();
    00459       list.first()->setSelected(true);
    00460
    00461       // Call the update of the right textArea
    00462       helpTreeCallback();
    00463     }
    00464   }
    00465   fHelpDialog->setWindowTitle("Help on commands");
    00466   fHelpDialog->resize(800,600);
    00467   fHelpDialog->move(QPoint(400,150));
    00468   fHelpDialog->show();
    00469   fHelpDialog->raise();
    00470   fHelpDialog->activateWindow();
    00471 }
    00472
    00473
    00474
    00480 void G4UIQt::CreateChildTree(
    00481  QTreeWidgetItem *aParent
    00482 ,G4UIcommandTree *aCommandTree
    00483 )
    00484 {
    00485
    00486   // Creating new item
    00487   QTreeWidgetItem * newItem;
    00488
    00489
    00490   // Get the Sub directories
    00491   for (int a=0;a<aCommandTree->GetTreeEntry();a++) {
    00492
    00493     QStringList stringList;
    00494     stringList << QString((char*)(aCommandTree->GetTree(a+1)->GetPathName()).data()).trimmed()  ;
    00495     stringList << QString((char*)(aCommandTree->GetTree(a+1)->GetTitle()).data()).trimmed()  ;
    00496     newItem = new QTreeWidgetItem(stringList);
    00497
    00498     CreateChildTree(newItem,aCommandTree->GetTree(a+1));
    00499     aParent->addChild(newItem);
    00500   }
    00501
    00502
    00503
    00504   // Get the Commands
    00505
    00506   for (int a=0;a<aCommandTree->GetCommandEntry();a++) {
    00507
    00508     QStringList stringList;
    00509     stringList << QString((char*)(aCommandTree->GetCommand(a+1)->GetCommandPath()).data()).trimmed()  ;
    00510     stringList << QString((char*)(aCommandTree->GetCommand(a+1)->GetCommandPath()).data()).trimmed()  ;
    00511     newItem = new QTreeWidgetItem(stringList);
    00512
    00513     aParent->addChild(newItem);
    00514     newItem->setExpanded(false);
    00515   }
    00516 }
    00517
    00518
    00526 QString G4UIQt::GetCommandList (
    00527  G4UIcommand *aCommand
    00528 )
    00529 {
    00530
    00531   QString txt;
    00532   G4String commandPath = aCommand->GetCommandPath();
    00533   G4String rangeString = aCommand->GetRange();
    00534
    00535   if((commandPath.length()-1)!='/')
    00536     {
    00537       txt += "Command " + QString((char*)(commandPath).data()) + "\n";
    00538     }
    00539   txt += "Guidance :\n";
    00540   G4int n_guidanceEntry = aCommand->GetGuidanceEntries();
    00541
    00542   for( G4int i_thGuidance=0; i_thGuidance < n_guidanceEntry; i_thGuidance++ )
    00543     { txt += QString((char*)(aCommand->GetGuidanceLine(i_thGuidance)).data()) + "\n"; }
    00544   if( ! rangeString.isNull() )
    00545     { txt += " Range of parameters : " + QString((char*)(rangeString).data()) + "\n"; }
    00546   G4int n_parameterEntry = aCommand->GetParameterEntries();
    00547   if( n_parameterEntry > 0 )
    00548     {
    00549       G4UIparameter *param;
    00550
    00551       // Re-implementation of G4UIparameter.cc
    00552
    00553       for( G4int i_thParameter=0; i_thParameter<n_parameterEntry; i_thParameter++ )
    00554         { param = aCommand->GetParameter(i_thParameter);
    00555           txt += "\nParameter : " + QString((char*)(param->GetParameterName()).data()) + "\n";
    00556           if( ! param->GetParameterGuidance().isNull() )
    00557             txt += QString((char*)(param->GetParameterGuidance()).data())+ "\n" ;
    00558           txt += " Parameter type  : " + QString(param->GetParameterType())+ "\n";
    00559           if(param->IsOmittable())
    00560             { txt += " Omittable       : True\n"; }
    00561           else
    00562             { txt += " Omittable       : False\n"; }
    00563           if( param->GetCurrentAsDefault() )
    00564             { txt += " Default value   : taken from the current value\n"; }
    00565           else if( ! param->GetDefaultValue().isNull() )
    00566             { txt += " Default value   : " + QString((char*)(param->GetDefaultValue()).data())+ "\n"; }
    00567           if( ! param->GetParameterRange().isNull() )
    00568             txt += " Parameter range : " + QString((char*)(param->GetParameterRange()).data())+ "\n";
    00569           if( ! param->GetParameterCandidates().isNull() )
    00570             txt += " Candidates      : " + QString((char*)(param->GetParameterCandidates()).data())+ "\n";
    00571         }
    00572     }
    00573   return txt;
    00574 }
    00575
    00576
    00577
    00581 G4bool G4UIQt::GetHelpChoice(
    00582  G4int& aInt
    00583 )
    00584 {
    00585   printf("G4UIQt::GetHelpChoice SHOULD NEVER GO HERE");
    00586   return true;
    00587 }
    00588
    00589
    00593 void G4UIQt::ExitHelp(
    00594 )
    00595 {
    00596   printf("G4UIQt::ExitHelp SHOULD NEVER GO HERE");
    00597 }
    00598
    00599
    00608 bool G4UIQt::eventFilter(
    00609                          QObject *obj
    00610                          ,QEvent *event
    00611                          )
    00612 {
    00613   if (obj == fCommandHistoryArea) {
    00614     if (event->type() == QEvent::KeyPress) {
    00615       fCommandArea->setFocus();
    00616     }
    00617   }
    00618   if (obj == fCommandArea) {
    00619     if (event->type() == QEvent::KeyPress) {
    00620       QKeyEvent *e = static_cast<QKeyEvent*>(event);
    00621       if ((e->key() == (Qt::Key_Down)) ||
    00622           (e->key() == (Qt::Key_PageDown)) ||
    00623           (e->key() == (Qt::Key_Up)) ||
    00624           (e->key() == (Qt::Key_PageUp))) {
    00625         int selection = fCommandHistoryArea->currentRow();
    00626         for (int a=0;a<fCommandHistoryArea->count();a++) {
    00627
    00628         }
    00629         if (fCommandHistoryArea->count()) {
    00630           if (selection == -1) {
    00631             selection = fCommandHistoryArea->count()-1;
    00632           }
    00633           if (e->key() == (Qt::Key_Down)) {
    00634             if (selection <(fCommandHistoryArea->count()-1))
    00635               selection++;
    00636           } else if (e->key() == (Qt::Key_PageDown)) {
    00637             selection = fCommandHistoryArea->count()-1;
    00638           } else if (e->key() == (Qt::Key_Up)) {
    00639             if (selection >0)
    00640               selection --;
    00641           } else if (e->key() == (Qt::Key_PageUp)) {
    00642             selection = 0;
    00643           }
    00644           fCommandHistoryArea->clearSelection();
    00645           fCommandHistoryArea->item(selection)->setSelected(true);
    00646           fCommandHistoryArea->setCurrentItem(fCommandHistoryArea->item(selection));
    00647         }
    00648       }
    00649     }
    00650   }
    00651   // pass the event on to the parent class
    00652   return QObject::eventFilter(obj, event);
    00653 }
    00654
    00655
    00656
    00657
    00658 /***************************************************************************/
    00659 //
    00660 //             SLOTS DEFINITIONS
    00661 //
    00662 /***************************************************************************/
    00663
    00667 void G4UIQt::showHelpCallback (
    00668 )
    00669 {
    00670   TerminalHelp("");
    00671 }
    00672
    00673
    00677 void G4UIQt::clearButtonCallback (
    00678 )
    00679 {
    00680   fTextArea->clear();
    00681 }
    00682
    00683
    00688 void G4UIQt::commandEnteredCallback (
    00689 )
    00690 {
    00691   G4String command (fCommandArea->text().toStdString().c_str());
    00692   if (fCommandArea->text().trimmed() != "") {
    00693     fCommandHistoryArea->addItem(fCommandArea->text());
    00694     fCommandHistoryArea->clearSelection();
    00695     fCommandHistoryArea->item(fCommandHistoryArea->count()-1)->setSelected(true);
    00696     fCommandHistoryArea->setCurrentItem(fCommandHistoryArea->item(fCommandHistoryArea->count()-1));
    00697
    00698     if (command(0,4) != "help") {
    00699       ApplyShellCommand (command,exitSession,exitPause);
    00700     } else {
    00701       TerminalHelp(command);
    00702     }
    00703     if(exitSession==true)
    00704       SessionTerminate();
    00705   }
    00706   fCommandArea->setText("");
    00707 }
    00708
    00709
    00715 void G4UIQt::buttonCallback (
    00716  const QString& aCommand
    00717 )
    00718 {
    00719   G4String ss = G4String(aCommand.toStdString().c_str());
    00720   printf ("debug : execute:\n-%s- %d %d \n",ss.data(),exitSession,exitPause);
    00721   ApplyShellCommand(ss,exitSession,exitPause);
    00722   if(exitSession==true)
    00723     SessionTerminate();
    00724 }
    00725
    00726
    00727
    00731 void G4UIQt::helpTreeCallback (
    00732 )
    00733 {
    00734   //  G4bool GetHelpChoice(G4int&);
    00735   QTreeWidgetItem* item =  NULL;
    00736   if (!fHelpTreeWidget)
    00737     return ;
    00738
    00739   if (!fHelpArea)
    00740     return;
    00741
    00742   QList<QTreeWidgetItem *> list =fHelpTreeWidget->selectedItems();
    00743   if (list.isEmpty())
    00744     return;
    00745   item = list.first();
    00746   if (!item)
    00747     return;
    00748
    00749   G4UImanager* UI = G4UImanager::GetUIpointer();
    00750   if(UI==NULL) return;
    00751   G4UIcommandTree * treeTop = UI->GetTree();
    00752   G4UIcommand* command = treeTop->FindPath(item->text (1).toStdString().c_str());
    00753   if (command) {
    00754     fHelpArea->setText(GetCommandList(command));
    00755   } else {
    00756     // this is not a command, this is a sub directory
    00757     // We display the Title
    00758     fHelpArea->setText(item->text (1).toStdString().c_str());
    00759   }
    00760 }
    00761
    00762
    00767 void G4UIQt::commandHistoryCallback(
    00768 )
    00769 {
    00770   QListWidgetItem* item =  NULL;
    00771   if (!fCommandHistoryArea)
    00772     return ;
    00773
    00774
    00775   QList<QListWidgetItem *> list =fCommandHistoryArea->selectedItems();
    00776   if (list.isEmpty())
    00777     return;
    00778   item = list.first();
    00779   if (!item)
    00780     return;
    00781   fCommandArea->setText(item->text());
    00782
    00783 }
    00784
    00785 #endif