Back to index

salome-geom  6.5.0
BuildGUI_ShellDlg.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   : BuildGUI_ShellDlg.cxx
00025 // Author : Damien COQUERET, Open CASCADE S.A.S.
00026 //
00027 #include "BuildGUI_ShellDlg.h"
00028 
00029 #include <DlgRef.h>
00030 #include <GeometryGUI.h>
00031 #include <GEOMBase.h>
00032 
00033 #include <GEOMImpl_Types.hxx>
00034 
00035 #include <SUIT_ResourceMgr.h>
00036 #include <SUIT_Session.h>
00037 #include <SalomeApp_Application.h>
00038 #include <LightApp_SelectionMgr.h>
00039 
00040 #include <TColStd_MapOfInteger.hxx>
00041 
00042 //=================================================================================
00043 // class    : BuildGUI_ShellDlg()
00044 // purpose  : Constructs a BuildGUI_ShellDlg which is a child of 'parent', with the 
00045 //            name 'name' and widget flags set to 'f'.
00046 //            The dialog will by default be modeless, unless you set 'modal' to
00047 //            TRUE to construct a modal dialog.
00048 //=================================================================================
00049 BuildGUI_ShellDlg::BuildGUI_ShellDlg( GeometryGUI* theGeometryGUI, QWidget* parent )
00050   : GEOMBase_Skeleton( theGeometryGUI, parent )
00051 {
00052   QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BUILD_SHELL" ) ) );
00053   QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
00054 
00055   setWindowTitle( tr( "GEOM_SHELL_TITLE" ) );
00056     
00057   /***************************************************************/
00058   mainFrame()->GroupConstructors->setTitle( tr( "GEOM_SHELL" ) );
00059   mainFrame()->RadioButton1->setIcon( image0 );
00060   mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
00061   mainFrame()->RadioButton2->close();
00062   mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
00063   mainFrame()->RadioButton3->close();
00064 
00065   GroupShell = new DlgRef_1Sel( centralWidget() );
00066 
00067   GroupShell->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
00068   GroupShell->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
00069   GroupShell->PushButton1->setIcon( image1 );
00070   GroupShell->LineEdit1->setReadOnly( true );
00071   
00072   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
00073   layout->setMargin( 0 ); layout->setSpacing( 6 );
00074   layout->addWidget( GroupShell );
00075   /***************************************************************/
00076 
00077   setHelpFileName("create_shell_page.html");
00078 
00079   /* Initialisations */
00080   Init();
00081 }
00082 
00083 
00084 //=================================================================================
00085 // function : ~BuildGUI_ShellDlg()
00086 // purpose  : Destroys the object and frees any allocated resources
00087 //=================================================================================
00088 BuildGUI_ShellDlg::~BuildGUI_ShellDlg()
00089 {
00090     // no need to delete child widgets, Qt does it all for us
00091 }
00092 
00093 
00094 //=================================================================================
00095 // function : Init()
00096 // purpose  :
00097 //=================================================================================
00098 void BuildGUI_ShellDlg::Init()
00099 {
00100   /* init variables */
00101   myEditCurrentArgument = GroupShell->LineEdit1;
00102   GroupShell->LineEdit1->setReadOnly( true );
00103   
00104   myFacesAndShells.clear();
00105   
00106   TColStd_MapOfInteger aMap;
00107   aMap.Add( GEOM_SHELL );
00108   aMap.Add( GEOM_FACE );
00109   aMap.Add( GEOM_COMPOUNDFILTER );
00110   
00111   QList<int> aSubShapes;
00112   aSubShapes.append( GEOM_FACE );
00113   globalSelection( aMap, aSubShapes );
00114 
00115   /* signals and slots connections */
00116   connect( buttonOk(),    SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
00117   connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
00118 
00119   connect( GroupShell->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
00120 
00121   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
00122            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
00123 
00124   initName( tr( "GEOM_SHELL" ) );
00125   SelectionIntoArgument();
00126 }
00127 
00128 
00129 //=================================================================================
00130 // function : ClickOnOk()
00131 // purpose  :
00132 //=================================================================================
00133 void BuildGUI_ShellDlg::ClickOnOk()
00134 {
00135   setIsApplyAndClose( true );
00136   if ( ClickOnApply() )
00137     ClickOnCancel();
00138 }
00139 
00140 
00141 //=================================================================================
00142 // function : ClickOnApply()
00143 // purpose  :
00144 //=================================================================================
00145 bool BuildGUI_ShellDlg::ClickOnApply()
00146 {
00147   if ( !onAccept() )
00148     return false;
00149 
00150   initName();
00151   return true;
00152 }
00153 
00154 
00155 //=================================================================================
00156 // function : SelectionIntoArgument()
00157 // purpose  : Called when selection as changed or other case
00158 //=================================================================================
00159 void BuildGUI_ShellDlg::SelectionIntoArgument()
00160 {
00161   myEditCurrentArgument->setText( "" );
00162 
00163   QList<TopAbs_ShapeEnum> types;
00164   types << TopAbs_FACE << TopAbs_SHELL << TopAbs_COMPOUND;
00165   myFacesAndShells = getSelected( types, -1 );
00166 
00167   if ( !myFacesAndShells.isEmpty() ) {
00168     QString aName = myFacesAndShells.count() > 1 ? QString( "%1_objects").arg( myFacesAndShells.count() ) : GEOMBase::GetName( myFacesAndShells[0].get() );
00169     myEditCurrentArgument->setText( aName );
00170   }
00171 }
00172 
00173 
00174 //=================================================================================
00175 // function : SetEditCurrentArgument()
00176 // purpose  :
00177 //=================================================================================
00178 void BuildGUI_ShellDlg::SetEditCurrentArgument()
00179 {
00180   QPushButton* send = (QPushButton*)sender();
00181   if ( send != GroupShell->PushButton1 )
00182     return;
00183 
00184   TColStd_MapOfInteger aMap;
00185   aMap.Add( GEOM_SHELL );
00186   aMap.Add( GEOM_FACE );
00187   aMap.Add( GEOM_COMPOUNDFILTER );
00188 
00189   QList<int> aSubShapes;
00190   aSubShapes.append( GEOM_FACE );
00191   globalSelection( aMap, aSubShapes );
00192   
00193   myEditCurrentArgument = GroupShell->LineEdit1;
00194 
00195   myEditCurrentArgument->setFocus();
00196   SelectionIntoArgument();
00197 }
00198 
00199 
00200 //=================================================================================
00201 // function : ActivateThisDialog()
00202 // purpose  :
00203 //=================================================================================
00204 void BuildGUI_ShellDlg::ActivateThisDialog()
00205 {
00206   GEOMBase_Skeleton::ActivateThisDialog();
00207   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
00208            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
00209   TColStd_MapOfInteger aMap;
00210   aMap.Add( GEOM_SHELL );
00211   aMap.Add( GEOM_FACE );
00212   aMap.Add( GEOM_COMPOUNDFILTER );
00213   
00214   QList<int> aSubShapes;
00215   aSubShapes.append( GEOM_FACE );
00216   globalSelection( aMap, aSubShapes );
00217 }
00218 
00219 
00220 //=================================================================================
00221 // function : enterEvent()
00222 // purpose  :
00223 //=================================================================================
00224 void BuildGUI_ShellDlg::enterEvent( QEvent* )
00225 {
00226   if ( !mainFrame()->GroupConstructors->isEnabled() )
00227     ActivateThisDialog();
00228 }
00229 
00230 //=================================================================================
00231 // function : createOperation
00232 // purpose  :
00233 //=================================================================================
00234 GEOM::GEOM_IOperations_ptr BuildGUI_ShellDlg::createOperation()
00235 {
00236   return getGeomEngine()->GetIShapesOperations( getStudyId() );
00237 }
00238 
00239 //=================================================================================
00240 // function : isValid
00241 // purpose  :
00242 //=================================================================================
00243 bool BuildGUI_ShellDlg::isValid( QString& )
00244 {
00245   return !myFacesAndShells.isEmpty();
00246 }
00247 
00248 //=================================================================================
00249 // function : execute
00250 // purpose  :
00251 //=================================================================================
00252 bool BuildGUI_ShellDlg::execute( ObjectList& objects )
00253 {
00254   GEOM::GEOM_IShapesOperations_var anOper = GEOM::GEOM_IShapesOperations::_narrow( getOperation() );
00255 
00256   GEOM::ListOfGO_var objlist = new GEOM::ListOfGO();
00257   objlist->length( myFacesAndShells.count() );
00258   for ( int i = 0; i < myFacesAndShells.count(); i++ )
00259     objlist[i] = myFacesAndShells[i].copy();
00260 
00261   GEOM::GEOM_Object_var anObj = anOper->MakeShell( objlist.in() );
00262 
00263   if ( !anObj->_is_nil() )
00264     objects.push_back( anObj._retn() );
00265 
00266   return true;
00267 }
00268