1 /* ------------- slidebox.c ------------ */
5 static int (*GenericProc
)
6 (DFWINDOW wnd
,DFMESSAGE msg
,DF_PARAM p1
,DF_PARAM p2
);
7 static BOOL KeepRunning
;
10 extern DF_DBOX SliderBoxDB
;
12 static void InsertPercent(char *s
)
19 DfColor
[DF_DIALOG
][DF_SELECT_COLOR
][DF_FG
]+0x80,
20 DfColor
[DF_DIALOG
][DF_SELECT_COLOR
][DF_BG
]+0x80);
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",
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
;
38 SliderTextProc (DFWINDOW wnd
,DFMESSAGE msg
,DF_PARAM p1
,DF_PARAM p2
)
44 InsertPercent(DfGetText(wnd
) ?
45 (char*)DfGetText(wnd
) : SliderBoxDB
.ctl
[1].itext
);
46 GenericProc(wnd
, DFM_PAINT
, 0, 0);
48 DfSendMessage(DfGetParent(wnd
),DFM_COMMAND
,DF_ID_CANCEL
,0);
49 if (!DfDispatchMessage ())
50 DfPostMessage(DfGetParent(wnd
), DFM_ENDDIALOG
, 0, 0);
55 return GenericProc(wnd
, msg
, p1
, p2
);
59 SliderBoxProc (DFWINDOW wnd
, DFMESSAGE msg
, DF_PARAM p1
, DF_PARAM p2
)
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
;
71 DfSendMessage(wnd
, DFM_CAPTURE_MOUSE
, 0, 0);
72 DfSendMessage(wnd
, DFM_CAPTURE_KEYBOARD
, 0, 0);
75 if ((int)p2
== 0 && (int)p1
== DF_ID_CANCEL
) {
77 DfYesNoBox("Terminate process?"))
83 case DFM_CLOSE_WINDOW
:
84 DfSendMessage(wnd
, DFM_RELEASE_MOUSE
, 0, 0);
85 DfSendMessage(wnd
, DFM_RELEASE_KEYBOARD
, 0, 0);
90 return DfDefaultWndProc(wnd
, msg
, p1
, p2
);
93 DFWINDOW
DfSliderBox(int len
, char *ttl
, char *msg
)
96 SliderBoxDB
.dwnd
.title
= ttl
;
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);
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
;