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 | |
19 | BEGIN_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 |
34 | END_MESSAGE_MAP() |
35 | |
36 | //======================================================================= |
37 | //function : CDimensionDlg |
38 | //purpose : |
39 | //======================================================================= |
40 | |
41 | CDimensionDlg::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 | |
54 | CDimensionDlg::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 | |
69 | CDimensionDlg::~CDimensionDlg() |
70 | { |
71 | } |
72 | |
73 | //======================================================================= |
74 | //function : SetContext |
75 | //purpose : |
76 | //======================================================================= |
77 | |
78 | void 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 | |
88 | BOOL 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 | |
128 | void 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 | |
140 | void CDimensionDlg::OnBnClickedOk() |
141 | { |
a6eb515f |
142 | OnOK(); |
143 | } |
144 | |
145 | //======================================================================= |
146 | //function : GetFlyout |
147 | //purpose : Only for length dimensions! Gets flyout value |
148 | //======================================================================= |
149 | |
150 | const Standard_Real CDimensionDlg::GetFlyout() const |
151 | { |
152 | return ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->GetPos(); |
153 | } |
154 | |
155 | //======================================================================= |
156 | //function : CreateLengthParamsTab |
157 | //purpose : Fill tab control for length dimensions |
158 | //======================================================================= |
159 | |
160 | void CDimensionDlg::CreateLengthParamsTab() |
161 | { |
162 | TC_ITEM aTabItem; |
163 | aTabItem.mask = TCIF_TEXT; |
576f8b11 |
164 | aTabItem.pszText = L"Edge"; |
a6eb515f |
165 | myLengthParams->InsertItem (0, &aTabItem); |
576f8b11 |
166 | aTabItem.pszText = L"Vertices"; |
a6eb515f |
167 | myLengthParams->InsertItem (1, &aTabItem); |
576f8b11 |
168 | aTabItem.pszText = L"Parallel edges"; |
a6eb515f |
169 | myLengthParams->InsertItem (2, &aTabItem); |
576f8b11 |
170 | aTabItem.pszText = L"Parallel faces"; |
60bf98ae |
171 | myLengthParams->InsertItem (3, &aTabItem); |
a6eb515f |
172 | |
173 | CLengthParamsEdgePage *aPage1 = new CLengthParamsEdgePage (myAISContext); |
174 | aTabItem.mask = TCIF_PARAM; |
175 | aTabItem.lParam = (LPARAM)aPage1; |
176 | myLengthParams->SetItem (0, &aTabItem); |
177 | VERIFY (aPage1->Create (CLengthParamsEdgePage::IDD,myLengthParams)); |
178 | aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
179 | aPage1->ShowWindow (SW_SHOW); |
180 | |
181 | CLengthParamsVerticesPage *aPage2 = new CLengthParamsVerticesPage (myAISContext); |
182 | aTabItem.mask = TCIF_PARAM; |
183 | aTabItem.lParam = (LPARAM)aPage2; |
184 | myLengthParams->SetItem (1, &aTabItem); |
185 | VERIFY (aPage2->Create (CLengthParamsVerticesPage::IDD,myLengthParams)); |
186 | aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
60bf98ae |
187 | aPage2->ShowWindow (SW_HIDE); |
a6eb515f |
188 | |
189 | CLengthParamsEdgesPage *aPage3 = new CLengthParamsEdgesPage (myAISContext); |
190 | aTabItem.mask = TCIF_PARAM; |
191 | aTabItem.lParam = (LPARAM)aPage3; |
192 | myLengthParams->SetItem (2, &aTabItem); |
193 | VERIFY (aPage3->Create (CLengthParamsEdgesPage::IDD,myLengthParams)); |
194 | aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
60bf98ae |
195 | aPage3->ShowWindow (SW_HIDE); |
196 | |
197 | CParamsFacesPage *aPage4 = new CParamsFacesPage (myAISContext); |
198 | aTabItem.mask = TCIF_PARAM; |
199 | aTabItem.lParam = (LPARAM)aPage4; |
200 | myLengthParams->SetItem (3, &aTabItem); |
201 | VERIFY (aPage4->Create (CParamsFacesPage::IDD,myLengthParams)); |
202 | aPage4->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
203 | aPage4->ShowWindow (SW_HIDE); |
a6eb515f |
204 | } |
205 | |
206 | //======================================================================= |
207 | //function : CreateAngleParamsTab |
208 | //purpose : Fill tab control for angle dimensions |
209 | //======================================================================= |
210 | |
211 | void CDimensionDlg::CreateAngleParamsTab() |
212 | { |
213 | TC_ITEM aTabItem; |
214 | aTabItem.mask = TCIF_TEXT; |
576f8b11 |
215 | aTabItem.pszText = L"Two edges"; |
a6eb515f |
216 | myAngleParams->InsertItem (0, &aTabItem); |
576f8b11 |
217 | aTabItem.pszText = L"Three vertices"; |
a6eb515f |
218 | myAngleParams->InsertItem (1, &aTabItem); |
576f8b11 |
219 | aTabItem.pszText = L"Two faces"; |
60bf98ae |
220 | myAngleParams->InsertItem (2, &aTabItem); |
a6eb515f |
221 | |
222 | CLengthParamsEdgesPage *aPage1 = new CLengthParamsEdgesPage (myAISContext, true); |
223 | aTabItem.mask = TCIF_PARAM; |
224 | aTabItem.lParam = (LPARAM)aPage1; |
225 | myAngleParams->SetItem (0, &aTabItem); |
226 | VERIFY (aPage1->Create (CLengthParamsEdgesPage::IDD,myAngleParams)); |
227 | aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
228 | aPage1->ShowWindow (SW_SHOW); |
229 | |
230 | CAngleParamsVerticesPage *aPage2 = new CAngleParamsVerticesPage (myAISContext); |
231 | aTabItem.mask = TCIF_PARAM; |
232 | aTabItem.lParam = (LPARAM)aPage2; |
233 | myAngleParams->SetItem (1, &aTabItem); |
234 | VERIFY (aPage2->Create (CAngleParamsVerticesPage::IDD,myAngleParams)); |
235 | aPage2->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
60bf98ae |
236 | aPage2->ShowWindow (SW_HIDE); |
237 | |
238 | CParamsFacesPage *aPage3 = new CParamsFacesPage (myAISContext, true); |
239 | aTabItem.mask = TCIF_PARAM; |
240 | aTabItem.lParam = (LPARAM)aPage3; |
241 | myAngleParams->SetItem (2, &aTabItem); |
242 | VERIFY (aPage3->Create (CParamsFacesPage::IDD,myAngleParams)); |
243 | aPage3->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
244 | aPage3->ShowWindow (SW_HIDE); |
a6eb515f |
245 | } |
246 | |
247 | //======================================================================= |
248 | //function : CreateRadiusParamsTab |
249 | //purpose : Fill tab control for radius dimensions |
250 | //======================================================================= |
251 | |
252 | void CDimensionDlg::CreateRadiusParamsTab() |
253 | { |
254 | TC_ITEM aTabItem; |
255 | aTabItem.mask = TCIF_TEXT; |
576f8b11 |
256 | aTabItem.pszText = L"Circle or arc"; |
a6eb515f |
257 | myRadiusParams->InsertItem (0, &aTabItem); |
258 | CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext); |
259 | aTabItem.mask = TCIF_PARAM; |
260 | aTabItem.lParam = (LPARAM)aPage1; |
261 | myRadiusParams->SetItem (0, &aTabItem); |
262 | VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myRadiusParams)); |
263 | aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
264 | aPage1->ShowWindow (SW_SHOW); |
265 | } |
266 | |
267 | //======================================================================= |
268 | //function : CreateDiameterParamsTab |
269 | //purpose : Fill tab control for diameter dimensions |
270 | //======================================================================= |
271 | |
272 | void CDimensionDlg::CreateDiameterParamsTab() |
273 | { |
274 | TC_ITEM aTabItem; |
275 | aTabItem.mask = TCIF_TEXT; |
576f8b11 |
276 | aTabItem.pszText = L"Circle or arc"; |
a6eb515f |
277 | myDiameterParams->InsertItem (0, &aTabItem); |
278 | CRadiusParamsPage *aPage1 = new CRadiusParamsPage (myAISContext,Standard_True); |
279 | aTabItem.mask = TCIF_PARAM; |
280 | aTabItem.lParam = (LPARAM)aPage1; |
281 | myRadiusParams->SetItem (0, &aTabItem); |
282 | VERIFY (aPage1->Create (CRadiusParamsPage::IDD,myDiameterParams)); |
283 | aPage1->SetWindowPos (NULL,10,30,0,0,SWP_NOSIZE | SWP_NOZORDER); |
284 | aPage1->ShowWindow (SW_SHOW); |
285 | } |
286 | |
287 | //======================================================================= |
288 | //function : UpdateStandardModeForAngle |
289 | //purpose : |
290 | //======================================================================= |
291 | |
292 | void CDimensionDlg::UpdateStandardModeForAngle() |
293 | { |
294 | int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel(); |
60bf98ae |
295 | TopAbs_ShapeEnum aMode; |
296 | |
297 | if (aTabNum == 1) |
298 | { |
299 | aMode = TopAbs_VERTEX; |
300 | } |
301 | else if (aTabNum == 2) |
302 | { |
303 | aMode = TopAbs_FACE; |
304 | } |
305 | else |
306 | { |
307 | aMode = TopAbs_EDGE; |
308 | } |
309 | |
404c8936 |
310 | myAISContext->Activate (AIS_Shape::SelectionMode (aMode)); |
a6eb515f |
311 | } |
312 | |
313 | //======================================================================= |
314 | //function : UpdateStandardModeForLength |
315 | //purpose : |
316 | //======================================================================= |
317 | |
318 | void CDimensionDlg::UpdateStandardModeForLength() |
319 | { |
320 | int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel(); |
404c8936 |
321 | |
60bf98ae |
322 | TopAbs_ShapeEnum aMode; |
323 | |
324 | if (aTabNum == 1) |
325 | { |
326 | aMode = TopAbs_VERTEX; |
327 | } |
328 | else if (aTabNum == 3) |
329 | { |
330 | aMode = TopAbs_FACE; |
331 | } |
332 | else |
333 | { |
334 | aMode = TopAbs_EDGE; |
335 | } |
404c8936 |
336 | myAISContext->Activate (AIS_Shape::SelectionMode (aMode)); |
a6eb515f |
337 | } |
338 | |
339 | //======================================================================= |
340 | //function : UpdateStandardModeForLength |
341 | //purpose : |
342 | //======================================================================= |
343 | |
344 | void CDimensionDlg::UpdateStandardMode() |
345 | { |
346 | int aCurIndex = GetCheckedRadioButton (IDC_DimLength, IDC_DimDiameter); |
347 | switch (aCurIndex) |
348 | { |
349 | case IDC_DimLength: |
350 | UpdateStandardModeForLength(); |
351 | break; |
352 | case IDC_DimAngle: |
353 | UpdateStandardModeForAngle(); |
354 | break; |
355 | case IDC_DimRadius: |
356 | case IDC_DimDiameter: |
357 | { |
404c8936 |
358 | myAISContext->Activate (AIS_Shape::SelectionMode (TopAbs_EDGE)); |
a6eb515f |
359 | } |
360 | break; |
361 | } |
362 | } |
363 | |
364 | //======================================================================= |
365 | //function : OnBnClickedDimLength |
366 | //purpose : it is called when <Length> radio button is chosen |
367 | //======================================================================= |
368 | |
369 | void CDimensionDlg::OnBnClickedDimLength() |
370 | { |
371 | // Update parameters |
372 | UpdateStandardModeForLength (); |
e0280ce9 |
373 | GetDlgItem (IDC_LengthTab)->ShowWindow (SW_SHOW); |
374 | GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE); |
375 | GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE); |
376 | GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE); |
a6eb515f |
377 | |
378 | UpdateUnitsListForLength (); |
379 | ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15); |
380 | } |
381 | |
382 | //======================================================================= |
383 | //function : OnBnClickedDimAngle |
384 | //purpose : it is called when <Angle> radio button is chosen |
385 | //======================================================================= |
386 | |
387 | void CDimensionDlg::OnBnClickedDimAngle() |
388 | { |
389 | // Update parameters |
390 | UpdateStandardModeForAngle(); |
e0280ce9 |
391 | GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE); |
392 | GetDlgItem (IDC_AngleTab)->ShowWindow (SW_SHOW); |
393 | GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE); |
394 | GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE); |
a6eb515f |
395 | |
396 | UpdateUnitsListForAngle(); |
397 | ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (15); |
398 | } |
399 | |
400 | //======================================================================= |
401 | //function : OnBnClickedDimDiameter |
402 | //purpose : it is called when <Diameter> radio button is chosen |
403 | //======================================================================= |
404 | |
405 | void CDimensionDlg::OnBnClickedDimDiameter() |
406 | { |
407 | // Update parameters |
404c8936 |
408 | myAISContext->Activate (AIS_Shape::SelectionMode (TopAbs_EDGE)); |
a6eb515f |
409 | |
e0280ce9 |
410 | GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE); |
411 | GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE); |
412 | GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_HIDE); |
413 | GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_SHOW); |
a6eb515f |
414 | |
415 | UpdateUnitsListForLength(); |
416 | ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0); |
417 | } |
418 | |
419 | //======================================================================= |
420 | //function : OnBnClickedDimRadius |
421 | //purpose : it is called when <Radius> radio button is chosen |
422 | //======================================================================= |
423 | |
424 | void CDimensionDlg::OnBnClickedDimRadius() |
425 | { |
426 | // Update parameters |
404c8936 |
427 | myAISContext->Activate (AIS_Shape::SelectionMode (TopAbs_EDGE)); |
e0280ce9 |
428 | GetDlgItem (IDC_LengthTab)->ShowWindow (SW_HIDE); |
429 | GetDlgItem (IDC_AngleTab)->ShowWindow (SW_HIDE); |
430 | GetDlgItem (IDC_RadiusTab)->ShowWindow (SW_SHOW); |
431 | GetDlgItem (IDC_DiameterTab)->ShowWindow (SW_HIDE); |
a6eb515f |
432 | |
433 | UpdateUnitsListForLength(); |
434 | ((CSliderCtrl*)GetDlgItem(IDC_Flyout))->SetPos (0); |
435 | } |
436 | |
437 | //======================================================================= |
438 | //function : OnTcnSelChangeLengthTab |
439 | //purpose : it is called when in Length tab control current tab was changed |
440 | //======================================================================= |
441 | |
5c573e69 |
442 | void CDimensionDlg::OnTcnSelChangeLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult) |
a6eb515f |
443 | { |
444 | // Show this chosen tab page |
445 | int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel(); |
446 | TC_ITEM anItem; |
447 | anItem.mask = TCIF_PARAM; |
448 | ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem); |
449 | ASSERT(anItem.lParam); |
450 | CWnd *aWnd = (CWnd*)anItem.lParam; |
451 | aWnd->ShowWindow (SW_SHOW); |
452 | UpdateStandardModeForLength(); |
453 | *pResult = 0; |
454 | } |
455 | |
456 | //======================================================================= |
457 | //function : OnTcnSelChangingLengthTab |
458 | //purpose : it is called when in Length tab control current tab |
459 | // is changing |
460 | // It is used to hide the current tab here to prevent collisions. |
461 | //======================================================================= |
462 | |
5c573e69 |
463 | void CDimensionDlg::OnTcnSelChangingLengthTab (NMHDR * /*pNMHDR*/, LRESULT *pResult) |
a6eb515f |
464 | { |
465 | // Hide current tab page |
466 | int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetCurSel(); |
467 | TC_ITEM anItem; |
468 | anItem.mask = TCIF_PARAM; |
469 | ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (aTabNum, &anItem); |
470 | ASSERT (anItem.lParam); |
471 | CWnd *aWnd = (CWnd*)anItem.lParam; |
472 | aWnd->ShowWindow (SW_HIDE); |
473 | *pResult = 0; |
474 | } |
475 | |
476 | //======================================================================= |
477 | //function : OnTcnSelChangeAngleTab |
478 | //purpose : it is called when in Angle tab control current tab was changed |
479 | //======================================================================= |
480 | |
5c573e69 |
481 | void CDimensionDlg::OnTcnSelChangeAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult) |
a6eb515f |
482 | { |
483 | int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel(); |
484 | TC_ITEM anItem; |
485 | anItem.mask = TCIF_PARAM; |
486 | ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem); |
487 | ASSERT (anItem.lParam); |
488 | CWnd *aWnd = (CWnd*)anItem.lParam; |
489 | aWnd->ShowWindow (SW_SHOW); |
490 | UpdateStandardModeForAngle(); |
491 | *pResult = 0; |
492 | } |
493 | |
494 | //======================================================================= |
495 | //function : OnTcnSelChangingAngleTab |
496 | //purpose : it is called when in Angle tab control current tab |
497 | // is changing |
498 | // It is used to hide the current tab here to prevent collisions. |
499 | //======================================================================= |
500 | |
5c573e69 |
501 | void CDimensionDlg::OnTcnSelChangingAngleTab (NMHDR * /*pNMHDR*/, LRESULT *pResult) |
a6eb515f |
502 | { |
503 | int aTabNum = ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetCurSel(); |
504 | TC_ITEM anItem; |
505 | anItem.mask = TCIF_PARAM; |
506 | ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (aTabNum, &anItem); |
507 | ASSERT (anItem.lParam); |
508 | CWnd *aWnd = (CWnd*)anItem.lParam; |
509 | aWnd->ShowWindow (SW_HIDE); |
510 | *pResult = 0; |
511 | } |
512 | |
513 | //======================================================================= |
514 | //function : DeactivateAllStandardModes |
515 | //purpose : |
516 | //======================================================================= |
517 | |
518 | void CDimensionDlg::DeactivateAllStandardModes() |
519 | { |
404c8936 |
520 | myAISContext->Deactivate(); |
a6eb515f |
521 | } |
522 | |
523 | //======================================================================= |
524 | //function : OnDestroy |
525 | //purpose : |
526 | //======================================================================= |
527 | |
528 | void CDimensionDlg::OnDestroy() |
529 | { |
a6eb515f |
530 | CWnd *aWnd; |
531 | TC_ITEM anItem; |
532 | anItem.mask = TCIF_PARAM; |
60bf98ae |
533 | |
534 | // Destroy length tab |
535 | for (int i = 3; i >= 0; --i) |
a6eb515f |
536 | { |
537 | ((CTabCtrl*) GetDlgItem (IDC_LengthTab))->GetItem (i, &anItem); |
538 | ASSERT (anItem.lParam); |
539 | aWnd = (CWnd*) anItem.lParam; |
540 | aWnd->DestroyWindow(); |
541 | delete aWnd; |
542 | } |
543 | // Destroy angle tab |
60bf98ae |
544 | for (int i = 2; i >= 0; --i) |
a6eb515f |
545 | { |
546 | ((CTabCtrl*) GetDlgItem (IDC_AngleTab))->GetItem (i, &anItem); |
547 | ASSERT(anItem.lParam); |
548 | aWnd = (CWnd*) anItem.lParam; |
549 | aWnd->DestroyWindow(); |
550 | delete aWnd; |
551 | } |
552 | |
60bf98ae |
553 | // Destroy radius tab |
554 | ((CTabCtrl*) GetDlgItem (IDC_RadiusTab))->GetItem (0, &anItem); |
555 | ASSERT(anItem.lParam); |
556 | aWnd = (CWnd*) anItem.lParam; |
557 | aWnd->DestroyWindow(); |
558 | delete aWnd; |
559 | |
560 | // Destroy diameter tab |
561 | ((CTabCtrl*) GetDlgItem (IDC_DiameterTab))->GetItem (0, &anItem); |
562 | ASSERT(anItem.lParam); |
563 | aWnd = (CWnd*) anItem.lParam; |
564 | aWnd->DestroyWindow(); |
565 | delete aWnd; |
566 | |
a6eb515f |
567 | CDialog::OnDestroy(); |
568 | } |
569 | |
570 | //======================================================================= |
571 | //function : GetTextType |
572 | //purpose : Returns true if 3d text is to be used |
573 | // and false in the case of 2d text. |
574 | //======================================================================= |
575 | |
576 | const Standard_Boolean CDimensionDlg::GetTextType() const |
577 | { |
578 | CButton* a3DButton = (CButton*)GetDlgItem (IDC_3DText); |
dde68833 |
579 | return a3DButton->GetCheck() != 0; |
a6eb515f |
580 | } |
581 | |
582 | //======================================================================= |
583 | //function : GetFontHeight |
584 | //purpose : Returns font height |
585 | //======================================================================= |
586 | |
587 | const Standard_Real CDimensionDlg::GetFontHeight() const |
588 | { |
589 | CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_FontSize); |
590 | CString aStr; |
576f8b11 |
591 | aComboBox->GetWindowText (aStr); |
592 | return _wtof (aStr); |
a6eb515f |
593 | } |
594 | |
595 | //======================================================================= |
596 | //function : IsText3dShaded |
597 | //purpose : Only for 3d text; returns true if shaded 3d text is to be used |
598 | //======================================================================= |
599 | |
600 | const Standard_Boolean CDimensionDlg::IsText3dShaded() const |
601 | { |
602 | CComboBox *aComboBox = (CComboBox*)GetDlgItem (IDC_TextDisplayMode); |
603 | int aCurIndex = aComboBox->GetCurSel(); |
604 | return aCurIndex == 0 ? Standard_False : Standard_True; |
605 | } |
606 | |
607 | //======================================================================= |
608 | //function : SetTextModeControlsVisible |
609 | //purpose : for the dialog updating |
610 | //======================================================================= |
611 | |
612 | void CDimensionDlg::SetTextModeControlsVisible (bool isVisible) |
613 | { |
614 | GetDlgItem (IDC_TextDisplayMode)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE); |
615 | GetDlgItem (IDC_TextDisplayModeStatic)->ShowWindow (isVisible ? SW_SHOW : SW_HIDE); |
616 | } |
617 | |
618 | //======================================================================= |
619 | //function : OnBnClicked2dText |
620 | //purpose : for the dialog updating when 2d text radio button was chosen |
621 | //======================================================================= |
622 | |
623 | void CDimensionDlg::OnBnClicked2dText() |
624 | { |
625 | SetTextModeControlsVisible (false); |
626 | } |
627 | |
628 | //======================================================================= |
629 | //function : OnBnClicked3dText |
630 | //purpose : for the dialog updating when 3d text radio button was chosen |
631 | //======================================================================= |
632 | |
633 | void CDimensionDlg::OnBnClicked3dText() |
634 | { |
635 | SetTextModeControlsVisible (true); |
636 | } |
637 | |
638 | //======================================================================= |
639 | //function : UpdateUnitsListForLength |
640 | //purpose : for the dialog updating when 3d text radio button was chosen |
641 | //======================================================================= |
642 | |
643 | void CDimensionDlg::UpdateUnitsListForLength() |
644 | { |
645 | CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits); |
646 | aCombo->ResetContent(); |
576f8b11 |
647 | aCombo->AddString (L"No"); |
648 | aCombo->AddString (L"m"); |
649 | aCombo->AddString (L"mm"); |
650 | aCombo->AddString (L"in"); |
a6eb515f |
651 | aCombo->SetCurSel (1); |
652 | } |
653 | |
654 | //======================================================================= |
655 | //function : UpdateUnitsListForAngle |
656 | //purpose : for the dialog updating when 3d text radio button was chosen |
657 | //======================================================================= |
658 | |
659 | void CDimensionDlg::UpdateUnitsListForAngle() |
660 | { |
661 | CComboBox *aCombo = (CComboBox*)GetDlgItem (IDC_DisplayUnits); |
662 | aCombo->ResetContent(); |
576f8b11 |
663 | aCombo->AddString (L"No"); |
664 | aCombo->AddString (L"deg"); |
665 | aCombo->AddString (L"rad"); |
a6eb515f |
666 | aCombo->SetCurSel (1); |
667 | } |
668 | |
669 | //======================================================================= |
670 | //function : IsUnitsDisplayed |
671 | //purpose : returns true if the units is to be displayed |
672 | //======================================================================= |
673 | |
674 | const Standard_Boolean CDimensionDlg::IsUnitsDisplayed() const |
675 | { |
676 | CString aStr; |
576f8b11 |
677 | GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr); |
a6eb515f |
678 | return !aStr.IsEmpty() && aStr != "No"; |
679 | } |
680 | |
681 | //======================================================================= |
682 | //function : GetUnits |
683 | //purpose : returns display quantity units for current dimension |
684 | //======================================================================= |
685 | |
686 | const TCollection_AsciiString CDimensionDlg::GetUnits() const |
687 | { |
688 | if (!IsUnitsDisplayed()) |
689 | return TCollection_AsciiString(); |
690 | CString aStr; |
576f8b11 |
691 | GetDlgItem (IDC_DisplayUnits)->GetWindowText (aStr); |
e620e285 |
692 | return TCollection_AsciiString ((const wchar_t* )aStr); |
a6eb515f |
693 | } |
694 | |
695 | //======================================================================= |
696 | //function : OnBnClickedDimensionColor |
697 | //purpose : returns display quantity units for current dimension |
698 | //======================================================================= |
699 | |
700 | void CDimensionDlg::OnBnClickedDimensionColor() |
701 | { |
702 | Standard_Real aR; |
703 | Standard_Real aG; |
704 | Standard_Real aB; |
705 | myDimensionColor.Values (aR,aG,aB, Quantity_TOC_RGB); |
706 | COLORREF aColor = RGB (aR*255, aG*255, aB*255); |
707 | |
708 | CColorDialog aDlgColor (aColor); |
709 | if (aDlgColor.DoModal() == IDOK) |
710 | { |
711 | aColor = aDlgColor.GetColor(); |
712 | aR = GetRValue(aColor) / 255.0; |
713 | aG = GetGValue(aColor) / 255.0; |
714 | aB = GetBValue(aColor) / 255.0; |
715 | myDimensionColor = Quantity_Color (aR, aG, aB, Quantity_TOC_RGB); |
716 | } |
717 | } |
718 | |
719 | //======================================================================= |
720 | //function : GetDimensionColor |
721 | //purpose : returns current dimension color |
722 | //======================================================================= |
723 | |
724 | const Quantity_Color CDimensionDlg::GetDimensionColor() const |
725 | { |
726 | return myDimensionColor; |
727 | } |
60bf98ae |
728 | |
729 | void CDimensionDlg::OnClose() |
730 | { |
60bf98ae |
731 | CDialog::OnClose(); |
732 | } |