EA-Setka-2/Libs/CtrlPanel/CtrlPanelBase.mqh

209 lines
16 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 14:50:44 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| 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);
//--- =8F80;870F8O/458=8F80;870F8O
virtual bool OnInitEvent(void);
virtual void OnDeinitEvent(const int reason) {};
//--- "09<5@
virtual void OnTimerEvent(void) {};
//--- 1@01>BG8: B8:>2
virtual void OnTickCalculateEvent() {};
virtual void DrawPanelInfo() {};
bool IsReadyForUpdate() {return _readyForUpdate;};
virtual bool IsEnableTickCalculateEvent() {return (!kernel_account::is_testing()||kernel_account::is_visual_mode());}; // 07@5H05B 8;8 70?@5I05B >1@01>B:C =0 :064>< B8:5.
//--- 1@01>BG8: A>1KB8O 3@0D8:0
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); // A8AB5<=K5 ?0@0<5B@K
ParsingParam(ShowCommentsParam); // ?>;L7>20B5;LA:85 ?0@0<5B@K
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CCtrlPanelBase::OnInitEvent()
{
string str=GenerateHeader();
Comment(str);
return true;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CCtrlPanelBase::ParsingParam(const string param)
{
string sep1=";",sep2="="; // @0745;8B5;L 2 2845 A8<2>;0
ushort u_sep1, u_sep2; // :>4 A8<2>;0 @0745;8B5;O
string result[],result2[]; // <0AA82 4;O ?>;CG5=8O AB@>:
//--- ?>;CG8< :>4 @0745;8B5;O
u_sep1=StringGetCharacter(sep1,0);
u_sep2=StringGetCharacter(sep2,0);
//--- @07>1L5< AB@>:C =0 ?>4AB@>:8
int k=StringSplit(param,u_sep1,result);
//--- B5?5@L 2K2545< 2A5 ?>;CG5==K5 AB@>:8
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
//+------------------------------------------------------------------+