Salome HOME
0022289: EDF 2623 GEOM: Make "MakePipeWithDifferentsSections" available from GUI...
[modules/geom.git] / src / BasicGUI / BasicGUI_CurveDlg.cxx
1 // Copyright (C) 2007-2013  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
23 // GEOM GEOMGUI : GUI for Geometry component
24 // File   : BasicGUI_CurveDlg.cxx
25 // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
26
27 #include "BasicGUI_CurveDlg.h"
28 #include "BasicGUI_ParamCurveWidget.h"
29
30 #include <DlgRef.h>
31 #include <GeometryGUI.h>
32 #include <GEOMBase.h>
33
34 #include <SUIT_ResourceMgr.h>
35 #include <SUIT_Session.h>
36 #include <SalomeApp_Application.h>
37 #include <SalomeApp_Study.h>
38 #include <LightApp_SelectionMgr.h>
39
40 #include <SALOME_ListIteratorOfListIO.hxx>
41 #include <SALOME_ListIO.hxx>
42
43 #include <TopoDS_Shape.hxx>
44 #include <TopoDS.hxx>
45 #include <TopExp.hxx>
46 #include <TColStd_IndexedMapOfInteger.hxx>
47 #include <TopTools_IndexedMapOfShape.hxx>
48
49 #include <GEOMImpl_Types.hxx>
50
51 //=================================================================================
52 // class    : BasicGUI_CurveDlg()
53 // purpose  : Constructs a BasicGUI_CurveDlg which is a child of 'parent', with the
54 //            name 'name' and widget flags set to 'f'.
55 //            The dialog will by default be modeless, unless you set 'modal' to
56 //            TRUE to construct a modal dialog.
57 //=================================================================================
58 BasicGUI_CurveDlg::BasicGUI_CurveDlg( GeometryGUI* theGeometryGUI, QWidget* parent,
59                                       bool modal, Qt::WindowFlags fl )
60   : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl )
61 {
62   QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_POLYLINE")));
63   QPixmap image2 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SPLINE")));
64   QPixmap image3 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BEZIER")));
65   QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
66
67   setWindowTitle(tr("GEOM_CURVE_TITLE"));
68
69   /***************************************************************/
70   mainFrame()->RadioButton1->setIcon(image0);
71   mainFrame()->RadioButton2->setIcon(image3);
72   mainFrame()->RadioButton3->setIcon(image2);
73
74   // Creation mode
75   QGroupBox* creationModeGroup = new QGroupBox (this);
76   QButtonGroup* bg = new QButtonGroup (this);
77
78   creationModeGroup->setTitle(tr("GEOM_CURVE_CRMODE"));
79   QHBoxLayout * creationModeLayout = new QHBoxLayout (creationModeGroup);
80   myBySelectionBtn = new QRadioButton (tr("GEOM_CURVE_SELECTION") ,creationModeGroup);
81   myAnaliticalBtn = new QRadioButton (tr("GEOM_CURVE_ANALITICAL") ,creationModeGroup);
82
83   bg->addButton(myBySelectionBtn);
84   bg->addButton(myAnaliticalBtn);
85
86   creationModeLayout->addWidget(myBySelectionBtn);
87   creationModeLayout->addWidget(myAnaliticalBtn);
88
89   // Points and flags
90   myGroupPoints = new DlgRef_1Sel3Check (centralWidget());
91
92   myGroupPoints->GroupBox1->setTitle(tr("GEOM_NODES"));
93   myGroupPoints->TextLabel1->setText(tr("GEOM_POINTS"));
94   myGroupPoints->PushButton1->setIcon(image1);
95   myGroupPoints->PushButton1->setDown(true);
96
97   myGroupPoints->LineEdit1->setReadOnly( true );
98
99   myGroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
100   myGroupPoints->CheckButton1->setChecked(false);
101   //myGroupPoints->CheckButton1->hide();
102
103   myGroupPoints->CheckButton2->setText( tr( "GEOM_IS_REORDER" ) );
104   myGroupPoints->CheckButton2->setChecked(false);
105   myGroupPoints->CheckButton2->hide();
106
107   myGroupPoints->CheckButton3->hide();
108
109   // Parametrical mode
110   myGroupParams = new BasicGUI_ParamCurveWidget( centralWidget() );
111
112   // Tangents (only for Interpolation constructor and only not closed and no reordering)
113   myGroupTangents = new QGroupBox (this);
114   myGroupTangents->setCheckable(true);
115   myGroupTangents->setChecked(false);
116   myGroupTangents->setTitle(tr("GEOM_INTERPOL_TANGENTS"));
117
118   QGridLayout* tangentsLayout = new QGridLayout (myGroupTangents);
119
120   myPushBtnV1 = new QPushButton (myGroupTangents);
121   myPushBtnV2 = new QPushButton (myGroupTangents);
122   myPushBtnV1->setIcon(image1);
123   myPushBtnV2->setIcon(image1);
124
125   myLineEditV1 = new QLineEdit (myGroupTangents);
126   myLineEditV2 = new QLineEdit (myGroupTangents);
127   myLineEditV1->setReadOnly(true);
128   myLineEditV2->setReadOnly(true);
129
130   QLabel* aTextLabelV1 = new QLabel (myGroupTangents);
131   QLabel* aTextLabelV2 = new QLabel (myGroupTangents);
132   aTextLabelV1->setText(tr("GEOM_INTERPOL_FIRST_VEC"));
133   aTextLabelV2->setText(tr("GEOM_INTERPOL_LAST_VEC"));
134
135   tangentsLayout->addWidget(aTextLabelV1, 0, 0);
136   tangentsLayout->addWidget(myPushBtnV1 , 0, 1);
137   tangentsLayout->addWidget(myLineEditV1, 0, 2);
138   tangentsLayout->addWidget(aTextLabelV2, 1, 0);
139   tangentsLayout->addWidget(myPushBtnV2 , 1, 1);
140   tangentsLayout->addWidget(myLineEditV2, 1, 2);
141
142   // Layout
143   QVBoxLayout* layout = new QVBoxLayout (centralWidget());
144   layout->setMargin(0);
145   layout->setSpacing(6);
146   layout->addWidget(creationModeGroup);
147   layout->addWidget(myGroupPoints);
148   layout->addWidget(myGroupParams);
149   layout->addWidget(myGroupTangents);
150   /***************************************************************/
151
152   setHelpFileName("create_curve_page.html");
153
154   Init();
155 }
156
157 //=================================================================================
158 // function : ~BasicGUI_CurveDlg()
159 // purpose  : Destroys the object and frees any allocated resources
160 //=================================================================================
161 BasicGUI_CurveDlg::~BasicGUI_CurveDlg()
162 {
163 }
164
165 //=================================================================================
166 // function : Init()
167 // purpose  :
168 //=================================================================================
169 void BasicGUI_CurveDlg::Init()
170 {
171   /* init variables */
172   showOnlyPreviewControl();
173   myBySelectionBtn->setChecked(true);
174
175   /* Get setting of step value from file configuration */
176   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
177   double step = resMgr ? resMgr->doubleValue( "Geometry", "SettingsGeomStep", 10. ) : 10.;
178
179   double aMax( 100. ), aMin( 0.0 );
180
181   /* min, max, step and decimals for spin boxes & initial values */
182   initSpinBox( myGroupParams->myPMin, COORD_MIN, COORD_MAX, step, "length_precision" );
183   initSpinBox( myGroupParams->myPMax, COORD_MIN, COORD_MAX, step, "length_precision" );
184   myGroupParams->myPStep->setValue( 10 );
185   myGroupParams->myPStep->setMaximum( 999 );
186   myGroupParams->myPStep->setSingleStep( 10 );
187   myGroupParams->myPMin->setValue( aMin );
188   myGroupParams->myPMax->setValue( aMax );
189   myGroupParams->myPStep->setValue( step );
190   myGroupParams->myXExpr->setText("t");
191   myGroupParams->myYExpr->setText("t");
192   myGroupParams->myZExpr->setText("t");
193
194   myGroupParams->hide();
195
196   /* signals and slots connections */
197   connect(myGeomGUI,     SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
198   connect(myGeomGUI,     SIGNAL(SignalCloseAllDialogs()),        this, SLOT(ClickOnCancel()));
199
200   connect(buttonOk(),    SIGNAL(clicked()),                      this, SLOT(ClickOnOk()));
201   connect(buttonApply(), SIGNAL(clicked()),                      this, SLOT(ClickOnApply()));
202
203   connect(this,          SIGNAL(constructorsClicked(int)),       this, SLOT(ConstructorsClicked(int)));
204
205   connect(myGroupPoints->PushButton1,  SIGNAL(clicked()),        this, SLOT(SetEditCurrentArgument()));
206   connect(myPushBtnV1,                 SIGNAL(clicked()),        this, SLOT(SetEditCurrentArgument()));
207   connect(myPushBtnV2,                 SIGNAL(clicked()),        this, SLOT(SetEditCurrentArgument()));
208
209   connect(myGroupPoints->CheckButton1, SIGNAL(toggled(bool)),    this, SLOT(CheckButtonToggled()));
210   connect(myGroupPoints->CheckButton2, SIGNAL(toggled(bool)),    this, SLOT(CheckButtonToggled()));
211   connect(myGroupTangents,             SIGNAL(toggled(bool)),    this, SLOT(CheckButtonToggled()));
212
213   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
214           this, SLOT(SelectionIntoArgument()));
215
216   connect(myBySelectionBtn,       SIGNAL(clicked()),             this, SLOT(CreationModeChanged()));
217   connect(myAnaliticalBtn,        SIGNAL(clicked()),             this, SLOT(CreationModeChanged()));
218
219   connect(myGroupParams->myPMin,  SIGNAL(valueChanged(double)),  this, SLOT(ValueChangedInSpinBox(double)));
220   connect(myGroupParams->myPMax,  SIGNAL(valueChanged(double)),  this, SLOT(ValueChangedInSpinBox(double)));
221   connect(myGroupParams->myPStep, SIGNAL(valueChanged(int)),     this, SLOT(ValueChangedInSpinBox(int)));
222
223   connect(myGroupParams->myXExpr, SIGNAL(editingFinished()),     this, SLOT(OnEditingFinished()));
224   connect(myGroupParams->myYExpr, SIGNAL(editingFinished()),     this, SLOT(OnEditingFinished()));
225   connect(myGroupParams->myZExpr, SIGNAL(editingFinished()),     this, SLOT(OnEditingFinished()));
226
227   initName(tr("GEOM_CURVE"));
228   //resize(100, 100);
229   ConstructorsClicked(0);
230 }
231
232 //=================================================================================
233 // function : ConstructorsClicked()
234 // purpose  :
235 //=================================================================================
236 void BasicGUI_CurveDlg::ConstructorsClicked (int id)
237 {
238   QString aTitle = tr(id == 0 ? "GEOM_POLYLINE" : id == 1 ? "GEOM_BEZIER" : "GEOM_INTERPOL");
239   mainFrame()->GroupConstructors->setTitle(aTitle);
240
241   if (id == 0) { // polyline (wire)
242     myGroupPoints->CheckButton1->setText( tr( "GEOM_BUILD_CLOSED_WIRE" ) );
243     myGroupPoints->CheckButton2->hide();
244     myGroupTangents->hide();
245   }
246   else if (id == 1) { // bezier
247     myGroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
248     myGroupPoints->CheckButton2->hide();
249     myGroupTangents->hide();
250   }
251   else { // b-spline
252     myGroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
253     myGroupPoints->CheckButton2->show();
254     myGroupTangents->setVisible(myBySelectionBtn->isChecked());
255   }
256
257   myPoints.clear();
258   myVec1.nullify();
259   myVec2.nullify();
260
261   myGroupPoints->LineEdit1->setText("");
262   myLineEditV1->setText("");
263   myLineEditV2->setText("");
264
265   qApp->processEvents();
266   updateGeometry();
267   resize(minimumSizeHint());
268
269   myGroupPoints->PushButton1->click();
270 }
271
272 //=================================================================================
273 // function : SetEditCurrentArgument()
274 // purpose  :
275 //=================================================================================
276 void BasicGUI_CurveDlg::SetEditCurrentArgument()
277 {
278   disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
279
280   globalSelection(); // close local contexts, if any
281
282   if (sender() == myGroupPoints->PushButton1) {
283     myEditCurrentArgument = myGroupPoints->LineEdit1;
284     localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX);
285   }
286   else if (sender() == myPushBtnV1) {
287     myEditCurrentArgument = myLineEditV1;
288     localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
289   }
290   else if (sender() == myPushBtnV2) {
291     myEditCurrentArgument = myLineEditV2;
292     localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
293   }
294
295   myEditCurrentArgument->setFocus();
296
297   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
298           this, SLOT(SelectionIntoArgument()));
299
300   SelectionIntoArgument();
301 }
302
303 //=================================================================================
304 // function : CheckButtonToggled()
305 // purpose  :
306 //=================================================================================
307 void BasicGUI_CurveDlg::CheckButtonToggled()
308 {
309   if (sender() == myGroupTangents) {
310     if (myGroupTangents->isChecked())
311       myPushBtnV1->click();
312     else
313       myGroupPoints->PushButton1->click();
314   }
315   else {
316     if (getConstructorId() == 2) { // Interpolation
317       bool disableTangents = (myGroupPoints->CheckButton1->isChecked() ||
318                               myGroupPoints->CheckButton2->isChecked());
319       myGroupTangents->setEnabled(!disableTangents);
320     }
321     processPreview();
322   }
323 }
324
325 //=================================================================================
326 // function : ClickOnOk()
327 // purpose  :
328 //=================================================================================
329 void BasicGUI_CurveDlg::ClickOnOk()
330 {
331   setIsApplyAndClose(true);
332   if (ClickOnApply())
333     ClickOnCancel();
334 }
335
336 //=================================================================================
337 // function : ClickOnApply()
338 // purpose  :
339 //=================================================================================
340 bool BasicGUI_CurveDlg::ClickOnApply()
341 {
342   if (!onAccept())
343     return false;
344
345   initName();
346   ConstructorsClicked(getConstructorId());
347   return true;
348 }
349
350 void BasicGUI_CurveDlg::SelectionIntoArgument()
351 {
352   myEditCurrentArgument->setText("");
353
354   if (myEditCurrentArgument == myGroupPoints->LineEdit1) {
355     QList<GEOM::GeomObjPtr> points = getSelected(TopAbs_VERTEX, -1);
356     GEOMBase::Synchronize(myPoints, points);
357     if (!myPoints.isEmpty())
358       myGroupPoints->LineEdit1->setText(QString::number(myPoints.count()) + "_" +
359                                         tr("GEOM_POINT") + tr("_S_"));
360   }
361   else {
362     QList<GEOM::GeomObjPtr> vecs = getSelected(TopAbs_EDGE, -1);
363     if (vecs.count() != 1) {
364       if      (myEditCurrentArgument == myLineEditV1) myVec1.nullify();
365       else if (myEditCurrentArgument == myLineEditV2) myVec2.nullify();
366     }
367     else {
368       if (myEditCurrentArgument == myLineEditV1) {
369         myVec1 = vecs.first();
370       }
371       else if (myEditCurrentArgument == myLineEditV2) {
372         myVec2 = vecs.first();
373       }
374       QString aName = GEOMBase::GetName(vecs.first().get());
375       myEditCurrentArgument->setText(aName);
376     }
377   }
378
379   processPreview();
380 }
381
382 //=================================================================================
383 // function : ActivateThisDialog()
384 // purpose  :
385 //=================================================================================
386 void BasicGUI_CurveDlg::ActivateThisDialog()
387 {
388   GEOMBase_Skeleton::ActivateThisDialog();
389
390   connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
391            this, SLOT(SelectionIntoArgument()));
392
393   ConstructorsClicked(getConstructorId());
394 }
395
396 //=================================================================================
397 // function : DeactivateActiveDialog()
398 // purpose  : public slot to deactivate if active
399 //=================================================================================
400 void BasicGUI_CurveDlg::DeactivateActiveDialog()
401 {
402   // myGeomGUI->SetState( -1 );
403   GEOMBase_Skeleton::DeactivateActiveDialog();
404 }
405
406 //=================================================================================
407 // function : enterEvent()
408 // purpose  :
409 //=================================================================================
410 void BasicGUI_CurveDlg::enterEvent (QEvent*)
411 {
412   if (!mainFrame()->GroupConstructors->isEnabled())
413     ActivateThisDialog();
414 }
415
416 //=================================================================================
417 // function : createOperation
418 // purpose  :
419 //=================================================================================
420 GEOM::GEOM_IOperations_ptr BasicGUI_CurveDlg::createOperation()
421 {
422   return myGeomGUI->GetGeomGen()->GetICurvesOperations(getStudyId());
423 }
424
425 //=================================================================================
426 // function : isValid
427 // purpose  :
428 //=================================================================================
429 bool BasicGUI_CurveDlg::isValid (QString& msg)
430 {
431   if (myBySelectionBtn->isChecked()) {
432     bool ok = true;
433     if (getConstructorId() == 2) { // Interpolation
434       bool disableTangents = (myGroupPoints->CheckButton1->isChecked() ||
435                               myGroupPoints->CheckButton2->isChecked());
436       if (!disableTangents && myGroupTangents->isChecked()) {
437         ok = (myVec1 && myVec2);
438         if (!ok) msg = tr("GEOM_BOTH_TANGENTS_REQUIRED");
439       }
440     }
441     return ok && myPoints.count() > 1;
442   }
443   else {
444     bool ok = myGroupParams->myPMin->isValid( msg, !IsPreview() ) &&
445               myGroupParams->myPMax->isValid( msg, !IsPreview() ) &&
446               myGroupParams->myPStep->isValid( msg, !IsPreview() );
447     ok &= !myGroupParams->myXExpr->text().isEmpty();
448     ok &= !myGroupParams->myYExpr->text().isEmpty();
449     ok &= !myGroupParams->myZExpr->text().isEmpty();
450     return ok;
451   }
452 }
453
454 //=================================================================================
455 // function : execute
456 // purpose  :
457 //=================================================================================
458 bool BasicGUI_CurveDlg::execute (ObjectList& objects)
459 {
460   bool res = false;
461
462   GEOM::GEOM_Object_var anObj;
463
464   GEOM::GEOM_ICurvesOperations_var anOper = GEOM::GEOM_ICurvesOperations::_narrow(getOperation());
465
466   GEOM::ListOfGO_var points = new GEOM::ListOfGO();
467   points->length(myPoints.count());
468   for (int i = 0; i < myPoints.count(); i++)
469     points[i] = myPoints[i].copy();
470
471   switch (getConstructorId()) {
472   case 0 :
473     if (myBySelectionBtn->isChecked())
474       anObj = anOper->MakePolyline(points.in(), myGroupPoints->CheckButton1->isChecked());
475     else
476       anObj = anOper->MakeCurveParametricNew(qPrintable(myGroupParams->myXExpr->text()),
477                                              qPrintable(myGroupParams->myYExpr->text()),
478                                              qPrintable(myGroupParams->myZExpr->text()),
479                                              myGroupParams->myPMin->value(),
480                                              myGroupParams->myPMax->value(),
481                                              myGroupParams->myPStep->value(),
482                                              GEOM::Polyline);
483     res = true;
484     break;
485   case 1 :
486     if (myBySelectionBtn->isChecked())
487       anObj = anOper->MakeSplineBezier(points.in(), myGroupPoints->CheckButton1->isChecked());
488     else
489       anObj = anOper->MakeCurveParametricNew(qPrintable(myGroupParams->myXExpr->text()),
490                                              qPrintable(myGroupParams->myYExpr->text()),
491                                              qPrintable(myGroupParams->myZExpr->text()),
492                                              myGroupParams->myPMin->value(),
493                                              myGroupParams->myPMax->value(),
494                                              myGroupParams->myPStep->value(),
495                                              GEOM::Bezier);
496     res = true;
497     break;
498   case 2 :
499     if (myBySelectionBtn->isChecked()) {
500       bool disableTangents = (myGroupPoints->CheckButton1->isChecked() ||
501                               myGroupPoints->CheckButton2->isChecked());
502       if (!disableTangents && myGroupTangents->isChecked()) {
503         anObj = anOper->MakeSplineInterpolWithTangents(points.in(), myVec1.get(), myVec2.get());
504       }
505       else
506         anObj = anOper->MakeSplineInterpolation(points.in(), myGroupPoints->CheckButton1->isChecked(),
507                                                 myGroupPoints->CheckButton2->isChecked());
508     }
509     else
510       anObj = anOper->MakeCurveParametricNew(qPrintable(myGroupParams->myXExpr->text()),
511                                              qPrintable(myGroupParams->myYExpr->text()),
512                                              qPrintable(myGroupParams->myZExpr->text()),
513                                              myGroupParams->myPMin->value(),
514                                              myGroupParams->myPMax->value(),
515                                              myGroupParams->myPStep->value(),
516                                              GEOM::Interpolation);
517     res = true;
518     break;
519   }
520
521   if (!anObj->_is_nil()) {
522     if (myAnaliticalBtn->isChecked() && !IsPreview()) {
523       QStringList aParameters;
524       aParameters<<myGroupParams->myPMin->text();
525       aParameters<<myGroupParams->myPMax->text();
526       aParameters<<myGroupParams->myPStep->text();
527       anObj->SetParameters(aParameters.join(":").toLatin1().constData());
528     }
529     objects.push_back(anObj._retn());
530   }
531
532   return res;
533 }
534
535 //=================================================================================
536 // function : addSubshapesToStudy
537 // purpose  : virtual method to add new SubObjects if local selection
538 //=================================================================================
539 void BasicGUI_CurveDlg::addSubshapesToStudy()
540 {
541   for ( int i = 0; i < myPoints.count(); i++ )
542     GEOMBase::PublishSubObject( myPoints[i].get() );
543 }
544
545 //=================================================================================
546 // function : CreationModeChanged
547 // purpose  :
548 //=================================================================================
549 void BasicGUI_CurveDlg::CreationModeChanged()
550 {
551   const QObject* s = sender();
552   myGroupPoints->setVisible(myBySelectionBtn == s);
553   myGroupParams->setVisible(myBySelectionBtn != s);
554
555   ConstructorsClicked(getConstructorId());
556 }
557
558 //=================================================================================
559 // function : ValueChangedInSpinBox()
560 // purpose  :
561 //=================================================================================
562 void BasicGUI_CurveDlg::ValueChangedInSpinBox (double/*theValue*/)
563 {
564   processPreview();
565 }
566
567 //=================================================================================
568 // function : ValueChangedInSpinBox()
569 // purpose  :
570 //=================================================================================
571 void BasicGUI_CurveDlg::ValueChangedInSpinBox (int/*theValue*/)
572 {
573   processPreview();
574 }
575
576 //=================================================================================
577 // function : OnEditingFinished()
578 // purpose  :
579 //=================================================================================
580 void BasicGUI_CurveDlg::OnEditingFinished()
581 {
582   processPreview();
583 }