Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_range.c etk_range.h etk_slider.c etk_slider.h etk_tree.c 
        etk_types.h 


Log Message:
* [Slider] Sliders can now have labels directly in their theme-object, 
like e17's sliders.


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_range.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -3 -r1.17 -r1.18
--- etk_range.c 28 Jan 2007 17:46:04 -0000      1.17
+++ etk_range.c 20 Feb 2007 20:50:19 -0000      1.18
@@ -209,9 +209,9 @@
    if (page_size != range->page_size)
    {
       range->page_size = page_size;
-      etk_widget_redraw_queue(ETK_WIDGET(range));
       etk_object_notify(ETK_OBJECT(range), "page_size");
    }
+   etk_range_value_set(range, range->value);
 }
 
 /**
@@ -328,9 +328,9 @@
  * A range has a <b>value</b> that can't be lower than the <b>lower bound</b> 
of the range, or greater than the
  * <b>upper bound</b> of the range. @n
  * Three other value have to be set when a new range is created:
- * - the <b>"step increment"</b> value is the value added or substracted to 
current value of the range, when the arrow
- * keys are used, or when the arrow buttons of a scrollbar are clicked for 
example. It is also the value used when the
- * user uses the mouse wheel.
+ * - the <b>"step increment"</b> value is the value added or substracted to 
the current value of the range, when the
+ * arrow keys are used, or when the arrow buttons of a scrollbar are clicked 
for example. It is also the value used
+ * when the user uses the mouse wheel.
  * - the <b>"page increment"</b> value is the value added or substracted to 
current value of the range, when the page
  * up/down keys are pressed, or when the trough of a scrollbar is clicked for 
example.
  * - the <b>"page size"</b> value is the size of viewport, used to calculate 
the size of the drag button of a scrollbar
@@ -374,7 +374,7 @@
  * @prop_rw
  * @prop_val 0.0
  * \par
- * @prop_name "page_size": The size of the page of the range. See the 
description of Etk_Range for more info
+ * @prop_name "page_size": The page-size of the range. See the description of 
Etk_Range for more info
  * @prop_type Double
  * @prop_rw
  * @prop_val 0.0
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_range.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- etk_range.h 28 Jan 2007 17:46:04 -0000      1.10
+++ etk_range.h 20 Feb 2007 20:50:19 -0000      1.11
@@ -19,7 +19,7 @@
 #define ETK_IS_RANGE(obj)    (ETK_OBJECT_CHECK_TYPE((obj), ETK_RANGE_TYPE))
 
 /**
- * @brief @widget The structure of a range
+ * @brief An abstract class used by widgets like scrollbars or sliders
  * @structinfo
  */
 struct Etk_Range
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_slider.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etk_slider.c        6 Oct 2006 17:04:15 -0000       1.13
+++ etk_slider.c        20 Feb 2007 20:50:19 -0000      1.14
@@ -13,13 +13,23 @@
  * @{
  */
 
+enum Etk_Slider_Property_Id
+{
+   ETK_SLIDER_LABEL_FORMAT_PROPERTY
+};
+
 static void _etk_slider_constructor(Etk_Slider *slider);
+static void _etk_slider_destructor(Etk_Slider *slider);
+static void _etk_slider_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
+static void _etk_slider_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
+
 static void _etk_slider_realize_cb(Etk_Object *object, void *data);
 static void _etk_slider_key_down_cb(Etk_Object *object, Etk_Event_Key_Down 
*event, void *data);
 static void _etk_slider_mouse_wheel(Etk_Object *object, Etk_Event_Mouse_Wheel 
*event, void *data);
 static void _etk_slider_cursor_dragged_cb(void *data, Evas_Object *obj, const 
char *emission, const char *source);
 static void _etk_slider_value_changed_handler(Etk_Range *range, double value);
 static void _etk_slider_range_changed_cb(Etk_Object *object, const char 
*property_name, void *data);
+static void _etk_slider_label_update(Etk_Slider *slider);
 
 /**************************
  *
@@ -32,12 +42,21 @@
  * @brief Gets the type of an Etk_Slider
  * @return Returns the type of an Etk_Slider
  */
-Etk_Type *etk_slider_type_get()
+Etk_Type *etk_slider_type_get(void)
 {
    static Etk_Type *slider_type = NULL;
 
    if (!slider_type)
-      slider_type = etk_type_new("Etk_Slider", ETK_RANGE_TYPE, 
sizeof(Etk_Slider), ETK_CONSTRUCTOR(_etk_slider_constructor), NULL);
+   {
+      slider_type = etk_type_new("Etk_Slider", ETK_RANGE_TYPE, 
sizeof(Etk_Slider),
+         ETK_CONSTRUCTOR(_etk_slider_constructor), 
ETK_DESTRUCTOR(_etk_slider_destructor));
+      
+      etk_type_property_add(slider_type, "label_format", 
ETK_SLIDER_LABEL_FORMAT_PROPERTY,
+         ETK_PROPERTY_STRING, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_string(NULL));
+      
+      slider_type->property_set = _etk_slider_property_set;
+      slider_type->property_get = _etk_slider_property_get;
+   }
 
    return slider_type;
 }
@@ -47,7 +66,7 @@
  * @brief Gets the type of an Etk_HSlider
  * @return Returns the type of an Etk_HSlider
  */
-Etk_Type *etk_hslider_type_get()
+Etk_Type *etk_hslider_type_get(void)
 {
    static Etk_Type *hslider_type = NULL;
 
@@ -62,7 +81,7 @@
  * @brief Gets the type of an Etk_VSlider
  * @return Returns the type of an Etk_VSlider
  */
-Etk_Type *etk_vslider_type_get()
+Etk_Type *etk_vslider_type_get(void)
 {
    static Etk_Type *vslider_type = NULL;
 
@@ -78,8 +97,9 @@
  */
 Etk_Widget *etk_hslider_new(double lower, double upper, double value, double 
step_increment, double page_increment)
 {
-   return etk_widget_new(ETK_HSLIDER_TYPE, "theme_group", "hslider", 
"focusable", ETK_TRUE, "lower", lower, "upper", upper,
-      "value", value, "step_increment", step_increment, "page_increment", 
page_increment, "focus_on_click", ETK_TRUE, NULL);
+   return etk_widget_new(ETK_HSLIDER_TYPE, "theme_group", "hslider", 
"focusable", ETK_TRUE,
+      "lower", lower, "upper", upper, "value", value, "step_increment", 
step_increment,
+      "page_increment", page_increment, "focus_on_click", ETK_TRUE, NULL);
 }
 
 /**
@@ -88,8 +108,43 @@
  */
 Etk_Widget *etk_vslider_new(double lower, double upper, double value, double 
step_increment, double page_increment)
 {
-   return etk_widget_new(ETK_VSLIDER_TYPE, "theme_group", "vslider", 
"focusable", ETK_TRUE, "lower", lower, "upper", upper,
-      "value", value, "step_increment", step_increment, "page_increment", 
page_increment, "focus_on_click", ETK_TRUE, NULL);
+   return etk_widget_new(ETK_VSLIDER_TYPE, "theme_group", "vslider", 
"focusable", ETK_TRUE,
+      "lower", lower, "upper", upper, "value", value, "step_increment", 
step_increment,
+      "page_increment", page_increment, "focus_on_click", ETK_TRUE, NULL);
+}
+
+/**
+ * @brief Sets the format of the label to display next to the slider
+ * @param slider a slider
+ * @param label_format the format of the slider's label. It uses the same 
format as printf(). Since the value is
+ * a double, you have to use "%.2f" if you want to display the value with two 
digits for example. @n
+ * NULL will hide the label
+ */
+void etk_slider_label_set(Etk_Slider *slider, const char *label_format)
+{
+   if (!slider || slider->format == label_format)
+      return;
+   
+   free(slider->format);
+   slider->format = label_format ? strdup(label_format) : NULL;
+   
+   etk_widget_theme_signal_emit(ETK_WIDGET(slider),
+      label_format ? "etk,action,show,label" : "etk,action,hide,label", 
ETK_TRUE);
+   _etk_slider_label_update(slider);
+   
+   etk_object_notify(ETK_OBJECT(slider), "label_format");
+}
+
+/**
+ * @brief Gets the format of the label displayed next to the slider
+ * @param slider a slider
+ * @return Returns the format string of the slider's label (NULL means the 
label is hidden)
+ */
+const char *etk_slider_label_get(Etk_Slider *slider)
+{
+   if (!slider)
+      return NULL;
+   return slider->format;
 }
 
 /**************************
@@ -105,6 +160,8 @@
       return;
 
    slider->dragging = ETK_FALSE;
+   slider->format = NULL;
+   
    ETK_RANGE(slider)->value_changed = _etk_slider_value_changed_handler;
    etk_signal_connect("realize", ETK_OBJECT(slider), 
ETK_CALLBACK(_etk_slider_realize_cb), NULL);
    etk_signal_connect("key_down", ETK_OBJECT(slider), 
ETK_CALLBACK(_etk_slider_key_down_cb), NULL);
@@ -113,6 +170,50 @@
    etk_object_notification_callback_add(ETK_OBJECT(slider), "upper", 
_etk_slider_range_changed_cb, NULL);
 }
 
+/* Destroys the slider */
+static void _etk_slider_destructor(Etk_Slider *slider)
+{
+   if (!slider)
+      return;
+   free(slider->format);
+}
+
+/* Sets the property whose id is "property_id" to the value "value" */
+static void _etk_slider_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value)
+{
+   Etk_Slider *slider;
+
+   if (!(slider = ETK_SLIDER(object)) || !value)
+      return;
+
+   switch (property_id)
+   {
+      case ETK_SLIDER_LABEL_FORMAT_PROPERTY:
+         etk_slider_label_set(slider, etk_property_value_string_get(value));
+         break;
+      default:
+         break;
+   }
+}
+
+/* Gets the value of the property whose id is "property_id" */
+static void _etk_slider_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value)
+{
+   Etk_Slider *slider;
+
+   if (!(slider = ETK_SLIDER(object)) || !value)
+      return;
+
+   switch (property_id)
+   {
+      case ETK_SLIDER_LABEL_FORMAT_PROPERTY:
+         etk_property_value_string_set(value, slider->format);
+         break;
+      default:
+         break;
+   }
+}
+
 /**************************
  *
  * Callbacks and handlers
@@ -122,13 +223,18 @@
 /* Called when the slider is realized */
 static void _etk_slider_realize_cb(Etk_Object *object, void *data)
 {
+   Etk_Slider *slider;
    Evas_Object *theme_object;
 
-   if (!object || !(theme_object = ETK_WIDGET(object)->theme_object))
+   if (!(slider = ETK_SLIDER(object)) || !(theme_object = 
ETK_WIDGET(slider)->theme_object))
       return;
 
-   _etk_slider_value_changed_handler(ETK_RANGE(object), 
ETK_RANGE(object)->value);
-   edje_object_signal_callback_add(theme_object, "drag*", 
"etk.dragable.slider", _etk_slider_cursor_dragged_cb, object);
+   etk_widget_theme_signal_emit(ETK_WIDGET(object),
+      slider->format ? "etk,action,show,label" : "etk,action,hide,label", 
ETK_TRUE);
+   edje_object_signal_callback_add(theme_object, "drag*", 
"etk.dragable.slider",
+      _etk_slider_cursor_dragged_cb, object);
+   
+   _etk_slider_value_changed_handler(ETK_RANGE(slider), 
ETK_RANGE(slider)->value);
 }
 
 /* Called when the user presses a key */
@@ -159,7 +265,7 @@
       etk_signal_stop();
 }
 
