From 30f9565911217d38cefda3920f55d183d8f6e219 Mon Sep 17 00:00:00 2001 From: pescuma Date: Mon, 5 Jan 2009 02:30:47 +0000 Subject: Some refactors Changed project settings Added align git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@123 c086bb3d-8645-0410-b8da-73a8550f86e7 --- Plugins/skins/SkinLib/ButtonField.cpp | 4 +- Plugins/skins/SkinLib/ButtonField.h | 2 +- Plugins/skins/SkinLib/ButtonFieldState.cpp | 3 +- Plugins/skins/SkinLib/ButtonFieldState.h | 2 +- Plugins/skins/SkinLib/ControlFieldState.cpp | 4 +- Plugins/skins/SkinLib/ControlFieldState.h | 2 +- .../skins/SkinLib/ControlFieldState_v8_wrapper.cpp | 2 +- Plugins/skins/SkinLib/Dialog.cpp | 2 +- Plugins/skins/SkinLib/EditField.cpp | 4 +- Plugins/skins/SkinLib/EditField.h | 2 +- Plugins/skins/SkinLib/EditFieldState.cpp | 3 +- Plugins/skins/SkinLib/EditFieldState.h | 2 +- Plugins/skins/SkinLib/Field.h | 3 +- Plugins/skins/SkinLib/FieldState.cpp | 51 ++++++++++++++++++---- Plugins/skins/SkinLib/FieldState.h | 15 ++++++- Plugins/skins/SkinLib/FieldState.rec | 1 + Plugins/skins/SkinLib/FontState_v8_wrapper.cpp | 2 +- Plugins/skins/SkinLib/IconField.cpp | 4 +- Plugins/skins/SkinLib/IconField.h | 2 +- Plugins/skins/SkinLib/IconFieldState.cpp | 3 +- Plugins/skins/SkinLib/IconFieldState.h | 2 +- Plugins/skins/SkinLib/ImageField.cpp | 4 +- Plugins/skins/SkinLib/ImageField.h | 2 +- Plugins/skins/SkinLib/ImageFieldState.cpp | 3 +- Plugins/skins/SkinLib/ImageFieldState.h | 2 +- Plugins/skins/SkinLib/LabelField.cpp | 4 +- Plugins/skins/SkinLib/LabelField.h | 2 +- Plugins/skins/SkinLib/LabelFieldState.cpp | 3 +- Plugins/skins/SkinLib/LabelFieldState.h | 2 +- Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp | 2 +- Plugins/skins/SkinLib/SkinOptions.cpp | 2 +- Plugins/skins/SkinLib/SkinnedDialog.cpp | 2 +- Plugins/skins/SkinLib/TextField.cpp | 4 +- Plugins/skins/SkinLib/TextField.h | 2 +- Plugins/skins/SkinLib/TextFieldState.cpp | 15 ++++++- Plugins/skins/SkinLib/TextFieldState.h | 8 +++- .../skins/SkinLib/TextFieldState_v8_wrapper.cpp | 33 +++++++++++++- Plugins/skins/SkinLib/V8Script.cpp | 14 +++--- Plugins/skins/SkinLib/V8Wrappers.cpp | 2 +- Plugins/skins/commons.h | 10 ++--- Plugins/skins/m_skins.h | 5 +++ Plugins/skins/m_skins_cpp.h | 1 + Plugins/skins/skins.cpp | 37 ++++++---------- Plugins/skins/skins.vcproj | 36 ++++++--------- 44 files changed, 201 insertions(+), 109 deletions(-) diff --git a/Plugins/skins/SkinLib/ButtonField.cpp b/Plugins/skins/SkinLib/ButtonField.cpp index c96c65f..e6c82ba 100644 --- a/Plugins/skins/SkinLib/ButtonField.cpp +++ b/Plugins/skins/SkinLib/ButtonField.cpp @@ -16,7 +16,7 @@ FieldType ButtonField::getType() const return CONTROL_BUTTON; } -FieldState * ButtonField::createState() +FieldState * ButtonField::createState(DialogState *dialogState) { - return new ButtonFieldState(this); + return new ButtonFieldState(dialogState, this); } \ No newline at end of file diff --git a/Plugins/skins/SkinLib/ButtonField.h b/Plugins/skins/SkinLib/ButtonField.h index 9ad0357..0d7a155 100644 --- a/Plugins/skins/SkinLib/ButtonField.h +++ b/Plugins/skins/SkinLib/ButtonField.h @@ -11,7 +11,7 @@ public: virtual FieldType getType() const; - virtual FieldState * createState(); + virtual FieldState * createState(DialogState *dialogState); }; diff --git a/Plugins/skins/SkinLib/ButtonFieldState.cpp b/Plugins/skins/SkinLib/ButtonFieldState.cpp index da26650..986484b 100644 --- a/Plugins/skins/SkinLib/ButtonFieldState.cpp +++ b/Plugins/skins/SkinLib/ButtonFieldState.cpp @@ -1,7 +1,8 @@ #include "globals.h" #include "ButtonFieldState.h" -ButtonFieldState::ButtonFieldState(ControlField *field) : ControlFieldState(field) +ButtonFieldState::ButtonFieldState(DialogState *dialog, ControlField *field) + : ControlFieldState(dialog, field) { } diff --git a/Plugins/skins/SkinLib/ButtonFieldState.h b/Plugins/skins/SkinLib/ButtonFieldState.h index eabab8a..12b7010 100644 --- a/Plugins/skins/SkinLib/ButtonFieldState.h +++ b/Plugins/skins/SkinLib/ButtonFieldState.h @@ -14,7 +14,7 @@ public: virtual bool isEmpty() const; private: - ButtonFieldState(ControlField *field); + ButtonFieldState(DialogState *dialog, ControlField *field); friend class ButtonField; }; diff --git a/Plugins/skins/SkinLib/ControlFieldState.cpp b/Plugins/skins/SkinLib/ControlFieldState.cpp index d3b45e3..37c4120 100644 --- a/Plugins/skins/SkinLib/ControlFieldState.cpp +++ b/Plugins/skins/SkinLib/ControlFieldState.cpp @@ -2,8 +2,8 @@ #include "ControlFieldState.h" -ControlFieldState::ControlFieldState(ControlField *field) : FieldState(field), textSet(false), - font(field->getFont(), field->getFontColor()) +ControlFieldState::ControlFieldState(DialogState *dialog, ControlField *field) + : FieldState(dialog, field), textSet(false), font(field->getFont(), field->getFontColor()) { } diff --git a/Plugins/skins/SkinLib/ControlFieldState.h b/Plugins/skins/SkinLib/ControlFieldState.h index f3981eb..85186c3 100644 --- a/Plugins/skins/SkinLib/ControlFieldState.h +++ b/Plugins/skins/SkinLib/ControlFieldState.h @@ -22,7 +22,7 @@ public: virtual const FontState * getFont() const; protected: - ControlFieldState(ControlField *field); + ControlFieldState(DialogState *dialog, ControlField *field); virtual Size getTextPreferedSize(unsigned int format) const; diff --git a/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp b/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp index 8a42cf5..a8eee02 100644 --- a/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp +++ b/Plugins/skins/SkinLib/ControlFieldState_v8_wrapper.cpp @@ -2,7 +2,7 @@ #include "ControlFieldState_v8_wrapper.h" #include #include "ControlFieldState.h" -#include "utf8_helpers.h" +#include using namespace v8; diff --git a/Plugins/skins/SkinLib/Dialog.cpp b/Plugins/skins/SkinLib/Dialog.cpp index d07119e..4f13392 100644 --- a/Plugins/skins/SkinLib/Dialog.cpp +++ b/Plugins/skins/SkinLib/Dialog.cpp @@ -89,7 +89,7 @@ DialogState * Dialog::createState() DialogState *ret = new DialogState(this); for(unsigned int i = 0; i < fields.size(); i++) - ret->fields.push_back(fields[i]->createState()); + ret->fields.push_back(fields[i]->createState(ret)); return ret; } diff --git a/Plugins/skins/SkinLib/EditField.cpp b/Plugins/skins/SkinLib/EditField.cpp index 3324885..8eb0d50 100644 --- a/Plugins/skins/SkinLib/EditField.cpp +++ b/Plugins/skins/SkinLib/EditField.cpp @@ -17,7 +17,7 @@ FieldType EditField::getType() const return CONTROL_EDIT; } -FieldState * EditField::createState() +FieldState * EditField::createState(DialogState *dialogState) { - return new EditFieldState(this); + return new EditFieldState(dialogState, this); } \ No newline at end of file diff --git a/Plugins/skins/SkinLib/EditField.h b/Plugins/skins/SkinLib/EditField.h index 66a2ba1..f69f235 100644 --- a/Plugins/skins/SkinLib/EditField.h +++ b/Plugins/skins/SkinLib/EditField.h @@ -12,7 +12,7 @@ public: virtual FieldType getType() const; - virtual FieldState * createState(); + virtual FieldState * createState(DialogState *dialogState); }; diff --git a/Plugins/skins/SkinLib/EditFieldState.cpp b/Plugins/skins/SkinLib/EditFieldState.cpp index 5b7f1f8..e634be7 100644 --- a/Plugins/skins/SkinLib/EditFieldState.cpp +++ b/Plugins/skins/SkinLib/EditFieldState.cpp @@ -2,7 +2,8 @@ #include "EditFieldState.h" -EditFieldState::EditFieldState(EditField *field) : ControlFieldState(field) +EditFieldState::EditFieldState(DialogState *dialog, EditField *field) + : ControlFieldState(dialog, field) { } diff --git a/Plugins/skins/SkinLib/EditFieldState.h b/Plugins/skins/SkinLib/EditFieldState.h index e4abcd5..c2372d5 100644 --- a/Plugins/skins/SkinLib/EditFieldState.h +++ b/Plugins/skins/SkinLib/EditFieldState.h @@ -15,7 +15,7 @@ public: virtual bool isEmpty() const; private: - EditFieldState(EditField *field); + EditFieldState(DialogState *dialog, EditField *field); friend class EditField; }; diff --git a/Plugins/skins/SkinLib/Field.h b/Plugins/skins/SkinLib/Field.h index fb244a4..47d17cb 100644 --- a/Plugins/skins/SkinLib/Field.h +++ b/Plugins/skins/SkinLib/Field.h @@ -20,6 +20,7 @@ enum FieldType }; class Dialog; +class DialogState; class Field; class FieldState; @@ -36,7 +37,7 @@ public: virtual const char * getName() const; virtual FieldType getType() const = 0; - virtual FieldState * createState() = 0; + virtual FieldState * createState(DialogState *dialogState) = 0; virtual void setOnChangeCallback(FieldCallback cb, void *param = NULL); diff --git a/Plugins/skins/SkinLib/FieldState.cpp b/Plugins/skins/SkinLib/FieldState.cpp index c92b057..2509a77 100644 --- a/Plugins/skins/SkinLib/FieldState.cpp +++ b/Plugins/skins/SkinLib/FieldState.cpp @@ -1,5 +1,7 @@ #include "globals.h" #include "FieldState.h" +#include "DialogState.h" +#include "BorderState.h" #define START 1<<0 #define LEN 1<<1 @@ -10,8 +12,9 @@ #define LAST_SET(_FIELD_) (_FIELD_ >> LAST_SHIFT) -FieldState::FieldState(Field *aField) : field(aField), size(-1, -1), pos(0, 0), - usingX(0), usingY(0), visible(true) +FieldState::FieldState(DialogState *aDialog, Field *aField) + : field(aField), dialog(aDialog), size(-1, -1), pos(0, 0), + usingX(0), usingY(0), visible(true) { } @@ -24,6 +27,11 @@ Field * FieldState::getField() const return field; } +DialogState * FieldState::getDialog() const +{ + return dialog; +} + int FieldState::getX() const { return pos.x; @@ -108,7 +116,14 @@ void FieldState::setHeight(int height) bool FieldState::isVisible() const { - return visible; + if (!visible) + return false; + + RECT rc = getRect(); + if (rc.right <= rc.left || rc.bottom <= rc.top) + return false; + + return true; } void FieldState::setVisible(bool visible) @@ -174,8 +189,28 @@ void FieldState::setBottom(int botom) SET(usingY, END); } -//bool FieldState::isEmpty() const -//{ -// Size s = getPreferedSize(); -// return s.x <= 0 || s.y <= 0; -//} \ No newline at end of file +static inline int beetween(int val, int minVal, int maxVal) +{ + return max(minVal, min(maxVal, val)); +} + +RECT FieldState::getRect() const +{ + RECT ret = { 0, 0, 0, 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())); + + 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); + + return ret; +} diff --git a/Plugins/skins/SkinLib/FieldState.h b/Plugins/skins/SkinLib/FieldState.h index 6d44ef6..a3c07b4 100644 --- a/Plugins/skins/SkinLib/FieldState.h +++ b/Plugins/skins/SkinLib/FieldState.h @@ -3,6 +3,15 @@ #include "Field.h" +class DialogState; + +enum HORIZONTAL_ALIGN +{ + LEFT = 1, + RIGHT, + CENTER +}; + class FieldState { @@ -10,6 +19,7 @@ public: virtual ~FieldState(); virtual Field * getField() const; + virtual DialogState * getDialog() const; virtual Size getPreferedSize() const = 0; @@ -42,10 +52,13 @@ public: virtual bool isEmpty() const = 0; + virtual RECT getRect() const; + protected: - FieldState(Field *field); + FieldState(DialogState *dialog, Field *field); Field *field; + DialogState *dialog; Size size; Position pos; diff --git a/Plugins/skins/SkinLib/FieldState.rec b/Plugins/skins/SkinLib/FieldState.rec index 69ab8c1..c1d2f44 100644 --- a/Plugins/skins/SkinLib/FieldState.rec +++ b/Plugins/skins/SkinLib/FieldState.rec @@ -25,6 +25,7 @@ struct ControlFieldState struct TextFieldState { Char text[1024]; + Int32 hAlign | LEFT | CENTER | RIGHT; }; struct FontState diff --git a/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp b/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp index fd0cb5f..108222e 100644 --- a/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp +++ b/Plugins/skins/SkinLib/FontState_v8_wrapper.cpp @@ -2,7 +2,7 @@ #include "FontState_v8_wrapper.h" #include #include "FontState.h" -#include "utf8_helpers.h" +#include using namespace v8; diff --git a/Plugins/skins/SkinLib/IconField.cpp b/Plugins/skins/SkinLib/IconField.cpp index dcd1d2f..4cf1aaf 100644 --- a/Plugins/skins/SkinLib/IconField.cpp +++ b/Plugins/skins/SkinLib/IconField.cpp @@ -32,7 +32,7 @@ void IconField::setIcon(HICON hIcon) fireOnChange(); } -FieldState * IconField::createState() +FieldState * IconField::createState(DialogState *dialogState) { - return new IconFieldState(this); + return new IconFieldState(dialogState, this); } \ No newline at end of file diff --git a/Plugins/skins/SkinLib/IconField.h b/Plugins/skins/SkinLib/IconField.h index efbb128..984b36b 100644 --- a/Plugins/skins/SkinLib/IconField.h +++ b/Plugins/skins/SkinLib/IconField.h @@ -15,7 +15,7 @@ public: virtual HICON getIcon() const; virtual void setIcon(HICON hIcon); - virtual FieldState * createState(); + virtual FieldState * createState(DialogState *dialogState); private: HICON hIcon; diff --git a/Plugins/skins/SkinLib/IconFieldState.cpp b/Plugins/skins/SkinLib/IconFieldState.cpp index 9180f4d..ad41800 100644 --- a/Plugins/skins/SkinLib/IconFieldState.cpp +++ b/Plugins/skins/SkinLib/IconFieldState.cpp @@ -4,7 +4,8 @@ #define ICON_SIZE 16 -IconFieldState::IconFieldState(IconField *field) : FieldState(field) +IconFieldState::IconFieldState(DialogState *dialog, IconField *field) + : FieldState(dialog, field) { } diff --git a/Plugins/skins/SkinLib/IconFieldState.h b/Plugins/skins/SkinLib/IconFieldState.h index 3aeeffd..b69e3fe 100644 --- a/Plugins/skins/SkinLib/IconFieldState.h +++ b/Plugins/skins/SkinLib/IconFieldState.h @@ -19,7 +19,7 @@ public: virtual bool isEmpty() const; private: - IconFieldState(IconField *field); + IconFieldState(DialogState *dialog, IconField *field); friend class IconField; }; diff --git a/Plugins/skins/SkinLib/ImageField.cpp b/Plugins/skins/SkinLib/ImageField.cpp index 01f9d14..c65cf99 100644 --- a/Plugins/skins/SkinLib/ImageField.cpp +++ b/Plugins/skins/SkinLib/ImageField.cpp @@ -32,7 +32,7 @@ void ImageField::setImage(HBITMAP hBmp) fireOnChange(); } -FieldState * ImageField::createState() +FieldState * ImageField::createState(DialogState *dialogState) { - return new ImageFieldState(this); + return new ImageFieldState(dialogState, this); } \ No newline at end of file diff --git a/Plugins/skins/SkinLib/ImageField.h b/Plugins/skins/SkinLib/ImageField.h index ae00b5a..e2f0866 100644 --- a/Plugins/skins/SkinLib/ImageField.h +++ b/Plugins/skins/SkinLib/ImageField.h @@ -14,7 +14,7 @@ public: virtual HBITMAP getImage() const; virtual void setImage(HBITMAP hBmp); - virtual FieldState * createState(); + virtual FieldState * createState(DialogState *dialogState); private: HBITMAP hBmp; diff --git a/Plugins/skins/SkinLib/ImageFieldState.cpp b/Plugins/skins/SkinLib/ImageFieldState.cpp index 6f8556d..2c74b39 100644 --- a/Plugins/skins/SkinLib/ImageFieldState.cpp +++ b/Plugins/skins/SkinLib/ImageFieldState.cpp @@ -2,7 +2,8 @@ #include "ImageFieldState.h" -ImageFieldState::ImageFieldState(ImageField *field) : FieldState(field) +ImageFieldState::ImageFieldState(DialogState *dialog, ImageField *field) + : FieldState(dialog, field) { } diff --git a/Plugins/skins/SkinLib/ImageFieldState.h b/Plugins/skins/SkinLib/ImageFieldState.h index af48816..493c4db 100644 --- a/Plugins/skins/SkinLib/ImageFieldState.h +++ b/Plugins/skins/SkinLib/ImageFieldState.h @@ -19,7 +19,7 @@ public: virtual bool isEmpty() const; private: - ImageFieldState(ImageField *field); + ImageFieldState(DialogState *dialog, ImageField *field); friend class ImageField; }; diff --git a/Plugins/skins/SkinLib/LabelField.cpp b/Plugins/skins/SkinLib/LabelField.cpp index f4b3d79..154ae2f 100644 --- a/Plugins/skins/SkinLib/LabelField.cpp +++ b/Plugins/skins/SkinLib/LabelField.cpp @@ -17,7 +17,7 @@ FieldType LabelField::getType() const return CONTROL_LABEL; } -FieldState * LabelField::createState() +FieldState * LabelField::createState(DialogState *dialogState) { - return new LabelFieldState(this); + return new LabelFieldState(dialogState, this); } \ No newline at end of file diff --git a/Plugins/skins/SkinLib/LabelField.h b/Plugins/skins/SkinLib/LabelField.h index 9b02d33..8c4cb04 100644 --- a/Plugins/skins/SkinLib/LabelField.h +++ b/Plugins/skins/SkinLib/LabelField.h @@ -12,7 +12,7 @@ public: virtual FieldType getType() const; - virtual FieldState * createState(); + virtual FieldState * createState(DialogState *dialogState); }; diff --git a/Plugins/skins/SkinLib/LabelFieldState.cpp b/Plugins/skins/SkinLib/LabelFieldState.cpp index 15b8e66..364611f 100644 --- a/Plugins/skins/SkinLib/LabelFieldState.cpp +++ b/Plugins/skins/SkinLib/LabelFieldState.cpp @@ -2,7 +2,8 @@ #include "LabelFieldState.h" -LabelFieldState::LabelFieldState(LabelField *field) : ControlFieldState(field) +LabelFieldState::LabelFieldState(DialogState *dialog, LabelField *field) + : ControlFieldState(dialog, field) { } diff --git a/Plugins/skins/SkinLib/LabelFieldState.h b/Plugins/skins/SkinLib/LabelFieldState.h index ebad19e..dbbb3b0 100644 --- a/Plugins/skins/SkinLib/LabelFieldState.h +++ b/Plugins/skins/SkinLib/LabelFieldState.h @@ -15,7 +15,7 @@ public: virtual bool isEmpty() const; private: - LabelFieldState(LabelField *field); + LabelFieldState(DialogState *dialog, LabelField *field); friend class LabelField; }; diff --git a/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp b/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp index 61e1c14..1123a04 100644 --- a/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp +++ b/Plugins/skins/SkinLib/SkinOption_v8_wrapper.cpp @@ -2,7 +2,7 @@ #include "SkinOption_v8_wrapper.h" #include #include "SkinOption.h" -#include "utf8_helpers.h" +#include using namespace v8; diff --git a/Plugins/skins/SkinLib/SkinOptions.cpp b/Plugins/skins/SkinLib/SkinOptions.cpp index 9aa8db4..e0e8174 100644 --- a/Plugins/skins/SkinLib/SkinOptions.cpp +++ b/Plugins/skins/SkinLib/SkinOptions.cpp @@ -1,6 +1,6 @@ #include "globals.h" #include "SkinOptions.h" -#include "utf8_helpers.h" +#include SkinOption::SkinOption(const char *aName) diff --git a/Plugins/skins/SkinLib/SkinnedDialog.cpp b/Plugins/skins/SkinLib/SkinnedDialog.cpp index 046fffe..d3abe0c 100644 --- a/Plugins/skins/SkinLib/SkinnedDialog.cpp +++ b/Plugins/skins/SkinLib/SkinnedDialog.cpp @@ -3,7 +3,7 @@ #include #include "V8Script.h" -#include "utf8_helpers.h" +#include #include "SkinOptions.h" diff --git a/Plugins/skins/SkinLib/TextField.cpp b/Plugins/skins/SkinLib/TextField.cpp index d7187a6..d3841b9 100644 --- a/Plugins/skins/SkinLib/TextField.cpp +++ b/Plugins/skins/SkinLib/TextField.cpp @@ -72,7 +72,7 @@ void TextField::setFontColor(COLORREF color) } -FieldState * TextField::createState() +FieldState * TextField::createState(DialogState *dialogState) { - return new TextFieldState(this); + return new TextFieldState(dialogState, this); } diff --git a/Plugins/skins/SkinLib/TextField.h b/Plugins/skins/SkinLib/TextField.h index 708331b..8d2291f 100644 --- a/Plugins/skins/SkinLib/TextField.h +++ b/Plugins/skins/SkinLib/TextField.h @@ -21,7 +21,7 @@ public: virtual COLORREF getFontColor() const; virtual void setFontColor(COLORREF color); - virtual FieldState * createState(); + virtual FieldState * createState(DialogState *dialogState); private: std::tstring text; diff --git a/Plugins/skins/SkinLib/TextFieldState.cpp b/Plugins/skins/SkinLib/TextFieldState.cpp index 340f337..1f73268 100644 --- a/Plugins/skins/SkinLib/TextFieldState.cpp +++ b/Plugins/skins/SkinLib/TextFieldState.cpp @@ -2,7 +2,8 @@ #include "TextFieldState.h" -TextFieldState::TextFieldState(TextField *field) : FieldState(field), font(field->getFont(), field->getFontColor()) +TextFieldState::TextFieldState(DialogState *dialog, TextField *field) + : FieldState(dialog, field), font(field->getFont(), field->getFontColor()), halign(LEFT) { } @@ -57,7 +58,17 @@ const FontState * TextFieldState::getFont() const return &font; } +HORIZONTAL_ALIGN TextFieldState::getHAlign() const +{ + return halign; +} + +void TextFieldState::setHAlign(HORIZONTAL_ALIGN halign) +{ + this->halign = halign; +} + bool TextFieldState::isEmpty() const { return lstrlen(getText()) <= 0; -} \ No newline at end of file +} diff --git a/Plugins/skins/SkinLib/TextFieldState.h b/Plugins/skins/SkinLib/TextFieldState.h index 7e3fca1..c15284b 100644 --- a/Plugins/skins/SkinLib/TextFieldState.h +++ b/Plugins/skins/SkinLib/TextFieldState.h @@ -21,15 +21,19 @@ public: virtual FontState * getFont(); virtual const FontState * getFont() const; + virtual HORIZONTAL_ALIGN getHAlign() const; + virtual void setHAlign(HORIZONTAL_ALIGN halign); + virtual bool isEmpty() const; private: - TextFieldState(TextField *field); + TextFieldState(DialogState *dialog, TextField *field); FontState font; - BOOL textSet; std::tstring text; + HORIZONTAL_ALIGN halign; + friend class TextField; }; diff --git a/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp b/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp index d8698be..0c3fb3f 100644 --- a/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp +++ b/Plugins/skins/SkinLib/TextFieldState_v8_wrapper.cpp @@ -2,7 +2,7 @@ #include "TextFieldState_v8_wrapper.h" #include #include "TextFieldState.h" -#include "utf8_helpers.h" +#include using namespace v8; @@ -32,7 +32,38 @@ static void Set_TextFieldState_text(Local property, Local value, } +static Handle Get_TextFieldState_hAlign(Local property, const AccessorInfo &info) +{ + Local self = info.Holder(); + Local wrap = Local::Cast(self->GetInternalField(0)); + TextFieldState *tmp = (TextFieldState *) wrap->Value(); + switch(tmp->getHAlign()) + { + case LEFT: return String::New((const V8_TCHAR *) _T("LEFT")); + case CENTER: return String::New((const V8_TCHAR *) _T("CENTER")); + case RIGHT: return String::New((const V8_TCHAR *) _T("RIGHT")); + } + return Undefined(); +} + +static void Set_TextFieldState_hAlign(Local property, Local value, const AccessorInfo& info) +{ + Local self = info.Holder(); + Local wrap = Local::Cast(self->GetInternalField(0)); + 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); +} + + void AddTextFieldStateAcessors(Handle &templ) { templ->SetAccessor(String::New("text"), Get_TextFieldState_text, Set_TextFieldState_text); + templ->SetAccessor(String::New("hAlign"), Get_TextFieldState_hAlign, Set_TextFieldState_hAlign); } diff --git a/Plugins/skins/SkinLib/V8Script.cpp b/Plugins/skins/SkinLib/V8Script.cpp index b18bdf2..2df8cad 100644 --- a/Plugins/skins/SkinLib/V8Script.cpp +++ b/Plugins/skins/SkinLib/V8Script.cpp @@ -1,7 +1,7 @@ #include "globals.h" #include "V8Script.h" -#include "utf8_helpers.h" +#include using namespace v8; @@ -65,9 +65,17 @@ bool V8Script::compile(const TCHAR *source, Dialog *dlg) HandleScope handle_scope; Handle global = ObjectTemplate::New(); + global->Set(String::New("IsEmpty"), FunctionTemplate::New(&IsEmptyCallback)); global->Set(String::New("RGB"), FunctionTemplate::New(&RGBCallback)); + global->Set(String::New("NUMBER"), String::New("NUMBER")); + global->Set(String::New("CHECKBOX"), String::New("CHECKBOX")); + global->Set(String::New("TEXT"), String::New("TEXT")); + global->Set(String::New("LEFT"), String::New("LEFT")); + global->Set(String::New("CENTER"), String::New("CENTER")); + global->Set(String::New("RIGHT"), String::New("RIGHT")); + context = Context::New(NULL, global); Context::Scope context_scope(context); @@ -172,10 +180,6 @@ std::pair V8Script::configure(Dialog *dlg) wrappers.fillWrapper(get(global, field->getField()->getName()), field); } - global->Set(String::New("NUMBER"), String::New("NUMBER")); - global->Set(String::New("CHECKBOX"), String::New("CHECKBOX")); - global->Set(String::New("TEXT"), String::New("TEXT")); - TryCatch try_catch; Handle result = configure->Call(global, 0, NULL); if (result.IsEmpty()) diff --git a/Plugins/skins/SkinLib/V8Wrappers.cpp b/Plugins/skins/SkinLib/V8Wrappers.cpp index 79d96bc..043345c 100644 --- a/Plugins/skins/SkinLib/V8Wrappers.cpp +++ b/Plugins/skins/SkinLib/V8Wrappers.cpp @@ -8,7 +8,7 @@ #include "DialogState_v8_wrapper.h" #include "BorderState_v8_wrapper.h" #include "SkinOption_v8_wrapper.h" -#include "utf8_helpers.h" +#include #define OPTION (USER_DEFINED-5) diff --git a/Plugins/skins/commons.h b/Plugins/skins/commons.h index 3a28e47..10125f2 100644 --- a/Plugins/skins/commons.h +++ b/Plugins/skins/commons.h @@ -62,11 +62,11 @@ using namespace std; #include #include -#include "../utils/mir_memory.h" -#include "../utils/mir_options.h" -#include "../utils/mir_icons.h" -#include "../utils/mir_buffer.h" -#include "../utils/utf8_helpers.h" +#include +#include +#include +#include +#include #include "resource.h" #include "m_skins.h" diff --git a/Plugins/skins/m_skins.h b/Plugins/skins/m_skins.h index 5758588..6894f76 100644 --- a/Plugins/skins/m_skins.h +++ b/Plugins/skins/m_skins.h @@ -30,6 +30,10 @@ typedef void * SKINNED_DIALOG; typedef void * SKINNED_FIELD; +#define SKN_HALIGN_LEFT 1 +#define SKN_HALIGN_CENTER 2 +#define SKN_HALIGN_RIGHT 3 + /// Some common parameters: /// - name : internal name and name used inside skin file /// - description : name shown to the user @@ -63,6 +67,7 @@ struct SKIN_INTERFACE 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); diff --git a/Plugins/skins/m_skins_cpp.h b/Plugins/skins/m_skins_cpp.h index 7a28a31..540afed 100644 --- a/Plugins/skins/m_skins_cpp.h +++ b/Plugins/skins/m_skins_cpp.h @@ -67,6 +67,7 @@ public: HFONT getFont() { return mski.GetFont(field); } COLORREF getFontColor() { return mski.GetFontColor(field); } + int getHorizontalAlign() { return mski.GetHorizontalAlign(field); } // one of SKN_HALIGN_* private: TCHAR *text; diff --git a/Plugins/skins/skins.cpp b/Plugins/skins/skins.cpp index dca8ca0..b41142f 100644 --- a/Plugins/skins/skins.cpp +++ b/Plugins/skins/skins.cpp @@ -109,6 +109,14 @@ extern "C" int __declspec(dllexport) Load(PLUGINLINK *link) init_mir_malloc(); 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) ); @@ -442,38 +450,19 @@ RECT Interface_GetBorders(SKINNED_DIALOG aDlg) return ret; } -static inline int beetween(int val, int minVal, int maxVal) -{ - return max(minVal, min(maxVal, val)); -} - RECT Interface_GetRect(SKINNED_FIELD aField) { - RECT ret = { 0, 0, 0, 0 }; - if (aField == NULL) + { + RECT ret = { 0, 0, 0, 0 }; return ret; + } Field *field = (Field *) aField; MirandaSkinnedDialog *dlg = (MirandaSkinnedDialog *) field->getDialog(); - DialogState *dlgState = dlg->getState(); - FieldState *fieldState = dlgState->getField(field->getName()); - - if (!fieldState->isVisible()) - return ret; - - BorderState *borders = dlgState->getBorders(); - int left = max(0, borders->getLeft()); - int right = max(left, min(dlgState->getWidth(), dlgState->getWidth() - borders->getRight())); - int top = max(0, borders->getTop()); - int bottom = max(top, min(dlgState->getHeight(), dlgState->getHeight() - borders->getBottom())); - - ret.left = beetween(fieldState->getLeft() + borders->getLeft(), left, right); - ret.right = beetween(fieldState->getRight(), left, right); - ret.top = beetween(fieldState->getTop() + borders->getTop(), top, bottom); - ret.bottom = beetween(fieldState->getBottom(), top, bottom); + FieldState *fieldState = dlg->getState()->getField(field->getName()); - return ret; + return fieldState->getRect(); } BOOL Interface_IsVisible(SKINNED_FIELD aField) diff --git a/Plugins/skins/skins.vcproj b/Plugins/skins/skins.vcproj index 78d7b66..c806754 100644 --- a/Plugins/skins/skins.vcproj +++ b/Plugins/skins/skins.vcproj @@ -4,6 +4,7 @@ Version="9,00" Name="skins" ProjectGUID="{F5F5EA6E-F648-4174-8419-D6CA41DF0A11}" + RootNamespace="skins" TargetFrameworkVersion="0" > @@ -48,7 +49,7 @@ @@ -296,8 +293,6 @@ /> - - -- cgit v1.2.3