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