-/* Called when the user wants to change the value the mouse wheel */
+/* Called when the user wants to change the value with the mouse wheel */
 static void _etk_slider_mouse_wheel(Etk_Object *object, Etk_Event_Mouse_Wheel 
*event, void *data)
 {
    Etk_Range *slider_range;
@@ -204,7 +310,7 @@
    if (!(slider = ETK_SLIDER(range)) || !(theme_object = 
ETK_WIDGET(slider)->theme_object))
       return;
 
-   if (range->upper > range->lower)
+   if (range->upper - range->page_size > range->lower)
       percent = ETK_CLAMP((value - range->lower) / (range->upper - 
range->lower - range->page_size), 0.0, 1.0);
    else
       percent = 0.0;
@@ -216,6 +322,8 @@
       else
          edje_object_part_drag_value_set(theme_object, "etk.dragable.slider", 
0.0, percent);
    }
+   
+   _etk_slider_label_update(slider);
 }
 
 /* Called when the range of the slider is changed */
@@ -233,10 +341,29 @@
       percent = ETK_CLAMP((range->value - range->lower) / (range->upper - 
range->lower - range->page_size), 0.0, 1.0);
    else
       percent = 0.0;
+   
    if (ETK_IS_HSLIDER(range))
       edje_object_part_drag_value_set(theme_object, "etk.dragable.slider", 
percent, 0.0);
    else
       edje_object_part_drag_value_set(theme_object, "etk.dragable.slider", 
0.0, percent);
+}
+
+/**************************
+ *
+ * Callbacks and handlers
+ *
+ **************************/
+
+/* Updates the label of the slider's theme-object */
+static void _etk_slider_label_update(Etk_Slider *slider)
+{
+   char label[256];
+   
+   if (!slider || !slider->format)
+      return;
+   
+   snprintf(label, sizeof(label), slider->format, 
etk_range_value_get(ETK_RANGE(slider)));
+   etk_widget_theme_part_text_set(ETK_WIDGET(slider), "etk.text.label", label);
 }
 
 /** @} */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_slider.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- etk_slider.h        6 Oct 2006 17:04:15 -0000       1.3
