EA-Setka-2/Libs/CtrlPanel/CtrlPanelBase.mqh
super.admin a4b861dd93 convert
2025-05-30 14:50:44 +02:00

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
//+------------------------------------------------------------------+