Back to index

salome-geom  6.5.0
MeasureGUI_Skeleton.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 // GEOM GEOMGUI : GUI for Geometry component
00024 // File   : MeasureGUI_Skeleton.cxx
00025 // Author : Damine COQUERET, Open CASCADE S.A.S.
00026 //
00027 #include "MeasureGUI_Skeleton.h"
00028 #include "MeasureGUI_Widgets.h"
00029 
00030 #include <GEOMBase.h>
00031 #include <GEOM_Displayer.h>
00032 #include <GeometryGUI.h>
00033 
00034 #include <LightApp_SelectionMgr.h>
00035 #include <SalomeApp_Application.h>
00036 #include <SalomeApp_Tools.h>
00037 #include <SUIT_Desktop.h>
00038 #include <SUIT_ResourceMgr.h>
00039 #include <SUIT_MessageBox.h>
00040 #include <SUIT_Session.h>
00041 #include <SUIT_OverrideCursor.h>
00042 
00043 #include <QKeyEvent>
00044 
00045 //=================================================================================
00046 // class    : MeasureGUI_Skeleton()
00047 // purpose  : Constructs a MeasureGUI_Skeleton which is a child of 'parent', with the 
00048 //            name 'name' and widget flags set to 'f'.
00049 //            The dialog will by default be modeless, unless you set 'modal' to
00050 //            TRUE to construct a modal dialog.
00051 //=================================================================================
00052 MeasureGUI_Skeleton::MeasureGUI_Skeleton( GeometryGUI* GUI, QWidget* parent,
00053                                           bool modal, Qt::WindowFlags f )
00054   : QDialog( parent, f ),
00055     GEOMBase_Helper( dynamic_cast<SUIT_Desktop*>( parent ) ),
00056     myGeomGUI( GUI )
00057 {
00058   myMainFrame = new MeasureGUI_SkeletonBox( this );
00059   QVBoxLayout* topLayout = new QVBoxLayout( this );
00060   topLayout->setMargin( 9 ); topLayout->setSpacing( 0 );
00061   topLayout->addWidget( myMainFrame );
00062 
00063   setAttribute( Qt::WA_DeleteOnClose );
00064   setModal( modal );
00065   mySelBtn = 0;
00066   mySelEdit = 0;
00067   myDisplayer = 0;
00068   myHelpFileName = "";
00069   
00070   buttonClose()->setText( tr( "GEOM_BUT_CLOSE" ) );
00071   buttonHelp()->setText( tr( "GEOM_BUT_HELP" ) );
00072 }
00073 
00074 
00075 //=================================================================================
00076 // function : ~MeasureGUI_Skeleton()
00077 // purpose  : Destroys the object and frees any allocated resources
00078 //=================================================================================
00079 MeasureGUI_Skeleton::~MeasureGUI_Skeleton()
00080 {
00081   if ( myGeomGUI )
00082     myGeomGUI->SetActiveDialogBox( 0 );
00083   delete myDisplayer;
00084 }
00085 
00086 
00087 //=================================================================================
00088 // function : Init()
00089 // purpose  :
00090 //=================================================================================
00091 void MeasureGUI_Skeleton::Init()
00092 {
00093   /* init variables */
00094   if ( myGeomGUI )
00095     myGeomGUI->SetActiveDialogBox( (QDialog*)this );
00096 
00097   /* signals and slots connections */
00098   
00099   connect( buttonClose(), SIGNAL( clicked() ),
00100            this,          SLOT( ClickOnCancel() ) );
00101 
00102   connect( buttonHelp(),  SIGNAL( clicked() ), 
00103            this,          SLOT( ClickOnHelp() ) );
00104   
00105   if ( myGeomGUI ) {
00106     connect( myGeomGUI,   SIGNAL( SignalDeactivateActiveDialog() ),
00107              this,        SLOT  ( DeactivateActiveDialog() ) );
00108     
00109     connect( myGeomGUI,   SIGNAL( SignalCloseAllDialogs() ),
00110              this,        SLOT  ( ClickOnCancel() ) );
00111   }
00112   
00113   if ( mySelEdit ) {
00114     connect( mySelEdit,   SIGNAL( returnPressed() ),
00115              this,        SLOT( LineEditReturnPressed() ) );
00116   }
00117    
00118   if ( mySelBtn ) {
00119     connect( mySelBtn,    SIGNAL( clicked() ),
00120              this,        SLOT  ( SetEditCurrentArgument() ) );
00121   }
00122 
00123   LightApp_SelectionMgr* aSel = ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr();
00124   if ( aSel ) {
00125     connect( aSel, SIGNAL( currentSelectionChanged() ), 
00126              this, SLOT  ( SelectionIntoArgument() ) ) ;
00127   }
00128 
00129   /* displays Dialog */
00130   mainFrame()->RadioButton1->setChecked( true );
00131 
00132   activateSelection();
00133   SelectionIntoArgument();
00134 }
00135 
00136 
00137 //=================================================================================
00138 // function : ClickOnCancel()
00139 // purpose  :
00140 //=================================================================================
00141 void MeasureGUI_Skeleton::ClickOnCancel()
00142 {
00143   close();
00144 }
00145 
00146 //=================================================================================
00147 // function : ClickOnHelp()
00148 // purpose  :
00149 //=================================================================================
00150 void MeasureGUI_Skeleton::ClickOnHelp()
00151 {
00152   LightApp_Application* app = (LightApp_Application*)( SUIT_Session::session()->activeApplication() );
00153   if ( app ) {
00154     app->onHelpContextModule( myGeomGUI ? app->moduleName( myGeomGUI->moduleName() ) : QString( "" ), myHelpFileName );
00155   }
00156   else {
00157     QString platform;
00158 #ifdef WIN32
00159     platform = "winapplication";
00160 #else
00161     platform = "application";
00162 #endif
00163     SUIT_MessageBox::warning( this, tr( "WRN_WARNING" ),
00164                               tr( "EXTERNAL_BROWSER_CANNOT_SHOW_PAGE" ).
00165                               arg( app->resourceMgr()->stringValue( "ExternalBrowser", platform ) ).arg( myHelpFileName ) );
00166   }
00167 }
00168 
00169 //=================================================================================
00170 // function : LineEditReturnPressed()
00171 // purpose  :
00172 //=================================================================================
00173 void MeasureGUI_Skeleton::LineEditReturnPressed()
00174 {
00175   /* User name of object input management                          */
00176   /* If successfull the selection is changed and signal emitted... */
00177   /* so SelectionIntoArgument() is automatically called.           */
00178   
00179   if ( mySelEdit ) {
00180     const QString objectUserName = mySelEdit->text();
00181     QWidget* thisWidget = ( QWidget* )this;
00182     
00183     LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
00184     SALOME_ListIO aSelList;
00185     aSelMgr->selectedObjects(aSelList);
00186 
00187     if (GEOMBase::SelectionByNameInDialogs(thisWidget, objectUserName, aSelList))
00188       mySelEdit->setText(objectUserName);
00189   }
00190 }
00191 
00192 
00193 //=================================================================================
00194 // function : DeactivateActiveDialog()
00195 // purpose  :
00196 //=================================================================================
00197 void MeasureGUI_Skeleton::DeactivateActiveDialog()
00198 {
00199   setEnabled( false );
00200   
00201   LightApp_SelectionMgr* aSel = ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr();
00202   if ( aSel )
00203     disconnect( aSel, 0, this, 0 );
00204   
00205   myGeomGUI->SetActiveDialogBox( 0 );
00206 
00207   globalSelection();
00208 }
00209 
00210 
00211 //=================================================================================
00212 // function : ActivateThisDialog()
00213 // purpose  :
00214 //=================================================================================
00215 void MeasureGUI_Skeleton::ActivateThisDialog()
00216 {
00217   myGeomGUI->EmitSignalDeactivateDialog();
00218   
00219   setEnabled( true );
00220   
00221   myGeomGUI->SetActiveDialogBox( ( QDialog* )this );
00222 
00223   LightApp_SelectionMgr* aSel = ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr();
00224   if ( aSel )
00225     connect( aSel, SIGNAL( currentSelectionChanged() ), 
00226              this, SLOT  ( SelectionIntoArgument() ) ) ;
00227   
00228   redisplayPreview();
00229   activateSelection();
00230 }
00231 
00232 //=================================================================================
00233 // function : SetEditCurrentArgument
00234 // purpose  :
00235 //=================================================================================
00236 void MeasureGUI_Skeleton::SetEditCurrentArgument()
00237 {
00238   mySelEdit->setFocus();
00239   SelectionIntoArgument();
00240 }
00241 
00242 //=================================================================================
00243 // function : SelectionIntoArgument
00244 // purpose  :
00245 //=================================================================================
00246 void MeasureGUI_Skeleton::SelectionIntoArgument()
00247 {
00248   myObj = GEOM::GEOM_Object::_nil();
00249 
00250   LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
00251   SALOME_ListIO aSelList;
00252   aSelMgr->selectedObjects(aSelList);
00253 
00254   GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil();
00255 
00256   if (aSelList.Extent() > 0) {
00257     aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
00258   }
00259 
00260   if (aSelectedObject->_is_nil()) {
00261     mySelEdit->setText("");
00262     processObject();
00263     erasePreview();
00264     return;
00265   }
00266 
00267   myObj = aSelectedObject;
00268   mySelEdit->setText(GEOMBase::GetName(myObj));
00269   processObject();
00270   redisplayPreview();
00271 }
00272 
00273 //=================================================================================
00274 // function : processObject
00275 // purpose  :
00276 //=================================================================================
00277 void MeasureGUI_Skeleton::processObject()
00278 {  
00279 }
00280 
00281 
00282 //=================================================================================
00283 // function : closeEvent
00284 // purpose  :
00285 //=================================================================================
00286 void MeasureGUI_Skeleton::closeEvent( QCloseEvent* e )
00287 {
00288   LightApp_SelectionMgr* aSel = ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr();
00289   if ( aSel )
00290     disconnect( aSel, 0, this, 0 );
00291   QDialog::closeEvent( e );
00292 }
00293 
00294 //=================================================================================
00295 // function : enterEvent()
00296 // purpose  :
00297 //=================================================================================
00298 void MeasureGUI_Skeleton::enterEvent( QEvent* )
00299 {
00300   if ( mainFrame()->GroupConstructors->isEnabled() )
00301     return;
00302     
00303   ActivateThisDialog();
00304 }
00305 
00306 //=================================================================================
00307 // function : buildPrs
00308 // purpose  : Build presentation for "preview"
00309 //=================================================================================
00310 SALOME_Prs* MeasureGUI_Skeleton::buildPrs()
00311 {
00312   return 0;
00313 }
00314 
00315 //=================================================================================
00316 // function : closeEvent()
00317 // purpose  : Build presentation for "preview"
00318 //=================================================================================
00319 void MeasureGUI_Skeleton::redisplayPreview()
00320 {
00321   QString aMess;
00322   if ( !isValid( aMess ) ) {
00323     erasePreview( true );
00324     return;
00325   }
00326 
00327   erasePreview( false );
00328 
00329   try {
00330     SUIT_OverrideCursor();
00331 
00332     getDisplayer()->SetColor( Quantity_NOC_VIOLET );
00333     getDisplayer()->SetToActivate( false );
00334     
00335     if ( SALOME_Prs* aPrs = buildPrs() )
00336       displayPreview( aPrs );
00337   }
00338   catch ( const SALOME::SALOME_Exception& e ) {
00339     SalomeApp_Tools::QtCatchCorbaException( e );
00340   }
00341   
00342 }
00343 
00344 //=================================================================================
00345 // function : activateSelection
00346 // purpose  : 
00347 //=================================================================================
00348 void MeasureGUI_Skeleton::activateSelection()
00349 {
00350   globalSelection( GEOM_ALLSHAPES );
00351 }
00352 
00353 //=================================================================================
00354 // function : isValid
00355 // purpose  :
00356 //=================================================================================
00357 bool MeasureGUI_Skeleton::isValid( QString& )
00358 {
00359   return !myObj->_is_nil();
00360 }
00361 
00362 //================================================================
00363 // Function : getDisplayer
00364 // Purpose  :
00365 //================================================================
00366 GEOM_Displayer* MeasureGUI_Skeleton::getDisplayer()
00367 {
00368   if ( !myDisplayer )
00369     myDisplayer = new GEOM_Displayer( getStudy() );
00370   return myDisplayer;
00371 }
00372 
00373 //=================================================================================
00374 // function : createOperation
00375 // purpose  :
00376 //=================================================================================
00377 GEOM::GEOM_IOperations_ptr MeasureGUI_Skeleton::createOperation()
00378 {
00379   return getGeomEngine()->GetIMeasureOperations( getStudyId() );
00380 }
00381 
00382 //=================================================================================
00383 // function : keyPressEvent()
00384 // purpose  :
00385 //=================================================================================
00386 void MeasureGUI_Skeleton::keyPressEvent( QKeyEvent* e )
00387 {
00388   QDialog::keyPressEvent( e );
00389   if ( e->isAccepted() )
00390     return;
00391 
00392   if ( e->key() == Qt::Key_F1 ) {
00393     e->accept();
00394     ClickOnHelp();
00395   }
00396 }
00397 
00398 MeasureGUI_SkeletonBox* MeasureGUI_Skeleton::mainFrame() const
00399 {
00400   return myMainFrame;
00401 }
00402 
00403 QWidget* MeasureGUI_Skeleton::centralWidget() const
00404 {
00405   return mainFrame()->GroupMedium;
00406 }
00407 
00408 QPushButton* MeasureGUI_Skeleton::buttonClose() const
00409 {
00410   return mainFrame()->buttonClose;
00411 }
00412 
00413 QPushButton* MeasureGUI_Skeleton::buttonHelp() const
00414 {
00415   return mainFrame()->buttonHelp;
00416 }