+++ etk_slider.h        20 Feb 2007 20:50:19 -0000      1.4
@@ -7,48 +7,50 @@
 
 /**
  * @defgroup Etk_Slider Etk_Slider
+ * @brief An Etk_Slider is a widget with a cursor that the user can drag to 
change its value
  * @{
  */
 
-/** @brief Gets the type of a slider */
+/** Gets the type of a slider */
 #define ETK_SLIDER_TYPE       (etk_slider_type_get())
-/** @brief Casts the object to an Etk_Slider */
+/** Casts the object to an Etk_Slider */
 #define ETK_SLIDER(obj)       (ETK_OBJECT_CAST((obj), ETK_SLIDER_TYPE, 
Etk_Slider))
-/** @brief Checks if the object is an Etk_Slider */
+/** Checks if the object is an Etk_Slider */
 #define ETK_IS_SLIDER(obj)    (ETK_OBJECT_CHECK_TYPE((obj), ETK_SLIDER_TYPE))
 
-/** @brief Gets the type of a horizontal slider */
+/** Gets the type of a horizontal slider */
 #define ETK_HSLIDER_TYPE       (etk_hslider_type_get())
-/** @brief Casts the object to an Etk_HSlider */
+/** Casts the object to an Etk_HSlider */
 #define ETK_HSLIDER(obj)       (ETK_OBJECT_CAST((obj), ETK_HSLIDER_TYPE, 
