Ticket #3403: and_for_list.patch

File and_for_list.patch, 2.7 KB (added by wraitii, 7 years ago)

also do this for CGUIList

  • source/gui/scripting/GuiScriptConversions.cpp

    diff --git a/source/gui/scripting/GuiScriptConversions.cpp b/source/gui/scripting/GuiScriptConversions.cpp
    index 9c2d9d2..bfb7e2b 100644
    a b template<> void ScriptInterface::ToJSVal<IGUIObject*>(JSContext* UNUSED(cx), JS:  
    123123        ret.setObject(*val->GetJSObject());
    124124}
    125125
     126template<> void ScriptInterface::ToJSVal<CGUIString>(JSContext* cx, JS::MutableHandleValue ret, const CGUIString& val)
     127{
     128    ScriptInterface::ToJSVal(cx, ret, val.GetOriginalString());
     129}
     130
     131template<> bool ScriptInterface::FromJSVal<CGUIString>(JSContext* cx, JS::HandleValue v, CGUIString& out)
     132{
     133    std::wstring val;
     134    if (!ScriptInterface::FromJSVal(cx, v, val))
     135        return false;
     136    out.SetValue(val);
     137    return true;
     138}
     139
    126140// define some vectors
    127141VECTOR(CVector2D)
    128142VECTOR(std::vector<CVector2D>)
     143VECTOR(CGUIString)
    129144
  • source/gui/scripting/JSInterface_IGUIObject.cpp

    diff --git a/source/gui/scripting/JSInterface_IGUIObject.cpp b/source/gui/scripting/JSInterface_IGUIObject.cpp
    index 48b1890..7b1ced4 100644
    a b bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle  
    284284        {
    285285            CGUIList value;
    286286            GUI<CGUIList>::GetSetting(e, propName, value);
    287 
    288             JS::RootedObject obj(cx, JS_NewArrayObject(cx, JS::HandleValueArray::empty()));
    289             vp.setObject(*obj);
    290 
    291             for (u32 i = 0; i < value.m_Items.size(); ++i)
    292             {
    293                 JS::RootedValue val(cx);
    294                 ScriptInterface::ToJSVal(cx, &val, value.m_Items[i].GetOriginalString());
    295                 JS_SetElement(cx, obj, i, val);
    296             }
    297 
     287            ScriptInterface::ToJSVal(cx, vp, value.m_Items);
    298288            break;
    299289        }
    300290
    bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle  
    564554
    565555    case GUIST_CGUIList:
    566556    {
    567         u32 length;
    568         if (!vp.isObject() || !JS_GetArrayLength(cx, vpObj, &length))
    569         {
    570             JS_ReportError(cx, "List only accepts a GUIList object");
    571             return false;
    572         }
    573 
    574557        CGUIList list;
    575 
    576         for (u32 i = 0; i < length; ++i)
     558        if (ScriptInterface::FromJSVal(cx, vp, list.m_Items))
     559            GUI<CGUIList>::SetSetting(e, propName, list);
     560        else
    577561        {
    578             JS::RootedValue element(cx);
    579             if (!JS_GetElement(cx, vpObj, i, &element))
    580             {
    581                 JS_ReportError(cx, "Failed to get list element");
    582                 return false;
    583             }
    584 
    585             std::wstring value;
    586             if (!ScriptInterface::FromJSVal(cx, element, value))
    587                 return false;
    588 
    589             CGUIString str;
    590             str.SetValue(value);
    591 
    592             list.m_Items.push_back(str);
     562            JS_ReportError(cx, "Failed to get list '%s'", propName.c_str());
     563            return false;
    593564        }
    594 
    595         GUI<CGUIList>::SetSetting(e, propName, list);
    596565        break;
    597566    }
    598567