mirror of
https://projects.vdr-developer.org/git/vdr-plugin-skindesigner.git
synced 2023-10-19 17:58:31 +02:00
138 lines
3.0 KiB
C
138 lines
3.0 KiB
C
|
#ifndef __TEMPLATEPARAMETER_H
|
||
|
#define __TEMPLATEPARAMETER_H
|
||
|
|
||
|
#include <iostream>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <algorithm>
|
||
|
#include <math.h>
|
||
|
#include <string>
|
||
|
#include <vector>
|
||
|
#include <map>
|
||
|
#include <set>
|
||
|
#include <sstream>
|
||
|
|
||
|
#include "globals.h"
|
||
|
|
||
|
using namespace std;
|
||
|
|
||
|
enum eAlign {
|
||
|
alLeft,
|
||
|
alCenter,
|
||
|
alRight,
|
||
|
alTop,
|
||
|
alBottom
|
||
|
};
|
||
|
|
||
|
enum eScrollMode {
|
||
|
smNone,
|
||
|
smCarriageReturn,
|
||
|
smForthAndBack
|
||
|
};
|
||
|
|
||
|
enum eScrollSpeed {
|
||
|
ssNone,
|
||
|
ssSlow,
|
||
|
ssMedium,
|
||
|
ssFast
|
||
|
};
|
||
|
|
||
|
enum eOrientation {
|
||
|
orNone,
|
||
|
orHorizontal,
|
||
|
orVertical,
|
||
|
orAbsolute
|
||
|
};
|
||
|
|
||
|
// --- cNumericParameter -------------------------------------------------------------
|
||
|
|
||
|
class cNumericParameter {
|
||
|
private:
|
||
|
cGlobals *globals;
|
||
|
string value;
|
||
|
bool isValid;
|
||
|
int width;
|
||
|
int height;
|
||
|
int columnWidth;
|
||
|
int rowHeight;
|
||
|
bool hor;
|
||
|
int defaultValue;
|
||
|
bool IsNumber(const string& s);
|
||
|
bool CheckPercentValue(int &val);
|
||
|
bool CheckExpression(int &val, string &parsedVal);
|
||
|
bool ValidNumericExpression(string &parsedValue);
|
||
|
int EvaluateTheExpression(char* expr);
|
||
|
double ParseAtom(char*& expr);
|
||
|
double ParseFactors(char*& expr);
|
||
|
double ParseSummands(char*& expr);
|
||
|
public:
|
||
|
cNumericParameter(string value);
|
||
|
virtual ~cNumericParameter(void);
|
||
|
void SetGlobals(cGlobals *globals) { this->globals = globals; };
|
||
|
void SetAreaSize(int w, int h);
|
||
|
void SetLoopContainer(int columnWidth, int rowHeight) { this->columnWidth = columnWidth; this->rowHeight = rowHeight; };
|
||
|
void SetDefault(int def) { defaultValue = def; };
|
||
|
void SetHorizontal(void) { hor = true; };
|
||
|
void SetVertical(void) { hor = false; };
|
||
|
int Parse(string &parsedValue);
|
||
|
bool Valid(void) { return isValid; };
|
||
|
};
|
||
|
|
||
|
// --- cTextToken -------------------------------------------------------------
|
||
|
|
||
|
enum eTextTokenType {
|
||
|
ttConstString,
|
||
|
ttToken,
|
||
|
ttConditionalToken
|
||
|
};
|
||
|
|
||
|
class cTextToken {
|
||
|
public:
|
||
|
eTextTokenType type;
|
||
|
string value;
|
||
|
vector<cTextToken> subTokens;
|
||
|
};
|
||
|
|
||
|
// --- cConditionalParameter -------------------------------------------------------------
|
||
|
|
||
|
enum eCondParameterType {
|
||
|
cpAnd,
|
||
|
cpOr,
|
||
|
cpNone
|
||
|
};
|
||
|
|
||
|
enum eCondType {
|
||
|
ctLower,
|
||
|
ctGreater,
|
||
|
ctEquals,
|
||
|
ctBool,
|
||
|
ctStringSet,
|
||
|
ctNone
|
||
|
};
|
||
|
|
||
|
struct sCondition {
|
||
|
string tokenName;
|
||
|
bool isNegated;
|
||
|
eCondType type;
|
||
|
int compareValue;
|
||
|
};
|
||
|
|
||
|
class cConditionalParameter {
|
||
|
private:
|
||
|
cGlobals *globals;
|
||
|
bool isTrue;
|
||
|
string value;
|
||
|
eCondParameterType type;
|
||
|
vector<sCondition> conditions;
|
||
|
void TokenizeValue(string sep);
|
||
|
void InsertCondition(string cond);
|
||
|
int EvaluateParameter(string token, map < string, int > *intTokens, map < string, string > *stringTokens);
|
||
|
public:
|
||
|
cConditionalParameter(cGlobals *globals, string value);
|
||
|
virtual ~cConditionalParameter(void);
|
||
|
void Tokenize(void);
|
||
|
bool Evaluate(map < string, int > *intTokens, map < string, string > *stringTokens);
|
||
|
bool IsTrue(void) { return isTrue; };
|
||
|
void Debug(void);
|
||
|
};
|
||
|
#endif //__TEMPLATEPARAMETER_H
|