Etk_HSlider))
-/** @brief Checks if the object is an Etk_HSlider */
+/** Checks if the object is an Etk_HSlider */
 #define ETK_IS_HSLIDER(obj)    (ETK_OBJECT_CHECK_TYPE((obj), ETK_HSLIDER_TYPE))
 
-/** @brief Gets the type of a vertical slider */
+/** Gets the type of a vertical slider */
 #define ETK_VSLIDER_TYPE       (etk_vslider_type_get())
-/** @brief Casts the object to an Etk_VSlider */
+/** Casts the object to an Etk_VSlider */
 #define ETK_VSLIDER(obj)       (ETK_OBJECT_CAST((obj), ETK_VSLIDER_TYPE, 
Etk_VSlider))
-/** @brief Checks if the object is an Etk_VSlider */
+/** Checks if the object is an Etk_VSlider */
 #define ETK_IS_VSLIDER(obj)    (ETK_OBJECT_CHECK_TYPE((obj), ETK_VSLIDER_TYPE))
 
 /**
- * @struct Etk_Slider
- * @brief An Etk_Slider is a widget with a cursor you can move to change a 
value
+ * @brief A widget with a cursor that the user can drag to change its value
+ * @structinfo
  */
-struct _Etk_Slider
+struct Etk_Slider
 {
    /* private: */
    /* Inherit from Etk_Range */
    Etk_Range range;
    
+   char *format;
    Etk_Bool dragging;
 };
 
 /**
- * @struct Etk_HSlider
- * @brief A horizontal slider
+ * @brief An horizontal slider
+ * @structinfo
  */
-struct _Etk_HSlider
+struct Etk_HSlider
 {
    /* private: */
    /* Inherit from Etk_Slider */
@@ -56,22 +58,25 @@
 };
 
 /**
- * @struct Etk_VSlider
  * @brief A vertical slider
+ * @structinfo
  */
-struct _Etk_VSlider
+struct Etk_VSlider
 {
    /* private: */
    /* Inherit from Etk_Slider */
    Etk_Slider slider;
 };
 
