UTE/Strategy/Panel/ElChart.mqh

461 lines
35 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:34:43 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| MBookPanel.mqh |
//| Copyright 2015, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#include "Node.mqh"
#include "Events\EventChartEndEdit.mqh"
#define MORE 1
#define LESS -1
#define EQUAL 0
//+------------------------------------------------------------------+
//| "8? >B=>H5=8O <564C M;5<5=B0<8 ElChart |
//+------------------------------------------------------------------+
enum ENUM_SORT_EL_TYPE
{
SORT_EL_BY_X_COORD, // -;5<5=BK >BA>@B8@>20=K ?> 7=0G5=8N X-:>>@48=0BK, >B <5=LH53> : 1>;LH5<C
SORT_EL_BY_Y_COORD, // -;5<5=BK >BA>@B8@>20=K ?> 7=0G5=8N Y-:>>@48=0BK, >B <5=LH53> : 1>;LH5<C
};
//+------------------------------------------------------------------+
//| 07>2K9 M;5<5=B 3@0D8G5A:>3> M;5<5=B0 ?0=5;8. :;NG05B |
//| =081>;55 @0A?@>AB@0=5==K5 A2>9AB20 M;5<5=B0. |
//+------------------------------------------------------------------+
class CElChart : public CNode
{
private:
ENUM_OBJECT m_obj_type; // @0D8G5A:89 B8?, ;560I89 2 >A=>25 M;5<5=B0
long m_x; // X-:>>@48=0B0 B>G:8 ?@82O7:8
long m_y; // Y-:>>@48=0B0 B>G:8 ?@82O7:8
long m_height; // ;8=0 M;5<5=B0 2 ?8:A5;OE
long m_width; // (8@8=0 M;5<5=B0 2 ?8:A5;OE
string m_text; // "5:AB 8;8 =04?8AL =0 M;5<5=B5
int m_text_size; // 07<5@ H@8DB0 M;5<5=B0
color m_text_color; // &25B H@8DB0 =04?8A8 M;5<5=B0
string m_text_font; // 0720=85 H@8DB0 =04?8A8
bool m_read_only; // 568< B>;L:> GB5=8O
ENUM_ALIGN_MODE m_align; // "8? 2K@02=820=8O 4;O OBJ_EDIT
color m_bground_color; // &25B D>=0 M;5<5=B0
color m_border_color; // &25B @0<:8 M;5<5=B0
ENUM_BORDER_TYPE m_border_type; // "8? @0<:8 M;5<5=B0
ENUM_BASE_CORNER m_corner; // "8? ?@82O7:8 3@0D8G5A:>3> >1J5:B0
protected:
virtual void OnXCoordChange(void);
virtual void OnYCoordChange(void);
virtual void OnWidthChange(void);
virtual void OnHeightChange(void);
public:
CElChart(ENUM_OBJECT obj_type);
virtual void Show();
virtual void Event(CEvent *event);
/* Set methods */
void Text(string text);
void TextSize(int size);
void TextFont(string font);
void TextColor(color clr);
void ReadOnly(bool read_only);
void Align(ENUM_ALIGN_MODE align);
void BackgroundColor(color clr);
void BorderColor(color clr);
void BorderType(ENUM_BORDER_TYPE type);
void XCoord(long x);
void YCoord(long y);
void Width(long width);
void Height(long height);
void Corner(ENUM_BASE_CORNER corner);
/* Get methods */
string Text(void);
int TextSize(void);
color TextColor(void);
string TextFont(void);
bool ReadOnly(void);
ENUM_ALIGN_MODE Align(void);
color BackgroundColor(void);
color BorderColor(void);
ENUM_BORDER_TYPE BorderType(void);
long XCoord(void)const;
long YCoord(void)const;
long Width(void);
long Height(void);
ENUM_BASE_CORNER Corner(void);
ENUM_OBJECT TypeElement(void);
virtual int Compare(const CObject *node,const int mode=0) const ;
};
//+------------------------------------------------------------------+
//| >=AB@C:B>@ ?>-C<>;G0=8N |
//+------------------------------------------------------------------+
CElChart::CElChart(ENUM_OBJECT obj_type)
{
m_obj_type=obj_type;
XCoord(20);
YCoord(20);
Height(20);
Width(120);
Text("");
TextFont("Arial");
TextColor(clrBlack);
TextSize(10);
ReadOnly(true);
BorderColor(clrBlack);
BackgroundColor(clrWhite);
BorderType(BORDER_FLAT);
Align(ALIGN_LEFT);
}
//+------------------------------------------------------------------+
//| >72@0I05B 7=0G5=85 A>@B8@>2:8 2 7028A8<>AB8 >B @568<0 |
//+------------------------------------------------------------------+
int CElChart::Compare(const CObject *node,const int mode=0) const
{
const CElChart* chart = node;
switch(mode)
{
case SORT_EL_BY_X_COORD:
if(m_x > chart.XCoord())
return MORE;
else if(m_x < chart.XCoord())
return LESS;
return EQUAL;
case SORT_EL_BY_Y_COORD:
if(m_y > chart.YCoord())
return MORE;
else if(m_y < chart.YCoord())
return LESS;
return EQUAL;
//default SORT_EL_BY_X_COORD
default:
if(m_x > chart.XCoord())
return MORE;
else if(m_x < chart.XCoord())
return LESS;
return EQUAL;
}
return(EQUAL);
}
//+------------------------------------------------------------------+
//| !>7405B M;5<5=B =0 3@0D8:5 8 :>=D83C@8@C5B 53> >A=>2=K5 A2>9AB20:|
//| "8? M;5<5=B0 - TypeElement; |
//| @82O7:0 ?> >A8 X = XCoord() |
//| @82O7:0 ?> >A8 X = YCoord() |
//| (8@8=0 = Height() |
//| KA>B0 = Width() |
//| 07<5@ H@8DB0 = FontSize() |
//+------------------------------------------------------------------+
void CElChart::Show(void)
{
if(m_obj_type != OBJ_BITMAP_LABEL)
ObjectCreate(ChartID(),m_name,m_obj_type,0,0,0);
else
{
OnShow();
return;
}
XCoord(XCoord());
YCoord(YCoord());
Height(Height());
Width(Width());
if(m_obj_type==OBJ_EDIT)
Align(Align());
Text(Text());
TextColor(TextColor());
TextSize(TextSize());
TextFont(TextFont());
ReadOnly(ReadOnly());
Corner(Corner());
BorderType(BorderType());
if(BorderType()==BORDER_FLAT)
BorderColor(BorderColor());
BackgroundColor(BackgroundColor());
OnShow();
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CElChart::Event(CEvent *event)
{
CNode::Event(event);
if(event.EventType()==EVENT_CHART_END_EDIT)
{
CEventChartEndEdit *endEdit=event;
if(endEdit.ObjectName()==Name())
m_text=ObjectGetString(ChartID(),Name(),OBJPROP_TEXT);
}
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B ?@82O7:C M;5<5=B0 ?> >A8 X |
//+------------------------------------------------------------------+
void CElChart::XCoord(long x)
{
m_x=x;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_XDISTANCE,m_x);
OnXCoordChange();
}
//+------------------------------------------------------------------+
//| >72@0I05B ?@82O7:C M;5<5=B0 ?> >A8 X |
//+------------------------------------------------------------------+
long CElChart::XCoord(void)const
{
return m_x;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B ?@82O7:C M;5<5=B0 ?> >A8 Y |
//+------------------------------------------------------------------+
void CElChart::YCoord(long y)
{
m_y=y;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_YDISTANCE,m_y);
OnYCoordChange();
}
//+------------------------------------------------------------------+
//| >72@0I05B ?@82O7:C M;5<5=B0 ?> >A8 Y |
//+------------------------------------------------------------------+
long CElChart::YCoord(void)const
{
return m_y;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B H8@8=C M;5<5=B0 2 ?8:A5;OE |
//+------------------------------------------------------------------+
void CElChart::Width(long width)
{
m_width=width;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_XSIZE,m_width);
OnWidthChange();
}
//+------------------------------------------------------------------+
//| >72@0I05B 2KA>BC M;5<5=B0 2 ?8:A5;OE |
//+------------------------------------------------------------------+
long CElChart::Width(void)
{
return m_width;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B H8@8=C M;5<5=B0 2 ?8:A5;OE |
//+------------------------------------------------------------------+
void CElChart::Height(long height)
{
m_height=height;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_YSIZE,m_height);
OnHeightChange();
}
//+------------------------------------------------------------------+
//| >72@0I05B H8@8=C M;5<5=B0 2 ?8:A5;OE |
//+------------------------------------------------------------------+
long CElChart::Height(void)
{
return m_height;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B B5:AB M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::Text(string text)
{
m_text=text;
if(IsShowed())
{
ObjectSetString(ChartID(),m_name,OBJPROP_TEXT,m_text);
//ObjectSetString(ChartID(),m_name,OBJPROP_,m_text);
}
}
//+------------------------------------------------------------------+
//| >72@0I05B B5:AB M;5<5=B0 |
//+------------------------------------------------------------------+
string CElChart::Text(void)
{
//if(IsShowed())
// m_text = ObjectGetString(ChartID(),m_name,OBJPROP_TEXT);
return m_text;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B @07<5@ H@8DB0 =04?8A8 M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::TextSize(int text_size)
{
m_text_size=text_size;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_FONTSIZE,m_text_size);
}
//+------------------------------------------------------------------+
//| >72@0I05B @07<5@ H@8DB0 =04?8A8 M;5<5=B0 |
//+------------------------------------------------------------------+
int CElChart::TextSize(void)
{
return m_text_size;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B F25B =04?8A8 M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::TextColor(color clr)
{
m_text_color=clr;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_COLOR,m_text_color);
}
//+------------------------------------------------------------------+
//| >72@0I05B F25B =04?8A8 M;5<5=B0 |
//+------------------------------------------------------------------+
color CElChart::TextColor(void)
{
return m_text_color;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B B5:AB M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::TextFont(string text_font)
{
m_text_font=text_font;
if(IsShowed())
ObjectSetString(ChartID(),m_name,OBJPROP_FONT,m_text_font);
}
//+------------------------------------------------------------------+
//| >72@0I05B =0720=85 H@8DB0. |
//+------------------------------------------------------------------+
string CElChart::TextFont(void)
{
return m_text_font;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B F25B D>=0 M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::BackgroundColor(color clr)
{
m_bground_color=clr;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_BGCOLOR,m_bground_color);
}
//+------------------------------------------------------------------+
//| >72@0I05B F25B D>=0 M;5<5=B0 |
//+------------------------------------------------------------------+
color CElChart::BackgroundColor(void)
{
return m_bground_color;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B F25B @0<:8 M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::BorderColor(color clr)
{
m_border_color=clr;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_BORDER_COLOR,m_border_color);
}
//+------------------------------------------------------------------+
//| >72@0I05B F25B @0<:8 M;5<5=B0 |
//+------------------------------------------------------------------+
color CElChart::BorderColor(void)
{
return m_border_color;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B B8? @0<:8 M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::BorderType(ENUM_BORDER_TYPE type)
{
m_border_type=type;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_BORDER_TYPE,m_border_type);
}
//+------------------------------------------------------------------+
//| >72@0I05B B8? @0<:8 M;5<5=B0 |
//+------------------------------------------------------------------+
ENUM_BORDER_TYPE CElChart::BorderType(void)
{
return m_border_type;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B 8;8 A=8<05B @568< B>;L:> GB5=85 |
//+------------------------------------------------------------------+
void CElChart::ReadOnly(bool read_only)
{
if(m_obj_type==OBJ_EDIT)
{
m_read_only=read_only;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_READONLY,m_read_only);
}
}
//+------------------------------------------------------------------+
//| >72@0I05B C3>; ?@82O7:8 3@0D8G5A:>3> >1J5:B0 |
//+------------------------------------------------------------------+
ENUM_BASE_CORNER CElChart::Corner(void)
{
return m_corner;
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B C3>; ?@82O7:8 3@0D8G5A:>3> >1J5:B0 |
//+------------------------------------------------------------------+
void CElChart::Corner(ENUM_BASE_CORNER corner)
{
m_corner=corner;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_CORNER,corner);
for(int i=0; i<m_elements.Total(); i++)
{
CElChart *el=m_elements.At(i);
el.Corner(corner);
}
}
//+------------------------------------------------------------------+
//| >72@0I05B 2K@02=820=85 B5:AB0 4;O OBJ_EDIT |
//+------------------------------------------------------------------+
ENUM_ALIGN_MODE CElChart::Align(void)
{
return m_align;
}
//+------------------------------------------------------------------+
//| K@02=820=85 B5:AB0 4;O OBJ_EDIT |
//+------------------------------------------------------------------+
void CElChart::Align(ENUM_ALIGN_MODE align)
{
m_align=align;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_ALIGN,m_align);
}
//+------------------------------------------------------------------+
//| #AB0=02;8205B 8;8 A=8<05B @568< B>;L:> GB5=85 |
//+------------------------------------------------------------------+
bool CElChart::ReadOnly(void)
{
return m_read_only;
}
//+------------------------------------------------------------------+
//| -B> A>1KB85 ?@>8AE>48B ?>A;5 87<5=5=8O ?@82O7:8 M;5<5=B0 ?> >A8 X|
//+------------------------------------------------------------------+
void CElChart::OnXCoordChange(void)
{
}
//+------------------------------------------------------------------+
//| -B> A>1KB85 ?@>8AE>48B ?>A;5 87<5=5=8O ?@82O7:8 M;5<5=B0 ?> >A8 Y|
//+------------------------------------------------------------------+
void CElChart::OnYCoordChange(void)
{
}
//+------------------------------------------------------------------+
//| -B> A>1KB85 ?@>8AE>48B ?>A;5 87<5=5=8O 2KA>BK M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::OnHeightChange(void)
{
}
//+------------------------------------------------------------------+
//| -B> A>1KB85 ?@>8AE>48B ?>A;5 87<5=5=8O H8@8=K M;5<5=B0 |
//+------------------------------------------------------------------+
void CElChart::OnWidthChange(void)
{
}
//+------------------------------------------------------------------+