Salome HOME
Update from BR_V5_DEV 13Feb2009
[modules/geom.git] / src / EntityGUI / EntityGUI_SubShapeDlg.cxx
index ae82cc4c159b3a61f7a8de98c9beb1a737384709..af81a31bb94685883d964619e6bd0a8dd52a4ba0 100644 (file)
@@ -1,49 +1,49 @@
-//  GEOM GEOMGUI : GUI for Geometry component
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
 //
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// GEOM GEOMGUI : GUI for Geometry component
+// File   : EntityGUI_SubShapeDlg.cxx
+// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
 //
-//  File   : EntityGUI_SubShapeDlg.cxx
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$
-
 #include "EntityGUI_SubShapeDlg.h"
-#include "GEOM_Displayer.h"
 
-#include "SUIT_Desktop.h"
-#include "SUIT_Session.h"
-#include "OCCViewer_ViewModel.h"
-#include "SalomeApp_Application.h"
-#include "LightApp_SelectionMgr.h"
-#include "SALOME_ListIteratorOfListIO.hxx"
+#include <DlgRef.h>
+#include <GeometryGUI.h>
+#include <GEOMBase.h>
+
+#include <SUIT_Desktop.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SUIT_ViewManager.h>
+#include <SUIT_ViewWindow.h>
+#include <OCCViewer_ViewModel.h>
+#include <SalomeApp_Application.h>
+#include <LightApp_SelectionMgr.h>
 
 #include <TColStd_IndexedMapOfInteger.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopTools_MapOfShape.hxx>
 
-#include <qmessagebox.h>
-#include <qlabel.h>
-#include <qcombobox.h>
+#include <QMessageBox>
 
 //=================================================================================
 // class    : EntityGUI_SubShapeDlg
 //            The dialog will by default be modeless, unless you set 'modal' to
 //            TRUE to construct a modal dialog.
 //=================================================================================
-EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
-                                             const char* name, bool modal, WFlags fl)
-  :GEOMBase_Skeleton(theGeometryGUI, parent, name, modal, fl)
+EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg( GeometryGUI* theGeometryGUI, QWidget* parent,
+                                             bool modal, Qt::WindowFlags fl )
+  : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl )
 {
-  QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_SUBSHAPE")));
-  QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT")));
+  QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_SUBSHAPE" ) ) );
+  QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
 
-  setCaption(tr("GEOM_SUBSHAPE_TITLE"));
+  setWindowTitle( tr( "GEOM_SUBSHAPE_TITLE" ) );
 
   /***************************************************************/
-  GroupConstructors->setTitle(tr("GEOM_SUB_SHAPE"));
-  RadioButton1->setPixmap(image0);
-  RadioButton2->close(TRUE);
-  RadioButton3->close(TRUE);
-
-  GroupPoints = new DlgRef_1Sel1Check1List_QTD(this, "GroupPoints");
-  GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
-  GroupPoints->TextLabel1->setText(tr("GEOM_MAIN_OBJECT"));
-  GroupPoints->TextLabel2->setText(tr("GEOM_SUBSHAPE_TYPE"));
-  GroupPoints->CheckButton1->setText(tr("GEOM_SUBSHAPE_SELECT"));
-  GroupPoints->PushButton1->setPixmap(image1);
+  mainFrame()->GroupConstructors->setTitle( tr( "GEOM_SUB_SHAPE" ) );
+  mainFrame()->RadioButton1->setIcon( image0 );
+  mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
+  mainFrame()->RadioButton2->close();
+  mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
+  mainFrame()->RadioButton3->close();
+
+  GroupPoints = new DlgRef_1Sel1Check1List( centralWidget() );
+
+  GroupPoints->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
+  GroupPoints->TextLabel1->setText( tr( "GEOM_MAIN_OBJECT" ) );
+  GroupPoints->TextLabel2->setText( tr( "GEOM_SUBSHAPE_TYPE" ) );
+  GroupPoints->CheckButton1->setText( tr( "GEOM_SUBSHAPE_SELECT" ) );
+  GroupPoints->PushButton1->setIcon( image1 );
   GroupPoints->LineEdit1->setReadOnly( true );
 
-  Layout1->addWidget(GroupPoints, 1, 0);
+  QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
+  layout->setMargin( 0 ); layout->setSpacing( 6 );
+  layout->addWidget( GroupPoints );
   /***************************************************************/
 
-  setHelpFileName("create_explode_page.html");
+  setHelpFileName( "create_explode_page.html" );
+
+  mainFrame()->GroupBoxName->hide();
 
   Init();
 }
