0027772: Foundation Classes - define Standard_Boolean using C++ type "bool" instead...
[occt.git] / samples / mfc / standard / Common / DimensionDlg.cpp
CommitLineData
a6eb515f 1// CDimensionDlg.cpp : implementation file
2//
3
4#include "stdafx.h"
5
6#include "DimensionDlg.h"
7#include "LengthParamsEdgePage.h"
8#include "LengthParamsVerticesPage.h"
9#include "LengthParamsEdgesPage.h"
10#include "AngleParamsVerticesPage.h"
11#include "RadiusParamsPage.h"
60bf98ae 12#include "ParamsFacesPage.h"
a6eb515f 13#include <Standard_Macro.hxx>
a6eb515f 14#include <TColStd_ListIteratorOfListOfInteger.hxx>
15#include <TColStd_ListOfInteger.hxx>
16#include <AIS_LocalContext.hxx>
17#include <Quantity_Color.hxx>
18
19BEGIN_MESSAGE_MAP(CDimensionDlg, CDialog)
20 ON_BN_CLICKED(IDOK, &CDimensionDlg::OnBnClickedOk)
21 ON_BN_CLICKED(IDC_DimLength, &CDimensionDlg::OnBnClickedDimLength)
22 ON_BN_CLICKED(IDC_DimAngle, &CDimensionDlg::OnBnClickedDimAngle)
23 ON_BN_CLICKED(IDC_DimRadius, &CDimensionDlg::OnBnClickedDimRadius)
24 ON_NOTIFY(TCN_SELCHANGE, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangeLengthTab)
25 ON_NOTIFY(TCN_SELCHANGING, IDC_LengthTab, &CDimensionDlg::OnTcnSelChangingLengthTab)
26 ON_WM_DESTROY()
27 ON_NOTIFY(TCN_SELCHANGE, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangeAngleTab)
28 ON_NOTIFY(TCN_SELCHANGING, IDC_AngleTab, &CDimensionDlg::OnTcnSelChangingAngleTab)
29 ON_BN_CLICKED(IDC_DimDiameter, &CDimensionDlg::OnBnClickedDimDiameter)
30 ON_BN_CLICKED(IDC_2DText, &CDimensionDlg::OnBnClicked2dText)
31 ON_BN_CLICKED(IDC_3DText, &CDimensionDlg::OnBnClicked3dText)
32 ON_BN_CLICKED(IDC_DimensionColor, &CDimensionDlg::OnBnClickedDimensionColor)
60bf98ae 33 ON_WM_CLOSE()
a6eb515f 34END_MESSAGE_MAP()
35
36//=======================================================================
37//function : CDimensionDlg
38//purpose :
39//=======================================================================
40
41CDimensionDlg::CDimensionDlg(CWnd* pParent /*=NULL*/)
42 : CDialog(CDimensionDlg::IDD, pParent),
43 mySelectedDimType(0),
44 myFontSize (10),
45 myDimensionColor (Quantity_NOC_LAWNGREEN)
46{
47}
48
49//=======================================================================
50//function : CDimensionDlg
51//purpose :
52//=======================================================================
53
54CDimensionDlg::CDimensionDlg (Handle(AIS_InteractiveContext) &theAISContext,
55 CWnd* pParent)
56: CDialog(CDimensionDlg::IDD, pParent),
57 mySelectedDimType(0),
58 myFontSize (10),
59 myDimensionColor (Quantity_NOC_LAWNGREEN)
60{
61 myAISContext = theAISContext;
62}
63
64//=======================================================================
65//function : ~CDimensionDlg
66//purpose :
67//=======================================================================
68
69CDimensionDlg::~CDimensionDlg()
70{
71}
72
73//=======================================================================
74//function : SetContext
75//purpose :
76//=======================================================================
77
78void CDimensionDlg::SetContext (const Handle(AIS_InteractiveContext) theContext)
79{
80 myAISContext = theContext;
81}
82
83//=======================================================================
84//function : OnInitDialog
85//purpose : Initialization of dialog fields and parameters
86//=======================================================================
87
88BOOL CDimensionDlg::OnInitDialog()
89{
90 CDialog::OnInitDialog();
91
92 myLengthParams = (CTabCtrl*) GetDlgItem (IDC_LengthTab);
93 myAngleParams = (CTabCtrl*) GetDlgItem (IDC_AngleTab);
94 myRadiusParams = (CTabCtrl*) GetDlgItem (IDC_RadiusTab);
95 myDiameterParams = (CTabCtrl*) GetDlgItem (IDC_DiameterTab);
96
97 CreateLengthParamsTab();
98 CreateAngleParamsTab();
99 CreateRadiusParamsTab();
100 CreateDiameterParamsTab( );
101
102 myLengthParams->ShowWindow (SW_SHOW);
103 myAngleParams->ShowWindow (SW_HIDE);
104 myRadiusParams->ShowWindow (SW_HIDE);
105 myDiameterParams->ShowWindow (SW_HIDE);
106
107 // Setting default values
108 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetRange (-30,30,true);
109 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
110 UpdateUnitsListForLength ();
111 ((CComboBox*)GetDlgItem (IDC_DisplayUnits))->SetCurSel (1);
112 CheckRadioButton (IDC_2DText, IDC_3DText, IDC_2DText);
113 SetTextModeControlsVisible (false);
114 CComboBox* aCombo =(CComboBox* )GetDlgItem (IDC_FontSize);
576f8b11 115 aCombo->SelectString (0, L"10");
a6eb515f 116
117 UpdateData (FALSE);
118
119 return TRUE; // return TRUE unless you set the focus to a control
120 // EXCEPTION: OCX Property Pages should return FALSE
121}
122
123//=======================================================================
124//function : DoDataExchange
125//purpose : Updating of dialog data if it's needed
126//=======================================================================
127
128void CDimensionDlg::DoDataExchange (CDataExchange* pDX)
129{
130 CDialog::DoDataExchange (pDX);
131
132 DDX_Radio (pDX, IDC_DimLength, mySelectedDimType);
133}
134
135//=======================================================================
136//function : OnBnClickedOk
137//purpose : Reset all local contexts and close the dimension dialog
138//=======================================================================
139
140void CDimensionDlg::OnBnClickedOk()
141{
142 if (myAISContext->HasOpenedContext())
143 {
144 myAISContext->CloseAllContexts();
145 }
146
147 OnOK();
148}
149
150//=======================================================================
151//function : GetFlyout
152//purpose : Only for length dimensions! Gets flyout value
153//=======================================================================
154
155const Standard_Real CDimensionDlg::GetFlyout() const
156{
157 return ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->GetPos();
158}
159
160//=======================================================================
161//function : CreateLengthParamsTab
162//purpose : Fill tab control for length dimensions
163//=======================================================================
164
165void CDimensionDlg::CreateLengthParamsTab()
166{
167 TC_ITEM aTabItem;
168 aTabItem.mask = TCIF_TEXT;
576f8b11 169 aTabItem.pszText = L"Edge";
a6eb515f 170 myLengthParams->InsertItem (0, &aTabItem);
576f8b11 171 aTabItem.pszText = L"Vertices";
a6eb515f 172 myLengthParams->InsertItem (1, &aTabItem);
576f8b11 173 aTabItem.pszText = L"Parallel edges";
a6eb515f 174 myLengthParams->InsertItem (2, &aTabItem);
576f8b11 175 aTabItem.pszText = L"Parallel faces";
60bf98ae 176 myLengthParams->InsertItem (3, &aTabItem);
a6eb515f 177
178 CLengthParamsEdgePage *aPage1 = new CLengthParamsEdgePage (myAISContext);
179 aTabItem.mask = TCIF_PARAM;
180 aTabItem.lParam = (LPARAM)aPage1;
181 myLengthParams->SetItem (0, &aTabItem);
182 VERIFY (aPage1->Create (CLengthParamsEdgePage::IDD,myLengthParams));
183 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
184 aPage1->ShowWindow (SW_SHOW);
185
186 CLengthParamsVerticesPage *aPage2 = new CLengthParamsVerticesPage (myAISContext);
187 aTabItem.mask = TCIF_PARAM;
188 aTabItem.lParam = (LPARAM)aPage2;
189 myLengthParams->SetItem (1, &aTabItem);
190 VERIFY (aPage2->Create (CLengthParamsVerticesPage::IDD,myLengthParams));
191 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
60bf98ae 192 aPage2->ShowWindow (SW_HIDE);
a6eb515f 193
194 CLengthParamsEdgesPage *aPage3 = new CLengthParamsEdgesPage (myAISContext);
195 aTabItem.mask = TCIF_PARAM;
196 aTabItem.lParam = (LPARAM)aPage3;
197 myLengthParams->SetItem (2, &aTabItem);
198 VERIFY (aPage3->Create (CLengthParamsEdgesPage::IDD,myLengthParams));
199 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
60bf98ae 200 aPage3->ShowWindow (SW_HIDE);
201
202 CParamsFacesPage *aPage4 = new CParamsFacesPage (myAISContext);
203 aTabItem.mask = TCIF_PARAM;
204 aTabItem.lParam = (LPARAM)aPage4;
205 myLengthParams->SetItem (3, &aTabItem);
206 VERIFY (aPage4->Create (CParamsFacesPage::IDD,myLengthParams));
207 aPage4->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
208 aPage4->ShowWindow (SW_HIDE);
a6eb515f 209}
210
211//=======================================================================
212//function : CreateAngleParamsTab
213//purpose : Fill tab control for angle dimensions
214//=======================================================================
215
216void CDimensionDlg::CreateAngleParamsTab()
217{
218 TC_ITEM aTabItem;
219 aTabItem.mask = TCIF_TEXT;
576f8b11 220 aTabItem.pszText = L"Two edges";
a6eb515f 221 myAngleParams->InsertItem (0, &aTabItem);
576f8b11 222 aTabItem.pszText = L"Three vertices";
a6eb515f 223 myAngleParams->InsertItem (1, &aTabItem);
576f8b11 224 aTabItem.pszText = L"Two faces";
60bf98ae 225 myAngleParams->InsertItem (2, &aTabItem);
a6eb515f 226
227 CLengthParamsEdgesPage *aPage1 = new CLengthParamsEdgesPage (myAISContext, true);
228 aTabItem.mask = TCIF_PARAM;
229 aTabItem.lParam = (LPARAM)aPage1;
230 myAngleParams->SetItem (0, &aTabItem);
231 VERIFY (aPage1->Create (CLengthParamsEdgesPage::IDD,myAngleParams));
232 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
233 aPage1->ShowWindow (SW_SHOW);
234
235 CAngleParamsVerticesPage *aPage2 = new CAngleParamsVerticesPage (myAISContext);
236 aTabItem.mask = TCIF_PARAM;
237 aTabItem.lParam = (LPARAM)aPage2;
238 myAngleParams->SetItem (1, &aTabItem);
239 VERIFY (aPage2->Create (CAngleParamsVerticesPage::IDD,myAngleParams));
240 aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
60bf98ae 241 aPage2->ShowWindow (SW_HIDE);
242
243 CParamsFacesPage *aPage3 = new CParamsFacesPage (myAISContext, true);
244 aTabItem.mask = TCIF_PARAM;
245 aTabItem.lParam = (LPARAM)aPage3;
246 myAngleParams->SetItem (2, &aTabItem);
247 VERIFY (aPage3->Create (CParamsFacesPage::IDD,myAngleParams));
248 aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
249 aPage3->ShowWindow (SW_HIDE);
a6eb515f 250}
251
252//=======================================================================
253//function : CreateRadiusParamsTab
254//purpose : Fill tab control for radius dimensions
255//=======================================================================
256
257void CDimensionDlg::CreateRadiusParamsTab()
258{
259 TC_ITEM aTabItem;
260 aTabItem.mask = TCIF_TEXT;
576f8b11 261 aTabItem.pszText = L"Circle or arc";
a6eb515f 262 myRadiusParams->InsertItem (0, &aTabItem);
263 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext);
264 aTabItem.mask = TCIF_PARAM;
265 aTabItem.lParam = (LPARAM)aPage1;
266 myRadiusParams->SetItem (0, &aTabItem);
267 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myRadiusParams));
268 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
269 aPage1->ShowWindow (SW_SHOW);
270}
271
272//=======================================================================
273//function : CreateDiameterParamsTab
274//purpose : Fill tab control for diameter dimensions
275//=======================================================================
276
277void CDimensionDlg::CreateDiameterParamsTab()
278{
279 TC_ITEM aTabItem;
280 aTabItem.mask = TCIF_TEXT;
576f8b11 281 aTabItem.pszText = L"Circle or arc";
a6eb515f 282 myDiameterParams->InsertItem (0, &aTabItem);
283 CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext,Standard_True);
284 aTabItem.mask = TCIF_PARAM;
285 aTabItem.lParam = (LPARAM)aPage1;
286 myRadiusParams->SetItem (0, &aTabItem);
287 VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myDiameterParams));
288 aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER);
289 aPage1->ShowWindow (SW_SHOW);
290}
291
292//=======================================================================
293//function : UpdateStandardModeForAngle
294//purpose :
295//=======================================================================
296
297void CDimensionDlg::UpdateStandardModeForAngle()
298{
299 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
300 myAISContext->CloseAllContexts();
301 myAISContext->OpenLocalContext();
60bf98ae 302 TopAbs_ShapeEnum aMode;
303
304 if (aTabNum == 1)
305 {
306 aMode = TopAbs_VERTEX;
307 }
308 else if (aTabNum == 2)
309 {
310 aMode = TopAbs_FACE;
311 }
312 else
313 {
314 aMode = TopAbs_EDGE;
315 }
316
317 myAISContext->ActivateStandardMode (aMode);
a6eb515f 318}
319
320//=======================================================================
321//function : UpdateStandardModeForLength
322//purpose :
323//=======================================================================
324
325void CDimensionDlg::UpdateStandardModeForLength()
326{
327 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
328 myAISContext->CloseAllContexts();
329 myAISContext->OpenLocalContext();
60bf98ae 330 TopAbs_ShapeEnum aMode;
331
332 if (aTabNum == 1)
333 {
334 aMode = TopAbs_VERTEX;
335 }
336 else if (aTabNum == 3)
337 {
338 aMode = TopAbs_FACE;
339 }
340 else
341 {
342 aMode = TopAbs_EDGE;
343 }
344 myAISContext->ActivateStandardMode (aMode);
a6eb515f 345}
346
347//=======================================================================
348//function : UpdateStandardModeForLength
349//purpose :
350//=======================================================================
351
352void CDimensionDlg::UpdateStandardMode()
353{
354 int aCurIndex = GetCheckedRadioButton (IDC_DimLength, IDC_DimDiameter);
355 switch (aCurIndex)
356 {
357 case IDC_DimLength:
358 UpdateStandardModeForLength();
359 break;
360 case IDC_DimAngle:
361 UpdateStandardModeForAngle();
362 break;
363 case IDC_DimRadius:
364 case IDC_DimDiameter:
365 {
366 myAISContext->OpenLocalContext();
367 myAISContext->ActivateStandardMode (TopAbs_EDGE);
368 }
369 break;
370 }
371}
372
373//=======================================================================
374//function : OnBnClickedDimLength
375//purpose : it is called when <Length> radio button is chosen
376//=======================================================================
377
378void CDimensionDlg::OnBnClickedDimLength()
379{
380 // Update parameters
381 UpdateStandardModeForLength ();
e0280ce9 382 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_SHOW);
383 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
384 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
385 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
a6eb515f 386
387 UpdateUnitsListForLength ();
388 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
389}
390
391//=======================================================================
392//function : OnBnClickedDimAngle
393//purpose : it is called when <Angle> radio button is chosen
394//=======================================================================
395
396void CDimensionDlg::OnBnClickedDimAngle()
397{
398 // Update parameters
399 UpdateStandardModeForAngle();
e0280ce9 400 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
401 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_SHOW);
402 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
403 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
a6eb515f 404
405 UpdateUnitsListForAngle();
406 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15);
407}
408
409//=======================================================================
410//function : OnBnClickedDimDiameter
411//purpose : it is called when <Diameter> radio button is chosen
412//=======================================================================
413
414void CDimensionDlg::OnBnClickedDimDiameter()
415{
416 // Update parameters
417 myAISContext->CloseAllContexts();
418 myAISContext->OpenLocalContext();
419 myAISContext->ActivateStandardMode (TopAbs_EDGE);
420
e0280ce9 421 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
422 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
423 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE);
424 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_SHOW);
a6eb515f 425
426 UpdateUnitsListForLength();
427 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
428}
429
430//=======================================================================
431//function : OnBnClickedDimRadius
432//purpose : it is called when <Radius> radio button is chosen
433//=======================================================================
434
435void CDimensionDlg::OnBnClickedDimRadius()
436{
437 // Update parameters
438 myAISContext->CloseAllContexts();
439 myAISContext->OpenLocalContext();
440 myAISContext->ActivateStandardMode (TopAbs_EDGE);
e0280ce9 441 GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE);
442 GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE);
443 GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_SHOW);
444 GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE);
a6eb515f 445
446 UpdateUnitsListForLength();
447 ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0);
448}
449
450//=======================================================================
451//function : OnTcnSelChangeLengthTab
452//purpose : it is called when in Length tab control current tab was changed
453//=======================================================================
454
5c573e69 455void CDimensionDlg::OnTcnSelChangeLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
a6eb515f 456{
457 // Show this chosen tab page
458 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
459 TC_ITEM anItem;
460 anItem.mask = TCIF_PARAM;
461 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
462 ASSERT(anItem.lParam);
463 CWnd *aWnd = (CWnd*)anItem.lParam;
464 aWnd->ShowWindow (SW_SHOW);
465 UpdateStandardModeForLength();
466 *pResult = 0;
467}
468
469//=======================================================================
470//function : OnTcnSelChangingLengthTab
471//purpose : it is called when in Length tab control current tab
472// is changing
473// It is used to hide the current tab here to prevent collisions.
474//=======================================================================
475
5c573e69 476void CDimensionDlg::OnTcnSelChangingLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
a6eb515f 477{
478 // Hide current tab page
479 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel();
480 TC_ITEM anItem;
481 anItem.mask = TCIF_PARAM;
482 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem);
483 ASSERT (anItem.lParam);
484 CWnd *aWnd = (CWnd*)anItem.lParam;
485 aWnd->ShowWindow (SW_HIDE);
486 *pResult = 0;
487}
488
489//=======================================================================
490//function : OnTcnSelChangeAngleTab
491//purpose : it is called when in Angle tab control current tab was changed
492//=======================================================================
493
5c573e69 494void CDimensionDlg::OnTcnSelChangeAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
a6eb515f 495{
496 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
497 TC_ITEM anItem;
498 anItem.mask = TCIF_PARAM;
499 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
500 ASSERT (anItem.lParam);
501 CWnd *aWnd = (CWnd*)anItem.lParam;
502 aWnd->ShowWindow (SW_SHOW);
503 UpdateStandardModeForAngle();
504 *pResult = 0;
505}
506
507//=======================================================================
508//function : OnTcnSelChangingAngleTab
509//purpose : it is called when in Angle tab control current tab
510// is changing
511// It is used to hide the current tab here to prevent collisions.
512//=======================================================================
513
5c573e69 514void CDimensionDlg::OnTcnSelChangingAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult)
a6eb515f 515{
516 int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel();
517 TC_ITEM anItem;
518 anItem.mask = TCIF_PARAM;
519 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem);
520 ASSERT (anItem.lParam);
521 CWnd *aWnd = (CWnd*)anItem.lParam;
522 aWnd->ShowWindow (SW_HIDE);
523 *pResult = 0;
524}
525
526//=======================================================================
527//function : DeactivateAllStandardModes
528//purpose :
529//=======================================================================
530
531void CDimensionDlg::DeactivateAllStandardModes()
532{
533 if (myAISContext->HasOpenedContext())
534 {
535 myAISContext->CloseAllContexts();
536 for (TColStd_ListIteratorOfListOfInteger anIt (myAISContext->LocalContext()->StandardModes());
537 anIt.More();
538 anIt.Next())
539 {
540 myAISContext->LocalContext()->DeactivateStandardMode ((TopAbs_ShapeEnum)anIt.Value());
541 }
542 }
543}
544
545//=======================================================================
546//function : OnDestroy
547//purpose :
548//=======================================================================
549
550void CDimensionDlg::OnDestroy()
551{
552 if (myAISContext->HasOpenedContext())
553 {
554 myAISContext->CloseAllContexts();
555 }
a6eb515f 556 CWnd *aWnd;
557 TC_ITEM anItem;
558 anItem.mask = TCIF_PARAM;
60bf98ae 559
560 // Destroy length tab
561 for (int i = 3; i >= 0; --i)
a6eb515f 562 {
563 ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (i, &anItem);
564 ASSERT (anItem.lParam);
565 aWnd = (CWnd*) anItem.lParam;
566 aWnd->DestroyWindow();
567 delete aWnd;
568 }
569 // Destroy angle tab
60bf98ae 570 for (int i = 2; i >= 0; --i)
a6eb515f 571 {
572 ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (i, &anItem);
573 ASSERT(anItem.lParam);
574 aWnd = (CWnd*) anItem.lParam;
575 aWnd->DestroyWindow();
576 delete aWnd;
577 }
578
60bf98ae 579 // Destroy radius tab
580 ((CTabCtrl*) GetDlgItem (IDC_RadiusTab))->GetItem (0, &anItem);
581 ASSERT(anItem.lParam);
582 aWnd = (CWnd*) anItem.lParam;
583 aWnd->DestroyWindow();
584 delete aWnd;
585
586 // Destroy diameter tab
587 ((CTabCtrl*) GetDlgItem (IDC_DiameterTab))->GetItem (0, &anItem);
588 ASSERT(anItem.lParam);
589 aWnd = (CWnd*) anItem.lParam;
590 aWnd->DestroyWindow();
591 delete aWnd;
592
a6eb515f 593 CDialog::OnDestroy();
594}
595
596//=======================================================================
597//function : GetTextType
598//purpose : Returns true if 3d text is to be used
599// and false in the case of 2d text.
600//=======================================================================
601
602const Standard_Boolean CDimensionDlg::GetTextType() const
603{
604 CButton* a3DButton = (CButton*)GetDlgItem (IDC_3DText);
dde68833 605 return a3DButton->GetCheck() != 0;
a6eb515f 606}
607
608//=======================================================================
609//function : GetFontHeight
610//purpose : Returns font height
611//=======================================================================
612
613const Standard_Real CDimensionDlg::GetFontHeight() const
614{
615 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_FontSize);
616 CString aStr;
576f8b11 617 aComboBox->GetWindowText (aStr);
618 return _wtof (aStr);
a6eb515f 619}
620
621//=======================================================================
622//function : IsText3dShaded
623//purpose : Only for 3d text; returns true if shaded 3d text is to be used
624//=======================================================================
625
626const Standard_Boolean CDimensionDlg::IsText3dShaded() const
627{
628 CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_TextDisplayMode);
629 int aCurIndex = aComboBox->GetCurSel();
630 return aCurIndex == 0 ? Standard_False : Standard_True;
631}
632
633//=======================================================================
634//function : SetTextModeControlsVisible
635//purpose : for the dialog updating
636//=======================================================================
637
638void CDimensionDlg::SetTextModeControlsVisible (bool isVisible)
639{
640 GetDlgItem (IDC_TextDisplayMode)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
641 GetDlgItem (IDC_TextDisplayModeStatic)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE);
642}
643
644//=======================================================================
645//function : OnBnClicked2dText
646//purpose : for the dialog updating when 2d text radio button was chosen
647//=======================================================================
648
649void CDimensionDlg::OnBnClicked2dText()
650{
651 SetTextModeControlsVisible (false);
652}
653
654//=======================================================================
655//function : OnBnClicked3dText
656//purpose : for the dialog updating when 3d text radio button was chosen
657//=======================================================================
658
659void CDimensionDlg::OnBnClicked3dText()
660{
661 SetTextModeControlsVisible (true);
662}
663
664//=======================================================================
665//function : UpdateUnitsListForLength
666//purpose : for the dialog updating when 3d text radio button was chosen
667//=======================================================================
668
669void CDimensionDlg::UpdateUnitsListForLength()
670{
671 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
672 aCombo->ResetContent();
576f8b11 673 aCombo->AddString (L"No");
674 aCombo->AddString (L"m");
675 aCombo->AddString (L"mm");
676 aCombo->AddString (L"in");
a6eb515f 677 aCombo->SetCurSel (1);
678}
679
680//=======================================================================
681//function : UpdateUnitsListForAngle
682//purpose : for the dialog updating when 3d text radio button was chosen
683//=======================================================================
684
685void CDimensionDlg::UpdateUnitsListForAngle()
686{
687 CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits);
688 aCombo->ResetContent();
576f8b11 689 aCombo->AddString (L"No");
690 aCombo->AddString (L"deg");
691 aCombo->AddString (L"rad");
a6eb515f 692 aCombo->SetCurSel (1);
693}
694
695//=======================================================================
696//function : IsUnitsDisplayed
697//purpose : returns true if the units is to be displayed
698//=======================================================================
699
700const Standard_Boolean CDimensionDlg::IsUnitsDisplayed() const
701{
702 CString aStr;
576f8b11 703 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
a6eb515f 704 return !aStr.IsEmpty() && aStr != "No";
705}
706
707//=======================================================================
708//function : GetUnits
709//purpose : returns display quantity units for current dimension
710//=======================================================================
711
712const TCollection_AsciiString CDimensionDlg::GetUnits() const
713{
714 if (!IsUnitsDisplayed())
715 return TCollection_AsciiString();
716 CString aStr;
576f8b11 717 GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr);
718 TCollection_ExtendedString aCharsW ((Standard_ExtString )(const wchar_t* )aStr);
719 return TCollection_AsciiString (aCharsW, '?');
a6eb515f 720}
721
722//=======================================================================
723//function : OnBnClickedDimensionColor
724//purpose : returns display quantity units for current dimension
725//=======================================================================
726
727void CDimensionDlg::OnBnClickedDimensionColor()
728{
729 Standard_Real aR;
730 Standard_Real aG;
731 Standard_Real aB;
732 myDimensionColor.Values (aR,aG,aB, Quantity_TOC_RGB);
733 COLORREF aColor = RGB (aR*255, aG*255, aB*255);
734
735 CColorDialog aDlgColor (aColor);
736 if (aDlgColor.DoModal() == IDOK)
737 {
738 aColor = aDlgColor.GetColor();
739 aR = GetRValue(aColor) / 255.0;
740 aG = GetGValue(aColor) / 255.0;
741 aB = GetBValue(aColor) / 255.0;
742 myDimensionColor = Quantity_Color (aR, aG, aB, Quantity_TOC_RGB);
743 }
744}
745
746//=======================================================================
747//function : GetDimensionColor
748//purpose : returns current dimension color
749//=======================================================================
750
751const Quantity_Color CDimensionDlg::GetDimensionColor() const
752{
753 return myDimensionColor;
754}
60bf98ae 755
756void CDimensionDlg::OnClose()
757{
758 if (myAISContext->HasOpenedContext())
759 {
760 myAISContext->CloseAllContexts();
761 }
762 CDialog::OnClose();
763}