mql5/Experts/ACM/Boleta/Include/ClassControlPanel.mqh

567 lines
19 KiB
MQL5
Raw Permalink Normal View History

2026-05-19 20:51:47 -03:00
//+------------------------------------------------------------------+
//| ClassControlPainel.mqh |
//| Rafael Floriani Pinto |
//| https://www.mql5.com/pt/users/rafaelfp |
//+------------------------------------------------------------------+
#property copyright "Rafael Floriani Pinto"
#property link "https://www.mql5.com/pt/users/rafaelfp"
#ifndef ClassControlPainelV1rafaelfp
#define ClassControlPainelV1rafaelfp
#define OBJMARGIMX 0.20
#define OBJMARGIMY 0.06
#define OBJGERALNAME "GERAL"
enum ENUM_PANEL_INTEGER
{
PANEL_BGCOLOR,
PANEL_BORDERCOLOR,
PANEL_BORDERTYPE,
PANEL_CORNERPOSITION
};
enum ENUM_BUTTON_INTEGER
{
BUTTON_BGCOLOR,
BUTTON_BORDERCOLOR,
BUTTON_BORDERTYPE,
BUTTON_FONTSIZE,
BUTTON_FONTCOLOR
};
enum ENUM_BUTTON_STRING
{
BUTTON_TEXTSHOW
};
enum ENUM_TEXT_INTEGER
{
TEXT_FONTSIZE,
TEXT_FONTCOLOR,
TEXT_READONLY
};
enum ENUM_TEXT_STRING
{
TEXT_TEXTSHOW
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CControlPainel
{
public:
CControlPainel(long=0,double=0.25,double=0.25,long=5,long=5,ENUM_BASE_CORNER=CORNER_LEFT_LOWER,string="Panelrafaelfp");
bool CreatePanel();
void DeletePanel();
bool CreateButton(const string,color,color,color,ENUM_BORDER_TYPE);
bool CreateText(const string,color,int,bool=true);
bool ButtonGetState(int);
void ButtonSetState(int,bool=false);
string TextGetString(int);
void PanelModifyInteger(ENUM_PANEL_INTEGER,long);
void ButtonModifyInteger(int,ENUM_BUTTON_INTEGER,long);
void ButtonModifyString(int,ENUM_BUTTON_STRING,const string);
void TextModifyInteger(int,ENUM_TEXT_INTEGER,long);
void TextModifyString(int,ENUM_TEXT_STRING,const string);
void PanelSetFont(const string);
private:
//CONSTS
const long ID;
//VARS
double PropWidth;
double PropHeight;
int ChartWidth;
int ChartHeight;
long XMargim;
long YMargim;
string FontName;
//PANEL STATUS
string PanelName;
long PanelWidth;
long PanelHeight;
ENUM_BASE_CORNER PanelCorner;
color PanelBGColor;
color PanelBorderColor;
ENUM_BORDER_TYPE PanelBorder;
//OBJ DIMENSIONS
int NumbersObjects;
int NumberButtons[];
int NumberTexts[];
long ObjXSize;
long ObjYSize;
long ObjXMargim;
long ObjYMargim;
long ObjAddYMargim;
//FUNCS
long SetXDistance(ENUM_BASE_CORNER,long,long);
long SetYDistance(ENUM_BASE_CORNER,long,long);
bool ChangePanelAppearence();
void SetObjectYDimensions();
void SetObjectXDimensions();
long SetYMargimObj(int);
void SetObjectsPlace();
string GetGeralName(const string,int)const;
};
//+------------------------------------------------------------------+
//|CONSTRUCTOR |
//+------------------------------------------------------------------+
CControlPainel::CControlPainel(long Chart_ID=0,double PropWidthGraf=0.250000,double PropHeightGraf=0.250000,
long XMARGIM=5,long YMARGIM=5,ENUM_BASE_CORNER ObjCorner=CORNER_LEFT_LOWER,string PANELNAME="Panelrafaelfp")
:ID(Chart_ID),
PropWidth(PropWidthGraf>0 && PropWidthGraf<1 ? PropWidthGraf :0.25),
PropHeight(PropHeightGraf>0 && PropHeightGraf<1? PropHeightGraf :0.25),
PanelCorner(ObjCorner),
PanelName(PANELNAME),
ChartWidth((int)ChartGetInteger(ID,CHART_WIDTH_IN_PIXELS,0)),
ChartHeight((int)ChartGetInteger(ID,CHART_HEIGHT_IN_PIXELS,0)),
XMargim(XMARGIM>0?XMARGIM:5),
YMargim(YMARGIM>0?YMARGIM:5),
PanelBGColor(clrBlack),
PanelBorderColor(clrWhite),
PanelBorder(BORDER_RAISED),
NumbersObjects(0),
FontName("Times New Roman")
{
}
//+------------------------------------------------------------------+
//|PUBLIC DEFINITIONS |
//+------------------------------------------------------------------+
bool CControlPainel::CreatePanel()
{
if(!ObjectCreate(ID,PanelName,OBJ_RECTANGLE_LABEL,0,0,0))
{
return false;
}
if(!ObjectSetInteger(ID,PanelName,OBJPROP_CORNER,PanelCorner))
{
return false;
}
PanelWidth=(long)(PropWidth*ChartWidth);
if(!ObjectSetInteger(ID,PanelName,OBJPROP_XSIZE,PanelWidth))
{
return false;
}
if(!ObjectSetInteger(ID,PanelName,OBJPROP_XDISTANCE,SetXDistance(PanelCorner,XMargim,PanelWidth)))
{
return false;
}
PanelHeight=(long)(PropHeight*ChartHeight);
if(!ObjectSetInteger(ID,PanelName,OBJPROP_YSIZE,PanelHeight))
{
return false;
}
if(!ObjectSetInteger(ID,PanelName,OBJPROP_YDISTANCE,SetYDistance(PanelCorner,YMargim,PanelHeight)))
{
return false;
}
if(!ChangePanelAppearence())
return false;
return true;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::DeletePanel(void)
{
ObjectDelete(ID,PanelName);
for(int i=1; i<=NumbersObjects; i++)
{
ObjectDelete(ID,GetGeralName(OBJGERALNAME,i));
}
NumbersObjects=0;
ArrayFree(NumberButtons);
ArrayFree(NumberTexts);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CControlPainel::CreateButton(const string BntText="Bnt",color FontColor=clrWhite,color BntBGColor=clrRed,
color BntBorderColor=clrWhite,ENUM_BORDER_TYPE BntBorder=BORDER_RAISED)
{
NumbersObjects++;
int N=ArraySize(NumberButtons);
ArrayResize(NumberButtons,N+1);
NumberButtons[N]=NumbersObjects;
string BntName=GetGeralName(OBJGERALNAME,NumbersObjects);
if(!ObjectCreate(ID,BntName,OBJ_BUTTON,0,0,0))
{
ArrayResize(NumberButtons,N);
NumbersObjects--;
return false;
}
SetObjectsPlace();
if(!ObjectSetInteger(ID,BntName,OBJPROP_BGCOLOR,BntBGColor) || !ObjectSetInteger(ID,BntName,OBJPROP_BORDER_TYPE,BntBorder) ||
!ObjectSetInteger(ID,BntName,OBJPROP_BORDER_COLOR,BntBorderColor)|| !ObjectSetInteger(ID,BntName,OBJPROP_COLOR,FontColor) ||
!ObjectSetString(ID,BntName,OBJPROP_TEXT,BntText) || !ObjectSetInteger(ID,BntName,OBJPROP_READONLY,true))
{
ArrayResize(NumberButtons,N);
NumbersObjects--;
SetObjectsPlace();
return false;
}
return true;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CControlPainel::CreateText(const string TextT="Text",color FontColor=clrWhite,int TextFontSize=10,bool ReadOnly=true)
{
NumbersObjects++;
int N=ArraySize(NumberTexts);
ArrayResize(NumberTexts,N+1);
NumberTexts[N]=NumbersObjects;
string TextName=GetGeralName(OBJGERALNAME,NumbersObjects);
if(!ObjectCreate(ID,TextName,OBJ_EDIT,0,0,0))
{
ArrayResize(NumberTexts,N);
NumbersObjects--;
return false;
}
SetObjectsPlace();
if(!ObjectSetInteger(ID,TextName,OBJPROP_BGCOLOR,PanelBGColor) || !ObjectSetInteger(ID,TextName,OBJPROP_BORDER_TYPE,BORDER_FLAT) ||
!ObjectSetInteger(ID,TextName,OBJPROP_BORDER_COLOR,PanelBGColor)|| !ObjectSetInteger(ID,TextName,OBJPROP_COLOR,FontColor) ||
!ObjectSetString(ID,TextName,OBJPROP_TEXT,TextT) || !ObjectSetInteger(ID,TextName,OBJPROP_READONLY,ReadOnly)
|| !ObjectSetInteger(ID,TextName,OBJPROP_ALIGN,ALIGN_CENTER) || !ObjectSetInteger(ID,TextName,OBJPROP_FONTSIZE,TextFontSize))
{
ArrayResize(NumberTexts,N);
NumbersObjects--;
SetObjectsPlace();
return false;
}
return true;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CControlPainel::ButtonGetState(int WhatBnt)
{
int N=ArraySize(NumberButtons);
if(WhatBnt<=0 || WhatBnt>N)
return false;
string Name=GetGeralName(OBJGERALNAME,NumberButtons[WhatBnt-1]);
return (bool)ObjectGetInteger(ID,Name,OBJPROP_STATE);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::ButtonSetState(int WhatBnt,bool State=false)
{
int N=ArraySize(NumberButtons);
if(WhatBnt<=0 || WhatBnt>N)
return;
string Name=GetGeralName(OBJGERALNAME,NumberButtons[WhatBnt-1]);
ObjectSetInteger(ID,Name,OBJPROP_STATE,State);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string CControlPainel::TextGetString(int WhatTxt)
{
int N=ArraySize(NumberTexts);
if(WhatTxt<=0 || WhatTxt>N)
return NULL;
string Name=GetGeralName(OBJGERALNAME,NumberTexts[WhatTxt-1]);
return ObjectGetString(ID,Name,OBJPROP_TEXT);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::PanelModifyInteger(ENUM_PANEL_INTEGER PropertId,long Val)
{
switch(PropertId)
{
case PANEL_BGCOLOR:
if(ObjectSetInteger(ID,PanelName,OBJPROP_BGCOLOR,Val))
{
PanelBGColor=(color)Val;
for(int i=1; i<=ArraySize(NumberTexts); i++)
{
ObjectSetInteger(ID,GetGeralName(OBJGERALNAME,NumberTexts[i-1]),OBJPROP_BGCOLOR,PanelBGColor);
ObjectSetInteger(ID,GetGeralName(OBJGERALNAME,NumberTexts[i-1]),OBJPROP_BORDER_COLOR,PanelBGColor);
}
}
return;
case PANEL_BORDERCOLOR:
if(ObjectSetInteger(ID,PanelName,OBJPROP_BORDER_COLOR,Val))
{
PanelBorderColor=(color)Val;
}
return;
case PANEL_BORDERTYPE:
if(ObjectSetInteger(ID,PanelName,OBJPROP_BORDER_TYPE,Val))
{
PanelBorder=(ENUM_BORDER_TYPE)Val;
}
return;
case PANEL_CORNERPOSITION:
if(ObjectSetInteger(ID,PanelName,OBJPROP_CORNER,Val))
{
PanelCorner=(ENUM_BASE_CORNER)Val;
ObjectSetInteger(ID,PanelName,OBJPROP_XDISTANCE,SetXDistance(PanelCorner,XMargim,PanelWidth));
ObjectSetInteger(ID,PanelName,OBJPROP_YDISTANCE,SetYDistance(PanelCorner,YMargim,PanelHeight));
SetObjectsPlace();
}
default:
return;
};
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::ButtonModifyInteger(int WhatBnt,ENUM_BUTTON_INTEGER PropertID,long Val)
{
int N=ArraySize(NumberButtons);
if(WhatBnt<=0 || WhatBnt>N)
return;
string Name=GetGeralName(OBJGERALNAME,NumberButtons[WhatBnt-1]);
switch(PropertID)
{
case BUTTON_BGCOLOR:
ObjectSetInteger(ID,Name,OBJPROP_BGCOLOR,Val);
return;
case BUTTON_BORDERCOLOR:
ObjectSetInteger(ID,Name,OBJPROP_BORDER_COLOR,Val);
return;
case BUTTON_BORDERTYPE:
ObjectSetInteger(ID,Name,OBJPROP_BORDER_TYPE,Val);
return;
case BUTTON_FONTCOLOR:
ObjectSetInteger(ID,Name,OBJPROP_COLOR,Val);
return;
case BUTTON_FONTSIZE:
ObjectSetInteger(ID,Name,OBJPROP_FONTSIZE,Val);
return;
default:
return;
};
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::ButtonModifyString(int WhatBnt,ENUM_BUTTON_STRING PropertID,const string Text)
{
int N=ArraySize(NumberButtons);
if(WhatBnt<=0 || WhatBnt>N)
return;
string Name=GetGeralName(OBJGERALNAME,NumberButtons[WhatBnt-1]);
switch(PropertID)
{
case BUTTON_TEXTSHOW:
ObjectSetString(ID,Name,OBJPROP_TEXT,Text);
return;
default:
return;
};
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::TextModifyInteger(int WhatTxt,ENUM_TEXT_INTEGER PropertID,long Val)
{
int N=ArraySize(NumberTexts);
if(WhatTxt<=0 || WhatTxt>N)
return;
string Name=GetGeralName(OBJGERALNAME,NumberTexts[WhatTxt-1]);
switch(PropertID)
{
case TEXT_FONTCOLOR:
ObjectSetInteger(ID,Name,OBJPROP_COLOR,Val);
return;
case TEXT_FONTSIZE:
ObjectSetInteger(ID,Name,OBJPROP_FONTSIZE,Val);
return;
case TEXT_READONLY:
ObjectSetInteger(ID,Name,OBJPROP_READONLY,Val);
return;
default:
return;
};
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::TextModifyString(int WhatTxt,ENUM_TEXT_STRING PropertID,const string Text)
{
int N=ArraySize(NumberTexts);
if(WhatTxt<=0 || WhatTxt>N)
return;
string Name=GetGeralName(OBJGERALNAME,NumberTexts[WhatTxt-1]);
switch(PropertID)
{
case TEXT_TEXTSHOW:
ObjectSetString(ID,Name,OBJPROP_TEXT,Text);
return;
default:
return;
};
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::PanelSetFont(const string NameFont)
{
if(ObjectSetString(ID,PanelName,OBJPROP_FONT,NameFont))
{
FontName=NameFont;
string Name;
for(int i=1; i<=NumbersObjects; i++)
{
Name=GetGeralName(OBJGERALNAME,i);
ObjectSetString(ID,Name,OBJPROP_FONT,FontName);
}
}
}
//+------------------------------------------------------------------+
//|PRIVATE DEFINITIONS |
//+------------------------------------------------------------------+
long CControlPainel::SetXDistance(ENUM_BASE_CORNER Corner,long MARGIM,long WIDTH)
{
if(Corner==CORNER_LEFT_LOWER || Corner==CORNER_LEFT_UPPER)
{
return MARGIM;
}
return MARGIM+WIDTH;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
long CControlPainel::SetYDistance(ENUM_BASE_CORNER Corner,long MARGIM,long HEIGTH)
{
if(Corner==CORNER_LEFT_LOWER || Corner==CORNER_RIGHT_LOWER)
{
return MARGIM+HEIGTH;
}
return MARGIM;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CControlPainel::ChangePanelAppearence()
{
if(!ObjectSetInteger(ID,PanelName,OBJPROP_BGCOLOR,PanelBGColor))
return false;
if(!ObjectSetInteger(ID,PanelName,OBJPROP_BORDER_TYPE,PanelBorder))
return false;
if(!ObjectSetInteger(ID,PanelName,OBJPROP_BORDER_COLOR,PanelBorderColor))
return false;
return true;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::SetObjectYDimensions()
{
int N=NumbersObjects+1;
long PHeigth=PanelHeight;
ObjYMargim=(long)((PHeigth*OBJMARGIMX)/N);
ObjYSize=(long)(PHeigth*(1-OBJMARGIMX)/NumbersObjects);
long Temp=(long)(PHeigth-ObjYMargim*N-ObjYSize*NumbersObjects);
long K=0;
long TempK=0;
for(int i=0; i<30; i++)
{
TempK=(ObjYMargim-Temp-i)/2;
if(TempK%2!=0)
continue;
K=TempK/2;
break;
}
ObjAddYMargim=-K;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::SetObjectXDimensions()
{
////////////////////////////
long PWidth=PanelWidth;
ObjXMargim=(long)(PWidth*(OBJMARGIMY)/2);
ObjXSize=(long)(PWidth*(1-OBJMARGIMY));
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string CControlPainel::GetGeralName(const string GName,int N)const
{
string Temp=PanelName;
StringAdd(Temp,GName);
StringAdd(Temp,IntegerToString(N));
return Temp;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
long CControlPainel::SetYMargimObj(int i)
{
if(PanelCorner==CORNER_LEFT_UPPER || PanelCorner==CORNER_RIGHT_UPPER)
{
return ((ObjYMargim*i)+(ObjYSize*(i-1))+ObjAddYMargim);
}
long PanelW=PanelHeight;
return (PanelW-((ObjYMargim*i)+(ObjYSize*(i-1)))-ObjAddYMargim);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CControlPainel::SetObjectsPlace()
{
SetObjectYDimensions();
SetObjectXDimensions();
string Name;
long MargimY;
for(int i=1; i<=NumbersObjects; i++)
{
Name=GetGeralName(OBJGERALNAME,i);
MargimY=YMargim+SetYMargimObj(i);
ObjectSetInteger(ID,Name,OBJPROP_CORNER,PanelCorner);
ObjectSetInteger(ID,Name,OBJPROP_YDISTANCE,MargimY);
ObjectSetInteger(ID,Name,OBJPROP_YSIZE,ObjYSize);
ObjectSetInteger(ID,Name,OBJPROP_XDISTANCE,SetXDistance(PanelCorner,XMargim+ObjXMargim,ObjXSize));
ObjectSetInteger(ID,Name,OBJPROP_XSIZE,ObjXSize);
ObjectSetString(ID,Name,OBJPROP_FONT,FontName);
//ObjectSetString(ID,Name,OBJPROP_);
}
}
#endif
//+------------------------------------------------------------------+