From: Jihoon Kim <jihoon48.kim@samsung.com>
authorJihoon Kim <jihoon48.kim@samsung.com>
Tue, 7 Dec 2010 05:15:05 +0000 (05:15 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Tue, 7 Dec 2010 05:15:05 +0000 (05:15 +0000)
Subject: [E-devel] [PATCH] elm_slider patch for disable state

elm_slider does not support disable state, so I make this patch.

Please review it and upload in svn if it is ok.

(nb - also fixed vertical slider sizing in defaul theme and changed
jihoons changes to slider test to make the vertical sliders in a
horizontal box so they dont get silly long windows)

SVN revision: 55340

legacy/elementary/data/themes/default.edc
legacy/elementary/src/bin/test_slider.c
legacy/elementary/src/lib/elm_slider.c

index 20e6b85..94c953b 100644 (file)
@@ -13741,6 +13741,15 @@ collections {
                inherit: "default" 0.0;
                visible: 1;
             }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 255 0 0 100;
+            }
+            description { state: "disabled_inverted" 0.0;
+               inherit: "default" 0.0;
+               color: 255 0 0 100;
+               visible: 1;
+            }
          }
          part {
             name: "base_over";
@@ -13839,6 +13848,18 @@ collections {
                rel1.offset: 0 4;
                rel2.offset: 0 -5;
            }
+           description { state: "disabled" 0.0;
+              inherit: "default" 0.0;
+              color: 255 128 128 128;
+              visible: 0;
+           }
+           description { state: "disabled_visible" 0.0;
+              inherit: "default" 0.0;
+              color: 0 0 0 128;
+              color3: 0 0 0 0;
+              visible: 1;
+              text.min: 1 1;
+           }
         }
         part {
             name: "elm.swallow.end";
@@ -13918,6 +13939,18 @@ collections {
               rel1.offset: -5 0;
               rel2.offset: -5 -1;
            }
+           description { state: "disabled" 0.0;
+              inherit: "default" 0.0;
+              color: 255 128 128 128;
+              visible: 0;
+           }
+           description { state: "disabled_visible" 0.0;
+              inherit: "default" 0.0;
+              color: 0 0 0 128;
+              color3: 0 0 0 0;
+              visible: 1;
+              text.min: 1 1;
+           }
         }
          part { name: "elm.dragable.slider";
             type: RECT;
@@ -13973,6 +14006,10 @@ collections {
                }
                fill.smooth: 0;
             }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 128 128 128 128;
+                       }
          }
          part { name: "button1";
             mouse_events: 0;
@@ -14157,6 +14194,17 @@ collections {
               visible: 1;
             }
          }
+        part { name: "disabler";
+           type: RECT;
+           description { state: "default" 0.0;
+              color: 0 0 0 0;
+              visible: 0;
+           }
+           description { state: "disabled" 0.0;
+              inherit: "default" 0.0;
+              visible: 1;
+           }
+        }
       }
       programs {
         program { name: "text_show";
@@ -14252,6 +14300,69 @@ collections {
                thumb_up();
            }
         }
+         program {
+            name:    "go_disabled";
+            signal:  "elm,state,disabled";
+            source:  "elm";
+            action:  STATE_SET "disabled" 0.0;
+            target:  "button0";
+            target:  "disabler";
+            after: "disable_text";
+         }
+         program { name: "disable_text";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                  set_state(PART:"elm.text", "disabled_visible", 0.0);
+               else
+                  set_state(PART:"elm.text", "disabled", 0.0);
+
+               get_state(PART:"elm.units", st, 30, vl);
+               if (!strcmp(st, "visible")) 
+                  set_state(PART:"elm.units", "disabled_visible", 0.0);
+               else 
+                  set_state(PART:"elm.units", "disabled", 0.0);
+
+               get_state(PART:"level2", st, 30, vl);
+               if (!strcmp(st, "inverted")) 
+                  set_state(PART:"level2", "disabled_inverted", 0.0);
+               else 
+                  set_state(PART:"level2", "disabled", 0.0);
+            }
+         }
+         program { name: "enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "button0";
+            target: "disabler";
+            after: "enable_text";
+         }
+         program { name: "enable_text";
+            script {
+               new st[31];
+               new Float:vl;
+               get_state(PART:"elm.text", st, 30, vl);
+               if (!strcmp(st, "disabled_visible"))
+                  set_state(PART:"elm.text", "visible", 0.0);
+               else
+                  set_state(PART:"elm.text", "default", 0.0);
+
+               get_state(PART:"elm.units", st, 30, vl);
+               if (!strcmp(st, "disabled_visible"))
+                  set_state(PART:"elm.units", "visible", 0.0);
+               else
+                  set_state(PART:"elm.units", "default", 0.0);
+     
+               get_state(PART:"level2", st, 30, vl);
+               if (!strcmp(st, "visible"))
+                  set_state(PART:"level2", "visible", 0.0);
+               else
+                  set_state(PART:"level2", "default", 0.0);
+            }
+         }
       }
    }
 
