remove empty dir
[reactos.git] / rosapps / dflat32 / slidebox.c
1 /* ------------- slidebox.c ------------ */
2
3 #include "dflat.h"
4
5 static int (*GenericProc)
6 (DFWINDOW wnd,DFMESSAGE msg,DF_PARAM p1,DF_PARAM p2);
7 static BOOL KeepRunning;
8 static int SliderLen;
9 static int Percent;
10 extern DF_DBOX SliderBoxDB;
11
12 static void InsertPercent(char *s)
13 {
14 int offset;
15 char pcc[5];
16
17 sprintf(s, "%c%c%c",
18 DF_CHANGECOLOR,
19 DfColor[DF_DIALOG][DF_SELECT_COLOR][DF_FG]+0x80,
20 DfColor[DF_DIALOG][DF_SELECT_COLOR][DF_BG]+0x80);
21 s += 3;
22 memset(s, ' ', SliderLen);
23 *(s+SliderLen) = '\0';
24 sprintf(pcc, "%d%%", Percent);
25 strncpy(s+SliderLen/2-1, pcc, strlen(pcc));
26 offset = (SliderLen * Percent) / 100;
27 memmove(s+offset+4, s+offset, strlen(s+offset)+1);
28 sprintf(pcc, "%c%c%c%c",
29 DF_RESETCOLOR,
30 DF_CHANGECOLOR,
31 DfColor[DF_DIALOG][DF_SELECT_COLOR][DF_BG]+0x80,
32 DfColor[DF_DIALOG][DF_SELECT_COLOR][DF_FG]+0x80);
33 strncpy(s+offset, pcc, 4);
34 *(s + strlen(s) - 1) = DF_RESETCOLOR;
35 }
36
37 static int
38 SliderTextProc (DFWINDOW wnd,DFMESSAGE msg,DF_PARAM p1,DF_PARAM p2)
39 {
40 switch (msg)
41 {
42 case DFM_PAINT:
43 Percent = (int)p2;
44 InsertPercent(DfGetText(wnd) ?
45 (char*)DfGetText(wnd) : SliderBoxDB.ctl[1].itext);
46 GenericProc(wnd, DFM_PAINT, 0, 0);
47 if (Percent >= 100)
48 DfSendMessage(DfGetParent(wnd),DFM_COMMAND,DF_ID_CANCEL,0);
49 if (!DfDispatchMessage ())
50 DfPostMessage(DfGetParent(wnd), DFM_ENDDIALOG, 0, 0);
51 return KeepRunning;
52 default:
53 break;
54 }
55 return GenericProc(wnd, msg, p1, p2);
56 }
57
58 static int
59 SliderBoxProc (DFWINDOW wnd, DFMESSAGE msg, DF_PARAM p1, DF_PARAM p2)
60 {
61 int rtn;
62 DFWINDOW twnd;
63 switch (msg) {
64 case DFM_CREATE_WINDOW:
65 DfAddAttribute(wnd, DF_SAVESELF);
66 rtn = DfDefaultWndProc(wnd, msg, p1, p2);
67 twnd = SliderBoxDB.ctl[1].wnd;
68 GenericProc = twnd->wndproc;
69 twnd->wndproc = SliderTextProc;
70 KeepRunning = TRUE;
71 DfSendMessage(wnd, DFM_CAPTURE_MOUSE, 0, 0);
72 DfSendMessage(wnd, DFM_CAPTURE_KEYBOARD, 0, 0);
73 return rtn;
74 case DFM_COMMAND:
75 if ((int)p2 == 0 && (int)p1 == DF_ID_CANCEL) {
76 if (Percent >= 100 ||
77 DfYesNoBox("Terminate process?"))
78 KeepRunning = FALSE;
79 else
80 return TRUE;
81 }
82 break;
83 case DFM_CLOSE_WINDOW:
84 DfSendMessage(wnd, DFM_RELEASE_MOUSE, 0, 0);
85 DfSendMessage(wnd, DFM_RELEASE_KEYBOARD, 0, 0);
86 break;
87 default:
88 break;
89 }
90 return DfDefaultWndProc(wnd, msg, p1, p2);
91 }
92
93 DFWINDOW DfSliderBox(int len, char *ttl, char *msg)
94 {
95 SliderLen = len;
96 SliderBoxDB.dwnd.title = ttl;
97 SliderBoxDB.dwnd.w =
98 max((int)strlen(ttl),max(len, (int)strlen(msg)))+4;
99 SliderBoxDB.ctl[0].itext = msg;
100 SliderBoxDB.ctl[0].dwnd.w = strlen(msg);
101 SliderBoxDB.ctl[0].dwnd.x =
102 (SliderBoxDB.dwnd.w - strlen(msg)-1) / 2;
103 SliderBoxDB.ctl[1].itext =
104 DfRealloc(SliderBoxDB.ctl[1].itext, len+10);
105 Percent = 0;
106 InsertPercent(SliderBoxDB.ctl[1].itext);
107 SliderBoxDB.ctl[1].dwnd.w = len;
108 SliderBoxDB.ctl[1].dwnd.x = (SliderBoxDB.dwnd.w-len-1)/2;
109 SliderBoxDB.ctl[2].dwnd.x = (SliderBoxDB.dwnd.w-10)/2;
110 DfDialogBox(NULL, &SliderBoxDB, FALSE, SliderBoxProc);
111 return SliderBoxDB.ctl[1].wnd;
112 }
113
114 /* EOF */