]> SALOME platform Git repositories - modules/geom.git/blob - src/BasicGUI/BasicGUI_LineDlg.cxx
Salome HOME
*** empty log message ***
[modules/geom.git] / src / BasicGUI / BasicGUI_LineDlg.cxx
1 // GEOM GEOMGUI : GUI for Geometry component
2 //
3 // Copyright (C) 2003  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   : BasicGUI_LineDlg.cxx
23 // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
24 //
25
26 #include "BasicGUI_LineDlg.h"
27
28 #include <GeometryGUI.h>
29 #include <GEOMBase.h>
30 #include <GEOM_DlgRef.h>
31
32 #include <SUIT_ResourceMgr.h>
33 #include <SUIT_Session.h>
34 #include <SalomeApp_Application.h>
35 #include <LightApp_SelectionMgr.h>
36
37 #include <GEOMImpl_Types.hxx>
38
39 //=================================================================================
40 // class    : BasicGUI_LineDlg()
41 // purpose  : Constructs a BasicGUI_LineDlg which is a child of 'parent', with the 
42 //            name 'name' and widget flags set to 'f'.
43 //            The dialog will by default be modeless, unless you set 'modal' to
44 //            TRUE to construct a modal dialog.
45 //=================================================================================
46 BasicGUI_LineDlg::BasicGUI_LineDlg( GeometryGUI* theGeometryGUI, QWidget* parent,
47                                     const char* name, bool modal, Qt::WindowFlags fl )
48   : GEOMBase_Skeleton( theGeometryGUI, parent, name, modal, fl )
49 {
50   QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_LINE_2P" ) ) );
51   QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
52
53   setWindowTitle( tr( "GEOM_LINE_TITLE" ) );
54  
55   /***************************************************************/
56   mainFrame()->GroupConstructors->setTitle( tr( "GEOM_LINE" ) );
57   mainFrame()->RadioButton1->setIcon( image0 );
58   mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
59   mainFrame()->RadioButton2->close();
60   mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
61   mainFrame()->RadioButton3->close();
62
63   GroupPoints = new DlgRef_2Sel( centralWidget() );
64
65   GroupPoints->GroupBox1->setTitle( tr( "GEOM_POINTS" ) );
66   GroupPoints->TextLabel1->setText( tr( "GEOM_POINT_I" ).arg( 1 ) );
67   GroupPoints->TextLabel2->setText( tr( "GEOM_POINT_I" ).arg( 2 ) );
68   GroupPoints->PushButton1->setIcon( image1 );
69   GroupPoints->PushButton2->setIcon( image1 );
70
71   GroupPoints->LineEdit1->setReadOnly( true );
72   GroupPoints->LineEdit2->setReadOnly( true );
73
74   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
75   layout->setMargin( 0 ); layout->setSpacing( 6 );
76   layout->addWidget( GroupPoints );
77
78   /***************************************************************/
79
80   setHelpFileName( "line.htm" );
81
82   Init();
83 }
84
85
86 //=================================================================================
87 // function : ~BasicGUI_LineDlg()
88 // purpose  : Destroys the object and frees any allocated resources
89 //=================================================================================
90 BasicGUI_LineDlg::~BasicGUI_LineDlg()
91 {  
92 }
93
94
95 //=================================================================================
96 // function : Init()
97 // purpose  :
98 //=================================================================================
99 void BasicGUI_LineDlg::Init()
100 {
101   /* init variables */
102   myEditCurrentArgument = GroupPoints->LineEdit1;
103
104   myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
105
106   // myGeomGUI->SetState( 0 );
107   globalSelection( GEOM_POINT );
108         
109   /* signals and slots connections */
110   connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
111   connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ),        this, SLOT( ClickOnCancel() ) );
112
113   connect( buttonCancel(), SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) );
114   connect( buttonOk(),     SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
115   connect( buttonApply(),  SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
116
117   connect( GroupPoints->PushButton1, SIGNAL( clicked() ),       this, SLOT( SetEditCurrentArgument() ) );
118   connect( GroupPoints->PushButton2, SIGNAL( clicked() ),       this, SLOT( SetEditCurrentArgument() ) );
119
120   connect( GroupPoints->LineEdit1,   SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
121   connect( GroupPoints->LineEdit2,   SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
122
123   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
124            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
125   
126   initName( tr( "GEOM_LINE" ) );
127 }
128
129
130 //=================================================================================
131 // function : ClickOnOk()
132 // purpose  :
133 //=================================================================================
134 void BasicGUI_LineDlg::ClickOnOk()
135 {
136   if ( ClickOnApply() )
137     ClickOnCancel();
138 }
139
140 //=======================================================================
141 // function : ClickOnCancel()
142 // purpose  :
143 //=======================================================================
144 void BasicGUI_LineDlg::ClickOnCancel()
145 {
146   GEOMBase_Skeleton::ClickOnCancel();
147 }
148
149 //=================================================================================
150 // function : ClickOnApply()
151 // purpose  :
152 //=================================================================================
153 bool BasicGUI_LineDlg::ClickOnApply()
154 {
155   if ( !onAccept() )
156     return false;
157   
158   initName();
159   return true;
160 }
161
162
163 //=================================================================================
164 // function : SelectionIntoArgument()
165 // purpose  : Called when selection as changed or other case
166 //=================================================================================
167 void BasicGUI_LineDlg::SelectionIntoArgument()
168 {
169   myEditCurrentArgument->setText( "" );
170
171   if ( IObjectCount() != 1 ) {
172     if ( myEditCurrentArgument == GroupPoints->LineEdit1 )      myPoint1 = GEOM::GEOM_Object::_nil();
173     else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) myPoint2 = GEOM::GEOM_Object::_nil();
174     return;
175   }
176
177   // nbSel == 1 
178   Standard_Boolean aRes = Standard_False;
179   GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aRes );
180   if ( !CORBA::is_nil( aSelectedObject ) && aRes ) {
181     myEditCurrentArgument->setText( GEOMBase::GetName( aSelectedObject ) );
182     if      ( myEditCurrentArgument == GroupPoints->LineEdit1 ) myPoint1 = aSelectedObject;
183     else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) myPoint2 = aSelectedObject;
184   }
185   
186   displayPreview();
187 }
188
189
190 //=================================================================================
191 // function : SetEditCurrentArgument()
192 // purpose  :
193 //=================================================================================
194 void BasicGUI_LineDlg::SetEditCurrentArgument()
195 {
196   QPushButton* send = (QPushButton*)sender();
197   if      ( send == GroupPoints->PushButton1 ) myEditCurrentArgument = GroupPoints->LineEdit1;
198   else if ( send == GroupPoints->PushButton2 ) myEditCurrentArgument = GroupPoints->LineEdit2;
199   myEditCurrentArgument->setFocus();
200   SelectionIntoArgument();
201 }
202
203
204 //=================================================================================
205 // function : LineEditReturnPressed()
206 // purpose  :
207 //=================================================================================
208 void BasicGUI_LineDlg::LineEditReturnPressed()
209 {
210   QLineEdit* send = (QLineEdit*)sender();
211   if      ( send == GroupPoints->LineEdit1 ) myEditCurrentArgument = GroupPoints->LineEdit1;
212   else if ( send == GroupPoints->LineEdit2 ) myEditCurrentArgument = GroupPoints->LineEdit2;
213   else return;
214   GEOMBase_Skeleton::LineEditReturnPressed();
215 }
216
217
218 //=================================================================================
219 // function : ActivateThisDialog()
220 // purpose  :
221 //=================================================================================
222 void BasicGUI_LineDlg::ActivateThisDialog()
223 {
224   GEOMBase_Skeleton::ActivateThisDialog();
225   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), 
226            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
227
228   // myGeomGUI->SetState( 0 );
229   globalSelection( GEOM_POINT );
230
231   myEditCurrentArgument = GroupPoints->LineEdit1;
232   myEditCurrentArgument->setFocus();
233
234   GroupPoints->LineEdit1->setText( "" );
235   GroupPoints->LineEdit2->setText( "" );
236   myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
237 }
238
239 //=================================================================================
240 // function : DeactivateActiveDialog()
241 // purpose  : public slot to deactivate if active
242 //=================================================================================
243 void BasicGUI_LineDlg::DeactivateActiveDialog()
244 {
245   // myGeomGUI->SetState( -1 );
246   GEOMBase_Skeleton::DeactivateActiveDialog();
247 }
248
249 //=================================================================================
250 // function : enterEvent()
251 // purpose  :
252 //=================================================================================
253 void BasicGUI_LineDlg::enterEvent( QEvent* )
254 {
255   if ( !mainFrame()->GroupConstructors->isEnabled() )
256     ActivateThisDialog();
257 }
258
259 //=================================================================================
260 // function : createOperation
261 // purpose  :
262 //=================================================================================
263 GEOM::GEOM_IOperations_ptr BasicGUI_LineDlg::createOperation()
264 {
265   return myGeomGUI->GetGeomGen()->GetIBasicOperations( getStudyId() );
266 }
267
268 //=================================================================================
269 // function : isValid
270 // purpose  :
271 //=================================================================================
272 bool BasicGUI_LineDlg::isValid( QString& msg )
273 {
274   return !myPoint1->_is_nil() && !myPoint2->_is_nil();
275 }
276
277 //=================================================================================
278 // function : execute
279 // purpose  :
280 //=================================================================================
281 bool BasicGUI_LineDlg::execute( ObjectList& objects )
282 {
283   GEOM::GEOM_Object_var anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoPnt( myPoint1, myPoint2 );
284   if ( !anObj->_is_nil() )
285     objects.push_back( anObj._retn() );
286   return true;
287 }
288
289 //=================================================================================
290 // function : closeEvent
291 // purpose  :
292 //=================================================================================
293 void BasicGUI_LineDlg::closeEvent( QCloseEvent* e )
294 {
295   GEOMBase_Skeleton::closeEvent( e );
296 }
297