Salome HOME
674eb2869a32886c6f0a327e5cdbf75808c7a180
[modules/geom.git] / src / GEOMGUI / GeometryGUI.cxx
1 // Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //  File   : GeometryGUI.cxx
23 //  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
24
25 #include <Standard_math.hxx>  // E.A. must be included before Python.h to fix compilation on windows
26 #ifdef HAVE_FINITE
27 #undef HAVE_FINITE            // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
28 #endif
29 #include "Python.h"
30 #include "GeometryGUI.h"
31 #include "GeometryGUI_Operations.h"
32 #include "GEOMGUI_OCCSelector.h"
33 #include "GEOMGUI_Selection.h"
34 #include "GEOM_Constants.h"
35 #include "GEOM_Displayer.h"
36 #include "GEOM_AISShape.hxx"
37
38 #include "GEOM_Actor.h"
39
40 #include <Material_ResourceMgr.h>
41
42 #include <SUIT_Desktop.h>
43 #include <SUIT_MessageBox.h>
44 #include <SUIT_ResourceMgr.h>
45 #include <SUIT_Session.h>
46 #include <SUIT_ViewManager.h>
47
48 #include <OCCViewer_ViewWindow.h>
49 #include <OCCViewer_ViewPort3d.h>
50 #include <OCCViewer_ViewModel.h>
51 #include <OCCViewer_ViewManager.h>
52
53 #include <SOCC_ViewModel.h>
54 #include <SOCC_ViewWindow.h>
55
56 #include <SVTK_ViewWindow.h>
57 #include <SVTK_RenderWindowInteractor.h>
58 #include <SVTK_InteractorStyle.h>
59 #include <SVTK_ViewModel.h>
60
61 #include <SalomeApp_Application.h>
62 #include <SalomeApp_DataObject.h>
63 #include <SalomeApp_Study.h>
64
65 #include <LightApp_SelectionMgr.h>
66 #include <LightApp_VTKSelector.h>
67 #include <LightApp_DataObject.h>
68 #include <LightApp_Preferences.h>
69
70 #include <SALOME_LifeCycleCORBA.hxx>
71 #include <SALOME_ListIO.hxx>
72 #include <SALOME_ListIteratorOfListIO.hxx>
73
74 #include <SALOMEDSClient_ClientFactory.hxx>
75 #include <SALOMEDSClient_IParameters.hxx>
76
77 #include <Basics_OCCTVersion.hxx>
78
79 // External includes
80 #include <QMenu>
81 #include <QTime>
82 #include <QAction>
83 #include <QFileInfo>
84 #include <QString>
85 #include <QPainter>
86
87 #include <AIS_Drawer.hxx>
88 #include <AIS_ListOfInteractive.hxx>
89 #include <AIS_ListIteratorOfListOfInteractive.hxx>
90 #include <Prs3d_Drawer.hxx>
91 #include <Prs3d_IsoAspect.hxx>
92 #include <Aspect_TypeOfMarker.hxx>
93 #include <OSD_SharedLibrary.hxx>
94 #include <NCollection_DataMap.hxx>
95
96 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
97 #include <TColStd_HArray1OfByte.hxx>
98 #else
99 #include <Graphic3d_HArray1OfBytes.hxx>
100 #endif
101
102 #include <utilities.h>
103
104 #include <vtkCamera.h>
105 #include <vtkRenderer.h>
106
107 #include <GEOM_version.h>
108
109
110 #include "GEOMImpl_Types.hxx"
111
112 extern "C" {
113   Standard_EXPORT CAM_Module* createModule() {
114     return new GeometryGUI();
115   }
116
117   Standard_EXPORT char* getModuleVersion() {
118     return (char*)GEOM_VERSION_STR;
119   }
120 }
121
122 GeometryGUI::StudyTextureMap GeometryGUI::myTextureMap;
123
124 GEOM::GEOM_Gen_var GeometryGUI::myComponentGeom = GEOM::GEOM_Gen::_nil();
125
126 GEOM::GEOM_Gen_var GeometryGUI::GetGeomGen()
127 {
128   // Bug 12290: exception in Mesh GUI on GEOMBase::GetShape() if Geometry GUI hasn't been loaded
129   if (CORBA::is_nil(myComponentGeom))
130     InitGeomGen();
131   return GeometryGUI::myComponentGeom;
132 }
133
134 bool GeometryGUI::InitGeomGen()
135 {
136   GeometryGUI aGG;
137   if( CORBA::is_nil( myComponentGeom ) ) return false;
138   return true;
139 }
140
141 //=======================================================================
142 // function : ClientSObjectToObject
143 // purpose  :
144 //=======================================================================
145 CORBA::Object_var GeometryGUI::ClientSObjectToObject (_PTR(SObject) theSObject)
146 {
147   _PTR(GenericAttribute) anAttr;
148   CORBA::Object_var anObj;
149   try {
150     std::string aValue = theSObject->GetIOR();
151     if (strcmp(aValue.c_str(), "") != 0) {
152       CORBA::ORB_ptr anORB = SalomeApp_Application::orb();
153       anObj = anORB->string_to_object(aValue.c_str());
154     }
155   } catch(...) {
156     INFOS("ClientSObjectToObject - Unknown exception was occured!!!");
157   }
158   return anObj._retn();
159 }
160
161 //=======================================================================
162 // function : ClientStudyToStudy
163 // purpose  :
164 //=======================================================================
165 SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
166 {
167   SALOME_NamingService *aNamingService = SalomeApp_Application::namingService();
168   CORBA::Object_var aSMObject = aNamingService->Resolve("/myStudyManager");
169   SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow(aSMObject);
170   int aStudyID = theStudy->StudyId();
171   SALOMEDS::Study_var aDSStudy = aStudyManager->GetStudyByID(aStudyID);
172   return aDSStudy._retn();
173 }
174
175 void GeometryGUI::Modified( bool theIsUpdateActions )
176 {
177   if( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
178     if( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
179       appStudy->Modified();
180       if( theIsUpdateActions )
181         app->updateActions();
182     }
183   }
184 }
185
186 //=======================================================================
187 // function : GeometryGUI::GeometryGUI()
188 // purpose  : Constructor
189 //=======================================================================
190 GeometryGUI::GeometryGUI() :
191   SalomeApp_Module( "GEOM" ),
192   LightApp_Module( "GEOM" )
193 {
194   if ( CORBA::is_nil( myComponentGeom ) )
195   {
196     Engines::EngineComponent_var comp =
197       SalomeApp_Application::lcc()->FindOrLoad_Component( "FactoryServer", "GEOM" );
198     myComponentGeom = GEOM::GEOM_Gen::_narrow( comp );
199   }
200
201   myActiveDialogBox = 0;
202
203   gp_Pnt origin = gp_Pnt(0., 0., 0.);
204   gp_Dir direction = gp_Dir(0., 0., 1.);
205   myWorkingPlane = gp_Ax3(origin, direction);
206
207   myDisplayer = 0;
208   myLocalSelectionMode = GEOM_ALLOBJECTS;
209 }
210
211 //=======================================================================
212 // function : GeometryGUI::~GeometryGUI()
213 // purpose  : Destructor
214 //=======================================================================
215 GeometryGUI::~GeometryGUI()
216 {
217   while (!myOCCSelectors.isEmpty())
218     delete myOCCSelectors.takeFirst();
219
220   while (!myVTKSelectors.isEmpty())
221     delete myVTKSelectors.takeFirst();
222
223   qDeleteAll(myGUIMap);
224 }
225
226 //=======================================================================
227 // function : GeometryGUI::getLibrary()
228 // purpose  : get or load GUI library by name [ internal ]
229 //=======================================================================
230 typedef GEOMGUI* (*LibraryGUI)( GeometryGUI* );
231 GEOMGUI* GeometryGUI::getLibrary( const QString& libraryName )
232 {
233   if ( !myGUIMap.contains( libraryName ) ) {
234     // try to load library if it is not loaded yet
235 #ifndef WNT
236     QString dirs = getenv( "LD_LIBRARY_PATH" );
237     QString sep  = ":";
238 #else
239     QString dirs = getenv( "PATH" );
240     QString sep  = ";";
241 #endif
242     if ( !dirs.isEmpty() ) {
243       QStringList dirList = dirs.split(sep, QString::SkipEmptyParts ); // skip empty entries
244       QListIterator<QString> it( dirList ); it.toBack();
245       while ( it.hasPrevious() ) {
246         QFileInfo fi( Qtx::addSlash( it.previous() ) + libraryName );
247         if ( fi.exists() ) {
248           OSD_SharedLibrary aSharedLibrary( fi.fileName().toLatin1().constData() );
249           bool res = aSharedLibrary.DlOpen( OSD_RTLD_LAZY );
250           if ( !res ) {
251             MESSAGE( "Can't open library : " << aSharedLibrary.DlError() );
252             continue; // continue search further
253           }
254           OSD_Function osdF = aSharedLibrary.DlSymb( "GetLibGUI" );
255           if ( osdF != NULL ) {
256             LibraryGUI func = (GEOMGUI* (*) (GeometryGUI*))osdF;
257             GEOMGUI* libGUI = (*func)( this );
258             if ( libGUI ) {
259               myGUIMap[ libraryName ] = libGUI;
260               break; // found and loaded!
261             }
262           }
263         }
264       }
265     }
266   }
267   return myGUIMap.contains( libraryName ) ? myGUIMap[ libraryName ] : 0;
268 }
269
270 //=======================================================================
271 // function : GeometryGUI::ActiveWorkingPlane()
272 // purpose  : Activate Working Plane View
273 //=======================================================================
274 void GeometryGUI::ActiveWorkingPlane()
275 {
276   gp_Dir DZ = myWorkingPlane.Direction();
277   gp_Dir DY = myWorkingPlane.YDirection();
278
279   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
280   bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
281   bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
282
283   if( ViewOCC ) {
284     OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
285     if ( vw ) {
286       Handle(V3d_View) view3d =  vw->getViewPort()->getView();
287
288       view3d->SetProj(DZ.X(), DZ.Y(), DZ.Z());
289       view3d->SetUp(DY.X(), DY.Y(), DY.Z());
290       vw->onViewFitAll(); 
291     }
292   }
293   else if( ViewVTK ) {
294     SVTK_ViewWindow* vw = dynamic_cast<SVTK_ViewWindow*>( window );
295     if ( vw ) {
296       vtkCamera* camera = vw->getRenderer()->GetActiveCamera();
297
298       camera->SetPosition(DZ.X(), DZ.Y(), DZ.Z());
299       camera->SetViewUp(DY.X(), DY.Y(), DY.Z());
300       camera->SetFocalPoint(0,0,0);
301
302       vw->onFitAll();
303     }
304   }
305 }
306
307 //=======================================================================
308 // function : GeometryGUI::SetActiveDialogBox()
309 // purpose  : Set active dialog box
310 //=======================================================================
311 void GeometryGUI::SetActiveDialogBox( QDialog* aDlg )
312 {
313   myActiveDialogBox = (QDialog*)aDlg;
314 }
315
316 //=======================================================================
317 // function : GeometryGUI::EmitSignalDeactivateDialog()
318 // purpose  : Emit a signal to deactivate the active dialog Box
319 //=======================================================================
320 void GeometryGUI::EmitSignalDeactivateDialog()
321 {
322   emit SignalDeactivateActiveDialog();
323 }
324
325 //=======================================================================
326 // function : GeometryGUI::EmitSignalCloseAllDialogs()
327 // purpose  : Emit a signal to close all non modal dialogs box
328 //=======================================================================
329 void GeometryGUI::EmitSignalCloseAllDialogs()
330 {
331   emit SignalCloseAllDialogs();
332 }
333
334 //=======================================================================
335 // function : GeometryGUI::EmitSignalDefaultStepValueChanged()
336 // purpose  : Emit a signal to inform that default real spin box step has
337 //            been changed
338 //=======================================================================
339 void GeometryGUI::EmitSignalDefaultStepValueChanged(double newVal)
340 {
341   emit SignalDefaultStepValueChanged(newVal);
342 }
343
344 //=======================================================================
345 // function : GeometryGUI::OnGUIEvent()
346 // purpose  : common slot for all menu/toolbar actions
347 //=======================================================================
348 void GeometryGUI::OnGUIEvent()
349 {
350   const QObject* obj = sender();
351   if ( !obj || !obj->inherits( "QAction" ) )
352     return;
353   int id = actionId((QAction*)obj);
354   if ( id != -1 )
355     OnGUIEvent( id );
356 }
357
358 //=======================================================================
359 // function : GeometryGUI::OnGUIEvent()
360 // purpose  : manage all events on GUI [static]
361 //=======================================================================
362 void GeometryGUI::OnGUIEvent( int id )
363 {
364   SUIT_Application* anApp = application();
365   if (!anApp) return;
366   SUIT_Desktop* desk = anApp->desktop();
367
368   // check type of the active viewframe
369   SUIT_ViewWindow* window = desk->activeWindow();
370   bool ViewOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
371   bool ViewVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
372   // if current viewframe is not of OCC and not of VTK type - return immediately
373   // fix for IPAL8958 - allow some commands to execute even when NO viewer is active (rename for example)
374   QList<int> NotViewerDependentCommands;
375   NotViewerDependentCommands << GEOMOp::OpDelete
376                              << GEOMOp::OpShow
377                              << GEOMOp::OpShowOnly
378                              << GEOMOp::OpShowChildren
379                              << GEOMOp::OpHideChildren
380                              << GEOMOp::OpUnpublishObject
381                              << GEOMOp::OpPublishObject
382                              << GEOMOp::OpPointMarker;
383   if ( !ViewOCC && !ViewVTK && !NotViewerDependentCommands.contains( id ) )
384       return;
385
386   // fix for IPAL9103, point 2
387   if ( CORBA::is_nil( GetGeomGen() ) ) {
388     SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_GET_ENGINE" ), tr( "GEOM_BUT_OK" ) );
389     return;
390   }
391
392   QString libName;
393   // find corresponding GUI library
394   switch ( id ) {
395   case GEOMOp::OpOriginAndVectors:   // MENU BASIC - ORIGIN AND BASE VECTORS
396     createOriginAndBaseVectors(); // internal operation
397     return;
398   case GEOMOp::OpImport:             // MENU FILE - IMPORT
399   case GEOMOp::OpExport:             // MENU FILE - EXPORT
400   case GEOMOp::OpSelectVertex:       // POPUP MENU - SELECT ONLY - VERTEX
401   case GEOMOp::OpSelectEdge:         // POPUP MENU - SELECT ONLY - EDGE
402   case GEOMOp::OpSelectWire:         // POPUP MENU - SELECT ONLY - WIRE
403   case GEOMOp::OpSelectFace:         // POPUP MENU - SELECT ONLY - FACE
404   case GEOMOp::OpSelectShell:        // POPUP MENU - SELECT ONLY - SHELL
405   case GEOMOp::OpSelectSolid:        // POPUP MENU - SELECT ONLY - SOLID
406   case GEOMOp::OpSelectCompound:     // POPUP MENU - SELECT ONLY - COMPOUND
407   case GEOMOp::OpSelectAll:          // POPUP MENU - SELECT ONLY - SELECT ALL
408   case GEOMOp::OpDelete:             // MENU EDIT - DELETE
409   case GEOMOp::OpCheckGeom:          // MENU TOOLS - CHECK GEOMETRY
410   case GEOMOp::OpDeflection:         // POPUP MENU - DEFLECTION COEFFICIENT
411   case GEOMOp::OpColor:              // POPUP MENU - COLOR
412   case GEOMOp::OpSetTexture:         // POPUP MENU - SETTEXTURE
413   case GEOMOp::OpTransparency:       // POPUP MENU - TRANSPARENCY
414   case GEOMOp::OpIncrTransparency:   // SHORTCUT   - INCREASE TRANSPARENCY
415   case GEOMOp::OpDecrTransparency:   // SHORTCUT   - DECREASE TRANSPARENCY
416   case GEOMOp::OpIsos:               // POPUP MENU - ISOS
417   case GEOMOp::OpIncrNbIsos:         // SHORTCUT   - INCREASE NB ISOS
418   case GEOMOp::OpDecrNbIsos:         // SHORTCUT   - DECREASE NB ISOS
419   case GEOMOp::OpAutoColor:          // POPUP MENU - AUTO COLOR
420   case GEOMOp::OpNoAutoColor:        // POPUP MENU - DISABLE AUTO COLOR
421   case GEOMOp::OpShowChildren:       // POPUP MENU - SHOW CHILDREN
422   case GEOMOp::OpHideChildren:       // POPUP MENU - HIDE CHILDREN
423   case GEOMOp::OpUnpublishObject:    // POPUP MENU - UNPUBLISH
424   case GEOMOp::OpPublishObject:      // ROOT GEOM OBJECT - POPUP MENU - PUBLISH
425   case GEOMOp::OpPointMarker:        // POPUP MENU - POINT MARKER
426   case GEOMOp::OpMaterialProperties: // POPUP MENU - MATERIAL PROPERTIES
427   case GEOMOp::OpEdgeWidth:          // POPUP MENU - LINE WIDTH - EDGE WIDTH
428   case GEOMOp::OpIsosWidth:          // POPUP MENU - LINE WIDTH - ISOS WIDTH
429     libName = "GEOMToolsGUI";
430     break;
431   case GEOMOp::OpDisplayMode:        // MENU VIEW - WIREFRAME/SHADING
432   case GEOMOp::OpShowAll:            // MENU VIEW - SHOW ALL
433   case GEOMOp::OpShowOnly:           // MENU VIEW - DISPLAY ONLY
434   case GEOMOp::OpHideAll:            // MENU VIEW - ERASE ALL
435   case GEOMOp::OpHide:               // MENU VIEW - ERASE
436   case GEOMOp::OpShow:               // MENU VIEW - DISPLAY
437   case GEOMOp::OpSwitchVectors:      // MENU VIEW - VECTOR MODE
438   case GEOMOp::OpWireframe:          // POPUP MENU - WIREFRAME
439   case GEOMOp::OpShading:            // POPUP MENU - SHADING
440   case GEOMOp::OpShadingWithEdges:   // POPUP MENU - SHADING WITH EDGES
441   case GEOMOp::OpTexture:            // POPUP MENU - TEXTURE
442   case GEOMOp::OpVectors:            // POPUP MENU - VECTORS
443     libName = "DisplayGUI";
444     break;
445   case GEOMOp::OpPoint:              // MENU BASIC - POINT
446   case GEOMOp::OpLine:               // MENU BASIC - LINE
447   case GEOMOp::OpCircle:             // MENU BASIC - CIRCLE
448   case GEOMOp::OpEllipse:            // MENU BASIC - ELLIPSE
449   case GEOMOp::OpArc:                // MENU BASIC - ARC
450   case GEOMOp::OpVector:             // MENU BASIC - VECTOR
451   case GEOMOp::OpPlane:              // MENU BASIC - PLANE
452   case GEOMOp::OpCurve:              // MENU BASIC - CURVE
453   case GEOMOp::OpLCS:                // MENU BASIC - LOCAL COORDINATE SYSTEM
454     libName = "BasicGUI";
455     break;
456   case GEOMOp::OpBox:                // MENU PRIMITIVE - BOX
457   case GEOMOp::OpCylinder:           // MENU PRIMITIVE - CYLINDER
458   case GEOMOp::OpSphere:             // MENU PRIMITIVE - SPHERE
459   case GEOMOp::OpTorus:              // MENU PRIMITIVE - TORUS
460   case GEOMOp::OpCone:               // MENU PRIMITIVE - CONE
461   case GEOMOp::OpRectangle:          // MENU PRIMITIVE - FACE
462   case GEOMOp::OpDisk:               // MENU PRIMITIVE - DISK
463     libName = "PrimitiveGUI";
464     break;
465   case GEOMOp::OpPrism:              // MENU GENERATION - PRISM
466   case GEOMOp::OpRevolution:         // MENU GENERATION - REVOLUTION
467   case GEOMOp::OpFilling:            // MENU GENERATION - FILLING
468   case GEOMOp::OpPipe:               // MENU GENERATION - PIPE
469     libName = "GenerationGUI";
470     break;
471   case GEOMOp::Op2dSketcher:         // MENU ENTITY - SKETCHER
472   case GEOMOp::Op3dSketcher:         // MENU ENTITY - 3D SKETCHER
473   case GEOMOp::OpExplode:            // MENU ENTITY - EXPLODE
474 #ifdef WITH_OPENCV
475   case GEOMOp::OpFeatureDetect:      // MENU ENTITY - FEATURE DETECTION
476 #endif
477   case GEOMOp::OpPictureImport:      // MENU ENTITY - IMPORT PICTURE IN VIEWER
478     libName = "EntityGUI";
479     break;
480   case GEOMOp::OpEdge:               // MENU BUILD - EDGE
481   case GEOMOp::OpWire:               // MENU BUILD - WIRE
482   case GEOMOp::OpFace:               // MENU BUILD - FACE
483   case GEOMOp::OpShell:              // MENU BUILD - SHELL
484   case GEOMOp::OpSolid:              // MENU BUILD - SOLID
485   case GEOMOp::OpCompound:           // MENU BUILD - COMPUND
486     libName = "BuildGUI";
487     break;
488   case GEOMOp::OpFuse:               // MENU BOOLEAN - FUSE
489   case GEOMOp::OpCommon:             // MENU BOOLEAN - COMMON
490   case GEOMOp::OpCut:                // MENU BOOLEAN - CUT
491   case GEOMOp::OpSection:            // MENU BOOLEAN - SECTION
492     libName = "BooleanGUI";
493     break;
494   case GEOMOp::OpTranslate:          // MENU TRANSFORMATION - TRANSLATION
495   case GEOMOp::OpRotate:             // MENU TRANSFORMATION - ROTATION
496   case GEOMOp::OpChangeLoc:          // MENU TRANSFORMATION - LOCATION
497   case GEOMOp::OpMirror:             // MENU TRANSFORMATION - MIRROR
498   case GEOMOp::OpScale:              // MENU TRANSFORMATION - SCALE
499   case GEOMOp::OpOffset:             // MENU TRANSFORMATION - OFFSET
500   case GEOMOp::OpProjection:         // MENU TRANSFORMATION - PROJECTION
501   case GEOMOp::OpMultiTranslate:     // MENU TRANSFORMATION - MULTI-TRANSLATION
502   case GEOMOp::OpMultiRotate:        // MENU TRANSFORMATION - MULTI-ROTATION
503   case GEOMOp::OpReimport:           // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
504     libName = "TransformationGUI";
505     break;
506   case GEOMOp::OpPartition:          // MENU OPERATION - PARTITION
507   case GEOMOp::OpArchimede:          // MENU OPERATION - ARCHIMEDE
508   case GEOMOp::OpFillet3d:           // MENU OPERATION - FILLET
509   case GEOMOp::OpChamfer:            // MENU OPERATION - CHAMFER
510   case GEOMOp::OpClipping:           // MENU OPERATION - CLIPPING RANGE
511   case GEOMOp::OpShapesOnShape:      // MENU OPERATION - GET SHAPES ON SHAPE
512   case GEOMOp::OpFillet2d:           // MENU OPERATION - FILLET 2D
513   case GEOMOp::OpFillet1d:           // MENU OPERATION - FILLET 1D
514   case GEOMOp::OpSharedShapes:       // MENU OPERATION - GET SHARED SHAPES
515     libName = "OperationGUI";
516     break;
517   case GEOMOp::OpSewing:             // MENU REPAIR - SEWING
518   case GEOMOp::OpSuppressFaces:      // MENU REPAIR - SUPPRESS FACES
519   case GEOMOp::OpSuppressHoles:      // MENU REPAIR - SUPPRESS HOLE
520   case GEOMOp::OpShapeProcess:       // MENU REPAIR - SHAPE PROCESSING
521   case GEOMOp::OpCloseContour:       // MENU REPAIR - CLOSE CONTOUR
522   case GEOMOp::OpRemoveIntWires:     // MENU REPAIR - REMOVE INTERNAL WIRES
523   case GEOMOp::OpAddPointOnEdge:     // MENU REPAIR - ADD POINT ON EDGE
524   case GEOMOp::OpFreeBoundaries:     // MENU MEASURE - FREE BOUNDARIES
525   case GEOMOp::OpFreeFaces:          // MENU MEASURE - FREE FACES
526   case GEOMOp::OpOrientation:        // MENU REPAIR - CHANGE ORIENTATION
527   case GEOMOp::OpGlueFaces:          // MENU REPAIR - GLUE FACES
528   case GEOMOp::OpGlueEdges:          // MENU REPAIR - GLUE EDGES
529   case GEOMOp::OpLimitTolerance:     // MENU REPAIR - LIMIT TOLERANCE
530   case GEOMOp::OpRemoveExtraEdges:   // MENU REPAIR - REMOVE EXTRA EDGES
531     libName = "RepairGUI";
532     break;
533   case GEOMOp::OpProperties:         // MENU MEASURE - PROPERTIES
534   case GEOMOp::OpCenterMass:         // MENU MEASURE - CDG
535   case GEOMOp::OpInertia:            // MENU MEASURE - INERTIA
536   case GEOMOp::OpNormale:            // MENU MEASURE - NORMALE
537   case GEOMOp::OpBoundingBox:        // MENU MEASURE - BOUNDING BOX
538   case GEOMOp::OpMinDistance:        // MENU MEASURE - MIN DISTANCE
539   case GEOMOp::OpAngle:              // MENU MEASURE - ANGLE
540   case GEOMOp::OpTolerance:          // MENU MEASURE - TOLERANCE
541   case GEOMOp::OpWhatIs:             // MENU MEASURE - WHATIS
542   case GEOMOp::OpCheckShape:         // MENU MEASURE - CHECK
543   case GEOMOp::OpCheckCompound:      // MENU MEASURE - CHECK COMPOUND OF BLOCKS
544   case GEOMOp::OpPointCoordinates:   // MENU MEASURE - POINT COORDINATES
545   case GEOMOp::OpCheckSelfInters:    // MENU MEASURE - CHECK SELF INTERSECTIONS
546     libName = "MeasureGUI";
547     break;
548   case GEOMOp::OpGroupCreate:        // MENU GROUP - CREATE
549   case GEOMOp::OpGroupCreatePopup:   // POPUP MENU - CREATE GROUP
550   case GEOMOp::OpGroupEdit:          // MENU GROUP - EDIT
551     libName = "GroupGUI";
552     break;
553   case GEOMOp::OpHexaSolid:          // MENU BLOCKS - HEXAHEDRAL SOLID
554   case GEOMOp::OpMultiTransform:     // MENU BLOCKS - MULTI-TRANSFORMATION
555   case GEOMOp::OpQuadFace:           // MENU BLOCKS - QUADRANGLE FACE
556   case GEOMOp::OpPropagate:          // MENU BLOCKS - PROPAGATE
557   case GEOMOp::OpExplodeBlock:       // MENU BLOCKS - EXPLODE ON BLOCKS
558     libName = "BlocksGUI";
559     break;
560   case GEOMOp::OpAdvancedNoOp:       // NO OPERATION (advanced operations base)
561   case GEOMOp::OpPipeTShape:         // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
562 //   case GEOMOp::OpPipeTShapeGroups:     // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
563     //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
564     libName = "AdvancedGUI";
565     break;
566   default:
567     break;
568   }
569
570   GEOMGUI* library = 0;
571   if ( !libName.isEmpty() ) {
572 #ifndef WNT
573     libName = QString( "lib" ) + libName + ".so";
574 #else
575     libName = libName + ".dll";
576 #endif
577     library = getLibrary( libName );
578   }
579
580   // call method of corresponding GUI library
581   if ( library ) {
582     library->OnGUIEvent( id, desk );
583     
584     // Update a list of materials for "Preferences" dialog
585     if ( id == GEOMOp::OpMaterialProperties ) {
586       LightApp_Preferences* pref = preferences();
587       if ( pref ) {
588         Material_ResourceMgr aMatResMgr;
589         QStringList aPerfMatNames = aMatResMgr.getPreferenceMaterialsNames();
590         setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_FRONT_MATERIAL" ), true )->id(),
591                                "strings",
592                                aPerfMatNames );
593         setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_BACK_MATERIAL" ), true )->id(),
594                                "strings",
595                                aPerfMatNames );
596       }
597     }
598   }
599   else
600     SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
601 }
602
603 //=================================================================================
604 // function : GeometryGUI::OnKeyPress()
605 // purpose  : Called when any key is pressed by user [static]
606 //=================================================================================
607 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
608 {
609   if ( !application() )
610     return;
611   foreach ( GEOMGUI* lib, myGUIMap )
612     lib->OnKeyPress( e, application()->desktop(), w );
613 }
614
615 //=================================================================================
616 // function : GeometryGUI::OnMouseMove()
617 // purpose  : Manages mouse move events [static]
618 //=================================================================================
619 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
620 {
621   if ( !application() )
622     return;
623   foreach ( GEOMGUI* lib, myGUIMap )
624     lib->OnMouseMove( e, application()->desktop(), w );
625 }
626
627 //=================================================================================
628 // function : GeometryGUI::OnMouseRelease()
629 // purpose  : Manages mouse release events [static]
630 //=================================================================================
631 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
632 {
633   if ( !application() )
634     return;
635   foreach ( GEOMGUI* lib, myGUIMap )
636     lib->OnMouseRelease( e, application()->desktop(), w );
637 }
638
639 //=================================================================================
640 // function : GeometryGUI::OnMousePress()
641 // purpose  : Manage mouse press events [static]
642 //=================================================================================
643 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
644 {
645   if ( !application() )
646     return;
647   foreach ( GEOMGUI* lib, myGUIMap )
648     lib->OnMousePress( e, application()->desktop(), w );
649 }
650
651 //=======================================================================
652 // function : createGeomAction
653 // purpose  :
654 //=======================================================================
655 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
656                                     const int accel, const bool toggle, const QString& shortcutAction )
657 {
658   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
659   QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
660                                     : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
661   createAction( id,
662                 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
663                 icon,
664                 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
665                 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
666                 accel,
667                 application()->desktop(),
668                 toggle,
669                 this, SLOT( OnGUIEvent() ),
670                 shortcutAction );
671 }
672
673 //=======================================================================
674 // function : createOriginAndBaseVectors
675 // purpose  :
676 //=======================================================================
677 void GeometryGUI::createOriginAndBaseVectors()
678 {
679   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
680   if( appStudy ) {
681     _PTR(Study) studyDS = appStudy->studyDS();
682     if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
683       GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
684       if( !aBasicOperations->_is_nil() ) {
685         SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
686         double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
687         GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
688         GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
689         GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
690         GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
691
692         SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
693         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
694         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
695         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
696         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
697
698         getApp()->updateObjectBrowser( false );
699       }
700     }
701   }
702 }
703
704 //=======================================================================
705 // function : GeometryGUI::initialize()
706 // purpose  : Called when GEOM module is created
707 //=======================================================================
708 void GeometryGUI::initialize( CAM_Application* app )
709 {
710   SalomeApp_Module::initialize( app );
711
712   // ----- create actions --------------
713
714   createGeomAction( GEOMOp::OpImport,     "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
715   createGeomAction( GEOMOp::OpExport,     "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
716
717   createGeomAction( GEOMOp::OpDelete,     "DELETE", "", Qt::Key_Delete );
718
719   createGeomAction( GEOMOp::OpPoint,      "POINT" );
720   createGeomAction( GEOMOp::OpLine,       "LINE" );
721   createGeomAction( GEOMOp::OpCircle,     "CIRCLE" );
722   createGeomAction( GEOMOp::OpEllipse,    "ELLIPSE" );
723   createGeomAction( GEOMOp::OpArc,        "ARC" );
724   createGeomAction( GEOMOp::OpCurve,      "CURVE" );
725   createGeomAction( GEOMOp::OpVector,     "VECTOR" );
726   createGeomAction( GEOMOp::OpPlane,      "PLANE" );
727   createGeomAction( GEOMOp::OpLCS,        "LOCAL_CS" );
728   createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
729
730   createGeomAction( GEOMOp::OpBox,        "BOX" );
731   createGeomAction( GEOMOp::OpCylinder,   "CYLINDER" );
732   createGeomAction( GEOMOp::OpSphere,     "SPHERE" );
733   createGeomAction( GEOMOp::OpTorus,      "TORUS" );
734   createGeomAction( GEOMOp::OpCone,       "CONE" );
735   createGeomAction( GEOMOp::OpRectangle,  "RECTANGLE" );
736   createGeomAction( GEOMOp::OpDisk,       "DISK" );
737
738   createGeomAction( GEOMOp::OpPrism,       "EXTRUSION" );
739   createGeomAction( GEOMOp::OpRevolution,  "REVOLUTION" );
740   createGeomAction( GEOMOp::OpFilling,     "FILLING" );
741   createGeomAction( GEOMOp::OpPipe,        "PIPE" );
742
743   createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
744   createGeomAction( GEOMOp::OpGroupEdit,   "GROUP_EDIT" );
745
746   createGeomAction( GEOMOp::OpReimport,    "RELOAD_IMPORTED" );
747
748   createGeomAction( GEOMOp::OpQuadFace,    "Q_FACE" );
749   createGeomAction( GEOMOp::OpHexaSolid,   "HEX_SOLID" );
750
751   createGeomAction( GEOMOp::Op2dSketcher,  "SKETCH" );
752   createGeomAction( GEOMOp::Op3dSketcher,  "3DSKETCH" );
753   createGeomAction( GEOMOp::OpExplode,     "EXPLODE" );
754 #ifdef WITH_OPENCV
755   createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
756 #endif
757   createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
758
759   createGeomAction( GEOMOp::OpEdge,        "EDGE" );
760   createGeomAction( GEOMOp::OpWire,        "WIRE" );
761   createGeomAction( GEOMOp::OpFace,        "FACE" );
762   createGeomAction( GEOMOp::OpShell,       "SHELL" );
763   createGeomAction( GEOMOp::OpSolid,       "SOLID" );
764   createGeomAction( GEOMOp::OpCompound,    "COMPOUND" );
765
766   createGeomAction( GEOMOp::OpFuse,        "FUSE" );
767   createGeomAction( GEOMOp::OpCommon,      "COMMON" );
768   createGeomAction( GEOMOp::OpCut,         "CUT" );
769   createGeomAction( GEOMOp::OpSection,     "SECTION" );
770
771   createGeomAction( GEOMOp::OpTranslate,      "TRANSLATION" );
772   createGeomAction( GEOMOp::OpRotate,         "ROTATION" );
773   createGeomAction( GEOMOp::OpChangeLoc,      "MODIFY_LOCATION" );
774   createGeomAction( GEOMOp::OpMirror,         "MIRROR" );
775   createGeomAction( GEOMOp::OpScale,          "SCALE" );
776   createGeomAction( GEOMOp::OpOffset,         "OFFSET" );
777   createGeomAction( GEOMOp::OpProjection,     "PROJECTION" );
778   createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
779   createGeomAction( GEOMOp::OpMultiRotate,    "MUL_ROTATION" );
780
781   createGeomAction( GEOMOp::OpPartition,      "PARTITION" );
782   createGeomAction( GEOMOp::OpArchimede,      "ARCHIMEDE" );
783   createGeomAction( GEOMOp::OpFillet3d,       "FILLET" );
784   createGeomAction( GEOMOp::OpChamfer,        "CHAMFER" );
785   //createGeomAction( GEOMOp::OpClipping,        "CLIPPING" );
786   createGeomAction( GEOMOp::OpShapesOnShape,  "GET_SHAPES_ON_SHAPE" );
787   createGeomAction( GEOMOp::OpSharedShapes,   "GET_SHARED_SHAPES" );
788   createGeomAction( GEOMOp::OpFillet1d,       "FILLET_1D" );
789   createGeomAction( GEOMOp::OpFillet2d,       "FILLET_2D" );
790
791   createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
792   createGeomAction( GEOMOp::OpExplodeBlock,   "EXPLODE_BLOCKS" );
793   createGeomAction( GEOMOp::OpPropagate,      "PROPAGATE" );
794
795   createGeomAction( GEOMOp::OpSewing,           "SEWING" );
796   createGeomAction( GEOMOp::OpGlueFaces,        "GLUE_FACES" );
797   createGeomAction( GEOMOp::OpGlueEdges,        "GLUE_EDGES" );
798   createGeomAction( GEOMOp::OpLimitTolerance,   "LIMIT_TOLERANCE" );
799   createGeomAction( GEOMOp::OpSuppressFaces,    "SUPPRESS_FACES" );
800   createGeomAction( GEOMOp::OpSuppressHoles,    "SUPPERSS_HOLES" );
801   createGeomAction( GEOMOp::OpShapeProcess,     "SHAPE_PROCESS" );
802   createGeomAction( GEOMOp::OpCloseContour,     "CLOSE_CONTOUR" );
803   createGeomAction( GEOMOp::OpRemoveIntWires,   "SUPPRESS_INT_WIRES" );
804   createGeomAction( GEOMOp::OpAddPointOnEdge,   "POINT_ON_EDGE" );
805   createGeomAction( GEOMOp::OpFreeBoundaries,   "CHECK_FREE_BNDS" );
806   createGeomAction( GEOMOp::OpFreeFaces,        "CHECK_FREE_FACES" );
807   createGeomAction( GEOMOp::OpOrientation,      "CHANGE_ORIENTATION" );
808   createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
809
810   createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
811   createGeomAction( GEOMOp::OpProperties,       "BASIC_PROPS" );
812   createGeomAction( GEOMOp::OpCenterMass,       "MASS_CENTER" );
813   createGeomAction( GEOMOp::OpInertia,          "INERTIA" );
814   createGeomAction( GEOMOp::OpNormale,          "NORMALE" );
815   createGeomAction( GEOMOp::OpBoundingBox,      "BND_BOX" );
816   createGeomAction( GEOMOp::OpMinDistance,      "MIN_DIST" );
817   createGeomAction( GEOMOp::OpAngle,            "MEASURE_ANGLE" );
818
819   createGeomAction( GEOMOp::OpTolerance,        "TOLERANCE" );
820   createGeomAction( GEOMOp::OpWhatIs,           "WHAT_IS" );
821   createGeomAction( GEOMOp::OpCheckShape,       "CHECK" );
822   createGeomAction( GEOMOp::OpCheckCompound,    "CHECK_COMPOUND" );
823   createGeomAction( GEOMOp::OpCheckSelfInters,  "CHECK_SELF_INTERSECTIONS" );
824
825 #ifdef _DEBUG_ // PAL16821
826   createGeomAction( GEOMOp::OpCheckGeom,        "CHECK_GEOMETRY" );
827 #endif
828
829   createGeomAction( GEOMOp::OpDisplayMode,      "SHADING" );
830   createGeomAction( GEOMOp::OpShowAll,          "DISPLAY_ALL" );
831   createGeomAction( GEOMOp::OpHideAll,          "ERASE_ALL" );
832   createGeomAction( GEOMOp::OpShow,             "DISPLAY" );
833   createGeomAction( GEOMOp::OpSwitchVectors,    "VECTOR_MODE");
834   createGeomAction( GEOMOp::OpSelectVertex,     "VERTEX_SEL_ONLY" ,"", 0, true );
835   createGeomAction( GEOMOp::OpSelectEdge,       "EDGE_SEL_ONLY", "", 0, true );
836   createGeomAction( GEOMOp::OpSelectWire,       "WIRE_SEL_ONLY", "",  0, true );
837   createGeomAction( GEOMOp::OpSelectFace,       "FACE_SEL_ONLY", "", 0, true );
838   createGeomAction( GEOMOp::OpSelectShell,      "SHELL_SEL_ONLY", "",  0, true );
839   createGeomAction( GEOMOp::OpSelectSolid,      "SOLID_SEL_ONLY", "", 0, true );
840   createGeomAction( GEOMOp::OpSelectCompound,   "COMPOUND_SEL_ONLY", "",  0, true );
841   createGeomAction( GEOMOp::OpSelectAll,        "ALL_SEL_ONLY", "",  0, true );
842   createGeomAction( GEOMOp::OpShowOnly,         "DISPLAY_ONLY" );
843   createGeomAction( GEOMOp::OpHide,             "ERASE" );
844
845   createGeomAction( GEOMOp::OpWireframe,        "POP_WIREFRAME", "", 0, true );
846   createGeomAction( GEOMOp::OpShading,          "POP_SHADING", "", 0, true );
847   createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
848   createGeomAction( GEOMOp::OpTexture,          "POP_TEXTURE", "", 0, true );
849   createGeomAction( GEOMOp::OpEdgeWidth,        "EDGE_WIDTH");
850   createGeomAction( GEOMOp::OpIsosWidth,        "ISOS_WIDTH");
851   createGeomAction( GEOMOp::OpVectors,          "POP_VECTORS", "", 0, true );
852   createGeomAction( GEOMOp::OpDeflection,       "POP_DEFLECTION" );
853   createGeomAction( GEOMOp::OpColor,            "POP_COLOR" );
854   createGeomAction( GEOMOp::OpSetTexture,       "POP_SETTEXTURE" );
855   createGeomAction( GEOMOp::OpTransparency,     "POP_TRANSPARENCY" );
856   createGeomAction( GEOMOp::OpIsos,             "POP_ISOS" );
857   createGeomAction( GEOMOp::OpAutoColor,        "POP_AUTO_COLOR" );
858   createGeomAction( GEOMOp::OpNoAutoColor,      "POP_DISABLE_AUTO_COLOR" );
859   createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
860   createGeomAction( GEOMOp::OpShowChildren,     "POP_SHOW_CHILDREN" );
861   createGeomAction( GEOMOp::OpHideChildren,     "POP_HIDE_CHILDREN" );
862   createGeomAction( GEOMOp::OpUnpublishObject,  "POP_UNPUBLISH_OBJ" );
863   createGeomAction( GEOMOp::OpPublishObject,    "POP_PUBLISH_OBJ" );
864   createGeomAction( GEOMOp::OpPointMarker,      "POP_POINT_MARKER" );
865   createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
866
867   createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
868
869   // Create actions for increase/decrease transparency shortcuts
870   createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
871                     "Geometry:Increase transparency");
872   createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
873                     "Geometry:Decrease transparency");
874
875   // Create actions for increase/decrease number of isolines
876   createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
877                     "Geometry:Increase number of isolines");
878   createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
879                     "Geometry:Decrease number of isolines");
880
881 //   createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
882   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
883
884   // ---- create menus --------------------------
885
886   int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
887   createMenu( separator(),      fileId, 10 );
888   createMenu( GEOMOp::OpImport, fileId, 10 );
889   createMenu( GEOMOp::OpExport, fileId, 10 );
890   createMenu( separator(),      fileId, -1 );
891
892   int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
893   createMenu( GEOMOp::OpDelete, editId, -1 );
894
895   int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
896
897   int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
898   createMenu( GEOMOp::OpPoint,   basicId, -1 );
899   createMenu( GEOMOp::OpLine,    basicId, -1 );
900   createMenu( GEOMOp::OpCircle,  basicId, -1 );
901   createMenu( GEOMOp::OpEllipse, basicId, -1 );
902   createMenu( GEOMOp::OpArc,     basicId, -1 );
903   createMenu( GEOMOp::OpCurve,   basicId, -1 );
904   createMenu( separator(),       basicId, -1 );
905   createMenu( GEOMOp::OpVector,  basicId, -1 );
906   createMenu( GEOMOp::OpPlane,   basicId, -1 );
907   createMenu( GEOMOp::OpLCS,     basicId, -1 );
908   createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
909
910   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
911   createMenu( GEOMOp::OpBox,       primId, -1 );
912   createMenu( GEOMOp::OpCylinder,  primId, -1 );
913   createMenu( GEOMOp::OpSphere,    primId, -1 );
914   createMenu( GEOMOp::OpTorus,     primId, -1 );
915   createMenu( GEOMOp::OpCone,      primId, -1 );
916   createMenu( GEOMOp::OpRectangle, primId, -1 );
917   createMenu( GEOMOp::OpDisk,      primId, -1 );
918
919   int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
920   createMenu( GEOMOp::OpPrism,      genId, -1 );
921   createMenu( GEOMOp::OpRevolution, genId, -1 );
922   createMenu( GEOMOp::OpFilling,    genId, -1 );
923   createMenu( GEOMOp::OpPipe,       genId, -1 );
924
925   int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
926   createMenu( GEOMOp::OpPipeTShape, advId, -1 );
927 //   createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
928   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
929
930   createMenu( separator(), newEntId, -1 );
931
932   int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
933   createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
934   createMenu( GEOMOp::OpGroupEdit,   groupId, -1 );
935
936   createMenu( separator(), newEntId, -1 );
937
938   int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
939   createMenu( GEOMOp::OpQuadFace,  blocksId, -1 );
940   createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
941
942   createMenu( separator(),          newEntId, -1 );
943
944   createMenu( GEOMOp::Op2dSketcher, newEntId, -1 );
945   createMenu( GEOMOp::Op3dSketcher, newEntId, -1 );
946
947   createMenu( separator(),          newEntId, -1 );
948
949   createMenu( GEOMOp::OpExplode,    newEntId, -1 );
950
951   int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
952   createMenu( GEOMOp::OpEdge,     buildId, -1 );
953   createMenu( GEOMOp::OpWire,     buildId, -1 );
954   createMenu( GEOMOp::OpFace,     buildId, -1 );
955   createMenu( GEOMOp::OpShell,    buildId, -1 );
956   createMenu( GEOMOp::OpSolid,    buildId, -1 );
957   createMenu( GEOMOp::OpCompound, buildId, -1 );
958   
959   createMenu( separator(),          newEntId, -1 );
960   
961   createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
962 #ifdef WITH_OPENCV
963   createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
964 #endif
965
966   int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
967
968   int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
969   createMenu( GEOMOp::OpFuse,    boolId, -1 );
970   createMenu( GEOMOp::OpCommon,  boolId, -1 );
971   createMenu( GEOMOp::OpCut,     boolId, -1 );
972   createMenu( GEOMOp::OpSection, boolId, -1 );
973
974   int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
975   createMenu( GEOMOp::OpTranslate,      transId, -1 );
976   createMenu( GEOMOp::OpRotate,         transId, -1 );
977   createMenu( GEOMOp::OpChangeLoc,      transId, -1 );
978   createMenu( GEOMOp::OpMirror,         transId, -1 );
979   createMenu( GEOMOp::OpScale,          transId, -1 );
980   createMenu( GEOMOp::OpOffset,         transId, -1 );
981   createMenu( GEOMOp::OpProjection,     transId, -1 );
982   createMenu( separator(),              transId, -1 );
983   createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
984   createMenu( GEOMOp::OpMultiRotate,    transId, -1 );
985
986   int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
987   createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
988   createMenu( GEOMOp::OpExplodeBlock,   blockId, -1 );
989   createMenu( GEOMOp::OpPropagate,      blockId, -1 );
990
991   createMenu( separator(), operId, -1 );
992
993   createMenu( GEOMOp::OpPartition,     operId, -1 );
994   createMenu( GEOMOp::OpArchimede,     operId, -1 );
995   createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
996   createMenu( GEOMOp::OpSharedShapes,  operId, -1 );
997
998   createMenu( separator(), operId, -1 );
999
1000   createMenu( GEOMOp::OpFillet1d,      operId, -1 );
1001   createMenu( GEOMOp::OpFillet2d,      operId, -1 );
1002   createMenu( GEOMOp::OpFillet3d,      operId, -1 );
1003   createMenu( GEOMOp::OpChamfer,       operId, -1 );
1004   //createMenu( GEOMOp::OpClipping,      operId, -1 );
1005
1006   int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1007   createMenu( GEOMOp::OpShapeProcess,    repairId, -1 );
1008   createMenu( GEOMOp::OpSuppressFaces,   repairId, -1 );
1009   createMenu( GEOMOp::OpCloseContour,    repairId, -1 );
1010   createMenu( GEOMOp::OpRemoveIntWires,  repairId, -1 );
1011   createMenu( GEOMOp::OpSuppressHoles,   repairId, -1 );
1012   createMenu( GEOMOp::OpSewing,          repairId, -1 );
1013   createMenu( GEOMOp::OpGlueFaces,       repairId, -1 );
1014   createMenu( GEOMOp::OpGlueEdges,       repairId, -1 );
1015   createMenu( GEOMOp::OpLimitTolerance,  repairId, -1 );
1016   createMenu( GEOMOp::OpAddPointOnEdge,  repairId, -1 );
1017   //createMenu( GEOMOp::OpFreeBoundaries,  repairId, -1 );
1018   //createMenu( GEOMOp::OpFreeFaces,       repairId, -1 );
1019   createMenu( GEOMOp::OpOrientation,      repairId, -1 );
1020   createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1021
1022   int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1023   createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1024   createMenu( GEOMOp::OpProperties,       measurId, -1 );
1025   createMenu( separator(),                measurId, -1 );
1026   createMenu( GEOMOp::OpCenterMass,       measurId, -1 );
1027   createMenu( GEOMOp::OpInertia,          measurId, -1 );
1028   createMenu( GEOMOp::OpNormale,          measurId, -1 );
1029   createMenu( separator(),                measurId, -1 );
1030   createMenu( GEOMOp::OpFreeBoundaries,   measurId, -1 );
1031   createMenu( GEOMOp::OpFreeFaces,        measurId, -1 );
1032   createMenu( separator(),                measurId, -1 );
1033
1034   int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1035   createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1036   createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1037   createMenu( GEOMOp::OpAngle,       dimId, -1 );
1038
1039   createMenu( separator(),               measurId, -1 );
1040   createMenu( GEOMOp::OpTolerance,       measurId, -1 );
1041   createMenu( separator(),               measurId, -1 );
1042   createMenu( GEOMOp::OpWhatIs,          measurId, -1 );
1043   createMenu( GEOMOp::OpCheckShape,      measurId, -1 );
1044   createMenu( GEOMOp::OpCheckCompound,   measurId, -1 );
1045   createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1046
1047 #ifdef _DEBUG_ // PAL16821
1048   int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1049   createMenu( separator(),         toolsId, -1 );
1050   createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1051 #endif
1052
1053   int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1054   createMenu( separator(),       viewId, -1 );
1055
1056   int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1057   createMenu( GEOMOp::OpDisplayMode,   dispmodeId, -1 );
1058   createMenu( separator(),             dispmodeId, -1 );
1059   createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1060
1061   createMenu( separator(),       viewId, -1 );
1062   createMenu( GEOMOp::OpShowAll, viewId, -1 );
1063   createMenu( GEOMOp::OpHideAll, viewId, -1 );
1064   createMenu( separator(),       viewId, -1 );
1065   createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1066   createMenu( separator(),       viewId, -1 );
1067
1068 /*
1069   PAL9111:
1070   because of these items are accessible through object browser and viewers
1071   we have removed they from main menu
1072
1073   createMenu( GEOMOp::OpShow, viewId, -1 );
1074   createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1075   createMenu( GEOMOp::OpHide, viewId, -1 );
1076 */
1077
1078   // ---- create toolbars --------------------------
1079
1080   int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1081   createTool( GEOMOp::OpPoint,   basicTbId );
1082   createTool( GEOMOp::OpLine,    basicTbId );
1083   createTool( GEOMOp::OpCircle,  basicTbId );
1084   createTool( GEOMOp::OpEllipse, basicTbId );
1085   createTool( GEOMOp::OpArc,     basicTbId );
1086   createTool( GEOMOp::OpCurve,   basicTbId );
1087   createTool( GEOMOp::OpVector,  basicTbId );
1088   createTool( GEOMOp::OpPlane,   basicTbId );
1089   createTool( GEOMOp::OpLCS,     basicTbId );
1090   createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1091
1092   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1093   createTool( GEOMOp::OpBox,       primTbId );
1094   createTool( GEOMOp::OpCylinder,  primTbId );
1095   createTool( GEOMOp::OpSphere,    primTbId );
1096   createTool( GEOMOp::OpTorus,     primTbId );
1097   createTool( GEOMOp::OpCone,      primTbId );
1098   createTool( GEOMOp::OpRectangle, primTbId );
1099   createTool( GEOMOp::OpDisk,      primTbId );
1100
1101   int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1102   createTool( GEOMOp::OpFuse,    boolTbId );
1103   createTool( GEOMOp::OpCommon,  boolTbId );
1104   createTool( GEOMOp::OpCut,     boolTbId );
1105   createTool( GEOMOp::OpSection, boolTbId );
1106
1107   int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1108   createTool( GEOMOp::OpPrism,      genTbId );
1109   createTool( GEOMOp::OpRevolution, genTbId );
1110   createTool( GEOMOp::OpFilling,    genTbId );
1111   createTool( GEOMOp::OpPipe,       genTbId );
1112
1113   int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1114   createTool( GEOMOp::OpTranslate,      transTbId );
1115   createTool( GEOMOp::OpRotate,         transTbId );
1116   createTool( GEOMOp::OpChangeLoc,      transTbId );
1117   createTool( GEOMOp::OpMirror,         transTbId );
1118   createTool( GEOMOp::OpScale,          transTbId );
1119   createTool( GEOMOp::OpOffset,         transTbId );
1120   createTool( GEOMOp::OpProjection,     transTbId );
1121   createTool( separator(),              transTbId );
1122   createTool( GEOMOp::OpMultiTranslate, transTbId );
1123   createTool( GEOMOp::OpMultiRotate,    transTbId );
1124
1125   int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1126   createTool( GEOMOp::Op2dSketcher,      operTbId );
1127   createTool( GEOMOp::Op3dSketcher,      operTbId );
1128   createTool( separator(),               operTbId );
1129   createTool( GEOMOp::OpExplode,         operTbId );
1130   createTool( separator(),               operTbId );
1131 #ifdef WITH_OPENCV
1132   createTool( GEOMOp::OpFeatureDetect,   operTbId );
1133 #endif
1134   createTool( GEOMOp::OpPictureImport,   operTbId );
1135   createTool( separator(),               operTbId );
1136
1137   createTool( GEOMOp::OpPartition,       operTbId );
1138   createTool( GEOMOp::OpArchimede,       operTbId );
1139   createTool( GEOMOp::OpShapesOnShape,   operTbId );
1140   createTool( GEOMOp::OpSharedShapes,    operTbId );
1141   createTool( separator(),               operTbId );
1142   createTool( GEOMOp::OpFillet1d,        operTbId );
1143   createTool( GEOMOp::OpFillet2d,        operTbId );
1144   createTool( GEOMOp::OpFillet3d,        operTbId );
1145   createTool( GEOMOp::OpChamfer,         operTbId );
1146
1147   int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1148   createTool( GEOMOp::OpEdge,     buildTbId );
1149   createTool( GEOMOp::OpWire,     buildTbId );
1150   createTool( GEOMOp::OpFace,     buildTbId );
1151   createTool( GEOMOp::OpShell,    buildTbId );
1152   createTool( GEOMOp::OpSolid,    buildTbId );
1153   createTool( GEOMOp::OpCompound, buildTbId );
1154
1155   int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1156   createTool( GEOMOp::OpPointCoordinates, measureTbId );
1157   createTool( GEOMOp::OpProperties,       measureTbId );
1158   createTool( GEOMOp::OpCenterMass,       measureTbId );
1159   createTool( GEOMOp::OpInertia,          measureTbId );
1160   createTool( GEOMOp::OpNormale,          measureTbId );
1161   createTool( separator(),                measureTbId );
1162   createTool( GEOMOp::OpBoundingBox,      measureTbId );
1163   createTool( GEOMOp::OpMinDistance,      measureTbId );
1164   createTool( GEOMOp::OpAngle,            measureTbId );
1165   createTool( GEOMOp::OpTolerance  ,      measureTbId );
1166   createTool( separator(),                measureTbId );
1167   createTool( GEOMOp::OpFreeBoundaries,   measureTbId );
1168   createTool( GEOMOp::OpFreeFaces,        measureTbId );
1169   createTool( separator(),                measureTbId );
1170   createTool( GEOMOp::OpWhatIs,           measureTbId );
1171   createTool( GEOMOp::OpCheckShape,       measureTbId );
1172   createTool( GEOMOp::OpCheckCompound,    measureTbId );
1173   createTool( GEOMOp::OpCheckSelfInters,  measureTbId );
1174
1175   int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
1176   createTool( GEOMOp::OpPipeTShape, advancedTbId );
1177   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
1178
1179   // ---- create popup menus --------------------------
1180
1181   QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1182   QString clientOCC = "(client='OCCViewer')";
1183   QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1184   QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1185
1186   QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1187   QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1188   QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1189   QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1190
1191   QString autoColorPrefix =
1192     "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1193
1194   QtxPopupMgr* mgr = popupMgr();
1195
1196   mgr->insert( action(  GEOMOp::OpDelete ), -1, -1 );  // delete
1197   mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1198   mgr->insert( action(  GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1199   mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1200   mgr->insert( action(  GEOMOp::OpShowChildren ), -1, -1 ); // show children
1201   mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1202
1203   mgr->insert( action(  GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1204   mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1205   mgr->insert( action(  GEOMOp::OpGroupEdit ), -1, -1 );  // edit group
1206   mgr->setRule( action( GEOMOp::OpGroupEdit ),  QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1207   mgr->insert( separator(), -1, -1 );     // -----------
1208   dispmodeId = mgr->insert(  tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1209   mgr->insert( action(  GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1210   mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1211   mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1212   mgr->insert( action(  GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1213   mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1214   mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1215   mgr->insert( action(  GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1216   mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1217   mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1218   mgr->insert( action(  GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1219   mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1220   mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1221   mgr->insert( separator(), dispmodeId, -1 );
1222   mgr->insert( action(  GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1223   mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1224   mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1225   mgr->insert( separator(), -1, -1 );     // -----------
1226   mgr->insert( action(  GEOMOp::OpColor ), -1, -1 ); // color
1227   mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1228   mgr->insert( action(  GEOMOp::OpTransparency ), -1, -1 ); // transparency
1229   mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1230   mgr->insert( action(  GEOMOp::OpIsos ), -1, -1 ); // isos
1231   mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1232   mgr->insert( action(  GEOMOp::OpDeflection ), -1, -1 ); // deflection
1233   mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1234   mgr->insert( action(  GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1235   //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1236   mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1237   mgr->insert( action(  GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties  
1238   mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1239   mgr->insert( action(  GEOMOp::OpSetTexture ), -1, -1 ); // texture
1240   mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1241
1242   int lineW = mgr->insert(  tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1243   mgr->insert( action(  GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1244   mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1245
1246   mgr->insert( action(  GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1247   mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1248   
1249   mgr->insert( separator(), -1, -1 );     // -----------
1250   mgr->insert( action(  GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1251   mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1252   mgr->insert( action(  GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1253   mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1254   mgr->insert( separator(), -1, -1 );     // -----------
1255
1256   QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1257           onlyComponent = "((type='Component') and selcount=1)",
1258           rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1259           types = "'Shape' 'Group'";
1260
1261   mgr->insert( action(  GEOMOp::OpShow ), -1, -1 ); // display
1262   mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1263
1264   mgr->insert( action(  GEOMOp::OpHide ), -1, -1 ); // erase
1265   mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1266
1267   mgr->insert( action(  GEOMOp::OpHideAll ), -1, -1 ); // erase All
1268   mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1269
1270   QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1271
1272   int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1);                //select only menu
1273   mgr->insert( action(GEOMOp::OpSelectVertex),   selectonlyId, -1);                                  //Vertex
1274   mgr->setRule(action(GEOMOp::OpSelectVertex),   selectOnly, QtxPopupMgr::VisibleRule);
1275   mgr->setRule(action(GEOMOp::OpSelectVertex),   selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1276   mgr->insert( action(GEOMOp::OpSelectEdge),     selectonlyId, -1);                                  //Edge
1277   mgr->setRule(action(GEOMOp::OpSelectEdge),     selectOnly, QtxPopupMgr::VisibleRule);
1278   mgr->setRule(action(GEOMOp::OpSelectEdge),     selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1279   mgr->insert( action(GEOMOp::OpSelectWire),     selectonlyId, -1);                                  //Wire
1280   mgr->setRule(action(GEOMOp::OpSelectWire),     selectOnly, QtxPopupMgr::VisibleRule);
1281   mgr->setRule(action(GEOMOp::OpSelectWire),     selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1282   mgr->insert( action(GEOMOp::OpSelectFace),     selectonlyId, -1);                                  //Face
1283   mgr->setRule(action(GEOMOp::OpSelectFace),     selectOnly, QtxPopupMgr::VisibleRule);
1284   mgr->setRule(action(GEOMOp::OpSelectFace),     selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1285   mgr->insert( action(GEOMOp::OpSelectShell),    selectonlyId, -1);                                  //Shell
1286   mgr->setRule(action(GEOMOp::OpSelectShell),    selectOnly, QtxPopupMgr::VisibleRule);
1287   mgr->setRule(action(GEOMOp::OpSelectShell),    selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1288   mgr->insert( action(GEOMOp::OpSelectSolid),    selectonlyId, -1);                                  //Solid
1289   mgr->setRule(action(GEOMOp::OpSelectSolid),    selectOnly, QtxPopupMgr::VisibleRule);
1290   mgr->setRule(action(GEOMOp::OpSelectSolid),    selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1291   mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1);                                  //Compound
1292   mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1293   mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1294   mgr->insert( separator(), selectonlyId, -1);
1295   mgr->insert( action(GEOMOp::OpSelectAll),      selectonlyId, -1);                                  //Clear selection filter
1296   mgr->setRule(action(GEOMOp::OpSelectAll),      selectOnly, QtxPopupMgr::VisibleRule);
1297   mgr->setRule(action(GEOMOp::OpSelectAll),      selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1298   mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1299   mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1300   mgr->insert( separator(), -1, -1 );
1301
1302   mgr->insert( separator(), -1, -1 );     // -----------
1303   mgr->insert( action(  GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1304   mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1305
1306
1307   mgr->insert( action(  GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1308   mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1309
1310   mgr->insert( action(  GEOMOp::OpReimport ), -1, -1 );  // delete
1311   mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1312
1313   mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1314 }
1315
1316 //=======================================================================
1317 // function : GeometryGUI::activateModule()
1318 // purpose  : Called when GEOM module is activated
1319 //=======================================================================
1320 bool GeometryGUI::activateModule( SUIT_Study* study )
1321 {
1322   if ( CORBA::is_nil( myComponentGeom ) )
1323     return false;
1324
1325   bool res = SalomeApp_Module::activateModule( study );
1326
1327   if ( !res )
1328     return false;
1329   setMenuShown( true );
1330   setToolShown( true );
1331
1332   // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1333   PyGILState_STATE gstate = PyGILState_Ensure();
1334   PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1335   if(pluginsmanager==NULL)
1336     PyErr_Print();
1337   else
1338     {
1339       PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"geom",tr("MEN_NEW_ENTITY").toStdString().c_str(),tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
1340       if(result==NULL)
1341         PyErr_Print();
1342       Py_XDECREF(result);
1343     }
1344   PyGILState_Release(gstate);
1345   // end of GEOM plugins loading
1346
1347   connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1348           this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1349
1350   // Reset actions accelerator keys
1351   action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1352   action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1353   action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1354
1355   GUIMap::Iterator it;
1356   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1357     it.value()->activate( application()->desktop() );
1358
1359   LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1360
1361   SUIT_ViewManager* vm;
1362   ViewManagerList OCCViewManagers, VTKViewManagers;
1363
1364   application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1365   QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1366   while ( itOCC.hasNext() && (vm = itOCC.next()) )
1367     myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1368
1369   application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1370   QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1371   while ( itVTK.hasNext() && (vm = itVTK.next()) )
1372     myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1373
1374   //NPAL 19674
1375   SALOME_ListIO selected;
1376   sm->selectedObjects( selected );
1377   sm->clearSelected();
1378
1379   // disable OCC selectors
1380   getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1381   QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1382   while ( itOCCSel.hasNext() )
1383     if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1384       sr->setEnabled(true);
1385
1386   // disable VTK selectors
1387   getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1388   QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1389   while ( itVTKSel.hasNext() )
1390     if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1391       sr->setEnabled(true);
1392
1393   sm->setSelectedObjects( selected, true );   //NPAL 19674
1394
1395   QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1396   if ( viewMenu )
1397     connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1398
1399   // 0020836 (Basic vectors and origin)
1400   SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1401   if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1402     SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1403     if( appStudy ) {
1404       _PTR(Study) studyDS = appStudy->studyDS();
1405       if( studyDS ) {
1406         _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1407         if( !aSComponent ) // create objects automatically only if there is no GEOM component
1408           createOriginAndBaseVectors();
1409       }
1410     }
1411   }
1412
1413   return true;
1414 }
1415
1416
1417 //=======================================================================
1418 // function : GeometryGUI::deactivateModule()
1419 // purpose  : Called when GEOM module is deactivated
1420 //=======================================================================
1421 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1422 {
1423   QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1424   if ( viewMenu )
1425     disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1426
1427   setMenuShown( false );
1428   setToolShown( false );
1429
1430   disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1431              this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1432
1433   EmitSignalCloseAllDialogs();
1434
1435   GUIMap::Iterator it;
1436   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1437     it.value()->deactivate();
1438
1439   // Unset actions accelerator keys
1440   action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1441   action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1442   action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1443
1444   qDeleteAll(myOCCSelectors);
1445   myOCCSelectors.clear();
1446   getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1447
1448   qDeleteAll(myVTKSelectors);
1449   myVTKSelectors.clear();
1450   getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1451
1452   return SalomeApp_Module::deactivateModule( study );
1453 }
1454
1455 //=======================================================================
1456 // function : onWindowActivated()
1457 // purpose  : update menu items' status - disable non-OCC-viewer-compatible actions
1458 //=======================================================================
1459 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1460 {
1461   if ( !win )
1462     return;
1463
1464   const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1465   //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1466
1467   // disable non-OCC viewframe menu commands
1468 //  action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1469   action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1470   action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1471   action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1472   action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1473   action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1474 //  action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1475
1476   action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1477   action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1478
1479   action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1480 }
1481
1482 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1483 {
1484   mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1485   mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1486 }
1487
1488 void GeometryGUI::viewManagers( QStringList& lst ) const
1489 {
1490   lst.append( OCCViewer_Viewer::Type() );
1491 }
1492
1493 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1494 {
1495   if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1496   {
1497     qDebug( "connect" );
1498     connect( vm, SIGNAL( keyPress  ( SUIT_ViewWindow*, QKeyEvent* ) ),
1499              this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1500     connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1501              this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1502     connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1503              this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1504     connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1505              this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1506     
1507     LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1508     myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1509
1510     // disable OCC selectors
1511     getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1512     QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1513     while ( itOCCSel.hasNext() )
1514       if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1515         sr->setEnabled(true);
1516   }
1517   else if ( vm->getType() == SVTK_Viewer::Type() )
1518   {
1519     LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1520     myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1521
1522     // disable VTK selectors
1523     getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1524     QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1525     while ( itVTKSel.hasNext() )
1526       if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1527         sr->setEnabled(true);
1528   }
1529 }
1530
1531 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1532 {
1533   SUIT_ViewModel* viewer = vm->getViewModel();
1534   if ( vm->getType() == OCCViewer_Viewer::Type() )
1535   {
1536     QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1537     while ( itOCCSel.hasNext() )
1538       if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1539         if ( sr->viewer() == viewer )
1540         {
1541           delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1542           break;
1543         }
1544   }
1545   if ( vm->getType() == SVTK_Viewer::Type() )
1546   {
1547     QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1548     while ( itVTKSel.hasNext() )
1549       if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1550         if ( sr->viewer() == viewer )
1551         {
1552           delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1553           break;
1554         }
1555   }
1556 }
1557
1558 QString GeometryGUI::engineIOR() const
1559 {
1560   if ( !CORBA::is_nil( GetGeomGen() ) )
1561     return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1562   return "";
1563 }
1564
1565 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1566 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1567 #else
1568 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1569 #endif
1570       (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1571 {
1572   theWidth = theHeight = 0;
1573
1574 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1575   Handle(TColStd_HArray1OfByte) aTexture;
1576 #else
1577   Handle(Graphic3d_HArray1OfBytes) aTexture;
1578 #endif
1579
1580   if (theStudy) {
1581     TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1582     aTexture = aTextureMap[ theId ];
1583     if ( aTexture.IsNull() ) {
1584       GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1585       if ( !aInsOp->_is_nil() ) {
1586         CORBA::Long aWidth, aHeight;
1587         SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1588         if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1589           theWidth  = aWidth;
1590           theHeight = aHeight;
1591
1592 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1593           aTexture  = new TColStd_HArray1OfByte (1, aStream->length());
1594 #else
1595           aTexture  = new Graphic3d_HArray1OfBytes (1, aStream->length());
1596 #endif
1597
1598           for (int i = 0; i < aStream->length(); i++)
1599             aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1600           aTextureMap[ theId ] = aTexture;
1601         }
1602       }
1603     }
1604   }
1605   return aTexture;
1606 }
1607
1608 LightApp_Selection* GeometryGUI::createSelection() const
1609 {
1610   return new GEOMGUI_Selection();
1611 }
1612
1613 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1614 {
1615   SalomeApp_Module::contextMenuPopup( client, menu, title );
1616
1617   /*
1618   SALOME_ListIO lst;
1619   getApp()->selectionMgr()->selectedObjects(lst);
1620   if (lst.Extent() < 1)
1621     return;
1622
1623   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1624   _PTR(Study) study = appStudy->studyDS();
1625
1626   bool isImported = true;
1627   SALOME_ListIteratorOfListIO anIt (lst);
1628   for (; anIt.More() && isImported; anIt.Next()) {
1629     Handle(SALOME_InteractiveObject) io = anIt.Value();
1630     _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1631     if (aSObj) {
1632       if (lst.Extent() == 1) {
1633         // Set context menu title
1634         if (client == "OCCViewer" || client == "VTKViewer")
1635           title = QString(aSObj->GetName().c_str());
1636       }
1637
1638       CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1639       GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1640       if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1641         isImported = false;
1642     } else {
1643       isImported = false;
1644     }
1645   }
1646
1647   if (isImported) {
1648     menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1649   }
1650   */
1651 }
1652
1653 void GeometryGUI::createPreferences()
1654 {
1655   int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1656
1657   int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1658   setPreferenceProperty( genGroup, "columns", 2 );
1659
1660   int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1661                                 LightApp_Preferences::Selector,
1662                                 "Geometry", "display_mode" );
1663
1664   addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1665                  LightApp_Preferences::Color, "Geometry", "shading_color" );
1666
1667   addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1668                  LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1669
1670   addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1671                  LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1672
1673   addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1674                  LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1675
1676   addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1677                  LightApp_Preferences::Color, "Geometry", "line_color" );
1678
1679   addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1680                  LightApp_Preferences::Color, "Geometry", "point_color" );
1681
1682   addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1683                  LightApp_Preferences::Color, "Geometry", "isos_color" );
1684
1685   int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1686                             LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1687
1688   int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1689                             LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1690
1691   int front_material = addPreference( tr( "PREF_FRONT_MATERIAL" ), genGroup,
1692                                       LightApp_Preferences::Selector,
1693                                       "Geometry", "front_material" );
1694   
1695   int back_material = addPreference( tr( "PREF_BACK_MATERIAL" ), genGroup,
1696                                      LightApp_Preferences::Selector,
1697                                      "Geometry", "back_material" );
1698
1699   const int nb = 4;
1700   int wd[nb];
1701   int iter=0;
1702
1703   wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1704                               LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1705
1706   wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1707                               LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1708
1709   wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1710                                      LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1711   
1712   wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1713                               LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1714
1715   for(int i = 0; i < nb; i++) {
1716     setPreferenceProperty( wd[i], "min", 1 );    
1717     setPreferenceProperty( wd[i], "max", 5 );
1718   }
1719
1720
1721   // Quantities with individual precision settings
1722   int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1723   setPreferenceProperty( precGroup, "columns", 2 );
1724
1725   const int nbQuantities = 8;
1726   int prec[nbQuantities], ii = 0;
1727   prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1728                               LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1729   prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1730                               LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1731   prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1732                               LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1733   prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1734                               LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1735   prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1736                               LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1737   prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1738                               LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1739   prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1740                               LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1741   prec[ii  ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1742                               LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1743
1744   // Set property for precision value for spinboxes
1745   for ( ii = 0; ii < nbQuantities; ii++ ){
1746     setPreferenceProperty( prec[ii], "min", -14 );
1747     setPreferenceProperty( prec[ii], "max", 14 );
1748     setPreferenceProperty( prec[ii], "precision", 2 );
1749   }
1750
1751   int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1752   setPreferenceProperty( VertexGroup, "columns", 2 );
1753
1754   int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1755                                     LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1756
1757   int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1758                                    LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1759
1760   // Set property for default display mode
1761   QStringList aModesList;
1762   aModesList.append( tr("MEN_WIREFRAME") );
1763   aModesList.append( tr("MEN_SHADING") );
1764   aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1765
1766   QList<QVariant> anIndexesList;
1767   anIndexesList.append(0);
1768   anIndexesList.append(1);
1769   anIndexesList.append(2);
1770
1771   setPreferenceProperty( dispmode, "strings", aModesList );
1772   setPreferenceProperty( dispmode, "indexes", anIndexesList );
1773
1774   // Set property for step value for spinboxes
1775   setPreferenceProperty( step, "min", 1 );
1776   setPreferenceProperty( step, "max", 10000 );
1777   setPreferenceProperty( step, "precision", 3 );
1778
1779   // Set property for deflection value for spinboxes
1780   setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1781   setPreferenceProperty( defl, "max", 1.0 );
1782   setPreferenceProperty( defl, "step", 1.0e-04 );
1783   setPreferenceProperty( defl, "precision", 6 );
1784
1785   // Set property for default material
1786   Material_ResourceMgr aMatResMgr;
1787   QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
1788   setPreferenceProperty( front_material, "strings", aPrefMatNames );
1789   setPreferenceProperty( back_material, "strings", aPrefMatNames );
1790
1791   // Set property vertex marker type
1792   QList<QVariant> aMarkerTypeIndicesList;
1793   QList<QVariant> aMarkerTypeIconsList;
1794
1795   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1796   for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1797     QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1798     QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1799     aMarkerTypeIndicesList << (i-1);
1800     aMarkerTypeIconsList << pixmap;
1801   }
1802
1803   setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1804   setPreferenceProperty( typeOfMarker, "icons",   aMarkerTypeIconsList );
1805
1806   // Set property for vertex marker scale
1807   QList<QVariant> aMarkerScaleIndicesList;
1808   QStringList     aMarkerScaleValuesList;
1809
1810   for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1811     aMarkerScaleIndicesList << iii;
1812     aMarkerScaleValuesList  << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1813   }
1814
1815   setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1816   setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1817
1818   int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1819   setPreferenceProperty( originGroup, "columns", 2 );
1820
1821   int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1822                                          LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1823   setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1824   setPreferenceProperty( baseVectorsLength, "max", 1000 );
1825
1826   addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1827                  LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1828
1829
1830   int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1831   setPreferenceProperty( operationsGroup, "columns", 2 );
1832
1833   addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1834                  LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1835 }
1836
1837 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1838 {
1839   if (section == "Geometry") {
1840     SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1841     if (param == QString("SettingsGeomStep")) {
1842       double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1843       EmitSignalDefaultStepValueChanged(spin_step);
1844     }
1845   }
1846 }
1847
1848 LightApp_Displayer* GeometryGUI::displayer()
1849 {
1850   if( !myDisplayer )
1851     myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1852   return myDisplayer;
1853 }
1854
1855 void GeometryGUI::setLocalSelectionMode(const int mode)
1856 {
1857   myLocalSelectionMode = mode;
1858 }
1859 int GeometryGUI::getLocalSelectionMode() const
1860 {
1861   return myLocalSelectionMode;
1862 }
1863
1864 const char gSeparator = '_'; // character used to separate parameter names
1865 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1866
1867 /*!
1868  * \brief Store visual parameters
1869  *
1870  * This method is called just before the study document is saved.
1871  * Store visual parameters in AttributeParameter attribute(s)
1872  */
1873 void GeometryGUI::storeVisualParameters (int savePoint)
1874 {
1875   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1876   if ( !appStudy || !appStudy->studyDS() )
1877     return;
1878   _PTR(Study) studyDS = appStudy->studyDS();
1879
1880   // componentName is used for encoding of entries when storing them in IParameters
1881   std::string componentName = myComponentGeom->ComponentDataType();
1882   //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1883   //if (!aSComponent) return;
1884
1885   // IParameters
1886   _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1887                                                              componentName.c_str(),
1888                                                              savePoint);
1889   _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1890
1891   QList<SUIT_ViewManager*> lst;
1892   QList<SUIT_ViewManager*>::Iterator it;
1893
1894   // main cycle to store parameters of displayed objects
1895   lst.clear();
1896   getApp()->viewManagers(lst);
1897   for (it = lst.begin(); it != lst.end(); it++) {
1898     SUIT_ViewManager* vman = *it;
1899     QString vType = vman->getType();
1900     int aMgrId = vman->getGlobalId();
1901     // saving VTK actors properties
1902     QVector<SUIT_ViewWindow*> views = vman->getViews();
1903     for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1904       const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1905       ObjMap::ConstIterator o_it = anObjects.begin();
1906       for (; o_it != anObjects.end(); o_it++) {
1907         const PropMap aProps = o_it.value();
1908
1909         //Check that object exists in the study
1910         _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1911         if ( !obj || !(aProps.count() > 0))
1912           continue;
1913         // entry is "encoded" = it does NOT contain component adress, since it is a
1914         // subject to change on next component loading
1915
1916         std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1917
1918         _PTR(GenericAttribute) anAttr;
1919         if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1920           continue;
1921
1922         std::string param,occParam = vType.toLatin1().data();
1923         occParam += NAME_SEPARATOR;
1924         occParam += QString::number(aMgrId).toLatin1().data();
1925         occParam += NAME_SEPARATOR;
1926
1927         if(aProps.contains(VISIBILITY_PROP)) {
1928           param = occParam + VISIBILITY_PROP;
1929           ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1930         }
1931
1932         if(aProps.contains(DISPLAY_MODE_PROP)) {
1933           param = occParam + DISPLAY_MODE_PROP;
1934           ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
1935         }
1936
1937         if(aProps.contains(COLOR_PROP)) {
1938           QColor c = aProps.value(COLOR_PROP).value<QColor>();
1939           QString colorStr = QString::number(c.red()/255.);
1940           colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
1941           colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
1942           param = occParam + COLOR_PROP;
1943           ip->setParameter(entry, param, colorStr.toLatin1().data());
1944         }
1945
1946         if(vType == SVTK_Viewer::Type()) {
1947           if(aProps.contains(OPACITY_PROP)) {
1948             param = occParam + OPACITY_PROP;
1949             ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1950           }
1951         } else if (vType == SOCC_Viewer::Type()) {
1952           if(aProps.contains(TRANSPARENCY_PROP)) {
1953             param = occParam + TRANSPARENCY_PROP;
1954             ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1955           }
1956         }
1957
1958         if(aProps.contains(ISOS_PROP)) {
1959           param = occParam + ISOS_PROP;
1960           ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
1961         }
1962
1963         if(aProps.contains(VECTOR_MODE_PROP)) {
1964           param = occParam + VECTOR_MODE_PROP;
1965           ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
1966         }
1967
1968         if(aProps.contains(DEFLECTION_COEFF_PROP)) {
1969           param = occParam + DEFLECTION_COEFF_PROP;
1970           ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
1971         }
1972
1973         //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
1974         if(aProps.contains(MARKER_TYPE_PROP)) {
1975           param = occParam + MARKER_TYPE_PROP;
1976           ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
1977         }
1978
1979         if(aProps.contains(FRONT_MATERIAL_PROP)) {
1980           param = occParam + FRONT_MATERIAL_PROP;
1981           ip->setParameter(entry, param, aProps.value(FRONT_MATERIAL_PROP).toString().toLatin1().data());
1982         }
1983
1984         if(aProps.contains(BACK_MATERIAL_PROP)) {
1985           param = occParam + BACK_MATERIAL_PROP;
1986           ip->setParameter(entry, param, aProps.value(BACK_MATERIAL_PROP).toString().toLatin1().data());
1987           
1988         }
1989
1990         if(aProps.contains( EDGE_WIDTH_PROP )) {
1991              param = occParam + EDGE_WIDTH_PROP;
1992            ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());                               
1993         }
1994         
1995         if(aProps.contains( ISOS_WIDTH_PROP )) {
1996           param = occParam + ISOS_WIDTH_PROP;
1997           ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
1998         }
1999       } // object iterator
2000     } // for (views)
2001   } // for (viewManagers)
2002 }
2003
2004 /*!
2005  * \brief Restore visual parameters
2006  *
2007  * This method is called after the study document is opened.
2008  * Restore visual parameters from AttributeParameter attribute(s)
2009  */
2010 void GeometryGUI::restoreVisualParameters (int savePoint)
2011 {
2012   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2013   if (!appStudy || !appStudy->studyDS())
2014     return;
2015   _PTR(Study) studyDS = appStudy->studyDS();
2016
2017   // componentName is used for encoding of entries when storing them in IParameters
2018   std::string componentName = myComponentGeom->ComponentDataType();
2019   //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2020   //if (!aSComponent) return;
2021
2022   // IParameters
2023   _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2024                                                              componentName.c_str(),
2025                                                              savePoint);
2026   _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2027
2028   std::vector<std::string> entries = ip->getEntries();
2029
2030   for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2031   {
2032     // entry is a normal entry - it should be "decoded" (setting base adress of component)
2033     QString entry (ip->decodeEntry(*entIt).c_str());
2034
2035     // Check that the entry corresponds to a real object in the Study
2036     // as the object may be deleted or modified after the visual state is saved.
2037     _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2038     if (!so) continue; //Skip the not existent entry
2039
2040     std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2041     std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2042
2043     std::vector<std::string>::iterator namesIt = paramNames.begin();
2044     std::vector<std::string>::iterator valuesIt = paramValues.begin();
2045
2046     // actors are stored in a map after displaying of them for
2047     // quicker access in the future: map < viewID to actor >
2048     NCollection_DataMap<int, GEOM_Actor*          > vtkActors;
2049     NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2050
2051     QString viewerTypStr;
2052     QString viewIndexStr;
2053     int viewIndex;
2054     QVector<PropMap> aListOfMap;
2055
2056     for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2057     {
2058       // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2059       // '_' is used as separator and should not be used in viewer type or parameter names.
2060       QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2061       if (lst.size() != 3)
2062         continue;
2063
2064       viewerTypStr = lst[0];
2065       viewIndexStr = lst[1];
2066       QString paramNameStr = lst[2];
2067
2068       bool ok;
2069       viewIndex = viewIndexStr.toUInt(&ok);
2070       if (!ok) // bad conversion of view index to integer
2071         continue;
2072
2073       if((viewIndex + 1) > aListOfMap.count()) {
2074         aListOfMap.resize(viewIndex + 1);
2075       }
2076
2077       QString val((*valuesIt).c_str());
2078       if(paramNameStr == VISIBILITY_PROP){
2079         aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2080
2081       } else if(paramNameStr == OPACITY_PROP) {
2082         aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2083
2084       }        else if(paramNameStr == TRANSPARENCY_PROP) {
2085         aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, val.toDouble());
2086
2087       } else if(paramNameStr == DISPLAY_MODE_PROP) {
2088         aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2089
2090       } else if(paramNameStr == ISOS_PROP) {
2091         aListOfMap[viewIndex].insert( ISOS_PROP, val);
2092
2093       } else if(paramNameStr == COLOR_PROP) {
2094         QStringList rgb = val.split(DIGIT_SEPARATOR);
2095         if(rgb.count() == 3) {
2096           QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2097           aListOfMap[viewIndex].insert( COLOR_PROP, c);
2098         }
2099       } else if(paramNameStr == VECTOR_MODE_PROP) {
2100         aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2101
2102       }  else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2103         aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2104       }  else if(paramNameStr == MARKER_TYPE_PROP) {
2105         aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2106       } else if(paramNameStr == FRONT_MATERIAL_PROP) {
2107         aListOfMap[viewIndex].insert( FRONT_MATERIAL_PROP, val);
2108       } else if(paramNameStr == BACK_MATERIAL_PROP) {
2109         aListOfMap[viewIndex].insert( BACK_MATERIAL_PROP, val);
2110       }  else if(paramNameStr == EDGE_WIDTH_PROP) {
2111         aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2112       }  else if(paramNameStr == ISOS_WIDTH_PROP) {
2113         aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2114       }
2115
2116                     
2117
2118     } // for names/parameters iterator
2119
2120     QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2121
2122     for (int index = 0; index < aListOfMap.count(); index++) {
2123
2124       appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2125
2126       //Get Visibility property of the current PropMap
2127       if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2128         SUIT_ViewManager* vman = lst.at(index);
2129         SUIT_ViewModel* vmodel = vman->getViewModel();
2130         displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2131       }
2132     }
2133
2134   } // for entries iterator
2135
2136   // update all VTK and OCC views
2137   QList<SUIT_ViewManager*> lst;
2138   getApp()->viewManagers(lst);
2139   for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2140     SUIT_ViewModel* vmodel = (*it)->getViewModel();
2141     if (!vmodel)
2142       continue;
2143     if (vmodel->getType() == SVTK_Viewer::Type()) {
2144       SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2145       vtkView->getRenderer()->ResetCameraClippingRange();
2146       vtkView->Repaint();
2147     }
2148     else if (vmodel->getType() == SOCC_Viewer::Type()) {
2149       //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2150       SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2151       if (occVMod)
2152         occVMod->Repaint();
2153     }
2154   }
2155 }
2156
2157 void GeometryGUI::onViewAboutToShow()
2158 {
2159   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2160   QAction* a = action( GEOMOp::OpSwitchVectors );
2161   if ( window ) {
2162     a->setEnabled(true);
2163     bool vmode = window->property("VectorsMode").toBool();
2164     a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2165   } else {
2166     a->setText ( tr("MEN_VECTOR_MODE_ON") );
2167     a->setEnabled(false);
2168   }
2169 }
2170
2171 /*!
2172   Rename object by entry.
2173   \param entry entry of the object
2174   \param name new name of the object
2175   \brief Return \c true if rename operation finished successfully, \c false otherwise.
2176 */
2177 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2178
2179   bool appRes = SalomeApp_Module::renameObject(entry,name);
2180   if( !appRes )
2181     return false;
2182
2183   bool result = false;
2184
2185   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2186   SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2187
2188   if(!appStudy)
2189     return result;
2190
2191   _PTR(Study) aStudy = appStudy->studyDS();
2192
2193   if(!aStudy)
2194     return result;
2195
2196   _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2197   _PTR(GenericAttribute) anAttr;
2198   if ( obj ) {
2199     if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2200       _PTR(AttributeName) aName (anAttr);
2201
2202       GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2203       if (!CORBA::is_nil(anObj)) {
2204         aName->SetValue( name.toLatin1().data() ); // rename the SObject
2205         anObj->SetName( name.toLatin1().data() );  // Rename the corresponding GEOM_Object
2206         result = true;
2207       }
2208     }
2209   }
2210   return result;
2211 }