208 lines
16 KiB
MQL5
208 lines
16 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| ProjectName |
|
|
//| Copyright 2020, CompanyName |
|
|
//| http://www.companyname.net |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef CTRL_PANEL_BASE_MQH
|
|
#define CTRL_PANEL_BASE_MQH
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
class CCtrlPanelBase
|
|
{
|
|
public:
|
|
CCtrlPanelBase();
|
|
CCtrlPanelBase(const string param);
|
|
|
|
//--- Инициализация/деинициализация
|
|
virtual bool OnInitEvent(void);
|
|
virtual void OnDeinitEvent(const int reason) {};
|
|
//--- Таймер
|
|
virtual void OnTimerEvent(void) {};
|
|
//--- Обработчик тиков
|
|
virtual void OnTickCalculateEvent() {};
|
|
virtual void DrawPanelInfo() {};
|
|
bool IsReadyForUpdate() {return _readyForUpdate;};
|
|
virtual bool IsEnableTickCalculateEvent() {return (!kernel_account::is_testing()||kernel_account::is_visual_mode());}; // Разрешает или запрещает обработку на каждом тике.
|
|
|
|
//--- Обработчик события графика
|
|
virtual void OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) {};
|
|
|
|
|
|
public:
|
|
string GetParamString(string name,string def_value);
|
|
int GetParamInt(string name,int def_value);
|
|
double GetParamDouble(string name,double def_value);
|
|
bool GetParamBool(string name,bool def_value);
|
|
color GetParamColor(string name,color def_value);
|
|
|
|
string PrepStr(const string value, const string postfix="",const string prefix="",const string value_for_non="",const string null_value="");
|
|
|
|
protected:
|
|
void ParsingParam(const string param);
|
|
|
|
protected:
|
|
bool _readyForUpdate;
|
|
map<string,string> _param;
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
CCtrlPanelBase::CCtrlPanelBase() : _readyForUpdate(false)
|
|
{
|
|
ParsingParam(ShowCommentsParam);
|
|
};
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
CCtrlPanelBase::CCtrlPanelBase(const string param) : _readyForUpdate(false)
|
|
{
|
|
ParsingParam(param); // системные параметры
|
|
ParsingParam(ShowCommentsParam); // пользовательские параметры
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
bool CCtrlPanelBase::OnInitEvent()
|
|
{
|
|
string str=GenerateHeader();
|
|
Comment(str);
|
|
return true;
|
|
}
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
void CCtrlPanelBase::ParsingParam(const string param)
|
|
{
|
|
string sep1=";",sep2="="; // разделитель в виде символа
|
|
ushort u_sep1, u_sep2; // код символа разделителя
|
|
string result[],result2[]; // массив для получения строк
|
|
//--- получим код разделителя
|
|
u_sep1=StringGetCharacter(sep1,0);
|
|
u_sep2=StringGetCharacter(sep2,0);
|
|
|
|
//--- разобьем строку на подстроки
|
|
int k=StringSplit(param,u_sep1,result);
|
|
//--- теперь выведем все полученные строки
|
|
if(k==0)
|
|
return;
|
|
|
|
for(int i=0; i<k; i++)
|
|
{
|
|
int t=StringSplit(result[i],u_sep2,result2);
|
|
if(t==2)
|
|
{
|
|
if(!_param.set_value(result2[0],result2[1]))
|
|
_param.pushIf(result2[0],result2[1]);
|
|
}
|
|
}
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
string CCtrlPanelBase::GetParamString(string name,string def_value)
|
|
{
|
|
if(!_param.contains_key(name))
|
|
return def_value;
|
|
|
|
return _param.get_value_or_default(name);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
int CCtrlPanelBase::GetParamInt(string name,int def_value)
|
|
{
|
|
if(!_param.contains_key(name) || _param.get_value_or_default(name)=="")
|
|
return def_value;
|
|
|
|
string str=_param.get_value_or_default(name);
|
|
|
|
int v;
|
|
#ifdef __MQL5__
|
|
v=(int)StringToInteger(str);
|
|
#else
|
|
v=StrToInteger(str);
|
|
#endif
|
|
if(v==0 && str!="0")
|
|
return def_value;
|
|
|
|
return v;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
color CCtrlPanelBase::GetParamColor(string name,color def_value)
|
|
{
|
|
if(!_param.contains_key(name) || _param.get_value_or_default(name)=="")
|
|
return def_value;
|
|
|
|
string str=_param.get_value_or_default(name);
|
|
|
|
color v;
|
|
v=StringToColor(str);
|
|
|
|
if(v==0 && str!="0")
|
|
return def_value;
|
|
|
|
return v;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
double CCtrlPanelBase::GetParamDouble(string name,double def_value)
|
|
{
|
|
if(!_param.contains_key(name) || _param.get_value_or_default(name)=="")
|
|
return def_value;
|
|
|
|
string str=_param.get_value_or_default(name);
|
|
|
|
double v;
|
|
#ifdef __MQL5__
|
|
v=StringToDouble(str);
|
|
#else
|
|
v=StrToDouble(str);
|
|
#endif
|
|
if(v==0 && str!="0")
|
|
return def_value;
|
|
|
|
return v;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
bool CCtrlPanelBase::GetParamBool(string name,bool def_value)
|
|
{
|
|
if((!_param.contains_key(name))
|
|
&&(!((StringCompare(_param.get_value_or_default(name),"false",false)==0)
|
|
||(StringCompare(_param.get_value_or_default(name),"true",false)==0)
|
|
||(StringCompare(_param.get_value_or_default(name),"1",false)==0)
|
|
||(StringCompare(_param.get_value_or_default(name),"0",false)==0)
|
|
)))
|
|
return def_value;
|
|
|
|
return ((StringCompare(_param.get_value_or_default(name),"true")==0)||(StringCompare(_param.get_value_or_default(name),"1")==0));
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
string CCtrlPanelBase::PrepStr(const string value, const string postfix,const string prefix,const string value_for_non,const string null_value)
|
|
{
|
|
if(StringLen(value)==0||(StringLen(value_for_non)!=0 && StringCompare(value,value_for_non)==0) )
|
|
return null_value;
|
|
return prefix+value+postfix;
|
|
}
|
|
|
|
#endif
|
|
//+------------------------------------------------------------------+
|