|
|
1.1 root 1: #ifndef __GRID_HXX_
2: #define __GRID_HXX_
3:
4: #include "canvas.hxx"
5:
6: #include "font.hxx"
7:
8:
9: //========== CGridIt ===========================================
10: class CGridIt
11: {
12: public:
13: CGridIt(UINT cCol, UINT cRow, SIZE size, POINT pt) :
14: _pt(pt), _size(size), _cCol(cCol), _cRow(cRow),
15: _iRow(0), _iCol(0), _cx(pt.x), _cy(pt.y)
16: {}
17:
18: BOOL Done() { return _iCol == _cCol; };
19:
20: UINT Row() { return _iRow; };
21: UINT Col() { return _iCol; };
22:
23: COORD Cx() { return _cx; }
24: COORD Cy() { return _cy; }
25:
26: void operator++()
27: {
28: if( !Done())
29: {
30: _iRow++;
31: _cy+=_size.cy;
32: if( _iRow == _cRow )
33: {
34: _iRow = 0;
35: _cy = _pt.y;
36: _iCol++;
37: _cx += _size.cx;
38: }
39: }
40: }
41: protected:
42: POINT _pt;
43: SIZE _size;
44: UINT _cRow;
45: UINT _iRow;
46: UINT _cCol;
47: UINT _iCol;
48: COORD _cx, _cy;
49: };
50:
51: //========== CGrid =============================================
52:
53: class CGrid
54: {
55: public:
56: virtual void Paint(CCanvas& canvas, RECT rc, POINT pt)=0;
57: protected:
58: SIZE _size;
59: UINT _cCol;
60: UINT _cRow;
61: };
62:
63: //========== CLineGrid =========================================
64:
65: class CLineGrid : public CGrid
66: {
67: public:
68: CLineGrid(UINT cCol, UINT cRow, SIZE size);
69: void SetStyle(int iStyle = PS_DOT );
70: void SetWeight(int nWeight = 1 );
71: void Paint(CCanvas& canvas, RECT rc, POINT pt);
72: protected:
73: int _iStyle;
74: int _nWeight;
75: };
76:
77: //========== CTextGrid =========================================
78:
79: class CTextGrid : public CGrid
80: {
81: public:
82: void SetFont(HFONT hfont);
83: void SetTextOrg()
84: {
85: _ptOrg.x = _size.cx/2;
86: _ptOrg.y=7*_size.cy/11;
87: };
88:
89: void SetTextOrg(COORD x, COORD y)
90: {
91: _ptOrg.x=x;
92: _ptOrg.y=y;
93: };
94:
95: virtual void Paint(CCanvas& canvas, RECT rc, POINT pt);
96: virtual void DrawElement(CCanvas& canvas, COORD x, COORD y, UINT i, UINT j)=0;
97: UINT Hittest(POINT pt, POINT ptTest);
98: protected:
99: POINT _ptOrg;
100: HFONT _font;
101: UINT _iEltOffset;
102: };
103:
104: //========== CCharGrid =============================================
105:
106: class CCharGrid : public CTextGrid
107: {
108: public:
109: CCharGrid(UINT cCol, UINT cRow, SIZE size, UINT iEltOffset=0);
110: virtual void DrawElement(CCanvas& canvas, COORD x, COORD y, UINT i, UINT j);
111: };
112:
113:
114: //========== CCodeGrid =============================================
115:
116: #define HEXADECIMAL 0
117: #define DECIMAL 1
118: #define MASKROOT 1
119:
120: class CCodeGrid : public CTextGrid
121: {
122: public:
123: CCodeGrid(UINT cCol, UINT cRow, SIZE size, UINT iEltOffset=0);
124: void SetFormat(UINT fuFormat=HEXADECIMAL, UINT cDigits=1);
125: void DrawElement(CCanvas& canvas, COORD x, COORD y, UINT i, UINT j);
126: protected:
127: UINT _cDigits;
128: TCHAR _szFormat[5];
129: };
130:
131: //========== CBlockFormat =============================================
132: // formatting elements common to all blocks
133:
134:
135: class CBlockFormat
136: {
137: public:
138: SIZE _size; // size of grid cell
139: CFont _fontChar;
140: CFont _fontCode;
141: protected:
142: CBlockFormat();
143: };
144:
145: //========== CFrameFormat =============================================
146: // formatting elements common to all frames
147: class CFrameFormat : public CBlockFormat
148: {
149: public:
150: CFont _fontHeader;
151: CFont _fontLabel;
152: protected:
153: CFrameFormat();
154: };
155:
156: //========== CPageFormat =============================================
157: //
158: #define PAGEELEMS 2
159: #define PAGEPRINT 4
160:
161: class CPageFormat : public CFrameFormat
162: {
163: public:
164: CPageFormat(UINT fuFormat);
165: void SetFormat(UINT fuFormat=HEXADECIMAL);
166:
167: CFont _fontPageNum;
168: UINT _fuFormat;
169: POINT _ptPE[3];
170: POINT _pt; // "origin" of page proper
171: };
172:
173: //========== CCharBlock =============================================
174: class CCharBlock
175: {
176: public:
177: CCharBlock(UINT cCol, UINT cRow, UINT iBlockOffset, const CBlockFormat &bf);
178:
179: void Paint(CCanvas& canvas, RECT rc, POINT pt);
180: UINT Hittest(POINT pt, POINT ptTest);
181: void SetFormat(UINT fuFormat=HEXADECIMAL);
182: void SetFont(HFONT font);
183: protected:
184: CLineGrid _Line;
185: CCharGrid _Char;
186: CCodeGrid _Code;
187: };
188:
189:
190: //========== CBlockFrame =============================================
191:
192: class CBlockFrame : public CCharBlock
193: {
194: public:
195: CBlockFrame(UINT cCol, UINT cRow, POINT pt, UINT iBlockOffset,
196: TCHAR *szHeader, const CFrameFormat &ff);
197: ~CBlockFrame();
198: void Paint(CCanvas& canvas, RECT rc, POINT pt);
199:
200: protected:
201: void Draw(CCanvas& canvas, POINT pt);
202: TCHAR * _szHeader;
203: SIZE _size;
204: UINT _cCol;
205: UINT _cRow;
206: HFONT _fontHeader;
207: CCodeGrid _Cols;
208:
209: // optional
210: CCodeGrid * _pRows;
211: };
212: //========== CPage ===================================================
213:
214: class CPage
215: {
216: public:
217: CPage(HINSTANCE hInst, CPageFormat& pf, UINT nPage=0);
218: ~CPage();
219:
220: void Paint(CCanvas& canvas, RECT rc);
221: void SetFormat(UINT fuFormat=HEXADECIMAL);
222: void SetFont( HFONT hfont);
223: UINT Hittest( POINT pt);
224:
225: protected:
226: UINT InitPage(UINT nPage);
227: HINSTANCE _hInst;
228: CPageFormat& _pf;
229:
230: UINT _cBlock; // 0..4
231: CBlockFrame* _apBlock[4]; // at most 4 blocks/page
232: POINT _aptBlock[4];
233:
234: CCodeGrid _PageHeadR; // Right header
235: CCodeGrid _PageHeadL; // Left header
236: CCodeGrid _PageNums; // Page number
237: };
238:
239: //========== CModel ==================================================
240:
241: class CModel
242: {
243: public:
244: CModel(HINSTANCE hInst, UINT fuFormat=HEXADECIMAL);
245: ~CModel();
246:
247: // iteration
248: void NextPage();
249: void PrevPage();
250: void NextSection();
251: void PrevSection();
252: BOOL CanNextPage() { return _iPage + 1 < _macPage; };
253: BOOL CanPrevPage() { return _iPage; };
254: BOOL CanNextSection() { return _iPage +16 < _macPage; };
255: BOOL CanPrevSection() { return _iPage + 1 >= 16; };
256: UINT GetPage() { return _iPage; };
257: void SetPage(UINT nPage);
258:
259: UINT GetMaxPage() { return _macPage; };
260: UINT GetMaxSection() { return _macPage / 16; };
261:
262: // Layout
263: void Paint(CCanvas& canvas, RECT rc){_pPage->Paint(canvas, rc);};
264: UINT Hittest( POINT pt);
265: void GetLineSize( SIZE * psize) { psize->cx = 4*INCH2/5;
266: psize->cy = INCH2;
267: }
268:
269: // Formatting
270: BOOL ChooseFont(HWND hwnd);
271: HFONT GetFont();
272: BOOL CreateFont(LOGFONT &lf);
273: void GetFormat(UINT &fuFormat);
274: void SetFormat(UINT fuFormat=HEXADECIMAL);
275:
276: protected:
277: UINT _iPage;
278: UINT _macPage;
279: CPageFormat _pf;
280: CPage * _pPage;
281: HINSTANCE _hInst;
282: };
283:
284: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.