]> SALOME platform Git repositories - modules/geom.git/blobdiff - src/GEOMGUI/GeometryGUI.cxx
Salome HOME
0016756: EDF 545 GEOM : Extrusion, give the coordinates of the vector as input
[modules/geom.git] / src / GEOMGUI / GeometryGUI.cxx
index bced30d609ff13cbab8492b1eb0579a72b2f16c1..f94d3902d8c10921d60dcc65205651e5bdcdd0f6 100644 (file)
@@ -1,36 +1,34 @@
-//  GEOM GEOMGUI : GUI for Geometry component
+// GEOM GEOMGUI : GUI for Geometry component
 //
 //
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// 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 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.
+// 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
+// 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
 //
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+// File   : GeometryGUI.cxx
+// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
 //
 //
-//
-//  File   : GeometryGUI.cxx
-//  Author : Lucien PIGNOLONI
-//  Module : GEOM
-//  $Header$
 
 #include "GeometryGUI.h"
 #include "GEOMGUI_OCCSelector.h"
 #include "GEOMGUI_Selection.h"
 #include "GEOM_Displayer.h"
 
 
 #include "GeometryGUI.h"
 #include "GEOMGUI_OCCSelector.h"
 #include "GEOMGUI_Selection.h"
 #include "GEOM_Displayer.h"
 
+#include <SUIT_Desktop.h>
 #include <SUIT_MessageBox.h>
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 #include <SUIT_MessageBox.h>
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 #include <SVTK_RenderWindowInteractor.h>
 #include <SVTK_InteractorStyle.h>
 #include <SVTK_ViewModel.h>
 #include <SVTK_RenderWindowInteractor.h>
 #include <SVTK_InteractorStyle.h>
 #include <SVTK_ViewModel.h>
-#include <SVTK_ViewManager.h>
 
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
 #include <LightApp_VTKSelector.h>
 
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
 #include <LightApp_VTKSelector.h>
+#include <LightApp_DataObject.h>
 #include <SalomeApp_Study.h>
 #include <LightApp_Preferences.h>
 #include <SALOME_LifeCycleCORBA.hxx>
 #include <SALOME_ListIO.hxx>
 #include <SalomeApp_Study.h>
 #include <LightApp_Preferences.h>
 #include <SALOME_LifeCycleCORBA.hxx>
 #include <SALOME_ListIO.hxx>
+#include <SALOME_ListIteratorOfListIO.hxx>
 
 // External includes
 
 // External includes
-#include <qfileinfo.h>
-#include <qpainter.h>
+#include <QAction>
+#include <QFileInfo>
+#include <QString>
+#include <QPainter>
 
 #include <Prs3d_Drawer.hxx>
 #include <Prs3d_IsoAspect.hxx>
 
 #include <Prs3d_Drawer.hxx>
 #include <Prs3d_IsoAspect.hxx>
+#include <Aspect_TypeOfMarker.hxx>
 #include <OSD_SharedLibrary.hxx>
 
 #include <utilities.h>
 #include <OSD_SharedLibrary.hxx>
 
 #include <utilities.h>
@@ -68,6 +70,7 @@
 #include <vtkCamera.h>
 #include <vtkRenderer.h>
 
 #include <vtkCamera.h>
 #include <vtkRenderer.h>
 