-Etk_Type *etk_slider_type_get();
-Etk_Type *etk_vslider_type_get();
-Etk_Type *etk_hslider_type_get();
+Etk_Type *etk_slider_type_get(void);
+Etk_Type *etk_vslider_type_get(void);
+Etk_Type *etk_hslider_type_get(void);
 
 Etk_Widget *etk_hslider_new(double lower, double upper, double value, double 
step_increment, double page_increment);
 Etk_Widget *etk_vslider_new(double lower, double upper, double value, double 
step_increment, double page_increment);
+
+void        etk_slider_label_set(Etk_Slider *slider, const char *label_format);
+const char *etk_slider_label_get(Etk_Slider *slider);
 
 /** @} */
 
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree.c,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -3 -r1.86 -r1.87
--- etk_tree.c  5 Feb 2007 03:49:22 -0000       1.86
+++ etk_tree.c  20 Feb 2007 20:50:19 -0000      1.87
@@ -133,6 +133,7 @@
 static Etk_Tree_Row *_etk_tree_row_next_to_render_get(Etk_Tree_Row *row, int 
*depth);
 static Etk_Tree_Row_Object *_etk_tree_row_object_create(Etk_Tree *tree);
 static void _etk_tree_row_object_destroy(Etk_Tree *tree, Etk_Tree_Row_Object 
*row_object);
+static void _etk_tree_row_signal_emit(Etk_Tree_Row *row, Etk_Tree_Row_Object 
*row_object, const char *signal);
 static void _etk_tree_expanders_clip(Etk_Tree *tree);
 
 static void _etk_tree_row_select(Etk_Tree *tree, Etk_Tree_Row *row, 
Etk_Modifiers modifiers);
@@ -2423,12 +2424,6 @@
             evas_object_resize(row_object->background, geometry.w, 
tree->rows_height);
             evas_object_show(row_object->background);
             
-            edje_object_signal_emit(row_object->background,
-               (row_id % 2 == 0) ? "etk,state,odd" : "etk,state,even", "etk");
-            edje_object_signal_emit(row_object->background,
-               row->selected ? "etk,state,selected" : "etk,state,unselected", 
"etk");
-            edje_object_message_signal_process(row_object->background);
-            
             if ((l2 = evas_list_find_list(prev_visible_rows, row)))
                prev_visible_rows = evas_list_remove_list(prev_visible_rows, 
l2);
             else
@@ -2540,6 +2535,10 @@
                }
             }
             
+            _etk_tree_row_signal_emit(row, row_object, (row_id % 2 == 0) ? 
"etk,state,odd" : "etk,state,even");
+            _etk_tree_row_signal_emit(row, row_object, row->selected ? 
"etk,state,selected" : "etk,state,unselected");
+            edje_object_message_signal_process(row_object->background);
+            
             evas_object_lower(row_object->background);
             row_object->row = row;
          }
@@ -3352,6 +3351,18 @@
    evas_object_del(row_object->expander);
    evas_object_del(row_object->background);
    free(row_object);
+}
+
+/* Emits a theme-signal to all the row objects (background, expander, 
model-objects) */
+static void _etk_tree_row_signal_emit(Etk_Tree_Row *row, Etk_Tree_Row_Object 
*row_object, const char *signal)
+{
+   if (!row || !row_object || !signal)
+      return;
+   
+   if (row_object->background)
+      edje_object_signal_emit(row_object->background, signal, "etk");
+   if (row_object->expander)
+      edje_object_signal_emit(row_object->expander, signal, "etk");
 }
 
 /* Clips all the expanders against the clip object of the first visible column 
*/
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_types.h,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -3 -r1.62 -r1.63
--- etk_types.h 16 Jan 2007 23:49:27 -0000      1.62
+++ etk_types.h 20 Feb 2007 20:50:19 -0000      1.63
@@ -96,9 +96,9 @@
 typedef struct Etk_HSeparator Etk_HSeparator;
 typedef struct Etk_VSeparator Etk_VSeparator;
 typedef struct Etk_Shadow Etk_Shadow;
-typedef struct _Etk_Slider Etk_Slider;
-typedef struct _Etk_HSlider Etk_HSlider;
-typedef struct _Etk_VSlider Etk_VSlider;
+typedef struct Etk_Slider Etk_Slider;
+typedef struct Etk_HSlider Etk_HSlider;
+typedef struct Etk_VSlider Etk_VSlider;
 typedef struct Etk_Spinner Etk_Spinner;
 typedef struct Etk_Statusbar Etk_Statusbar;
 typedef struct _Etk_Table Etk_Table;



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to