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:
|
123 | 123 | ret.setObject(*val->GetJSObject()); |
124 | 124 | } |
125 | 125 | |
| 126 | template<> void ScriptInterface::ToJSVal<CGUIString>(JSContext* cx, JS::MutableHandleValue ret, const CGUIString& val) |
| 127 | { |
| 128 | ScriptInterface::ToJSVal(cx, ret, val.GetOriginalString()); |
| 129 | } |
| 130 | |
| 131 | template<> 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 | |
126 | 140 | // define some vectors |
127 | 141 | VECTOR(CVector2D) |
128 | 142 | VECTOR(std::vector<CVector2D>) |
| 143 | VECTOR(CGUIString) |
129 | 144 | |
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
|
284 | 284 | { |
285 | 285 | CGUIList value; |
286 | 286 | 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); |
298 | 288 | break; |
299 | 289 | } |
300 | 290 | |
… |
… |
bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
|
564 | 554 | |
565 | 555 | case GUIST_CGUIList: |
566 | 556 | { |
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 | | |
574 | 557 | 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 |
577 | 561 | { |
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; |
593 | 564 | } |
594 | | |
595 | | GUI<CGUIList>::SetSetting(e, propName, list); |
596 | 565 | break; |
597 | 566 | } |
598 | 567 | |