summaryrefslogtreecommitdiff
path: root/Plugins/skins/MirandaSkinnedDialog.cpp
diff options
context:
space:
mode:
authorpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-01-03 05:12:30 +0000
committerpescuma <pescuma@c086bb3d-8645-0410-b8da-73a8550f86e7>2009-01-03 05:12:30 +0000
commit05f6cf3f7788f8bfe5ee589a9f27a89217c67989 (patch)
treea39f988ad4391eb4cb4d62c5643c01cae5af13e3 /Plugins/skins/MirandaSkinnedDialog.cpp
parentbb6784e0e1a385cdd20b41d3254093e89a210332 (diff)
skins: It's ALIVE!
git-svn-id: http://pescuma.googlecode.com/svn/trunk/Miranda@121 c086bb3d-8645-0410-b8da-73a8550f86e7
Diffstat (limited to 'Plugins/skins/MirandaSkinnedDialog.cpp')
-rw-r--r--Plugins/skins/MirandaSkinnedDialog.cpp205
1 files changed, 205 insertions, 0 deletions
diff --git a/Plugins/skins/MirandaSkinnedDialog.cpp b/Plugins/skins/MirandaSkinnedDialog.cpp
new file mode 100644
index 0000000..2ec1788
--- /dev/null
+++ b/Plugins/skins/MirandaSkinnedDialog.cpp
@@ -0,0 +1,205 @@
+#include "commons.h"
+#include "MirandaSkinnedDialog.h"
+
+#define SETTING_NAME_SIZE 256
+
+
+MirandaSkinnedDialog::MirandaSkinnedDialog(const char *name, const char *aModule)
+ : SkinnedDialog(name), module(aModule)
+{
+}
+
+MirandaSkinnedDialog::~MirandaSkinnedDialog()
+{
+}
+
+const char * MirandaSkinnedDialog::getModule() const
+{
+ return module.c_str();
+}
+
+const TCHAR * MirandaSkinnedDialog::getSkinName()
+{
+ getSettting("Skin", _T(DEFAULT_SKIN_NAME), skinName);
+
+ return skinName.c_str();
+}
+
+bool MirandaSkinnedDialog::finishedConfiguring()
+{
+ SkinOptions * opts = getOpts();
+ if (getDefaultState() == NULL || opts == NULL)
+ return false;
+
+ for(unsigned int i = 0; i < getFieldCount(); ++i)
+ {
+ MirandaField *field = dynamic_cast<MirandaField *>(getField(i));
+ field->configure();
+ }
+
+ for(unsigned int i = 0; i < opts->getNumOptions(); ++i)
+ {
+ SkinOption *opt = opts->getOption(i);
+ loadFromDB(opt);
+ opt->setOnChangeCallback(&staticOnOptionChange, this);
+ }
+
+ return true;
+}
+
+void MirandaSkinnedDialog::updateFilename()
+{
+ std::tstring filename;
+ filename = skinsFolder;
+ filename += _T("\\");
+ filename += getSkinName();
+ filename += _T("\\");
+ filename += Utf8ToTchar(getName());
+ filename += _T(".");
+ filename += _T(SKIN_EXTENSION);
+
+ setFilename(filename.c_str());
+}
+
+void MirandaSkinnedDialog::loadFromDB(SkinOption *opt)
+{
+ switch(opt->getType())
+ {
+ case CHECKBOX:
+ {
+ opt->setValueCheckbox(getSettting(opt->getName(), opt->getValueCheckbox()));
+ break;
+ }
+ case NUMBER:
+ {
+ opt->setValueNumber(getSettting(opt->getName(), opt->getValueNumber()));
+ break;
+ }
+ case TEXT:
+ {
+ std::tstring tmp;
+ getSettting(opt->getName(), opt->getValueText(), tmp);
+ opt->setValueText(tmp.c_str());
+ break;
+ }
+ }
+}
+
+void MirandaSkinnedDialog::storeToDB(const SkinOption *opt)
+{
+ switch(opt->getType())
+ {
+ case CHECKBOX:
+ {
+ setSettting(opt->getName(), opt->getValueCheckbox());
+ break;
+ }
+ case NUMBER:
+ {
+ setSettting(opt->getName(), opt->getValueNumber());
+ break;
+ }
+ case TEXT:
+ {
+ setSettting(opt->getName(), opt->getValueText());
+ break;
+ }
+ }
+}
+
+bool MirandaSkinnedDialog::getSettting(const char *name, bool defVal)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ return DBGetContactSettingByte(NULL, getModule(), setting, defVal ? 1 : 0) != 0;
+}
+
+void MirandaSkinnedDialog::setSettting(const char *name, bool val)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ DBWriteContactSettingByte(NULL, getModule(), setting, val ? 1 : 0);
+}
+
+int MirandaSkinnedDialog::getSettting(const char *name, int defVal)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ return DBGetContactSettingDword(NULL, getModule(), setting, defVal);
+}
+
+void MirandaSkinnedDialog::setSettting(const char *name, int val)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ DBWriteContactSettingDword(NULL, getModule(), setting, val);
+}
+
+void MirandaSkinnedDialog::getSettting(const char *name, const WCHAR *defVal, std::wstring &ret)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ DBVARIANT dbv = {0};
+ if (DBGetContactSettingWString(NULL, getModule(), setting, &dbv))
+ {
+ ret = defVal;
+ return;
+ }
+
+ ret = dbv.pwszVal;
+ DBFreeVariant(&dbv);
+}
+
+void MirandaSkinnedDialog::setSettting(const char *name, const WCHAR *val)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ DBWriteContactSettingWString(NULL, getModule(), setting, val);
+}
+
+void MirandaSkinnedDialog::getSettting(const char *name, const char *defVal, std::string &ret)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ DBVARIANT dbv = {0};
+ if (DBGetContactSettingString(NULL, getModule(), setting, &dbv))
+ {
+ ret = defVal;
+ return;
+ }
+
+ ret = dbv.pszVal;
+ DBFreeVariant(&dbv);
+}
+
+void MirandaSkinnedDialog::setSettting(const char *name, const char *val)
+{
+ char setting[SETTING_NAME_SIZE];
+ getSettingName(setting, name);
+
+ DBWriteContactSettingString(NULL, getModule(), setting, val);
+}
+
+void MirandaSkinnedDialog::getSettingName(char *setting, const char * name)
+{
+ _snprintf(setting, SETTING_NAME_SIZE, "%s_%s", getName(), name);
+}
+
+void MirandaSkinnedDialog::onOptionChange(const SkinOption *opt)
+{
+ storeToDB(opt);
+}
+
+void MirandaSkinnedDialog::staticOnOptionChange(void *param, const SkinOption *opt)
+{
+ _ASSERT(param != NULL);
+
+ ((MirandaSkinnedDialog *) param)->onOptionChange(opt);
+}