summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Plugins/skins/SkinLib/BorderState.cpp16
-rw-r--r--Plugins/skins/SkinLib/BorderState_v8_wrapper.cpp60
-rw-r--r--Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp19
-rw-r--r--Plugins/skins/SkinLib/DialogState.cpp53
-rw-r--r--Plugins/skins/SkinLib/DialogState.h14
-rw-r--r--Plugins/skins/SkinLib/DialogState_v8_wrapper.cpp126
-rw-r--r--Plugins/skins/SkinLib/Field.cpp13
-rw-r--r--Plugins/skins/SkinLib/Field.h4
-rw-r--r--Plugins/skins/SkinLib/FieldState.cpp80
-rw-r--r--Plugins/skins/SkinLib/FieldState.h17
-rw-r--r--Plugins/skins/SkinLib/FieldState.rec7
-rw-r--r--Plugins/skins/SkinLib/FieldState_v8_wrapper.cpp151
-rw-r--r--Plugins/skins/SkinLib/FontState_v8_wrapper.cpp109
-rw-r--r--Plugins/skins/SkinLib/IconFieldState.cpp2
-rw-r--r--Plugins/skins/SkinLib/ImageFieldState.cpp2
-rw-r--r--Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp80
-rw-r--r--Plugins/skins/SkinLib/TextFieldState.cpp3
-rw-r--r--Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp50
-rw-r--r--Plugins/skins/SkinLib/V8Script.cpp40
-rw-r--r--Plugins/skins/SkinLib/V8Wrappers.cpp125
-rw-r--r--Plugins/skins/SkinLib/utf8_helpers.h124
-rw-r--r--Plugins/skins/libs/v8_g.libbin0 -> 20584120 bytes
-rw-r--r--Plugins/skins/m_skins.h40
-rw-r--r--Plugins/skins/m_skins_cpp.h106
-rw-r--r--Plugins/skins/skins.cpp350
-rw-r--r--Plugins/skins/skins.vcproj40
26 files changed, 1207 insertions, 424 deletions
diff --git a/Plugins/skins/SkinLib/BorderState.cpp b/Plugins/skins/SkinLib/BorderState.cpp
index ff5d046..83dcdbc 100644
--- a/Plugins/skins/SkinLib/BorderState.cpp
+++ b/Plugins/skins/SkinLib/BorderState.cpp
@@ -1,8 +1,9 @@
#include "globals.h"
+#include <windows.h>
#include "BorderState.h"
-BorderState::BorderState(int aLeft, int aRight, int aTop, int aBottom) : left(aLeft), right(aRight),
- top(aTop), bottom(aBottom)
+BorderState::BorderState(int aLeft, int aRight, int aTop, int aBottom)
+ : left(aLeft), right(aRight), top(aTop), bottom(aBottom)
{
}
@@ -17,7 +18,7 @@ int BorderState::getLeft() const
void BorderState::setLeft(int left)
{
- this->left = left;
+ this->left = max(0, left);
}
int BorderState::getRight() const
@@ -27,7 +28,7 @@ int BorderState::getRight() const
void BorderState::setRight(int right)
{
- this->right = right;
+ this->right = max(0, right);
}
int BorderState::getTop() const
@@ -37,7 +38,7 @@ int BorderState::getTop() const
void BorderState::setTop(int top)
{
- this->top = top;
+ this->top = max(0, top);
}
int BorderState::getBottom() const
@@ -47,13 +48,14 @@ int BorderState::getBottom() const
void BorderState::setBottom(int bottom)
{
- this->bottom = bottom;
+ this->bottom = max(0, bottom);
}
void BorderState::setAll(int border)
{
+ border = max(0, border);
left = border;
right = border;
top = border;
bottom = border;
-} \ No newline at end of file
+}
diff --git a/Plugins/skins/SkinLib/BorderState_v8_wrapper.cpp b/Plugins/skins/SkinLib/BorderState_v8_wrapper.cpp
index a2e057e..ba8d611 100644
--- a/Plugins/skins/SkinLib/BorderState_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/BorderState_v8_wrapper.cpp
@@ -17,7 +17,13 @@ static Handle<Value> Get_BorderState_left(Local<String> property, const Accessor
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
BorderState *tmp = (BorderState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getLeft());
}
@@ -25,8 +31,15 @@ static void Set_BorderState_left(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;
+
BorderState *tmp = (BorderState *) wrap->Value();
- tmp->setLeft(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setLeft(value->Int32Value());
}
@@ -34,7 +47,13 @@ static Handle<Value> Get_BorderState_right(Local<String> property, const Accesso
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
BorderState *tmp = (BorderState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getRight());
}
@@ -42,8 +61,15 @@ static void Set_BorderState_right(Local<String> property, Local<Value> value, co
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
BorderState *tmp = (BorderState *) wrap->Value();
- tmp->setRight(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setRight(value->Int32Value());
}
@@ -51,7 +77,13 @@ static Handle<Value> Get_BorderState_top(Local<String> property, const AccessorI
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
BorderState *tmp = (BorderState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getTop());
}
@@ -59,8 +91,15 @@ static void Set_BorderState_top(Local<String> property, Local<Value> value, cons
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
BorderState *tmp = (BorderState *) wrap->Value();
- tmp->setTop(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setTop(value->Int32Value());
}
@@ -68,7 +107,13 @@ static Handle<Value> Get_BorderState_bottom(Local<String> property, const Access
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
BorderState *tmp = (BorderState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getBottom());
}
@@ -76,8 +121,15 @@ static void Set_BorderState_bottom(Local<String> property, Local<Value> value, c
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
BorderState *tmp = (BorderState *) wrap->Value();
- tmp->setBottom(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setBottom(value->Int32Value());
}
diff --git a/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp b/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp
index a8eee02..9cbd06a 100644
--- a/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp
@@ -18,7 +18,13 @@ static Handle<Value> Get_ControlFieldState_text(Local<String> property, const Ac
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
ControlFieldState *tmp = (ControlFieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return String::New((const V8_TCHAR *) tmp->getText());
}
@@ -26,9 +32,18 @@ static void Set_ControlFieldState_text(Local<String> property, Local<Value> valu
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
ControlFieldState *tmp = (ControlFieldState *) wrap->Value();
- String::Utf8Value utf8_value(value);
- tmp->setText(Utf8ToTchar(*utf8_value));
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsString())
+ {
+ String::Utf8Value utf8_value(value);
+ tmp->setText(Utf8ToTchar(*utf8_value));
+ }
}
diff --git a/Plugins/skins/SkinLib/DialogState.cpp b/Plugins/skins/SkinLib/DialogState.cpp
index 8643c06..e1e7654 100644
--- a/Plugins/skins/SkinLib/DialogState.cpp
+++ b/Plugins/skins/SkinLib/DialogState.cpp
@@ -34,6 +34,36 @@ FieldState * DialogState::getField(const char *name) const
return NULL;
}
+int DialogState::getX() const
+{
+ return 0;
+}
+
+int DialogState::getY() const
+{
+ return 0;
+}
+
+int DialogState::getLeft() const
+{
+ return getX();
+}
+
+int DialogState::getTop() const
+{
+ return getY();
+}
+
+int DialogState::getRight() const
+{
+ return getX() + getWidth();
+}
+
+int DialogState::getBottom() const
+{
+ return getY() + getHeight();
+}
+
int DialogState::getWidth() const
{
if (size.x >= 0)
@@ -78,4 +108,25 @@ int DialogState::getHorizontalBorders() const
int DialogState::getVerticalBorders() const
{
return borders.getTop() + borders.getBottom();
-} \ No newline at end of file
+}
+
+RECT DialogState::getInsideRect() const
+{
+ RECT ret;
+ ret.left = borders.getLeft();
+ ret.right = ret.left + getWidth();
+ ret.top = borders.getTop();
+ ret.bottom = ret.top + getHeight();
+ return ret;
+}
+
+RECT DialogState::getRect() const
+{
+ RECT ret;
+ ret.left = 0;
+ ret.right = borders.getLeft() + getWidth() + borders.getRight();
+ ret.top = 0;
+ ret.bottom = borders.getTop() + getHeight() + borders.getBottom();
+ return ret;
+}
+
diff --git a/Plugins/skins/SkinLib/DialogState.h b/Plugins/skins/SkinLib/DialogState.h
index 08b98d6..e27fc92 100644
--- a/Plugins/skins/SkinLib/DialogState.h
+++ b/Plugins/skins/SkinLib/DialogState.h
@@ -18,6 +18,15 @@ public:
std::vector<FieldState *> fields;
FieldState * getField(const char *name) const;
+ // Used inside script
+
+ virtual int getX() const;
+ virtual int getY() const;
+ virtual int getLeft() const;
+ virtual int getTop() const;
+ virtual int getRight() const;
+ virtual int getBottom() const;
+
int getWidth() const;
void setWidth(int width);
@@ -27,6 +36,11 @@ public:
BorderState * getBorders();
const BorderState * getBorders() const;
+ // Results
+
+ RECT getInsideRect() const;
+ RECT getRect() const;
+
private:
DialogState(Dialog *dialog);
diff --git a/Plugins/skins/SkinLib/DialogState_v8_wrapper.cpp b/Plugins/skins/SkinLib/DialogState_v8_wrapper.cpp
index 23f5d36..c1c49e3 100644
--- a/Plugins/skins/SkinLib/DialogState_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/DialogState_v8_wrapper.cpp
@@ -17,7 +17,13 @@ static Handle<Value> Get_DialogState_width(Local<String> property, const Accesso
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getWidth());
}
@@ -25,8 +31,15 @@ static void Set_DialogState_width(Local<String> property, Local<Value> value, co
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
DialogState *tmp = (DialogState *) wrap->Value();
- tmp->setWidth(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setWidth(value->Int32Value());
}
@@ -34,7 +47,13 @@ static Handle<Value> Get_DialogState_height(Local<String> property, const Access
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getHeight());
}
@@ -42,8 +61,105 @@ static void Set_DialogState_height(Local<String> property, Local<Value> value, c
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
+ DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setHeight(value->Int32Value());
+}
+
+
+static Handle<Value> Get_DialogState_x(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
+ DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
+ return Int32::New(tmp->getX());
+}
+
+
+static Handle<Value> Get_DialogState_y(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
+ DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
+ return Int32::New(tmp->getY());
+}
+
+
+static Handle<Value> Get_DialogState_left(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
+ DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
+ return Int32::New(tmp->getLeft());
+}
+
+
+static Handle<Value> Get_DialogState_top(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
DialogState *tmp = (DialogState *) wrap->Value();
- tmp->setHeight(value->Int32Value());
+ if (tmp == NULL)
+ return Undefined();
+
+ return Int32::New(tmp->getTop());
+}
+
+
+static Handle<Value> Get_DialogState_right(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
+ DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
+ return Int32::New(tmp->getRight());
+}
+
+
+static Handle<Value> Get_DialogState_bottom(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
+ DialogState *tmp = (DialogState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
+ return Int32::New(tmp->getBottom());
}
@@ -51,4 +167,10 @@ void AddDialogStateAcessors(Handle<ObjectTemplate> &templ)
{
templ->SetAccessor(String::New("width"), Get_DialogState_width, Set_DialogState_width);
templ->SetAccessor(String::New("height"), Get_DialogState_height, Set_DialogState_height);
+ templ->SetAccessor(String::New("x"), Get_DialogState_x, NULL, Handle<Value>(), DEFAULT, ReadOnly);
+ templ->SetAccessor(String::New("y"), Get_DialogState_y, NULL, Handle<Value>(), DEFAULT, ReadOnly);
+ templ->SetAccessor(String::New("left"), Get_DialogState_left, NULL, Handle<Value>(), DEFAULT, ReadOnly);
+ templ->SetAccessor(String::New("top"), Get_DialogState_top, NULL, Handle<Value>(), DEFAULT, ReadOnly);
+ templ->SetAccessor(String::New("right"), Get_DialogState_right, NULL, Handle<Value>(), DEFAULT, ReadOnly);
+ templ->SetAccessor(String::New("bottom"), Get_DialogState_bottom, NULL, Handle<Value>(), DEFAULT, ReadOnly);
}
diff --git a/Plugins/skins/SkinLib/Field.cpp b/Plugins/skins/SkinLib/Field.cpp
index 033090c..6e36241 100644
--- a/Plugins/skins/SkinLib/Field.cpp
+++ b/Plugins/skins/SkinLib/Field.cpp
@@ -4,7 +4,7 @@
Field::Field(Dialog *aDlg, const char *aName)
- : dlg(aDlg), name(aName), onChangeCallback(NULL), onChangeCallbackParam(NULL)
+ : dlg(aDlg), name(aName), onChangeCallback(NULL), onChangeCallbackParam(NULL), enabled(true)
{
}
@@ -22,6 +22,17 @@ const char * Field::getName() const
return name.c_str();
}
+bool Field::isEnabled() const
+{
+ return enabled;
+}
+
+void Field::setEnabled(bool enabled)
+{
+ this->enabled = enabled;
+ fireOnChange();
+}
+
void Field::setOnChangeCallback(FieldCallback cb, void *param /*= NULL*/)
{
onChangeCallback = cb;
diff --git a/Plugins/skins/SkinLib/Field.h b/Plugins/skins/SkinLib/Field.h
index 47d17cb..e3bd499 100644
--- a/Plugins/skins/SkinLib/Field.h
+++ b/Plugins/skins/SkinLib/Field.h
@@ -37,6 +37,9 @@ public:
virtual const char * getName() const;
virtual FieldType getType() const = 0;
+ virtual bool isEnabled() const;
+ virtual void setEnabled(bool enabled);
+
virtual FieldState * createState(DialogState *dialogState) = 0;
virtual void setOnChangeCallback(FieldCallback cb, void *param = NULL);
@@ -47,6 +50,7 @@ protected:
private:
Dialog *dlg;
const std::string name;
+ bool enabled;
FieldCallback onChangeCallback;
void *onChangeCallbackParam;
diff --git a/Plugins/skins/SkinLib/FieldState.cpp b/Plugins/skins/SkinLib/FieldState.cpp
index 2509a77..8af110c 100644
--- a/Plugins/skins/SkinLib/FieldState.cpp
+++ b/Plugins/skins/SkinLib/FieldState.cpp
@@ -14,7 +14,7 @@
FieldState::FieldState(DialogState *aDialog, Field *aField)
: field(aField), dialog(aDialog), size(-1, -1), pos(0, 0),
- usingX(0), usingY(0), visible(true)
+ usingX(0), usingY(0), visible(aField->isEnabled()), borders(0,0,0,0)
{
}
@@ -42,7 +42,7 @@ void FieldState::setX(int x)
if (usingX & END)
{
int diff = x - getX();
- size.x = max(0, getWidth() - diff);
+ size.x = max(0, getWidth() - getHorizontalBorders() - diff);
}
pos.x = x;
@@ -60,7 +60,7 @@ void FieldState::setY(int y)
if (usingY & END)
{
int diff = y - getY();
- size.y = max(0, getHeight() - diff);
+ size.y = max(0, getHeight() - getVerticalBorders() - diff);
}
pos.y = y;
@@ -71,14 +71,14 @@ void FieldState::setY(int y)
int FieldState::getWidth() const
{
if (size.x >= 0)
- return size.x;
+ return size.x + getHorizontalBorders();
- return getPreferedSize().x;
+ return getPreferedSize().x + getHorizontalBorders();
}
void FieldState::setWidth(int width)
{
- width = max(0, width);
+ width = max(0, width - getHorizontalBorders()) + getHorizontalBorders();
if (LAST_SET(usingX) == END)
{
@@ -86,7 +86,7 @@ void FieldState::setWidth(int width)
pos.x = getX() - diff;
}
- size.x = width;
+ size.x = width - getHorizontalBorders();
usingX |= LEN;
}
@@ -94,14 +94,14 @@ void FieldState::setWidth(int width)
int FieldState::getHeight() const
{
if (size.y >= 0)
- return size.y;
+ return size.y + getVerticalBorders();
- return getPreferedSize().y;
+ return getPreferedSize().y + getVerticalBorders();
}
void FieldState::setHeight(int height)
{
- height = max(0, height);
+ height = max(0, height - getVerticalBorders()) + getVerticalBorders();
if (LAST_SET(usingY) == END)
{
@@ -109,7 +109,7 @@ void FieldState::setHeight(int height)
pos.y = getY() - diff;
}
- size.y = height;
+ size.y = height - getVerticalBorders();
usingY |= LEN;
}
@@ -131,6 +131,11 @@ void FieldState::setVisible(bool visible)
this->visible = visible;
}
+bool FieldState::isEnabled() const
+{
+ return field->isEnabled();
+}
+
int FieldState::getLeft() const
{
return getX();
@@ -189,6 +194,26 @@ void FieldState::setBottom(int botom)
SET(usingY, END);
}
+BorderState * FieldState::getBorders()
+{
+ return &borders;
+}
+
+const BorderState * FieldState::getBorders() const
+{
+ return &borders;
+}
+
+int FieldState::getHorizontalBorders() const
+{
+ return borders.getLeft() + borders.getRight();
+}
+
+int FieldState::getVerticalBorders() const
+{
+ return borders.getTop() + borders.getBottom();
+}
+
static inline int beetween(int val, int minVal, int maxVal)
{
return max(minVal, min(maxVal, val));
@@ -196,21 +221,34 @@ static inline int beetween(int val, int minVal, int maxVal)
RECT FieldState::getRect() const
{
- RECT ret = { 0, 0, 0, 0 };
+ RECT ret = {0};
+
+ if (!visible)
+ return ret;
+
+ RECT inside = dialog->getInsideRect();
+
+ ret.left = beetween(getLeft() + inside.left, inside.left, inside.right);
+ ret.right = beetween(getRight() + inside.left, inside.left, inside.right);
+ ret.top = beetween(getTop() + inside.top, inside.top, inside.bottom);
+ ret.bottom = beetween(getBottom() + inside.top, inside.top, inside.bottom);
+
+ return ret;
+}
+
+RECT FieldState::getInsideRect() const
+{
+ RECT ret = {0};
if (!visible)
return ret;
- BorderState *borders = dialog->getBorders();
- int left = max(0, borders->getLeft());
- int right = max(left, min(dialog->getWidth(), dialog->getWidth() - borders->getRight()));
- int top = max(0, borders->getTop());
- int bottom = max(top, min(dialog->getHeight(), dialog->getHeight() - borders->getBottom()));
+ RECT inside = dialog->getInsideRect();
- ret.left = beetween(getLeft() + borders->getLeft(), left, right);
- ret.right = beetween(getRight(), left, right);
- ret.top = beetween(getTop() + borders->getTop(), top, bottom);
- ret.bottom = beetween(getBottom(), top, bottom);
+ ret.left = beetween(getLeft() + borders.getLeft() + inside.left, inside.left, inside.right);
+ ret.right = beetween(getRight() - borders.getRight() + inside.left, inside.left, inside.right);
+ ret.top = beetween(getTop() + borders.getTop() + inside.top, inside.top, inside.bottom);
+ ret.bottom = beetween(getBottom() - borders.getBottom() + inside.top, inside.top, inside.bottom);
return ret;
}
diff --git a/Plugins/skins/SkinLib/FieldState.h b/Plugins/skins/SkinLib/FieldState.h
index a3c07b4..4bbe3b4 100644
--- a/Plugins/skins/SkinLib/FieldState.h
+++ b/Plugins/skins/SkinLib/FieldState.h
@@ -2,6 +2,7 @@
# define __FIELD_STATE_H__
#include "Field.h"
+#include "BorderState.h"
class DialogState;
@@ -23,6 +24,8 @@ public:
virtual Size getPreferedSize() const = 0;
+ // Used inside script
+
virtual int getX() const;
virtual void setX(int x);
@@ -45,13 +48,21 @@ public:
virtual void setRight(int right);
virtual int getBottom() const;
- virtual void setBottom(int botom);
+ virtual void setBottom(int bottom);
virtual bool isVisible() const;
virtual void setVisible(bool visible);
+ virtual bool isEnabled() const;
+
+ virtual BorderState * getBorders();
+ virtual const BorderState * getBorders() const;
+
virtual bool isEmpty() const = 0;
+ // Results
+
+ virtual RECT getInsideRect() const;
virtual RECT getRect() const;
protected:
@@ -65,6 +76,10 @@ protected:
int usingX;
int usingY;
bool visible;
+ BorderState borders;
+
+ int getHorizontalBorders() const;
+ int getVerticalBorders() const;
friend class Field;
};
diff --git a/Plugins/skins/SkinLib/FieldState.rec b/Plugins/skins/SkinLib/FieldState.rec
index c1d2f44..ca1998d 100644
--- a/Plugins/skins/SkinLib/FieldState.rec
+++ b/Plugins/skins/SkinLib/FieldState.rec
@@ -2,6 +2,12 @@ struct DialogState
{
Int32 width;
Int32 height;
+ const Int32 x;
+ const Int32 y;
+ const Int32 left;
+ const Int32 top;
+ const Int32 right;
+ const Int32 bottom;
};
struct FieldState
@@ -15,6 +21,7 @@ struct FieldState
Int32 right;
Int32 bottom;
Boolean visible;
+ const Boolean enabled;
};
struct ControlFieldState
diff --git a/Plugins/skins/SkinLib/FieldState_v8_wrapper.cpp b/Plugins/skins/SkinLib/FieldState_v8_wrapper.cpp
index e5f754b..7217a2e 100644
--- a/Plugins/skins/SkinLib/FieldState_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/FieldState_v8_wrapper.cpp
@@ -17,7 +17,13 @@ static Handle<Value> Get_FieldState_x(Local<String> property, const AccessorInfo
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getX());
}
@@ -25,8 +31,15 @@ static void Set_FieldState_x(Local<String> property, Local<Value> value, const A
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setX(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setX(value->Int32Value());
}
@@ -34,7 +47,13 @@ static Handle<Value> Get_FieldState_y(Local<String> property, const AccessorInfo
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getY());
}
@@ -42,8 +61,15 @@ static void Set_FieldState_y(Local<String> property, Local<Value> value, const A
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setY(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setY(value->Int32Value());
}
@@ -51,7 +77,13 @@ static Handle<Value> Get_FieldState_width(Local<String> property, const Accessor
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getWidth());
}
@@ -59,8 +91,15 @@ static void Set_FieldState_width(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;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setWidth(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setWidth(value->Int32Value());
}
@@ -68,7 +107,13 @@ static Handle<Value> Get_FieldState_height(Local<String> property, const Accesso
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getHeight());
}
@@ -76,8 +121,15 @@ static void Set_FieldState_height(Local<String> property, Local<Value> value, co
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setHeight(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setHeight(value->Int32Value());
}
@@ -85,7 +137,13 @@ static Handle<Value> Get_FieldState_left(Local<String> property, const AccessorI
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getLeft());
}
@@ -93,8 +151,15 @@ static void Set_FieldState_left(Local<String> property, Local<Value> value, cons
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setLeft(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setLeft(value->Int32Value());
}
@@ -102,7 +167,13 @@ static Handle<Value> Get_FieldState_top(Local<String> property, const AccessorIn
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getTop());
}
@@ -110,8 +181,15 @@ static void Set_FieldState_top(Local<String> property, Local<Value> value, const
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setTop(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setTop(value->Int32Value());
}
@@ -119,7 +197,13 @@ static Handle<Value> Get_FieldState_right(Local<String> property, const Accessor
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getRight());
}
@@ -127,8 +211,15 @@ static void Set_FieldState_right(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;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setRight(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setRight(value->Int32Value());
}
@@ -136,7 +227,13 @@ static Handle<Value> Get_FieldState_bottom(Local<String> property, const Accesso
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getBottom());
}
@@ -144,8 +241,15 @@ static void Set_FieldState_bottom(Local<String> property, Local<Value> value, co
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setBottom(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setBottom(value->Int32Value());
}
@@ -153,7 +257,13 @@ static Handle<Value> Get_FieldState_visible(Local<String> property, const Access
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Boolean::New(tmp->isVisible());
}
@@ -161,8 +271,30 @@ static void Set_FieldState_visible(Local<String> property, Local<Value> value, c
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FieldState *tmp = (FieldState *) wrap->Value();
- tmp->setVisible(value->BooleanValue());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsBoolean())
+ tmp->setVisible(value->BooleanValue());
+}
+
+
+static Handle<Value> Get_FieldState_enabled(Local<String> property, const AccessorInfo &info)
+{
+ Local<Object> self = info.Holder();
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
+ FieldState *tmp = (FieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
+ return Boolean::New(tmp->isEnabled());
}
@@ -177,4 +309,5 @@ void AddFieldStateAcessors(Handle<ObjectTemplate> &templ)
templ->SetAccessor(String::New("right"), Get_FieldState_right, Set_FieldState_right);
templ->SetAccessor(String::New("bottom"), Get_FieldState_bottom, Set_FieldState_bottom);
templ->SetAccessor(String::New("visible"), Get_FieldState_visible, Set_FieldState_visible);
+ templ->SetAccessor(String::New("enabled"), Get_FieldState_enabled, NULL, Handle<Value>(), DEFAULT, ReadOnly);
}
diff --git a/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp b/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp
index 108222e..20f9697 100644
--- a/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp
@@ -18,7 +18,13 @@ static Handle<Value> Get_FontState_face(Local<String> property, const AccessorIn
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return String::New((const V8_TCHAR *) tmp->getFace());
}
@@ -26,9 +32,18 @@ static void Set_FontState_face(Local<String> property, Local<Value> value, const
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FontState *tmp = (FontState *) wrap->Value();
- String::Utf8Value utf8_value(value);
- tmp->setFace(Utf8ToTchar(*utf8_value));
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsString())
+ {
+ String::Utf8Value utf8_value(value);
+ tmp->setFace(Utf8ToTchar(*utf8_value));
+ }
}
@@ -36,7 +51,13 @@ static Handle<Value> Get_FontState_size(Local<String> property, const AccessorIn
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getSize());
}
@@ -44,8 +65,15 @@ static void Set_FontState_size(Local<String> property, Local<Value> value, const
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FontState *tmp = (FontState *) wrap->Value();
- tmp->setSize(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setSize(value->Int32Value());
}
@@ -53,7 +81,13 @@ static Handle<Value> Get_FontState_italic(Local<String> property, const Accessor
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Boolean::New(tmp->isItalic());
}
@@ -61,8 +95,15 @@ static void Set_FontState_italic(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;
+
FontState *tmp = (FontState *) wrap->Value();
- tmp->setItalic(value->BooleanValue());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsBoolean())
+ tmp->setItalic(value->BooleanValue());
}
@@ -70,7 +111,13 @@ static Handle<Value> Get_FontState_bold(Local<String> property, const AccessorIn
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Boolean::New(tmp->isBold());
}
@@ -78,8 +125,15 @@ static void Set_FontState_bold(Local<String> property, Local<Value> value, const
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FontState *tmp = (FontState *) wrap->Value();
- tmp->setBold(value->BooleanValue());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsBoolean())
+ tmp->setBold(value->BooleanValue());
}
@@ -87,7 +141,13 @@ static Handle<Value> Get_FontState_underline(Local<String> property, const Acces
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Boolean::New(tmp->isUnderline());
}
@@ -95,8 +155,15 @@ static void Set_FontState_underline(Local<String> property, Local<Value> value,
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FontState *tmp = (FontState *) wrap->Value();
- tmp->setUnderline(value->BooleanValue());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsBoolean())
+ tmp->setUnderline(value->BooleanValue());
}
@@ -104,7 +171,13 @@ static Handle<Value> Get_FontState_strikeOut(Local<String> property, const Acces
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Boolean::New(tmp->isStrikeOut());
}
@@ -112,8 +185,15 @@ static void Set_FontState_strikeOut(Local<String> property, Local<Value> value,
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FontState *tmp = (FontState *) wrap->Value();
- tmp->setStrikeOut(value->BooleanValue());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsBoolean())
+ tmp->setStrikeOut(value->BooleanValue());
}
@@ -121,7 +201,13 @@ static Handle<Value> Get_FontState_color(Local<String> property, const AccessorI
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
FontState *tmp = (FontState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getColor());
}
@@ -129,8 +215,15 @@ static void Set_FontState_color(Local<String> property, Local<Value> value, cons
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
FontState *tmp = (FontState *) wrap->Value();
- tmp->setColor(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setColor(value->Int32Value());
}
diff --git a/Plugins/skins/SkinLib/IconFieldState.cpp b/Plugins/skins/SkinLib/IconFieldState.cpp
index ad41800..fad1d67 100644
--- a/Plugins/skins/SkinLib/IconFieldState.cpp
+++ b/Plugins/skins/SkinLib/IconFieldState.cpp
@@ -33,5 +33,5 @@ HICON IconFieldState::getIcon() const
bool IconFieldState::isEmpty() const
{
- return getIcon() != NULL;
+ return getIcon() == NULL;
} \ No newline at end of file
diff --git a/Plugins/skins/SkinLib/ImageFieldState.cpp b/Plugins/skins/SkinLib/ImageFieldState.cpp
index 2c74b39..f74d77e 100644
--- a/Plugins/skins/SkinLib/ImageFieldState.cpp
+++ b/Plugins/skins/SkinLib/ImageFieldState.cpp
@@ -33,5 +33,5 @@ HBITMAP ImageFieldState::getImage() const
bool ImageFieldState::isEmpty() const
{
- return getImage() != NULL;
+ return getImage() == NULL;
} \ No newline at end of file
diff --git a/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp b/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp
index 1123a04..7f166c7 100644
--- a/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp
@@ -18,7 +18,13 @@ static Handle<Value> Get_SkinOption_description(Local<String> property, const Ac
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
SkinOption *tmp = (SkinOption *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return String::New((const V8_TCHAR *) tmp->getDescription());
}
@@ -26,9 +32,18 @@ static void Set_SkinOption_description(Local<String> property, Local<Value> valu
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
SkinOption *tmp = (SkinOption *) wrap->Value();
- String::Utf8Value utf8_value(value);
- tmp->setDescription(Utf8ToTchar(*utf8_value));
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsString())
+ {
+ String::Utf8Value utf8_value(value);
+ tmp->setDescription(Utf8ToTchar(*utf8_value));
+ }
}
@@ -36,7 +51,13 @@ static Handle<Value> Get_SkinOption_min(Local<String> property, const AccessorIn
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
SkinOption *tmp = (SkinOption *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getMin());
}
@@ -44,8 +65,15 @@ static void Set_SkinOption_min(Local<String> property, Local<Value> value, const
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
SkinOption *tmp = (SkinOption *) wrap->Value();
- tmp->setMin(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setMin(value->Int32Value());
}
@@ -53,7 +81,13 @@ static Handle<Value> Get_SkinOption_max(Local<String> property, const AccessorIn
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
SkinOption *tmp = (SkinOption *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return Int32::New(tmp->getMax());
}
@@ -61,8 +95,15 @@ static void Set_SkinOption_max(Local<String> property, Local<Value> value, const
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
SkinOption *tmp = (SkinOption *) wrap->Value();
- tmp->setMax(value->Int32Value());
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsInt32())
+ tmp->setMax(value->Int32Value());
}
@@ -70,7 +111,13 @@ static Handle<Value> Get_SkinOption_type(Local<String> property, const AccessorI
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
SkinOption *tmp = (SkinOption *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
switch(tmp->getType())
{
case CHECKBOX: return String::New((const V8_TCHAR *) _T("CHECKBOX"));
@@ -84,15 +131,24 @@ static void Set_SkinOption_type(Local<String> property, Local<Value> value, cons
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
SkinOption *tmp = (SkinOption *) wrap->Value();
- String::Utf8Value utf8_value(value);
- Utf8ToTchar tval(*utf8_value);
- if ( lstrcmpi(_T("CHECKBOX"), tval) == 0)
- tmp->setType(CHECKBOX);
- else if ( lstrcmpi(_T("NUMBER"), tval) == 0)
- tmp->setType(NUMBER);
- else if ( lstrcmpi(_T("TEXT"), tval) == 0)
- tmp->setType(TEXT);
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsString())
+ {
+ String::Utf8Value utf8_value(value);
+ Utf8ToTchar tval(*utf8_value);
+ if ( lstrcmpi(_T("CHECKBOX"), tval) == 0)
+ tmp->setType(CHECKBOX);
+ else if ( lstrcmpi(_T("NUMBER"), tval) == 0)
+ tmp->setType(NUMBER);
+ else if ( lstrcmpi(_T("TEXT"), tval) == 0)
+ tmp->setType(TEXT);
+ }
}
diff --git a/Plugins/skins/SkinLib/TextFieldState.cpp b/Plugins/skins/SkinLib/TextFieldState.cpp
index 1f73268..56e2723 100644
--- a/Plugins/skins/SkinLib/TextFieldState.cpp
+++ b/Plugins/skins/SkinLib/TextFieldState.cpp
@@ -3,7 +3,7 @@
TextFieldState::TextFieldState(DialogState *dialog, TextField *field)
- : FieldState(dialog, field), font(field->getFont(), field->getFontColor()), halign(LEFT)
+ : FieldState(dialog, field), font(field->getFont(), field->getFontColor()), textSet(false), halign(LEFT)
{
}
@@ -46,6 +46,7 @@ const TCHAR * TextFieldState::getText() const
void TextFieldState::setText(const TCHAR *text)
{
this->text = text;
+ textSet = true;
}
FontState * TextFieldState::getFont()
diff --git a/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp b/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp
index 0c3fb3f..73035d9 100644
--- a/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp
+++ b/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp
@@ -18,7 +18,13 @@ static Handle<Value> Get_TextFieldState_text(Local<String> property, const Acces
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
TextFieldState *tmp = (TextFieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
return String::New((const V8_TCHAR *) tmp->getText());
}
@@ -26,9 +32,18 @@ static void Set_TextFieldState_text(Local<String> property, Local<Value> value,
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
TextFieldState *tmp = (TextFieldState *) wrap->Value();
- String::Utf8Value utf8_value(value);
- tmp->setText(Utf8ToTchar(*utf8_value));
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsString())
+ {
+ String::Utf8Value utf8_value(value);
+ tmp->setText(Utf8ToTchar(*utf8_value));
+ }
}
@@ -36,7 +51,13 @@ static Handle<Value> Get_TextFieldState_hAlign(Local<String> property, const Acc
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return Undefined();
+
TextFieldState *tmp = (TextFieldState *) wrap->Value();
+ if (tmp == NULL)
+ return Undefined();
+
switch(tmp->getHAlign())
{
case LEFT: return String::New((const V8_TCHAR *) _T("LEFT"));
@@ -50,15 +71,24 @@ static void Set_TextFieldState_hAlign(Local<String> property, Local<Value> value
{
Local<Object> self = info.Holder();
Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
+ if (wrap.IsEmpty())
+ return;
+
TextFieldState *tmp = (TextFieldState *) wrap->Value();
- String::Utf8Value utf8_value(value);
- Utf8ToTchar tval(*utf8_value);
- if ( lstrcmpi(_T("LEFT"), tval) == 0)
- tmp->setHAlign(LEFT);
- else if ( lstrcmpi(_T("CENTER"), tval) == 0)
- tmp->setHAlign(CENTER);
- else if ( lstrcmpi(_T("RIGHT"), tval) == 0)
- tmp->setHAlign(RIGHT);
+ if (tmp == NULL)
+ return;
+
+ if (!value.IsEmpty() && value->IsString())
+ {
+ String::Utf8Value utf8_value(value);
+ Utf8ToTchar tval(*utf8_value);
+ if ( lstrcmpi(_T("LEFT"), tval) == 0)
+ tmp->setHAlign(LEFT);
+ else if ( lstrcmpi(_T("CENTER"), tval) == 0)
+ tmp->setHAlign(CENTER);
+ else if ( lstrcmpi(_T("RIGHT"), tval) == 0)
+ tmp->setHAlign(RIGHT);
+ }
}
diff --git a/Plugins/skins/SkinLib/V8Script.cpp b/Plugins/skins/SkinLib/V8Script.cpp
index 2df8cad..0d0fc85 100644
--- a/Plugins/skins/SkinLib/V8Script.cpp
+++ b/Plugins/skins/SkinLib/V8Script.cpp
@@ -31,10 +31,17 @@ static Handle<Value> IsEmptyCallback(const Arguments& args)
{
return Boolean::New(true);
}
- else if (arg->IsExternal())
+ else if (arg->IsObject())
{
- Local<External> wrap = Local<External>::Cast(arg);
+ Local<Object> self = Local<Object>::Cast(arg);
+ if (self->InternalFieldCount() < 1)
+ continue;
+
+ Local<External> wrap = Local<External>::Cast(self->GetInternalField(0));
FieldState *field = (FieldState *) wrap->Value();
+ if (field == NULL)
+ continue;
+
if (field->isEmpty())
return Boolean::New(true);
}
@@ -58,6 +65,34 @@ static Handle<Value> RGBCallback(const Arguments& args)
return Int32::New(color);
}
+static Handle<Value> AlertCallback(const Arguments& args)
+{
+ Local<External> wrap = Local<External>::Cast(args.Data());
+ if (wrap.IsEmpty())
+ return Int32::New(-1);
+
+ Dialog *dialog = (Dialog *) wrap->Value();
+ if (dialog == NULL)
+ return Int32::New(-1);
+
+ if (args.Length() < 1)
+ return Int32::New(-1);
+
+ Local<Value> arg = args[0];
+ if (!arg->IsString())
+ return Int32::New(-1);
+
+ Local<String> str = Local<String>::Cast(arg);
+ String::Utf8Value utf8_value(str);
+
+ std::tstring title;
+ title = CharToTchar(dialog->getName());
+ title += _T(" - Skin alert");
+ MessageBox(NULL, Utf8ToTchar(*utf8_value), title.c_str(), MB_OK);
+
+ return Int32::New(0);
+}
+
bool V8Script::compile(const TCHAR *source, Dialog *dlg)
{
dispose();
@@ -68,6 +103,7 @@ bool V8Script::compile(const TCHAR *source, Dialog *dlg)
global->Set(String::New("IsEmpty"), FunctionTemplate::New(&IsEmptyCallback));
global->Set(String::New("RGB"), FunctionTemplate::New(&RGBCallback));
+ global->Set(String::New("alert"), FunctionTemplate::New(&AlertCallback, External::New(dlg)));
global->Set(String::New("NUMBER"), String::New("NUMBER"));
global->Set(String::New("CHECKBOX"), String::New("CHECKBOX"));
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;
}
}
diff --git a/Plugins/skins/SkinLib/utf8_helpers.h b/Plugins/skins/SkinLib/utf8_helpers.h
deleted file mode 100644
index 204cc26..0000000
--- a/Plugins/skins/SkinLib/utf8_helpers.h
+++ /dev/null
@@ -1,124 +0,0 @@
-#ifndef __UTF8_HELPERS_H__
-# define __UTF8_HELPERS_H__
-
-#include <windows.h>
-#include "scope.h"
-
-
-class TcharToUtf8
-{
-public:
- TcharToUtf8(const char *str) : utf8(NULL)
- {
- int size = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
- if (size <= 0)
- throw _T("Could not convert string to WCHAR");
-
- scope<WCHAR *> tmp = (WCHAR *) malloc(size * sizeof(WCHAR));
- if (tmp == NULL)
- throw _T("malloc returned NULL");
-
- MultiByteToWideChar(CP_ACP, 0, str, -1, tmp, size);
-
- init(tmp);
- }
-
-
- TcharToUtf8(const WCHAR *str) : utf8(NULL)
- {
- init(str);
- }
-
-
- ~TcharToUtf8()
- {
- if (utf8 != NULL)
- free(utf8);
- }
-
- operator char *()
- {
- return utf8;
- }
-
-private:
- char *utf8;
-
- void init(const WCHAR *str)
- {
- int size = WideCharToMultiByte(CP_UTF8, 0, str, -1, NULL, 0, NULL, NULL);
- if (size <= 0)
- throw _T("Could not convert string to UTF8");
-
- utf8 = (char *) malloc(size);
- if (utf8 == NULL)
- throw _T("malloc returned NULL");
-
- WideCharToMultiByte(CP_UTF8, 0, str, -1, utf8, size, NULL, NULL);
- }
-};
-
-
-
-class Utf8ToTchar
-{
-public:
- Utf8ToTchar(const char *str) : tchar(NULL)
- {
- if (str == NULL)
- return;
-
- int size = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
- if (size <= 0)
- throw _T("Could not convert string to WCHAR");
-
- scope<WCHAR *> tmp = (WCHAR *) malloc(size * sizeof(WCHAR));
- if (tmp == NULL)
- throw _T("malloc returned NULL");
-
- MultiByteToWideChar(CP_UTF8, 0, str, -1, tmp, size);
-
-#ifdef UNICODE
-
- tchar = tmp.detach();
-
-#else
-
- size = WideCharToMultiByte(CP_ACP, 0, tmp, -1, NULL, 0, NULL, NULL);
- if (size <= 0)
- throw _T("Could not convert string to ACP");
-
- tchar = (TCHAR *) malloc(size);
- if (tchar == NULL)
- throw _T("malloc returned NULL");
-
- WideCharToMultiByte(CP_ACP, 0, tmp, -1, tchar, size, NULL, NULL);
-
-#endif
- }
-
-
- ~Utf8ToTchar()
- {
- if (tchar != NULL)
- free(tchar);
- }
-
- TCHAR *detach()
- {
- TCHAR *ret = tchar;
- tchar = NULL;
- return ret;
- }
-
- operator TCHAR *()
- {
- return tchar;
- }
-
-private:
- TCHAR *tchar;
-};
-
-
-#endif // __UTF8_HELPERS_H__ \ No newline at end of file
diff --git a/Plugins/skins/libs/v8_g.lib b/Plugins/skins/libs/v8_g.lib
new file mode 100644
index 0000000..1a400b5
--- /dev/null
+++ b/Plugins/skins/libs/v8_g.lib
Binary files differ
diff --git a/Plugins/skins/m_skins.h b/Plugins/skins/m_skins.h
index 6894f76..1f967aa 100644
--- a/Plugins/skins/m_skins.h
+++ b/Plugins/skins/m_skins.h
@@ -28,6 +28,8 @@ Boston, MA 02111-1307, USA.
typedef void * SKINNED_DIALOG;
typedef void * SKINNED_FIELD;
+typedef void * SKINNED_DIALOG_STATE;
+typedef void * SKINNED_FIELD_STATE;
#define SKN_HALIGN_LEFT 1
@@ -54,28 +56,46 @@ struct SKIN_INTERFACE
SKINNED_FIELD (*AddImageField)(SKINNED_DIALOG dlg, const char *name, const char *description);
SKINNED_FIELD (*GetField)(SKINNED_DIALOG dlg, const char *name);
void (*SetDialogSize)(SKINNED_DIALOG dlg, int width, int height);
- RECT (*GetBorders)(SKINNED_DIALOG dlg);
// Field methods
- RECT (*GetRect)(SKINNED_FIELD field);
- BOOL (*IsVisible)(SKINNED_FIELD field);
+ void (*SetEnabled)(SKINNED_FIELD field, BOOL enabled);
// TextField methods
void (*SetTextA)(SKINNED_FIELD field, const char *text);
void (*SetTextW)(SKINNED_FIELD field, const WCHAR *text);
- char * (*GetTextA)(SKINNED_FIELD field); // You have to free the result
- WCHAR * (*GetTextW)(SKINNED_FIELD field); // You have to free the result
- HFONT (*GetFont)(SKINNED_FIELD field);
- COLORREF (*GetFontColor)(SKINNED_FIELD field);
- int (*GetHorizontalAlign)(SKINNED_FIELD field); // one of SKN_HALIGN_*
// IconField methods
void (*SetIcon)(SKINNED_FIELD field, HICON hIcon);
- HICON (*GetIcon)(SKINNED_FIELD field);
// ImageField methods
void (*SetImage)(SKINNED_FIELD field, HBITMAP hBmp);
- HBITMAP (*GetImage)(SKINNED_FIELD field);
+
+ // Run the skin and get an state from it
+ SKINNED_DIALOG_STATE (*Run)(SKINNED_DIALOG dialog);
+// void (*DeleteDialogState)(SKINNED_DIALOG_STATE dialog);
+
+ // Dialog State methods
+ SKINNED_FIELD_STATE (*GetFieldState)(SKINNED_DIALOG_STATE dlg, const char *name);
+ RECT (*GetDialogBorders)(SKINNED_DIALOG_STATE dlg);
+
+ // Field State methods
+ RECT (*GetRect)(SKINNED_FIELD_STATE field); // With borders
+ RECT (*GetInsideRect)(SKINNED_FIELD_STATE field); // Without borders
+ RECT (*GetBorders)(SKINNED_FIELD_STATE field);
+ BOOL (*IsVisible)(SKINNED_FIELD_STATE field);
+
+ // TextField State methods
+ char * (*GetTextA)(SKINNED_FIELD_STATE field); // You have to free the result
+ WCHAR * (*GetTextW)(SKINNED_FIELD_STATE field); // You have to free the result
+ HFONT (*GetFont)(SKINNED_FIELD_STATE field);
+ COLORREF (*GetFontColor)(SKINNED_FIELD_STATE field);
+ int (*GetHorizontalAlign)(SKINNED_FIELD_STATE field); // one of SKN_HALIGN_*
+
+ // IconField State methods
+ HICON (*GetIcon)(SKINNED_FIELD_STATE field);
+
+ // ImageField State methods
+ HBITMAP (*GetImage)(SKINNED_FIELD_STATE field);
};
diff --git a/Plugins/skins/m_skins_cpp.h b/Plugins/skins/m_skins_cpp.h
index 540afed..a459c61 100644
--- a/Plugins/skins/m_skins_cpp.h
+++ b/Plugins/skins/m_skins_cpp.h
@@ -26,33 +26,28 @@ Boston, MA 02111-1307, USA.
extern struct SKIN_INTERFACE mski;
-class SkinField
+class SkinFieldState
{
public:
- SkinField(SKINNED_FIELD field) { this->field = field; }
-
+ SkinFieldState(SKINNED_FIELD_STATE field) { this->field = field; }
+
BOOL isValid() { return field != NULL; }
-
+
RECT getRect() { return mski.GetRect(field); }
+ RECT getInsideRect() { return mski.GetInsideRect(field); }
+ RECT getBorders() { return mski.GetBorders(field); }
BOOL isVisible() { return mski.IsVisible(field); }
protected:
- SKINNED_FIELD field;
+ SKINNED_FIELD_STATE field;
};
-class SkinTextField : public SkinField
+class SkinTextFieldState : public SkinFieldState
{
public:
- SkinTextField(SKINNED_FIELD field) : SkinField(field), text(NULL) {}
- ~SkinTextField() { if (text != NULL) mir_free(text); }
+ SkinTextFieldState(SKINNED_FIELD_STATE field) : SkinFieldState(field), text(NULL) {}
+ ~SkinTextFieldState() { if (text != NULL) mir_free(text); }
- void setText(const TCHAR *text) {
-#ifdef UNICODE
- mski.SetTextW(field, text);
-#else
- mski.SetTextA(field, text);
-#endif
- }
const TCHAR * getText() {
if (text != NULL)
mir_free(text);
@@ -73,13 +68,75 @@ private:
TCHAR *text;
};
+class SkinIconFieldState : public SkinFieldState
+{
+public:
+ SkinIconFieldState(SKINNED_FIELD_STATE field) : SkinFieldState(field) {}
+
+ HICON getIcon() { return mski.GetIcon(field); }
+};
+
+class SkinImageFieldState : public SkinFieldState
+{
+public:
+ SkinImageFieldState(SKINNED_FIELD_STATE field) : SkinFieldState(field) {}
+
+ HBITMAP getImage() { return mski.GetImage(field); }
+};
+
+
+class SkinDialogState
+{
+public:
+ SkinDialogState(SKINNED_DIALOG_STATE dlg) { this->dlg = dlg; }
+// ~SkinDialogState() { mski.DeleteDialogState(dlg); dlg = NULL; }
+
+ BOOL isValid() { return dlg != NULL; }
+
+ RECT getBorders() { return mski.GetDialogBorders(dlg); }
+
+ SkinTextFieldState getTextField(const char *name) { return SkinTextFieldState( mski.GetFieldState(dlg, name) ); }
+ SkinIconFieldState getIconField(const char *name) { return SkinIconFieldState( mski.GetFieldState(dlg, name) ); }
+ SkinImageFieldState getImageField(const char *name) { return SkinImageFieldState( mski.GetFieldState(dlg, name) ); }
+
+private:
+ SKINNED_DIALOG_STATE dlg;
+};
+
+
+class SkinField
+{
+public:
+ SkinField(SKINNED_FIELD field) { this->field = field; }
+
+ BOOL isValid() { return field != NULL; }
+
+ void setEnabled(BOOL enabled) { mski.SetEnabled(field, enabled); }
+
+protected:
+ SKINNED_FIELD field;
+};
+
+class SkinTextField : public SkinField
+{
+public:
+ SkinTextField(SKINNED_FIELD field) : SkinField(field) {}
+
+ void setText(const TCHAR *text) {
+#ifdef UNICODE
+ mski.SetTextW(field, text);
+#else
+ mski.SetTextA(field, text);
+#endif
+ }
+};
+
class SkinIconField : public SkinField
{
public:
SkinIconField(SKINNED_FIELD field) : SkinField(field) {}
void setIcon(HICON hIcon) { mski.SetIcon(field, hIcon); }
- HICON getIcon() { return mski.GetIcon(field); }
};
class SkinImageField : public SkinField
@@ -88,29 +145,20 @@ public:
SkinImageField(SKINNED_FIELD field) : SkinField(field) {}
void setImage(HBITMAP hBmp) { mski.SetImage(field, hBmp); }
- HBITMAP getImage() { return mski.GetImage(field); }
};
class SkinDialog
{
public:
- SkinDialog(const char *name, const char *description, const char *module)
- {
- dlg = mski.RegisterDialog(name, description, module);
- }
-
- ~SkinDialog()
- {
- mski.DeleteDialog(dlg);
- dlg = NULL;
- }
+ SkinDialog(const char *name, const char *description, const char *module) { dlg = mski.RegisterDialog(name, description, module); }
+ ~SkinDialog() { mski.DeleteDialog(dlg); dlg = NULL; }
BOOL isValid() { return dlg != NULL; }
void finishedConfiguring() { mski.FinishedConfiguring(dlg); }
+
void setSize(int width, int height) { mski.SetDialogSize(dlg, width, height); }
- RECT getBorders() { return mski.GetBorders(dlg); }
SkinTextField addTextField(const char *name, const char *description) { return SkinTextField( mski.AddTextField(dlg, name, description) ); }
SkinIconField addIconField(const char *name, const char *description) { return SkinIconField( mski.AddIconField(dlg, name, description) ); }
@@ -120,6 +168,8 @@ public:
SkinIconField getIconField(const char *name) { return SkinIconField( mski.GetField(dlg, name) ); }
SkinImageField getImageField(const char *name) { return SkinImageField( mski.GetField(dlg, name) ); }
+ SkinDialogState run() { return SkinDialogState( mski.Run(dlg) ); }
+
private:
SKINNED_DIALOG dlg;
};
diff --git a/Plugins/skins/skins.cpp b/Plugins/skins/skins.cpp
index b41142f..d65f6d8 100644
--- a/Plugins/skins/skins.cpp
+++ b/Plugins/skins/skins.cpp
@@ -63,6 +63,9 @@ std::vector<MirandaSkinnedDialog *> dlgs;
LIST_INTERFACE li;
FI_INTERFACE *fei = NULL;
+struct MM_INTERFACE mmi;
+struct UTF8_INTERFACE utfi;
+
int ModulesLoaded(WPARAM wParam, LPARAM lParam);
int PreShutdown(WPARAM wParam, LPARAM lParam);
@@ -105,18 +108,13 @@ extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
pluginLink = link;
+ CHECK_VERSION("Skins");
+
// TODO Assert results here
- init_mir_malloc();
+ mir_getMMI(&mmi);
+ mir_getUTFI(&utfi);
mir_getLI(&li);
-// {
-// SkinnedDialog dialog("About");
-// dialog.setFilename(_T("C:\\Desenvolvimento\\Miranda\\plugins\\skinlib\\SkinLib\\test.js"));
-// dialog.addField(new TextField(&dialog, "firstLine"));
-// dialog.setSize(Size(20, 10));
-// DialogState *state = dialog.getState();
-// }
-
hHooks.push_back( HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded) );
hHooks.push_back( HookEvent(ME_SYSTEM_PRESHUTDOWN, PreShutdown) );
@@ -284,12 +282,12 @@ BOOL CreatePath(const char *path)
void log(const char *fmt, ...)
{
- va_list va;
- char text[1024];
+ va_list va;
+ char text[1024];
- va_start(va, fmt);
- mir_vsnprintf(text, sizeof(text), fmt, va);
- va_end(va);
+ va_start(va, fmt);
+ mir_vsnprintf(text, sizeof(text), fmt, va);
+ va_end(va);
CallService(MS_NETLIB_LOG, (WPARAM) NULL, (LPARAM) text);
}
@@ -310,6 +308,17 @@ MirandaSkinnedDialog *GetDialog(const char *name)
}
+void OnError(void *param, const TCHAR *err)
+{
+ MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) param;
+
+ std::tstring title;
+ title = CharToTchar(dlg->getName());
+ title += _T("- Error executing skin");
+
+ MessageBox(NULL, err, title.c_str(), MB_OK | MB_ICONERROR);
+}
+
SKINNED_DIALOG Interface_RegisterDialog(const char *name, const char *description, const char *module)
{
if (name == NULL || name[0] == 0 || module == NULL || module[0] == 0)
@@ -331,6 +340,7 @@ SKINNED_DIALOG Interface_RegisterDialog(const char *name, const char *descriptio
return NULL;
MirandaSkinnedDialog *dlg = new MirandaSkinnedDialog(name, module);
+ dlg->setErrorCallback(OnError, dlg);
dlgs.push_back(dlg);
return (SKINNED_DIALOG) dlg;
}
@@ -375,7 +385,7 @@ SKINNED_FIELD Interface_AddTextField(SKINNED_DIALOG aDlg, const char *name, cons
delete field;
return NULL;
}
-
+
return (SKINNED_FIELD) field;
}
@@ -432,52 +442,54 @@ void Interface_SetDialogSize(SKINNED_DIALOG aDlg, int width, int height)
dlg->setSize(Size(width, height));
}
-RECT Interface_GetBorders(SKINNED_DIALOG aDlg)
+void Interface_SetEnabled(SKINNED_FIELD aField, BOOL enabled)
{
- RECT ret = {0};
-
- if (aDlg == NULL)
- return ret;
-
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) aDlg;
- BorderState *borders = dlg->getState()->getBorders();
-
- ret.left = borders->getLeft();
- ret.top = borders->getTop();
- ret.right = borders->getRight();
- ret.bottom = borders->getBottom();
+ if (aField == NULL)
+ return;
- return ret;
+ Field *field = (Field *) aField;
+ field->setEnabled(enabled != 0);
}
-RECT Interface_GetRect(SKINNED_FIELD aField)
+void Interface_SetTextA(SKINNED_FIELD aField, const char *text)
{
if (aField == NULL)
- {
- RECT ret = { 0, 0, 0, 0 };
- return ret;
- }
+ return;
Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
-
- return fieldState->getRect();
+ switch(field->getType())
+ {
+ case SIMPLE_TEXT:
+ ((TextField *) field)->setText(CharToTchar(text));
+ break;
+ case CONTROL_LABEL:
+ case CONTROL_BUTTON:
+ case CONTROL_EDIT:
+ ((ControlField *) field)->setText(CharToTchar(text));
+ break;
+ }
}
-BOOL Interface_IsVisible(SKINNED_FIELD aField)
+void Interface_SetTextW(SKINNED_FIELD aField, const WCHAR *text)
{
if (aField == NULL)
- return FALSE;
+ return;
Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
-
- return fieldState->isVisible();
+ switch(field->getType())
+ {
+ case SIMPLE_TEXT:
+ ((TextField *) field)->setText(WcharToTchar(text));
+ break;
+ case CONTROL_LABEL:
+ case CONTROL_BUTTON:
+ case CONTROL_EDIT:
+ ((ControlField *) field)->setText(WcharToTchar(text));
+ break;
+ }
}
-void Interface_SetTextA(SKINNED_FIELD aField, const char *text)
+void Interface_SetIcon(SKINNED_FIELD aField, HICON hIcon)
{
if (aField == NULL)
return;
@@ -485,18 +497,13 @@ void Interface_SetTextA(SKINNED_FIELD aField, const char *text)
Field *field = (Field *) aField;
switch(field->getType())
{
- case SIMPLE_TEXT:
- ((TextField *) field)->setText(CharToTchar(text));
- break;
- case CONTROL_LABEL:
- case CONTROL_BUTTON:
- case CONTROL_EDIT:
- ((ControlField *) field)->setText(CharToTchar(text));
- break;
+ case SIMPLE_ICON:
+ ((IconField *) field)->setIcon(hIcon);
+ break;
}
}
-void Interface_SetTextW(SKINNED_FIELD aField, const WCHAR *text)
+void Interface_SetImage(SKINNED_FIELD aField, HBITMAP hBmp)
{
if (aField == NULL)
return;
@@ -504,27 +511,123 @@ void Interface_SetTextW(SKINNED_FIELD aField, const WCHAR *text)
Field *field = (Field *) aField;
switch(field->getType())
{
- case SIMPLE_TEXT:
- ((TextField *) field)->setText(WcharToTchar(text));
- break;
- case CONTROL_LABEL:
- case CONTROL_BUTTON:
- case CONTROL_EDIT:
- ((ControlField *) field)->setText(WcharToTchar(text));
- break;
+ case SIMPLE_IMAGE:
+ ((ImageField *) field)->setImage(hBmp);
+ break;
}
}
-char * Interface_GetTextA(SKINNED_FIELD aField)
+SKINNED_DIALOG_STATE Interface_Run(SKINNED_DIALOG aDlg)
{
- if (aField == NULL)
+ if (aDlg == NULL)
return NULL;
- Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
+ MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) aDlg;
+ return (SKINNED_DIALOG_STATE) dlg->getState();
+}
- switch(field->getType())
+/*
+void Interface_DeleteDialogState(SKINNED_DIALOG_STATE aDlg)
+{
+ if (aDlg == NULL)
+ return;
+
+ DialogState * dlg = (DialogState *) aDlg;
+
+ delete dlg;
+}
+*/
+
+SKINNED_FIELD_STATE Interface_GetFieldState(SKINNED_DIALOG_STATE aDlg, const char *name)
+{
+ if (aDlg == NULL || name == NULL || name[0] == 0)
+ return NULL;
+
+ DialogState *dlg = (DialogState *) aDlg;
+
+ return (SKINNED_FIELD_STATE) dlg->getField(name);
+}
+
+RECT Interface_GetDialogBorders(SKINNED_DIALOG_STATE aDlg)
+{
+ RECT ret = {0};
+
+ if (aDlg == NULL)
+ return ret;
+
+ DialogState *state = (DialogState *) aDlg;
+ BorderState *borders = state->getBorders();
+
+ ret.left = borders->getLeft();
+ ret.top = borders->getTop();
+ ret.right = borders->getRight();
+ ret.bottom = borders->getBottom();
+
+ return ret;
+}
+
+RECT Interface_GetRect(SKINNED_FIELD_STATE field)
+{
+ if (field == NULL)
+ {
+ RECT ret = {0};
+ return ret;
+ }
+
+ FieldState *fieldState = (FieldState *) field;
+
+ return fieldState->getRect();
+}
+
+RECT Interface_GetInsideRect(SKINNED_FIELD_STATE field)
+{
+ if (field == NULL)
+ {
+ RECT ret = {0};
+ return ret;
+ }
+
+ FieldState *fieldState = (FieldState *) field;
+
+ return fieldState->getInsideRect();
+}
+
+RECT Interface_GetBorders(SKINNED_FIELD_STATE field)
+{
+ RECT ret = {0};
+
+ if (field == NULL)
+ return ret;
+
+ FieldState *fieldState = (FieldState *) field;
+ BorderState *borders = fieldState->getBorders();
+
+ ret.left = borders->getLeft();
+ ret.top = borders->getTop();
+ ret.right = borders->getRight();
+ ret.bottom = borders->getBottom();
+
+ return ret;
+}
+
+BOOL Interface_IsVisible(SKINNED_FIELD_STATE field)
+{
+ if (field == NULL)
+ return FALSE;
+
+ FieldState *fieldState = (FieldState *) field;
+
+ return fieldState->isVisible();
+}
+
+char * Interface_GetTextA(SKINNED_FIELD_STATE field)
+{
+ if (field == NULL)
+ return NULL;
+
+ FieldState *fieldState = (FieldState *) field;
+
+ switch(fieldState->getField()->getType())
{
case SIMPLE_TEXT:
return TcharToChar(((TextFieldState *) fieldState)->getText()).detach();
@@ -537,16 +640,14 @@ char * Interface_GetTextA(SKINNED_FIELD aField)
return NULL;
}
-WCHAR * Interface_GetTextW(SKINNED_FIELD aField)
+WCHAR * Interface_GetTextW(SKINNED_FIELD_STATE field)
{
- if (aField == NULL)
+ if (field == NULL)
return NULL;
- Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
+ FieldState *fieldState = (FieldState *) field;
- switch(field->getType())
+ switch(fieldState->getField()->getType())
{
case SIMPLE_TEXT:
return TcharToWchar(((TextFieldState *) fieldState)->getText()).detach();
@@ -559,73 +660,70 @@ WCHAR * Interface_GetTextW(SKINNED_FIELD aField)
return NULL;
}
-HFONT Interface_GetFont(SKINNED_FIELD aField)
+HFONT Interface_GetFont(SKINNED_FIELD_STATE field)
{
- if (aField == NULL)
+ if (field == NULL)
return NULL;
- Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
+ FieldState *fieldState = (FieldState *) field;
- switch(field->getType())
+ switch(fieldState->getField()->getType())
{
case SIMPLE_TEXT:
return ((TextFieldState *) fieldState)->getFont()->getHFONT();
case CONTROL_LABEL:
case CONTROL_BUTTON:
case CONTROL_EDIT:
- return ((ControlFieldState *) field)->getFont()->getHFONT();
+ return ((ControlFieldState *) fieldState)->getFont()->getHFONT();
}
return NULL;
}
-COLORREF Interface_GetFontColor(SKINNED_FIELD aField)
+COLORREF Interface_GetFontColor(SKINNED_FIELD_STATE field)
{
- if (aField == NULL)
+ if (field == NULL)
return RGB(0,0,0);
- Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
+ FieldState *fieldState = (FieldState *) field;
- switch(field->getType())
+ switch(fieldState->getField()->getType())
{
case SIMPLE_TEXT:
return ((TextFieldState *) fieldState)->getFont()->getColor();
case CONTROL_LABEL:
case CONTROL_BUTTON:
case CONTROL_EDIT:
- return ((ControlFieldState *) field)->getFont()->getColor();
+ return ((ControlFieldState *) fieldState)->getFont()->getColor();
}
return RGB(0,0,0);
}
-void Interface_SetIcon(SKINNED_FIELD aField, HICON hIcon)
+int Interface_GetHorizontalAlign(SKINNED_FIELD_STATE field)
{
- if (aField == NULL)
- return;
+ if (field == NULL)
+ return SKN_HALIGN_LEFT;
- Field *field = (Field *) aField;
- switch(field->getType())
+ FieldState *fieldState = (FieldState *) field;
+
+ switch(fieldState->getField()->getType())
{
- case SIMPLE_ICON:
- ((IconField *) field)->setIcon(hIcon);
- break;
+ case SIMPLE_TEXT:
+ return ((TextFieldState *) fieldState)->getHAlign();
}
+
+ return SKN_HALIGN_LEFT;
}
-HICON Interface_GetIcon(SKINNED_FIELD aField)
+HICON Interface_GetIcon(SKINNED_FIELD_STATE field)
{
- if (aField == NULL)
+ if (field == NULL)
return NULL;
- Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
- switch(field->getType())
+ FieldState *fieldState = (FieldState *) field;
+
+ switch(fieldState->getField()->getType())
{
case SIMPLE_ICON:
return ((IconFieldState *) fieldState)->getIcon();
@@ -633,29 +731,14 @@ HICON Interface_GetIcon(SKINNED_FIELD aField)
return NULL;
}
-void Interface_SetImage(SKINNED_FIELD aField, HBITMAP hBmp)
-{
- if (aField == NULL)
- return;
-
- Field *field = (Field *) aField;
- switch(field->getType())
- {
- case SIMPLE_IMAGE:
- ((ImageField *) field)->setImage(hBmp);
- break;
- }
-}
-
-HBITMAP Interface_GetImage(SKINNED_FIELD aField)
+HBITMAP Interface_GetImage(SKINNED_FIELD_STATE field)
{
- if (aField == NULL)
+ if (field == NULL)
return NULL;
- Field *field = (Field *) aField;
- MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog();
- FieldState *fieldState = dlg->getState()->getField(field->getName());
- switch(field->getType())
+ FieldState *fieldState = (FieldState *) field;
+
+ switch(fieldState->getField()->getType())
{
case SIMPLE_IMAGE:
return ((ImageFieldState *) fieldState)->getImage();
@@ -682,22 +765,35 @@ static int Service_GetInterface(WPARAM wParam, LPARAM lParam)
mski->AddImageField = &Interface_AddImageField;
mski->GetField = &Interface_GetField;
mski->SetDialogSize = &Interface_SetDialogSize;
- mski->GetBorders = &Interface_GetBorders;
- mski->GetRect = &Interface_GetRect;
- mski->IsVisible = &Interface_IsVisible;
+ mski->SetEnabled = &Interface_SetEnabled;
mski->SetTextA = &Interface_SetTextA;
mski->SetTextW = &Interface_SetTextW;
+
+ mski->SetIcon = &Interface_SetIcon;
+
+ mski->SetImage = &Interface_SetImage;
+
+ mski->Run = &Interface_Run;
+// mski->DeleteDialogState = &Interface_DeleteDialogState;
+
+ mski->GetFieldState = &Interface_GetFieldState;
+ mski->GetDialogBorders = &Interface_GetDialogBorders;
+
+ mski->GetRect = &Interface_GetRect;
+ mski->GetInsideRect = &Interface_GetInsideRect;
+ mski->GetBorders = &Interface_GetBorders;
+ mski->IsVisible = &Interface_IsVisible;
+
mski->GetTextA = &Interface_GetTextA;
mski->GetTextW = &Interface_GetTextW;
mski->GetFont = &Interface_GetFont;
mski->GetFontColor = &Interface_GetFontColor;
+ mski->GetHorizontalAlign = &Interface_GetHorizontalAlign;
- mski->SetIcon = &Interface_SetIcon;
mski->GetIcon = &Interface_GetIcon;
- mski->SetImage = &Interface_SetImage;
mski->GetImage = &Interface_GetImage;
return 0;
diff --git a/Plugins/skins/skins.vcproj b/Plugins/skins/skins.vcproj
index c806754..ab8700d 100644
--- a/Plugins/skins/skins.vcproj
+++ b/Plugins/skins/skins.vcproj
@@ -728,46 +728,6 @@
</FileConfiguration>
</File>
<File
- RelativePath="..\utils\mir_memory.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Unicode Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Unicode Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories=""
- PreprocessorDefinitions=""
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="..\utils\mir_options.cpp"
>
<FileConfiguration