Changeset 1223 for trunk


Ignore:
Timestamp:
Dec 16, 2009, 6:13:38 PM (15 years ago)
Author:
garnier
Message:

premiers essai nouvelle version de G4UIQt

Location:
trunk/source/interfaces/basic
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/interfaces/basic/include/G4UIQt.hh

    r1178 r1223  
    5454class QTextEdit;
    5555class QLabel;
    56 class QDialog;
    5756class QTabWidget;
     57class QResizeEvent;
     58class QToolBox;
    5859
    5960// Class description :
     
    111112private:
    112113  void SecondaryLoop(G4String); // a VIRER
    113   void TerminalHelp(G4String);
     114  void CreateHelpWidget();
    114115#if QT_VERSION < 0x040000
    115116  QListView * CreateHelpTree();
     
    129130
    130131  G4bool GetHelpChoice(G4int&) ;// have to be implemeted because we heritate from G4VBasicShell
    131   void ExitHelp();// have to be implemeted because we heritate from G4VBasicShell
    132132  bool eventFilter(QObject*,QEvent*);
    133133  void ActivateCommand(G4String);
     
    146146  QTextEdit *fTextArea;
    147147  QTextEdit *fHelpArea;
     148  QToolBox* fToolBox;
     149
    148150#if QT_VERSION < 0x040000
    149151  QListView *fCommandHistoryArea;
     
    153155  QTreeWidget *fHelpTreeWidget;
    154156#endif
    155   QDialog *fHelpDialog;
     157  QWidget *fHelpTBWidget;
    156158  QLineEdit *helpLine;
    157159  QWidget *visWidget;
     
    173175  void lookForHelpStringCallback();
    174176  void UpdateTabWidget(int);
     177  void ResizeTabWidget( QResizeEvent* );
    175178};
    176179
  • trunk/source/interfaces/basic/src/G4UIQt.cc

    r1184 r1223  
    5151#include <qpushbutton.h>
    5252#include <qlabel.h>
     53#include <qtoolbox.h>
    5354#include <qsplitter.h>
    5455#include <qscrollbar.h>
     
    5859#include <qsignalmapper.h>
    5960#include <qtabwidget.h>
     61#include <qtabbar.h>
     62#include <qresizeevent>
    6063
    6164#include <qmainwindow.h>
     
    104107,char** argv
    105108)
    106 :fHelpDialog(NULL)
    107 ,fTabWidget(NULL)
     109:fTabWidget(NULL)
    108110,fCoutText("Output")
    109111{
     
    163165  QWidget *mainWidget = new QWidget(fMainWindow);
    164166#if QT_VERSION < 0x040000
    165   QSplitter *visHistorySplitter = new QSplitter(Qt::Vertical,fMainWindow);
    166   QSplitter *historyCommandLineSplitter = new QSplitter(Qt::Vertical,fMainWindow);
    167 #else
    168   QSplitter *visHistorySplitter = new QSplitter(Qt::Vertical,mainWidget);
    169   QSplitter *historyCommandLineSplitter = new QSplitter(Qt::Vertical,mainWidget);
     167  QSplitter *myVSplitter = new QSplitter(Qt::Horizontal,fMainWindow);
     168  fToolBox = new QToolBox(Qt::Horizontal,myVSplitter);
     169#else
     170  QSplitter *myVSplitter = new QSplitter(Qt::Horizontal,fMainWindow);
     171  fToolBox = new QToolBox(mainWidget);
    170172#endif
    171173
     
    176178
    177179  fTabWidget = new QTabWidget;
     180
    178181  connect(fTabWidget, SIGNAL(currentChanged ( int ) ), SLOT(UpdateTabWidget(int)));
    179 
    180   visWidget = new QWidget(visHistorySplitter);
    181   QWidget* coutWidget = new QWidget(fTabWidget);
    182   QWidget* historyWidget = new QWidget(historyCommandLineSplitter);
    183   QWidget* commandLineWidget = new QWidget(historyCommandLineSplitter);
     182  connect(fTabWidget, SIGNAL(resizeEvent (  QResizeEvent* ) ), SLOT(ResizeTabWidget( QResizeEvent*)));
     183
     184  visWidget = new QWidget(myVSplitter);
     185  QWidget* coutTBWidget = new QWidget(fToolBox);
     186  fHelpTBWidget = new QWidget(fToolBox);
     187  QWidget* visParametersTBWidget = new QWidget(fToolBox);
     188  QWidget* viewComponentsTBWidget = new QWidget(fToolBox);
     189  QWidget* historyTBWidget = new QWidget(fToolBox);
     190  QWidget* commandLineWidget = new QWidget(mainWidget);
    184191
    185192  //  QVBoxLayout *layoutVis = new QVBoxLayout(visWidget);
    186   QVBoxLayout *layoutCout = new QVBoxLayout(coutWidget);
    187   QVBoxLayout *layoutHistory = new QVBoxLayout(historyWidget);
     193  QVBoxLayout *layoutCout = new QVBoxLayout(coutTBWidget);
     194  QVBoxLayout *layoutHistory = new QVBoxLayout(historyTBWidget);
    188195  QVBoxLayout *layoutCommandLine = new QVBoxLayout(commandLineWidget);
    189196
    190197  // fill them
    191198
    192   fTabWidget->addTab(coutWidget,fCoutText);
    193  
    194   fTextArea = new QTextEdit(coutWidget);
    195   QPushButton *clearButton = new QPushButton("clear",coutWidget);
     199  fTextArea = new QTextEdit(coutTBWidget);
     200  QPushButton *clearButton = new QPushButton("clear",coutTBWidget);
    196201  connect(clearButton, SIGNAL(clicked()), SLOT(ClearButtonCallback()));
    197202
    198203#if QT_VERSION < 0x040000
    199204
    200   fCommandHistoryArea = new QListView(historyWidget);
     205  fCommandHistoryArea = new QListView(historyTBWidget);
    201206  fCommandHistoryArea->setSorting (-1, FALSE);
    202207  fCommandHistoryArea->setSelectionMode(QListView::Single);
     
    210215#endif
    211216  fCommandHistoryArea->installEventFilter(this);
     217
    212218  fCommandLabel = new QLabel("",commandLineWidget);
    213219
     
    243249  //  topWidget->setLayout(layoutTop);
    244250#endif
     251
    245252
    246253  layoutHistory->addWidget(fCommandHistoryArea);
     
    249256#if QT_VERSION >= 0x040000
    250257
    251   //  bottomWidget->setLayout(layoutBottom);
    252258  QVBoxLayout *mainLayout = new QVBoxLayout(mainWidget);
    253259
    254   // the splitter for History/CommandLine
    255   historyCommandLineSplitter->addWidget(historyWidget);
    256   historyCommandLineSplitter->addWidget(commandLineWidget);
    257 
    258   // The splitter for Vis/Cout
    259   visHistorySplitter->addWidget(visWidget);
    260   visHistorySplitter->addWidget(historyCommandLineSplitter);
    261 
    262   mainLayout->addWidget(visHistorySplitter);
     260  CreateHelpWidget();
     261  // the splitter
     262  fToolBox->addItem(visParametersTBWidget,"Vis parameters");
     263  fToolBox->addItem(viewComponentsTBWidget,"Viewer components");
     264  fToolBox->addItem(fHelpTBWidget,"Help");
     265  fToolBox->addItem(coutTBWidget,"Cout");
     266  fToolBox->addItem(historyTBWidget,"History");
     267
     268
     269  fToolBox->setSizePolicy (QSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed));
     270  visWidget->setSizePolicy (QSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum));
     271
     272  QSizePolicy policy = visWidget->sizePolicy();
     273  policy.setHorizontalStretch(1);
     274  policy.setVerticalStretch(1);
     275  visWidget->setSizePolicy(policy);
     276
     277  myVSplitter->addWidget(fToolBox);
     278  myVSplitter->addWidget(visWidget);
     279
     280  commandLineWidget->setSizePolicy (QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum));
     281  mainLayout->addWidget(myVSplitter,1);
     282  mainLayout->addWidget(commandLineWidget);
    263283
    264284#endif
     
    270290  fMainWindow->setCentralWidget(mainWidget);
    271291#else
    272   fMainWindow->setCentralWidget(visHistorySplitter);
     292  fMainWindow->setCentralWidget(myVSplitter);
    273293#endif
    274294
     
    280300  fMainWindow->menuBar()->insertItem( QString("&File"), fileMenu );
    281301
    282   // Add a Help menu
    283   QPopupMenu *helpMenu = new QPopupMenu( fMainWindow );
    284   helpMenu->insertItem( "&Show Help",  this, SLOT(ShowHelpCallback()), CTRL+Key_H );
    285   fMainWindow->menuBar()->insertItem( QString("&Help"), helpMenu );
    286 
    287 
    288302#else
    289303
     
    292306  fileMenu->addAction("Quit", this, SLOT(ExitSession()));
    293307
    294   // Add a Help menu
    295   QMenu *helpMenu = fMainWindow->menuBar()->addMenu("Help");
    296   helpMenu->addAction("Show Help", this, SLOT(ShowHelpCallback()));
    297308#endif
    298309
    299310  AddInteractor ("file",(G4Interactor)fileMenu);
    300   AddInteractor ("help",(G4Interactor)helpMenu);
    301311#ifdef G4DEBUG_INTERFACES_BASIC
    302312  printf("G4UIQt::G4UIQt :: 6\n");
     
    357367)
    358368{
     369#ifdef G4DEBUG_INTERFACES_BASIC
     370  printf("G4UIQt::AddTabVisWidget %d %d\n",sizeX, sizeY);
     371#endif
    359372  if (fTabWidget != NULL) {
    360373    if (!aWidget) return;
    361374   
     375#ifdef G4DEBUG_INTERFACES_BASIC
     376    printf("G4UIQt::AddTabVisWidget ADD %d %d + %d %d---------------------------------------------------\n",sizeX, sizeY,sizeX-visWidget->width(),sizeY-visWidget->height());
     377#endif
     378
    362379#if QT_VERSION < 0x040000
    363380    aWidget->reparent(visWidget,0,QPoint(0,0)); 
     
    366383#endif
    367384   
    368     fTabWidget->addTab(aWidget,name);
     385    fTabWidget->insertTab(fTabWidget->count()-1,aWidget,name);
    369386    QHBoxLayout *mainLayout = new QHBoxLayout(visWidget);
    370387    mainLayout->setMargin(0);
     
    373390
    374391    // Set the size
     392    //    fMainWindow->setSizeIncrement();
     393
     394    fMainWindow->resize(fMainWindow->width()+sizeX-visWidget->width(),
     395                        fMainWindow->height()+sizeY-visWidget->height());
     396  }
     397}
     398
     399
     400void G4UIQt::UpdateTabWidget(int tabNumber) {
    375401#ifdef G4DEBUG_INTERFACES_BASIC
    376     printf("G4UIQt::AddTabWidget size:%d %d\n",sizeX,sizeY);
    377 #endif
    378     //    resize(sizeX,sizeY);
    379   }
    380 }
    381 
    382 
    383 void G4UIQt::UpdateTabWidget(int tabNumber) {
     402    printf("G4UIQt::UpdateTabWidget\n");
     403#endif
    384404  QString text = fTabWidget->tabText (tabNumber);
    385405  if ( text != fCoutText) {
    386406
    387407    // Then we have to do /vis/viewer/select on the selelected tab
     408    // And resize selected tab
     409    fTabWidget->currentWidget()->resize(fTabWidget->currentWidget()->width(),fTabWidget->currentWidget()->height());
     410
    388411    QString paramSelect = QString("/vis/viewer/select ")+text;
    389412    QString paramFlush = QString("/vis/viewer/flush ")+text;
     
    398421
    399422
     423/** Send resize event to all tabs
     424 */
     425void G4UIQt::ResizeTabWidget( QResizeEvent* e) {
     426  for (int a=0;a<fTabWidget->count() ;a++) {
     427#ifdef G4DEBUG_INTERFACES_BASIC
     428    printf("G4UIQt::ResizeTabWidget +++++++++++++++++++++++++++++++++++++++\n");
     429#endif
     430    fTabWidget->widget(a)->resize(e->size());
     431  }
     432}
     433
    400434
    401435/**   Start the Qt main loop
     
    416450  fMainWindow->show();
    417451#endif
    418   Prompt("session");
     452  Prompt("Session :");
    419453  exitSession = false;
    420454
     
    508542    if(exitPause==true) break; // TO KEEP
    509543  } // TO KEEP
    510   Prompt("session"); // TO KEEP
     544  Prompt("Session :"); // TO KEEP
    511545}
    512546
     
    644678
    645679/**
    646    Open the help dialog in a separate window.<br>
    647    This will be display as a tree widget.<br>
     680   Create the fHelpTBWidget
    648681   Implementation of <b>void G4VBasicShell::TerminalHelp(G4String newCommand)</b>
    649 
    650    @param newCommand : open the tree widget item on this command if is set
    651 */
    652 void G4UIQt::TerminalHelp(
    653  G4String newCommand
    654 )
    655 {
    656   // Create the help dialog
    657   if (!fHelpDialog) {
    658 #if QT_VERSION < 0x040000
    659     fHelpDialog = new QDialog(0,0,FALSE,Qt::WStyle_Title | Qt::WStyle_SysMenu | Qt::WStyle_MinMax );
    660 #else
    661     fHelpDialog = new QDialog(0,Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint);
    662 #endif
    663     QVBoxLayout *vLayout = new QVBoxLayout(fHelpDialog);
    664     QWidget *helpWidget = new QWidget(fHelpDialog);
    665     QSplitter *splitter = new QSplitter(Qt::Horizontal,fHelpDialog);
    666     QPushButton *exitButton = new QPushButton("Exit",fHelpDialog);
    667     exitButton->setAutoDefault(false);
    668     connect(exitButton, SIGNAL(clicked()), fHelpDialog,SLOT(close()));
    669    
    670     QHBoxLayout *helpLayout = new QHBoxLayout(helpWidget);
    671 #if QT_VERSION < 0x040000
    672     helpLayout->add(new QLabel("Search :",helpWidget));
    673 #else
    674     helpLayout->addWidget(new QLabel("Search :",helpWidget));
    675 #endif
    676     helpLine = new QLineEdit(fHelpDialog);
    677 #if QT_VERSION < 0x040000
    678     helpLayout->add(helpLine);
    679     connect( helpLine, SIGNAL( returnPressed () ), this, SLOT( lookForHelpStringCallback() ) );
    680 #else
    681     helpLayout->addWidget(helpLine);
    682     connect( helpLine, SIGNAL( editingFinished () ), this, SLOT( lookForHelpStringCallback() ) );
    683 #endif
    684 
    685     // the help tree
    686 #if QT_VERSION < 0x040000
    687     fHelpTreeWidget = new QListView(splitter);
    688 #else
    689     fHelpTreeWidget = new QTreeWidget();
    690 #endif
    691     fHelpTreeWidget = CreateHelpTree();
    692 
    693     fHelpArea = new QTextEdit(splitter);
    694     fHelpArea->setReadOnly(true);
    695 
    696     // Set layouts
    697 
     682*/
     683void G4UIQt::CreateHelpWidget(
     684)
     685{
     686 
     687  QVBoxLayout *vLayout = new QVBoxLayout(fHelpTBWidget);
     688  QWidget *helpWidget = new QWidget(fHelpTBWidget);
     689  QSplitter *splitter = new QSplitter(Qt::Horizontal,fHelpTBWidget);
     690 
     691  QHBoxLayout *helpLayout = new QHBoxLayout(helpWidget);
     692#if QT_VERSION < 0x040000
     693  helpLayout->add(new QLabel("Search :",helpWidget));
     694#else
     695  helpLayout->addWidget(new QLabel("Search :",helpWidget));
     696#endif
     697  helpLine = new QLineEdit(fHelpTBWidget);
     698#if QT_VERSION < 0x040000
     699  helpLayout->add(helpLine);
     700  connect( helpLine, SIGNAL( returnPressed () ), this, SLOT( lookForHelpStringCallback() ) );
     701#else
     702  helpLayout->addWidget(helpLine);
     703  connect( helpLine, SIGNAL( editingFinished () ), this, SLOT( lookForHelpStringCallback() ) );
     704#endif
     705 
     706  // the help tree
     707#if QT_VERSION < 0x040000
     708  fHelpTreeWidget = new QListView(splitter);
     709#else
     710  fHelpTreeWidget = new QTreeWidget();
     711#endif
     712  fHelpTreeWidget = CreateHelpTree();
     713 
     714  fHelpArea = new QTextEdit(splitter);
     715  fHelpArea->setReadOnly(true);
     716 
     717  // Set layouts
     718 
    698719#if QT_VERSION >= 0x040000
    699     if (fHelpTreeWidget)
    700       splitter->addWidget(fHelpTreeWidget);
    701     splitter->addWidget(fHelpArea);
    702 #endif
    703 
    704 
     720  if (fHelpTreeWidget)
     721    splitter->addWidget(fHelpTreeWidget);
     722  splitter->addWidget(fHelpArea);
     723#endif
     724 
     725 
    705726#if QT_VERSION >= 0x040000
    706     vLayout->addWidget(helpWidget);
    707     vLayout->addWidget(splitter,1);
    708     vLayout->addWidget(exitButton);
    709 #else
    710     vLayout->addWidget(helpWidget);
    711     vLayout->addWidget(splitter,1);
    712     vLayout->addWidget(exitButton);
    713 #endif
    714 
    715     // set the splitter size
     727  vLayout->addWidget(helpWidget);
     728  vLayout->addWidget(splitter,1);
     729#else
     730  vLayout->addWidget(helpWidget);
     731  vLayout->addWidget(splitter,1);
     732#endif
     733 
     734  // set the splitter size
    716735#if QT_VERSION >= 0x040000
    717     QList<int> list;
    718 #else
    719     QValueList<int> list;
    720 #endif
    721     list.append( 400 );
    722     list.append( 400 );
    723     splitter->setSizes(list);
    724 
     736  QList<int> list;
     737#else
     738  QValueList<int> list;
     739#endif
     740  list.append( 400 );
     741  list.append( 400 );
     742  splitter->setSizes(list);
     743 
    725744#if QT_VERSION >= 0x040000
    726     fHelpDialog->setLayout(vLayout);
    727 #endif
    728 
    729   }
    730 
    731   ActivateCommand(newCommand);
    732 
    733 #if QT_VERSION < 0x040000
    734   fHelpDialog->setCaption( tr( "Help on commands" ));
    735 #else
    736   fHelpDialog->setWindowTitle(tr("Help on commands"));
    737 #endif
    738   fHelpDialog->resize(800,600);
    739   fHelpDialog->move(QPoint(400,150));
    740   fHelpDialog->show();
    741   fHelpDialog->raise();
    742 #if QT_VERSION < 0x040000
    743   fHelpDialog->setActiveWindow();
    744 #else
    745   fHelpDialog->activateWindow();
    746 #endif
     745  fHelpTBWidget->setLayout(vLayout);
     746#endif
     747 
    747748}
    748749
     
    852853    }
    853854  }
     855  fToolBox->setCurrentWidget(fHelpTBWidget);
    854856}
    855857
     
    11161118
    11171119
    1118 /**   Implement G4VBasicShell vurtual function
    1119 */
    1120 void G4UIQt::ExitHelp(
    1121 )
    1122 {
    1123 #ifdef G4DEBUG_INTERFACES_BASIC
    1124   printf("G4UIQt::ExitHelp SHOULD NEVER GO HERE");
    1125 #endif
    1126 }
    1127 
    1128 
    11291120/**   Event filter method. Every event from QtApplication goes here.<br/>
    11301121   We apply a filter only for the Up and Down Arrow press when the QLineEdit<br/>
     
    11391130)
    11401131{
     1132  bool moveCommandCursor = false;
    11411133  if (aObj == NULL) return false;
    11421134  if (aEvent == NULL) return false;
     
    12151207#endif
    12161208        }
     1209        moveCommandCursor = true;
    12171210      } else if (e->key() == (Qt::Key_Tab)) {
    12181211#if QT_VERSION < 0x040000
     
    12381231    }
    12391232  }
    1240   // pass the event on to the parent class
    1241   return QObject::eventFilter(aObj, aEvent);
     1233  bool res= false;
     1234  // change cursor position if needed
     1235  if (moveCommandCursor == true) {
     1236#ifdef G4DEBUG_INTERFACES_BASIC
     1237    printf("G4UIQt::eventFilter setCursor Position\n");
     1238#endif
     1239    fCommandArea->setCursorPosition ( fCommandArea->text().length() );
     1240    fCommandArea->setCursorPosition (4);
     1241  } else {
     1242    // pass the event on to the parent class
     1243    res = QObject::eventFilter(aObj, aEvent);
     1244  }
     1245  return res;
    12421246}
    12431247
     
    13131317      ApplyShellCommand (command,exitSession,exitPause);
    13141318    } else {
    1315       TerminalHelp(command);
     1319      ActivateCommand(command);
    13161320    }
    13171321    if(exitSession==true)
     
    14771481  fCommandArea->setText(item->text());
    14781482#endif
    1479 
     1483#ifdef G4DEBUG_INTERFACES_BASIC
     1484    printf("G4UIQt::CommandHistoryCallback change text\n");
     1485#endif
    14801486}
    14811487
Note: See TracChangeset for help on using the changeset viewer.