Enlightenment CVS committal Author : pfritz Project : e17 Module : libs/ewl
Dir : e17/libs/ewl/src/lib Modified Files: Ewl.h Makefile.am ewl_colorpicker.c ewl_progressbar.c ewl_progressbar.h ewl_scrollbar.c ewl_seeker.c ewl_seeker.h ewl_spinner.c ewl_spinner.h Log Message: **API-BREAK** - add ewl_range a new abstract widget to unify the api of seeker, spinner and progressbar - NOTE this breaks colorpicker hopefully for a short time =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/Ewl.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- Ewl.h 14 Jul 2006 02:53:34 -0000 1.6 +++ Ewl.h 11 Aug 2006 04:00:57 -0000 1.7 @@ -304,6 +304,7 @@ #include <ewl_colorpicker.h> #include <ewl_colordialog.h> #include <ewl_password.h> +#include <ewl_range.h> #include <ewl_seeker.h> #include <ewl_scrollbar.h> #include <ewl_spacer.h> =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/Makefile.am,v retrieving revision 1.29 retrieving revision 1.30 diff -u -3 -r1.29 -r1.30 --- Makefile.am 14 Jul 2006 02:53:34 -0000 1.29 +++ Makefile.am 11 Aug 2006 04:00:57 -0000 1.30 @@ -64,6 +64,7 @@ ewl_password.h \ ewl_progressbar.h \ ewl_radiobutton.h \ + ewl_range.h \ ewl_row.h \ ewl_scrollbar.h \ ewl_scrollpane.h \ @@ -133,6 +134,7 @@ ewl_password.c \ ewl_progressbar.c \ ewl_radiobutton.c \ + ewl_range.c \ ewl_row.c \ ewl_scrollbar.c \ ewl_scrollpane.c \ =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_colorpicker.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- ewl_colorpicker.c 12 Jul 2006 03:44:19 -0000 1.24 +++ ewl_colorpicker.c 11 Aug 2006 04:00:57 -0000 1.25 @@ -234,38 +234,38 @@ o = ewl_colorpicker_spinner_new(); ewl_widget_internal_set(o, TRUE); ewl_container_child_append(EWL_CONTAINER(hbox), o); - ewl_spinner_min_val_set(EWL_SPINNER(o), 0); - ewl_spinner_max_val_set(EWL_SPINNER(o), modes[i].max); + ewl_range_min_val_set(EWL_RANGE(o), 0); + ewl_range_max_val_set(EWL_RANGE(o), modes[i].max); switch(modes[i].mode) { case EWL_COLOR_MODE_HSV_HUE: - ewl_spinner_value_set(EWL_SPINNER(o), h); + ewl_range_value_set(EWL_RANGE(o), h); cp->spinners.hsv.h = o; break; case EWL_COLOR_MODE_HSV_SATURATION: - ewl_spinner_value_set(EWL_SPINNER(o), s * 100); + ewl_range_value_set(EWL_RANGE(o), s * 100); cp->spinners.hsv.s = o; break; case EWL_COLOR_MODE_HSV_VALUE: - ewl_spinner_value_set(EWL_SPINNER(o), v * 100); + ewl_range_value_set(EWL_RANGE(o), v * 100); cp->spinners.hsv.v = o; break; case EWL_COLOR_MODE_RGB_RED: - ewl_spinner_value_set(EWL_SPINNER(o), r); + ewl_range_value_set(EWL_RANGE(o), r); cp->spinners.rgb.r = o; break; case EWL_COLOR_MODE_RGB_GREEN: - ewl_spinner_value_set(EWL_SPINNER(o), g); + ewl_range_value_set(EWL_RANGE(o), g); cp->spinners.rgb.g = o; break; case EWL_COLOR_MODE_RGB_BLUE: - ewl_spinner_value_set(EWL_SPINNER(o), b); + ewl_range_value_set(EWL_RANGE(o), b); cp->spinners.rgb.b = o; break; } - ewl_spinner_step_set(EWL_SPINNER(o), 1); + ewl_range_step_set(EWL_RANGE(o), 1); ewl_spinner_digits_set(EWL_SPINNER(o), 0); ewl_colorpicker_spinner_mode_set(EWL_COLORPICKER_SPINNER(o), modes[i].mode); @@ -278,9 +278,9 @@ o = ewl_spinner_new(); ewl_widget_internal_set(o, TRUE); ewl_container_child_append(EWL_CONTAINER(vbox), o); - ewl_spinner_min_val_set(EWL_SPINNER(o), 0); - ewl_spinner_max_val_set(EWL_SPINNER(o), 255); - ewl_spinner_value_set(EWL_SPINNER(o), 0); + ewl_range_min_val_set(EWL_RANGE(o), 0); + ewl_range_max_val_set(EWL_RANGE(o), 255); + ewl_range_value_set(EWL_RANGE(o), 0); ewl_spinner_digits_set(EWL_SPINNER(o), 0); cp->spinners.alpha = o; @@ -335,7 +335,7 @@ DCHECK_TYPE("cp", cp, EWL_COLORPICKER_TYPE); if (alpha > 255) alpha = 255; - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.alpha), alpha); + ewl_range_value_set(EWL_RANGE(cp->spinners.alpha), alpha); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -354,7 +354,7 @@ DCHECK_PARAM_PTR_RET("cp", cp, 255); DCHECK_TYPE_RET("cp", cp, EWL_COLORPICKER_TYPE, 255); - alpha = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.alpha)); + alpha = ewl_range_value_get(EWL_RANGE(cp->spinners.alpha)); DRETURN_INT(alpha, DLEVEL_STABLE); } @@ -625,29 +625,29 @@ switch ((int)mode) { case EWL_COLOR_MODE_RGB_RED: - r = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.rgb.r)); + r = ewl_range_value_get(EWL_RANGE(cp->spinners.rgb.r)); break; case EWL_COLOR_MODE_RGB_GREEN: - g = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.rgb.g)); + g = ewl_range_value_get(EWL_RANGE(cp->spinners.rgb.g)); break; case EWL_COLOR_MODE_RGB_BLUE: - b = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.rgb.b)); + b = ewl_range_value_get(EWL_RANGE(cp->spinners.rgb.b)); break; case EWL_COLOR_MODE_HSV_HUE: - h = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.hsv.h)); + h = ewl_range_value_get(EWL_RANGE(cp->spinners.hsv.h)); set_hsv = TRUE; break; case EWL_COLOR_MODE_HSV_SATURATION: - s = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.hsv.s)) / 100.0; + s = ewl_range_value_get(EWL_RANGE(cp->spinners.hsv.s)) / 100.0; set_hsv = TRUE; break; case EWL_COLOR_MODE_HSV_VALUE: - v = ewl_spinner_value_get(EWL_SPINNER(cp->spinners.hsv.v)) / 100.0; + v = ewl_range_value_get(EWL_RANGE(cp->spinners.hsv.v)) / 100.0; set_hsv = TRUE; break; @@ -734,13 +734,13 @@ DCHECK_PARAM_PTR("cp", cp); DCHECK_TYPE("cp", cp, EWL_COLORPICKER_TYPE); - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.rgb.r), r); - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.rgb.g), g); - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.rgb.b), b); - - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.hsv.h), h); - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.hsv.s), s * 100); - ewl_spinner_value_set(EWL_SPINNER(cp->spinners.hsv.v), v * 100); + ewl_range_value_set(EWL_RANGE(cp->spinners.rgb.r), r); + ewl_range_value_set(EWL_RANGE(cp->spinners.rgb.g), g); + ewl_range_value_set(EWL_RANGE(cp->spinners.rgb.b), b); + + ewl_range_value_set(EWL_RANGE(cp->spinners.hsv.h), h); + ewl_range_value_set(EWL_RANGE(cp->spinners.hsv.s), s * 100); + ewl_range_value_set(EWL_RANGE(cp->spinners.hsv.v), v * 100); ewl_widget_color_set(cp->preview.current, r, g, b, 255); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_progressbar.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- ewl_progressbar.c 26 May 2006 18:17:19 -0000 1.9 +++ ewl_progressbar.c 11 Aug 2006 04:00:57 -0000 1.10 @@ -43,7 +43,7 @@ w = EWL_WIDGET(p); - if (!ewl_container_init(EWL_CONTAINER(w))) + if (!ewl_range_init(EWL_RANGE(w))) DRETURN_INT(FALSE, DLEVEL_STABLE); ewl_widget_appearance_set(w, EWL_PROGRESSBAR_TYPE); @@ -67,114 +67,21 @@ p->label = ewl_text_new(); ewl_text_text_set(EWL_TEXT(p->label), NULL); + ewl_widget_layer_priority_set(p->label, 1); ewl_object_alignment_set(EWL_OBJECT(p->label), EWL_FLAG_ALIGN_CENTER); ewl_container_child_append(EWL_CONTAINER(p), p->label); ewl_widget_show(p->label); - p->value = 0.0; - p->range = 100.0; p->auto_label = TRUE; ewl_callback_append(w, EWL_CALLBACK_CONFIGURE, ewl_progressbar_configure_cb, NULL); + ewl_callback_append(w, EWL_CALLBACK_VALUE_CHANGED, + ewl_progressbar_value_changed_cb, NULL); DRETURN_INT(TRUE, DLEVEL_STABLE); } - -/** - * @param p: the progressbar whose value will be changed - * @param v: the new value of the statusbar - * @return Returns no value. - * @brief Set the value of the progressbars location - */ -void -ewl_progressbar_value_set(Ewl_Progressbar *p, double v) -{ - char c[10]; - - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("p", p); - DCHECK_TYPE("p", p, EWL_PROGRESSBAR_TYPE); - - if (v == p->value) - DRETURN(DLEVEL_STABLE); - - if (v < 0) v = 0; - - p->value = v; - if (p->auto_label) { - /* - * Do a precentage calculation as a default label. - */ - snprintf (c, sizeof (c), "%.0lf%%", (p->value / p->range) * 100); - ewl_text_text_set(EWL_TEXT(p->label), c); - } - - ewl_widget_configure(EWL_WIDGET(p)); - ewl_callback_call(EWL_WIDGET(p), EWL_CALLBACK_VALUE_CHANGED); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - - -/** - * @param p: the progressbars to retrieve the value - * @return Returns 0 on failure, the value of the progressbars location on success. - * @brief Retrieve the current value of the progressbars - */ -double -ewl_progressbar_value_get(Ewl_Progressbar *p) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("p", p, -1); - DCHECK_TYPE_RET("p", p, EWL_PROGRESSBAR_TYPE, -1); - - DRETURN_FLOAT(p->value, DLEVEL_STABLE); -} - -/** - * @param p: the progressbar whose range will be changed - * @param r: the new range of the statusbar - * @return Returns no value. - * @brief Set the range of the progressbar. Cannot be less then 1. - */ -void -ewl_progressbar_range_set(Ewl_Progressbar *p, double r) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("p", p); - DCHECK_TYPE("p", p, EWL_PROGRESSBAR_TYPE); - - if (r == p->range) - DRETURN(DLEVEL_STABLE); - - if (r < 1) - DRETURN(DLEVEL_STABLE); - - p->range = r; - - ewl_widget_configure(EWL_WIDGET(p)); - ewl_callback_call(EWL_WIDGET(p), EWL_CALLBACK_VALUE_CHANGED); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param p: the progressbars to retrieve the range - * @return Returns 0 on failure, the value of the progressbars location on success. - * @brief Retrieve the current range of the progressbars (default 100) - */ -double -ewl_progressbar_range_get(Ewl_Progressbar *p) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("p", p, -1); - DCHECK_TYPE_RET("p", p, EWL_PROGRESSBAR_TYPE, -1); - - DRETURN_FLOAT(p->range, DLEVEL_STABLE); -} - /** * @param p: the progressbars whose text will be changed * @param label: the new label @@ -205,6 +112,7 @@ void ewl_progressbar_custom_label_set(Ewl_Progressbar *p, char *format_string) { + Ewl_Range *r; char label[PATH_MAX]; DENTER_FUNCTION(DLEVEL_STABLE); @@ -212,9 +120,10 @@ DCHECK_TYPE("p", p, EWL_PROGRESSBAR_TYPE); p->auto_label = FALSE; + r = EWL_RANGE(p); if (format_string) { - snprintf (label, PATH_MAX, format_string, p->value, p->range); + snprintf (label, PATH_MAX, format_string, r->value, r->max_val); ewl_text_text_set(EWL_TEXT(p->label), label); } @@ -271,25 +180,67 @@ void *user_data __UNUSED__) { Ewl_Progressbar *p; + Ewl_Range *r; int dx, dy; - int dw, dh; + int dw; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); p = EWL_PROGRESSBAR(w); + r = EWL_RANGE(p); dx = CURRENT_X(p); dy = CURRENT_Y(p); dw = CURRENT_W(p); - dh = CURRENT_H(p); - - ewl_object_geometry_request(EWL_OBJECT(p->bar), dx, dy, - dw * (p->value / p->range), dh); + + dw = dw * (r->value - r->min_val) / (r->max_val - r->min_val); + + if (r->invert){ + dx += CURRENT_W(p) - dw; + } + + ewl_object_geometry_request(EWL_OBJECT(p->bar), dx, CURRENT_Y(p), + dw, CURRENT_H(p)); + ewl_object_place (EWL_OBJECT(p->label), CURRENT_X(p),CURRENT_Y(p), + CURRENT_W(p), CURRENT_H(p)); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} - ewl_object_place (EWL_OBJECT(p->label), dx, dy, dw, dh); +/** + * @internal + * @param w: The widget to work with + * @param ev_data: UNUSED + * @param user_data: UNUSED + * @return Returns no value + * @brief the value changed callback + */ +void +ewl_progressbar_value_changed_cb(Ewl_Widget *w, void *ev_data __UNUSED__, + void *user_data __UNUSED__) +{ + Ewl_Progressbar *p; + Ewl_Range *r; + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); + + p = EWL_PROGRESSBAR(w); + r = EWL_RANGE(p); + + if (p->auto_label) { + char c[10]; + /* + * Do a precentage calculation as a default label. + */ + snprintf (c, sizeof (c), "%.0lf%%", (r->value / + (r->max_val - r->min_val)) * 100); + ewl_text_text_set(EWL_TEXT(p->label), c); + } + DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -297,23 +248,24 @@ ewl_progressbar_child_handle(Ewl_Container *c, Ewl_Widget *w __UNUSED__) { - Ewl_Progressbar *p; + Ewl_Range *r; double value; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("c", c); DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE); - p = EWL_PROGRESSBAR(c); - value = p->value / p->range; + r = EWL_RANGE(c); + value = r->value / (r->max_val - r->min_val); if (value < 0.01) value = 0.01; - ewl_object_preferred_inner_w_set (EWL_OBJECT(p), - ewl_object_preferred_w_get (EWL_OBJECT(p->bar)) / value); + ewl_object_preferred_inner_w_set (EWL_OBJECT(c), + ewl_object_preferred_w_get( + EWL_OBJECT(EWL_PROGRESSBAR(c)->bar)) / value); - ewl_container_largest_prefer (EWL_CONTAINER (c), + ewl_container_largest_prefer(EWL_CONTAINER(c), EWL_ORIENTATION_VERTICAL); DLEAVE_FUNCTION(DLEVEL_STABLE); =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_progressbar.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -3 -r1.9 -r1.10 --- ewl_progressbar.h 15 Mar 2006 04:03:48 -0000 1.9 +++ ewl_progressbar.h 11 Aug 2006 04:00:57 -0000 1.10 @@ -33,16 +33,14 @@ #define EWL_PROGRESSBAR(progressbar) ((Ewl_Progressbar *) progressbar) /** - * Inherits from Ewl_Container and creates an internal Ewl_Widget, the + * Inherits from Ewl_Range and creates an internal Ewl_Widget, the * statusbar itself. */ struct Ewl_Progressbar { - Ewl_Container container; /**< Inherit from Ewl_Container */ + Ewl_Range range; /**< Inherit from Ewl_Range */ Ewl_Widget *bar; /**< The moving bar on top */ Ewl_Widget *label; /**< text label on the bar */ - double value; /**< current value of the progressbar */ - double range; /**< the maximum range of the progressbar */ int auto_label; /**< flag if user is setting label or not */ }; @@ -50,12 +48,6 @@ Ewl_Widget *ewl_progressbar_new(void); int ewl_progressbar_init(Ewl_Progressbar *p); -void ewl_progressbar_value_set(Ewl_Progressbar *p, double v); -double ewl_progressbar_value_get(Ewl_Progressbar *p); - -void ewl_progressbar_range_set(Ewl_Progressbar *p, double r); -double ewl_progressbar_range_get(Ewl_Progressbar *p); - void ewl_progressbar_label_set(Ewl_Progressbar *p, char *label); void ewl_progressbar_custom_label_set(Ewl_Progressbar *p, char *format_string); @@ -67,6 +59,8 @@ * Internally used callbacks, override at your own risk. */ void ewl_progressbar_configure_cb(Ewl_Widget *w, void *ev_data, + void *user_data); +void ewl_progressbar_value_changed_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewl_progressbar_child_show_cb(Ewl_Container *c, Ewl_Widget *w); void ewl_progressbar_child_resize_cb(Ewl_Container *c, Ewl_Widget *w, int size, =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_scrollbar.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- ewl_scrollbar.c 26 May 2006 18:17:19 -0000 1.12 +++ ewl_scrollbar.c 11 Aug 2006 04:00:57 -0000 1.13 @@ -173,8 +173,8 @@ * Define the maximum value that the seeker can reach, and the * default increments it takes to get there. */ - ewl_seeker_range_set(EWL_SEEKER(s->seeker), 1.0); - ewl_seeker_step_set(EWL_SEEKER(s->seeker), 0.05); + ewl_range_max_val_set(EWL_RANGE(s->seeker), 1.0); + ewl_range_step_set(EWL_RANGE(s->seeker), 0.05); /* * Set the appearance strings for the parts of the scrollbar @@ -210,7 +210,7 @@ /* * Set the default value to the beginning of the seeker. */ - ewl_seeker_value_set(EWL_SEEKER(s->seeker), 0); + ewl_range_value_set(EWL_RANGE(s->seeker), 0.0); DRETURN_INT(TRUE, DLEVEL_STABLE); } @@ -402,7 +402,7 @@ DCHECK_PARAM_PTR_RET("s", s, -1); DCHECK_TYPE_RET("s", s, EWL_SCROLLBAR_TYPE, -1); - v = ewl_seeker_value_get(EWL_SEEKER(s->seeker)); + v = ewl_range_value_get(EWL_RANGE(s->seeker)); /* if (EWL_BOX(s)->orientation == EWL_ORIENTATION_VERTICAL) @@ -427,7 +427,7 @@ DCHECK_PARAM_PTR("s", s); DCHECK_TYPE("s", s, EWL_SCROLLBAR_TYPE); - ewl_seeker_value_set(EWL_SEEKER(s->seeker), v); + ewl_range_value_set(EWL_RANGE(s->seeker), v); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -444,7 +444,7 @@ DCHECK_PARAM_PTR_RET("s", s, 0); DCHECK_TYPE_RET("s", s, EWL_SCROLLBAR_TYPE, 0); - DRETURN_INT(ewl_seeker_step_get(EWL_SEEKER(s->seeker)), DLEVEL_STABLE); + DRETURN_INT(ewl_range_step_get(EWL_RANGE(s->seeker)), DLEVEL_STABLE); } /** @@ -462,7 +462,7 @@ DCHECK_PARAM_PTR("s", s); DCHECK_TYPE("s", s, EWL_SCROLLBAR_TYPE); - ewl_seeker_step_set(EWL_SEEKER(s->seeker), v); + ewl_range_step_set(EWL_RANGE(s->seeker), v); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -548,7 +548,7 @@ s = EWL_SCROLLBAR(data); dt = ecore_time_get() - s->start_time; - value = ewl_seeker_value_get(EWL_SEEKER(s->seeker)); + value = ewl_range_value_get(EWL_RANGE(s->seeker)); /* * Check the theme for a velocity setting and bring it within normal @@ -567,7 +567,7 @@ value += (double)(s->direction) * 10 * (1 - exp(-dt)) * ((double)(velocity) / 100.0); - ewl_seeker_value_set(EWL_SEEKER(s->seeker), value); + ewl_range_value_set(EWL_RANGE(s->seeker), value); DRETURN_INT(TRUE, DLEVEL_STABLE); } =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_seeker.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- ewl_seeker.c 3 Jun 2006 16:18:11 -0000 1.18 +++ ewl_seeker.c 11 Aug 2006 04:00:57 -0000 1.19 @@ -87,7 +87,7 @@ w = EWL_WIDGET(s); - if (!ewl_container_init(EWL_CONTAINER(w))) + if (!ewl_range_init(EWL_RANGE(w))) DRETURN_INT(FALSE, DLEVEL_STABLE); /* @@ -111,12 +111,9 @@ ewl_widget_appearance_set(s->button, "hbutton"); /* - * Set the starting orientation, range and values + * Set the starting orientation */ s->orientation = EWL_ORIENTATION_HORIZONTAL; - s->range = 100.0; - s->value = 0.0; - s->step = 10.0; /* * Add necessary configuration callbacks @@ -201,130 +198,6 @@ } /** - * - * @param s: the seeker whose value will be changed - * @param v: the new value of the locator, checked against the valid range - * @return Returns no value. - * @brief Set the value of pointer of the seekers locator - */ -void -ewl_seeker_value_set(Ewl_Seeker *s, double v) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SEEKER_TYPE); - - if (v == s->value) - DRETURN(DLEVEL_STABLE); - - if (v < 0) v = 0; - if (v > s->range) v = s->range; - - s->value = v; - - ewl_widget_configure(EWL_WIDGET(s)); - ewl_callback_call(EWL_WIDGET(s), EWL_CALLBACK_VALUE_CHANGED); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - - -/** - * @param s: the seekers to retrieve the value - * @return Returns 0 on failure, the value of the seekers locator on success. - * @brief Retrieve the current value of the seekers locator - */ -double -ewl_seeker_value_get(Ewl_Seeker *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, -1); - DCHECK_TYPE_RET("s", s, EWL_SEEKER_TYPE, -1); - - DRETURN_FLOAT(s->value, DLEVEL_STABLE); -} - -/** - * @param s: the seeker to change the range - * @param r: the largest bound on the range of the seekers value - * @return Returns no value. - * @brief specify the range of values represented by the seeker - */ -void -ewl_seeker_range_set(Ewl_Seeker *s, double r) -{ - int new_val; - - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SEEKER_TYPE); - - new_val = r * (s->value / s->range); - - s->range = r; - s->value = new_val; - - ewl_widget_configure(EWL_WIDGET(s)); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param s: the seeker to return the range of values - * @return Returns 0 on failure, or the upper bound on the seeker on success. - * @brief Retrieve the range of values represented by the seeker - */ -double -ewl_seeker_range_get(Ewl_Seeker *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, -1); - DCHECK_TYPE_RET("s", s, EWL_SEEKER_TYPE, -1); - - DRETURN_FLOAT(s->range, DLEVEL_STABLE); -} - -/** - * @param s: the seeker to change step - * @param step: the new step value for the seeker - * @return Returns no value. - * @brief Set the steps between increments - * - * Changes the amount that each increment or decrement changes the value of the - * seeker @a s. - */ -void -ewl_seeker_step_set(Ewl_Seeker *s, double step) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SEEKER_TYPE); - - if (step > s->range) - step = s->range; - - s->step = step; - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param s: the seeker to retrieve step size - * @return Returns the step size of the seeker @a s. - * @brief Retrieve the step size of the seeker - */ -double -ewl_seeker_step_get(Ewl_Seeker *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, -1); - DCHECK_TYPE_RET("s", s, EWL_SEEKER_TYPE, -1); - - DLEAVE_FUNCTION(DLEVEL_STABLE); - DRETURN_FLOAT(s->step, DLEVEL_STABLE); -} - -/** * @param s: the seeker to change autohide * @param v: the new boolean value for autohiding * @return Returns no value. @@ -371,99 +244,7 @@ DRETURN_INT(abs(s->autohide), DLEVEL_STABLE); } - -/** - * @param s: the seeker to set invert property - * @param invert: the new value for the seekers invert property - * @return Returns no value. - * @brief Changes the invert property on the seeker for inverting it's scale. - */ -void -ewl_seeker_invert_set(Ewl_Seeker *s, int invert) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SEEKER_TYPE); - - if (s->invert != invert) { - s->invert = invert; - ewl_widget_configure(EWL_WIDGET(s)); - } - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param s: the seeker to retrieve invert property value - * @return Returns the current value of the invert property in the seeker. - * @brief Retrieve the current invert value from a seeker. - */ -int -ewl_seeker_invert_get(Ewl_Seeker *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, FALSE); - DCHECK_TYPE_RET("s", s, EWL_SEEKER_TYPE, FALSE); - - DRETURN_INT(s->invert, DLEVEL_STABLE); -} - -/** - * @param s: the seeker to increase - * @return Returns no value. - * @brief Increase the value of a seeker by it's step size - * - * Increases the value of the seeker @a s by one increment of it's step size. - */ -void -ewl_seeker_increase(Ewl_Seeker *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SEEKER_TYPE); - - s->value += s->step; - - if (s->value > s->range) - s->value = s->range; - else if (s->value < 0.0) - s->value = 0.0; - - ewl_widget_configure(EWL_WIDGET(s)); - - ewl_callback_call(EWL_WIDGET(s), EWL_CALLBACK_VALUE_CHANGED); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param s: the seeker to decrease - * @return Returns no value. - * @brief Decrease the value of a seeker by it's step size - * - * Decreases the value of the seeker @a s by one increment of it's step size. - */ -void -ewl_seeker_decrease(Ewl_Seeker *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SEEKER_TYPE); - - s->value -= s->step; - - if (s->value > s->range) - s->value = s->range; - else if (s->value < 0.0) - s->value = 0.0; - - ewl_widget_configure(EWL_WIDGET(s)); - - ewl_callback_call(EWL_WIDGET(s), EWL_CALLBACK_VALUE_CHANGED); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - + /** * @internal * @param w: The widget to work with @@ -479,7 +260,9 @@ void *user_data __UNUSED__) { Ewl_Seeker *s; + Ewl_Range *r; double s1, s2; + double range; int dx, dy; int dw, dh; int nw, nh; @@ -489,6 +272,8 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); s = EWL_SEEKER(w); + r = EWL_RANGE(w); + if (!s->button) DRETURN(DLEVEL_STABLE); @@ -496,22 +281,23 @@ dy = CURRENT_Y(s); dw = CURRENT_W(s); dh = CURRENT_H(s); - + + range = r->max_val - r->min_val; /* * First determine the size based on the number of steps to span from * min to max values. Then reduce the total scale to keep the button on * the seeker, then position the button. */ - s1 = s->step / s->range; + s1 = r->step / range; if (s->autohide && s1 >= 1.0) { ewl_widget_hide(w); s->autohide = -abs(s->autohide); } - if (s->invert) - s2 = (s->range - s->value) / s->range; + if (r->invert) + s2 = (r->max_val - r->value) / range; else - s2 = s->value / s->range; + s2 = (r->value - r->min_val) / range; if (s->orientation == EWL_ORIENTATION_VERTICAL) { dh *= s1; @@ -609,6 +395,7 @@ { Ewl_Event_Mouse_Move *ev; Ewl_Seeker *s; + Ewl_Range *r; double scale; DENTER_FUNCTION(DLEVEL_STABLE); @@ -617,8 +404,9 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); s = EWL_SEEKER(w); + r = EWL_RANGE(w); - if (s->step == s->range) + if (r->step == r->max_val - r->min_val) DRETURN(DLEVEL_STABLE); ev = ev_data; @@ -645,7 +433,7 @@ scale = ewl_seeker_mouse_value_map(s, ev->x, ev->y); - ewl_seeker_value_set(s, scale); + ewl_range_value_set(r, scale); DLEAVE_FUNCTION(DLEVEL_STABLE); @@ -664,6 +452,7 @@ void *user_data __UNUSED__) { Ewl_Seeker *s; + Ewl_Range *r; Ewl_Event_Mouse_Down *ev; double value, step = 0; int xx, yy, ww, hh; @@ -675,6 +464,7 @@ ev = ev_data; s = EWL_SEEKER(w); + r = EWL_RANGE(w); if (ewl_object_state_has(EWL_OBJECT(s->button), EWL_FLAG_STATE_PRESSED)) DRETURN(DLEVEL_STABLE); @@ -682,7 +472,7 @@ ewl_object_current_geometry_get(EWL_OBJECT(s->button), &xx, &yy, &ww, &hh); - value = s->value; + value = r->value; /* * Increment or decrement the value based on the position of the click @@ -691,25 +481,25 @@ if (s->orientation == EWL_ORIENTATION_HORIZONTAL) { s->dragstart = ev->x; if (ev->x < xx) { - step = -s->step; + step = -r->step; } else if (ev->x > xx + ww) { - step = s->step; + step = r->step; } } else { s->dragstart = ev->y; if (ev->y < yy) - step = -s->step; + step = -r->step; else if (ev->y > yy + hh) - step = s->step; + step = r->step; } - if (s->invert) + if (r->invert) step = -step; value += step; - ewl_seeker_value_set(s, value); + ewl_range_value_set(r, value); s->start_time = ecore_time_get(); s->timer = ecore_timer_add(0.5, ewl_seeker_timer, s); @@ -757,12 +547,12 @@ ewl_seeker_key_down_cb(Ewl_Widget *w, void *ev_data, void *user_data __UNUSED__) { - Ewl_Seeker *s; + Ewl_Range *r; Ewl_Event_Key_Down *ev; double start, end; - void (*increase)(Ewl_Seeker *s); - void (*decrease)(Ewl_Seeker *s); + void (*increase)(Ewl_Range *r); + void (*decrease)(Ewl_Range *r); DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -770,35 +560,35 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); ev = ev_data; - s = EWL_SEEKER(w); + r = EWL_RANGE(w); - if (!s->invert) { - increase = ewl_seeker_increase; - decrease = ewl_seeker_decrease; - start = 0.0; - end = s->range; + if (!r->invert) { + increase = ewl_range_increase; + decrease = ewl_range_decrease; + start = r->min_val; + end = r->max_val; } else { - increase = ewl_seeker_decrease; - decrease = ewl_seeker_increase; - start = s->range; - end = 0.0; + increase = ewl_range_decrease; + decrease = ewl_range_increase; + start = r->max_val; + end = r->min_val; } if (!strcmp(ev->keyname, "Home")) - ewl_seeker_value_set(s, start); + ewl_range_value_set(r, start); else if (!strcmp(ev->keyname, "End")) - ewl_seeker_value_set(s, end); + ewl_range_value_set(r, end); else if (!strcmp(ev->keyname, "Left") || !strcmp(ev->keyname, "KP_Left") || !strcmp(ev->keyname, "Up") || !strcmp(ev->keyname, "KP_Up")) - decrease(s); + decrease(r); else if (!strcmp(ev->keyname, "Right") || !strcmp(ev->keyname, "KP_Right") || !strcmp(ev->keyname, "Down") || !strcmp(ev->keyname, "KP_Down")) - increase(s); + increase(r); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -814,7 +604,7 @@ ewl_seeker_child_show_cb(Ewl_Container *p, Ewl_Widget *w) { int pw, ph; - Ewl_Seeker *s; + Ewl_Range *r; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("p", p); @@ -822,15 +612,15 @@ DCHECK_TYPE("p", p, EWL_CONTAINER_TYPE); DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); - s = EWL_SEEKER(p); + r = EWL_RANGE(p); pw = ewl_object_preferred_w_get(EWL_OBJECT(w)); ph = ewl_object_preferred_h_get(EWL_OBJECT(w)); - if (s->orientation == EWL_ORIENTATION_HORIZONTAL) - pw *= s->range / s->step; + if (EWL_SEEKER(r)->orientation == EWL_ORIENTATION_HORIZONTAL) + pw *= (r->max_val - r->min_val) / r->step; else - ph *= s->range / s->step; + ph *= (r->max_val - r->min_val) / r->step; ewl_object_preferred_inner_size_set(EWL_OBJECT(p), pw, ph); @@ -840,6 +630,7 @@ static double ewl_seeker_mouse_value_map(Ewl_Seeker *s, int mx, int my) { + Ewl_Range *r; int m; int dc, dg; int adjust; @@ -849,6 +640,8 @@ DCHECK_PARAM_PTR_RET("s", s, 0.0); DCHECK_TYPE_RET("s", s, EWL_SEEKER_TYPE, 0.0); + r = EWL_RANGE(s); + if (s->orientation == EWL_ORIENTATION_HORIZONTAL) { m = mx; @@ -888,9 +681,12 @@ /* * Calculate the new value based on the range, sizes and new position. */ - scale = s->range * (double)(m - dc) / (double)dg; - if (s->invert) - scale = s->range - scale; + scale = (r->max_val - r->min_val) * (double)(m - dc) / (double)dg; + + if (!r->invert) + scale = r->min_val + scale; + else + scale = r->max_val - scale; DRETURN_FLOAT(scale, DLEVEL_STABLE); } @@ -899,41 +695,43 @@ ewl_seeker_timer(void *data) { Ewl_Seeker *s; - double value, posval; + double value, posval, step; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("data", data, FALSE); DCHECK_TYPE_RET("data", data, EWL_SEEKER_TYPE, FALSE); s = EWL_SEEKER(data); - value = ewl_seeker_value_get(s); + value = ewl_range_value_get(EWL_RANGE(s)); + step = ewl_range_step_get(EWL_RANGE(s)); /* * Find the value based on mouse position */ - posval = ewl_seeker_mouse_value_map(s, s->dragstart, s->dragstart); + posval = ewl_seeker_mouse_value_map(s, s->dragstart * 2, + s->dragstart * 2); /* * Limit the value to the intersection with the mouse. */ if (posval > value) { - if (value + s->step > posval) { + if (value + step > posval) { value = posval; } else { - value += s->step; + value += step; } } else { - if (value - s->step < posval) { + if (value - step < posval) { value = posval; } else { - value -= s->step; + value -= step; } } - ewl_seeker_value_set(EWL_SEEKER(s), value); + ewl_range_value_set(EWL_RANGE(s), value); DRETURN_INT(TRUE, DLEVEL_STABLE); } =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_seeker.h,v retrieving revision 1.12 retrieving revision 1.13 diff -u -3 -r1.12 -r1.13 --- ewl_seeker.h 3 Jun 2006 16:18:11 -0000 1.12 +++ ewl_seeker.h 11 Aug 2006 04:00:57 -0000 1.13 @@ -40,13 +40,9 @@ */ struct Ewl_Seeker { - Ewl_Container container; /**< Inherit from Ewl_Container */ + Ewl_Range range; /**< Inherit from Ewl_Range */ Ewl_Orientation orientation; /**< Indicates layout direction */ Ewl_Widget *button; /**< Draggable widget for selecting value */ - double value; /**< Currently chosen value */ - double range; /**< Total selectable range */ - double step; /**< Size of increments in the range */ - int invert; /**< Invert the axis */ int dragstart; /**< The coordinate where the drag starts */ int autohide; /**< Indicator to hide when not scrollable */ Ecore_Timer *timer; /**< Timer for scroll repeating */ @@ -61,23 +57,8 @@ void ewl_seeker_orientation_set(Ewl_Seeker *s, Ewl_Orientation o); Ewl_Orientation ewl_seeker_orientation_get(Ewl_Seeker *s); -void ewl_seeker_value_set(Ewl_Seeker *s, double v); -double ewl_seeker_value_get(Ewl_Seeker *s); - -void ewl_seeker_range_set(Ewl_Seeker *s, double r); -double ewl_seeker_range_get(Ewl_Seeker *s); - -void ewl_seeker_step_set(Ewl_Seeker *s, double step); -double ewl_seeker_step_get(Ewl_Seeker *s); - void ewl_seeker_autohide_set(Ewl_Seeker *s, int v); int ewl_seeker_autohide_get(Ewl_Seeker *s); - -void ewl_seeker_invert_set(Ewl_Seeker *s, int invert); -int ewl_seeker_invert_get(Ewl_Seeker *s); - -void ewl_seeker_decrease(Ewl_Seeker *s); -void ewl_seeker_increase(Ewl_Seeker *s); /* * Internally used callbacks, override at your own risk. =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_spinner.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- ewl_spinner.c 10 Jul 2006 21:13:33 -0000 1.18 +++ ewl_spinner.c 11 Aug 2006 04:00:57 -0000 1.19 @@ -3,7 +3,7 @@ #include "ewl_debug.h" #include "ewl_macros.h" -static void ewl_spinner_calc_value(Ewl_Spinner *s, double val, unsigned int call); +static void ewl_spinner_entry_update(Ewl_Spinner *s); static int ewl_spinner_timer(void *data); /** @@ -39,19 +39,18 @@ int ewl_spinner_init(Ewl_Spinner *s) { - Ewl_Widget *w, *vbox; + Ewl_Widget *w; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR_RET("s", s, FALSE); w = EWL_WIDGET(s); - if (!ewl_box_init(EWL_BOX(w))) + if (!ewl_range_init(EWL_RANGE(w))) { DRETURN_INT(FALSE, DLEVEL_STABLE); } - ewl_box_orientation_set(EWL_BOX(w), EWL_ORIENTATION_HORIZONTAL); ewl_widget_appearance_set(w, EWL_SPINNER_TYPE); ewl_widget_inherit(w, EWL_SPINNER_TYPE); @@ -60,9 +59,17 @@ ewl_callback_append(w, EWL_CALLBACK_REALIZE, ewl_spinner_realize_cb, NULL); + ewl_callback_append(w, EWL_CALLBACK_CONFIGURE, + ewl_spinner_configure_cb, NULL); + ewl_callback_append(w, EWL_CALLBACK_VALUE_CHANGED, + ewl_spinner_value_changed_cb, NULL); ewl_callback_prepend(w, EWL_CALLBACK_DESTROY, ewl_spinner_destroy_cb, NULL); - + ewl_container_show_notify_set(EWL_CONTAINER(w), + ewl_spinner_child_show_cb); + ewl_container_resize_notify_set(EWL_CONTAINER(w), + ewl_spinner_child_resize_cb); + s->entry = ewl_entry_new(); ewl_text_text_set(EWL_TEXT(s->entry), "0"); ewl_container_child_append(EWL_CONTAINER(s), s->entry); @@ -83,15 +90,15 @@ ewl_widget_show(s->entry); - vbox = ewl_vbox_new(); - ewl_container_child_append(EWL_CONTAINER(s), vbox); - ewl_widget_appearance_set(vbox, "controls"); - ewl_widget_internal_set(vbox, TRUE); - ewl_object_fill_policy_set(EWL_OBJECT(vbox), EWL_FLAG_FILL_NONE); - ewl_widget_show(vbox); + s->vbox = ewl_vbox_new(); + ewl_container_child_append(EWL_CONTAINER(s), s->vbox); + ewl_widget_appearance_set(s->vbox, "controls"); + ewl_widget_internal_set(s->vbox, TRUE); + ewl_object_fill_policy_set(EWL_OBJECT(s->vbox), EWL_FLAG_FILL_NONE); + ewl_widget_show(s->vbox); s->increment = ewl_button_new(); - ewl_container_child_append(EWL_CONTAINER(vbox), s->increment); + ewl_container_child_append(EWL_CONTAINER(s->vbox), s->increment); ewl_object_alignment_set(EWL_OBJECT(s->increment), EWL_FLAG_ALIGN_CENTER); ewl_widget_appearance_set(s->increment, "increment"); @@ -107,7 +114,7 @@ ewl_widget_show(s->increment); s->decrement = ewl_button_new(); - ewl_container_child_append(EWL_CONTAINER(vbox), s->decrement); + ewl_container_child_append(EWL_CONTAINER(s->vbox), s->decrement); ewl_object_alignment_set(EWL_OBJECT(s->decrement), EWL_FLAG_ALIGN_CENTER); ewl_widget_appearance_set(s->decrement, "decrement"); @@ -122,51 +129,12 @@ ewl_spinner_key_down_cb, s); ewl_widget_show(s->decrement); - s->min_val = INT_MIN; - s->max_val = INT_MAX; - s->value = 0.0; - s->step = 0.1; s->digits = 2; DRETURN_INT(TRUE, DLEVEL_STABLE); } /** - * @param s: the spinner widget to set the current value - * @param value: the value to set for the spinner @a s - * @return Returns no value. - * @brief Set the current value of a spinner widget - * - * Sets the current value of the spinner @a s to @a value. - */ -void -ewl_spinner_value_set(Ewl_Spinner *s, double value) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SPINNER_TYPE); - - ewl_spinner_calc_value(s, value, FALSE); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param s: the spinner widget to retrieve the value - * @return Returns the current value in @a s on success, 0.0 on failure. - * @brief Get the current value of a spinner widget - */ -double -ewl_spinner_value_get(Ewl_Spinner *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, 0.00); - DCHECK_TYPE_RET("s", s, EWL_SPINNER_TYPE, 0.00); - - DRETURN_FLOAT(s->value, DLEVEL_STABLE); -} - -/** * @param s: the widget to change the number of digits displayed * @param digits: the number of digits to display for the spinner @a s * @return Returns no value. @@ -182,100 +150,55 @@ DCHECK_TYPE("s", s, EWL_SPINNER_TYPE); s->digits = digits; - ewl_spinner_calc_value(s, s->value, FALSE); + ewl_spinner_entry_update(s); DLEAVE_FUNCTION(DLEVEL_STABLE); } /** - * @param s: the spinner to retrieve minimum value - * @brief Retrieves the minimum value for the spinner. - * @return Returns the currently set minimum value for the specified spinner. - */ -double -ewl_spinner_min_val_get(Ewl_Spinner *s) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, 0.0); - DCHECK_TYPE_RET("s", s, EWL_SPINNER_TYPE, 0.0); - - DRETURN_FLOAT(s->min_val, DLEVEL_STABLE); -} - -/** - * @param s: the spinner to change the minimum possible value - * @param val: the new minimum possible value for @a s - * @return Returns no value. - * @brief Set the minimum value possible for a spinner - * - * Sets the smallest value that @a s can obtain to @a val. + * @internal + * @param w: The widget to work with + * @param ev_data: UNUSED + * @param user_data: UNUSED + * @return Returns no value + * @brief The realize callback */ void -ewl_spinner_min_val_set(Ewl_Spinner *s, double val) -{ - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SPINNER_TYPE); - - s->min_val = val; - ewl_spinner_calc_value(s, s->value, FALSE); - - DLEAVE_FUNCTION(DLEVEL_STABLE); -} - -/** - * @param s: the spinner to retrieve maximum value - * @brief Retrieves the maximum value for the spinner. - * @return Returns the currently set maximum value for the specified spinner. - */ -double -ewl_spinner_max_val_get(Ewl_Spinner *s) +ewl_spinner_realize_cb(Ewl_Widget *w, void *ev_data __UNUSED__, + void *user_data __UNUSED__) { - DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR_RET("s", s, 100.0); - DCHECK_TYPE_RET("s", s, EWL_SPINNER_TYPE, 100.0); - - DRETURN_FLOAT(s->max_val, DLEVEL_STABLE); -} + Ewl_Spinner *s; -/** - * @param s: the spinner to change the maximum possible value - * @param val: the new maximum possible value for @a s - * @return Returns no value. - * @brief Set the maximum value possible for a spinner - * - * Sets the largest value that @a s can obtain to @a val. - */ -void -ewl_spinner_max_val_set(Ewl_Spinner *s, double val) -{ DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SPINNER_TYPE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); - s->max_val = val; - ewl_spinner_calc_value(s, s->value, FALSE); + s = EWL_SPINNER(w); + ewl_spinner_entry_update(s); DLEAVE_FUNCTION(DLEVEL_STABLE); } /** - * @param s: the spinner to change increment step - * @param step: the new increment between clicks of the spinner @a s - * @brief Returns no value. - * @brief Set the increment between each click of the spinner - * - * Changes the increment that @a s changes by with each click of it's spinner - * buttons to @a step. + * @internal + * @param w: The widget to work with + * @param ev_data: UNUSED + * @param user_data: UNUSED + * @return Returns no value + * @brief The value changed callback */ void -ewl_spinner_step_set(Ewl_Spinner *s, double step) +ewl_spinner_value_changed_cb(Ewl_Widget *w, void *ev_data __UNUSED__, + void *user_data __UNUSED__) { + Ewl_Spinner *s; + DENTER_FUNCTION(DLEVEL_STABLE); - DCHECK_PARAM_PTR("s", s); - DCHECK_TYPE("s", s, EWL_SPINNER_TYPE); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); - s->step = step; + s = EWL_SPINNER(w); + ewl_spinner_entry_update(s); DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -286,21 +209,34 @@ * @param ev_data: UNUSED * @param user_data: UNUSED * @return Returns no value - * @brief The realize callback + * @brief The configure callback */ void -ewl_spinner_realize_cb(Ewl_Widget *w, void *ev_data __UNUSED__, +ewl_spinner_configure_cb(Ewl_Widget *w, void *ev_data __UNUSED__, void *user_data __UNUSED__) { Ewl_Spinner *s; + int cx, cy, cw, ch; + int pvw; /* the preferred w of the vbox */ DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); s = EWL_SPINNER(w); - ewl_spinner_calc_value(s, s->value, FALSE); + cx = CURRENT_X(w); + cy = CURRENT_Y(w); + cw = CURRENT_W(w); + ch = CURRENT_H(w); + + pvw = ewl_object_preferred_w_get(EWL_OBJECT(s->vbox)); + + ewl_object_place(EWL_OBJECT(s->vbox), cx + cw - pvw, cy, pvw, + ch); + ewl_object_place(EWL_OBJECT(s->entry), cx, cy, cw - pvw, + ch); + DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -392,7 +328,7 @@ if (str && strlen(str)) { val = atof(str); - ewl_spinner_calc_value(s, (double) (val), TRUE); + ewl_range_value_set(EWL_RANGE(s), (double) (val)); } else if (str) FREE(str); @@ -411,7 +347,7 @@ ewl_spinner_wheel_cb(Ewl_Widget *w, void *ev_data, void *user_data __UNUSED__) { - Ewl_Spinner *s; + Ewl_Range *r; Ewl_Event_Mouse_Wheel *wheel; DENTER_FUNCTION(DLEVEL_STABLE); @@ -419,45 +355,32 @@ DCHECK_PARAM_PTR("ev_data", ev_data); DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); - s = EWL_SPINNER(w); + r = EWL_RANGE(w); wheel = (Ewl_Event_Mouse_Wheel *)ev_data; - ewl_spinner_calc_value(s, s->value - (wheel->z * s->step), TRUE); + ewl_range_value_set(r, r->value - (wheel->z * r->step)); DLEAVE_FUNCTION(DLEVEL_STABLE); } static void -ewl_spinner_calc_value(Ewl_Spinner *s, double value, unsigned int call) +ewl_spinner_entry_update(Ewl_Spinner *s) { + Ewl_Range *r; char format[64]; char str[64]; - double oval; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("s", s); DCHECK_TYPE("s", s, EWL_SPINNER_TYPE); - oval = s->value; - - if (value < s->min_val) - s->value = s->min_val; - else if (value > s->max_val) - s->value = s->max_val; - else - s->value = value; + r = EWL_RANGE(s); snprintf(format, 64, "%%.%df", s->digits); - snprintf(str, 64, format, s->value); + snprintf(str, 64, format, r->value); ewl_text_text_set(EWL_TEXT(s->entry), str); - if ((call == TRUE) && (oval != s->value)) { - oval = s->value; - ewl_callback_call_with_event_data(EWL_WIDGET(s), - EWL_CALLBACK_VALUE_CHANGED, &oval); - } - DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -474,6 +397,7 @@ void *user_data) { Ewl_Spinner *s; + Ewl_Range *r; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -481,12 +405,16 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); s = EWL_SPINNER(user_data); + r = EWL_RANGE(s); ewl_spinner_focus_out_cb(EWL_WIDGET(s), NULL, NULL); - - ewl_spinner_calc_value(s, s->value + s->step, TRUE); + + if (!r->invert) + ewl_range_increase(r); + else + ewl_range_decrease(r); if (ev_data) { - s->direction = 1; + s->direction = (!r->invert) ? 1 : -1; s->start_time = ecore_time_get(); s->timer = ecore_timer_add(0.02, ewl_spinner_timer, s); } @@ -506,7 +434,6 @@ ewl_spinner_value_stop_cb(Ewl_Widget *w __UNUSED__, void *ev_data __UNUSED__, void *user_data) { - double oval; Ewl_Spinner *s; DENTER_FUNCTION(DLEVEL_STABLE); @@ -521,10 +448,6 @@ s->start_time = 0; } - oval = s->value; - ewl_callback_call_with_event_data(EWL_WIDGET(s), - EWL_CALLBACK_VALUE_CHANGED, &oval); - DLEAVE_FUNCTION(DLEVEL_STABLE); } @@ -541,6 +464,7 @@ void *user_data) { Ewl_Spinner *s; + Ewl_Range *r; DENTER_FUNCTION(DLEVEL_STABLE); DCHECK_PARAM_PTR("w", w); @@ -548,11 +472,17 @@ DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); s = EWL_SPINNER(user_data); + r = EWL_RANGE(s); + ewl_spinner_focus_out_cb(EWL_WIDGET(s), NULL, NULL); - ewl_spinner_calc_value(s, s->value - s->step, TRUE); + if (!r->invert) + ewl_range_decrease(r); + else + ewl_range_increase(r); + if (ev_data) { - s->direction = -1; + s->direction = (!r->invert) ? -1 : 1; s->start_time = ecore_time_get(); s->timer = ecore_timer_add(0.02, ewl_spinner_timer, s); } @@ -591,6 +521,7 @@ ewl_spinner_timer(void *data) { Ewl_Spinner *s; + Ewl_Range *r; double dt; double value, range, tmpt; int velocity, delay; @@ -599,10 +530,11 @@ DCHECK_PARAM_PTR_RET("data", data, FALSE); s = EWL_SPINNER(data); + r = EWL_RANGE(s); dt = ecore_time_get() - s->start_time; - value = ewl_spinner_value_get(s); - range = s->max_val - s->min_val; + value = r->value; + range = r->max_val - r->min_val; /* * Check the theme for a velocity setting and bring it within normal @@ -632,8 +564,79 @@ tmpt = ((1 - exp(-tmpt)) * ((double)(velocity) / 100.0)) * range; value += (double)(s->direction) * ((1 - exp(-dt)) + tmpt); - ewl_spinner_value_set(s, value); + ewl_range_value_set(r, value); DRETURN_INT(TRUE, DLEVEL_STABLE); +} + +static void +ewl_spinner_child_handle(Ewl_Container *c, + Ewl_Widget *w __UNUSED__) +{ + Ewl_Spinner *s; + int pvw, pvh, pew, peh; + + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); + DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE); + + s = EWL_SPINNER(c); + + pvw = ewl_object_preferred_w_get(EWL_OBJECT(s->vbox)); + pvh = ewl_object_preferred_h_get(EWL_OBJECT(s->vbox)); + + pew = ewl_object_preferred_w_get(EWL_OBJECT(s->entry)); + peh = ewl_object_preferred_h_get(EWL_OBJECT(s->entry)); + + ewl_object_preferred_inner_size_set(EWL_OBJECT(c), pvw + pew, + MAX(peh, pvh)); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @internal + * @param c: The container to work with + * @param w: The widget to work with + * @return Returns no value + * @brief The child show callback + */ +void +ewl_spinner_child_show_cb(Ewl_Container *c, Ewl_Widget *w) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE); + DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); + + ewl_spinner_child_handle(c, w); + + DLEAVE_FUNCTION(DLEVEL_STABLE); +} + +/** + * @internal + * @param c: The container to work with + * @param w: The widget to work with + * @param size: UNUSED + * @param o: UNUSED + * @return Returns no value + * @brief The child resize callback + */ +void +ewl_spinner_child_resize_cb(Ewl_Container *c, Ewl_Widget *w, + int size __UNUSED__, + Ewl_Orientation o __UNUSED__) +{ + DENTER_FUNCTION(DLEVEL_STABLE); + DCHECK_PARAM_PTR("c", c); + DCHECK_PARAM_PTR("w", w); + DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE); + DCHECK_TYPE("w", w, EWL_WIDGET_TYPE); + + ewl_spinner_child_handle(c, w); + + DLEAVE_FUNCTION(DLEVEL_STABLE); } =================================================================== RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_spinner.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- ewl_spinner.h 15 Mar 2006 04:03:48 -0000 1.10 +++ ewl_spinner.h 11 Aug 2006 04:00:57 -0000 1.11 @@ -33,18 +33,15 @@ #define EWL_SPINNER(spinner) ((Ewl_Spinner *) spinner) /** - * Inherits from Ewl_Box and adds an entry box that can only contain + * Inherits from Ewl_Range and adds an entry box that can only contain * numerical values as well as buttons for manipulating that value. */ struct Ewl_Spinner { - Ewl_Box box; /**< Inherit from Ewl_Box */ - double min_val; /**< Minimum numerical value displayed */ - double max_val; /**< Maximum numerical value displayed */ - double value; /**< Current value displayed */ - double step; /**< Amount to add or subtract at a time */ + Ewl_Range range; /**< Inherit from Ewl_Range */ int digits; /**< Number of digits displayed after decimal */ Ewl_Widget *entry; /**< The Ewl_Entry displaying value */ + Ewl_Widget *vbox; /**< Ewl_Box to hold the buttons */ Ewl_Widget *increment; /**< Ewl_Button to add value */ Ewl_Widget *decrement; /**< Ewl_Button to subtract value */ double start_time; /**< Time the spinner was pressed */ @@ -54,20 +51,17 @@ Ewl_Widget *ewl_spinner_new(void); int ewl_spinner_init(Ewl_Spinner *s); -void ewl_spinner_value_set(Ewl_Spinner *s, double value); -double ewl_spinner_value_get(Ewl_Spinner *s); void ewl_spinner_digits_set(Ewl_Spinner *s, unsigned char digits); -double ewl_spinner_min_val_get(Ewl_Spinner *s); -void ewl_spinner_min_val_set(Ewl_Spinner *s, double val); -double ewl_spinner_max_val_get(Ewl_Spinner *s); -void ewl_spinner_max_val_set(Ewl_Spinner *s, double val); -void ewl_spinner_step_set(Ewl_Spinner *s, double step); /* * Internally used callbacks, override at your own risk. */ void ewl_spinner_realize_cb(Ewl_Widget *widget, void *ev_data, void *user_data); +void ewl_spinner_value_changed_cb(Ewl_Widget *widget, void *ev_data, + void *user_data); +void ewl_spinner_configure_cb(Ewl_Widget *widget, void *ev_data, + void *user_data); void ewl_spinner_key_down_cb(Ewl_Widget *widget, void *ev_data, void *user_data); void ewl_spinner_focus_out_cb(Ewl_Widget *w, void *ev_data, @@ -81,7 +75,9 @@ void *user_data); void ewl_spinner_value_stop_cb(Ewl_Widget *w, void *ev_data, void *user_data); void ewl_spinner_destroy_cb(Ewl_Widget *w, void *ev_data, void *user_data); - +void ewl_spinner_child_show_cb(Ewl_Container *c, Ewl_Widget *w); +void ewl_spinner_child_resize_cb(Ewl_Container *c, Ewl_Widget *w, int size, + Ewl_Orientation o); /** * @} */ ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs