|
|
1.1 root 1: #include <afxwin.h>
2: #include <afxdlgs.h>
3: #include <afxcoll.h>
4:
5: #include "resource.h"
6: #include "ranges.h"
7:
8: /****************************** SPLIT Range Dialog ********************/
9:
10: class SplitDlg : public CModalDialog
11: {
12: private:
13: DWORD c1;
14: DWORD c2;
15: int bottom;
16: int top;
17: int split;
18: public:
19: SplitDlg(CWnd * pWnd, int bot, int top1, DWORD clr)
20: : CModalDialog(IDD_SPLIT_DLG, pWnd)
21: {
22: split = bottom = bot;
23: top = top1;
24: c1 = c2 = clr;
25: return;
26: }
27:
28: int SplitValue() { return split; }
29: DWORD Color1() { return c1; }
30: DWORD Color2() { return c2; }
31:
32: BOOL OnInitDialog();
33: void OnOK();
34: DECLARE_MESSAGE_MAP()
35: };
36:
37: BEGIN_MESSAGE_MAP(SplitDlg, CModalDialog)
38: END_MESSAGE_MAP()
39:
40: BOOL SplitDlg::OnInitDialog()
41: {
42: SetDlgItemInt(IDD_SPLIT_BOTTOM, bottom);
43: SetDlgItemInt(IDD_SPLIT_TOP, top);
44: SetDlgItemInt(IDD_SPLIT_VALUE, bottom);
45: return TRUE;
46: }
47:
48: void SplitDlg::OnOK()
49: {
50: split = GetDlgItemInt(IDD_SPLIT_VALUE);
51: EndDialog(IDOK);
52: }
53:
54: /******************************* RangesDlg ************************/
55:
56: class RangeDlg : public CModalDialog
57: {
58: private:
59: RANGESTRUCT * prs;
60: char * pch[MAX_NUM_RANGES];
61: int iCurr;
62: DWORD clr;
63:
64: void FormatLine(int iLine);
65:
66: public:
67: RangeDlg(CWnd * pWnd, RANGESTRUCT * rs)
68: : CModalDialog("RangeDlg", pWnd)
69: {
70: for (int i=0; i<MAX_NUM_RANGES; i++) pch[i] = NULL;
71: prs = rs;
72: }
73:
74: ~RangeDlg()
75: {
76: for (int i=0; i<MAX_NUM_RANGES; i++)
77: if (pch[i] != NULL) free(pch[i]);
78: }
79:
80: int GetAbove() {
81: return GetDlgItemInt(ID_RANGE_ABOVE);
82: }
83:
84: void SetAbove(int i) {
85: SetDlgItemInt(ID_RANGE_ABOVE, i);
86: return;
87: }
88: int GetBelow() {
89: return GetDlgItemInt(ID_RANGE_BELOW);
90: }
91:
92: void SetBelow(int i) {
93: SetDlgItemInt(ID_RANGE_BELOW, i);
94: return;
95: }
96:
97: int GetColor() {
98: return GetCheckedRadioButton(ID_RANGE_BLACK, ID_RANGE_WHITE)
99: - ID_RANGE_BLACK;
100: }
101:
102: void SetColor(int i) {
103: CheckRadioButton(ID_RANGE_BLACK, ID_RANGE_WHITE,
104: ID_RANGE_BLACK + i);
105: return;
106: }
107:
108: BOOL OnInitDialog();
109: void OnOK();
110:
111: afx_msg void OnDrawItem(LPDRAWITEMSTRUCT lpdis);
112: afx_msg void OnMeasureItem(LPMEASUREITEMSTRUCT lpmis);
113: afx_msg void OnColorButton();
114: afx_msg void OnChangeButton();
115: afx_msg void OnSplitButton();
116: afx_msg void OnDeleteButton();
117: afx_msg void OnHelp();
118:
119: DECLARE_MESSAGE_MAP()
120: };
121: BEGIN_MESSAGE_MAP(RangeDlg, CModalDialog)
122: ON_WM_DRAWITEM()
123: ON_WM_MEASUREITEM()
124:
125: ON_COMMAND(ID_RANGE_ADD, OnSplitButton)
126: ON_COMMAND(ID_RANGE_CHANGE, OnChangeButton)
127: ON_COMMAND(ID_RANGE_COLOR, OnColorButton)
128: ON_COMMAND(ID_RANGE_DELETE, OnDeleteButton)
129: ON_COMMAND(IDHELP, OnHelp)
130: END_MESSAGE_MAP()
131:
132: void RangeDlg::FormatLine(int i)
133: {
134: char rgch[256];
135:
136: if (pch[i] != NULL) free(pch[i]);
137: if (i == 0) {
138: sprintf(rgch, "Below %d", prs->Above[i+1]);
139: } else if (i == prs->cRanges-1) {
140: sprintf(rgch, "Above %d%%", prs->Above[i]);
141: } else {
142: sprintf(rgch, "%d%% - %d%%", prs->Above[i], prs->Above[i+1]);
143: }
144: pch[i] = strdup(rgch);
145: return;
146: }
147:
148: BOOL RangeDlg::OnInitDialog()
149: {
150: int i;
151:
152: for (i=0; i<prs->cRanges; i++) {
153: FormatLine(i);
154: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_ADDSTRING, 0, (LPARAM) pch[i]);
155: }
156:
157: iCurr = 0;
158: SetAbove(prs->Above[1]);
159: SetBelow(prs->Above[0]);
160: SetColor(prs->TextColor[0]);
161: clr = prs->BackColor[0];
162:
163: SendDlgItemMessage(ID_RANGE_PRUNE, BM_SETCHECK, prs->fPrune, 0);
164: return TRUE;
165: }
166:
167: void RangeDlg::OnOK()
168: {
169: prs->fPrune = SendDlgItemMessage(ID_RANGE_PRUNE, BM_GETCHECK, 0, 0);
170: EndDialog(IDOK);
171: }
172:
173: int DoRangesDlg(CWnd * pWnd, RANGESTRUCT * rs)
174: {
175: RangeDlg dlg(pWnd, rs);
176: return dlg.DoModal();
177: }
178:
179:
180: afx_msg void RangeDlg::OnMeasureItem(LPMEASUREITEMSTRUCT lpmis)
181: {
182: lpmis->itemWidth = 100;
183: lpmis->itemHeight = 20;
184:
185: return;
186: }
187:
188: afx_msg void RangeDlg::OnDrawItem(LPDRAWITEMSTRUCT lpdis)
189: {
190: switch( lpdis->itemAction ) {
191: case ODA_DRAWENTIRE:
192: if (lpdis->itemID != -1) {
193: HBRUSH hBr;
194: hBr = CreateSolidBrush( prs->BackColor[lpdis->itemID] );
195: FillRect(lpdis->hDC, &lpdis->rcItem, hBr);
196: DeleteObject( hBr );
197: SetBkMode(lpdis->hDC, TRANSPARENT);
198: SetTextColor(lpdis->hDC, prs->TextColor[lpdis->itemID] * RGB(255, 255, 255));
199: DrawText(lpdis->hDC, (char *) lpdis->itemData, -1, &lpdis->rcItem,
200: DT_NOCLIP|DT_EXPANDTABS|DT_VCENTER|DT_SINGLELINE);
201: }
202: break;
203:
204: case ODA_SELECT:
205: if (lpdis->itemState & ODS_SELECTED) {
206: iCurr = lpdis->itemID;
207: SetAbove(prs->Above[iCurr+1]);
208: SetBelow(prs->Above[iCurr]);
209: SetColor(prs->TextColor[iCurr]);
210: clr = prs->BackColor[iCurr];
211: } else {
212: }
213: break;
214:
215: case ODA_FOCUS:
216: if (lpdis->itemState & ODS_FOCUS) {
217: } else {
218: }
219: break;
220:
221: default:
222: return;
223: }
224: return;
225: }
226:
227: afx_msg void RangeDlg::OnChangeButton()
228: {
229: if (iCurr > 0) {
230: prs->Above[iCurr] = GetBelow();
231: }
232:
233: if (iCurr < prs->cRanges) {
234: prs->Above[iCurr+1] = GetAbove();
235: }
236:
237: prs->TextColor[iCurr] = GetColor();
238: prs->BackColor[iCurr] = clr;
239:
240: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr, 0);
241: FormatLine(iCurr);
242: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr, (LPARAM) pch[iCurr]);
243:
244: if (iCurr < prs->cRanges) {
245: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr+1, 0);
246: FormatLine(iCurr+1);
247: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr+1, (LPARAM) pch[iCurr+1]);
248: }
249:
250: return;
251: }
252:
253: afx_msg void RangeDlg::OnColorButton()
254: {
255: CColorDialog dlg(prs->BackColor[iCurr]);
256: dlg.DoModal();
257: prs->BackColor[iCurr] = dlg.GetColor();
258: return;
259: }
260:
261: afx_msg void RangeDlg::OnSplitButton()
262: {
263: int i;
264:
265: SplitDlg dlg(NULL, prs->Above[iCurr], prs->Above[iCurr+1], prs->BackColor[iCurr]);
266: if (dlg.DoModal()) {
267: for (i=prs->cRanges; i>iCurr; i--) {
268: prs->Above[i] = prs->Above[i-1];
269: prs->BackColor[i] = prs->BackColor[i-1];
270: pch[i] = pch[i-1];
271: }
272: }
273: pch[iCurr] = NULL;
274: prs->cRanges += 1;
275: prs->Above[iCurr+1] = dlg.SplitValue();
276: prs->BackColor[iCurr] = dlg.Color1();
277: prs->BackColor[iCurr+1] = dlg.Color2();
278:
279: FormatLine(iCurr);
280: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_DELETESTRING, iCurr, 0);
281: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr, (LPARAM) pch[iCurr]);
282: FormatLine(iCurr+1);
283: SendDlgItemMessage(ID_RANGE_LISTBOX, LB_INSERTSTRING, iCurr+1, (LPARAM) pch[iCurr+1]);
284: return;
285: }
286:
287: afx_msg void RangeDlg::OnDeleteButton()
288: {
289: return;
290: }
291:
292:
293: afx_msg void RangeDlg::OnHelp()
294: {
295: WinHelp(m_hWnd, "capview.hlp", HELP_CONTEXT, (DWORD) IDD_RANGE_DLG);
296: return;
297: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.