+using namespace Qt;
 
 extern "C" {
   Standard_EXPORT CAM_Module* createModule() {
 
 extern "C" {
   Standard_EXPORT CAM_Module* createModule() {
@@ -96,7 +99,7 @@ bool GeometryGUI::InitGeomGen()
 
 //=======================================================================
 // function : ClientSObjectToObject
 
 //=======================================================================
 // function : ClientSObjectToObject
-// purpose  : 
+// purpose  :
 //=======================================================================
 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
 {
 //=======================================================================
 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
 {
@@ -116,7 +119,7 @@ CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
 
 //=======================================================================
 // function : ClientStudyToStudy
 
 //=======================================================================
 // function : ClientStudyToStudy
-// purpose  : 
+// purpose  :
 //=======================================================================
 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
 {
 //=======================================================================
 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
 {
@@ -128,41 +131,6 @@ SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
   return aDSStudy._retn();
 }
 
   return aDSStudy._retn();
 }
 
-//=================================================================================
-// class   : CustomItem
-// purpose : Set Font to a text.
-//=================================================================================
-class CustomItem : public QCustomMenuItem
-{
-public:
-  CustomItem(const QString& s, const QFont& f) : myString(s), myFont(f) {}
-  ~CustomItem() {}
-
-  void paint(QPainter* p, const QColorGroup& cg, bool act, bool /*enabled*/, int x, int y, int w, int h)
-  {
-    p->save();
-    p->fillRect( x, y, w, h, act ? cg.highlight() : cg.mid() );
-    p->setPen( act ? cg.highlightedText() : cg.buttonText() );
-    p->setFont( myFont );
-    p->drawText( x, y, w, h, AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString );
-    p->restore();
-  }
-
-  QSize sizeHint()
-  {
-    return QFontMetrics( myFont ).size( AlignHCenter | AlignVCenter | ShowPrefix | DontClip | SingleLine, myString );
-  }
-
-  bool fullSpan() const
-  {
-    return true;
-  }
-
-private:
-  QString myString;
-  QFont   myFont;
-};
-
 //=======================================================================
 // function : GeometryGUI::GeometryGUI()
 // purpose  : Constructor
 //=======================================================================
 // function : GeometryGUI::GeometryGUI()
 // purpose  : Constructor
@@ -171,12 +139,12 @@ GeometryGUI::GeometryGUI() :
   SalomeApp_Module( "GEOM" )
 {
   if ( CORBA::is_nil( myComponentGeom ) )
   SalomeApp_Module( "GEOM" )
 {
   if ( CORBA::is_nil( myComponentGeom ) )
-  { 
+  {
     SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( getApp()->namingService() );
     Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "GEOM" );
     myComponentGeom  = GEOM::GEOM_Gen::_narrow( comp );
   }
     SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( getApp()->namingService() );
     Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "GEOM" );
     myComponentGeom  = GEOM::GEOM_Gen::_narrow( comp );
   }
-  
+
   myState           = -1;
   myActiveDialogBox = 0;
   myFatherior       = "";
   myState           = -1;
   myActiveDialogBox = 0;
   myFatherior       = "";
@@ -185,10 +153,8 @@ GeometryGUI::GeometryGUI() :
   gp_Dir direction = gp_Dir(0., 0., 1.);
   myWorkingPlane = gp_Ax3(origin, direction);
 
   gp_Dir direction = gp_Dir(0., 0., 1.);
   myWorkingPlane = gp_Ax3(origin, direction);
 
-  myOCCSelectors.setAutoDelete( true );
-  myVTKSelectors.setAutoDelete( true );
-
   myDisplayer = 0;
   myDisplayer = 0;
+  myLocalSelectionMode = GEOM_ALLOBJECTS;
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -197,6 +163,11 @@ GeometryGUI::GeometryGUI() :
 //=======================================================================
 GeometryGUI::~GeometryGUI()
 {
 //=======================================================================
 GeometryGUI::~GeometryGUI()
 {
+  while (!myOCCSelectors.isEmpty())
+    delete myOCCSelectors.takeFirst();
+
+  while (!myVTKSelectors.isEmpty())
+    delete myVTKSelectors.takeFirst();
 }
 
 //=======================================================================
 }
 
 //=======================================================================
@@ -208,19 +179,21 @@ GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
 {
   if ( !myGUIMap.contains( libraryName ) ) {
     // try to load library if it is not loaded yet
 {
   if ( !myGUIMap.contains( libraryName ) ) {
     // try to load library if it is not loaded yet
-    QCString libs;
+    QString libs;
 #ifndef WNT
 #ifndef WNT
-    if( ( libs = getenv( "LD_LIBRARY_PATH" ) ) ) {
-         QStringList dirList = QStringList::split( ":", libs, false ); // skip empty entries
+    libs = getenv( "LD_LIBRARY_PATH" );
+    if( !libs.isEmpty() ) {
+      QStringList dirList = libs.split( ":", QString::SkipEmptyParts ); // skip empty entries
 #else
 #else
-       if( ( libs = getenv( "PATH" ) ) ) {
-         QStringList dirList = QStringList::split( ";", libs, false ); // skip empty entries
+    libs = getenv( "PATH" );
+    if( !libs.isEmpty() ) {
+      QStringList dirList = libs.split( ";", QString::SkipEmptyParts ); // skip empty entries
 #endif
       for( int i = dirList.count()-1; i >= 0; i-- ) {
        QString dir = dirList[ i ];
        QFileInfo fi( Qtx::addSlash( dirList[ i ] ) + libraryName );
        if( fi.exists() ) {
 #endif
       for( int i = dirList.count()-1; i >= 0; i-- ) {
        QString dir = dirList[ i ];
        QFileInfo fi( Qtx::addSlash( dirList[ i ] ) + libraryName );
        if( fi.exists() ) {
-         OSD_SharedLibrary aSharedLibrary( (char*)fi.fileName().latin1() );
+         OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().data() );
          bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
          if( !res ) {
            MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
          bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
          if( !res ) {
            MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
@@ -350,13 +323,13 @@ void GeometryGUI::OnGUIEvent( int id )
   bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
   // if current viewframe is not of OCC and not of VTK type - return immediately
   // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
   bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
   // if current viewframe is not of OCC and not of VTK type - return immediately
   // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
-  bool NotViewerDependentCommand = ( id == 901 || id == 216 || id == 213 ); 
+  bool NotViewerDependentCommand = ( id == 901 || id == 216 || id == 213 );
   if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommand )
       return;
 
   // fix for IPAL9103, point 2
   if ( CORBA::is_nil( GetGeomGen() ) ) {
   if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommand )
       return;
 
   // fix for IPAL9103, point 2
   if ( CORBA::is_nil( GetGeomGen() ) ) {
-    SUIT_MessageBox::error1( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
+    SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
     return;
   }
 
     return;
   }
 
@@ -368,16 +341,24 @@ void GeometryGUI::OnGUIEvent( int id )
       id == 121  ||  // MENU FILE - EXPORT BREP
       id == 122  ||  // MENU FILE - EXPORT IGES
       id == 123  ||  // MENU FILE - EXPORT STEP
       id == 121  ||  // MENU FILE - EXPORT BREP
       id == 122  ||  // MENU FILE - EXPORT IGES
       id == 123  ||  // MENU FILE - EXPORT STEP
+      id == 2171 ||  // POPUP VIEWER - SELECT ONLY - VERTEX
+      id == 2172 ||  // POPUP VIEWER - SELECT ONLY - EDGE
+      id == 2173 ||  // POPUP VIEWER - SELECT ONLY - WIRE
+      id == 2174 ||  // POPUP VIEWER - SELECT ONLY - FACE
+      id == 2175 ||  // POPUP VIEWER - SELECT ONLY - SHELL
+      id == 2176 ||  // POPUP VIEWER - SELECT ONLY - SOLID
+      id == 2177 ||  // POPUP VIEWER - SELECT ONLY - COMPOUND
+      id == 2178 ||  // POPUP VIEWER - SELECT ONLY - SELECT ALL
       id == 31   ||  // MENU EDIT - COPY
       id == 33   ||  // MENU EDIT - DELETE
       id == 411  ||  // MENU SETTINGS - ADD IN STUDY
       id == 412  ||  // MENU SETTINGS - SHADING COLOR
       id == 31   ||  // MENU EDIT - COPY
       id == 33   ||  // MENU EDIT - DELETE
       id == 411  ||  // MENU SETTINGS - ADD IN STUDY
       id == 412  ||  // MENU SETTINGS - SHADING COLOR
-      id == 413  ||  // MENU SETTINGS - ISOS
-      id == 414  ||  // MENU SETTINGS - STEP VALUE FOR SPIN BOXES
       id == 5103 ||  // MENU TOOLS - CHECK GEOMETRY
       id == 8032 ||  // POPUP VIEWER - COLOR
       id == 8033 ||  // POPUP VIEWER - TRANSPARENCY
       id == 8034 ||  // POPUP VIEWER - ISOS
       id == 5103 ||  // MENU TOOLS - CHECK GEOMETRY
       id == 8032 ||  // POPUP VIEWER - COLOR
       id == 8033 ||  // POPUP VIEWER - TRANSPARENCY
       id == 8034 ||  // POPUP VIEWER - ISOS
+      id == 8035 ||  // POPUP VIEWER - AUTO COLOR
+      id == 8036 ||  // POPUP VIEWER - DISABLE AUTO COLOR
       id == 804  ||  // POPUP VIEWER - ADD IN STUDY
       id == 901  ||  // OBJECT BROWSER - RENAME
       id == 9024 ) { // OBJECT BROWSER - OPEN
       id == 804  ||  // POPUP VIEWER - ADD IN STUDY
       id == 901  ||  // OBJECT BROWSER - RENAME
       id == 9024 ) { // OBJECT BROWSER - OPEN
@@ -486,8 +467,9 @@ void GeometryGUI::OnGUIEvent( int id )
   else if( id == 503 ||   // MENU OPERATION - PARTITION
           id == 504 ||   // MENU OPERATION - ARCHIMEDE
           id == 505 ||   // MENU OPERATION - FILLET
   else if( id == 503 ||   // MENU OPERATION - PARTITION
           id == 504 ||   // MENU OPERATION - ARCHIMEDE
           id == 505 ||   // MENU OPERATION - FILLET
-          id == 506 ||   // MENU OPERATION - CHAMFER  
-          id == 507 ) {  // MENU OPERATION - CLIPPING RANGE
+          id == 506 ||   // MENU OPERATION - CHAMFER
+          id == 507 ||   // MENU OPERATION - CLIPPING RANGE
+          id == 508 ) {  // MENU OPERATION - GET SHAPES ON SHAPE
 #ifndef WNT
        library = getLibrary( "libOperationGUI.so" );
 #else
 #ifndef WNT
        library = getLibrary( "libOperationGUI.so" );
 #else
@@ -501,9 +483,11 @@ void GeometryGUI::OnGUIEvent( int id )
            id == 606 ||   // MENU REPAIR - CLOSE CONTOUR
            id == 607 ||   // MENU REPAIR - REMOVE INTERNAL WIRES
            id == 608 ||   // MENU REPAIR - ADD POINT ON EDGE
            id == 606 ||   // MENU REPAIR - CLOSE CONTOUR
            id == 607 ||   // MENU REPAIR - REMOVE INTERNAL WIRES
            id == 608 ||   // MENU REPAIR - ADD POINT ON EDGE
-           id == 609 ||   // MENU REPAIR - FREE BOUNDARIES
-           id == 610 ||   // MENU REPAIR - FREE FACES
-          id == 602 ) {  // MENU REPAIR - GLUE FACES
+           id == 609 ||   // MENU MEASURE - FREE BOUNDARIES
+           id == 610 ||   // MENU MEASURE - FREE FACES
+           id == 611 ||   // MENU REPAIR - CHANGE ORIENTATION
+          id == 602 ||   // MENU REPAIR - GLUE FACES
+          id == 612 ) {  // MENU REPAIR - REMOVE EXTRA EDGES
 #ifndef WNT
        library = getLibrary( "libRepairGUI.so" );
 #else
 #ifndef WNT
        library = getLibrary( "libRepairGUI.so" );
 #else
@@ -513,8 +497,10 @@ void GeometryGUI::OnGUIEvent( int id )
   else if( id == 701   ||  // MENU MEASURE - PROPERTIES
           id == 702   ||  // MENU MEASURE - CDG
           id == 703   ||  // MENU MEASURE - INERTIA
   else if( id == 701   ||  // MENU MEASURE - PROPERTIES
           id == 702   ||  // MENU MEASURE - CDG
           id == 703   ||  // MENU MEASURE - INERTIA
+          id == 704   ||  // MENU MEASURE - NORMALE
           id == 7041  ||  // MENU MEASURE - BOUNDING BOX
           id == 7042  ||  // MENU MEASURE - MIN DISTANCE
           id == 7041  ||  // MENU MEASURE - BOUNDING BOX
           id == 7042  ||  // MENU MEASURE - MIN DISTANCE
+          id == 7043  ||  // MENU MEASURE - ANGLE
           id == 705   ||  // MENU MEASURE - TOLERANCE
           id == 706   ||  // MENU MEASURE - WHATIS
           id == 707   ||  // MENU MEASURE - CHECK
           id == 705   ||  // MENU MEASURE - TOLERANCE
           id == 706   ||  // MENU MEASURE - WHATIS
           id == 707   ||  // MENU MEASURE - CHECK
@@ -548,10 +534,10 @@ void GeometryGUI::OnGUIEvent( int id )
   }
 
   // call method of corresponding GUI library
   }
 
   // call method of corresponding GUI library
-  if ( library ) 
+  if ( library )
     library->OnGUIEvent( id, desk );
     library->OnGUIEvent( id, desk );
-  else 
-    SUIT_MessageBox::error1( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
+  else
+    SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
 }
 
 
 }
 
 
@@ -566,7 +552,7 @@ void GeometryGUI::OnKeyPress( SUIT_ViewWindow* win, QKeyEvent* pe )
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
     SUIT_Application* anApp = application();
     if (!anApp) return;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
     SUIT_Application* anApp = application();
     if (!anApp) return;
-    bOk = bOk && it.data()->OnKeyPress( pe, anApp->desktop(), win );
+    bOk = bOk && it.value()->OnKeyPress( pe, anApp->desktop(), win );
   }
 //  return bOk;
 }
   }
 //  return bOk;
 }
@@ -577,13 +563,13 @@ void GeometryGUI::OnKeyPress( SUIT_ViewWindow* win, QKeyEvent* pe )
 // purpose  : Manages mouse move events [static]
 //=================================================================================
 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* win, QMouseEvent* pe )
 // purpose  : Manages mouse move events [static]
 //=================================================================================
 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* win, QMouseEvent* pe )
-{  
+{
   GUIMap::Iterator it;
   bool bOk = true;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
     SUIT_Application* anApp = application();
     if (!anApp) return;
   GUIMap::Iterator it;
   bool bOk = true;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
     SUIT_Application* anApp = application();
     if (!anApp) return;
-    bOk = bOk && it.data()->OnMouseMove( pe, anApp->desktop(), win );
+    bOk = bOk && it.value()->OnMouseMove( pe, anApp->desktop(), win );
   }
 //  return bOk;
 }
   }
 //  return bOk;
 }
@@ -602,7 +588,7 @@ void GeometryGUI::OnMousePress( SUIT_ViewWindow* win, QMouseEvent* pe )
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
     SUIT_Application* anApp = application();
     if (!anApp) return;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it ) {
     SUIT_Application* anApp = application();
     if (!anApp) return;
-    processed = processed || it.data()->OnMousePress( pe, anApp->desktop(), win );
+    processed = processed || it.value()->OnMousePress( pe, anApp->desktop(), win );
   }
 //  return processed;
 }
   }
 //  return processed;
 }
@@ -636,7 +622,7 @@ bool GeometryGUI::SetSettings()
 {
   QMenuBar*     Mb = parent->getMainMenuBar();
   SUIT_Study*   ActiveStudy = application()->activeStudy();
 {
   QMenuBar*     Mb = parent->getMainMenuBar();
   SUIT_Study*   ActiveStudy = application()->activeStudy();
-    
+
 // Wireframe or Shading
   int DisplayMode = 0;
   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
 // Wireframe or Shading
   int DisplayMode = 0;
   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
@@ -670,16 +656,16 @@ bool GeometryGUI::SetSettings()
   //  if(!AddInStudy.isEmpty())
   //    Settings_AddInStudy = AddInStudy.toInt();
   //  else
   //  if(!AddInStudy.isEmpty())
   //    Settings_AddInStudy = AddInStudy.toInt();
   //  else
-  
+
   Settings_AddInStudy = 1;
   Mb->setItemChecked(411, Settings_AddInStudy);
 
   Settings_AddInStudy = 1;
   Mb->setItemChecked(411, Settings_AddInStudy);
 
-  // step value 
+  // step value
   QString S = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
   if(S.isEmpty())
     QAD_CONFIG->addSetting("Geometry:SettingsGeomStep", "100");
 
   QString S = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep");
   if(S.isEmpty())
     QAD_CONFIG->addSetting("Geometry:SettingsGeomStep", "100");
 
-  // isos 
+  // isos
   int count = ActiveStudy->getStudyFramesCount();
   for(int i = 0; i < count; i++) {
     if(ActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC) {
   int count = ActiveStudy->getStudyFramesCount();
   for(int i = 0; i < count; i++) {
     if(ActiveStudy->getStudyFrame(i)->getTypeView() == VIEW_OCC) {
@@ -703,39 +689,39 @@ bool GeometryGUI::SetSettings()
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
     bOk = bOk && it.data()->SetSettings( parent );
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
     bOk = bOk && it.data()->SetSettings( parent );
-    
-  // MZN: Enable/disable "Clipping range" menu item(from GEOM_CLIPPING variable)       
+
+  // MZN: Enable/disable "Clipping range" menu item(from GEOM_CLIPPING variable)
   if (getenv( "GEOM_CLIPPING" ) == NULL)
     {
       QMenuItem* mi = Mb->findItem(50);
       if (mi && mi->popup())
   if (getenv( "GEOM_CLIPPING" ) == NULL)
     {
       QMenuItem* mi = Mb->findItem(50);
       if (mi && mi->popup())
-      mi->popup()->removeItem(507);            
-    } 
-    
+      mi->popup()->removeItem(507);
+    }
+
   return bOk;
 }
 */
 
 //=======================================================================
 // function : createGeomAction
   return bOk;
 }
 */
 
 //=======================================================================
 // function : createGeomAction
-// purpose  : 
+// purpose  :
 //=======================================================================
 void GeometryGUI::createGeomAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
 {
 //=======================================================================
 void GeometryGUI::createGeomAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
 {
-  QIconSet icon;
+  QIcon icon;
   QWidget* parent = application()->desktop();
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   QPixmap pix;
   QWidget* parent = application()->desktop();
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   QPixmap pix;
-  if ( icon_id.length() ) 
-    pix = resMgr->loadPixmap( "GEOM", tr( icon_id ) );
+  if ( icon_id.length() )
+    pix = resMgr->loadPixmap( "GEOM", tr( icon_id.toLatin1().constData() ) );
   else
   else
-    pix = resMgr->loadPixmap( "GEOM", tr( QString( "ICO_" )+po_id ), false );
+    pix = resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+po_id).toLatin1().constData() ), false );
   if ( !pix.isNull() )
   if ( !pix.isNull() )
-    icon = QIconSet( pix );
+    icon = QIcon( pix );
 
 
-  QString tooltip    = tr( QString( "TOP_" )+po_id ),
-          menu       = tr( QString( "MEN_" )+po_id ),
-          status_bar = tr( QString( "STB_" )+po_id );
+  QString tooltip    = tr( (QString( "TOP_" )+po_id).toLatin1().constData() ),
+          menu       = tr( (QString( "MEN_" )+po_id).toLatin1().constData() ),
+          status_bar = tr( (QString( "STB_" )+po_id).toLatin1().constData() );
 
   createAction( id, tooltip, icon, menu, status_bar, key, parent, toggle, this, SLOT( OnGUIEvent() )  );
 }
 
   createAction( id, tooltip, icon, menu, status_bar, key, parent, toggle, this, SLOT( OnGUIEvent() )  );
 }
@@ -755,7 +741,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 111, "IMPORT", "", (CTRL + Key_I) );
   createGeomAction( 121, "EXPORT", "", (CTRL + Key_E) );
 
   createGeomAction( 111, "IMPORT", "", (CTRL + Key_I) );
   createGeomAction( 121, "EXPORT", "", (CTRL + Key_E) );
 
-  createGeomAction( 33, "DELETE" );
+  createGeomAction( 33, "DELETE", "", Qt::Key_Delete );
 
   createGeomAction( 4011, "POINT" );
   createGeomAction( 4012, "LINE" );
 
   createGeomAction( 4011, "POINT" );
   createGeomAction( 4012, "LINE" );
@@ -814,6 +800,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 505, "FILLET" );
   createGeomAction( 506, "CHAMFER" );
   //createGeomAction( 507, "CLIPPING" );
   createGeomAction( 505, "FILLET" );
   createGeomAction( 506, "CHAMFER" );
   //createGeomAction( 507, "CLIPPING" );
+  createGeomAction( 508, "GET_SHAPES_ON_SHAPES" );
 
   createGeomAction( 9998, "MUL_TRANSFORM" );
   createGeomAction( 9995, "EXPLODE_BLOCKS" );
 
   createGeomAction( 9998, "MUL_TRANSFORM" );
   createGeomAction( 9995, "EXPLODE_BLOCKS" );
@@ -829,38 +816,51 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 608, "POINT_ON_EDGE" );
   createGeomAction( 609, "CHECK_FREE_BNDS" );
   createGeomAction( 610, "CHECK_FREE_FACES" );
   createGeomAction( 608, "POINT_ON_EDGE" );
   createGeomAction( 609, "CHECK_FREE_BNDS" );
   createGeomAction( 610, "CHECK_FREE_FACES" );
-  
+  createGeomAction( 611, "CHANGE_ORIENTATION" );
+  createGeomAction( 612, "REMOVE_EXTRA_EDGES" );
+
   createGeomAction( 708, "POINT_COORDS" );
   createGeomAction( 701, "BASIC_PROPS" );
   createGeomAction( 702, "MASS_CENTER" );
   createGeomAction( 703, "INERTIA" );
   createGeomAction( 708, "POINT_COORDS" );
   createGeomAction( 701, "BASIC_PROPS" );
   createGeomAction( 702, "MASS_CENTER" );
   createGeomAction( 703, "INERTIA" );
+  createGeomAction( 704, "NORMALE" );
   createGeomAction( 7041, "BND_BOX" );
   createGeomAction( 7042, "MIN_DIST" );
   createGeomAction( 7041, "BND_BOX" );
   createGeomAction( 7042, "MIN_DIST" );
+  createGeomAction( 7043, "MEASURE_ANGLE" );
 
   createGeomAction( 705, "TOLERANCE" );
   createGeomAction( 706, "WHAT_IS" );
   createGeomAction( 707, "CHECK" );
   createGeomAction( 7072, "CHECK_COMPOUND" );
 
 
   createGeomAction( 705, "TOLERANCE" );
   createGeomAction( 706, "WHAT_IS" );
   createGeomAction( 707, "CHECK" );
   createGeomAction( 7072, "CHECK_COMPOUND" );
 
+#ifdef _DEBUG_ // PAL16821
   createGeomAction( 5103, "CHECK_GEOMETRY" );
   createGeomAction( 5103, "CHECK_GEOMETRY" );
-  
+#endif
   createGeomAction( 412, "SHADING_COLOR" );
   createGeomAction( 412, "SHADING_COLOR" );
-  createGeomAction( 413, "ISOS" );
-  createGeomAction( 414, "STEP_VALUE" );
 
   createGeomAction( 211, "SHADING" );
   createGeomAction( 212, "DISPLAY_ALL" );
   createGeomAction( 214, "ERASE_ALL" );
   createGeomAction( 216, "DISPLAY" );
 
   createGeomAction( 211, "SHADING" );
   createGeomAction( 212, "DISPLAY_ALL" );
   createGeomAction( 214, "ERASE_ALL" );
   createGeomAction( 216, "DISPLAY" );
+  createGeomAction( 2171, "VERTEX_SEL_ONLY" ,"", 0, true );
+  createGeomAction( 2172, "EDGE_SEL_ONLY", "", 0, true );
+  createGeomAction( 2173, "WIRE_SEL_ONLY", "",  0, true );
+  createGeomAction( 2174, "FACE_SEL_ONLY", "", 0, true );
+  createGeomAction( 2175, "SHELL_SEL_ONLY", "",  0, true );
+  createGeomAction( 2176, "SOLID_SEL_ONLY", "", 0, true );
+  createGeomAction( 2177, "COMPOUND_SEL_ONLY", "",  0, true );
+  createGeomAction( 2178, "ALL_SEL_ONLY", "",  0, true );
   createGeomAction( 213, "DISPLAY_ONLY" );
   createGeomAction( 215, "ERASE" );
 
   createGeomAction( 213, "DISPLAY_ONLY" );
   createGeomAction( 215, "ERASE" );
 
-  createGeomAction( 901, "POP_RENAME" );
+  createGeomAction( 901, "POP_RENAME", "", Qt::Key_F2 );
   createGeomAction( 80311, "POP_WIREFRAME", "", 0, true );
   createGeomAction( 80312, "POP_SHADING", "", 0, true );
   createGeomAction( 8032, "POP_COLOR" );
   createGeomAction( 8033, "POP_TRANSPARENCY" );
   createGeomAction( 8034, "POP_ISOS" );
   createGeomAction( 80311, "POP_WIREFRAME", "", 0, true );
   createGeomAction( 80312, "POP_SHADING", "", 0, true );
   createGeomAction( 8032, "POP_COLOR" );
   createGeomAction( 8033, "POP_TRANSPARENCY" );
   createGeomAction( 8034, "POP_ISOS" );
+  createGeomAction( 8035, "POP_AUTO_COLOR" );
+  createGeomAction( 8036, "POP_DISABLE_AUTO_COLOR" );
   createGeomAction( 8001, "POP_CREATE_GROUP" );
 
   // make wireframe-shading items to be exclusive (only one at a time is selected)
   createGeomAction( 8001, "POP_CREATE_GROUP" );
 
   // make wireframe-shading items to be exclusive (only one at a time is selected)
@@ -894,124 +894,133 @@ void GeometryGUI::initialize( CAM_Application* app )
   createMenu( 4020, basicId, -1 );
 
   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
   createMenu( 4020, basicId, -1 );
 
   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
-  createMenu( 4021, primId, -1 );  
-  createMenu( 4022, primId, -1 );  
-  createMenu( 4023, primId, -1 );  
-  createMenu( 4024, primId, -1 );  
-  createMenu( 4025, primId, -1 );  
+  createMenu( 4021, primId, -1 );
+  createMenu( 4022, primId, -1 );
+  createMenu( 4023, primId, -1 );
+  createMenu( 4024, primId, -1 );
+  createMenu( 4025, primId, -1 );
 
   int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
 
   int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
-  createMenu( 4031, genId, -1 );  
-  createMenu( 4032, genId, -1 );  
-  createMenu( 4033, genId, -1 );  
-  createMenu( 4034, genId, -1 );  
+  createMenu( 4031, genId, -1 );
+  createMenu( 4032, genId, -1 );
+  createMenu( 4033, genId, -1 );
+  createMenu( 4034, genId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
-  createMenu( 800, groupId, -1 );  
-  createMenu( 801, groupId, -1 );  
+  createMenu( 800, groupId, -1 );
+  createMenu( 801, groupId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
 
   int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
-  createMenu( 9997, blocksId, -1 );  
-  createMenu( 9999, blocksId, -1 );  
+  createMenu( 9997, blocksId, -1 );
+  createMenu( 9999, blocksId, -1 );
 
   createMenu( separator(), newEntId, -1 );
 
   createMenu( separator(), newEntId, -1 );
-  createMenu( 404, newEntId, -1 );  
+  createMenu( 404, newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
   createMenu( separator(), newEntId, -1 );
-  createMenu( 407, newEntId, -1 );  
+  createMenu( 407, newEntId, -1 );
 
   int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
 
   int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
-  createMenu( 4081, buildId, -1 );  
-  createMenu( 4082, buildId, -1 );  
-  createMenu( 4083, buildId, -1 );  
-  createMenu( 4084, buildId, -1 );  
-  createMenu( 4085, buildId, -1 );  
-  createMenu( 4086, buildId, -1 );  
+  createMenu( 4081, buildId, -1 );
+  createMenu( 4082, buildId, -1 );
+  createMenu( 4083, buildId, -1 );
+  createMenu( 4084, buildId, -1 );
+  createMenu( 4085, buildId, -1 );
+  createMenu( 4086, buildId, -1 );
 
   int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
 
   int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
 
   int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
 
   int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
-  createMenu( 5011, boolId, -1 );  
-  createMenu( 5012, boolId, -1 );  
-  createMenu( 5013, boolId, -1 );  
-  createMenu( 5014, boolId, -1 );  
+  createMenu( 5011, boolId, -1 );
+  createMenu( 5012, boolId, -1 );
+  createMenu( 5013, boolId, -1 );
+  createMenu( 5014, boolId, -1 );
 
   int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
 
   int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
-  createMenu( 5021, transId, -1 );  
-  createMenu( 5022, transId, -1 );  
-  createMenu( 5023, transId, -1 );  
-  createMenu( 5024, transId, -1 );  
-  createMenu( 5025, transId, -1 );  
-  createMenu( 5026, transId, -1 );  
+  createMenu( 5021, transId, -1 );
+  createMenu( 5022, transId, -1 );
+  createMenu( 5023, transId, -1 );
+  createMenu( 5024, transId, -1 );
+  createMenu( 5025, transId, -1 );
+  createMenu( 5026, transId, -1 );
   createMenu( separator(), transId, -1 );
   createMenu( separator(), transId, -1 );
-  createMenu( 5027, transId, -1 );  
-  createMenu( 5028, transId, -1 );  
+  createMenu( 5027, transId, -1 );
+  createMenu( 5028, transId, -1 );
 
 
-  createMenu( 503, operId, -1 );  
-  createMenu( 504, operId, -1 );  
+  createMenu( 503, operId, -1 );
+  createMenu( 504, operId, -1 );
+  createMenu( 508, operId, -1 );
   createMenu( separator(), operId, -1 );
   createMenu( separator(), operId, -1 );
-  createMenu( 505, transId, -1 );  
-  createMenu( 506, transId, -1 );  
-  //createMenu( 507, transId, -1 );  
+  createMenu( 505, transId, -1 );
+  createMenu( 506, transId, -1 );
+  //createMenu( 507, transId, -1 );
 
   int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
 
   int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
-  createMenu( 9998, blockId, -1 );  
-  createMenu( 9995, blockId, -1 );  
-  createMenu( 99991, blockId, -1 );  
+  createMenu( 9998, blockId, -1 );
+  createMenu( 9995, blockId, -1 );
+  createMenu( 99991, blockId, -1 );
 
   int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
 
   int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
-  createMenu( 605, repairId, -1 );  
-  createMenu( 603, repairId, -1 );  
-  createMenu( 606, repairId, -1 );  
-  createMenu( 607, repairId, -1 );  
-  createMenu( 604, repairId, -1 );  
-  createMenu( 601, repairId, -1 );  
-  createMenu( 602, repairId, -1 );  
-  createMenu( 608, repairId, -1 );  
-  createMenu( 609, repairId, -1 );  
-  createMenu( 610, repairId, -1 );  
+  createMenu( 605, repairId, -1 );
+  createMenu( 603, repairId, -1 );
+  createMenu( 606, repairId, -1 );
+  createMenu( 607, repairId, -1 );
+  createMenu( 604, repairId, -1 );
+  createMenu( 601, repairId, -1 );
+  createMenu( 602, repairId, -1 );
+  createMenu( 608, repairId, -1 );
+  //createMenu( 609, repairId, -1 );
+  //createMenu( 610, repairId, -1 );
+  createMenu( 611, repairId, -1 );
+  createMenu( 612, repairId, -1 );
 
   int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
 
   int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
-  createMenu( 708, measurId, -1 );  
-  createMenu( 701, measurId, -1 );  
+  createMenu( 708, measurId, -1 );
+  createMenu( 701, measurId, -1 );
+  createMenu( separator(), measurId, -1 );
+  createMenu( 702, measurId, -1 );
+  createMenu( 703, measurId, -1 );
+  createMenu( 704, measurId, -1 );
+  // NPAL16572: move "Check free boundaries" and "Check free faces" from "Repair" to "Measure"
   createMenu( separator(), measurId, -1 );
   createMenu( separator(), measurId, -1 );
-  createMenu( 702, measurId, -1 );  
-  createMenu( 703, measurId, -1 );  
+  createMenu( 609, measurId, -1 );
+  createMenu( 610, measurId, -1 );
+  // NPAL16572 END
   createMenu( separator(), measurId, -1 );
 
   int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
   createMenu( separator(), measurId, -1 );
 
   int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
-  createMenu( 7041, dimId, -1 );  
+  createMenu( 7041, dimId, -1 );
   createMenu( 7042, dimId, -1 );
   createMenu( 7042, dimId, -1 );
+  createMenu( 7043, dimId, -1 );
   createMenu( separator(), measurId, -1 );
   createMenu( separator(), measurId, -1 );
-  
-  createMenu( 705, measurId, -1 );  
+
+  createMenu( 705, measurId, -1 );
   createMenu( separator(), measurId, -1 );
   createMenu( separator(), measurId, -1 );
-  createMenu( 706, measurId, -1 );  
-  createMenu( 707, measurId, -1 );  
-  createMenu( 7072, measurId, -1 );  
+  createMenu( 706, measurId, -1 );
+  createMenu( 707, measurId, -1 );
+  createMenu( 7072, measurId, -1 );
 
 
+#ifdef _DEBUG_ // PAL16821
   int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
   createMenu( separator(), toolsId, -1 );
   int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
   createMenu( separator(), toolsId, -1 );
-  createMenu( 5103, toolsId, -1 );  
-  
+  createMenu( 5103, toolsId, -1 );
+#endif
   //int prefId = createMenu( tr( "MEN_PREFERENCES" ), -1, -1, 50 );
   //createMenu( separator(), prefId, -1 );
   //int geomId = createMenu( tr( "MEN_PREFERENCES_GEOM" ), prefId, -1 );
   //int prefId = createMenu( tr( "MEN_PREFERENCES" ), -1, -1, 50 );
   //createMenu( separator(), prefId, -1 );
   //int geomId = createMenu( tr( "MEN_PREFERENCES_GEOM" ), prefId, -1 );
-  //createMenu( 412, geomId, -1 );  
-  //createMenu( 413, geomId, -1 );  
-  //createMenu( 414, geomId, -1 );  
+  //createMenu( 412, geomId, -1 );
   //createMenu( separator(), prefId, -1 );
 
   int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
   createMenu( separator(), viewId, -1 );
 
   int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
   //createMenu( separator(), prefId, -1 );
 
   int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
   createMenu( separator(), viewId, -1 );
 
   int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
-  createMenu( 211, dispmodeId, -1 );  
-  
+  createMenu( 211, dispmodeId, -1 );
+
   createMenu( separator(), viewId, -1 );
   createMenu( separator(), viewId, -1 );
-  createMenu( 212, viewId, -1 );  
-  createMenu( 214, viewId, -1 );  
+  createMenu( 212, viewId, -1 );
+  createMenu( 214, viewId, -1 );
   createMenu( separator(), viewId, -1 );
 
 /*
   createMenu( separator(), viewId, -1 );
 
 /*
@@ -1019,8 +1028,8 @@ void GeometryGUI::initialize( CAM_Application* app )
   because of these items are accessible through object browser and viewers
   we have removed they from main menu
 
   because of these items are accessible through object browser and viewers
   we have removed they from main menu
 
-  createMenu( 216, viewId, -1 );  
-  createMenu( 213, viewId, -1 );  
+  createMenu( 216, viewId, -1 );
+  createMenu( 213, viewId, -1 );
   createMenu( 215, viewId, -1 );
 */
 
   createMenu( 215, viewId, -1 );
 */
 
@@ -1039,33 +1048,33 @@ void GeometryGUI::initialize( CAM_Application* app )
   createTool( 4020, basicTbId );
 
   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
   createTool( 4020, basicTbId );
 
   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
-  createTool( 4021, primTbId );  
-  createTool( 4022, primTbId );  
-  createTool( 4023, primTbId );  
-  createTool( 4024, primTbId );  
-  createTool( 4025, primTbId );  
+  createTool( 4021, primTbId );
+  createTool( 4022, primTbId );
+  createTool( 4023, primTbId );
+  createTool( 4024, primTbId );
+  createTool( 4025, primTbId );
 
   int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
 
   int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
-  createTool( 5011, boolTbId );  
-  createTool( 5012, boolTbId );  
-  createTool( 5013, boolTbId );  
-  createTool( 5014, boolTbId );  
+  createTool( 5011, boolTbId );
+  createTool( 5012, boolTbId );
+  createTool( 5013, boolTbId );
+  createTool( 5014, boolTbId );
 
   int genTbId = createTool( tr( "TOOL_GENERATION" ) );
 
   int genTbId = createTool( tr( "TOOL_GENERATION" ) );
-  createTool( 4031, genTbId );  
-  createTool( 4032, genTbId );  
-  createTool( 4033, genTbId );  
-  createTool( 4034, genTbId );  
+  createTool( 4031, genTbId );
+  createTool( 4032, genTbId );
+  createTool( 4033, genTbId );
+  createTool( 4034, genTbId );
 
   int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
 
   int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
-  createTool( 5021, transTbId );  
-  createTool( 5022, transTbId );  
-  createTool( 5023, transTbId );  
-  createTool( 5024, transTbId );  
-  createTool( 5025, transTbId );  
-  createTool( 5026, transTbId );  
+  createTool( 5021, transTbId );
+  createTool( 5022, transTbId );
+  createTool( 5023, transTbId );
+  createTool( 5024, transTbId );
+  createTool( 5025, transTbId );
+  createTool( 5026, transTbId );
   createTool( separator(), transTbId );
   createTool( separator(), transTbId );
-  createTool( 5027, transTbId );  
+  createTool( 5027, transTbId );
   createTool( 5028, transTbId );
 
   // ---- create popup menus --------------------------
   createTool( 5028, transTbId );
 
   // ---- create popup menus --------------------------
@@ -1073,28 +1082,41 @@ void GeometryGUI::initialize( CAM_Application* app )
   QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
   QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
 
   QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
   QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
 
+  QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
+  QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
+
+  QString autoColorPrefix =
+    "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
+
   QtxPopupMgr* mgr = popupMgr();
   mgr->insert( action(  901 ), -1, -1 );  // rename
   QtxPopupMgr* mgr = popupMgr();
   mgr->insert( action(  901 ), -1, -1 );  // rename
-  mgr->setRule( action( 901 ), "$type in {'Shape' 'Group'} and selcount=1", true );
+  mgr->setRule( action( 901 ), QString("$type in {'Shape' 'Group'} and selcount=1"), QtxPopupMgr::VisibleRule );
+  mgr->insert( action(   33 ), -1, -1 );  // delete
+  mgr->setRule( action(  33 ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
   mgr->insert( action(  8001 ), -1, -1 ); // create group
   mgr->insert( action(  8001 ), -1, -1 ); // create group
-  mgr->setRule( action( 8001 ), "client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true", true );
+  mgr->setRule( action( 8001 ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
   mgr->insert( action(  801 ), -1, -1 );  // edit group
   mgr->insert( action(  801 ), -1, -1 );  // edit group
-  mgr->setRule( action( 801 ),  "client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true", true );
+  mgr->setRule( action( 801 ),  QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
   mgr->insert( separator(), -1, -1 );     // -----------
   dispmodeId = mgr->insert(  tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
   mgr->insert( action(  80311 ), dispmodeId, -1 ); // wireframe
   mgr->insert( separator(), -1, -1 );     // -----------
   dispmodeId = mgr->insert(  tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
   mgr->insert( action(  80311 ), dispmodeId, -1 ); // wireframe
-  mgr->setRule( action( 80311 ), clientOCCorVTK_AndSomeVisible, true );
-  mgr->setRule( action( 80311 ), clientOCCorVTK + " and displaymode='Wireframe'", false );
+  mgr->setRule( action( 80311 ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
+  mgr->setRule( action( 80311 ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
   mgr->insert( action(  80312 ), dispmodeId, -1 ); // shading
   mgr->insert( action(  80312 ), dispmodeId, -1 ); // shading
-  mgr->setRule( action( 80312 ), clientOCCorVTK_AndSomeVisible, true );
-  mgr->setRule( action( 80312 ), clientOCCorVTK + " and displaymode='Shading'", false );
+  mgr->setRule( action( 80312 ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
+  mgr->setRule( action( 80312 ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
   mgr->insert( separator(), -1, -1 );     // -----------
   mgr->insert( action(  8032 ), -1, -1 ); // color
   mgr->insert( separator(), -1, -1 );     // -----------
   mgr->insert( action(  8032 ), -1, -1 ); // color
-  mgr->setRule( action( 8032 ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'})", true );
+  mgr->setRule( action( 8032 ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
   mgr->insert( action(  8033 ), -1, -1 ); // transparency
   mgr->insert( action(  8033 ), -1, -1 ); // transparency
-  mgr->setRule( action( 8033 ), clientOCCorVTK_AndSomeVisible, true );
+  mgr->setRule( action( 8033 ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
   mgr->insert( action(  8034 ), -1, -1 ); // isos
   mgr->insert( action(  8034 ), -1, -1 ); // isos
-  mgr->setRule( action( 8034 ), "client='OCCViewer' and selcount>0 and isVisible", true );
+  mgr->setRule( action( 8034 ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
+  mgr->insert( separator(), -1, -1 );     // -----------
+  mgr->insert( action(  8035 ), -1, -1 ); // auto color
+  mgr->setRule( action( 8035 ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
+  mgr->insert( action(  8036 ), -1, -1 ); // disable auto color
+  mgr->setRule( action( 8036 ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
   mgr->insert( separator(), -1, -1 );     // -----------
 
 
   mgr->insert( separator(), -1, -1 );     // -----------
 
 
@@ -1104,16 +1126,44 @@ void GeometryGUI::initialize( CAM_Application* app )
           types = "'Shape' 'Group'";
 
   mgr->insert( action(  216 ), -1, -1 ); // display
           types = "'Shape' 'Group'";
 
   mgr->insert( action(  216 ), -1, -1 ); // display
-  mgr->setRule( action( 216 ), rule.arg( types ).arg( "not isVisible" ), true );
+  mgr->setRule( action( 216 ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
 
   mgr->insert( action(  215 ), -1, -1 ); // erase
 
   mgr->insert( action(  215 ), -1, -1 ); // erase
-  mgr->setRule( action( 215 ), rule.arg( types ).arg( "isVisible" ), true );
+  mgr->setRule( action( 215 ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
 
   mgr->insert( action(  214 ), -1, -1 ); // erase All
 
   mgr->insert( action(  214 ), -1, -1 ); // erase All
-  mgr->setRule( action( 214 ), clientOCCorVTK, true );
-
+  mgr->setRule( action( 214 ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
+
+  QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
+
+  int selectolnyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1);                //select only menu
+  mgr->insert( action(2171), selectolnyId, -1);                                  //Vertex
+  mgr->setRule(action(2171), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2171), selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
+  mgr->insert( action(2172), selectolnyId, -1);                                  //Edge
+  mgr->setRule(action(2172), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2172), selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
+  mgr->insert( action(2173), selectolnyId, -1);                                  //Wire
+  mgr->setRule(action(2173), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2173), selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
+  mgr->insert( action(2174), selectolnyId, -1);                                  //Face
+  mgr->setRule(action(2174), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2174), selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
+  mgr->insert( action(2175), selectolnyId, -1);                                  //Shell
+  mgr->setRule(action(2175), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2175), selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
+  mgr->insert( action(2176), selectolnyId, -1);                                  //Solid
+  mgr->setRule(action(2176), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2176), selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
+  mgr->insert( action(2177), selectolnyId, -1);                                  //Compound
+  mgr->setRule(action(2177), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2177), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
+  mgr->insert( separator(), selectolnyId, -1);
+  mgr->insert( action(2178), selectolnyId, -1);                                  //Clear selection filter
+  mgr->setRule(action(2178), selectOnly, QtxPopupMgr::VisibleRule);
+  mgr->setRule(action(2178), selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
   mgr->insert( action(  213 ), -1, -1 ); // display only
   mgr->insert( action(  213 ), -1, -1 ); // display only
-  mgr->setRule( action( 213 ), rule.arg( types ).arg( "true" ), true );
+  mgr->setRule( action( 213 ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
   mgr->insert( separator(), -1, -1 );
 
   mgr->hide( mgr->actionId( action( myEraseAll ) ) );
   mgr->insert( separator(), -1, -1 );
 
   mgr->hide( mgr->actionId( action( myEraseAll ) ) );
@@ -1142,32 +1192,50 @@ bool GeometryGUI::activateModule( SUIT_Study* study )
   // Reset actions accelerator keys
   //action(111)->setAccel(QKeySequence(CTRL + Key_I)); // Import
   //action(121)->setAccel(QKeySequence(CTRL + Key_E)); // Export
   // Reset actions accelerator keys
   //action(111)->setAccel(QKeySequence(CTRL + Key_I)); // Import
   //action(121)->setAccel(QKeySequence(CTRL + Key_E)); // Export
-  action(111)->setEnabled(true); // Import
-  action(121)->setEnabled(true); // Export
+  action(111)->setEnabled( true ); // Import: CTRL + Key_I
+  action(121)->setEnabled( true ); // Export: CTRL + Key_E
+  action( 33)->setEnabled( true ); // Delete: Key_Delete
+  action(901)->setEnabled( true ); // Rename: Key_F2
 
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
 
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
-    it.data()->activate( application()->desktop() );
+    it.value()->activate( application()->desktop() );
 
   LightApp_SelectionMgr* sm = getApp()->selectionMgr();
 
   LightApp_SelectionMgr* sm = getApp()->selectionMgr();
+
   SUIT_ViewManager* vm;
   ViewManagerList OCCViewManagers, VTKViewManagers;
   SUIT_ViewManager* vm;
   ViewManagerList OCCViewManagers, VTKViewManagers;
+
   application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
   application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
-  for ( vm = OCCViewManagers.first(); vm; vm = OCCViewManagers.next() )
+  QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
+  while ( itOCC.hasNext() && (vm = itOCC.next()) )
     myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
     myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
+
   application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
   application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
-  for ( vm = VTKViewManagers.first(); vm; vm = VTKViewManagers.next() )
+  QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
+  while ( itVTK.hasNext() && (vm = itVTK.next()) )
     myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
 
     myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
 
+  //NPAL 19674
+  SALOME_ListIO selected;
+  sm->selectedObjects( selected );
+  sm->clearSelected();
+  
   // disable OCC selectors
   getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
   // disable OCC selectors
   getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
-  for ( GEOMGUI_OCCSelector* sr = myOCCSelectors.first(); sr; sr = myOCCSelectors.next() )
-    sr->setEnabled(true);
+  QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
+  while ( itOCCSel.hasNext() )
+    if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
+      sr->setEnabled(true);
 
   // disable VTK selectors
   getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
 
   // disable VTK selectors
   getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
-  for ( LightApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() )
-    sr->setEnabled(true);
+  QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
+  while ( itVTKSel.hasNext() )
+    if ( LightApp_VTKSelector* sr = itVTKSel.next() )
+      sr->setEnabled(true);
+
+  sm->setSelectedObjects( selected, true );   //NPAL 19674
 
   return true;
 }
 
   return true;
 }
@@ -1182,335 +1250,37 @@ bool GeometryGUI::deactivateModule( SUIT_Study* study )
   setMenuShown( false );
   setToolShown( false );
 
   setMenuShown( false );
   setToolShown( false );
 
-  disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ), 
+  disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
             this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
 
   EmitSignalCloseAllDialogs();
 
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
             this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
 
   EmitSignalCloseAllDialogs();
 
   GUIMap::Iterator it;
   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
-    it.data()->deactivate();  
+    it.value()->deactivate();
 
   // Unset actions accelerator keys
   //action(111)->setAccel(QKeySequence()); // Import
   //action(121)->setAccel(QKeySequence()); // Export
 
   // Unset actions accelerator keys
   //action(111)->setAccel(QKeySequence()); // Import
   //action(121)->setAccel(QKeySequence()); // Export
-  action(111)->setEnabled(false); // Import
-  action(121)->setEnabled(false); // Export
+  action(111)->setEnabled( false ); // Import: CTRL + Key_I
+  action(121)->setEnabled( false ); // Export: CTRL + Key_E
+  action( 33)->setEnabled( false ); // Delete: Key_Delete
+  action(901)->setEnabled( false ); // Rename: Key_F2
 
 
+  qDeleteAll(myOCCSelectors);
   myOCCSelectors.clear();
   getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
 
   myOCCSelectors.clear();
   getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
 
+  qDeleteAll(myVTKSelectors);
   myVTKSelectors.clear();
   getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
 
   return SalomeApp_Module::deactivateModule( study );
 }
 
   myVTKSelectors.clear();
   getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
 
   return SalomeApp_Module::deactivateModule( study );
 }
 
-//=================================================================================
-// function : GeometryGUI::DefinePopup()
-// purpose  : Called from desktop to define popup menu [static]
-//=================================================================================
-/*
-void GeometryGUI::DefinePopup(QString& theContext, QString& theParent, QString& theObject)
-{
-  QAD_Study* ActiveStudy = QAD_Application::getDesktop()->getActiveStudy();
-  SALOME_Selection* Sel  = SALOME_Selection::Selection(ActiveStudy->getSelection());
-
-  theObject  = "";
-  theContext = "";
-
-  if ( theParent == "Viewer" ) {
-    if ( Sel->IObjectCount() == 0 )
-      theContext = "NothingSelected";
-  }
-
-  if ( Sel->IObjectCount() == 1 ) {
-    Handle(SALOME_InteractiveObject) IO = Sel->firstIObject();
-    if( IO->hasEntry() ) {
-      SALOMEDS::SObject_var sobj = ActiveStudy->getStudyDocument()->FindObjectID( IO->getEntry() );
-      if ( !sobj->_is_nil() ) {
-       SALOMEDS::SComponent_var scomp = sobj->GetFatherComponent();
-       if ( !strcmp(scomp->GetID(), IO->getEntry() ) ) {
-         // component is selected
-         theObject = "Component";
-       }
-       else {
-         GEOM::GEOM_Object_var aGObj = GEOM::GEOM_Object::_narrow( sobj->GetObject() );
-         if ( !CORBA::is_nil( aGObj ) ) {
-           switch( aGObj->GetType() ) {
-           case GEOM_GROUP:
-             theObject = "Group";
-             break;
-           default:
-             theObject = "Shape";
-             break;
-           }
-         }
-       }
-      }
-    }
-  }
-}
-
-//=================================================================================
-// function : GeometryGUI::CustomPopup()
-// purpose  : Called from desktop to create popup menu [static]
-//=================================================================================
-bool GeometryGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext,
-                             const QString& theParent, const QString& theObject)
-{
-  GeometryGUI* geomGUI = GetGeomGUI();
-
-  // Deactivate any non modal dialog box to get the neutral point
-  geomGUI->EmitSignalDeactivateDialog();
-  QAD_Study* anActiveStudy    = parent->getActiveStudy();
-  QAD_StudyFrame* aStudyFrame = anActiveStudy->getActiveStudyFrame();
-  QAD_ViewFrame* aViewFrame   = aStudyFrame->getRightFrame()->getViewFrame();
-  SALOME_Selection* Sel       = SALOME_Selection::Selection(anActiveStudy->getSelection());
-  QString parentComponent     = ((SALOMEGUI_Desktop*)parent)->getComponentFromSelection();
-  bool isOCCViewer            = aViewFrame->getTypeView() == VIEW_OCC;
-  bool isVTKViewer            = aViewFrame->getTypeView() == VIEW_VTK;
-  int aDisplayMode            = 0;
-  QString objectName;
-
-  if ( aViewFrame->getTypeView() == VIEW_OCC )
-    aDisplayMode = ((OCCViewer_ViewFrame*)aViewFrame)->getViewer()->getAISContext()->DisplayMode();
-  else if ( aViewFrame->getTypeView() == VIEW_VTK )
-    aDisplayMode = (dynamic_cast<SVTK_ViewFrame*>( aViewFrame )->getRWInteractor()->GetDisplayMode();
-
-  int nbSel = Sel->IObjectCount();
-
-  if( nbSel == 0 ) {
-    ////// NOTHING SELECTED
-    popup->clear();
-  } 
-  else if ( nbSel == 1 ) {
-    ////// SINGLE OBJECT SELECTION
-    if ( parentComponent != parent->getActiveComponent() )  {
-      ////// selected object does not belong to GEOM module:
-      // remove all commands except Display/Erase...
-      while ( 1 ) {
-       int id = popup->idAt( 0 );
-       if ( id <= QAD_TopLabel_Popup_ID )
-         popup->removeItemAt( 0 );
-       else
-         break;
-      }
-    }
-    else {
-      ////// selected object belong to the GEOM module
-      // get interactive object
-      Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
-      objectName = IObject->getName();
-      // if object has entry get SObject
-      SALOMEDS::SObject_var SO;
-      if ( IObject->hasEntry() )
-       SO = anActiveStudy->getStudyDocument()->FindObjectID( IObject->getEntry() );
-
-      if ( theObject == "Component" ) {
-       ////// menu for component
-       if ( !isOCCViewer && !isVTKViewer ) {
-         popup->removeItem( QAD_DisplayOnly_Popup_ID );
-         popup->removeItem( QAD_Display_Popup_ID );
-         popup->removeItem( QAD_Erase_Popup_ID );
-       }
-      }
-      else {
-       ////// not component (should be shape)
-       if ( IObject->hasEntry() )  /////// VSR : TO BE REMOVED
-         popup->removeItem( 804 ); // "Add in Study"
-
-       // Here could be analysis of the geom shape's type
-       // ... //
-
-       SALOMEDS::GenericAttribute_var aTmpAttr;
-       if( SO->_is_nil() || SO->GetFatherComponent()->FindAttribute( aTmpAttr, "AttributeIOR") )
-         popup->removeItem( 9024 ); // "Open" /////// VSR : TO BE REMOVED
-
-       if ( !isOCCViewer && theParent == "ObjectBrowser" ) {
-         if ( theObject == "Shape" )
-           popup->removeItem( 800 ); // Create Group
-         else if ( theObject == "Group" )
-           popup->removeItem( 801 ); // Edit Group
-       }
-
-       if ( isOCCViewer || isVTKViewer ) {
-         ////// current viewer is OCC or VTK
-         SALOME_Prs* prs = aViewFrame->CreatePrs( IObject->getEntry() );
-         if ( aViewFrame->isVisible( IObject ) ) {
-           ////// object is already displayed in the viewer
-           popup->removeItem( QAD_Display_Popup_ID );
-           if ( isOCCViewer ) {
-             ////// OCC viewer only
-             OCCViewer_Prs* occPrs = dynamic_cast<OCCViewer_Prs*>( prs );
-             if ( occPrs && !occPrs->IsNull() ) {
-               AIS_ListOfInteractive ioList;
-               occPrs->GetObjects( ioList );
-               QMenuItem* mi = popup->findItem( 803 );
-               if ( mi && mi->popup() ) {
-                 if ( ioList.First()->DisplayMode() == 0 )
-                   mi->popup()->setItemChecked( 80311, true ); // "Wireframe"
-                 else if ( ioList.First()->DisplayMode() == 1 )
-                   mi->popup()->setItemChecked( 80312, true ); // "Shading"
-                 else if ( ioList.First()->DisplayMode() < 0 )
-                   mi->popup()->setItemChecked( aDisplayMode == 0 ? 80311 : 80312 , true ); // "Wireframe" or "Shading"
-               }
-             }
-           }
-           else {
-             ////// VTK viewer only
-             popup->removeItem( 8034 ); // "Isos"
-             SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( prs );
-             if ( vtkPrs && !vtkPrs->IsNull() ) {
-               vtkActorCollection* actorList = vtkPrs->GetObjects();
-               actorList->InitTraversal();
-               SALOME_Actor* ac = SALOME_Actor::SafeDownCast( actorList->GetNextActor() );
-               QMenuItem* mi = popup->findItem( 803 );
-               if ( ac && mi && mi->popup() ) {
-                 if ( ac->getDisplayMode() == 0 )
-                   mi->popup()->setItemChecked( 80311, true ); // "Wireframe"
-                 else if ( ac->getDisplayMode() == 1 )
-                   mi->popup()->setItemChecked( 80312, true ); // "Shading"
-                 else
-                   mi->popup()->setItemChecked( aDisplayMode == 0 ? 80311 : 80312 , true ); // "Wireframe" or "Shading"
-               }
-             }
-           }
-         }
-         else {
-           ////// object is not yet displayed in the viewer
-           popup->removeItem( 803 );  // "Display Mode"
-           popup->removeItem( 8032 ); // "Color"
-           popup->removeItem( 8033 ); // "Transparency"
-           popup->removeItem( 8034 ); // "Isos"
-           popup->removeItem( QAD_Erase_Popup_ID );
-         }
-         delete prs;
-       }
-       else {
-         ////// other viewer type (neither OCC nor VTK)
-         popup->removeItem( 803 );  // "Display Mode"
-         popup->removeItem( 8032 ); // "Color"
-         popup->removeItem( 8033 ); // "Transparency"
-         popup->removeItem( 8034 ); // "Isos"
-         popup->removeItem( QAD_Display_Popup_ID );
-         popup->removeItem( QAD_DisplayOnly_Popup_ID );
-         popup->removeItem( QAD_Erase_Popup_ID );
-       }
-      }
-    }
-  }
-  else {
-    ////// MULTIPLE SELECTION
-    if ( parentComponent != parent->getActiveComponent() )  {
-      ////// not GEOM module objects or objects belong to different modules
-      // remove all commands except Display/Erase...
-      while ( 1 ) {
-       int id = popup->idAt( 0 );
-       if ( id <= QAD_TopLabel_Popup_ID )
-         popup->removeItemAt( 0 );
-       else
-         break;
-      }
-      if ( parentComponent.isNull() )  {
-       ////// objects belong to different modules
-       popup->removeItem(QAD_Display_Popup_ID);
-       popup->removeItem(QAD_DisplayOnly_Popup_ID);
-       popup->removeItem(QAD_Erase_Popup_ID);
-      }
-      else {
-       objectName = tr( "GEOM_MEN_POPUP_NAME" ).arg( nbSel );
-      }
-    }
-    else {
-      ////// all selected objects belong to GEOM module
-      popup->removeItem( 901 ); // "Rename"
-
-      SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
-      bool isComponent  = false;
-      bool needOpen     = false;
-      bool needDisplay  = false;
-      bool needErase    = false;
-      int needToPublish = 0;
-
-      for( ;It.More();It.Next() ) {
-       Handle(SALOME_InteractiveObject) anIObject = It.Value();
-
-       if ( aViewFrame->isVisible( anIObject ) )
-         needErase   = true;
-       else
-         needDisplay = true;
-
-       if( anIObject->hasEntry() ) {
-         needToPublish = -1; /////// VSR : TO BE REMOVED
-         SALOMEDS::SObject_var obj = anActiveStudy->getStudyDocument()->FindObjectID( anIObject->getEntry() );
-         SALOMEDS::GenericAttribute_var aTmpAttr;
-         if ( !obj->_is_nil() && !obj->GetFatherComponent()->FindAttribute( aTmpAttr, "AttributeIOR" ) )
-           needOpen = true;  /////// VSR : TO BE REMOVED
-         if ( !obj->_is_nil() && QString( obj->GetID() ) == QString( obj->GetFatherComponent()->GetID() ) )
-           isComponent = true;
-       }
-       else {
-         if ( needToPublish != -1 ) needToPublish = 1;
-       }
-      }
-      if( needOpen || ( !isOCCViewer && !isVTKViewer ) ) {
-       ////// Data is not loaded yet or current viewer is neither OCC nor VTK
-       popup->removeItem( 803 );  // "Display Mode"
-       popup->removeItem( 8032 ); // "Color"
-       popup->removeItem( 8033 ); // "Transparency"
-       popup->removeItem( 8034 ); // "Isos"
-       popup->removeItem( 804 );  // "Add in Study"
-       popup->removeItem( QAD_DisplayOnly_Popup_ID );
-       popup->removeItem( QAD_Display_Popup_ID );
-       popup->removeItem( QAD_Erase_Popup_ID );
-      }
-      else {
-       popup->removeItem( 9024 );   // "Open"
-       if ( needToPublish <= 0 )
-         popup->removeItem( 804 );  // "Add in Study"
-
-       if( isComponent ) {
-         popup->removeItem( 803 );  // "Display Mode"
-         popup->removeItem( 8032 ); // "Color"
-         popup->removeItem( 8033 ); // "Transparency"
-         popup->removeItem( 8034 ); // "Isos"
-         popup->removeItem( QAD_DisplayOnly_Popup_ID );
-       }
-
-       if ( !needDisplay )
-         popup->removeItem( QAD_Display_Popup_ID );
-       if ( !needErase )
-         popup->removeItem( QAD_Erase_Popup_ID );
-       if ( !isOCCViewer )
-         popup->removeItem( 8034 ); // "Isos"
-      }
-    }
-  }
-
-  // check popup for unnecessary separators
-  QAD_Tools::checkPopup( popup );
-  // find popup menu's TopLabel item (with title)
-  int topItem = popup->indexOf( QAD_TopLabel_Popup_ID );
-  if ( topItem >= 0 ) {
-    // remove popup menu's title item
-    popup->removeItem( QAD_TopLabel_Popup_ID );
-    if ( theParent == "Viewer" && !objectName.isEmpty() && popup->count() > 0 ) {
-      // set bold font for popup menu's title
-      QFont f = popup->font(); f.setBold( TRUE );
-      popup->removeItem( QAD_TopLabel_Popup_ID );
-      popup->insertItem( new CustomItem( objectName, f ), QAD_TopLabel_Popup_ID, topItem );
-    }
-  }
-
-  return false;
-}
-
-*/
-
 //=======================================================================
 // function : GeometryGUI::BuildPresentation()
 //=======================================================================
 // function : GeometryGUI::BuildPresentation()
-// purpose  : 
+// purpose  :
 //=======================================================================
 void GeometryGUI::BuildPresentation( const Handle(SALOME_InteractiveObject)& io, SUIT_ViewWindow* win )
 {
 //=======================================================================
 void GeometryGUI::BuildPresentation( const Handle(SALOME_InteractiveObject)& io, SUIT_ViewWindow* win )
 {
@@ -1527,8 +1297,8 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
     return;
 
   const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
     return;
 
   const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
-//  const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
-  
+  const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
+
   // disable non-OCC viewframe menu commands
 //  action( 404 )->setEnabled( ViewOCC ); // SKETCHER
   action( 603 )->setEnabled( ViewOCC ); // SuppressFace
   // disable non-OCC viewframe menu commands
 //  action( 404 )->setEnabled( ViewOCC ); // SKETCHER
   action( 603 )->setEnabled( ViewOCC ); // SuppressFace
@@ -1537,7 +1307,6 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
   action( 607 )->setEnabled( ViewOCC ); // RemoveInternalWires
   action( 608 )->setEnabled( ViewOCC ); // AddPointOnEdge
 //  action( 609 )->setEnabled( ViewOCC ); // Free boundaries
   action( 607 )->setEnabled( ViewOCC ); // RemoveInternalWires
   action( 608 )->setEnabled( ViewOCC ); // AddPointOnEdge
 //  action( 609 )->setEnabled( ViewOCC ); // Free boundaries
-  action( 413 )->setEnabled( ViewOCC ); // Isos Settings
 
   action( 800 )->setEnabled( ViewOCC ); // Create Group
   action( 801 )->setEnabled( ViewOCC ); // Edit Group
 
   action( 800 )->setEnabled( ViewOCC ); // Create Group
   action( 801 )->setEnabled( ViewOCC ); // Edit Group
@@ -1547,8 +1316,8 @@ void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
 
 void GeometryGUI::windows( QMap<int, int>& mappa ) const
 {
 
 void GeometryGUI::windows( QMap<int, int>& mappa ) const
 {
-  mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft );
-  mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom );
+  mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
+  mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
 }
 
 void GeometryGUI::viewManagers( QStringList& lst ) const
 }
 
 void GeometryGUI::viewManagers( QStringList& lst ) const
@@ -1574,8 +1343,10 @@ void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
 
     // disable OCC selectors
     getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
 
     // disable OCC selectors
     getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
-    for ( GEOMGUI_OCCSelector* sr = myOCCSelectors.first(); sr; sr = myOCCSelectors.next() )
-      sr->setEnabled(true);
+    QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
+    while ( itOCCSel.hasNext() )
+      if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
+       sr->setEnabled(true);
   }
   else if ( vm->getType() == SVTK_Viewer::Type() )
   {
   }
   else if ( vm->getType() == SVTK_Viewer::Type() )
   {
@@ -1584,8 +1355,10 @@ void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
 
     // disable VTK selectors
     getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
 
     // disable VTK selectors
     getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
-    for ( LightApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() )
-      sr->setEnabled(true);
+    QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
+    while ( itVTKSel.hasNext() )
+      if ( LightApp_VTKSelector* sr = itVTKSel.next() )
+       sr->setEnabled(true);
   }
 }
 
   }
 }
 
@@ -1594,21 +1367,25 @@ void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
   SUIT_ViewModel* viewer = vm->getViewModel();
   if ( vm->getType() == OCCViewer_Viewer::Type() )
   {
   SUIT_ViewModel* viewer = vm->getViewModel();
   if ( vm->getType() == OCCViewer_Viewer::Type() )
   {
-    for ( GEOMGUI_OCCSelector* sr = myOCCSelectors.first(); sr; sr = myOCCSelectors.next() )
-      if ( sr->viewer() == viewer )
-      {
-       myOCCSelectors.remove( sr );
-       break;
-      }
+    QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
+    while ( itOCCSel.hasNext() )
+      if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
+       if ( sr->viewer() == viewer )
+       {
+         delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
+         break;
+       }
   }
   if ( vm->getType() == SVTK_Viewer::Type() )
   {
   }
   if ( vm->getType() == SVTK_Viewer::Type() )
   {
-    for ( LightApp_VTKSelector* sr = myVTKSelectors.first(); sr; sr = myVTKSelectors.next() )
-      if ( sr->viewer() == viewer )
-      {
-       myVTKSelectors.remove( sr );
-       break;
-      }
+    QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
+    while ( itVTKSel.hasNext() )
+      if ( LightApp_VTKSelector* sr = itVTKSel.next() )
+       if ( sr->viewer() == viewer )
+       {
+         delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
+         break;
+       }
   }
 }
 
   }
 }
 
@@ -1616,7 +1393,7 @@ QString GeometryGUI::engineIOR() const
 {
   if ( !CORBA::is_nil( GetGeomGen() ) )
     return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
 {
   if ( !CORBA::is_nil( GetGeomGen() ) )
     return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
-  return QString( "" );
+  return "";
 }
 
 LightApp_Selection* GeometryGUI::createSelection() const
 }
 
 LightApp_Selection* GeometryGUI::createSelection() const
@@ -1624,7 +1401,7 @@ LightApp_Selection* GeometryGUI::createSelection() const
   return new GEOMGUI_Selection();
 }
 
   return new GEOMGUI_Selection();
 }
 
-void GeometryGUI::contextMenuPopup( const QString& client, QPopupMenu* menu, QString& title )
+void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
 {
   SalomeApp_Module::contextMenuPopup( client, menu, title );
   SALOME_ListIO lst;
 {
   SalomeApp_Module::contextMenuPopup( client, menu, title );
   SALOME_ListIO lst;
@@ -1644,34 +1421,111 @@ void GeometryGUI::createPreferences()
   int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
 
   int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
   int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
 
   int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
+  setPreferenceProperty( genGroup, "columns", 2 );
+
+  int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
+                               LightApp_Preferences::Selector, 
+                               "Geometry", "display_mode" );
+
   addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "shading_color" );
   addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
                 LightApp_Preferences::Color, "Geometry", "shading_color" );
+
+  addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
+                LightApp_Preferences::Color, "Geometry", "wireframe_color" );
+
+  addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
+                LightApp_Preferences::Color, "Geometry", "free_bound_color" );
+
+  addPreference( tr( "PREF_LINE_COLOR"), genGroup,
+                LightApp_Preferences::Color, "Geometry", "line_color" );
+
+  addPreference( tr( "PREF_POINT_COLOR"), genGroup,
+                LightApp_Preferences::Color, "Geometry", "point_color" );
+
+  addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
+                LightApp_Preferences::Color, "Geometry", "isos_color" );
+
   int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
                            LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
   int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
                            LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
-  int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
-                           LightApp_Preferences::Selector, "Geometry", "display_mode" );
 
 
-  setPreferenceProperty( genGroup, "columns", 1 );
+  int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
+  setPreferenceProperty( VertexGroup, "columns", 2 );
 
 
-  setPreferenceProperty( step, "min", 0.001 );
-  setPreferenceProperty( step, "max", 10000 );
-  setPreferenceProperty( step, "precision", 3 );
+  int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
+                                    LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
+
+  int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
+                                   LightApp_Preferences::DblSpin, "Geometry", "marker_scale" );
 
   // Set property for default display mode
   QStringList aModesList;
   aModesList.append( tr("MEN_WIREFRAME") );
   aModesList.append( tr("MEN_SHADING") );
 
   // Set property for default display mode
   QStringList aModesList;
   aModesList.append( tr("MEN_WIREFRAME") );
   aModesList.append( tr("MEN_SHADING") );
-  
-  QValueList<QVariant> anIndexesList;
+
+  QList<QVariant> anIndexesList;
   anIndexesList.append(0);
   anIndexesList.append(1);
   anIndexesList.append(0);
   anIndexesList.append(1);
-  
+
   setPreferenceProperty( dispmode, "strings", aModesList );
   setPreferenceProperty( dispmode, "indexes", anIndexesList );
   setPreferenceProperty( dispmode, "strings", aModesList );
   setPreferenceProperty( dispmode, "indexes", anIndexesList );
+
+  // Set property for step value for spinboxes
+  setPreferenceProperty( step, "min", 1 );
+  setPreferenceProperty( step, "max", 10000 );
+  setPreferenceProperty( step, "precision", 3 );
+
+  // Set property for type of vertex marker
+  QStringList aTypeOfMarkerList;
+  QList<QVariant> anTypeOfMarkerIndexesList;
+
+  aTypeOfMarkerList.append( tr("TOM_PLUS") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_PLUS);
+
+  aTypeOfMarkerList.append( tr("TOM_POINT") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_POINT);
+
+  aTypeOfMarkerList.append( tr("TOM_STAR") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_STAR);
+
+  aTypeOfMarkerList.append( tr("TOM_O") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O);
+
+  aTypeOfMarkerList.append( tr("TOM_X") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_X);
+
+  aTypeOfMarkerList.append( tr("TOM_O_POINT") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_POINT);
+
+  aTypeOfMarkerList.append( tr("TOM_O_PLUS") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_PLUS);
+
+  aTypeOfMarkerList.append( tr("TOM_O_STAR") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_STAR);
+
+  aTypeOfMarkerList.append( tr("TOM_O_X") );
+  anTypeOfMarkerIndexesList.append(Aspect_TOM_O_X);
+
+
+  setPreferenceProperty( typeOfMarker, "strings", aTypeOfMarkerList );
+  setPreferenceProperty( typeOfMarker, "indexes", anTypeOfMarkerIndexesList );
+
+  // Set property for Vertex Marker scale
+  setPreferenceProperty( markerScale, "min", 1. );
+  setPreferenceProperty( markerScale, "max", 7. );
+  setPreferenceProperty( markerScale, "precision", 0.01 );
+  setPreferenceProperty( markerScale, "step", 0.5 );
+
 }
 
 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
 {
 }
 
 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
 {
+  if (section == "Geometry") {
+    SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
+    if (param == QString("SettingsGeomStep")) {
+      double spin_step = aResourceMgr->doubleValue(section, param, 100.);
+      EmitSignalDefaultStepValueChanged(spin_step);
+    }
+  }
 }
 
 LightApp_Displayer* GeometryGUI::displayer()
 }
 
 LightApp_Displayer* GeometryGUI::displayer()
@@ -1680,3 +1534,12 @@ LightApp_Displayer* GeometryGUI::displayer()
     myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
   return myDisplayer;
 }
     myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
   return myDisplayer;
 }
+
+void GeometryGUI::setLocalSelectionMode(const int mode)
+{
+  myLocalSelectionMode = mode;
+}
+int GeometryGUI::getLocalSelectionMode() const
+{
+  return myLocalSelectionMode;
+}