summaryrefslogtreecommitdiff
path: root/coreengine/attribute.c
diff options
context:
space:
mode:
authorlouis <louis.braun@gmx.de>2016-02-06 09:55:15 +0100
committerlouis <louis.braun@gmx.de>2016-02-06 09:55:15 +0100
commitac0e6dbc8d1ea8fd24712dd03fea154cea6a7135 (patch)
tree3f8ab3640f7c0645592c8bbd0d4ce34821816ad7 /coreengine/attribute.c
parent8ef68f8ab82e511ad0df96a910daa1547923633b (diff)
downloadvdr-plugin-skindesigner-ac0e6dbc8d1ea8fd24712dd03fea154cea6a7135.tar.gz
vdr-plugin-skindesigner-ac0e6dbc8d1ea8fd24712dd03fea154cea6a7135.tar.bz2
fixed line breaks
Diffstat (limited to 'coreengine/attribute.c')
-rw-r--r--coreengine/attribute.c956
1 files changed, 478 insertions, 478 deletions
diff --git a/coreengine/attribute.c b/coreengine/attribute.c
index 06ea17e..d92cb9b 100644
--- a/coreengine/attribute.c
+++ b/coreengine/attribute.c
@@ -1,478 +1,478 @@
-#include "attribute.h"
-#include "../config.h"
-
-/***************************************************************************
-* cAttributes
-***************************************************************************/
-cAttributes::cAttributes(int numAttributes) {
- globals = NULL;
- tokenContainer = NULL;
- numAttribs = (int)eCommonAttribs::count + numAttributes;
- attribs = new int[numAttribs];
- for (int i=0; i < numAttribs; i++)
- attribs[i] = ATTR_UNKNOWN;
- attribCtors = new cNumericExpr*[numAttribs];
- for (int i=0; i < numAttribs; i++)
- attribCtors[i] = NULL;
- cond = NULL;
- SetCommonAttributesDefs();
-}
-
-cAttributes::cAttributes(const cAttributes &other) : cAttributes(other.numAttribs - (int)eCommonAttribs::count){
- globals = other.globals;
- for (int i=0; i < numAttribs; i++) {
- attribs[i] = other.attribs[i];
- if (other.attribCtors[i]) {
- attribCtors[i] = new cNumericExpr(*other.attribCtors[i]);
- attribCtors[i]->SetContainer(&container);
- }
- }
- cond = NULL;
- if (other.cond) {
- cond = new cCondition(*other.cond);
- }
- attribIDs = other.attribIDs;
- attribNames = other.attribNames;
-}
-
-cAttributes::~cAttributes(void) {
- delete[] attribs;
- for (int i=0; i < numAttribs; i++) {
- delete attribCtors[i];
- }
- delete[] attribCtors;
- delete cond;
-}
-
-void cAttributes::SetTokenContainer(skindesignerapi::cTokenContainer *tokenContainer) {
- this->tokenContainer = tokenContainer;
-}
-
-void cAttributes::SetTokenContainerDeep(skindesignerapi::cTokenContainer *tokenContainer) {
- this->tokenContainer = tokenContainer;
- if (cond) {
- cond->SetTokenContainer(tokenContainer);
- }
- for (int i=0; i < numAttribs; i++) {
- if (!attribCtors[i])
- continue;
- attribCtors[i]->SetTokenContainer(tokenContainer);
- }
-}
-
-void cAttributes::SetContainer(int x, int y, int width, int height) {
- container.SetX(x);
- container.SetY(y);
- container.SetWidth(width);
- container.SetHeight(height);
-}
-
-void cAttributes::SetX(int x) {
- attribs[(int)eCommonAttribs::x] = x;
-}
-
-void cAttributes::SetY(int y) {
- attribs[(int)eCommonAttribs::y] = y;
-}
-
-void cAttributes::SetWidth(int width) {
- attribs[(int)eCommonAttribs::width] = width;
-}
-
-void cAttributes::SetHeight(int height) {
- attribs[(int)eCommonAttribs::height] = height;
-}
-
-void cAttributes::Cache(void) {
- if (cond) {
- cond->SetGlobals(globals);
- cond->SetTokenContainer(tokenContainer);
- cond->Prepare();
- }
- for (int i=0; i < numAttribs; i++) {
- if (!attribCtors[i])
- continue;
- attribCtors[i]->SetContainer(&container);
- attribCtors[i]->SetGlobals(globals);
- attribCtors[i]->SetTokenContainer(tokenContainer);
- if (attribCtors[i]->CacheStatic()) {
- int val = attribCtors[i]->GetValue();
- attribs[i] = val;
- delete attribCtors[i];
- attribCtors[i] = NULL;
- } else {
- attribCtors[i]->PrepareTokens();
- }
- }
-}
-
-int cAttributes::GetValue(int id) {
- if (!attribCtors[id + (int)eCommonAttribs::count])
- return attribs[(int)id + (int)eCommonAttribs::count];
- return attribCtors[id + (int)eCommonAttribs::count]->Calculate();
-}
-
-
-int cAttributes::X(void) {
- int x = 0;
- if (!attribCtors[(int)eCommonAttribs::x])
- x = attribs[(int)eCommonAttribs::x];
- else
- x = attribCtors[(int)eCommonAttribs::x]->Calculate();
- x += container.X();
- return x;
-}
-
-int cAttributes::Y(void) {
- int y = 0;
- if (!attribCtors[(int)eCommonAttribs::y])
- y = attribs[(int)eCommonAttribs::y];
- else
- y = attribCtors[(int)eCommonAttribs::y]->Calculate();
- y += container.Y();
- return y;
-}
-
-int cAttributes::Width(void) {
- if (!attribCtors[(int)eCommonAttribs::width])
- return attribs[(int)eCommonAttribs::width];
- return attribCtors[(int)eCommonAttribs::width]->Calculate();
-}
-
-int cAttributes::Height(void) {
- if (!attribCtors[(int)eCommonAttribs::height])
- return attribs[(int)eCommonAttribs::height];
- return attribCtors[(int)eCommonAttribs::height]->Calculate();
-}
-
-bool cAttributes::DoExecute(void) {
- if (!cond)
- return true;
- return cond->True();
-}
-
-
-void cAttributes::Debug(void) {
- esyslog("skindesigner: container %d %d %dx%d", container.X(), container.Y(), container.Width(), container.Height());
- for (int i=0; i < numAttribs; i++) {
- if (attribs[i] != ATTR_UNKNOWN) {
- if (i == (int)eCommonAttribs::debug)
- continue;
- const char *attName = "attribute";
- if (i < (int)eCommonAttribs::count)
- attName = CommonAttributeName(i);
- else
- attName = AttributeName(i - (int)eCommonAttribs::count);
- dsyslog("skindesigner: fixed Value %s = %d", attName, attribs[i]);
- }
- if (attribCtors[i]) {
- const char *attName = "attribute";
- if (i < (int)eCommonAttribs::count)
- attName = CommonAttributeName(i);
- else
- attName = AttributeName(i - (int)eCommonAttribs::count);
- dsyslog("skindesigner: %s constructor:", attName);
- attribCtors[i]->Debug();
- }
- }
- if (cond) {
- cond->Debug();
- }
-}
-
-/***************************************************************************
-* Protected Functions
-***************************************************************************/
-int cAttributes::CommonAttributeId(const char *att) {
- if (!strcmp(att, "condition"))
- return ATTR_COND;
- map<string, int>::iterator hit = commonAttribIDs.find(att);
- if (hit != commonAttribIDs.end())
- return hit->second;
- return ATTR_UNKNOWN;
-}
-
-const char *cAttributes::CommonAttributeName(int id) {
- if (id < 0 || id >= (int)eCommonAttribs::count)
- return "";
- map<int, string>::iterator hit = commonAttribNames.find(id);
- if (hit != commonAttribNames.end())
- return hit->second.c_str();
- return "";
-}
-
-int cAttributes::AttributeId(const char *att) {
- int id = CommonAttributeId(att);
- if (id != ATTR_UNKNOWN)
- return id;
- map<string, int>::iterator hit = attribIDs.find(att);
- if (hit != attribIDs.end())
- id = (int)hit->second + (int)eCommonAttribs::count;
- return id;
-}
-
-const char *cAttributes::AttributeName(int id) {
- map<int, string>::iterator hit = attribNames.find(id);
- if (hit != attribNames.end())
- return hit->second.c_str();
- return "";
-}
-
-bool cAttributes::SetCommon(int id, const char *val) {
- if (id == ATTR_COND) {
- cond = new cCondition(val);
- return true;
- }
- if (id == (int)eCommonAttribs::debug) {
- SetBool(id, val);
- return true;
- } else if (id == (int)eCommonAttribs::x || id == (int)eCommonAttribs::width) {
- attribCtors[id] = new cNumericExpr(val);
- return true;
- } else if (id == (int)eCommonAttribs::y || id == (int)eCommonAttribs::height) {
- attribCtors[id] = new cNumericExpr(val);
- attribCtors[id]->SetVertical();
- return true;
- }
- return false;
-}
-
-bool cAttributes::IdEqual(int id, int compId) {
- if (compId + (int)eCommonAttribs::count == id)
- return true;
- return false;
-}
-
-
-void cAttributes::SetBool(int id, const char *val) {
- if (!strcmp(val, "true")) {
- attribs[id] = 1;
- } else {
- attribs[id] = 0;
- }
-}
-
-void cAttributes::SetViewElementMode(int id, const char *val) {
- eViewElementMode mode = eViewElementMode::regular;
- if (!strcmp(val, "light"))
- mode = eViewElementMode::light;
- attribs[id] = (int)mode;
-}
-
-void cAttributes::SetShiftType(int id, const char *val) {
- eShiftType shiftType = eShiftType::none;
- if (!strcmp(val, "left"))
- shiftType = eShiftType::left;
- else if (!strcmp(val, "right"))
- shiftType = eShiftType::right;
- else if (!strcmp(val, "top"))
- shiftType = eShiftType::top;
- else if (!strcmp(val, "bottom"))
- shiftType = eShiftType::bottom;
- else {
- esyslog("skindesigner: unknown shift type \"%s\"", val);
- return;
- }
- attribs[id] = (int)shiftType;
-}
-
-void cAttributes::SetShiftMode(int id, const char *val) {
- eShiftMode shiftMode = eShiftMode::linear;
- if (!strcmp(val, "slowed"))
- shiftMode = eShiftMode::slowedDown;
- attribs[id] = (int)shiftMode;
-}
-
-void cAttributes::SetScrollMode(int id, const char *val) {
- eScrollMode mode = eScrollMode::none;
- if (!strcmp(val, "forthandback"))
- mode = eScrollMode::forthandback;
- else if (!strcmp(val, "carriagereturn"))
- mode = eScrollMode::carriagereturn;
- attribs[id] = (int)mode;
-}
-
-void cAttributes::SetScrollSpeed(int id, const char *val) {
- eScrollSpeed speed = eScrollSpeed::medium;
- if (!strcmp(val, "slow"))
- speed = eScrollSpeed::slow;
- else if (!strcmp(val, "fast"))
- speed = eScrollSpeed::fast;
- else if (!strcmp(val, "medium"))
- speed = eScrollSpeed::medium;
- attribs[id] = (int)speed;
-}
-
-void cAttributes::SetOrientation(int id, const char *val) {
- eOrientation orientation = eOrientation::none;
- if (!strcmp(val, "horizontal"))
- orientation = eOrientation::horizontal;
- else if (!strcmp(val, "vertical"))
- orientation = eOrientation::vertical;
- else if (!strcmp(val, "absolute"))
- orientation = eOrientation::absolute;
- attribs[id] = (int)orientation;
-}
-
-void cAttributes::SetAlign(int id, const char *val) {
- eAlign align = eAlign::left;
- if (!strcmp(val, "center")) {
- align = eAlign::center;
- } else if (!strcmp(val, "right")) {
- align = eAlign::right;
- } else if (!strcmp(val, "top")) {
- align = eAlign::top;
- } else if (!strcmp(val, "bottom")) {
- align = eAlign::bottom;
- } else if (!strcmp(val, "left")) {
- align = eAlign::left;
- }
- attribs[id] = (int)align;
-}
-
-void cAttributes::SetDirection(int id, const char *val) {
- eDirection direction = eDirection::none;
- if (!strcmp(val, "bottomup"))
- direction = eDirection::bottomup;
- else if (!strcmp(val, "topdown"))
- direction = eDirection::topdown;
- attribs[id] = (int)direction;
-}
-
-/***************************************************************************
-* Private Functions
-***************************************************************************/
-void cAttributes::SetCommonAttributesDefs(void) {
- commonAttribIDs.insert(pair<string, int>("x", (int)eCommonAttribs::x));
- commonAttribIDs.insert(pair<string, int>("y", (int)eCommonAttribs::y));
- commonAttribIDs.insert(pair<string, int>("width", (int)eCommonAttribs::width));
- commonAttribIDs.insert(pair<string, int>("height", (int)eCommonAttribs::height));
- commonAttribIDs.insert(pair<string, int>("debug", (int)eCommonAttribs::debug));
- commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::x, "x"));
- commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::y, "y"));
- commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::width, "width"));
- commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::height, "height"));
- commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::debug, "debug"));
-}
-
-/***************************************************************************
-* cFunction
-***************************************************************************/
-cFunction::cFunction(cArea *owner, int numAttributes) : cAttributes(numAttributes) {
- funcType = "Unknown";
- owningArea = owner;
- color = NULL;
- name = NULL;
- scrolling = false;
-}
-
-cFunction::cFunction(const cFunction &other) : cAttributes(other) {
- funcType = other.funcType;
- owningArea = NULL;
- color = NULL;
- if (other.color)
- color = new cColor(*other.color);
- name = NULL;
- if (other.name)
- name = strdup(other.name);
- scrolling = other.scrolling;
-}
-
-cFunction::~cFunction(void) {
- delete color;
- free(name);
-}
-
-void cFunction::SetLoopInfo(cLoopInfo *loopInfo) {
- for (int i=0; i < numAttribs; i++) {
- if (!attribCtors[i])
- continue;
- attribCtors[i]->SetLoopInfo(loopInfo);
- }
- if (cond)
- cond->SetLoopInfo(loopInfo);
-}
-
-void cFunction::Cache(void) {
- if (color) {
- color->SetGlobals(globals);
- color->Cache();
- }
- cAttributes::Cache();
-}
-
-void cFunction::CacheFuncReferences(void) {
- for (int i=0; i < numAttribs; i++) {
- if (!attribCtors[i])
- continue;
- vector<cFactor*> refFactors = attribCtors[i]->GetRefFactors();
- for (vector<cFactor*>::iterator it = refFactors.begin(); it != refFactors.end(); it++) {
- cFactor *f = *it;
- if (!f->funcRefName)
- continue;
- cFunction *fRef = owningArea->GetFunction(f->funcRefName);
- if (fRef) {
- f->funcRef = fRef;
- }
- }
- }
-}
-
-int cFunction::GetX(eAlign align, int x0, int colWidth) {
- int containerWidth = colWidth > 0 ? colWidth : container.Width();
- int x = x0 + X();
- if (align == eAlign::right) {
- x = x0 + containerWidth - FuncWidth();
- } else if (align == eAlign::center) {
- x = x0 + (containerWidth - FuncWidth()) / 2;
- }
- return x;
-}
-
-int cFunction::GetY(eAlign valign, int y0, int rowHeight) {
- int containerHeight = rowHeight > 0 ? rowHeight : container.Height();
- int y = y0 + Y();
- if (valign == eAlign::bottom) {
- y = y0 + containerHeight - FuncHeight();
- } else if (valign == eAlign::center) {
- y = y0 + (containerHeight - FuncHeight()) / 2;
- }
- return y;
-}
-
-void cFunction::Debug(void) {
- esyslog("skindesigner: ---> Function %s", funcType);
- cAttributes::Debug();
- if (name) {
- esyslog("skindesigner: name %s", name);
- }
- if (color) {
- color->Debug();
- }
-}
-
-/***************************************************************************
-* Protected Functions
-***************************************************************************/
-
-void cFunction::SetColor(const char *val) {
- color = new cColor(val);
-}
-
-void cFunction::SetAnimType(int id, const char *val) {
- eAnimType animType = eAnimType::none;
- if (!strcmp(val, "blink"))
- animType = eAnimType::blink;
- else if (!strcmp(val, "animated"))
- animType = eAnimType::animated;
- attribs[id] = (int)animType;
-}
-
-void cFunction::SetOverflow(int id, const char *val) {
- eOverflowType overflowType = eOverflowType::none;
- if (!strcmp(val, "linewrap"))
- overflowType = eOverflowType::wrap;
- else if (!strcmp(val, "cut"))
- overflowType = eOverflowType::cut;
- attribs[id] = (int)overflowType;
-}
+#include "attribute.h"
+#include "../config.h"
+
+/***************************************************************************
+* cAttributes
+***************************************************************************/
+cAttributes::cAttributes(int numAttributes) {
+ globals = NULL;
+ tokenContainer = NULL;
+ numAttribs = (int)eCommonAttribs::count + numAttributes;
+ attribs = new int[numAttribs];
+ for (int i=0; i < numAttribs; i++)
+ attribs[i] = ATTR_UNKNOWN;
+ attribCtors = new cNumericExpr*[numAttribs];
+ for (int i=0; i < numAttribs; i++)
+ attribCtors[i] = NULL;
+ cond = NULL;
+ SetCommonAttributesDefs();
+}
+
+cAttributes::cAttributes(const cAttributes &other) : cAttributes(other.numAttribs - (int)eCommonAttribs::count){
+ globals = other.globals;
+ for (int i=0; i < numAttribs; i++) {
+ attribs[i] = other.attribs[i];
+ if (other.attribCtors[i]) {
+ attribCtors[i] = new cNumericExpr(*other.attribCtors[i]);
+ attribCtors[i]->SetContainer(&container);
+ }
+ }
+ cond = NULL;
+ if (other.cond) {
+ cond = new cCondition(*other.cond);
+ }
+ attribIDs = other.attribIDs;
+ attribNames = other.attribNames;
+}
+
+cAttributes::~cAttributes(void) {
+ delete[] attribs;
+ for (int i=0; i < numAttribs; i++) {
+ delete attribCtors[i];
+ }
+ delete[] attribCtors;
+ delete cond;
+}
+
+void cAttributes::SetTokenContainer(skindesignerapi::cTokenContainer *tokenContainer) {
+ this->tokenContainer = tokenContainer;
+}
+
+void cAttributes::SetTokenContainerDeep(skindesignerapi::cTokenContainer *tokenContainer) {
+ this->tokenContainer = tokenContainer;
+ if (cond) {
+ cond->SetTokenContainer(tokenContainer);
+ }
+ for (int i=0; i < numAttribs; i++) {
+ if (!attribCtors[i])
+ continue;
+ attribCtors[i]->SetTokenContainer(tokenContainer);
+ }
+}
+
+void cAttributes::SetContainer(int x, int y, int width, int height) {
+ container.SetX(x);
+ container.SetY(y);
+ container.SetWidth(width);
+ container.SetHeight(height);
+}
+
+void cAttributes::SetX(int x) {
+ attribs[(int)eCommonAttribs::x] = x;
+}
+
+void cAttributes::SetY(int y) {
+ attribs[(int)eCommonAttribs::y] = y;
+}
+
+void cAttributes::SetWidth(int width) {
+ attribs[(int)eCommonAttribs::width] = width;
+}
+
+void cAttributes::SetHeight(int height) {
+ attribs[(int)eCommonAttribs::height] = height;
+}
+
+void cAttributes::Cache(void) {
+ if (cond) {
+ cond->SetGlobals(globals);
+ cond->SetTokenContainer(tokenContainer);
+ cond->Prepare();
+ }
+ for (int i=0; i < numAttribs; i++) {
+ if (!attribCtors[i])
+ continue;
+ attribCtors[i]->SetContainer(&container);
+ attribCtors[i]->SetGlobals(globals);
+ attribCtors[i]->SetTokenContainer(tokenContainer);
+ if (attribCtors[i]->CacheStatic()) {
+ int val = attribCtors[i]->GetValue();
+ attribs[i] = val;
+ delete attribCtors[i];
+ attribCtors[i] = NULL;
+ } else {
+ attribCtors[i]->PrepareTokens();
+ }
+ }
+}
+
+int cAttributes::GetValue(int id) {
+ if (!attribCtors[id + (int)eCommonAttribs::count])
+ return attribs[(int)id + (int)eCommonAttribs::count];
+ return attribCtors[id + (int)eCommonAttribs::count]->Calculate();
+}
+
+
+int cAttributes::X(void) {
+ int x = 0;
+ if (!attribCtors[(int)eCommonAttribs::x])
+ x = attribs[(int)eCommonAttribs::x];
+ else
+ x = attribCtors[(int)eCommonAttribs::x]->Calculate();
+ x += container.X();
+ return x;
+}
+
+int cAttributes::Y(void) {
+ int y = 0;
+ if (!attribCtors[(int)eCommonAttribs::y])
+ y = attribs[(int)eCommonAttribs::y];
+ else
+ y = attribCtors[(int)eCommonAttribs::y]->Calculate();
+ y += container.Y();
+ return y;
+}
+
+int cAttributes::Width(void) {
+ if (!attribCtors[(int)eCommonAttribs::width])
+ return attribs[(int)eCommonAttribs::width];
+ return attribCtors[(int)eCommonAttribs::width]->Calculate();
+}
+
+int cAttributes::Height(void) {
+ if (!attribCtors[(int)eCommonAttribs::height])
+ return attribs[(int)eCommonAttribs::height];
+ return attribCtors[(int)eCommonAttribs::height]->Calculate();
+}
+
+bool cAttributes::DoExecute(void) {
+ if (!cond)
+ return true;
+ return cond->True();
+}
+
+
+void cAttributes::Debug(void) {
+ esyslog("skindesigner: container %d %d %dx%d", container.X(), container.Y(), container.Width(), container.Height());
+ for (int i=0; i < numAttribs; i++) {
+ if (attribs[i] != ATTR_UNKNOWN) {
+ if (i == (int)eCommonAttribs::debug)
+ continue;
+ const char *attName = "attribute";
+ if (i < (int)eCommonAttribs::count)
+ attName = CommonAttributeName(i);
+ else
+ attName = AttributeName(i - (int)eCommonAttribs::count);
+ dsyslog("skindesigner: fixed Value %s = %d", attName, attribs[i]);
+ }
+ if (attribCtors[i]) {
+ const char *attName = "attribute";
+ if (i < (int)eCommonAttribs::count)
+ attName = CommonAttributeName(i);
+ else
+ attName = AttributeName(i - (int)eCommonAttribs::count);
+ dsyslog("skindesigner: %s constructor:", attName);
+ attribCtors[i]->Debug();
+ }
+ }
+ if (cond) {
+ cond->Debug();
+ }
+}
+
+/***************************************************************************
+* Protected Functions
+***************************************************************************/
+int cAttributes::CommonAttributeId(const char *att) {
+ if (!strcmp(att, "condition"))
+ return ATTR_COND;
+ map<string, int>::iterator hit = commonAttribIDs.find(att);
+ if (hit != commonAttribIDs.end())
+ return hit->second;
+ return ATTR_UNKNOWN;
+}
+
+const char *cAttributes::CommonAttributeName(int id) {
+ if (id < 0 || id >= (int)eCommonAttribs::count)
+ return "";
+ map<int, string>::iterator hit = commonAttribNames.find(id);
+ if (hit != commonAttribNames.end())
+ return hit->second.c_str();
+ return "";
+}
+
+int cAttributes::AttributeId(const char *att) {
+ int id = CommonAttributeId(att);
+ if (id != ATTR_UNKNOWN)
+ return id;
+ map<string, int>::iterator hit = attribIDs.find(att);
+ if (hit != attribIDs.end())
+ id = (int)hit->second + (int)eCommonAttribs::count;
+ return id;
+}
+
+const char *cAttributes::AttributeName(int id) {
+ map<int, string>::iterator hit = attribNames.find(id);
+ if (hit != attribNames.end())
+ return hit->second.c_str();
+ return "";
+}
+
+bool cAttributes::SetCommon(int id, const char *val) {
+ if (id == ATTR_COND) {
+ cond = new cCondition(val);
+ return true;
+ }
+ if (id == (int)eCommonAttribs::debug) {
+ SetBool(id, val);
+ return true;
+ } else if (id == (int)eCommonAttribs::x || id == (int)eCommonAttribs::width) {
+ attribCtors[id] = new cNumericExpr(val);
+ return true;
+ } else if (id == (int)eCommonAttribs::y || id == (int)eCommonAttribs::height) {
+ attribCtors[id] = new cNumericExpr(val);
+ attribCtors[id]->SetVertical();
+ return true;
+ }
+ return false;
+}
+
+bool cAttributes::IdEqual(int id, int compId) {
+ if (compId + (int)eCommonAttribs::count == id)
+ return true;
+ return false;
+}
+
+
+void cAttributes::SetBool(int id, const char *val) {
+ if (!strcmp(val, "true")) {
+ attribs[id] = 1;
+ } else {
+ attribs[id] = 0;
+ }
+}
+
+void cAttributes::SetViewElementMode(int id, const char *val) {
+ eViewElementMode mode = eViewElementMode::regular;
+ if (!strcmp(val, "light"))
+ mode = eViewElementMode::light;
+ attribs[id] = (int)mode;
+}
+
+void cAttributes::SetShiftType(int id, const char *val) {
+ eShiftType shiftType = eShiftType::none;
+ if (!strcmp(val, "left"))
+ shiftType = eShiftType::left;
+ else if (!strcmp(val, "right"))
+ shiftType = eShiftType::right;
+ else if (!strcmp(val, "top"))
+ shiftType = eShiftType::top;
+ else if (!strcmp(val, "bottom"))
+ shiftType = eShiftType::bottom;
+ else {
+ esyslog("skindesigner: unknown shift type \"%s\"", val);
+ return;
+ }
+ attribs[id] = (int)shiftType;
+}
+
+void cAttributes::SetShiftMode(int id, const char *val) {
+ eShiftMode shiftMode = eShiftMode::linear;
+ if (!strcmp(val, "slowed"))
+ shiftMode = eShiftMode::slowedDown;
+ attribs[id] = (int)shiftMode;
+}
+
+void cAttributes::SetScrollMode(int id, const char *val) {
+ eScrollMode mode = eScrollMode::none;
+ if (!strcmp(val, "forthandback"))
+ mode = eScrollMode::forthandback;
+ else if (!strcmp(val, "carriagereturn"))
+ mode = eScrollMode::carriagereturn;
+ attribs[id] = (int)mode;
+}
+
+void cAttributes::SetScrollSpeed(int id, const char *val) {
+ eScrollSpeed speed = eScrollSpeed::medium;
+ if (!strcmp(val, "slow"))
+ speed = eScrollSpeed::slow;
+ else if (!strcmp(val, "fast"))
+ speed = eScrollSpeed::fast;
+ else if (!strcmp(val, "medium"))
+ speed = eScrollSpeed::medium;
+ attribs[id] = (int)speed;
+}
+
+void cAttributes::SetOrientation(int id, const char *val) {
+ eOrientation orientation = eOrientation::none;
+ if (!strcmp(val, "horizontal"))
+ orientation = eOrientation::horizontal;
+ else if (!strcmp(val, "vertical"))
+ orientation = eOrientation::vertical;
+ else if (!strcmp(val, "absolute"))
+ orientation = eOrientation::absolute;
+ attribs[id] = (int)orientation;
+}
+
+void cAttributes::SetAlign(int id, const char *val) {
+ eAlign align = eAlign::left;
+ if (!strcmp(val, "center")) {
+ align = eAlign::center;
+ } else if (!strcmp(val, "right")) {
+ align = eAlign::right;
+ } else if (!strcmp(val, "top")) {
+ align = eAlign::top;
+ } else if (!strcmp(val, "bottom")) {
+ align = eAlign::bottom;
+ } else if (!strcmp(val, "left")) {
+ align = eAlign::left;
+ }
+ attribs[id] = (int)align;
+}
+
+void cAttributes::SetDirection(int id, const char *val) {
+ eDirection direction = eDirection::none;
+ if (!strcmp(val, "bottomup"))
+ direction = eDirection::bottomup;
+ else if (!strcmp(val, "topdown"))
+ direction = eDirection::topdown;
+ attribs[id] = (int)direction;
+}
+
+/***************************************************************************
+* Private Functions
+***************************************************************************/
+void cAttributes::SetCommonAttributesDefs(void) {
+ commonAttribIDs.insert(pair<string, int>("x", (int)eCommonAttribs::x));
+ commonAttribIDs.insert(pair<string, int>("y", (int)eCommonAttribs::y));
+ commonAttribIDs.insert(pair<string, int>("width", (int)eCommonAttribs::width));
+ commonAttribIDs.insert(pair<string, int>("height", (int)eCommonAttribs::height));
+ commonAttribIDs.insert(pair<string, int>("debug", (int)eCommonAttribs::debug));
+ commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::x, "x"));
+ commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::y, "y"));
+ commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::width, "width"));
+ commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::height, "height"));
+ commonAttribNames.insert(pair<int, string>((int)eCommonAttribs::debug, "debug"));
+}
+
+/***************************************************************************
+* cFunction
+***************************************************************************/
+cFunction::cFunction(cArea *owner, int numAttributes) : cAttributes(numAttributes) {
+ funcType = "Unknown";
+ owningArea = owner;
+ color = NULL;
+ name = NULL;
+ scrolling = false;
+}
+
+cFunction::cFunction(const cFunction &other) : cAttributes(other) {
+ funcType = other.funcType;
+ owningArea = NULL;
+ color = NULL;
+ if (other.color)
+ color = new cColor(*other.color);
+ name = NULL;
+ if (other.name)
+ name = strdup(other.name);
+ scrolling = other.scrolling;
+}
+
+cFunction::~cFunction(void) {
+ delete color;
+ free(name);
+}
+
+void cFunction::SetLoopInfo(cLoopInfo *loopInfo) {
+ for (int i=0; i < numAttribs; i++) {
+ if (!attribCtors[i])
+ continue;
+ attribCtors[i]->SetLoopInfo(loopInfo);
+ }
+ if (cond)
+ cond->SetLoopInfo(loopInfo);
+}
+
+void cFunction::Cache(void) {
+ if (color) {
+ color->SetGlobals(globals);
+ color->Cache();
+ }
+ cAttributes::Cache();
+}
+
+void cFunction::CacheFuncReferences(void) {
+ for (int i=0; i < numAttribs; i++) {
+ if (!attribCtors[i])
+ continue;
+ vector<cFactor*> refFactors = attribCtors[i]->GetRefFactors();
+ for (vector<cFactor*>::iterator it = refFactors.begin(); it != refFactors.end(); it++) {
+ cFactor *f = *it;
+ if (!f->funcRefName)
+ continue;
+ cFunction *fRef = owningArea->GetFunction(f->funcRefName);
+ if (fRef) {
+ f->funcRef = fRef;
+ }
+ }
+ }
+}
+
+int cFunction::GetX(eAlign align, int x0, int colWidth) {
+ int containerWidth = colWidth > 0 ? colWidth : container.Width();
+ int x = x0 + X();
+ if (align == eAlign::right) {
+ x = x0 + containerWidth - FuncWidth();
+ } else if (align == eAlign::center) {
+ x = x0 + (containerWidth - FuncWidth()) / 2;
+ }
+ return x;
+}
+
+int cFunction::GetY(eAlign valign, int y0, int rowHeight) {
+ int containerHeight = rowHeight > 0 ? rowHeight : container.Height();
+ int y = y0 + Y();
+ if (valign == eAlign::bottom) {
+ y = y0 + containerHeight - FuncHeight();
+ } else if (valign == eAlign::center) {
+ y = y0 + (containerHeight - FuncHeight()) / 2;
+ }
+ return y;
+}
+
+void cFunction::Debug(void) {
+ esyslog("skindesigner: ---> Function %s", funcType);
+ cAttributes::Debug();
+ if (name) {
+ esyslog("skindesigner: name %s", name);
+ }
+ if (color) {
+ color->Debug();
+ }
+}
+
+/***************************************************************************
+* Protected Functions
+***************************************************************************/
+
+void cFunction::SetColor(const char *val) {
+ color = new cColor(val);
+}
+
+void cFunction::SetAnimType(int id, const char *val) {
+ eAnimType animType = eAnimType::none;
+ if (!strcmp(val, "blink"))
+ animType = eAnimType::blink;
+ else if (!strcmp(val, "animated"))
+ animType = eAnimType::animated;
+ attribs[id] = (int)animType;
+}
+
+void cFunction::SetOverflow(int id, const char *val) {
+ eOverflowType overflowType = eOverflowType::none;
+ if (!strcmp(val, "linewrap"))
+ overflowType = eOverflowType::wrap;
+ else if (!strcmp(val, "cut"))
+ overflowType = eOverflowType::cut;
+ attribs[id] = (int)overflowType;
+}