@@ -106,34 +113,34 @@ void EntityGUI_SubShapeDlg::Init()
   myWithShape = true;
 
   /* type for sub shape selection */
-  GroupPoints->ComboBox1->insertItem("Compound");
-  GroupPoints->ComboBox1->insertItem("Compsolid");
-  GroupPoints->ComboBox1->insertItem("Solid");
-  GroupPoints->ComboBox1->insertItem("Shell");
-  GroupPoints->ComboBox1->insertItem("Face");
-  GroupPoints->ComboBox1->insertItem("Wire");
-  GroupPoints->ComboBox1->insertItem("Edge");
-  GroupPoints->ComboBox1->insertItem("Vertex");
-  GroupPoints->ComboBox1->insertItem("Shape");
-
-  if (SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType()
-      != OCCViewer_Viewer::Type())
-    GroupPoints->CheckButton1->setEnabled(false);
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Compound" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Compsolid" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Solid" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Shell" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Face" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Wire" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Edge" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Vertex" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Shape" );
+
+  if ( SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType() 
+       != OCCViewer_Viewer::Type() )
+    GroupPoints->CheckButton1->setEnabled( false );
 
   /* signals and slots connections */
-  connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
+  connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
 
-  connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
-  connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect( buttonOk(),    SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
+  connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
 
-  connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
-  connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect( GroupPoints->PushButton1,  SIGNAL( clicked() ),       this, SLOT( SetEditCurrentArgument() ) );
+  connect( GroupPoints->LineEdit1,    SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
 
-  connect(GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
-  connect(GroupPoints->CheckButton1, SIGNAL(stateChanged(int)), this, SLOT(SubShapeToggled()));
+  connect( GroupPoints->ComboBox1,    SIGNAL( activated( int ) ),    this, SLOT( ComboTextChanged() ) );
+  connect( GroupPoints->CheckButton1, SIGNAL( stateChanged( int ) ), this, SLOT( SubShapeToggled() ) );
 
-  connect(myGeomGUI->getApp()->selectionMgr(),
-          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  connect( myGeomGUI->getApp()->selectionMgr(),
+          SIGNAL( currentSelectionChanged( )), this, SLOT( SelectionIntoArgument() ) );
 
   updateButtonState();
 
@@ -158,19 +165,19 @@ void EntityGUI_SubShapeDlg::ClickOnOk()
 //=================================================================================
 bool EntityGUI_SubShapeDlg::ClickOnApply()
 {
-  SUIT_Session::session()->activeApplication()->putInfo(tr(""));
-
+  SUIT_Session::session()->activeApplication()->putInfo( "" );
+    
   /* Explode all sub shapes */
-  if( isAllSubShapes() ) {
+  if ( isAllSubShapes() ) {
     /* More than 30 subshapes : ask confirmation */
-    unsigned int nb = NumberOfSubShapes(myShape, shapeType());
-    if(nb > 30) {
-      const QString caption = tr("GEOM_CONFIRM");
-      const QString text = tr("GEOM_CONFIRM_INFO").arg(nb);
-      const QString button0 = tr("GEOM_BUT_EXPLODE");
-      const QString button1 = tr("GEOM_BUT_CANCEL");
-
-      if(QMessageBox::warning(this, caption, text, button0, button1) != 0)
+    unsigned int nb = NumberOfSubShapes( myShape, shapeType() );
+    if ( nb > 30 ) {
+      const QString caption = tr( "GEOM_CONFIRM" );
+      const QString text = tr( "GEOM_CONFIRM_INFO" ).arg( nb );
+      const QString button0 = tr( "GEOM_BUT_EXPLODE" );
+      const QString button1 = tr( "GEOM_BUT_CANCEL" );
+
+      if ( QMessageBox::warning( this, caption, text, button0, button1 ) != 0 )
         return false;  /* aborted */
     }
   }
@@ -191,78 +198,73 @@ bool EntityGUI_SubShapeDlg::ClickOnApply()
 //=================================================================================
 void EntityGUI_SubShapeDlg::SelectionIntoArgument()
 {
-  if ( !isAllSubShapes() )
+  if (!isAllSubShapes())
     return;
 
   ResetStateOfDialog();
 
   QString aString = ""; /* name of selection */
 
-  int nbSel = GEOMBase::GetNameOfSelectedIObjects( selectedIO(), aString, true );
-  if( nbSel != 1 )
+  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+  SALOME_ListIO aSelList;
+  aSelMgr->selectedObjects(aSelList);
+
+  int nbSel = GEOMBase::GetNameOfSelectedIObjects(aSelList, aString, true);
+  if (nbSel != 1)
     return;
 
   TopoDS_Shape S;
-  Handle(SALOME_InteractiveObject) IO = firstIObject();
-  if ( !IO->hasEntry() )
-  {
+  Handle(SALOME_InteractiveObject) IO = aSelList.First();
+  if ( !IO->hasEntry() ) {
     SUIT_Session::session()->activeApplication()->putInfo( tr( "GEOM_PRP_SHAPE_IN_STUDY" ) );
     updateButtonState();
     return;
   }
 
-  if ( !GEOMBase::GetTopoFromSelection( selectedIO(), S ) ||
-       S.IsNull() ||
-       S.ShapeType() == TopAbs_VERTEX )
-  {
+  if (!GEOMBase::GetTopoFromSelection(aSelList, S) ||
+      S.IsNull() ||
+      S.ShapeType() == TopAbs_VERTEX) {
+    myObject = GEOM::GEOM_Object::_nil();
     updateButtonState();
     return;
   }
 
-
   Standard_Boolean testResult;
-  myObject = GEOMBase::ConvertIOinGEOMObject( IO, testResult );
-  if ( !testResult || myObject->_is_nil() )
-  {
+  myObject = GEOMBase::ConvertIOinGEOMObject(IO, testResult);
+  if (!testResult || myObject->_is_nil()) {
     updateButtonState();
     return;
   }
 
   myShape = S;
-  GroupPoints->LineEdit1->setText( aString );
+  GroupPoints->LineEdit1->setText(aString);
 
-
-  int SelectedShapeType = GroupPoints->ComboBox1->currentItem();
+  int SelectedShapeType = GroupPoints->ComboBox1->currentIndex();
   int count = GroupPoints->ComboBox1->count();
 
-  if ( myWithShape )
+  if (myWithShape)
     count = count - 1;
 
   int i = 0;
   // Solving PAL5590
-  if ( myShape.ShapeType() == TopAbs_COMPOUND ) {
+  if (myShape.ShapeType() == TopAbs_COMPOUND) {
     unsigned int nb = NumberOfSubShapes(myShape, TopAbs_COMPOUND);
-    if (nb > 0)
+    if ( nb > 0 )
       i++;
   }
-  while ( i <= myShape.ShapeType())
-  {
-    GroupPoints->ComboBox1->removeItem( 0 );
+  while (i <= myShape.ShapeType()) {
+    GroupPoints->ComboBox1->removeItem(0);
     i++;
   }
 
-  if ( myShape.ShapeType() == TopAbs_COMPOUND )
-  {
-    if ( myWithShape == false )
-    {
-      GroupPoints->ComboBox1->insertItem( "Shape" );
+  if (myShape.ShapeType() == TopAbs_COMPOUND) {
+    if (myWithShape == false) {
+      GroupPoints->ComboBox1->insertItem(GroupPoints->ComboBox1->count(), "Shape");
       myWithShape = true;
     }
   }
-  else
-  {
-    if ( myWithShape == true )
-    {
+  else {
+    if ( myWithShape == true ) {
       GroupPoints->ComboBox1->removeItem( GroupPoints->ComboBox1->count() - 1 );
       myWithShape = false;
     }
@@ -272,22 +274,18 @@ void EntityGUI_SubShapeDlg::SelectionIntoArgument()
   if ( myWithShape )
     count1 = count1 - 1;
 
-  if ( SelectedShapeType > myShape.ShapeType() )
-  {
-    if ( SelectedShapeType == 8 )
-    {
-      if ( myShape.ShapeType() != TopAbs_COMPOUND )
-      {
-        GroupPoints->ComboBox1->setCurrentItem( 0 );
+  if ( SelectedShapeType > myShape.ShapeType() ) {
+    if ( SelectedShapeType == 8 ) {
+      if ( myShape.ShapeType() != TopAbs_COMPOUND ) {
+        GroupPoints->ComboBox1->setCurrentIndex( 0 );
         ComboTextChanged();
       }
     }
     else
-      GroupPoints->ComboBox1->setCurrentItem(count1 - count + SelectedShapeType);
+      GroupPoints->ComboBox1->setCurrentIndex( count1 - count + SelectedShapeType );
   }
-  else
-  {
-    GroupPoints->ComboBox1->setCurrentItem( 0 );
+  else {
+    GroupPoints->ComboBox1->setCurrentIndex( 0 );
     ComboTextChanged();
   }
 
@@ -303,8 +301,8 @@ void EntityGUI_SubShapeDlg::SetEditCurrentArgument()
 {
   GroupPoints->LineEdit1->setFocus();
   myEditCurrentArgument = GroupPoints->LineEdit1;
-
-  GroupPoints->CheckButton1->setChecked( FALSE );
+  
+  GroupPoints->CheckButton1->setChecked( false );
   SubShapeToggled();
   SelectionIntoArgument();
 }
@@ -315,9 +313,9 @@ void EntityGUI_SubShapeDlg::SetEditCurrentArgument()
 // purpose  :
 //=================================================================================
 void EntityGUI_SubShapeDlg::LineEditReturnPressed()
-{
+{  
   QLineEdit* send = (QLineEdit*)sender();
-  if(send == GroupPoints->LineEdit1)
+  if ( send == GroupPoints->LineEdit1 )
     SetEditCurrentArgument();
   else
     return;
@@ -332,7 +330,7 @@ void EntityGUI_SubShapeDlg::LineEditReturnPressed()
 //=================================================================================
 void EntityGUI_SubShapeDlg::DeactivateActiveDialog()
 {
-  if (GroupConstructors->isEnabled()) {
+  if ( mainFrame()->GroupConstructors->isEnabled() ) {
     GEOMBase_Skeleton::DeactivateActiveDialog();
   }
 }
@@ -345,8 +343,8 @@ void EntityGUI_SubShapeDlg::DeactivateActiveDialog()
 void EntityGUI_SubShapeDlg::ActivateThisDialog()
 {
   GEOMBase_Skeleton::ActivateThisDialog();
-  connect(myGeomGUI->getApp()->selectionMgr(),
-          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  connect( myGeomGUI->getApp()->selectionMgr(),
+          SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
   SubShapeToggled();
   updateButtonState();
 }
@@ -356,9 +354,9 @@ void EntityGUI_SubShapeDlg::ActivateThisDialog()
 // function : enterEvent()
 // purpose  :
 //=================================================================================
-void EntityGUI_SubShapeDlg::enterEvent(QEvent* e)
+void EntityGUI_SubShapeDlg::enterEvent( QEvent* )
 {
-  if (!GroupConstructors->isEnabled())
+  if ( !mainFrame()->GroupConstructors->isEnabled() )
     ActivateThisDialog();
 }
 
@@ -370,28 +368,28 @@ void EntityGUI_SubShapeDlg::ResetStateOfDialog()
 {
   myObject = GEOM::GEOM_Object::_nil();
   myShape.Nullify();
-  myEditCurrentArgument->setText("");
+  myEditCurrentArgument->setText( "" );
 
-  int SelectedShapeType = GroupPoints->ComboBox1->currentItem();
+  int SelectedShapeType = GroupPoints->ComboBox1->currentIndex();
   int count = GroupPoints->ComboBox1->count();
   if ( myWithShape )
     count = count - 1;
 
   /* type for sub shape selection */
   GroupPoints->ComboBox1->clear();
-  GroupPoints->ComboBox1->insertItem("Compound");
-  GroupPoints->ComboBox1->insertItem("Compsolid");
-  GroupPoints->ComboBox1->insertItem("Solid");
-  GroupPoints->ComboBox1->insertItem("Shell");
-  GroupPoints->ComboBox1->insertItem("Face");
-  GroupPoints->ComboBox1->insertItem("Wire");
-  GroupPoints->ComboBox1->insertItem("Edge");
-  GroupPoints->ComboBox1->insertItem("Vertex");
-  GroupPoints->ComboBox1->insertItem("Shape");
-
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Compound" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Compsolid" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Solid" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Shell" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Face" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Wire" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Edge" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Vertex" );
+  GroupPoints->ComboBox1->insertItem( GroupPoints->ComboBox1->count(), "Shape" );
+  
   myWithShape = true;
-
-  GroupPoints->ComboBox1->setCurrentItem( 8 - count + SelectedShapeType );
+  
+  GroupPoints->ComboBox1->setCurrentIndex( 8 - count + SelectedShapeType );
   ComboTextChanged();
 
   updateButtonState();
@@ -414,13 +412,13 @@ void EntityGUI_SubShapeDlg::SubShapeToggled()
 
 //=================================================================================
 // function : ComboTextChanged()
-// purpose  :
+// purpose  : 
 //=================================================================================
 void EntityGUI_SubShapeDlg::ComboTextChanged()
 {
   /* Select sub shapes mode not checked */
   updateButtonState();
-  SubShapeToggled();
+  SubShapeToggled();    
 }
 
 
@@ -428,32 +426,33 @@ void EntityGUI_SubShapeDlg::ComboTextChanged()
 // function : NumberOfSubShapes()
 // purpose  :
 //=================================================================================
-unsigned int EntityGUI_SubShapeDlg::NumberOfSubShapes (const TopoDS_Shape& S,
-                                                       const int shapeType) const
+unsigned int EntityGUI_SubShapeDlg::NumberOfSubShapesconst TopoDS_Shape& S,
+                                                      const int shapeType ) const
 {
-  if (S.IsNull())
+  if ( S.IsNull() )
     return 0;
 
   unsigned int index = 0;
   TopTools_MapOfShape M;
 
-  if (S.ShapeType() == TopAbs_COMPOUND &&
-      (TopAbs_ShapeEnum(shapeType) == TopAbs_SHAPE ||
-       TopAbs_ShapeEnum(shapeType) == TopAbs_COMPSOLID ||
-       TopAbs_ShapeEnum(shapeType) == TopAbs_COMPOUND)) {
-    TopoDS_Iterator It (S, Standard_True, Standard_True);
-    for (; It.More(); It.Next()) {
-      if (M.Add(It.Value())) {
-        if (TopAbs_ShapeEnum(shapeType) == TopAbs_SHAPE ||
-            TopAbs_ShapeEnum(shapeType) == It.Value().ShapeType()) {
+  if ( S.ShapeType() == TopAbs_COMPOUND &&
+       ( TopAbs_ShapeEnum(shapeType) == TopAbs_SHAPE ||
+        TopAbs_ShapeEnum(shapeType) == TopAbs_COMPSOLID ||
+        TopAbs_ShapeEnum(shapeType) == TopAbs_COMPOUND ) ) {
+    TopoDS_Iterator It( S, Standard_True, Standard_True );
+    for ( ; It.More(); It.Next() ) {
+      if ( M.Add( It.Value() ) ) {
+        if ( TopAbs_ShapeEnum( shapeType ) == TopAbs_SHAPE ||
+            TopAbs_ShapeEnum( shapeType ) == It.Value().ShapeType() ) {
           index++;
         }
       }
     }
-  } else {
-    TopExp_Explorer Exp (S, TopAbs_ShapeEnum(shapeType));
-    for (; Exp.More(); Exp.Next()) {
-      if (M.Add(Exp.Current())) {
+  } 
+  else {
+    TopExp_Explorer Exp ( S, TopAbs_ShapeEnum( shapeType ) );
+    for ( ; Exp.More(); Exp.Next() ) {
+      if ( M.Add( Exp.Current() ) ) {
         index++;
       }
     }
@@ -471,11 +470,11 @@ void EntityGUI_SubShapeDlg::updateButtonState()
 {
   if ( SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType() != OCCViewer_Viewer::Type() ||
        myObject->_is_nil() || shapeType() == TopAbs_SHAPE || shapeType() == TopAbs_COMPOUND ) {
-    GroupPoints->CheckButton1->setChecked( FALSE );
-    GroupPoints->CheckButton1->setEnabled( FALSE );
+    GroupPoints->CheckButton1->setChecked( false );
+    GroupPoints->CheckButton1->setEnabled( false );
   }
   else
-    GroupPoints->CheckButton1->setEnabled( TRUE );
+    GroupPoints->CheckButton1->setEnabled( true );
 }
 
 //=================================================================================
@@ -493,15 +492,15 @@ bool EntityGUI_SubShapeDlg::isAllSubShapes() const
 //=================================================================================
 int EntityGUI_SubShapeDlg::shapeType() const
 {
-  int type = GroupPoints->ComboBox1->currentItem();
+  int type = GroupPoints->ComboBox1->currentIndex();
 
-  if (myObject->_is_nil())
+  if ( myObject->_is_nil() )
     return type;
 
   // Solving PAL5590
   type += myShape.ShapeType() + 1;
-  if (myShape.ShapeType() == TopAbs_COMPOUND &&
-      NumberOfSubShapes(myShape, TopAbs_COMPOUND) > 0) {
+  if ( myShape.ShapeType() == TopAbs_COMPOUND &&
+       NumberOfSubShapes( myShape, TopAbs_COMPOUND ) > 0 ) {
     type--;
   }
 
@@ -521,33 +520,35 @@ GEOM::GEOM_IOperations_ptr EntityGUI_SubShapeDlg::createOperation()
 // function : isValid
 // purpose  :
 //=================================================================================
-bool EntityGUI_SubShapeDlg::isValid( QString& msg )
+bool EntityGUI_SubShapeDlg::isValid (QString& msg)
 {
   bool isOk = false;
-  Handle(SALOME_InteractiveObject) IO = firstIObject();
-  Standard_Boolean testResult;
-  myObject = GEOMBase::ConvertIOinGEOMObject( IO, testResult );
-  if ( !testResult || myObject->_is_nil() )  {
+
+  if (myObject->_is_nil()) {
     updateButtonState();
     return isOk;
   }
-  if ( !myObject->_is_nil() ) {
-    if ( isAllSubShapes() )
-      isOk = true;
-    else if ( IObjectCount() == 1 ) {
-      Standard_Boolean aResult = Standard_False;
-      GEOM::GEOM_Object_var anObj =
-       GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
 
-      if ( aResult && !anObj->_is_nil() ) {
-       TColStd_IndexedMapOfInteger aMapIndex;
-       myGeomGUI->getApp()->selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
-       isOk = aMapIndex.Extent() > 0;
-       if ( !isOk )
-         msg += tr( "NO_SUBSHAPES_SELECTED" );
+  if (isAllSubShapes())
+    isOk = true;
+  else {
+    LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+    SALOME_ListIO aSelList;
+    aSelMgr->selectedObjects(aSelList);
+
+    if (aSelList.Extent() == 1) {
+      Standard_Boolean testResult;  
+      GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult);
+      if (testResult && !anObj->_is_nil()) {
+        TColStd_IndexedMapOfInteger aMapIndex;
+        aSelMgr->GetIndexes(aSelList.First(), aMapIndex);
+        isOk = aMapIndex.Extent() > 0;
+        if (!isOk)
+          msg += tr("NO_SUBSHAPES_SELECTED");
       }
     }
   }
+
   return isOk;
 }
 
@@ -555,40 +556,43 @@ bool EntityGUI_SubShapeDlg::isValid( QString& msg )
 // function : execute
 // purpose  :
 //=================================================================================
-bool EntityGUI_SubShapeDlg::execute( ObjectList& objects )
+bool EntityGUI_SubShapeDlg::execute (ObjectList& objects)
 {
-  GEOM::ListOfGO_var aList = GEOM::GEOM_IShapesOperations::_narrow(
-    getOperation() )->MakeExplode( myObject, shapeType(), true );
+  GEOM::ListOfGO_var aList = GEOM::GEOM_IShapesOperations::_narrow(getOperation())->
+    MakeExplode(myObject, shapeType(), true);
 
-  if ( !aList->length() )
+  if (!aList->length())
     return false;
 
-  // Throw away sub-shapes not selected by user if not in preview mode
+  // Throw away sub-shapes not selected by user if not in preview mode 
   // and manual selection is active
-  if ( !isAllSubShapes() )
-  {
-    if ( IObjectCount() == 1 ) {
+  if (!isAllSubShapes()) {
+    LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+    SALOME_ListIO aSelList;
+    aSelMgr->selectedObjects(aSelList);
+
+    if (aSelList.Extent() == 1) {
       Standard_Boolean aResult = Standard_False;
       GEOM::GEOM_Object_var anObj =
-       GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
+       GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult);
 
-      if ( aResult && !anObj->_is_nil() ) {
+      if (aResult && !anObj->_is_nil()) {
        TColStd_IndexedMapOfInteger aMapIndex;
-       myGeomGUI->getApp()->selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
+       aSelMgr->GetIndexes(aSelList.First(), aMapIndex);
 
-       GEOM::GEOM_ILocalOperations_var aLocOp =
-         getGeomEngine()->GetILocalOperations( getStudyId() );
+       GEOM::GEOM_ILocalOperations_var aLocOp = 
+         getGeomEngine()->GetILocalOperations(getStudyId());
 
-       for ( int i = 0, n = aList->length(); i < n; i++ )
-         if ( aMapIndex.Contains( aLocOp->GetSubShapeIndex( myObject, aList[i] ) ) )
-           objects.push_back( GEOM::GEOM_Object::_duplicate( aList[i] ) );
+       for (int i = 0, n = aList->length(); i < n; i++)
+         if (aMapIndex.Contains(aLocOp->GetSubShapeIndex(myObject, aList[i])))
+           objects.push_back(GEOM::GEOM_Object::_duplicate(aList[i]));
       }
     }
   }
   else
-    for ( int i = 0, n = aList->length(); i < n; i++ )
-      objects.push_back( GEOM::GEOM_Object::_duplicate( aList[i] ) );
-
+    for (int i = 0, n = aList->length(); i < n; i++)
+      objects.push_back(GEOM::GEOM_Object::_duplicate(aList[i]));
+  
   return objects.size();
 }
 
@@ -602,7 +606,7 @@ GEOM::GEOM_Object_ptr EntityGUI_SubShapeDlg::getFather( GEOM::GEOM_Object_ptr )
   return myObject;
 }
 
-const char* EntityGUI_SubShapeDlg::getNewObjectName() const
+QString EntityGUI_SubShapeDlg::getNewObjectName() const
 {
-  return "";
+  return QString::null;
 }