Salome HOME
Fix pb with labels of rotation spin boxes (bad update after switch from IJK pane...
[modules/visu.git] / src / VISUGUI / VisuGUI_PopupTools.cxx
1 //  VISU VISUGUI : GUI of VISU component
2 //
3 //  Copyright (C) 2005  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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
21 //
22 //
23 //
24 //  File   : VisuGUI_PopupTools.cxx
25 //  Author : Sergey Anikin 
26 //  Module : VISU
27
28 #include "VisuGUI_PopupTools.h"
29 #include "VisuGUI_Tools.h"
30
31 #include "VISU_Actor.h"
32
33 using namespace VISU;
34
35 //////////////////////////////////////////////////
36 // Class: VisuGUI_Selection
37 //////////////////////////////////////////////////
38
39 QtxValue VisuGUI_Selection::param( const int ind, const QString& p ) const
40 {
41   QtxValue val( SalomeApp_Selection::param( ind, p ) );
42   if ( !val.isValid() ) {
43     if      ( p == "type"           ) val = QtxValue( type( ind ) );
44     else if ( p == "nbComponents"   ) val = QtxValue( nbComponents( ind ) );
45     else if ( p == "representation" ) val = QtxValue( representation( ind ) );
46     else if ( p == "nbTimeStamps"   ) val = QtxValue( nbTimeStamps( ind ) );
47     else if ( p == "nbChildren"     ) val = QtxValue( nbChildren( ind ) );
48     else if ( p == "nbNamedChildren") val = QtxValue( nbNamedChildren( ind ) );
49     else if ( p == "isVisible"      ) val = QtxValue( isVisible( ind ) );
50     else if ( p == "isShrunk"       ) val = QtxValue( isShrunk( ind ) );
51     else if ( p == "hasActor"       ) val = QtxValue( hasActor( ind ) );
52   }
53
54   return val;
55 }
56
57 // Macro for converting VISU enumeration items into corresponding strings
58 #define ENUM2STRING( x, y ) \
59   case y: \
60     x = QString( #y ); \
61     break;
62
63 QString VisuGUI_Selection::type( const int ind ) const
64 {
65   QString aTypeStr;
66   VISU::Storable::TRestoringMap aMap;
67   CORBA::Object_var anObject = GetSelectedObj( study(), entry( ind ), &aMap );  
68
69   VISU::Base_var aVisuObj = VISU::Base::_narrow( anObject );
70
71   if ( !CORBA::is_nil( aVisuObj ) ){
72     VISU::VISUType aType = aVisuObj->GetType();
73     switch (aType) {
74       ENUM2STRING( aTypeStr, VISU::TVISUGEN )
75       ENUM2STRING( aTypeStr, VISU::TRESULT )
76       ENUM2STRING( aTypeStr, VISU::TTABLE )
77       ENUM2STRING( aTypeStr, VISU::TCURVE )
78       ENUM2STRING( aTypeStr, VISU::TCONTAINER )
79       ENUM2STRING( aTypeStr, VISU::TMESH )
80       ENUM2STRING( aTypeStr, VISU::TSCALARMAP )
81       ENUM2STRING( aTypeStr, VISU::TISOSURFACE )
82       ENUM2STRING( aTypeStr, VISU::TDEFORMEDSHAPE )
83       ENUM2STRING( aTypeStr, VISU::TCUTPLANES )
84       ENUM2STRING( aTypeStr, VISU::TCUTLINES )
85       ENUM2STRING( aTypeStr, VISU::TVECTORS )
86       ENUM2STRING( aTypeStr, VISU::TSTREAMLINES )
87       ENUM2STRING( aTypeStr, VISU::TPLOT3D )
88       ENUM2STRING( aTypeStr, VISU::TANIMATION )
89     }
90   }
91   else{
92     bool isExist;
93     VISU::VISUType aType = (VISU::VISUType)VISU::Storable::FindValue( aMap, "myType", &isExist).toInt();
94     if( isExist ){
95       switch (aType) {
96         ENUM2STRING( aTypeStr, VISU::TENTITY )
97         ENUM2STRING( aTypeStr, VISU::TFAMILY )
98         ENUM2STRING( aTypeStr, VISU::TGROUP )
99         ENUM2STRING( aTypeStr, VISU::TVIEW3D )
100         ENUM2STRING( aTypeStr, VISU::TFIELD )
101         ENUM2STRING( aTypeStr, VISU::TTIMESTAMP )
102       }
103     }
104   }
105
106   return aTypeStr;
107 }
108
109 QString VisuGUI_Selection::nbComponents( const int ind ) const
110 {
111   QString aResStr;
112   VISU::Storable::TRestoringMap aMap;
113   GetSelectedObj( study(), entry( ind ), &aMap );  
114   bool isExist;
115   const QString& aVal = VISU::Storable::FindValue(aMap,"myNumComponent",&isExist);
116   if ( isExist )
117     aResStr = aVal;
118   return aResStr;
119 }
120
121 QString VisuGUI_Selection::nbTimeStamps( const int ind ) const
122 {
123   QString aResStr;
124   VISU::Storable::TRestoringMap aMap;
125   GetSelectedObj( study(), entry( ind ), &aMap );  
126   bool isExist;
127   const QString& aVal = VISU::Storable::FindValue(aMap,"myNbTimeStamps",&isExist);
128   if ( isExist )
129     aResStr = aVal;
130   return aResStr;
131 }
132
133 QString VisuGUI_Selection::representation( const int ind ) const
134 {
135   QString aResStr;
136
137   if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) ){
138     if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) ){
139       int aRepresent = anVISUActor->GetRepresentation();
140       switch ( aRepresent ){
141         ENUM2STRING( aResStr, VISU::POINT )
142         ENUM2STRING( aResStr, VISU::WIREFRAME )
143         ENUM2STRING( aResStr, VISU::SHADED )
144         ENUM2STRING( aResStr, VISU::INSIDEFRAME )
145         ENUM2STRING( aResStr, VISU::SURFACEFRAME )
146       }
147     }
148   }
149
150   return aResStr;
151 }
152
153 int VisuGUI_Selection::nbChild( const int ind, const bool named ) const
154 {
155   int cnt = 0;
156   _PTR(Study) aStudy =  GetCStudy( study() );
157   if ( aStudy ){
158     _PTR(SObject) SO = aStudy->FindObjectID( entry( ind ).latin1() );
159     if ( SO ){
160       for ( _PTR(ChildIterator) Iter = aStudy->NewChildIterator( SO ); Iter->More(); Iter->Next() ) {
161         _PTR(SObject) refSO;
162         if ( !Iter->Value()->ReferencedObject( refSO ) && ( !named || Iter->Value()->GetName().size() ) )
163           cnt++;
164       }
165     }
166   }
167   return cnt;
168 }
169
170 QString VisuGUI_Selection::nbChildren( const int ind ) const
171 {
172   QString aResStr;
173   aResStr.setNum( nbChild( ind, false ) );
174   return aResStr;
175 }
176
177 QString VisuGUI_Selection::nbNamedChildren( const int ind ) const
178 {
179   QString aResStr;
180   aResStr.setNum( nbChild( ind, true ) );
181   return aResStr;
182 }
183
184 QString VisuGUI_Selection::isVisible( const int ind ) const
185 {
186   QString aResStr;
187
188   if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) )
189     if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) )
190       aResStr = anVISUActor->GetVisibility() ? "1" : "0";
191
192   return aResStr;
193 }
194
195 QString VisuGUI_Selection::isShrunk( const int ind ) const
196 {
197   QString aResStr;
198
199   if ( SVTK_ViewWindow* aView = GetViewWindow( myModule ) )
200     if ( VISU_Actor* anVISUActor = FindActor( aView, entry( ind ).latin1() ) )
201       if ( anVISUActor->IsShrunkable() )
202         aResStr = anVISUActor->IsShrunk() ? "1" : "0";
203
204   return aResStr;
205 }
206
207 QString VisuGUI_Selection::hasActor( const int ind ) const
208 {
209   return representation( ind ).isEmpty() ? "0" : "1";
210 }