@@ -14357,6 +14468,15 @@ collections {
                inherit: "default" 0.0;
                visible: 1;
             }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 255 0 0 100;
+            }
+            description { state: "disabled_inverted" 0.0;
+               inherit: "default" 0.0;
+               color: 255 0 0 100;
+               visible: 1;
+            }
          }
          part {
             name: "base_over";
@@ -14432,13 +14552,13 @@ collections {
            scale: 1;
            description { state: "default" 0.0;
               visible: 0;
-               fixed: 1 1;
+               fixed: 0 1;
                align: 0.5 0.0;
               rel1.to_y: "elm.swallow.icon";
-              rel1.relative: 0.5 1.0;
+              rel1.relative: 0.0 1.0;
                rel1.offset: 0 -1;
               rel2.to_y: "elm.swallow.icon";
-              rel2.relative: 0.5 1.0;
+              rel2.relative: 1.0 1.0;
               rel2.offset: -1 -1;
               color: 0 0 0 255;
               text {
@@ -14455,6 +14575,18 @@ collections {
                rel1.offset: 4 0;
                rel2.offset: -5 0;
            }
+           description { state: "disabled" 0.0;
+              inherit: "default" 0.0;
+              color: 255 128 128 128;
+              visible: 0;
+           }
+           description { state: "disabled_visible" 0.0;
+              inherit: "default" 0.0;
+              color: 0 0 0 128;
+              color3: 0 0 0 0;
+              visible: 1;
+              text.min: 1 1;
+           }
         }
         part {
             name: "elm.swallow.end";
@@ -14534,6 +14666,22 @@ collections {
               rel1.offset: 8 -9;
               rel2.offset: -9 -9;
            }
+           description { state: "disabled" 0.0;
+              inherit: "default" 0.0;
+              color:  0 0 0 128;
+              color3: 0 0 0 0;
+              visible: 0;
+           }
+           description { state: "disabled_visible" 0.0;
+              inherit: "default" 0.0;
+              fixed: 1 1;
+              visible: 1;
+              text.min: 1 1;
+              rel1.offset: 8 -9;
+              rel2.offset: -9 -9;
+              color: 0 0 0 128;
+              color3: 0 0 0 0;
+           }
         }
          part { name: "elm.dragable.slider";
             type: RECT;
@@ -14589,6 +14737,10 @@ collections {
                }
                fill.smooth: 0;
             }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               color: 128 128 128 128;
+               }
          }
          part { name: "button1";
             mouse_events: 0;
@@ -14772,7 +14924,19 @@ collections {
               visible: 1;
             }
          }
-      }
+            part { name: "disabler";
+               type: RECT;
+               description { state: "default" 0.0;
+                  color: 0 0 0 0;
+                  visible: 0;
+               }
+               description { state: "disabled" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+               }
+            }
+         }
+
       programs {
         program { name: "text_show";
            signal: "elm,state,text,visible";
@@ -14866,6 +15030,70 @@ collections {
                thumb_up();
            }
         }
+        program {
+           name:   "go_disabled";
+           signal: "elm,state,disabled";
+           source: "elm";
+           action: STATE_SET "disabled" 0.0;
+           target: "button0";
+           target: "disabler";
+           after: "disable_text";
+        }
+        program { name: "disable_text";
+           script {
+           new st[31];
+           new Float:vl;
+              get_state(PART:"elm.text", st, 30, vl);
+              if (!strcmp(st, "visible"))
+                 set_state(PART:"elm.text", "disabled_visible", 0.0);
+              else
+                 set_state(PART:"elm.text", "disabled", 0.0);
+
+              get_state(PART:"elm.units", st, 30, vl);
+              if (!strcmp(st, "visible")) 
+                 set_state(PART:"elm.units", "disabled_visible", 0.0);
+              else 
+                 set_state(PART:"elm.units", "disabled", 0.0);
+
+              get_state(PART:"level2", st, 30, vl);
+              if (!strcmp(st, "inverted")) 
+                 set_state(PART:"level2", "disabled_inverted", 0.0);
+              else 
+                 set_state(PART:"level2", "disabled", 0.0);
+           }
+        }
+
+        program { name: "enable";
+           signal: "elm,state,enabled";
+           source: "elm";
+           action: STATE_SET "default" 0.0;
+           target: "button0";
+           target: "disabler";
+           after: "enable_text";
+        }
+        program { name: "enable_text";
+           script {
+              new st[31];
+              new Float:vl;
+              get_state(PART:"elm.text", st, 30, vl);
+              if (!strcmp(st, "disabled_visible"))
+                 set_state(PART:"elm.text", "visible", 0.0);
+              else
+                 set_state(PART:"elm.text", "default", 0.0);
+
+              get_state(PART:"elm.units", st, 30, vl);
+              if (!strcmp(st, "disabled_visible"))
+                 set_state(PART:"elm.units", "visible", 0.0);
+              else
+                 set_state(PART:"elm.units", "default", 0.0);
+     
+              get_state(PART:"level2", st, 30, vl);
+              if (!strcmp(st, "visible"))
+                 set_state(PART:"level2", "visible", 0.0);
+              else
+                 set_state(PART:"level2", "default", 0.0);
+           }
+        }
       }
    }
 
