|
|
1.1 root 1: #include <afxwin.h>
2: #include <afxdlgs.h>
3: #include <afxcoll.h>
4: #include <string.h>
5:
6: #include "types.h"
7: //#include "dialogs.h"
8: #include "resource.h"
9: #include "ranges.h"
10: #include "dispobj.h"
11: #include "timer.h"
12: #include "tree.h"
13:
14:
15: #define PAGESIZE 8
16:
17: /*********************** GLOBAL DATA *****************************/
18:
19: CAaaArray rgLoc;
20: BOOL fXYZ = FALSE;
21: BOOL fTotal = TRUE;
22: extern HICON HIconTree;
23:
24: /*****************************************************************/
25:
26: BEGIN_MESSAGE_MAP(CTREEWND, CMDIChildWnd)
27: ON_WM_CREATE()
28: ON_WM_DESTROY()
29: ON_WM_MDIACTIVATE()
30: ON_WM_HSCROLL()
31: ON_WM_KEYDOWN()
32: ON_WM_LBUTTONDBLCLK()
33: ON_WM_LBUTTONDOWN()
34: ON_WM_PAINT()
35: ON_WM_SIZE()
36: ON_WM_VSCROLL()
37:
38: ON_COMMAND( VK_UP, OnUp )
39: ON_COMMAND( VK_DOWN, OnDown )
40: ON_COMMAND( IDM_TREE_EXPANDALL, OnExpandAll )
41: ON_COMMAND( IDM_TREE_FONT, OnFont )
42: ON_COMMAND( IDM_TREE_TOTAL, OnTotal )
43: ON_COMMAND( IDM_TREE_XYZ, OnXYZ )
44: ON_COMMAND( IDM_TREE_ZOOM, OnZoom )
45: ON_COMMAND( IDM_TREE_RANGES, OnRanges )
46:
47: END_MESSAGE_MAP()
48:
49: BOOL CTREEWND::Create(LPCSTR szTitle, LONG style, const RECT& rect,
50: CMDIFrameWnd* parent)
51: {
52: const char * pszStockClass = AfxRegisterWndClass(
53: CS_HREDRAW | CS_VREDRAW, LoadCursor(NULL, IDC_UPARROW),
54: (HBRUSH) (COLOR_WINDOW+1), HIconTree);
55:
56: return CMDIChildWnd::Create(pszStockClass, szTitle, style, rect, parent);
57: }
58:
59:
60: CTREEWND::CTREEWND() : ptOrigin(0, 0)
61: {
62: int i;
63:
64: m_pMenuCurrent = NULL;
65: m_bWindowActive = FALSE;
66: logFont = DefaultFont;
67: fZoom = FALSE;
68:
69: for (i=0; i<MAX_NUM_RANGES; i++) {
70: rs.TextColor[i] = 0;
71: rs.BackColor[i] = RGB( 0, 0, 0);
72: rs.Above[i] = 101;
73: }
74:
75: rs.Above[0] = 0; rs.BackColor[0] = RGB( 0, 0, 255);
76: rs.TextColor[0] = 1;
77: rs.Above[1] = 1; rs.BackColor[1] = RGB( 0, 255, 0);
78: rs.Above[2] = 2; rs.BackColor[2] = RGB( 0, 255, 255);
79: rs.Above[3] = 5; rs.BackColor[3] = RGB( 255, 255, 0);
80: rs.Above[4] = 20; rs.BackColor[4] = RGB( 255, 0, 0);
81: rs.Above[5] = 101;
82: rs.cRanges = 5;
83: }
84:
85: CTREEWND::~CTREEWND()
86: {
87: if (m_bWindowActive) {
88: m_pMenuCurrent->Detach();
89: }
90: }
91:
92:
93: int CTREEWND::OnCreate(LPCREATESTRUCT p)
94: {
95: TEXTMETRIC tm;
96:
97: CDC * dc = GetDC();
98: dc->GetTextMetrics( &tm );
99: ReleaseDC( dc );
100:
101: m_cxChar = tm.tmAveCharWidth;
102: m_cxCaps = ( (tm.tmPitchAndFamily & 1) ? 3 : 2) * m_cxChar / 2;
103: m_cyChar = tm.tmHeight + tm.tmExternalLeading;
104: m_nMaxWidth = ( 20 ) * m_cxCaps;
105:
106: return 0;
107: }
108:
109:
110: void CTREEWND::OnDestroy()
111: {
112: // m_pMDIFrameWnd->SendMessage(WM_CHILDDESTROY, (UINT)m_hWnd, 0);
113: return;
114: }
115:
116:
117: void CTREEWND::OnSize(UINT nType, int cx, int cy)
118: {
119: m_cxClient = cx;
120: m_cyClient = cy;
121:
122: ptOrigin.y = min( ptOrigin.y, rtArea.Height());
123:
124: SetScrollRange( SB_VERT, 0, rtArea.Height(), FALSE );
125: SetScrollPos( SB_VERT, ptOrigin.y, TRUE );
126:
127:
128: ptOrigin.x = min( ptOrigin.x, rtArea.Width() );
129:
130: SetScrollRange( SB_HORZ, 0, rtArea.Width(), FALSE );
131: SetScrollPos( SB_HORZ, ptOrigin.x, TRUE );
132:
133: CMDIChildWnd::OnSize(nType, cx, cy);
134:
135: return;
136: }
137:
138: void CTREEWND::OnMDIActivate(BOOL bActivate, CWnd * pActive,
139: CWnd* pDeactivate)
140: {
141: CMDIFrameWnd * pFrame = m_pMDIFrameWnd;
142: CMenu * pWinPopupMenu = NULL;
143: CMenu * pMenu = NULL;
144:
145: m_bWindowActive = bActivate;
146:
147: if (bActivate) {
148: pMenu = new CMenu;
149: pMenu->LoadMenu("MdiMenuTree");
150: pWinPopupMenu = pMenu->GetSubMenu(TREE_MENU_POSITION);
151:
152: CMenu * pLastMenu = pFrame->MDISetMenu(pMenu,pWinPopupMenu);
153: pLastMenu->DestroyMenu();
154:
155: delete m_pMenuCurrent;
156: m_pMenuCurrent = pMenu;
157: } else {
158: pMenu = new CMenu;
159: pMenu->LoadMenu("MdiMenuInit");
160: pWinPopupMenu = pMenu->GetSubMenu(INIT_MENU_POS);
161:
162: CMenu * pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
163: pLastMenu->DestroyMenu();
164:
165: delete m_pMenuCurrent;
166: m_pMenuCurrent = pMenu;
167: }
168:
169: pFrame->DrawMenuBar();
170: }
171:
172: void CTREEWND::OnPaint()
173: {
174: CPaintDC dc (this);
175: CFont cFont;
176: CFont * lpcFontOld;
177:
178: if (!fZoom) {
179: cFont.CreateFontIndirect(&logFont);
180: lpcFontOld = dc.SelectObject(&cFont);
181: }
182: dc.SetWindowOrg(ptOrigin);
183:
184: dc.SetBkMode(TRANSPARENT);
185: dc.m_ps.rcPaint.left += ptOrigin.x;
186: dc.m_ps.rcPaint.right += ptOrigin.x;
187: dc.m_ps.rcPaint.top += ptOrigin.y;
188: dc.m_ps.rcPaint.bottom += ptOrigin.y;
189:
190: timerRoot.PaintTree(&dc, fZoom, &rs, dc.m_ps.rcPaint);
191:
192: if (!fZoom) {
193: dc.SelectObject(lpcFontOld);
194: }
195: return;
196: }
197:
198: void CTREEWND::OnVScroll(UINT wParam, UINT pos, CScrollBar *)
199: {
200: int nScrollInc;
201:
202: switch( wParam ) {
203: case SB_TOP:
204: nScrollInc = -ptOrigin.y;
205: break;
206:
207: case SB_BOTTOM:
208: nScrollInc = rtArea.Height() - ptOrigin.y;
209: break;
210:
211: case SB_LINEUP:
212: nScrollInc = -m_cyClient/10;
213: break;
214:
215: case SB_LINEDOWN:
216: nScrollInc = m_cyClient/10;
217: break;
218:
219: case SB_PAGEUP:
220: nScrollInc = min( -1, -m_cyClient);
221: break;
222:
223: case SB_PAGEDOWN:
224: nScrollInc = max( 1, m_cyClient );
225: break;
226:
227: case SB_THUMBTRACK:
228: nScrollInc = pos - ptOrigin.y;
229: break;
230:
231: default:
232: nScrollInc = 0;
233: break;
234: }
235:
236: nScrollInc = max( -ptOrigin.y, min( nScrollInc, rtArea.Height() - ptOrigin.y ) );
237: if (nScrollInc) {
238: ptOrigin.y += nScrollInc;
239: ScrollWindow( 0, -nScrollInc );
240: SetScrollPos( SB_VERT, ptOrigin.y );
241: UpdateWindow();
242: }
243: }
244:
245: void CTREEWND::OnHScroll(UINT wParam, UINT pos, CScrollBar *)
246: {
247: int nScrollInc;
248:
249: switch( wParam ) {
250: case SB_LINEUP:
251: nScrollInc = -m_cxClient/10;
252: break;
253:
254: case SB_LINEDOWN:
255: nScrollInc = m_cxClient/10;
256: break;
257:
258: case SB_PAGEUP:
259: nScrollInc = -m_cxClient;
260: break;
261:
262: case SB_PAGEDOWN:
263: nScrollInc = m_cxClient;
264: break;
265:
266: case SB_THUMBTRACK:
267: nScrollInc = pos - ptOrigin.x;
268: break;
269:
270: default:
271: nScrollInc = 0;
272: break;
273: }
274:
275: nScrollInc = max( -ptOrigin.x, min( nScrollInc, rtArea.Width() - ptOrigin.x ) );
276: if (nScrollInc) {
277: ptOrigin.x += nScrollInc;
278: ScrollWindow( -nScrollInc, 0 );
279: SetScrollPos( SB_HORZ, ptOrigin.x );
280: UpdateWindow();
281: }
282: }
283:
284: void CTREEWND::OnUp()
285: {
286: }
287:
288: void CTREEWND::OnDown()
289: {
290: }
291:
292: void CTREEWND::OnKeyDown( UINT wParam, UINT, UINT )
293: {
294: switch( wParam ) {
295: case VK_HOME:
296: OnVScroll( SB_TOP, 0, NULL );
297: break;
298: case VK_END:
299: OnVScroll( SB_BOTTOM, 0, NULL );
300: break;
301:
302: case VK_PRIOR:
303: OnVScroll( SB_PAGEUP, 0, NULL );
304: break;
305:
306: case VK_NEXT:
307: OnVScroll( SB_PAGEDOWN, 0, NULL );
308: break;
309:
310: case VK_LEFT:
311: OnHScroll( SB_PAGEUP, 0, NULL );
312: break;
313:
314: case VK_RIGHT:
315: OnHScroll( SB_PAGEDOWN, 0, NULL );
316: break;
317: }
318: }
319:
320: void CTREEWND::OnLButtonDown( UINT, CPoint location )
321: {
322: location.Offset(ptOrigin);
323: timerRoot.DblClick( location );
324: timerRoot.SetProperties(SET_LOCATION, fZoom);
325: SetRect(timerRoot.RectTotal());
326: Invalidate();
327:
328: return;
329: }
330:
331: void CTREEWND::OnLButtonDblClk( UINT wParam, CPoint location )
332: {
333:
334: return;
335: }
336:
337: void CTREEWND::OnFont()
338: {
339: CFont cFont;
340: CFont * lpcFont;
341: CFontDialog fontDlg(&logFont);
342: CRect rt;
343:
344: fontDlg.DoModal();
345:
346: CClientDC cdc( this );
347: cFont.CreateFontIndirect(&logFont);
348: lpcFont = cdc.SelectObject(&cFont);
349:
350: timerRoot.SetProperties(SET_SIZE|SET_LOCATION, fZoom, NULL, &cdc);
351: SetRect( timerRoot.RectTotal() );
352:
353: cdc.SelectObject(lpcFont);
354: Invalidate();
355: return;
356: }
357:
358:
359: void CTREEWND::OnExpandAll()
360: {
361: timerRoot.ExpandAll();
362: timerRoot.SetProperties(SET_LOCATION, fZoom);
363: SetRect( timerRoot.RectTotal() );
364: Invalidate();
365: }
366:
367: void CTREEWND::OnXYZ()
368: {
369: fXYZ = !fXYZ;
370: m_pMenuCurrent->CheckMenuItem(IDM_TREE_XYZ,
371: MF_BYCOMMAND | (fXYZ ? MF_CHECKED : MF_UNCHECKED));
372: Invalidate();
373: }
374:
375: void CTREEWND::OnTotal()
376: {
377: fTotal = !fTotal;
378: m_pMenuCurrent->CheckMenuItem(IDM_TREE_TOTAL,
379: MF_BYCOMMAND | (fTotal ? MF_CHECKED : MF_UNCHECKED));
380: Invalidate();
381: }
382:
383: void CTREEWND::OnZoom()
384: {
385: fZoom = !fZoom;
386:
387: CClientDC cdc( this );
388:
389: timerRoot.SetProperties(SET_LOCATION, fZoom);
390: SetRect( timerRoot.RectTotal() );
391:
392: Invalidate();
393:
394: return;
395: }
396:
397: void CTREEWND::OnRanges()
398: {
399: BOOL f = rs.fPrune;
400:
401: DoRangesDlg(this, &rs);
402:
403: if (f != rs.fPrune) {
404: timerRoot.SetProperties(SET_COLORS|SET_LOCATION, fZoom, &rs);
405: } else {
406: timerRoot.SetProperties(SET_COLORS, fZoom, &rs);
407: }
408: SetRect( timerRoot.RectTotal() );
409:
410: Invalidate();
411:
412: return;
413: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.