summaryrefslogtreecommitdiff
path: root/Plugins/skins/SkinLib/V8Wrappers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Plugins/skins/SkinLib/V8Wrappers.cpp')
-rw-r--r--Plugins/skins/SkinLib/V8Wrappers.cpp125
1 files changed, 113 insertions, 12 deletions
diff --git a/Plugins/skins/SkinLib/V8Wrappers.cpp b/Plugins/skins/SkinLib/V8Wrappers.cpp
index 043345c..5cfc7b1 100644
--- a/Plugins/skins/SkinLib/V8Wrappers.cpp
+++ b/Plugins/skins/SkinLib/V8Wrappers.cpp
@@ -58,8 +58,15 @@ static void Set_DialogState_borders(Local<String> property, Local<Value> value,
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
DialogState *tmp = (DialogState *) wrap->Value();
- tmp->getBorders()->setAll(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->getBorders()->setAll(value->Int32Value());
}
@@ -77,6 +84,27 @@ void V8Wrappers::createDialogTemplate()
createBorderTemplate();
}
+static Handle<Value> Get_FieldState_borders(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ return self->GetInternalField(1);
+}
+
+
+static void Set_FieldState_borders(Local<String> property, Local<Value> value, const AccessorInfo& info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
+ FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->getBorders()->setAll(value->Int32Value());
+}
void V8Wrappers::createTextTemplate()
{
@@ -84,12 +112,14 @@ void V8Wrappers::createTextTemplate()
return;
Handle<ObjectTemplate> templ = ObjectTemplate::New();
- templ->SetInternalFieldCount(1);
+ templ->SetInternalFieldCount(2);
AddFieldStateAcessors(templ);
AddTextFieldStateAcessors(templ);
+ templ->SetAccessor(String::New("borders"), Get_FieldState_borders, Set_FieldState_borders);
templs[SIMPLE_TEXT] = templ;
createFontTemplate();
+ createBorderTemplate();
}
void V8Wrappers::createImageTemplate()
@@ -98,9 +128,12 @@ void V8Wrappers::createImageTemplate()
return;
Handle<ObjectTemplate> templ = ObjectTemplate::New();
- templ->SetInternalFieldCount(1);
+ templ->SetInternalFieldCount(2);
AddFieldStateAcessors(templ);
+ templ->SetAccessor(String::New("borders"), Get_FieldState_borders, Set_FieldState_borders);
templs[SIMPLE_IMAGE] = templ;
+
+ createBorderTemplate();
}
void V8Wrappers::createIconTemplate()
@@ -109,9 +142,12 @@ void V8Wrappers::createIconTemplate()
return;
Handle<ObjectTemplate> templ = ObjectTemplate::New();
- templ->SetInternalFieldCount(1);
+ templ->SetInternalFieldCount(2);
AddFieldStateAcessors(templ);
+ templ->SetAccessor(String::New("borders"), Get_FieldState_borders, Set_FieldState_borders);
templs[SIMPLE_ICON] = templ;
+
+ createBorderTemplate();
}
void V8Wrappers::createLabelTemplate()
@@ -120,12 +156,15 @@ void V8Wrappers::createLabelTemplate()
return;
Handle<ObjectTemplate> templ = ObjectTemplate::New();
- templ->SetInternalFieldCount(1);
+ templ->SetInternalFieldCount(2);
AddFieldStateAcessors(templ);
AddControlFieldStateAcessors(templ);
+ templ->SetAccessor(String::New("borders"), Get_FieldState_borders, Set_FieldState_borders);
templs[CONTROL_LABEL] = templ;
createFontTemplate();
+
+ createBorderTemplate();
}
void V8Wrappers::createButtonTemplate()
@@ -134,12 +173,14 @@ void V8Wrappers::createButtonTemplate()
return;
Handle<ObjectTemplate> templ = ObjectTemplate::New();
- templ->SetInternalFieldCount(1);
+ templ->SetInternalFieldCount(2);
AddFieldStateAcessors(templ);
AddControlFieldStateAcessors(templ);
+ templ->SetAccessor(String::New("borders"), Get_FieldState_borders, Set_FieldState_borders);
templs[CONTROL_BUTTON] = templ;
createFontTemplate();
+ createBorderTemplate();
}
void V8Wrappers::createEditTemplate()
@@ -148,12 +189,14 @@ void V8Wrappers::createEditTemplate()
return;
Handle<ObjectTemplate> templ = ObjectTemplate::New();
- templ->SetInternalFieldCount(1);
+ templ->SetInternalFieldCount(2);
AddFieldStateAcessors(templ);
AddControlFieldStateAcessors(templ);
+ templ->SetAccessor(String::New("borders"), Get_FieldState_borders, Set_FieldState_borders);
templs[CONTROL_EDIT] = templ;
createFontTemplate();
+ createBorderTemplate();
}
void V8Wrappers::createFontTemplate()
@@ -273,6 +316,9 @@ Handle<Object> V8Wrappers::createTextWrapper()
{
Handle<Object> obj = newInstance(SIMPLE_TEXT);
+ Handle<Object> borders = newInstance(BORDER);
+ obj->SetInternalField(1, borders);
+
Handle<Object> font = newInstance(FONT);
obj->Set(String::New("font"), font, ReadOnly);
@@ -286,6 +332,9 @@ Handle<Object> V8Wrappers::fillTextWrapper(Handle<Object> obj, TextFieldState *s
obj->SetInternalField(0, External::New(state));
+ Handle<Object> borders = Handle<Object>::Cast(obj->GetInternalField(1));
+ borders->SetInternalField(0, External::New(state->getBorders()));
+
Handle<Object> font = Handle<Object>::Cast(obj->Get(String::New("font")));
font->SetInternalField(0, External::New(state->getFont()));
@@ -294,7 +343,12 @@ Handle<Object> V8Wrappers::fillTextWrapper(Handle<Object> obj, TextFieldState *s
Handle<Object> V8Wrappers::createIconWrapper()
{
- return newInstance(SIMPLE_ICON);
+ Handle<Object> obj = newInstance(SIMPLE_ICON);
+
+ Handle<Object> borders = newInstance(BORDER);
+ obj->SetInternalField(1, borders);
+
+ return obj;
}
Handle<Object> V8Wrappers::fillIconWrapper(Handle<Object> obj, IconFieldState *state)
@@ -304,12 +358,20 @@ Handle<Object> V8Wrappers::fillIconWrapper(Handle<Object> obj, IconFieldState *s
obj->SetInternalField(0, External::New(state));
+ Handle<Object> borders = Handle<Object>::Cast(obj->GetInternalField(1));
+ borders->SetInternalField(0, External::New(state->getBorders()));
+
return obj;
}
Handle<Object> V8Wrappers::createImageWrapper()
{
- return newInstance(SIMPLE_IMAGE);
+ Handle<Object> obj = newInstance(SIMPLE_IMAGE);
+
+ Handle<Object> borders = newInstance(BORDER);
+ obj->SetInternalField(1, borders);
+
+ return obj;
}
Handle<Object> V8Wrappers::fillImageWrapper(Handle<Object> obj, ImageFieldState *state)
@@ -319,6 +381,9 @@ Handle<Object> V8Wrappers::fillImageWrapper(Handle<Object> obj, ImageFieldState
obj->SetInternalField(0, External::New(state));
+ Handle<Object> borders = Handle<Object>::Cast(obj->GetInternalField(1));
+ borders->SetInternalField(0, External::New(state->getBorders()));
+
return obj;
}
@@ -326,6 +391,9 @@ Handle<Object> V8Wrappers::createLabelWrapper()
{
Handle<Object> obj = newInstance(CONTROL_LABEL);
+ Handle<Object> borders = newInstance(BORDER);
+ obj->SetInternalField(1, borders);
+
Handle<Object> font = newInstance(FONT);
obj->Set(String::New("font"), font, ReadOnly);
@@ -339,6 +407,9 @@ Handle<Object> V8Wrappers::fillLabelWrapper(Handle<Object> obj, LabelFieldState
obj->SetInternalField(0, External::New(state));
+ Handle<Object> borders = Handle<Object>::Cast(obj->GetInternalField(1));
+ borders->SetInternalField(0, External::New(state->getBorders()));
+
Handle<Object> font = Handle<Object>::Cast(obj->Get(String::New("font")));
font->SetInternalField(0, External::New(state->getFont()));
@@ -349,6 +420,9 @@ Handle<Object> V8Wrappers::createButtonWrapper()
{
Handle<Object> obj = newInstance(CONTROL_BUTTON);
+ Handle<Object> borders = newInstance(BORDER);
+ obj->SetInternalField(1, borders);
+
Handle<Object> font = newInstance(FONT);
obj->Set(String::New("font"), font, ReadOnly);
@@ -362,6 +436,9 @@ Handle<Object> V8Wrappers::fillButtonWrapper(Handle<Object> obj, ButtonFieldStat
obj->SetInternalField(0, External::New(state));
+ Handle<Object> borders = Handle<Object>::Cast(obj->GetInternalField(1));
+ borders->SetInternalField(0, External::New(state->getBorders()));
+
Handle<Object> font = Handle<Object>::Cast(obj->Get(String::New("font")));
font->SetInternalField(0, External::New(state->getFont()));
@@ -372,6 +449,9 @@ Handle<Object> V8Wrappers::createEditWrapper()
{
Handle<Object> obj = newInstance(CONTROL_EDIT);
+ Handle<Object> borders = newInstance(BORDER);
+ obj->SetInternalField(1, borders);
+
Handle<Object> font = newInstance(FONT);
obj->Set(String::New("font"), font, ReadOnly);
@@ -385,6 +465,9 @@ Handle<Object> V8Wrappers::fillEditWrapper(Handle<Object> obj, EditFieldState *s
obj->SetInternalField(0, External::New(state));
+ Handle<Object> borders = Handle<Object>::Cast(obj->GetInternalField(1));
+ borders->SetInternalField(0, External::New(state->getBorders()));
+
Handle<Object> font = Handle<Object>::Cast(obj->Get(String::New("font")));
font->SetInternalField(0, External::New(state->getFont()));
@@ -401,6 +484,9 @@ static Handle<Value> Get_Options_Fields(Local<String> aName, const AccessorInfo
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
SkinOptions *opts = (SkinOptions *) wrap->Value();
if (opts == NULL)
return Undefined();
@@ -462,7 +548,13 @@ static Handle<Value> Get_SkinOption_value(Local<String> property, const Accessor
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
SkinOption *opt = (SkinOption *) wrap->Value();
+ if (opt == NULL)
+ return Undefined();
+
switch (opt->getType())
{
case CHECKBOX: return Boolean::New(opt->getValueCheckbox());
@@ -476,17 +568,26 @@ static void Set_SkinOption_value(Local<String> property, Local<Value> value, con
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
SkinOption *opt = (SkinOption *) wrap->Value();
+ if (opt == NULL)
+ return;
+
switch (opt->getType())
{
case CHECKBOX:
- opt->setValueCheckbox(value->BooleanValue());
+ if (!value.IsEmpty() && value->IsBoolean())
+ opt->setValueCheckbox(value->BooleanValue());
break;
case NUMBER:
- opt->setValueNumber(value->Int32Value());
+ if (!value.IsEmpty() && value->IsInt32())
+ opt->setValueNumber(value->Int32Value());
break;
case TEXT:
- opt->setValueText(Utf8ToTchar(*String::Utf8Value(value)));
+ if (!value.IsEmpty() && value->IsString())
+ opt->setValueText(Utf8ToTchar(*String::Utf8Value(value)));
break;
}
}