From: Enlightenment S. <no-...@en...> - 2012-03-09 20:46:58
|
Log: elev8: Remove CElmList The world is too small for two list implementations. Author: acidx Date: 2012-03-09 12:46:51 -0800 (Fri, 09 Mar 2012) New Revision: 69155 Trac: http://trac.enlightenment.org/e/changeset/69155 Removed: trunk/PROTO/elev8/data/javascript/list.js Modified: trunk/PROTO/elev8/data/javascript/Makefile.am trunk/PROTO/elev8/src/modules/elm/elev8_elm.cc Modified: trunk/PROTO/elev8/data/javascript/Makefile.am =================================================================== --- trunk/PROTO/elev8/data/javascript/Makefile.am 2012-03-09 20:46:44 UTC (rev 69154) +++ trunk/PROTO/elev8/data/javascript/Makefile.am 2012-03-09 20:46:51 UTC (rev 69155) @@ -30,7 +30,6 @@ inwin.js \ label.js \ layout.js \ - list.js \ menu.js \ notepad.js \ notify.js \ Modified: trunk/PROTO/elev8/src/modules/elm/elev8_elm.cc =================================================================== --- trunk/PROTO/elev8/src/modules/elm/elev8_elm.cc 2012-03-09 20:46:44 UTC (rev 69154) +++ trunk/PROTO/elev8/src/modules/elm/elev8_elm.cc 2012-03-09 20:46:51 UTC (rev 69155) @@ -51,488 +51,6 @@ using namespace v8; -class CElmList : public CEvasObject { - FACTORY(CElmList) -protected: - class Item { - public: - Local<Value> on_clicked; - Handle<Value> label; - Handle<Value> icon; - bool disabled; - }; - - class ListItem : public Item { - public: - CEvasObject *icon_left; - CEvasObject *icon_right; - Elm_Object_Item *li; - Handle<Value> end; - Handle<Value> tooltip; - }; - -protected: - Persistent<Value> items; - CPropHandler<CElmList> prop_handler; - std::list<ListItem*> list; - - const static int LABEL = 1; - const static int ICON = 2; - const static int END = 3; - const static int TOOLTIP = 4; - -public: - CElmList(CEvasObject *parent, Local<Object> obj) : - CEvasObject(), - prop_handler(property_list_base) - { - eo = elm_list_add(parent->top_widget_get()); - - construct(eo, obj); - items_set(obj->Get(String::New("items"))); - - get_object()->Set(String::New("append"), FunctionTemplate::New(append)->GetFunction()); - - get_object()->Set(String::New("prepend"), FunctionTemplate::New(prepend)->GetFunction()); - get_object()->Set(String::New("get_label"), FunctionTemplate::New(get_label)->GetFunction()); - get_object()->Set(String::New("get_icon"), FunctionTemplate::New(get_icon)->GetFunction()); - get_object()->Set(String::New("get_end"), FunctionTemplate::New(get_end)->GetFunction()); - get_object()->Set(String::New("get_tooltip"), FunctionTemplate::New(get_tooltip)->GetFunction()); - get_object()->Set(String::New("set_label"), FunctionTemplate::New(set_label)->GetFunction()); - get_object()->Set(String::New("set_icon"), FunctionTemplate::New(set_icon)->GetFunction()); - get_object()->Set(String::New("set_end"), FunctionTemplate::New(set_end)->GetFunction()); - get_object()->Set(String::New("set_tooltip"), FunctionTemplate::New(set_tooltip)->GetFunction()); - get_object()->Set(String::New("insert_after"), FunctionTemplate::New(insert_after)->GetFunction()); - get_object()->Set(String::New("insert_before"), FunctionTemplate::New(insert_before)->GetFunction()); - get_object()->Set(String::New("selected_item_get"), FunctionTemplate::New(selected_item_get)->GetFunction()); - get_object()->Set(String::New("selected_item_set"), FunctionTemplate::New(selected_item_set)->GetFunction()); - get_object()->Set(String::New("del"), FunctionTemplate::New(del)->GetFunction()); - get_object()->Set(String::New("num_items"), FunctionTemplate::New(num_items)->GetFunction()); - get_object()->Set(String::New("disabled"), FunctionTemplate::New(num_items)->GetFunction()); - - } - - static Handle<Value> append(const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - if (args[0]->IsObject()) - { - list->new_item_set(-1, args[0]); - } - return Undefined(); - } - static Handle<Value> prepend(const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - if (args[0]->IsObject()) - { - list->new_item_set(0, args[0]); - } - return Undefined(); - } - static Handle<Value> disabled(const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - if (!list->list.empty() && args[0]->IsNumber() && args[1]->IsBoolean()) - { - unsigned int val = args[0]->IntegerValue(); - - if (val <= list->list.size()) - { - std::list<ListItem*>::iterator i = list->list.begin(); - for ( ; val>0; val--) - i++; - elm_object_item_disabled_set((*i)->li, args[1]->BooleanValue()); - } - } - return Undefined(); - } - static Handle<Value> get_label(const Arguments& args) - { - return get_item(LABEL, args); - } - static Handle<Value> get_icon(const Arguments& args) - { - return get_item(ICON, args); - } - static Handle<Value> get_end(const Arguments& args) - { - return get_item(END, args); - } - static Handle<Value> get_tooltip(const Arguments& args) - { - return get_item(TOOLTIP, args); - } - static Handle<Value> get_item(int field, const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - if (!list->list.empty() && args[0]->IsNumber()) - { - unsigned int val = args[0]->IntegerValue(); - if (val <= list->list.size()) - { - std::list<ListItem*>::iterator i = list->list.begin(); - - for (;val>0; val--) - i++; - - switch(field) - { - case LABEL: - return (*i)->label; - case ICON: - return (*i)->icon; - case END: - return (*i)->end; - case TOOLTIP: - return (*i)->tooltip; - default: - return Undefined(); - } - } - } - return Undefined(); - } - - static Handle<Value> set_label(const Arguments& args) - { - return set_item(LABEL, args); - } - static Handle<Value> set_icon(const Arguments& args) - { - return set_item(ICON, args); - } - static Handle<Value> set_end(const Arguments& args) - { - return set_item(END, args); - } - static Handle<Value> set_tooltip(const Arguments& args) - { - return set_item(TOOLTIP, args); - } - static Handle<Value> set_item(int field, const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - if (!list->list.empty() && args[0]->IsNumber()) - { - unsigned int val = args[0]->IntegerValue(); - if (val <= list->list.size()) - { - std::list<ListItem*>::iterator i = list->list.begin(); - - for (;val>0; val--) - i++; - ListItem *it = *i; - - switch(field) - { - case LABEL: - if ( args[1]->IsString()) - { - static_cast<Persistent<Value> >(it->label).Dispose(); - it->label = v8::Persistent<Value>::New(args[1]->ToString()); - String::Utf8Value str(it->label->ToString()); - elm_object_item_text_set(it->li, *str); - } - break; - case ICON: - if ( args[1]->IsObject()) - { - static_cast<Persistent<Value> >(it->icon).Dispose(); - it->icon = v8::Persistent<Value>::New(args[1]); - it->icon_left = make_or_get(list, it->icon); - if (it->icon_left) - { - elm_icon_scale_set(it->icon_left->get(), 0, 0); - evas_object_size_hint_align_set(it->icon_left->get(), 0.0, 0.0); - elm_object_item_part_content_set(it->li, NULL, it->icon_left->get()); - } - } - break; - case END: - if ( args[1]->IsObject()) - { - static_cast<Persistent<Value> >(it->end).Dispose(); - it->end = v8::Persistent<Value>::New(args[1]); - it->icon_right = make_or_get(list, it->end); - - if (it->icon_right) - { - elm_icon_scale_set(it->icon_right->get(), 0, 0); - evas_object_size_hint_align_set(it->icon_right->get(), 0.0, 0.0); - elm_object_item_part_content_set(it->li, "end", it->icon_right->get()); - } - } - break; - case TOOLTIP: - if (args[1]->IsString()) - { - static_cast<Persistent<Value> >(it->tooltip).Dispose(); - it->tooltip = v8::Persistent<Value>::New(args[1]->ToString()); - String::Utf8Value str(it->tooltip->ToString()); - elm_object_tooltip_text_set(elm_object_item_widget_get(it->li), *str); - } - break; - default: - return Undefined(); - } - elm_list_go(list->get()); - } - } - return Undefined(); - } - static Handle<Value> insert_after(const Arguments&) - { - return Undefined(); - } - static Handle<Value> insert_before(const Arguments&) - { - return Undefined(); - } - static Handle<Value> selected_item_get(const Arguments&) - { - return Undefined(); - } - static Handle<Value> selected_item_set(const Arguments&) - { - return Undefined(); - } - static Handle<Value> del(const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - - if (!list->list.empty() && args[0]->IsNumber()) - { - int val = args[0]->IntegerValue(); - - if (val == -1) // delete last one - val = list->list.size(); - - if (val < (int) list->list.size()) - { - std::list<ListItem*>::iterator i = list->list.begin(); - - for (; val > 0; val--) - i++; - - ListItem *it = *i; - - elm_object_item_del(it->li); - elm_list_go(list->get()); - - list->list.erase(i); - - delete it; - } - } - return Undefined(); - } - static Handle<Value> num_items(const Arguments& args) - { - CEvasObject *self = eo_from_info(args.This()); - CElmList *list = static_cast<CElmList *>(self); - return v8::Number::New(list->list.size()); - } - - static void eo_on_click(void *data, Evas_Object *, void *) - { - if (data) - { - ListItem *it = static_cast<ListItem *>(data); - - if (*it->on_clicked != NULL) - { - if (it->on_clicked->IsFunction()) - { - Handle<Function> fn(Function::Cast(*(it->on_clicked))); - Local<Object> obj = Object::New(); - obj->Set(String::New("label"), it->label); - obj->Set(String::New("icon"), it->icon); - obj->Set(String::New("end"), it->end); - obj->Set(String::New("tooltip"), it->tooltip); - fn->Call(obj, 0, NULL); - } - } - } - } - - virtual Handle<Value> items_get(void) const - { - return items; - } - - virtual void items_set(Handle<Value> val) - { - if (!val->IsObject()) - { - ELM_ERR( "not an object!"); - return; - } - - Local<Object> in = val->ToObject(); - Local<Array> props = in->GetPropertyNames(); - - items.Dispose(); - items = Persistent<Value>::New(val); - - /* iterate through elements and instantiate them */ - // there can be no elements in the list - for (unsigned int i = 0; i < props->Length(); i++) - { - Local<Value> x = props->Get(Integer::New(i)); - String::Utf8Value val(x); - - Local<Value> item = in->Get(x->ToString()); - - // -1 means end of list - ListItem *it = new_item_set(-1, item); - if (it!=NULL) - { - ELM_INF( "New list item added."); - } - } - - } - - /* - * -1 = end of list - * >=0 appropriate index - */ - - virtual ListItem * new_item_set(int pos, Handle<Value> item) - { - if (!item->IsObject()) - { - // FIXME: permit adding strings here? - ELM_ERR( "list item is not an object"); - return NULL; - } - - if (items==Null()) - { - ELM_ERR( "Please add atleast empty \"items\" to list"); - return NULL; - } - - ListItem *it = list.front(); - if ((pos == 0) || (pos==-1)) //seperate insert and removal case - { - it = new ListItem(); - - it->label = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("label"))); - it->icon = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("icon"))); - it->end = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("end"))); - it->tooltip = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("tooltip"))); - - if ( !it->label->IsString() && !it->icon->IsObject() - && !it->end->IsObject()) - { - - ELM_ERR( "Basic elements missing"); - delete it; - return NULL; - } - } - - if (-1 == pos) - { - // either a label with icon - it->li = elm_list_item_append(eo,NULL,NULL,NULL,&eo_on_click,(void*)it); - list.push_back(it); - } - else if (0 == pos) - { - // either a label with icon - it->li = elm_list_item_prepend(eo,NULL,NULL,NULL,&eo_on_click,(void*)it); - list.push_front(it); - } - else - { - // get the Eina_List - const Eina_List *iter = elm_list_items_get (get()); - std::list<ListItem*>::iterator i = list.begin(); - - for (;pos>0; pos--) - { - i++; - iter = iter->next; - } - it->label = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("label"))); - it->icon = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("icon"))); - it->end = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("end"))); - it->tooltip = v8::Persistent<Value>::New(item->ToObject()->Get(String::New("tooltip"))); - list.insert(i, it); - } - - if ( it->label->IsString()) - { - String::Utf8Value str(it->label->ToString()); - elm_object_item_text_set(it->li, *str); - } - if ( it->icon->IsObject()) - { - it->icon_left = make_or_get(this, it->icon); - if (it->icon_left) - { - elm_icon_scale_set(it->icon_left->get(), 0, 0); - evas_object_size_hint_align_set(it->icon_left->get(), 0.0, 0.0); - elm_object_item_part_content_set(it->li, "left", it->icon_left->get()); - } - } - if ( it->end->IsObject()) - { - it->icon_right = make_or_get(this, it->end); - - if (it->icon_right) - { - elm_icon_scale_set(it->icon_right->get(), 0, 0); - evas_object_size_hint_align_set(it->icon_right->get(), 0.0, 0.0); - elm_object_item_part_content_set(it->li, "right", it->icon_right->get()); - } - } - if (it->tooltip->IsString()) - { - String::Utf8Value str(it->tooltip->ToString()); - elm_object_tooltip_text_set(elm_object_item_widget_get(it->li), *str); - } - - if (item->ToObject()->Get(String::New("on_clicked"))->IsFunction()) - { - it->on_clicked = Local<Value>::New( - item->ToObject()->Get(String::New("on_clicked"))); - } - elm_list_go(eo); - return it; - } - - virtual Handle<Value> mode_get() const - { - int mode = elm_list_mode_get(eo); - return Number::New(mode); - } - - virtual void mode_set(Handle<Value> value) - { - if (value->IsNumber()) - { - int mode = value->NumberValue(); - elm_list_mode_set(eo, (Elm_List_Mode)mode); - } - } -}; - -template<> CEvasObject::CPropHandler<CElmList>::property_list -CEvasObject::CPropHandler<CElmList>::list[] = { - PROP_HANDLER(CElmList, mode), - { NULL, NULL, NULL }, -}; - class CElmProgressBar : public CEvasObject { FACTORY(CElmProgressBar) protected: @@ -916,7 +434,6 @@ REGISTER("clock", CElmClock); REGISTER("entry", CElmEntry); REGISTER("flip", CElmFlip); - REGISTER("list", CElmList); REGISTER("genlist", CElmGenList); REGISTER("icon", CElmIcon); REGISTER("label", CElmLabel); |