|
|
1.1 root 1: #include "cardfile.h"
2:
3: /*********************************************************************/
4: /* Windows/PM Cardfile Shared Code */
5: /* */
6: /* (c) Copyright Microsoft Corp. 1987,1988 - All Rights Reserved */
7: /*********************************************************************/
8:
9: /*********************************************************************/
10: /* The following shared code was developed from the original */
11: /* Cardfile application. This code can be compiled to run under */
12: /* either the Windows or the PM manager environment. All */
13: /* functionality associated with bitmaps or printing has been */
14: /* deleted. Some comments refering to these functions may still be */
15: /* present in the code and should be disregarded. jw. */
16: /*********************************************************************/
17:
18:
19:
20: /*********************************************************************/
21: /* CardfileScroll - */
22: /* Handles all scroll messages in card mode. */
23: /* */
24: /* Same in PM and Windows. */
25: /*********************************************************************/
26:
27: BOOL CardfileScroll(hWindow, cmd, pos)
28: HWND hWindow;
29: int cmd;
30: int pos;
31: {
32: int OldFirst = iFirstCard;
33: RECT rect;
34: int result = TRUE;
35: HDC hDC;
36:
37: /* if less that 2 cards, scrolling is a waste */
38: if (cCards < 2)
39: return(result);
40:
41: /* if just started scrolling, save starting position */
42: if (!fScrolling)
43: iCardStartScroll = iFirstCard;
44:
45: /* we're definitely scrolling now */
46: fScrolling = TRUE;
47: switch (cmd)
48: {
49: case SB_LINEUP:
50: /* go back one card, with a possible wrap */
51: iFirstCard--;
52: if (iFirstCard < 0)
53: iFirstCard = cCards-1;
54: break;
55:
56: case SB_LINEDOWN:
57: /* move ahead one card */
58: iFirstCard++;
59: if (iFirstCard == cCards)
60: iFirstCard = 0;
61: break;
62:
63: case SB_PAGEUP:
64: /* move back one page (of fully visible cards) */
65: if (cFSHeads == cCards)
66: return(result);
67:
68: iFirstCard -= cFSHeads;
69:
70: if (iFirstCard < 0)
71: iFirstCard += cCards; /* a negative number */
72:
73: break;
74:
75: case SB_PAGEDOWN:
76: /* move forward one page */
77: if (cFSHeads == cCards)
78: return(result);
79:
80: iFirstCard += cFSHeads;
81:
82: if (iFirstCard >= cCards)
83: iFirstCard -= cCards;
84:
85: break;
86:
87: case SB_THUMBPOSITION:
88: case SB_ENDSCROLL:
89: /* if we finish on a different card than at start */
90: if (iFirstCard != iCardStartScroll)
91: {
92: /* save info, and read it back */
93: if (SaveCurrentCard(iCardStartScroll))
94: SetCurCard(iFirstCard);
95: else
96: {
97: /* otherwise we won't do anything */
98: iFirstCard = iCardStartScroll;
99: result = FALSE;
100: }
101: }
102:
103: /* set new position */
104: SetScrollPos(hWindow, SB_HORZ, iFirstCard, TRUE);
105: InvalidateRect(hCardWnd, (LPRECT)NULL, TRUE);
106: fCardCleared = FALSE;
107: fScrolling = FALSE;
108: return(result);
109:
110: case SB_THUMBTRACK:
111: /* follow thumb position */
112: iFirstCard = pos;
113: break;
114:
115: default:
116: return(result);
117: }
118: /* only gets here on lineup-down, pageup-down, and thumbtrack */
119: /* if we're on a different card than at start */
120: if (iFirstCard != OldFirst)
121: {
122: /* and it hasn't been whited out */
123: if (!fCardCleared)
124: {
125: /* clear it */
126: hDC = GetDC(hCardWnd);
127:
128: GetClientRect(hCardWnd, (LPRECT)&rect);
129: FillRect(hDC, (LPRECT)&rect, hbrWhite);
130: ReleaseDC(hCardWnd, hDC);
131:
132: fCardCleared = TRUE;
133: }
134:
135: /* set new position, if not conflicting with scroll bar */
136: if (cmd != SB_THUMBTRACK)
137: SetScrollPos(hWindow, SB_HORZ, iFirstCard, TRUE);
138:
139: /* paint the new headers */
140: PaintNewHeaders();
141: }
142: return(result);
143: }
144:
145:
146: /*********************************************************************/
147: /* PhoneScroll - */
148: /* Handle scroll commands coming through in phone book mode. */
149: /* */
150: /* Same in Windows and PM. */
151: /*********************************************************************/
152:
153: void PhoneScroll(hWindow, cmd, pos)
154: HWND hWindow;
155: int cmd;
156: int pos;
157: {
158: int OldTop = iTopCard;
159: int cLines;
160: int dCards;
161:
162: cLines = cyMainWindow / CharFixHeight;
163:
164: dCards = 0;
165: switch (cmd)
166: {
167: case SB_LINEUP:
168: dCards = -1;
169: break;
170:
171: case SB_LINEDOWN:
172: dCards = 1;
173: break;
174:
175: case SB_PAGEUP:
176: dCards = -cLines;
177: break;
178:
179: case SB_PAGEDOWN:
180: dCards = cLines;
181: break;
182:
183: case SB_THUMBTRACK:
184: dCards = pos - iTopCard;
185: break;
186:
187: case SB_THUMBPOSITION:
188: SetScrollPos(hWindow, SB_VERT, pos, TRUE);
189: return;
190: }
191: iTopCard += dCards;
192:
193: if (iTopCard > cCards - cLines)
194: iTopCard = cCards - cLines;
195: else if (iTopCard < 0)
196: iTopCard = 0;
197:
198: dCards = OldTop - iTopCard;
199:
200: if (dCards)
201: {
202: if (cmd != SB_THUMBTRACK)
203: SetScrollPos(hWindow, SB_VERT, iTopCard, TRUE);
204:
205: ScrollWindow(hWindow, 0, dCards * CharFixHeight,
206: (LPRECT)NULL, (LPRECT)NULL);
207: UpdateWindow(hWindow);
208: }
209: }
210:
211:
212: /*********************************************************************/
213: /* SetScrRangeAndPos - */
214: /* Resets the range and position of the scroll bars, depending */
215: /* on the number of cards in the file and the current card. */
216: /* */
217: /* Same in Windows and PM. */
218: /*********************************************************************/
219:
220: void SetScrRangeAndPos()
221: {
222: int range;
223: int cLines;
224:
225: if (CardPhone == IDM_PHONEBOOK)
226: {
227: if ((cLines = cyMainWindow / CharFixHeight) >= cCards)
228: range = 0;
229: else
230: {
231: if (!cLines)
232: cLines = 1;
233: range = cCards - cLines;
234: }
235: }
236: else
237: range = cCards-1;
238:
239:
240: if (CardPhone == IDM_PHONEBOOK) {
241: SCROLL_RANGE( hCardfileWnd, SB_VERT, iTopCard, 0, range );
242: }
243: else
244: SCROLL_RANGE( hCardfileWnd, SB_HORZ, iFirstCard, 0, range );
245: }
246:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.