0026937: Eliminate NO_CXX_EXCEPTION macro support
[occt.git] / samples / mfc / standard / 08_HLR / src / HLRView2D.cpp
1 // HLRView.cpp : implementation of the CHLRView2D class
2 //
3
4 #include "stdafx.h"
5 #include "HLRView2D.h"
6 #include "HLRApp.h"
7 #include "HLRDoc.h"
8 #include "resource2d\RectangularGrid.h"
9 #include "resource2d\CircularGrid.h"
10
11 #define ValZWMin 1
12
13 #ifdef _DEBUG
14 //#define new DEBUG_NEW
15 #undef THIS_FILE
16 static char THIS_FILE[] = __FILE__;
17 #endif
18
19 // the key for multi selection :
20 #define MULTISELECTIONKEY MK_SHIFT
21
22 // the key for shortcut ( use to activate dynamic rotation, panning )
23 #define CASCADESHORTCUTKEY MK_CONTROL
24
25 // define in witch case you want to display the popup
26 #define POPUPONBUTTONDOWN
27
28 /////////////////////////////////////////////////////////////////////////////
29 // CHLRView2D
30
31 IMPLEMENT_DYNCREATE(CHLRView2D, OCC_2dView)
32
33 BEGIN_MESSAGE_MAP(CHLRView2D, OCC_2dView)
34   //{{AFX_MSG_MAP(CHLRView2D)
35   ON_WM_MOUSEMOVE()
36   //}}AFX_MSG_MAP
37 END_MESSAGE_MAP()
38
39 /////////////////////////////////////////////////////////////////////////////
40 // CHLRView2D construction/destruction
41
42 CHLRView2D::CHLRView2D()
43 {
44 }
45
46 CHLRView2D::~CHLRView2D()
47 {
48 }
49
50 CHLRDoc* CHLRView2D::GetDocument() // non-debug version is inline
51 {
52   //ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(OCC_2dDoc)));
53   return (CHLRDoc*)m_pDocument;
54 }
55
56
57 void CHLRView2D::OnInitialUpdate()
58 {
59   Handle(WNT_Window) aWNTWindow;
60   aWNTWindow = new WNT_Window(GetSafeHwnd(),Quantity_NOC_GRAY);
61   myV2dView = GetDocument()->GetViewer2D()->CreateView();
62   myV2dView->SetWindow(aWNTWindow);
63
64   // initialyse the grids dialogs
65   TheRectangularGridDialog.Create(CRectangularGrid::IDD, NULL);
66   TheCircularGridDialog.Create(CCircularGrid::IDD, NULL);
67   TheRectangularGridDialog.SetViewer (GetDocument()->GetViewer2D());
68   TheCircularGridDialog.SetViewer (GetDocument()->GetViewer2D());
69
70   Standard_Integer w=100 , h=100 ;   /* Debug Matrox                         */
71   aWNTWindow->Size (w,h) ;           /* Keeps me unsatisfied (rlb).....      */
72   /* Resize is not supposed to be done on */
73   /* Matrox                               */
74   /* I suspect another problem elsewhere  */
75   ::PostMessage ( GetSafeHwnd () , WM_SIZE , SIZE_RESTORED , w + h*65536 ) ;
76 }
77
78 //-----------------------------------------------------------------------------------------
79 //
80 //-----------------------------------------------------------------------------------------
81 void CHLRView2D::DragEvent2D(const Standard_Integer /*x*/,
82                              const Standard_Integer /*y*/,
83                              const Standard_Integer /*TheState*/)
84 {
85 }
86
87
88 //-----------------------------------------------------------------------------------------
89 //
90 //-----------------------------------------------------------------------------------------
91 void CHLRView2D::InputEvent2D(const Standard_Integer /*x*/,
92                               const Standard_Integer /*y*/)
93 {
94 }
95
96 //-----------------------------------------------------------------------------------------
97 //
98 //-----------------------------------------------------------------------------------------
99 void CHLRView2D::MoveEvent2D(const Standard_Integer /*x*/,
100                              const Standard_Integer /*y*/)
101 {
102 }
103
104 //-----------------------------------------------------------------------------------------
105 //
106 //-----------------------------------------------------------------------------------------
107 void CHLRView2D::MultiMoveEvent2D(const Standard_Integer /*x*/,
108                                   const Standard_Integer /*y*/)
109 {
110 }
111
112 //-----------------------------------------------------------------------------------------
113 //
114 //-----------------------------------------------------------------------------------------
115 void CHLRView2D::MultiDragEvent2D(const Standard_Integer /*x*/,
116                                   const Standard_Integer /*y*/,
117                                   const Standard_Integer /*TheState*/)
118 {
119 }
120
121 //-----------------------------------------------------------------------------------------
122 //
123 //-----------------------------------------------------------------------------------------
124 void CHLRView2D::MultiInputEvent2D(const Standard_Integer /*x*/,
125                                    const Standard_Integer /*y*/)
126 {
127 }
128
129 //-----------------------------------------------------------------------------------------
130 //
131 //-----------------------------------------------------------------------------------------
132 void CHLRView2D::OnMouseMove(UINT nFlags, CPoint point)
133 {
134   if ( (nFlags & MK_LBUTTON) &! (nFlags & MK_RBUTTON) ) // Left + Right is specific
135   {
136     if ( nFlags & CASCADESHORTCUTKEY )
137     {
138       // move with MB1 and CASCADESHORTCUTKEY : on the dynamic zooming
139       // Do the zoom in function of mouse's coordinates
140       myV2dView->Zoom(myXmax,myYmax,point.x,point.y);
141       myXmax = point.x;
142       myYmax = point.y;
143     }
144     else // if ( CASCADESHORTCUTKEY )
145     {
146       switch (myCurrentMode)
147       {
148       case CurAction2d_Nothing :
149         myXmax = point.x;
150         myYmax = point.y;
151         DragEvent2D(myXmax,myYmax,0);
152         break;
153       case CurAction2d_DynamicZooming :
154         myV2dView->Zoom(myXmax,myYmax,point.x,point.y);
155         myXmax=point.x;
156         myYmax=point.y;
157         break;
158       case CurAction2d_WindowZooming :
159         myXmax = point.x;
160         myYmax = point.y;
161         break;
162       case CurAction2d_DynamicPanning :
163         myV2dView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
164         myXmax = point.x;
165         myYmax = point.y;
166         break;
167       case CurAction2d_GlobalPanning :
168         break;
169       default :
170         throw Standard_Failure(" incompatible Current Mode ");
171         break;
172       }
173     }
174   } else if ( nFlags & MK_MBUTTON)
175   {
176     if ( nFlags & CASCADESHORTCUTKEY )
177     {
178       myV2dView->Pan (point.x-myXmax,myYmax-point.y);
179       myXmax = point.x;
180       myYmax = point.y;
181     }
182   } else if ( (nFlags & MK_RBUTTON) &! (nFlags & MK_LBUTTON) )
183   {
184   }
185   else if ( (nFlags & MK_RBUTTON) && (nFlags & MK_LBUTTON) )
186   {
187     if ( nFlags & CASCADESHORTCUTKEY ) 
188     {
189       myV2dView->Pan(point.x-myXmax,myYmax-point.y); // Realize the panning
190       myXmax = point.x; myYmax = point.y;       
191     }
192   }
193   else
194   {  // No buttons
195     myXmax = point.x;
196     myYmax = point.y;
197     if (nFlags & MULTISELECTIONKEY)
198     {
199       MultiMoveEvent2D(point.x,point.y);
200     }
201     else
202     {
203       MoveEvent2D(point.x,point.y);
204     }
205   }
206 }
207
208 #ifdef _DEBUG
209 void CHLRView2D::AssertValid() const
210 {
211   OCC_2dView::AssertValid();
212 }
213
214 void CHLRView2D::Dump(CDumpContext& dc) const
215 {
216   OCC_2dView::Dump(dc);
217 }
218
219 #endif