39 # include <FL/Fl_Group.H>
40 # include <FL/Fl_Input.H>
41 # include <FL/Fl_Repeat_Button.H>
68 if (w == &(sb->input_)) {
70 v = atof(sb->input_.
value());
72 if (v < sb->minimum_) {
73 sb->value_ = sb->minimum_;
75 }
else if (v > sb->maximum_) {
76 sb->value_ = sb->maximum_;
78 }
else sb->value_ = v;
79 }
else if (w == &(sb->up_button_)) {
81 v = sb->value_ + sb->step_;
83 if (v > sb->maximum_) sb->value_ = sb->minimum_;
87 }
else if (w == &(sb->down_button_)) {
89 v = sb->value_ - sb->step_;
91 if (v < sb->minimum_) sb->value_ = sb->maximum_;
102 if (format_[0]==
'%'&&format_[1]==
'.'&&format_[2]==
'*') {
106 char temp[64], *sp = temp;
107 sprintf(temp,
"%.12f", step_);
110 while (sp>temp && *sp==
'0') sp--;
111 while (sp>temp && (*sp>=
'0' && *sp<=
'9')) { sp--; c++; }
112 sprintf(s, format_, c, value_);
114 sprintf(s, format_, value_);
128 input_(X, Y, W - H / 2 - 2, H),
129 up_button_(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2,
"@-42<"),
130 down_button_(X + W - H / 2 - 2, Y + H - H / 2,
131 H / 2 + 2, H / 2,
"@-42>") {
143 input_.type(FL_INT_INPUT);
153 const char *
format() {
return (format_); }
155 void format(
const char *f) { format_ = f; update(); }
162 up_button_.do_callback();
165 down_button_.do_callback();
170 if (input_.take_focus())
return 1;
190 void range(
double a,
double b) { minimum_ = a; maximum_ = b; }
191 void resize(
int X,
int Y,
int W,
int H) {
194 input_.resize(X, Y, W - H / 2 - 2, H);
195 up_button_.resize(X + W - H / 2 - 2, Y, H / 2 + 2, H / 2);
196 down_button_.resize(X + W - H / 2 - 2, Y + H - H / 2,
204 double step()
const {
return (step_); }
208 if (step_ != (
int)step_) input_.type(FL_FLOAT_INPUT);
209 else input_.type(FL_INT_INPUT);
214 return (input_.textcolor());
222 return (input_.textfont());
230 return (input_.textsize());
247 if (v==FL_FLOAT_INPUT) {
255 double value()
const {
return (value_); }
261 void value(
double v) { value_ = v; update(); }
264 #endif // !Fl_Spinner_H