index e17b67b..67d5a17 100644 (file)
@@ -14,7 +14,7 @@ _change_cb(void *data, Evas_Object *obj, void *event_info __UNUSED__)
 void
 test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
-   Evas_Object *win, *bg, *bx, *sl, *ic, *sl1;
+   Evas_Object *win, *bg, *bx, *sl, *ic, *sl1, *bx2;
    char buf[PATH_MAX];
 
    win = elm_win_add(NULL, "slider", ELM_WIN_BASIC);
@@ -48,6 +48,24 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    evas_object_show(ic);
    evas_object_show(sl);
 
+   /* horizontal disable state */
+   ic = elm_icon_add(win);
+   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+   elm_icon_file_set(ic, buf, NULL);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+   sl = elm_slider_add(win);
+   elm_slider_label_set(sl, "Disabled");
+   elm_slider_icon_set(sl, ic);
+   elm_slider_unit_format_set(sl, "%1.1f units");
+   elm_slider_span_size_set(sl, 120);
+   elm_object_disabled_set(sl, EINA_TRUE);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(ic);
+   evas_object_show(sl);
+
    ic = elm_icon_add(win);
    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(ic, buf, NULL);
@@ -62,7 +80,30 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    elm_slider_indicator_format_set(sl, "%3.0f");
    elm_slider_min_max_set(sl, 50, 150);
    elm_slider_value_set(sl, 80);
-   elm_slider_inverted_set(sl, 1);
+   elm_slider_inverted_set(sl, EINA_TRUE);
+   evas_object_size_hint_align_set(sl, 0.5, 0.5);
+   evas_object_size_hint_weight_set(sl, 0.0, 0.0);
+   elm_box_pack_end(bx, sl);
+   evas_object_show(ic);
+   evas_object_show(sl);
+
+   /* label2 disable */
+   ic = elm_icon_add(win);
+   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+   elm_icon_file_set(ic, buf, NULL);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+   sl = elm_slider_add(win);
+   elm_slider_label_set(sl, "Disabled inverted");
+   elm_slider_end_set(sl, ic);
+   elm_slider_span_size_set(sl, 80);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_slider_indicator_format_set(sl, "%3.0f");
+   elm_slider_min_max_set(sl, 50, 150);
+   elm_slider_value_set(sl, 80);
+   elm_slider_inverted_set(sl, EINA_TRUE);
+   elm_object_disabled_set(sl, EINA_TRUE);
    evas_object_size_hint_align_set(sl, 0.5, 0.5);
    evas_object_size_hint_weight_set(sl, 0.0, 0.0);
    elm_box_pack_end(bx, sl);
