Salome HOME
Implementation of the "0021239: EDF 1829 OCC: Bring to front selected objects" issue.
[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   case GEOMOp::OpBringToFront:       // POPUP MENU - BRING TO FRONT
430   case GEOMOp::OpClsBringToFront:    //
431     libName = "GEOMToolsGUI";
432     break;
433   case GEOMOp::OpDisplayMode:        // MENU VIEW - WIREFRAME/SHADING
434   case GEOMOp::OpShowAll:            // MENU VIEW - SHOW ALL
435   case GEOMOp::OpShowOnly:           // MENU VIEW - DISPLAY ONLY
436   case GEOMOp::OpHideAll:            // MENU VIEW - ERASE ALL
437   case GEOMOp::OpHide:               // MENU VIEW - ERASE
438   case GEOMOp::OpShow:               // MENU VIEW - DISPLAY
439   case GEOMOp::OpSwitchVectors:      // MENU VIEW - VECTOR MODE
440   case GEOMOp::OpWireframe:          // POPUP MENU - WIREFRAME
441   case GEOMOp::OpShading:            // POPUP MENU - SHADING
442   case GEOMOp::OpShadingWithEdges:   // POPUP MENU - SHADING WITH EDGES
443   case GEOMOp::OpTexture:            // POPUP MENU - TEXTURE
444   case GEOMOp::OpVectors:            // POPUP MENU - VECTORS
445     libName = "DisplayGUI";
446     break;
447   case GEOMOp::OpPoint:              // MENU BASIC - POINT
448   case GEOMOp::OpLine:               // MENU BASIC - LINE
449   case GEOMOp::OpCircle:             // MENU BASIC - CIRCLE
450   case GEOMOp::OpEllipse:            // MENU BASIC - ELLIPSE
451   case GEOMOp::OpArc:                // MENU BASIC - ARC
452   case GEOMOp::OpVector:             // MENU BASIC - VECTOR
453   case GEOMOp::OpPlane:              // MENU BASIC - PLANE
454   case GEOMOp::OpCurve:              // MENU BASIC - CURVE
455   case GEOMOp::OpLCS:                // MENU BASIC - LOCAL COORDINATE SYSTEM
456     libName = "BasicGUI";
457     break;
458   case GEOMOp::OpBox:                // MENU PRIMITIVE - BOX
459   case GEOMOp::OpCylinder:           // MENU PRIMITIVE - CYLINDER
460   case GEOMOp::OpSphere:             // MENU PRIMITIVE - SPHERE
461   case GEOMOp::OpTorus:              // MENU PRIMITIVE - TORUS
462   case GEOMOp::OpCone:               // MENU PRIMITIVE - CONE
463   case GEOMOp::OpRectangle:          // MENU PRIMITIVE - FACE
464   case GEOMOp::OpDisk:               // MENU PRIMITIVE - DISK
465     libName = "PrimitiveGUI";
466     break;
467   case GEOMOp::OpPrism:              // MENU GENERATION - PRISM
468   case GEOMOp::OpRevolution:         // MENU GENERATION - REVOLUTION
469   case GEOMOp::OpFilling:            // MENU GENERATION - FILLING
470   case GEOMOp::OpPipe:               // MENU GENERATION - PIPE
471     libName = "GenerationGUI";
472     break;
473   case GEOMOp::Op2dSketcher:         // MENU ENTITY - SKETCHER
474   case GEOMOp::Op3dSketcher:         // MENU ENTITY - 3D SKETCHER
475   case GEOMOp::OpExplode:            // MENU ENTITY - EXPLODE
476 #ifdef WITH_OPENCV
477   case GEOMOp::OpFeatureDetect:      // MENU ENTITY - FEATURE DETECTION
478 #endif
479   case GEOMOp::OpPictureImport:      // MENU ENTITY - IMPORT PICTURE IN VIEWER
480     libName = "EntityGUI";
481     break;
482   case GEOMOp::OpEdge:               // MENU BUILD - EDGE
483   case GEOMOp::OpWire:               // MENU BUILD - WIRE
484   case GEOMOp::OpFace:               // MENU BUILD - FACE
485   case GEOMOp::OpShell:              // MENU BUILD - SHELL
486   case GEOMOp::OpSolid:              // MENU BUILD - SOLID
487   case GEOMOp::OpCompound:           // MENU BUILD - COMPUND
488     libName = "BuildGUI";
489     break;
490   case GEOMOp::OpFuse:               // MENU BOOLEAN - FUSE
491   case GEOMOp::OpCommon:             // MENU BOOLEAN - COMMON
492   case GEOMOp::OpCut:                // MENU BOOLEAN - CUT
493   case GEOMOp::OpSection:            // MENU BOOLEAN - SECTION
494     libName = "BooleanGUI";
495     break;
496   case GEOMOp::OpTranslate:          // MENU TRANSFORMATION - TRANSLATION
497   case GEOMOp::OpRotate:             // MENU TRANSFORMATION - ROTATION
498   case GEOMOp::OpChangeLoc:          // MENU TRANSFORMATION - LOCATION
499   case GEOMOp::OpMirror:             // MENU TRANSFORMATION - MIRROR
500   case GEOMOp::OpScale:              // MENU TRANSFORMATION - SCALE
501   case GEOMOp::OpOffset:             // MENU TRANSFORMATION - OFFSET
502   case GEOMOp::OpProjection:         // MENU TRANSFORMATION - PROJECTION
503   case GEOMOp::OpMultiTranslate:     // MENU TRANSFORMATION - MULTI-TRANSLATION
504   case GEOMOp::OpMultiRotate:        // MENU TRANSFORMATION - MULTI-ROTATION
505   case GEOMOp::OpReimport:           // CONTEXT(POPUP) MENU - RELOAD_IMPORTED
506     libName = "TransformationGUI";
507     break;
508   case GEOMOp::OpPartition:          // MENU OPERATION - PARTITION
509   case GEOMOp::OpArchimede:          // MENU OPERATION - ARCHIMEDE
510   case GEOMOp::OpFillet3d:           // MENU OPERATION - FILLET
511   case GEOMOp::OpChamfer:            // MENU OPERATION - CHAMFER
512   case GEOMOp::OpClipping:           // MENU OPERATION - CLIPPING RANGE
513   case GEOMOp::OpShapesOnShape:      // MENU OPERATION - GET SHAPES ON SHAPE
514   case GEOMOp::OpFillet2d:           // MENU OPERATION - FILLET 2D
515   case GEOMOp::OpFillet1d:           // MENU OPERATION - FILLET 1D
516   case GEOMOp::OpSharedShapes:       // MENU OPERATION - GET SHARED SHAPES
517   case GEOMOp::OpExtrudedBoss:       // MENU OPERATION - EXTRUDED BOSS
518   case GEOMOp::OpExtrudedCut:        // MENU OPERATION - EXTRUDED CUT
519     libName = "OperationGUI";
520     break;
521   case GEOMOp::OpSewing:             // MENU REPAIR - SEWING
522   case GEOMOp::OpSuppressFaces:      // MENU REPAIR - SUPPRESS FACES
523   case GEOMOp::OpSuppressHoles:      // MENU REPAIR - SUPPRESS HOLE
524   case GEOMOp::OpShapeProcess:       // MENU REPAIR - SHAPE PROCESSING
525   case GEOMOp::OpCloseContour:       // MENU REPAIR - CLOSE CONTOUR
526   case GEOMOp::OpRemoveIntWires:     // MENU REPAIR - REMOVE INTERNAL WIRES
527   case GEOMOp::OpAddPointOnEdge:     // MENU REPAIR - ADD POINT ON EDGE
528   case GEOMOp::OpFreeBoundaries:     // MENU MEASURE - FREE BOUNDARIES
529   case GEOMOp::OpFreeFaces:          // MENU MEASURE - FREE FACES
530   case GEOMOp::OpOrientation:        // MENU REPAIR - CHANGE ORIENTATION
531   case GEOMOp::OpGlueFaces:          // MENU REPAIR - GLUE FACES
532   case GEOMOp::OpGlueEdges:          // MENU REPAIR - GLUE EDGES
533   case GEOMOp::OpLimitTolerance:     // MENU REPAIR - LIMIT TOLERANCE
534   case GEOMOp::OpRemoveExtraEdges:   // MENU REPAIR - REMOVE EXTRA EDGES
535     libName = "RepairGUI";
536     break;
537   case GEOMOp::OpProperties:         // MENU MEASURE - PROPERTIES
538   case GEOMOp::OpCenterMass:         // MENU MEASURE - CDG
539   case GEOMOp::OpInertia:            // MENU MEASURE - INERTIA
540   case GEOMOp::OpNormale:            // MENU MEASURE - NORMALE
541   case GEOMOp::OpBoundingBox:        // MENU MEASURE - BOUNDING BOX
542   case GEOMOp::OpMinDistance:        // MENU MEASURE - MIN DISTANCE
543   case GEOMOp::OpAngle:              // MENU MEASURE - ANGLE
544   case GEOMOp::OpTolerance:          // MENU MEASURE - TOLERANCE
545   case GEOMOp::OpWhatIs:             // MENU MEASURE - WHATIS
546   case GEOMOp::OpCheckShape:         // MENU MEASURE - CHECK
547   case GEOMOp::OpCheckCompound:      // MENU MEASURE - CHECK COMPOUND OF BLOCKS
548   case GEOMOp::OpPointCoordinates:   // MENU MEASURE - POINT COORDINATES
549   case GEOMOp::OpCheckSelfInters:    // MENU MEASURE - CHECK SELF INTERSECTIONS
550     libName = "MeasureGUI";
551     break;
552   case GEOMOp::OpGroupCreate:        // MENU GROUP - CREATE
553   case GEOMOp::OpGroupCreatePopup:   // POPUP MENU - CREATE GROUP
554   case GEOMOp::OpGroupEdit:          // MENU GROUP - EDIT
555     libName = "GroupGUI";
556     break;
557   case GEOMOp::OpHexaSolid:          // MENU BLOCKS - HEXAHEDRAL SOLID
558   case GEOMOp::OpMultiTransform:     // MENU BLOCKS - MULTI-TRANSFORMATION
559   case GEOMOp::OpQuadFace:           // MENU BLOCKS - QUADRANGLE FACE
560   case GEOMOp::OpPropagate:          // MENU BLOCKS - PROPAGATE
561   case GEOMOp::OpExplodeBlock:       // MENU BLOCKS - EXPLODE ON BLOCKS
562     libName = "BlocksGUI";
563     break;
564   case GEOMOp::OpAdvancedNoOp:       // NO OPERATION (advanced operations base)
565   case GEOMOp::OpPipeTShape:         // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
566 //   case GEOMOp::OpPipeTShapeGroups:     // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
567     //@@ 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 @@//
568     libName = "AdvancedGUI";
569     break;
570   default:
571     break;
572   }
573
574   GEOMGUI* library = 0;
575   if ( !libName.isEmpty() ) {
576 #ifndef WNT
577     libName = QString( "lib" ) + libName + ".so";
578 #else
579     libName = libName + ".dll";
580 #endif
581     library = getLibrary( libName );
582   }
583
584   // call method of corresponding GUI library
585   if ( library ) {
586     library->OnGUIEvent( id, desk );
587     
588     // Update a list of materials for "Preferences" dialog
589     if ( id == GEOMOp::OpMaterialProperties ) {
590       LightApp_Preferences* pref = preferences();
591       if ( pref ) {
592         Material_ResourceMgr aMatResMgr;
593         QStringList aPerfMatNames = aMatResMgr.getPreferenceMaterialsNames();
594         setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_FRONT_MATERIAL" ), true )->id(),
595                                "strings",
596                                aPerfMatNames );
597         setPreferenceProperty( pref->rootItem()->findItem( tr( "PREF_BACK_MATERIAL" ), true )->id(),
598                                "strings",
599                                aPerfMatNames );
600       }
601     }
602   }
603   else
604     SUIT_MessageBox::critical( desk, tr( "GEOM_ERROR" ), tr( "GEOM_ERR_LIB_NOT_FOUND" ), tr( "GEOM_BUT_OK" ) );
605 }
606
607 //=================================================================================
608 // function : GeometryGUI::OnKeyPress()
609 // purpose  : Called when any key is pressed by user [static]
610 //=================================================================================
611 void GeometryGUI::OnKeyPress( SUIT_ViewWindow* w, QKeyEvent* e )
612 {
613   if ( !application() )
614     return;
615   foreach ( GEOMGUI* lib, myGUIMap )
616     lib->OnKeyPress( e, application()->desktop(), w );
617 }
618
619 //=================================================================================
620 // function : GeometryGUI::OnMouseMove()
621 // purpose  : Manages mouse move events [static]
622 //=================================================================================
623 void GeometryGUI::OnMouseMove( SUIT_ViewWindow* w, QMouseEvent* e )
624 {
625   if ( !application() )
626     return;
627   foreach ( GEOMGUI* lib, myGUIMap )
628     lib->OnMouseMove( e, application()->desktop(), w );
629 }
630
631 //=================================================================================
632 // function : GeometryGUI::OnMouseRelease()
633 // purpose  : Manages mouse release events [static]
634 //=================================================================================
635 void GeometryGUI::OnMouseRelease( SUIT_ViewWindow* w, QMouseEvent* e )
636 {
637   if ( !application() )
638     return;
639   foreach ( GEOMGUI* lib, myGUIMap )
640     lib->OnMouseRelease( e, application()->desktop(), w );
641 }
642
643 //=================================================================================
644 // function : GeometryGUI::OnMousePress()
645 // purpose  : Manage mouse press events [static]
646 //=================================================================================
647 void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
648 {
649   if ( !application() )
650     return;
651   foreach ( GEOMGUI* lib, myGUIMap )
652     lib->OnMousePress( e, application()->desktop(), w );
653 }
654
655 //=======================================================================
656 // function : createGeomAction
657 // purpose  :
658 //=======================================================================
659 void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel,
660                                     const int accel, const bool toggle, const QString& shortcutAction )
661 {
662   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
663   QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
664                                     : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
665   createAction( id,
666                 tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
667                 icon,
668                 tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
669                 tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
670                 accel,
671                 application()->desktop(),
672                 toggle,
673                 this, SLOT( OnGUIEvent() ),
674                 shortcutAction );
675 }
676
677 //=======================================================================
678 // function : createOriginAndBaseVectors
679 // purpose  :
680 //=======================================================================
681 void GeometryGUI::createOriginAndBaseVectors()
682 {
683   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
684   if( appStudy ) {
685     _PTR(Study) studyDS = appStudy->studyDS();
686     if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
687       GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
688       if( !aBasicOperations->_is_nil() ) {
689         SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
690         double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
691         GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
692         GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
693         GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
694         GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
695
696         SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
697         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
698         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
699         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
700         GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
701
702         getApp()->updateObjectBrowser( false );
703       }
704     }
705   }
706 }
707
708 //=======================================================================
709 // function : GeometryGUI::initialize()
710 // purpose  : Called when GEOM module is created
711 //=======================================================================
712 void GeometryGUI::initialize( CAM_Application* app )
713 {
714   SalomeApp_Module::initialize( app );
715
716   // ----- create actions --------------
717
718   createGeomAction( GEOMOp::OpImport,     "IMPORT", "", Qt::ControlModifier + Qt::Key_I );
719   createGeomAction( GEOMOp::OpExport,     "EXPORT", "", Qt::ControlModifier + Qt::Key_E );
720
721   createGeomAction( GEOMOp::OpDelete,     "DELETE", "", Qt::Key_Delete );
722
723   createGeomAction( GEOMOp::OpPoint,      "POINT" );
724   createGeomAction( GEOMOp::OpLine,       "LINE" );
725   createGeomAction( GEOMOp::OpCircle,     "CIRCLE" );
726   createGeomAction( GEOMOp::OpEllipse,    "ELLIPSE" );
727   createGeomAction( GEOMOp::OpArc,        "ARC" );
728   createGeomAction( GEOMOp::OpCurve,      "CURVE" );
729   createGeomAction( GEOMOp::OpVector,     "VECTOR" );
730   createGeomAction( GEOMOp::OpPlane,      "PLANE" );
731   createGeomAction( GEOMOp::OpLCS,        "LOCAL_CS" );
732   createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
733
734   createGeomAction( GEOMOp::OpBox,        "BOX" );
735   createGeomAction( GEOMOp::OpCylinder,   "CYLINDER" );
736   createGeomAction( GEOMOp::OpSphere,     "SPHERE" );
737   createGeomAction( GEOMOp::OpTorus,      "TORUS" );
738   createGeomAction( GEOMOp::OpCone,       "CONE" );
739   createGeomAction( GEOMOp::OpRectangle,  "RECTANGLE" );
740   createGeomAction( GEOMOp::OpDisk,       "DISK" );
741
742   createGeomAction( GEOMOp::OpPrism,       "EXTRUSION" );
743   createGeomAction( GEOMOp::OpRevolution,  "REVOLUTION" );
744   createGeomAction( GEOMOp::OpFilling,     "FILLING" );
745   createGeomAction( GEOMOp::OpPipe,        "PIPE" );
746
747   createGeomAction( GEOMOp::OpGroupCreate, "GROUP_CREATE" );
748   createGeomAction( GEOMOp::OpGroupEdit,   "GROUP_EDIT" );
749
750   createGeomAction( GEOMOp::OpReimport,    "RELOAD_IMPORTED" );
751
752   createGeomAction( GEOMOp::OpQuadFace,    "Q_FACE" );
753   createGeomAction( GEOMOp::OpHexaSolid,   "HEX_SOLID" );
754
755   createGeomAction( GEOMOp::Op2dSketcher,  "SKETCH" );
756   createGeomAction( GEOMOp::Op3dSketcher,  "3DSKETCH" );
757   createGeomAction( GEOMOp::OpExplode,     "EXPLODE" );
758 #ifdef WITH_OPENCV
759   createGeomAction( GEOMOp::OpFeatureDetect,"FEATURE_DETECTION" );
760 #endif
761   createGeomAction( GEOMOp::OpPictureImport,"PICTURE_IMPORT" );
762
763   createGeomAction( GEOMOp::OpEdge,        "EDGE" );
764   createGeomAction( GEOMOp::OpWire,        "WIRE" );
765   createGeomAction( GEOMOp::OpFace,        "FACE" );
766   createGeomAction( GEOMOp::OpShell,       "SHELL" );
767   createGeomAction( GEOMOp::OpSolid,       "SOLID" );
768   createGeomAction( GEOMOp::OpCompound,    "COMPOUND" );
769
770   createGeomAction( GEOMOp::OpFuse,        "FUSE" );
771   createGeomAction( GEOMOp::OpCommon,      "COMMON" );
772   createGeomAction( GEOMOp::OpCut,         "CUT" );
773   createGeomAction( GEOMOp::OpSection,     "SECTION" );
774
775   createGeomAction( GEOMOp::OpTranslate,      "TRANSLATION" );
776   createGeomAction( GEOMOp::OpRotate,         "ROTATION" );
777   createGeomAction( GEOMOp::OpChangeLoc,      "MODIFY_LOCATION" );
778   createGeomAction( GEOMOp::OpMirror,         "MIRROR" );
779   createGeomAction( GEOMOp::OpScale,          "SCALE" );
780   createGeomAction( GEOMOp::OpOffset,         "OFFSET" );
781   createGeomAction( GEOMOp::OpProjection,     "PROJECTION" );
782   createGeomAction( GEOMOp::OpMultiTranslate, "MUL_TRANSLATION" );
783   createGeomAction( GEOMOp::OpMultiRotate,    "MUL_ROTATION" );
784
785   createGeomAction( GEOMOp::OpPartition,      "PARTITION" );
786   createGeomAction( GEOMOp::OpArchimede,      "ARCHIMEDE" );
787   createGeomAction( GEOMOp::OpFillet3d,       "FILLET" );
788   createGeomAction( GEOMOp::OpChamfer,        "CHAMFER" );
789   //createGeomAction( GEOMOp::OpClipping,        "CLIPPING" );
790   createGeomAction( GEOMOp::OpShapesOnShape,  "GET_SHAPES_ON_SHAPE" );
791   createGeomAction( GEOMOp::OpSharedShapes,   "GET_SHARED_SHAPES" );
792   createGeomAction( GEOMOp::OpExtrudedCut,    "EXTRUDED_CUT" );
793   createGeomAction( GEOMOp::OpExtrudedBoss,   "EXTRUDED_BOSS" );
794   createGeomAction( GEOMOp::OpFillet1d,       "FILLET_1D" );
795   createGeomAction( GEOMOp::OpFillet2d,       "FILLET_2D" );
796
797   createGeomAction( GEOMOp::OpMultiTransform, "MUL_TRANSFORM" );
798   createGeomAction( GEOMOp::OpExplodeBlock,   "EXPLODE_BLOCKS" );
799   createGeomAction( GEOMOp::OpPropagate,      "PROPAGATE" );
800
801   createGeomAction( GEOMOp::OpSewing,           "SEWING" );
802   createGeomAction( GEOMOp::OpGlueFaces,        "GLUE_FACES" );
803   createGeomAction( GEOMOp::OpGlueEdges,        "GLUE_EDGES" );
804   createGeomAction( GEOMOp::OpLimitTolerance,   "LIMIT_TOLERANCE" );
805   createGeomAction( GEOMOp::OpSuppressFaces,    "SUPPRESS_FACES" );
806   createGeomAction( GEOMOp::OpSuppressHoles,    "SUPPERSS_HOLES" );
807   createGeomAction( GEOMOp::OpShapeProcess,     "SHAPE_PROCESS" );
808   createGeomAction( GEOMOp::OpCloseContour,     "CLOSE_CONTOUR" );
809   createGeomAction( GEOMOp::OpRemoveIntWires,   "SUPPRESS_INT_WIRES" );
810   createGeomAction( GEOMOp::OpAddPointOnEdge,   "POINT_ON_EDGE" );
811   createGeomAction( GEOMOp::OpFreeBoundaries,   "CHECK_FREE_BNDS" );
812   createGeomAction( GEOMOp::OpFreeFaces,        "CHECK_FREE_FACES" );
813   createGeomAction( GEOMOp::OpOrientation,      "CHANGE_ORIENTATION" );
814   createGeomAction( GEOMOp::OpRemoveExtraEdges, "REMOVE_EXTRA_EDGES" );
815
816   createGeomAction( GEOMOp::OpPointCoordinates, "POINT_COORDS" );
817   createGeomAction( GEOMOp::OpProperties,       "BASIC_PROPS" );
818   createGeomAction( GEOMOp::OpCenterMass,       "MASS_CENTER" );
819   createGeomAction( GEOMOp::OpInertia,          "INERTIA" );
820   createGeomAction( GEOMOp::OpNormale,          "NORMALE" );
821   createGeomAction( GEOMOp::OpBoundingBox,      "BND_BOX" );
822   createGeomAction( GEOMOp::OpMinDistance,      "MIN_DIST" );
823   createGeomAction( GEOMOp::OpAngle,            "MEASURE_ANGLE" );
824
825   createGeomAction( GEOMOp::OpTolerance,        "TOLERANCE" );
826   createGeomAction( GEOMOp::OpWhatIs,           "WHAT_IS" );
827   createGeomAction( GEOMOp::OpCheckShape,       "CHECK" );
828   createGeomAction( GEOMOp::OpCheckCompound,    "CHECK_COMPOUND" );
829   createGeomAction( GEOMOp::OpCheckSelfInters,  "CHECK_SELF_INTERSECTIONS" );
830
831 #ifdef _DEBUG_ // PAL16821
832   createGeomAction( GEOMOp::OpCheckGeom,        "CHECK_GEOMETRY" );
833 #endif
834
835   createGeomAction( GEOMOp::OpDisplayMode,      "SHADING" );
836   createGeomAction( GEOMOp::OpShowAll,          "DISPLAY_ALL" );
837   createGeomAction( GEOMOp::OpHideAll,          "ERASE_ALL" );
838   createGeomAction( GEOMOp::OpShow,             "DISPLAY" );
839   createGeomAction( GEOMOp::OpSwitchVectors,    "VECTOR_MODE");
840   createGeomAction( GEOMOp::OpSelectVertex,     "VERTEX_SEL_ONLY" ,"", 0, true );
841   createGeomAction( GEOMOp::OpSelectEdge,       "EDGE_SEL_ONLY", "", 0, true );
842   createGeomAction( GEOMOp::OpSelectWire,       "WIRE_SEL_ONLY", "",  0, true );
843   createGeomAction( GEOMOp::OpSelectFace,       "FACE_SEL_ONLY", "", 0, true );
844   createGeomAction( GEOMOp::OpSelectShell,      "SHELL_SEL_ONLY", "",  0, true );
845   createGeomAction( GEOMOp::OpSelectSolid,      "SOLID_SEL_ONLY", "", 0, true );
846   createGeomAction( GEOMOp::OpSelectCompound,   "COMPOUND_SEL_ONLY", "",  0, true );
847   createGeomAction( GEOMOp::OpSelectAll,        "ALL_SEL_ONLY", "",  0, true );
848   createGeomAction( GEOMOp::OpShowOnly,         "DISPLAY_ONLY" );
849   createGeomAction( GEOMOp::OpBringToFront,     "BRING_TO_FRONT", "", 0, true );
850   createGeomAction( GEOMOp::OpClsBringToFront,  "CLS_BRING_TO_FRONT" );
851   createGeomAction( GEOMOp::OpHide,             "ERASE" );
852
853   createGeomAction( GEOMOp::OpWireframe,        "POP_WIREFRAME", "", 0, true );
854   createGeomAction( GEOMOp::OpShading,          "POP_SHADING", "", 0, true );
855   createGeomAction( GEOMOp::OpShadingWithEdges, "POP_SHADING_WITH_EDGES", "", 0, true );
856   createGeomAction( GEOMOp::OpTexture,          "POP_TEXTURE", "", 0, true );
857   createGeomAction( GEOMOp::OpEdgeWidth,        "EDGE_WIDTH");
858   createGeomAction( GEOMOp::OpIsosWidth,        "ISOS_WIDTH");
859   createGeomAction( GEOMOp::OpVectors,          "POP_VECTORS", "", 0, true );
860   createGeomAction( GEOMOp::OpDeflection,       "POP_DEFLECTION" );
861   createGeomAction( GEOMOp::OpColor,            "POP_COLOR" );
862   createGeomAction( GEOMOp::OpSetTexture,       "POP_SETTEXTURE" );
863   createGeomAction( GEOMOp::OpTransparency,     "POP_TRANSPARENCY" );
864   createGeomAction( GEOMOp::OpIsos,             "POP_ISOS" );
865   createGeomAction( GEOMOp::OpAutoColor,        "POP_AUTO_COLOR" );
866   createGeomAction( GEOMOp::OpNoAutoColor,      "POP_DISABLE_AUTO_COLOR" );
867   createGeomAction( GEOMOp::OpGroupCreatePopup, "POP_CREATE_GROUP" );
868   createGeomAction( GEOMOp::OpShowChildren,     "POP_SHOW_CHILDREN" );
869   createGeomAction( GEOMOp::OpHideChildren,     "POP_HIDE_CHILDREN" );
870   createGeomAction( GEOMOp::OpUnpublishObject,  "POP_UNPUBLISH_OBJ" );
871   createGeomAction( GEOMOp::OpPublishObject,    "POP_PUBLISH_OBJ" );
872   createGeomAction( GEOMOp::OpPointMarker,      "POP_POINT_MARKER" );
873   createGeomAction( GEOMOp::OpMaterialProperties, "POP_MATERIAL_PROPERTIES" );
874
875   createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
876
877   // Create actions for increase/decrease transparency shortcuts
878   createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false,
879                     "Geometry:Increase transparency");
880   createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false,
881                     "Geometry:Decrease transparency");
882
883   // Create actions for increase/decrease number of isolines
884   createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false,
885                     "Geometry:Increase number of isolines");
886   createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false,
887                     "Geometry:Decrease number of isolines");
888
889 //   createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
890   //@@ 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 @@//
891
892   // ---- create menus --------------------------
893
894   int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
895   createMenu( separator(),      fileId, 10 );
896   createMenu( GEOMOp::OpImport, fileId, 10 );
897   createMenu( GEOMOp::OpExport, fileId, 10 );
898   createMenu( separator(),      fileId, -1 );
899
900   int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
901   createMenu( GEOMOp::OpDelete, editId, -1 );
902
903   int newEntId = createMenu( tr( "MEN_NEW_ENTITY" ), -1, -1, 10 );
904
905   int basicId = createMenu( tr( "MEN_BASIC" ), newEntId, -1 );
906   createMenu( GEOMOp::OpPoint,   basicId, -1 );
907   createMenu( GEOMOp::OpLine,    basicId, -1 );
908   createMenu( GEOMOp::OpCircle,  basicId, -1 );
909   createMenu( GEOMOp::OpEllipse, basicId, -1 );
910   createMenu( GEOMOp::OpArc,     basicId, -1 );
911   createMenu( GEOMOp::OpCurve,   basicId, -1 );
912   createMenu( separator(),       basicId, -1 );
913   createMenu( GEOMOp::Op2dSketcher, basicId, -1 );
914   createMenu( GEOMOp::Op3dSketcher, basicId, -1 );
915   createMenu( GEOMOp::OpVector,  basicId, -1 );
916   createMenu( GEOMOp::OpPlane,   basicId, -1 );
917   createMenu( GEOMOp::OpLCS,     basicId, -1 );
918   createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
919
920   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
921   createMenu( GEOMOp::OpBox,       primId, -1 );
922   createMenu( GEOMOp::OpCylinder,  primId, -1 );
923   createMenu( GEOMOp::OpSphere,    primId, -1 );
924   createMenu( GEOMOp::OpTorus,     primId, -1 );
925   createMenu( GEOMOp::OpCone,      primId, -1 );
926   createMenu( GEOMOp::OpRectangle, primId, -1 );
927   createMenu( GEOMOp::OpDisk,      primId, -1 );
928   createMenu( GEOMOp::OpPipeTShape,primId, -1 );
929
930   int genId = createMenu( tr( "MEN_GENERATION" ), newEntId, -1 );
931   createMenu( GEOMOp::OpPrism,      genId, -1 );
932   createMenu( GEOMOp::OpRevolution, genId, -1 );
933   createMenu( GEOMOp::OpFilling,    genId, -1 );
934   createMenu( GEOMOp::OpPipe,       genId, -1 );
935
936 //   int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
937 //   createMenu( GEOMOp::OpPipeTShape, advId, -1 );
938 //   createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
939   //@@ 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 @@//
940
941   createMenu( separator(), newEntId, -1 );
942
943   int groupId = createMenu( tr( "MEN_GROUP" ), newEntId, -1 );
944   createMenu( GEOMOp::OpGroupCreate, groupId, -1 );
945   createMenu( GEOMOp::OpGroupEdit,   groupId, -1 );
946
947   createMenu( separator(), newEntId, -1 );
948
949   int blocksId = createMenu( tr( "MEN_BLOCKS" ), newEntId, -1 );
950   createMenu( GEOMOp::OpQuadFace,  blocksId, -1 );
951   createMenu( GEOMOp::OpHexaSolid, blocksId, -1 );
952
953   createMenu( separator(),          newEntId, -1 );
954
955   createMenu( GEOMOp::OpExplode,    newEntId, -1 );
956
957   int buildId = createMenu( tr( "MEN_BUILD" ), newEntId, -1 );
958   createMenu( GEOMOp::OpEdge,     buildId, -1 );
959   createMenu( GEOMOp::OpWire,     buildId, -1 );
960   createMenu( GEOMOp::OpFace,     buildId, -1 );
961   createMenu( GEOMOp::OpShell,    buildId, -1 );
962   createMenu( GEOMOp::OpSolid,    buildId, -1 );
963   createMenu( GEOMOp::OpCompound, buildId, -1 );
964   
965   createMenu( separator(),          newEntId, -1 );
966   
967   createMenu( GEOMOp::OpPictureImport, newEntId, -1 );
968 #ifdef WITH_OPENCV
969   createMenu( GEOMOp::OpFeatureDetect, newEntId, -1 );
970 #endif
971
972   int operId = createMenu( tr( "MEN_OPERATIONS" ), -1, -1, 10 );
973
974   int boolId = createMenu( tr( "MEN_BOOLEAN" ), operId, -1 );
975   createMenu( GEOMOp::OpFuse,    boolId, -1 );
976   createMenu( GEOMOp::OpCommon,  boolId, -1 );
977   createMenu( GEOMOp::OpCut,     boolId, -1 );
978   createMenu( GEOMOp::OpSection, boolId, -1 );
979
980   int transId = createMenu( tr( "MEN_TRANSFORMATION" ), operId, -1 );
981   createMenu( GEOMOp::OpTranslate,      transId, -1 );
982   createMenu( GEOMOp::OpRotate,         transId, -1 );
983   createMenu( GEOMOp::OpChangeLoc,      transId, -1 );
984   createMenu( GEOMOp::OpMirror,         transId, -1 );
985   createMenu( GEOMOp::OpScale,          transId, -1 );
986   createMenu( GEOMOp::OpOffset,         transId, -1 );
987   createMenu( GEOMOp::OpProjection,     transId, -1 );
988   createMenu( separator(),              transId, -1 );
989   createMenu( GEOMOp::OpMultiTranslate, transId, -1 );
990   createMenu( GEOMOp::OpMultiRotate,    transId, -1 );
991
992   int blockId = createMenu( tr( "MEN_BLOCKS" ), operId, -1 );
993   createMenu( GEOMOp::OpMultiTransform, blockId, -1 );
994   createMenu( GEOMOp::OpExplodeBlock,   blockId, -1 );
995   createMenu( GEOMOp::OpPropagate,      blockId, -1 );
996
997   createMenu( separator(), operId, -1 );
998
999   createMenu( GEOMOp::OpPartition,     operId, -1 );
1000   createMenu( GEOMOp::OpArchimede,     operId, -1 );
1001   createMenu( GEOMOp::OpShapesOnShape, operId, -1 );
1002   createMenu( GEOMOp::OpSharedShapes,  operId, -1 );
1003
1004   createMenu( separator(), operId, -1 );
1005
1006   createMenu( GEOMOp::OpFillet1d,      operId, -1 );
1007   createMenu( GEOMOp::OpFillet2d,      operId, -1 );
1008   createMenu( GEOMOp::OpFillet3d,      operId, -1 );
1009   createMenu( GEOMOp::OpChamfer,       operId, -1 );
1010   createMenu( GEOMOp::OpExtrudedBoss,  operId, -1 );
1011   createMenu( GEOMOp::OpExtrudedCut,   operId, -1 );
1012   //createMenu( GEOMOp::OpClipping,      operId, -1 );
1013
1014   int repairId = createMenu( tr( "MEN_REPAIR" ), -1, -1, 10 );
1015   createMenu( GEOMOp::OpShapeProcess,    repairId, -1 );
1016   createMenu( GEOMOp::OpSuppressFaces,   repairId, -1 );
1017   createMenu( GEOMOp::OpCloseContour,    repairId, -1 );
1018   createMenu( GEOMOp::OpRemoveIntWires,  repairId, -1 );
1019   createMenu( GEOMOp::OpSuppressHoles,   repairId, -1 );
1020   createMenu( GEOMOp::OpSewing,          repairId, -1 );
1021   createMenu( GEOMOp::OpGlueFaces,       repairId, -1 );
1022   createMenu( GEOMOp::OpGlueEdges,       repairId, -1 );
1023   createMenu( GEOMOp::OpLimitTolerance,  repairId, -1 );
1024   createMenu( GEOMOp::OpAddPointOnEdge,  repairId, -1 );
1025   //createMenu( GEOMOp::OpFreeBoundaries,  repairId, -1 );
1026   //createMenu( GEOMOp::OpFreeFaces,       repairId, -1 );
1027   createMenu( GEOMOp::OpOrientation,      repairId, -1 );
1028   createMenu( GEOMOp::OpRemoveExtraEdges, repairId, -1 );
1029
1030   int measurId = createMenu( tr( "MEN_MEASURES" ), -1, -1, 10 );
1031   createMenu( GEOMOp::OpPointCoordinates, measurId, -1 );
1032   createMenu( GEOMOp::OpProperties,       measurId, -1 );
1033   createMenu( separator(),                measurId, -1 );
1034   createMenu( GEOMOp::OpCenterMass,       measurId, -1 );
1035   createMenu( GEOMOp::OpInertia,          measurId, -1 );
1036   createMenu( GEOMOp::OpNormale,          measurId, -1 );
1037   createMenu( separator(),                measurId, -1 );
1038   createMenu( GEOMOp::OpFreeBoundaries,   measurId, -1 );
1039   createMenu( GEOMOp::OpFreeFaces,        measurId, -1 );
1040   createMenu( separator(),                measurId, -1 );
1041
1042   int dimId = createMenu( tr( "MEN_DIMENSIONS" ), measurId, -1 );
1043   createMenu( GEOMOp::OpBoundingBox, dimId, -1 );
1044   createMenu( GEOMOp::OpMinDistance, dimId, -1 );
1045   createMenu( GEOMOp::OpAngle,       dimId, -1 );
1046
1047   createMenu( separator(),               measurId, -1 );
1048   createMenu( GEOMOp::OpTolerance,       measurId, -1 );
1049   createMenu( separator(),               measurId, -1 );
1050   createMenu( GEOMOp::OpWhatIs,          measurId, -1 );
1051   createMenu( GEOMOp::OpCheckShape,      measurId, -1 );
1052   createMenu( GEOMOp::OpCheckCompound,   measurId, -1 );
1053   createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
1054
1055 #ifdef _DEBUG_ // PAL16821
1056   int toolsId = createMenu( tr( "MEN_TOOLS" ), -1, -1, 50 );
1057   createMenu( separator(),         toolsId, -1 );
1058   createMenu( GEOMOp::OpCheckGeom, toolsId, -1 );
1059 #endif
1060
1061   int viewId = createMenu( tr( "MEN_VIEW" ), -1, -1 );
1062   createMenu( separator(),       viewId, -1 );
1063
1064   int dispmodeId = createMenu( tr( "MEN_DISPLAY_MODE" ), viewId, -1 );
1065   createMenu( GEOMOp::OpDisplayMode,   dispmodeId, -1 );
1066   createMenu( separator(),             dispmodeId, -1 );
1067   createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
1068
1069   createMenu( separator(),       viewId, -1 );
1070   createMenu( GEOMOp::OpShowAll, viewId, -1 );
1071   createMenu( GEOMOp::OpHideAll, viewId, -1 );
1072   createMenu( separator(),       viewId, -1 );
1073   createMenu( GEOMOp::OpPublishObject, viewId, -1 );
1074   createMenu( separator(),       viewId, -1 );
1075
1076 /*
1077   PAL9111:
1078   because of these items are accessible through object browser and viewers
1079   we have removed they from main menu
1080
1081   createMenu( GEOMOp::OpShow, viewId, -1 );
1082   createMenu( GEOMOp::OpShowOnly, viewId, -1 );
1083   createMenu( GEOMOp::OpHide, viewId, -1 );
1084 */
1085
1086   // ---- create toolbars --------------------------
1087   
1088   int basicTbId = createTool( tr( "TOOL_BASIC" ) );
1089   createTool( GEOMOp::OpPoint,      basicTbId );
1090   createTool( GEOMOp::OpLine,       basicTbId );
1091   createTool( GEOMOp::OpCircle,     basicTbId );
1092   createTool( GEOMOp::OpEllipse,    basicTbId );
1093   createTool( GEOMOp::OpArc,        basicTbId );
1094   createTool( GEOMOp::OpCurve,      basicTbId );
1095   createTool( GEOMOp::OpVector,     basicTbId );
1096   createTool( GEOMOp::Op2dSketcher, basicTbId ); //rnc
1097   createTool( GEOMOp::Op3dSketcher, basicTbId ); //rnc
1098   createTool( GEOMOp::OpPlane,      basicTbId );
1099   createTool( GEOMOp::OpLCS,        basicTbId );
1100   createTool( GEOMOp::OpOriginAndVectors, basicTbId );
1101   
1102 //   int sketchTbId = createTool( tr( "TOOL_SKETCH" ) );
1103 //   createTool( GEOMOp::Op2dSketcher,  sketchTbId );
1104 //   createTool( GEOMOp::Op3dSketcher,  sketchTbId );
1105   
1106   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
1107   createTool( GEOMOp::OpBox,        primTbId );
1108   createTool( GEOMOp::OpCylinder,   primTbId );
1109   createTool( GEOMOp::OpSphere,     primTbId );
1110   createTool( GEOMOp::OpTorus,      primTbId );
1111   createTool( GEOMOp::OpCone,       primTbId );
1112   createTool( GEOMOp::OpRectangle,  primTbId );
1113   createTool( GEOMOp::OpDisk,       primTbId );
1114   createTool( GEOMOp::OpPipeTShape, primTbId ); //rnc
1115   
1116 //   int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) ); //rnc
1117 //   createTool( GEOMOp::OpPipeTShape, advancedTbId );
1118   
1119   int boolTbId = createTool( tr( "TOOL_BOOLEAN" ) );
1120   createTool( GEOMOp::OpFuse,       boolTbId );
1121   createTool( GEOMOp::OpCommon,     boolTbId );
1122   createTool( GEOMOp::OpCut,        boolTbId );
1123   createTool( GEOMOp::OpSection,    boolTbId );
1124   
1125    int genTbId = createTool( tr( "TOOL_GENERATION" ) );
1126   createTool( GEOMOp::OpPrism,      genTbId );
1127   createTool( GEOMOp::OpRevolution, genTbId );
1128   createTool( GEOMOp::OpFilling,    genTbId );
1129   createTool( GEOMOp::OpPipe,       genTbId );
1130   
1131   int transTbId = createTool( tr( "TOOL_TRANSFORMATION" ) );
1132   createTool( GEOMOp::OpTranslate,      transTbId );
1133   createTool( GEOMOp::OpRotate,         transTbId );
1134   createTool( GEOMOp::OpChangeLoc,      transTbId );
1135   createTool( GEOMOp::OpMirror,         transTbId );
1136   createTool( GEOMOp::OpScale,          transTbId );
1137   createTool( GEOMOp::OpOffset,         transTbId );
1138   createTool( GEOMOp::OpProjection,     transTbId );
1139   createTool( separator(),              transTbId );
1140   createTool( GEOMOp::OpMultiTranslate, transTbId );
1141   createTool( GEOMOp::OpMultiRotate,    transTbId );
1142   
1143   int operTbId = createTool( tr( "TOOL_OPERATIONS" ) );
1144   createTool( GEOMOp::OpExplode,         operTbId );
1145   createTool( GEOMOp::OpPartition,       operTbId );
1146   createTool( GEOMOp::OpArchimede,       operTbId );
1147   createTool( GEOMOp::OpShapesOnShape,   operTbId );
1148   createTool( GEOMOp::OpSharedShapes,    operTbId );
1149   
1150   int featTbId = createTool( tr( "TOOL_FEATURES" ) );
1151   createTool( GEOMOp::OpFillet1d,        featTbId );
1152   createTool( GEOMOp::OpFillet2d,        featTbId );
1153   createTool( GEOMOp::OpFillet3d,        featTbId );
1154   createTool( GEOMOp::OpChamfer,         featTbId );
1155   createTool( GEOMOp::OpExtrudedBoss,    featTbId );
1156   createTool( GEOMOp::OpExtrudedCut,     featTbId );
1157   
1158   int buildTbId = createTool( tr( "TOOL_BUILD" ) );
1159   createTool( GEOMOp::OpEdge,     buildTbId );
1160   createTool( GEOMOp::OpWire,     buildTbId );
1161   createTool( GEOMOp::OpFace,     buildTbId );
1162   createTool( GEOMOp::OpShell,    buildTbId );
1163   createTool( GEOMOp::OpSolid,    buildTbId );
1164   createTool( GEOMOp::OpCompound, buildTbId );
1165
1166   int measureTbId = createTool( tr( "TOOL_MEASURES" ) );
1167   createTool( GEOMOp::OpPointCoordinates, measureTbId );
1168   createTool( GEOMOp::OpProperties,       measureTbId );
1169   createTool( GEOMOp::OpCenterMass,       measureTbId );
1170   createTool( GEOMOp::OpInertia,          measureTbId );
1171   createTool( GEOMOp::OpNormale,          measureTbId );
1172   createTool( separator(),                measureTbId );
1173   createTool( GEOMOp::OpBoundingBox,      measureTbId );
1174   createTool( GEOMOp::OpMinDistance,      measureTbId );
1175   createTool( GEOMOp::OpAngle,            measureTbId );
1176   createTool( GEOMOp::OpTolerance  ,      measureTbId );
1177   createTool( separator(),                measureTbId );
1178   createTool( GEOMOp::OpFreeBoundaries,   measureTbId );
1179   createTool( GEOMOp::OpFreeFaces,        measureTbId );
1180   createTool( separator(),                measureTbId );
1181   createTool( GEOMOp::OpWhatIs,           measureTbId );
1182   createTool( GEOMOp::OpCheckShape,       measureTbId );
1183   createTool( GEOMOp::OpCheckCompound,    measureTbId );
1184   createTool( GEOMOp::OpCheckSelfInters,  measureTbId );
1185   
1186   int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );
1187   createTool( GEOMOp::OpPictureImport,    picturesTbId );
1188   #ifdef WITH_OPENCV
1189     createTool( GEOMOp::OpFeatureDetect,  picturesTbId );
1190   #endif
1191
1192   //@@ 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 @@//
1193
1194   // ---- create popup menus --------------------------
1195
1196   QString clientOCCorVTK = "(client='OCCViewer' or client='VTKViewer')";
1197   QString clientOCC = "(client='OCCViewer')";
1198   QString clientOCCorVTK_AndSomeVisible = clientOCCorVTK + " and selcount>0 and isVisible";
1199   QString clientOCC_AndSomeVisible = clientOCC + " and selcount>0 and isVisible";
1200
1201   QString clientOCCorOB = "(client='ObjectBrowser' or client='OCCViewer')";
1202   QString clientOCCorVTKorOB = "(client='ObjectBrowser' or client='OCCViewer' or client='VTKViewer')";
1203   QString clientOCCorVTKorOB_AndSomeVisible = clientOCCorVTKorOB + " and selcount>0 and isVisible";
1204   QString clientOCCorOB_AndSomeVisible = clientOCCorOB + " and selcount>0 and isVisible";
1205
1206   QString autoColorPrefix =
1207     "(client='ObjectBrowser' or client='OCCViewer') and type='Shape' and selcount=1 and isOCC=true";
1208
1209   QtxPopupMgr* mgr = popupMgr();
1210
1211   mgr->insert( action(  GEOMOp::OpDelete ), -1, -1 );  // delete
1212   mgr->setRule( action( GEOMOp::OpDelete ), QString("$type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1213   mgr->insert( action(  GEOMOp::OpGroupCreatePopup ), -1, -1 ); // create group
1214   mgr->setRule( action( GEOMOp::OpGroupCreatePopup ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1215   mgr->insert( action(  GEOMOp::OpShowChildren ), -1, -1 ); // show children
1216   mgr->setRule( action( GEOMOp::OpShowChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasHiddenChildren=true"), QtxPopupMgr::VisibleRule );
1217
1218   mgr->insert( action(  GEOMOp::OpHideChildren ), -1, -1 ); // hide children
1219   mgr->setRule( action( GEOMOp::OpHideChildren ), QString("client='ObjectBrowser' and type='Shape' and selcount=1 and hasShownChildren=true"), QtxPopupMgr::VisibleRule );
1220   mgr->insert( action(  GEOMOp::OpGroupEdit ), -1, -1 );  // edit group
1221   mgr->setRule( action( GEOMOp::OpGroupEdit ),  QString("client='ObjectBrowser' and type='Group' and selcount=1 and isOCC=true"), QtxPopupMgr::VisibleRule );
1222   mgr->insert( separator(), -1, -1 );     // -----------
1223
1224 #if OCC_VERSION_LARGE > 0x06050200
1225   //QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true and topLevel=false";
1226   QString bringRule = clientOCCorOB + " and ($component={'GEOM'}) and (selcount>0) and isOCC=true";
1227   mgr->insert( action(GEOMOp::OpBringToFront ), -1, -1 ); // bring to front
1228   mgr->setRule(action(GEOMOp::OpBringToFront), bringRule, QtxPopupMgr::VisibleRule );
1229   mgr->setRule(action(GEOMOp::OpBringToFront), "topLevel=true", QtxPopupMgr::ToggleRule );
1230   mgr->insert( action(GEOMOp::OpClsBringToFront ), -1, -1 ); // clear bring to front
1231   mgr->setRule( action(GEOMOp::OpClsBringToFront ), clientOCC, QtxPopupMgr::VisibleRule );  
1232 #endif
1233   mgr->insert( separator(), -1, -1 );     // -----------
1234   dispmodeId = mgr->insert(  tr( "MEN_DISPLAY_MODE" ), -1, -1 ); // display mode menu
1235   mgr->insert( action(  GEOMOp::OpWireframe ), dispmodeId, -1 ); // wireframe
1236   mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1237   mgr->setRule( action( GEOMOp::OpWireframe ), clientOCCorVTK + " and displaymode='Wireframe'", QtxPopupMgr::ToggleRule );
1238   mgr->insert( action(  GEOMOp::OpShading ), dispmodeId, -1 ); // shading
1239   mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1240   mgr->setRule( action( GEOMOp::OpShading ), clientOCCorVTK + " and displaymode='Shading'", QtxPopupMgr::ToggleRule );
1241   mgr->insert( action(  GEOMOp::OpShadingWithEdges ), dispmodeId, -1 ); // shading with edges
1242   mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1243   mgr->setRule( action( GEOMOp::OpShadingWithEdges ), clientOCCorVTK + " and displaymode='ShadingWithEdges'", QtxPopupMgr::ToggleRule );
1244   mgr->insert( action(  GEOMOp::OpTexture ), dispmodeId, -1 ); // wireframe
1245   mgr->setRule( action( GEOMOp::OpTexture ), clientOCC_AndSomeVisible, QtxPopupMgr::VisibleRule );
1246   mgr->setRule( action( GEOMOp::OpTexture), clientOCC + " and displaymode='Texture'", QtxPopupMgr::ToggleRule );
1247   mgr->insert( separator(), dispmodeId, -1 );
1248   mgr->insert( action(  GEOMOp::OpVectors ), dispmodeId, -1 ); // vectors
1249   mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1250   mgr->setRule( action( GEOMOp::OpVectors ), clientOCCorVTK + " and isVectorsMode", QtxPopupMgr::ToggleRule );
1251   mgr->insert( separator(), -1, -1 );     // -----------
1252   mgr->insert( action(  GEOMOp::OpColor ), -1, -1 ); // color
1253   mgr->setRule( action( GEOMOp::OpColor ), clientOCCorVTKorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1254   mgr->insert( action(  GEOMOp::OpTransparency ), -1, -1 ); // transparency
1255   mgr->setRule( action( GEOMOp::OpTransparency ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1256   mgr->insert( action(  GEOMOp::OpIsos ), -1, -1 ); // isos
1257   mgr->setRule( action( GEOMOp::OpIsos ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1258   mgr->insert( action(  GEOMOp::OpDeflection ), -1, -1 ); // deflection
1259   mgr->setRule( action( GEOMOp::OpDeflection ), clientOCCorVTK_AndSomeVisible + " and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1260   mgr->insert( action(  GEOMOp::OpPointMarker ), -1, -1 ); // point marker
1261   //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
1262   mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
1263   mgr->insert( action(  GEOMOp::OpMaterialProperties ), -1, -1 ); // material properties  
1264   mgr->setRule( action( GEOMOp::OpMaterialProperties ), clientOCCorVTK_AndSomeVisible + " and ($component={'GEOM'}) and selcount>0 and isVisible", QtxPopupMgr::VisibleRule );
1265   mgr->insert( action(  GEOMOp::OpSetTexture ), -1, -1 ); // texture
1266   mgr->setRule( action( GEOMOp::OpSetTexture ), clientOCCorOB_AndSomeVisible + " and ($component={'GEOM'})", QtxPopupMgr::VisibleRule );
1267
1268   int lineW = mgr->insert(  tr( "MEN_LINE_WIDTH" ), -1, -1 ); // line width menu
1269   mgr->insert( action(  GEOMOp::OpEdgeWidth ), lineW, -1 ); // edge width
1270   mgr->setRule( action( GEOMOp::OpEdgeWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1271
1272   mgr->insert( action(  GEOMOp::OpIsosWidth ), lineW, -1 ); // isos width
1273   mgr->setRule( action( GEOMOp::OpIsosWidth ), clientOCCorVTK_AndSomeVisible, QtxPopupMgr::VisibleRule );
1274   
1275   mgr->insert( separator(), -1, -1 );     // -----------
1276   mgr->insert( action(  GEOMOp::OpAutoColor ), -1, -1 ); // auto color
1277   mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
1278   mgr->insert( action(  GEOMOp::OpNoAutoColor ), -1, -1 ); // disable auto color
1279   mgr->setRule( action( GEOMOp::OpNoAutoColor ), autoColorPrefix + " and isAutoColor=true", QtxPopupMgr::VisibleRule );
1280   mgr->insert( separator(), -1, -1 );     // -----------
1281
1282   QString canDisplay = "($component={'GEOM'}) and (selcount>0) and ({true} in $canBeDisplayed) ",
1283           onlyComponent = "((type='Component') and selcount=1)",
1284           rule = canDisplay + "and ((($type in {%1}) and( %2 )) or " + onlyComponent + ")",
1285           types = "'Shape' 'Group'";
1286
1287   mgr->insert( action(  GEOMOp::OpShow ), -1, -1 ); // display
1288   mgr->setRule( action( GEOMOp::OpShow ), rule.arg( types ).arg( "not isVisible" ), QtxPopupMgr::VisibleRule );
1289
1290   mgr->insert( action(  GEOMOp::OpHide ), -1, -1 ); // erase
1291   mgr->setRule( action( GEOMOp::OpHide ), rule.arg( types ).arg( "isVisible" ), QtxPopupMgr::VisibleRule );
1292
1293   mgr->insert( action(  GEOMOp::OpHideAll ), -1, -1 ); // erase All
1294   mgr->setRule( action( GEOMOp::OpHideAll ), clientOCCorVTK, QtxPopupMgr::VisibleRule );
1295
1296   QString selectOnly = "(client='OCCViewer' or client='VTKViewer') and (selcount=0)";
1297
1298   int selectonlyId = mgr->insert( tr("MEN_SELECT_ONLY"), -1, -1);                //select only menu
1299   mgr->insert( action(GEOMOp::OpSelectVertex),   selectonlyId, -1);                                  //Vertex
1300   mgr->setRule(action(GEOMOp::OpSelectVertex),   selectOnly, QtxPopupMgr::VisibleRule);
1301   mgr->setRule(action(GEOMOp::OpSelectVertex),   selectOnly + " and selectionmode='VERTEX'", QtxPopupMgr::ToggleRule);
1302   mgr->insert( action(GEOMOp::OpSelectEdge),     selectonlyId, -1);                                  //Edge
1303   mgr->setRule(action(GEOMOp::OpSelectEdge),     selectOnly, QtxPopupMgr::VisibleRule);
1304   mgr->setRule(action(GEOMOp::OpSelectEdge),     selectOnly + " and selectionmode='EDGE'", QtxPopupMgr::ToggleRule);
1305   mgr->insert( action(GEOMOp::OpSelectWire),     selectonlyId, -1);                                  //Wire
1306   mgr->setRule(action(GEOMOp::OpSelectWire),     selectOnly, QtxPopupMgr::VisibleRule);
1307   mgr->setRule(action(GEOMOp::OpSelectWire),     selectOnly + " and selectionmode='WIRE'", QtxPopupMgr::ToggleRule);
1308   mgr->insert( action(GEOMOp::OpSelectFace),     selectonlyId, -1);                                  //Face
1309   mgr->setRule(action(GEOMOp::OpSelectFace),     selectOnly, QtxPopupMgr::VisibleRule);
1310   mgr->setRule(action(GEOMOp::OpSelectFace),     selectOnly + " and selectionmode='FACE'", QtxPopupMgr::ToggleRule);
1311   mgr->insert( action(GEOMOp::OpSelectShell),    selectonlyId, -1);                                  //Shell
1312   mgr->setRule(action(GEOMOp::OpSelectShell),    selectOnly, QtxPopupMgr::VisibleRule);
1313   mgr->setRule(action(GEOMOp::OpSelectShell),    selectOnly + " and selectionmode='SHELL'", QtxPopupMgr::ToggleRule);
1314   mgr->insert( action(GEOMOp::OpSelectSolid),    selectonlyId, -1);                                  //Solid
1315   mgr->setRule(action(GEOMOp::OpSelectSolid),    selectOnly, QtxPopupMgr::VisibleRule);
1316   mgr->setRule(action(GEOMOp::OpSelectSolid),    selectOnly + " and selectionmode='SOLID'", QtxPopupMgr::ToggleRule);
1317   mgr->insert( action(GEOMOp::OpSelectCompound), selectonlyId, -1);                                  //Compound
1318   mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly, QtxPopupMgr::VisibleRule);
1319   mgr->setRule(action(GEOMOp::OpSelectCompound), selectOnly + " and selectionmode='COMPOUND'", QtxPopupMgr::ToggleRule);
1320   mgr->insert( separator(), selectonlyId, -1);
1321   mgr->insert( action(GEOMOp::OpSelectAll),      selectonlyId, -1);                                  //Clear selection filter
1322   mgr->setRule(action(GEOMOp::OpSelectAll),      selectOnly, QtxPopupMgr::VisibleRule);
1323   mgr->setRule(action(GEOMOp::OpSelectAll),      selectOnly + " and selectionmode='ALL'", QtxPopupMgr::ToggleRule);
1324   mgr->insert( action(GEOMOp::OpShowOnly ), -1, -1 ); // display only
1325   mgr->setRule(action(GEOMOp::OpShowOnly ), rule.arg( types ).arg( "true" ), QtxPopupMgr::VisibleRule );
1326
1327   mgr->insert( separator(), -1, -1 );     // -----------
1328   mgr->insert( action(  GEOMOp::OpUnpublishObject ), -1, -1 ); // Unpublish object
1329   mgr->setRule( action( GEOMOp::OpUnpublishObject ), QString("client='ObjectBrowser' and $type in {'Shape' 'Group'} and selcount>0"), QtxPopupMgr::VisibleRule );
1330
1331
1332   mgr->insert( action(  GEOMOp::OpPublishObject ), -1, -1 ); // Publish object
1333   mgr->setRule( action( GEOMOp::OpPublishObject ), QString("client='ObjectBrowser' and isComponent=true"), QtxPopupMgr::VisibleRule );
1334
1335   mgr->insert( action(  GEOMOp::OpReimport ), -1, -1 );  // delete
1336   mgr->setRule( action( GEOMOp::OpReimport ), QString("$imported in {'true'} and selcount>0"), QtxPopupMgr::VisibleRule );
1337
1338   mgr->hide( mgr->actionId( action( myEraseAll ) ) );
1339 }
1340
1341 //=======================================================================
1342 // function : GeometryGUI::activateModule()
1343 // purpose  : Called when GEOM module is activated
1344 //=======================================================================
1345 bool GeometryGUI::activateModule( SUIT_Study* study )
1346 {
1347   if ( CORBA::is_nil( myComponentGeom ) )
1348     return false;
1349
1350   bool res = SalomeApp_Module::activateModule( study );
1351
1352   if ( !res )
1353     return false;
1354   setMenuShown( true );
1355   setToolShown( true );
1356
1357   // import Python module that manages GEOM plugins (need to be here because SalomePyQt API uses active module)
1358   PyGILState_STATE gstate = PyGILState_Ensure();
1359   PyObject* pluginsmanager=PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager");
1360   if(pluginsmanager==NULL)
1361     PyErr_Print();
1362   else
1363     {
1364       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());
1365       if(result==NULL)
1366         PyErr_Print();
1367       Py_XDECREF(result);
1368     }
1369   PyGILState_Release(gstate);
1370   // end of GEOM plugins loading
1371
1372   connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1373           this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1374
1375   // Reset actions accelerator keys
1376   action(GEOMOp::OpImport)->setEnabled( true ); // Import: CTRL + Key_I
1377   action(GEOMOp::OpExport)->setEnabled( true ); // Export: CTRL + Key_E
1378   action(GEOMOp::OpDelete)->setEnabled( true ); // Delete: Key_Delete
1379
1380   GUIMap::Iterator it;
1381   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1382     it.value()->activate( application()->desktop() );
1383
1384   LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1385
1386   SUIT_ViewManager* vm;
1387   ViewManagerList OCCViewManagers, VTKViewManagers;
1388
1389   application()->viewManagers( OCCViewer_Viewer::Type(), OCCViewManagers );
1390   QListIterator<SUIT_ViewManager*> itOCC( OCCViewManagers );
1391   while ( itOCC.hasNext() && (vm = itOCC.next()) )
1392     myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1393
1394   application()->viewManagers( SVTK_Viewer::Type(), VTKViewManagers );
1395   QListIterator<SUIT_ViewManager*> itVTK( VTKViewManagers );
1396   while ( itVTK.hasNext() && (vm = itVTK.next()) )
1397     myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1398
1399   //NPAL 19674
1400   SALOME_ListIO selected;
1401   sm->selectedObjects( selected );
1402   sm->clearSelected();
1403
1404   // disable OCC selectors
1405   getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1406   QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1407   while ( itOCCSel.hasNext() )
1408     if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1409       sr->setEnabled(true);
1410
1411   // disable VTK selectors
1412   getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1413   QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1414   while ( itVTKSel.hasNext() )
1415     if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1416       sr->setEnabled(true);
1417
1418   sm->setSelectedObjects( selected, true );   //NPAL 19674
1419
1420   QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1421   if ( viewMenu )
1422     connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1423
1424   // 0020836 (Basic vectors and origin)
1425   SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1426   if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
1427     SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
1428     if( appStudy ) {
1429       _PTR(Study) studyDS = appStudy->studyDS();
1430       if( studyDS ) {
1431         _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1432         if( !aSComponent ) // create objects automatically only if there is no GEOM component
1433           createOriginAndBaseVectors();
1434       }
1435     }
1436   }
1437
1438   return true;
1439 }
1440
1441
1442 //=======================================================================
1443 // function : GeometryGUI::deactivateModule()
1444 // purpose  : Called when GEOM module is deactivated
1445 //=======================================================================
1446 bool GeometryGUI::deactivateModule( SUIT_Study* study )
1447 {
1448   QMenu* viewMenu = menuMgr()->findMenu( STD_Application::MenuViewId );
1449   if ( viewMenu )
1450     disconnect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
1451
1452   setMenuShown( false );
1453   setToolShown( false );
1454
1455   disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
1456              this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ) );
1457
1458   EmitSignalCloseAllDialogs();
1459
1460   GUIMap::Iterator it;
1461   for ( it = myGUIMap.begin(); it != myGUIMap.end(); ++it )
1462     it.value()->deactivate();
1463
1464   // Unset actions accelerator keys
1465   action(GEOMOp::OpImport)->setEnabled( false ); // Import: CTRL + Key_I
1466   action(GEOMOp::OpExport)->setEnabled( false ); // Export: CTRL + Key_E
1467   action(GEOMOp::OpDelete)->setEnabled( false ); // Delete: Key_Delete
1468
1469   qDeleteAll(myOCCSelectors);
1470   myOCCSelectors.clear();
1471   getApp()->selectionMgr()->setEnabled( true, OCCViewer_Viewer::Type() );
1472
1473   qDeleteAll(myVTKSelectors);
1474   myVTKSelectors.clear();
1475   getApp()->selectionMgr()->setEnabled( true, SVTK_Viewer::Type() );
1476
1477   return SalomeApp_Module::deactivateModule( study );
1478 }
1479
1480 //=======================================================================
1481 // function : onWindowActivated()
1482 // purpose  : update menu items' status - disable non-OCC-viewer-compatible actions
1483 //=======================================================================
1484 void GeometryGUI::onWindowActivated( SUIT_ViewWindow* win )
1485 {
1486   if ( !win )
1487     return;
1488
1489   const bool ViewOCC = ( win->getViewManager()->getType() == OCCViewer_Viewer::Type() );
1490   //const bool ViewVTK = ( win->getViewManager()->getType() == SVTK_Viewer::Type() );
1491
1492   // disable non-OCC viewframe menu commands
1493 //  action( GEOMOp::Op2dSketcher )->setEnabled( ViewOCC ); // SKETCHER
1494   action( GEOMOp::OpSuppressFaces )->setEnabled( ViewOCC ); // SuppressFace
1495   action( GEOMOp::OpSuppressHoles )->setEnabled( ViewOCC ); // SuppressHole
1496   action( GEOMOp::OpCloseContour )->setEnabled( ViewOCC ); // CloseContour
1497   action( GEOMOp::OpRemoveIntWires )->setEnabled( ViewOCC ); // RemoveInternalWires
1498   action( GEOMOp::OpAddPointOnEdge )->setEnabled( ViewOCC ); // AddPointOnEdge
1499 //  action( GEOMOp::OpFreeBoundaries )->setEnabled( ViewOCC ); // Free boundaries
1500
1501   action( GEOMOp::OpGroupCreate )->setEnabled( ViewOCC ); // Create Group
1502   action( GEOMOp::OpGroupEdit )->setEnabled( ViewOCC ); // Edit Group
1503
1504   action( GEOMOp::OpMultiTransform )->setEnabled( ViewOCC ); // MENU BLOCKS - MULTI-TRANSFORMATION
1505 }
1506
1507 void GeometryGUI::windows( QMap<int, int>& mappa ) const
1508 {
1509   mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea );
1510   mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea );
1511 }
1512
1513 void GeometryGUI::viewManagers( QStringList& lst ) const
1514 {
1515   lst.append( OCCViewer_Viewer::Type() );
1516 }
1517
1518 void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
1519 {
1520   if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
1521   {
1522     qDebug( "connect" );
1523     connect( vm, SIGNAL( keyPress  ( SUIT_ViewWindow*, QKeyEvent* ) ),
1524              this, SLOT( OnKeyPress( SUIT_ViewWindow*, QKeyEvent* ) ) );
1525     connect( vm, SIGNAL( mousePress( SUIT_ViewWindow*, QMouseEvent* ) ),
1526              this, SLOT( OnMousePress( SUIT_ViewWindow*, QMouseEvent* ) ) );
1527     connect( vm, SIGNAL( mouseMove ( SUIT_ViewWindow*, QMouseEvent* ) ),
1528              this, SLOT( OnMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
1529     connect( vm, SIGNAL( mouseRelease ( SUIT_ViewWindow*, QMouseEvent* ) ),
1530              this, SLOT( OnMouseRelease( SUIT_ViewWindow*, QMouseEvent* ) ) );
1531     
1532     LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1533     myOCCSelectors.append( new GEOMGUI_OCCSelector( ((OCCViewer_ViewManager*)vm)->getOCCViewer(), sm ) );
1534
1535     // disable OCC selectors
1536     getApp()->selectionMgr()->setEnabled( false, OCCViewer_Viewer::Type() );
1537     QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1538     while ( itOCCSel.hasNext() )
1539       if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1540         sr->setEnabled(true);
1541   }
1542   else if ( vm->getType() == SVTK_Viewer::Type() )
1543   {
1544     LightApp_SelectionMgr* sm = getApp()->selectionMgr();
1545     myVTKSelectors.append( new LightApp_VTKSelector( dynamic_cast<SVTK_Viewer*>( vm->getViewModel() ), sm ) );
1546
1547     // disable VTK selectors
1548     getApp()->selectionMgr()->setEnabled( false, SVTK_Viewer::Type() );
1549     QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1550     while ( itVTKSel.hasNext() )
1551       if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1552         sr->setEnabled(true);
1553   }
1554 }
1555
1556 void GeometryGUI::onViewManagerRemoved( SUIT_ViewManager* vm )
1557 {
1558   SUIT_ViewModel* viewer = vm->getViewModel();
1559   if ( vm->getType() == OCCViewer_Viewer::Type() )
1560   {
1561     QListIterator<GEOMGUI_OCCSelector*> itOCCSel( myOCCSelectors );
1562     while ( itOCCSel.hasNext() )
1563       if ( GEOMGUI_OCCSelector* sr = itOCCSel.next() )
1564         if ( sr->viewer() == viewer )
1565         {
1566           delete myOCCSelectors.takeAt( myOCCSelectors.indexOf( sr ) );
1567           break;
1568         }
1569   }
1570   if ( vm->getType() == SVTK_Viewer::Type() )
1571   {
1572     QListIterator<LightApp_VTKSelector*> itVTKSel( myVTKSelectors );
1573     while ( itVTKSel.hasNext() )
1574       if ( LightApp_VTKSelector* sr = itVTKSel.next() )
1575         if ( sr->viewer() == viewer )
1576         {
1577           delete myVTKSelectors.takeAt( myVTKSelectors.indexOf( sr ) );
1578           break;
1579         }
1580   }
1581 }
1582
1583 QString GeometryGUI::engineIOR() const
1584 {
1585   if ( !CORBA::is_nil( GetGeomGen() ) )
1586     return QString( getApp()->orb()->object_to_string( GetGeomGen() ) );
1587   return "";
1588 }
1589
1590 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1591 Handle(TColStd_HArray1OfByte) GeometryGUI::getTexture
1592 #else
1593 Handle(Graphic3d_HArray1OfBytes) GeometryGUI::getTexture
1594 #endif
1595       (SalomeApp_Study* theStudy, int theId, int& theWidth, int& theHeight)
1596 {
1597   theWidth = theHeight = 0;
1598
1599 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1600   Handle(TColStd_HArray1OfByte) aTexture;
1601 #else
1602   Handle(Graphic3d_HArray1OfBytes) aTexture;
1603 #endif
1604
1605   if (theStudy) {
1606     TextureMap aTextureMap = myTextureMap[ theStudy->studyDS()->StudyId() ];
1607     aTexture = aTextureMap[ theId ];
1608     if ( aTexture.IsNull() ) {
1609       GEOM::GEOM_IInsertOperations_var aInsOp = GeometryGUI::GetGeomGen()->GetIInsertOperations( theStudy->studyDS()->StudyId() );
1610       if ( !aInsOp->_is_nil() ) {
1611         CORBA::Long aWidth, aHeight;
1612         SALOMEDS::TMPFile_var aStream = aInsOp->GetTexture( theId, aWidth, aHeight );
1613         if ( aWidth > 0 && aHeight > 0 && aStream->length() > 0 ) {
1614           theWidth  = aWidth;
1615           theHeight = aHeight;
1616
1617 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
1618           aTexture  = new TColStd_HArray1OfByte (1, aStream->length());
1619 #else
1620           aTexture  = new Graphic3d_HArray1OfBytes (1, aStream->length());
1621 #endif
1622
1623           for (int i = 0; i < aStream->length(); i++)
1624             aTexture->SetValue( i+1, (Standard_Byte)aStream[i] );
1625           aTextureMap[ theId ] = aTexture;
1626         }
1627       }
1628     }
1629   }
1630   return aTexture;
1631 }
1632
1633 LightApp_Selection* GeometryGUI::createSelection() const
1634 {
1635   return new GEOMGUI_Selection();
1636 }
1637
1638 void GeometryGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& title )
1639 {
1640   SalomeApp_Module::contextMenuPopup( client, menu, title );
1641
1642   /*
1643   SALOME_ListIO lst;
1644   getApp()->selectionMgr()->selectedObjects(lst);
1645   if (lst.Extent() < 1)
1646     return;
1647
1648   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1649   _PTR(Study) study = appStudy->studyDS();
1650
1651   bool isImported = true;
1652   SALOME_ListIteratorOfListIO anIt (lst);
1653   for (; anIt.More() && isImported; anIt.Next()) {
1654     Handle(SALOME_InteractiveObject) io = anIt.Value();
1655     _PTR(SObject) aSObj = study->FindObjectID(io->getEntry());
1656     if (aSObj) {
1657       if (lst.Extent() == 1) {
1658         // Set context menu title
1659         if (client == "OCCViewer" || client == "VTKViewer")
1660           title = QString(aSObj->GetName().c_str());
1661       }
1662
1663       CORBA::Object_var anObj = GeometryGUI::ClientSObjectToObject(aSObj);
1664       GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(anObj);
1665       if (CORBA::is_nil(aGeomObj) || aGeomObj->GetType() != GEOM_IMPORT)
1666         isImported = false;
1667     } else {
1668       isImported = false;
1669     }
1670   }
1671
1672   if (isImported) {
1673     menu->addAction(action(GEOMOp::OpReimport)); // Reload imported shape
1674   }
1675   */
1676 }
1677
1678 void GeometryGUI::createPreferences()
1679 {
1680   int tabId = addPreference( tr( "PREF_TAB_SETTINGS" ) );
1681
1682   int genGroup = addPreference( tr( "PREF_GROUP_GENERAL" ), tabId );
1683   setPreferenceProperty( genGroup, "columns", 2 );
1684
1685   int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), genGroup,
1686                                 LightApp_Preferences::Selector,
1687                                 "Geometry", "display_mode" );
1688
1689   addPreference( tr( "PREF_SHADING_COLOR" ), genGroup,
1690                  LightApp_Preferences::Color, "Geometry", "shading_color" );
1691
1692   addPreference( tr( "PREF_EDGES_IN_SHADING" ), genGroup,
1693                  LightApp_Preferences::Color, "Geometry", "edges_in_shading_color" );
1694
1695   addPreference( tr( "PREF_WIREFRAME_COLOR" ), genGroup,
1696                  LightApp_Preferences::Color, "Geometry", "wireframe_color" );
1697
1698   addPreference( tr( "PREF_FREE_BOUND_COLOR" ), genGroup,
1699                  LightApp_Preferences::Color, "Geometry", "free_bound_color" );
1700
1701   addPreference( tr( "PREF_LINE_COLOR"), genGroup,
1702                  LightApp_Preferences::Color, "Geometry", "line_color" );
1703
1704   addPreference( tr( "PREF_POINT_COLOR"), genGroup,
1705                  LightApp_Preferences::Color, "Geometry", "point_color" );
1706
1707   addPreference( tr( "PREF_ISOS_COLOR" ), genGroup,
1708                  LightApp_Preferences::Color, "Geometry", "isos_color" );
1709
1710   addPreference( tr( "PREF_TOPLEVEL_COLOR" ), genGroup,
1711                  LightApp_Preferences::Color, "Geometry", "toplevel_color" );
1712
1713   addPreference( "", genGroup, LightApp_Preferences::Space );
1714
1715
1716   int step = addPreference( tr( "PREF_STEP_VALUE" ), genGroup,
1717                             LightApp_Preferences::IntSpin, "Geometry", "SettingsGeomStep" );
1718
1719   int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
1720                             LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );
1721
1722   int front_material = addPreference( tr( "PREF_FRONT_MATERIAL" ), genGroup,
1723                                       LightApp_Preferences::Selector,
1724                                       "Geometry", "front_material" );
1725   
1726   int back_material = addPreference( tr( "PREF_BACK_MATERIAL" ), genGroup,
1727                                      LightApp_Preferences::Selector,
1728                                      "Geometry", "back_material" );
1729
1730   const int nb = 4;
1731   int wd[nb];
1732   int iter=0;
1733
1734   wd[iter++] = addPreference( tr( "PREF_EDGE_WIDTH" ), genGroup,
1735                               LightApp_Preferences::IntSpin, "Geometry", "edge_width" );
1736
1737   wd[iter++] = addPreference( tr( "PREF_ISOLINES_WIDTH" ), genGroup,
1738                               LightApp_Preferences::IntSpin, "Geometry", "isolines_width" );
1739
1740   wd[iter++] = addPreference( tr( "PREF_PREVIEW_EDGE_WIDTH" ), genGroup,
1741                                      LightApp_Preferences::IntSpin, "Geometry", "preview_edge_width" );
1742   
1743   wd[iter++] = addPreference( tr( "PREF_MEASURES_LINE_WIDTH" ), genGroup,
1744                               LightApp_Preferences::IntSpin, "Geometry", "measures_line_width" );
1745
1746   for(int i = 0; i < nb; i++) {
1747     setPreferenceProperty( wd[i], "min", 1 );    
1748     setPreferenceProperty( wd[i], "max", 5 );
1749   }
1750
1751
1752   // Quantities with individual precision settings
1753   int precGroup = addPreference( tr( "GEOM_PREF_GROUP_PRECISION" ), tabId );
1754   setPreferenceProperty( precGroup, "columns", 2 );
1755
1756   const int nbQuantities = 8;
1757   int prec[nbQuantities], ii = 0;
1758   prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
1759                               LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
1760   prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
1761                               LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
1762   prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
1763                               LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
1764   prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
1765                               LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
1766   prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
1767                               LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
1768   prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
1769                               LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
1770   prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
1771                               LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
1772   prec[ii  ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
1773                               LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
1774
1775   // Set property for precision value for spinboxes
1776   for ( ii = 0; ii < nbQuantities; ii++ ){
1777     setPreferenceProperty( prec[ii], "min", -14 );
1778     setPreferenceProperty( prec[ii], "max", 14 );
1779     setPreferenceProperty( prec[ii], "precision", 2 );
1780   }
1781
1782   int VertexGroup = addPreference( tr( "PREF_GROUP_VERTEX" ), tabId );
1783   setPreferenceProperty( VertexGroup, "columns", 2 );
1784
1785   int typeOfMarker = addPreference( tr( "PREF_TYPE_OF_MARKER" ), VertexGroup,
1786                                     LightApp_Preferences::Selector, "Geometry", "type_of_marker" );
1787
1788   int markerScale = addPreference( tr( "PREF_MARKER_SCALE" ), VertexGroup,
1789                                    LightApp_Preferences::Selector, "Geometry", "marker_scale" );
1790
1791   // Set property for default display mode
1792   QStringList aModesList;
1793   aModesList.append( tr("MEN_WIREFRAME") );
1794   aModesList.append( tr("MEN_SHADING") );
1795   aModesList.append( tr("MEN_SHADING_WITH_EDGES") );
1796
1797   QList<QVariant> anIndexesList;
1798   anIndexesList.append(0);
1799   anIndexesList.append(1);
1800   anIndexesList.append(2);
1801
1802   setPreferenceProperty( dispmode, "strings", aModesList );
1803   setPreferenceProperty( dispmode, "indexes", anIndexesList );
1804
1805   // Set property for step value for spinboxes
1806   setPreferenceProperty( step, "min", 1 );
1807   setPreferenceProperty( step, "max", 10000 );
1808   setPreferenceProperty( step, "precision", 3 );
1809
1810   // Set property for deflection value for spinboxes
1811   setPreferenceProperty( defl, "min", DEFLECTION_MIN );
1812   setPreferenceProperty( defl, "max", 1.0 );
1813   setPreferenceProperty( defl, "step", 1.0e-04 );
1814   setPreferenceProperty( defl, "precision", 6 );
1815
1816   // Set property for default material
1817   Material_ResourceMgr aMatResMgr;
1818   QStringList aPrefMatNames = aMatResMgr.getPreferenceMaterialsNames();
1819   setPreferenceProperty( front_material, "strings", aPrefMatNames );
1820   setPreferenceProperty( back_material, "strings", aPrefMatNames );
1821
1822   // Set property vertex marker type
1823   QList<QVariant> aMarkerTypeIndicesList;
1824   QList<QVariant> aMarkerTypeIconsList;
1825
1826   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
1827   for ( int i = GEOM::MT_POINT; i < GEOM::MT_USER; i++ ) {
1828     QString icoFile = QString( "ICON_VERTEX_MARKER_%1" ).arg( i );
1829     QPixmap pixmap = resMgr->loadPixmap( "GEOM", tr( qPrintable( icoFile ) ) );
1830     aMarkerTypeIndicesList << (i-1);
1831     aMarkerTypeIconsList << pixmap;
1832   }
1833
1834   setPreferenceProperty( typeOfMarker, "indexes", aMarkerTypeIndicesList );
1835   setPreferenceProperty( typeOfMarker, "icons",   aMarkerTypeIconsList );
1836
1837   // Set property for vertex marker scale
1838   QList<QVariant> aMarkerScaleIndicesList;
1839   QStringList     aMarkerScaleValuesList;
1840
1841   for ( int iii = GEOM::MS_10; iii <= GEOM::MS_70; iii++ ) {
1842     aMarkerScaleIndicesList << iii;
1843     aMarkerScaleValuesList  << QString::number( (iii-(int)GEOM::MS_10)*0.5 + 1.0 );
1844   }
1845
1846   setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
1847   setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
1848
1849   int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
1850   setPreferenceProperty( originGroup, "columns", 2 );
1851
1852   int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
1853                                          LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
1854   setPreferenceProperty( baseVectorsLength, "min", 0.01 );
1855   setPreferenceProperty( baseVectorsLength, "max", 1000 );
1856
1857   addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
1858                  LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
1859
1860
1861   int operationsGroup = addPreference( tr( "PREF_GROUP_OPERATIONS" ), tabId );
1862   setPreferenceProperty( operationsGroup, "columns", 2 );
1863
1864   addPreference( tr( "GEOM_PREVIEW" ), operationsGroup,
1865                  LightApp_Preferences::Bool, "Geometry", "geom_preview" );
1866 }
1867
1868 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
1869 {
1870   if (section == "Geometry") {
1871     SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
1872     if (param == QString("SettingsGeomStep")) {
1873       double spin_step = aResourceMgr->doubleValue(section, param, 100.);
1874       EmitSignalDefaultStepValueChanged(spin_step);
1875     }
1876   }
1877 }
1878
1879 LightApp_Displayer* GeometryGUI::displayer()
1880 {
1881   if( !myDisplayer )
1882     myDisplayer = new GEOM_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
1883   return myDisplayer;
1884 }
1885
1886 void GeometryGUI::setLocalSelectionMode(const int mode)
1887 {
1888   myLocalSelectionMode = mode;
1889 }
1890 int GeometryGUI::getLocalSelectionMode() const
1891 {
1892   return myLocalSelectionMode;
1893 }
1894
1895 const char gSeparator = '_'; // character used to separate parameter names
1896 const char gDigitsSep = ':'; // character used to separate numeric parameter values (color = r:g:b)
1897
1898 /*!
1899  * \brief Store visual parameters
1900  *
1901  * This method is called just before the study document is saved.
1902  * Store visual parameters in AttributeParameter attribute(s)
1903  */
1904 void GeometryGUI::storeVisualParameters (int savePoint)
1905 {
1906   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
1907   if ( !appStudy || !appStudy->studyDS() )
1908     return;
1909   _PTR(Study) studyDS = appStudy->studyDS();
1910
1911   // componentName is used for encoding of entries when storing them in IParameters
1912   std::string componentName = myComponentGeom->ComponentDataType();
1913   //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
1914   //if (!aSComponent) return;
1915
1916   // IParameters
1917   _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
1918                                                              componentName.c_str(),
1919                                                              savePoint);
1920   _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
1921
1922   QList<SUIT_ViewManager*> lst;
1923   QList<SUIT_ViewManager*>::Iterator it;
1924
1925   // main cycle to store parameters of displayed objects
1926   lst.clear();
1927   getApp()->viewManagers(lst);
1928   for (it = lst.begin(); it != lst.end(); it++) {
1929     SUIT_ViewManager* vman = *it;
1930     QString vType = vman->getType();
1931     int aMgrId = vman->getGlobalId();
1932     // saving VTK actors properties
1933     QVector<SUIT_ViewWindow*> views = vman->getViews();
1934     for (int i = 0, iEnd = vman->getViewsCount(); i < iEnd; i++) {
1935       const ObjMap anObjects = appStudy->getObjectMap(aMgrId);
1936       ObjMap::ConstIterator o_it = anObjects.begin();
1937       for (; o_it != anObjects.end(); o_it++) {
1938         const PropMap aProps = o_it.value();
1939
1940         //Check that object exists in the study
1941         _PTR(SObject) obj( studyDS->FindObjectID( o_it.key().toLatin1().data() ) );
1942         if ( !obj || !(aProps.count() > 0))
1943           continue;
1944         // entry is "encoded" = it does NOT contain component adress, since it is a
1945         // subject to change on next component loading
1946
1947         std::string entry = ip->encodeEntry(o_it.key().toLatin1().data(), componentName);
1948
1949         _PTR(GenericAttribute) anAttr;
1950         if( !obj->FindAttribute(anAttr, "AttributeIOR"))
1951           continue;
1952
1953         std::string param,occParam = vType.toLatin1().data();
1954         occParam += NAME_SEPARATOR;
1955         occParam += QString::number(aMgrId).toLatin1().data();
1956         occParam += NAME_SEPARATOR;
1957
1958         if(aProps.contains(VISIBILITY_PROP)) {
1959           param = occParam + VISIBILITY_PROP;
1960           ip->setParameter(entry, param, aProps.value(VISIBILITY_PROP).toInt() == 1 ? "On" : "Off");
1961         }
1962
1963         if(aProps.contains(DISPLAY_MODE_PROP)) {
1964           param = occParam + DISPLAY_MODE_PROP;
1965           ip->setParameter(entry, param, QString::number(aProps.value(DISPLAY_MODE_PROP).toInt()).toLatin1().data());
1966         }
1967
1968         if(aProps.contains(COLOR_PROP)) {
1969           QColor c = aProps.value(COLOR_PROP).value<QColor>();
1970           QString colorStr = QString::number(c.red()/255.);
1971           colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.green()/255.);
1972           colorStr += DIGIT_SEPARATOR; colorStr += QString::number(c.blue()/255.);
1973           param = occParam + COLOR_PROP;
1974           ip->setParameter(entry, param, colorStr.toLatin1().data());
1975         }
1976
1977         if(vType == SVTK_Viewer::Type()) {
1978           if(aProps.contains(OPACITY_PROP)) {
1979             param = occParam + OPACITY_PROP;
1980             ip->setParameter(entry, param, QString::number(1. - aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1981           }
1982         } else if (vType == SOCC_Viewer::Type()) {
1983           if(aProps.contains(TRANSPARENCY_PROP)) {
1984             param = occParam + TRANSPARENCY_PROP;
1985             ip->setParameter(entry, param, QString::number(aProps.value(TRANSPARENCY_PROP).toDouble()).toLatin1().data());
1986           }
1987
1988           if(aProps.contains(TOP_LEVEL_PROP)) {
1989             param = occParam + TOP_LEVEL_PROP;
1990             Standard_Boolean val = aProps.value(TOP_LEVEL_PROP).value<Standard_Boolean>();
1991             if (val == Standard_True) 
1992               ip->setParameter(entry, param, "1");
1993           }       
1994         }
1995
1996         if(aProps.contains(ISOS_PROP)) {
1997           param = occParam + ISOS_PROP;
1998           ip->setParameter(entry, param, aProps.value(ISOS_PROP).toString().toLatin1().data());
1999         }
2000
2001         if(aProps.contains(VECTOR_MODE_PROP)) {
2002           param = occParam + VECTOR_MODE_PROP;
2003           ip->setParameter(entry, param, QString::number(aProps.value(VECTOR_MODE_PROP).toInt()).toLatin1().data());
2004         }
2005
2006         if(aProps.contains(DEFLECTION_COEFF_PROP)) {
2007           param = occParam + DEFLECTION_COEFF_PROP;
2008           ip->setParameter(entry, param, QString::number(aProps.value(DEFLECTION_COEFF_PROP).toDouble()).toLatin1().data());
2009         }
2010
2011         //Marker type of the vertex - ONLY for the "Vertex" and "Compound of the Vertex"
2012         if(aProps.contains(MARKER_TYPE_PROP)) {
2013           param = occParam + MARKER_TYPE_PROP;
2014           ip->setParameter(entry, param, aProps.value(MARKER_TYPE_PROP).toString().toLatin1().data());
2015         }
2016
2017         if(aProps.contains(FRONT_MATERIAL_PROP)) {
2018           param = occParam + FRONT_MATERIAL_PROP;
2019           ip->setParameter(entry, param, aProps.value(FRONT_MATERIAL_PROP).toString().toLatin1().data());
2020         }
2021
2022         if(aProps.contains(BACK_MATERIAL_PROP)) {
2023           param = occParam + BACK_MATERIAL_PROP;
2024           ip->setParameter(entry, param, aProps.value(BACK_MATERIAL_PROP).toString().toLatin1().data());
2025           
2026         }
2027
2028         if(aProps.contains( EDGE_WIDTH_PROP )) {
2029              param = occParam + EDGE_WIDTH_PROP;
2030            ip->setParameter(entry, param, aProps.value(EDGE_WIDTH_PROP).toString().toLatin1().data());                               
2031         }
2032         
2033         if(aProps.contains( ISOS_WIDTH_PROP )) {
2034           param = occParam + ISOS_WIDTH_PROP;
2035           ip->setParameter(entry, param, aProps.value(ISOS_WIDTH_PROP).toString().toLatin1().data());
2036         }
2037       } // object iterator
2038     } // for (views)
2039   } // for (viewManagers)
2040 }
2041
2042 /*!
2043  * \brief Restore visual parameters
2044  *
2045  * This method is called after the study document is opened.
2046  * Restore visual parameters from AttributeParameter attribute(s)
2047  */
2048 void GeometryGUI::restoreVisualParameters (int savePoint)
2049 {
2050   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(application()->activeStudy());
2051   if (!appStudy || !appStudy->studyDS())
2052     return;
2053   _PTR(Study) studyDS = appStudy->studyDS();
2054
2055   // componentName is used for encoding of entries when storing them in IParameters
2056   std::string componentName = myComponentGeom->ComponentDataType();
2057   //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
2058   //if (!aSComponent) return;
2059
2060   // IParameters
2061   _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",
2062                                                              componentName.c_str(),
2063                                                              savePoint);
2064   _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
2065
2066   std::vector<std::string> entries = ip->getEntries();
2067
2068   for (std::vector<std::string>::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt)
2069   {
2070     // entry is a normal entry - it should be "decoded" (setting base adress of component)
2071     QString entry (ip->decodeEntry(*entIt).c_str());
2072
2073     // Check that the entry corresponds to a real object in the Study
2074     // as the object may be deleted or modified after the visual state is saved.
2075     _PTR(SObject) so = studyDS->FindObjectID(entry.toLatin1().data());
2076     if (!so) continue; //Skip the not existent entry
2077
2078     std::vector<std::string> paramNames = ip->getAllParameterNames( *entIt );
2079     std::vector<std::string> paramValues = ip->getAllParameterValues( *entIt );
2080
2081     std::vector<std::string>::iterator namesIt = paramNames.begin();
2082     std::vector<std::string>::iterator valuesIt = paramValues.begin();
2083
2084     // actors are stored in a map after displaying of them for
2085     // quicker access in the future: map < viewID to actor >
2086     NCollection_DataMap<int, GEOM_Actor*          > vtkActors;
2087     NCollection_DataMap<int, Handle(GEOM_AISShape)> occActors;
2088
2089     QString viewerTypStr;
2090     QString viewIndexStr;
2091     int viewIndex;
2092     QVector<PropMap> aListOfMap;
2093
2094     for (; namesIt != paramNames.end(); ++namesIt, ++valuesIt)
2095     {
2096       // visual parameters are stored in strings as follows: ViewerType_ViewIndex_ParamName.
2097       // '_' is used as separator and should not be used in viewer type or parameter names.
2098       QStringList lst = QString((*namesIt).c_str()).split(NAME_SEPARATOR, QString::SkipEmptyParts);
2099       if (lst.size() != 3)
2100         continue;
2101
2102       viewerTypStr = lst[0];
2103       viewIndexStr = lst[1];
2104       QString paramNameStr = lst[2];
2105
2106       bool ok;
2107       viewIndex = viewIndexStr.toUInt(&ok);
2108       if (!ok) // bad conversion of view index to integer
2109         continue;
2110
2111       if((viewIndex + 1) > aListOfMap.count()) {
2112         aListOfMap.resize(viewIndex + 1);
2113       }
2114
2115       QString val((*valuesIt).c_str());
2116       if(paramNameStr == VISIBILITY_PROP){
2117         aListOfMap[viewIndex].insert(VISIBILITY_PROP, val == "On" ? 1 : 0);
2118
2119       } else if(paramNameStr == OPACITY_PROP) {
2120         aListOfMap[viewIndex].insert(TRANSPARENCY_PROP, 1. - val.toDouble());
2121
2122       } else if(paramNameStr == TRANSPARENCY_PROP) {
2123         aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val.toDouble() );
2124
2125       } else if(paramNameStr == TOP_LEVEL_PROP) {
2126           aListOfMap[viewIndex].insert( TRANSPARENCY_PROP, val == "1" ? Standard_True : Standard_False );
2127           
2128       } else if(paramNameStr == DISPLAY_MODE_PROP) {
2129         aListOfMap[viewIndex].insert( DISPLAY_MODE_PROP, val.toInt());
2130
2131       } else if(paramNameStr == ISOS_PROP) {
2132         aListOfMap[viewIndex].insert( ISOS_PROP, val);
2133
2134       } else if(paramNameStr == COLOR_PROP) {
2135         QStringList rgb = val.split(DIGIT_SEPARATOR);
2136         if(rgb.count() == 3) {
2137           QColor c(int(rgb[0].toDouble()*255), int(rgb[1].toDouble()*255), int(rgb[2].toDouble()*255));
2138           aListOfMap[viewIndex].insert( COLOR_PROP, c);
2139         }
2140       } else if(paramNameStr == VECTOR_MODE_PROP) {
2141         aListOfMap[viewIndex].insert( VECTOR_MODE_PROP, val.toInt());
2142
2143       }  else if(paramNameStr == DEFLECTION_COEFF_PROP) {
2144         aListOfMap[viewIndex].insert( DEFLECTION_COEFF_PROP, val.toDouble());
2145       }  else if(paramNameStr == MARKER_TYPE_PROP) {
2146         aListOfMap[viewIndex].insert( MARKER_TYPE_PROP, val);
2147       } else if(paramNameStr == FRONT_MATERIAL_PROP) {
2148         aListOfMap[viewIndex].insert( FRONT_MATERIAL_PROP, val);
2149       } else if(paramNameStr == BACK_MATERIAL_PROP) {
2150         aListOfMap[viewIndex].insert( BACK_MATERIAL_PROP, val);
2151       }  else if(paramNameStr == EDGE_WIDTH_PROP) {
2152         aListOfMap[viewIndex].insert( EDGE_WIDTH_PROP , val);
2153       }  else if(paramNameStr == ISOS_WIDTH_PROP) {
2154         aListOfMap[viewIndex].insert( ISOS_WIDTH_PROP , val);
2155       }
2156
2157                     
2158
2159     } // for names/parameters iterator
2160
2161     QList<SUIT_ViewManager*> lst = getApp()->viewManagers();
2162
2163     for (int index = 0; index < aListOfMap.count(); index++) {
2164
2165       appStudy->setObjectPropMap(index, entry, aListOfMap[index]);
2166
2167       //Get Visibility property of the current PropMap
2168       if (aListOfMap[index].value(VISIBILITY_PROP) == 1) {
2169         SUIT_ViewManager* vman = lst.at(index);
2170         SUIT_ViewModel* vmodel = vman->getViewModel();
2171         displayer()->Display(entry, true, dynamic_cast<SALOME_View*>(vmodel));
2172       }
2173     }
2174
2175   } // for entries iterator
2176
2177   // update all VTK and OCC views
2178   QList<SUIT_ViewManager*> lst;
2179   getApp()->viewManagers(lst);
2180   for (QList<SUIT_ViewManager*>::Iterator it = lst.begin(); it != lst.end(); it++) {
2181     SUIT_ViewModel* vmodel = (*it)->getViewModel();
2182     if (!vmodel)
2183       continue;
2184     if (vmodel->getType() == SVTK_Viewer::Type()) {
2185       SVTK_ViewWindow* vtkView = (SVTK_ViewWindow*) (*it)->getActiveView();
2186       vtkView->getRenderer()->ResetCameraClippingRange();
2187       vtkView->Repaint();
2188     }
2189     else if (vmodel->getType() == SOCC_Viewer::Type()) {
2190       //SOCC_ViewWindow* occView = (SOCC_ViewWindow*) (*it)->getActiveView();
2191       SALOME_View* occVMod = dynamic_cast<SALOME_View*>(vmodel);
2192       if (occVMod)
2193         occVMod->Repaint();
2194     }
2195   }
2196 }
2197
2198 void GeometryGUI::onViewAboutToShow()
2199 {
2200   SUIT_ViewWindow* window = application()->desktop()->activeWindow();
2201   QAction* a = action( GEOMOp::OpSwitchVectors );
2202   if ( window ) {
2203     a->setEnabled(true);
2204     bool vmode = window->property("VectorsMode").toBool();
2205     a->setText ( vmode == 1 ? tr( "MEN_VECTOR_MODE_OFF" ) : tr("MEN_VECTOR_MODE_ON") );
2206   } else {
2207     a->setText ( tr("MEN_VECTOR_MODE_ON") );
2208     a->setEnabled(false);
2209   }
2210 }
2211
2212 /*!
2213   \brief Return action by id
2214   \param id identifier of the action
2215   \return action 
2216 */
2217 QAction* GeometryGUI::getAction(const int id) {
2218   return action(id);
2219 }
2220
2221 /*!
2222   \brief Check if this object is can't be renamed in place
2223
2224   This method can be re-implemented in the subclasses.
2225   Return true in case if object isn't reference or component (module root).
2226
2227   \param id column id
2228   \return \c true if the item can be renamed by the user in place (e.g. in the Object browser)
2229 */
2230 bool GeometryGUI::renameAllowed( const QString& entry) const {
2231
2232   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
2233   SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0; 
2234   SalomeApp_DataObject* obj = appStudy ? dynamic_cast<SalomeApp_DataObject*>(appStudy->findObjectByEntry(entry)) : 0;
2235   
2236   return (app && appStudy && obj && !appStudy->isComponent(entry) && !obj->isReference());
2237 }
2238
2239
2240 /*!
2241   Rename object by entry.
2242   \param entry entry of the object
2243   \param name new name of the object
2244   \brief Return \c true if rename operation finished successfully, \c false otherwise.
2245 */
2246 bool GeometryGUI::renameObject( const QString& entry, const QString& name) {
2247   
2248   bool result = false;
2249   
2250   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication());
2251   SalomeApp_Study* appStudy = app ? dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) : 0;
2252   
2253   if(!appStudy)
2254     return result;
2255   
2256   _PTR(Study) aStudy = appStudy->studyDS();
2257   
2258   if(!aStudy)
2259     return result;
2260
2261   bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
2262   if ( aLocked ) {
2263     SUIT_MessageBox::warning ( app->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
2264     return result;
2265   }
2266
2267   _PTR(SObject) obj ( aStudy->FindObjectID(qPrintable(entry)) );
2268   _PTR(GenericAttribute) anAttr;
2269   if ( obj ) {
2270     if ( obj->FindAttribute(anAttr, "AttributeName") ) {
2271       _PTR(AttributeName) aName (anAttr);
2272
2273       GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(obj));
2274       if (!CORBA::is_nil(anObj)) {
2275         aName->SetValue( name.toLatin1().data() ); // rename the SObject
2276         anObj->SetName( name.toLatin1().data() );  // Rename the corresponding GEOM_Object
2277         result = true;
2278       }
2279     }
2280   }
2281   return result;
2282 }
2283