@@ -79,12 +120,18 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    elm_slider_indicator_format_set(sl, "%3.0f");
    elm_slider_min_max_set(sl, 50, 150);
    elm_slider_value_set(sl, 80);
-   elm_slider_inverted_set(sl, 1);
+   elm_slider_inverted_set(sl, EINA_TRUE);
    elm_object_scale_set(sl, 2.0);
    elm_box_pack_end(bx, sl);
    evas_object_show(ic);
    evas_object_show(sl);
 
+   bx2 = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_box_horizontal_set(bx2, EINA_TRUE);
+   elm_box_pack_end(bx, bx2);
+   evas_object_show(bx2);
+  
    ic = elm_icon_add(win);
    snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
    elm_icon_file_set(ic, buf, NULL);
@@ -93,7 +140,7 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    sl = elm_slider_add(win);
    elm_slider_icon_set(sl, ic);
    elm_slider_label_set(sl, "Vertical inverted");
-   elm_slider_inverted_set(sl, 1);
+   elm_slider_inverted_set(sl, EINA_TRUE);
    elm_slider_unit_format_set(sl, "units");
    elm_slider_span_size_set(sl, 60);
    evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
@@ -102,7 +149,7 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    elm_slider_value_set(sl, 0.2);
    elm_object_scale_set(sl, 1.0);
    elm_slider_horizontal_set(sl, 0);
-   elm_box_pack_end(bx, sl);
+   elm_box_pack_end(bx2, sl);
    evas_object_show(ic);
    evas_object_show(sl);
 
@@ -118,10 +165,33 @@ test_slider(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info
    elm_slider_value_set(sl, 0.2);
    elm_object_scale_set(sl, 1.0);
    elm_slider_horizontal_set(sl, EINA_FALSE);
-   elm_box_pack_end(bx, sl);
+   elm_box_pack_end(bx2, sl);
    evas_object_show(ic);
    evas_object_show(sl);
 
+   /* vertical disable state */
+   ic = elm_icon_add(win);
+   snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
+   elm_icon_file_set(ic, buf, NULL);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1);
+
+   sl = elm_slider_add(win);
+   elm_slider_icon_set(sl, ic);
+   elm_slider_label_set(sl, "Disabled vertical");
+   elm_slider_inverted_set(sl, EINA_TRUE);
+   elm_slider_unit_format_set(sl, "units");
+   elm_slider_span_size_set(sl, 100);
+   evas_object_size_hint_align_set(sl, 0.5, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(sl, 0.0, EVAS_HINT_EXPAND);
+   elm_slider_indicator_format_set(sl, "%1.1f");
+   elm_slider_value_set(sl, 0.2);
+   elm_object_scale_set(sl, 1.0);
+   elm_slider_horizontal_set(sl, 0);
+   elm_object_disabled_set(sl, EINA_TRUE);
+   elm_box_pack_end(bx2, sl);
+   evas_object_show(ic);
+   evas_object_show(sl);
+    
    evas_object_show(win);
 }
 #endif
index bd5350a..36bf0f4 100644 (file)
@@ -64,6 +64,7 @@ struct _Widget_Data
 static const char *widtype = NULL;
 static void _del_hook(Evas_Object *obj);
 static void _theme_hook(Evas_Object *obj);
+static void _disable_hook(Evas_Object *obj);
 static void _sizing_eval(Evas_Object *obj);
 static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
 static void _sub_del(void *data, Evas_Object *obj, void *event_info);
@@ -226,6 +227,17 @@ _theme_hook(Evas_Object *obj)
 }
 
 static void
+_disable_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   if (elm_widget_disabled_get(obj))
+      edje_object_signal_emit(wd->slider, "elm,state,disabled", "elm");
+   else
+      edje_object_signal_emit(wd->slider, "elm,state,enabled", "elm");
+}
+
+static void
 _sizing_eval(Evas_Object *obj)
 {   
    Widget_Data *wd = elm_widget_data_get(obj);
@@ -449,6 +461,7 @@ elm_slider_add(Evas_Object *parent)
    elm_widget_data_set(obj, wd);
    elm_widget_del_hook_set(obj, _del_hook);
    elm_widget_theme_hook_set(obj, _theme_hook);
+   elm_widget_disable_hook_set(obj, _disable_hook);
    elm_widget_can_focus_set(obj, EINA_TRUE);
    elm_widget_event_hook_set(obj, _event_hook);