UTE/Strategy/Panel/ElChart.mqh
super.admin bd7e405a90 convert
2025-05-30 16:34:43 +02:00

460 lines
35 KiB
MQL5

//+------------------------------------------------------------------+
//| 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
//+------------------------------------------------------------------+
//| Тип отношения между элементами ElChart |
//+------------------------------------------------------------------+
enum ENUM_SORT_EL_TYPE
{
SORT_EL_BY_X_COORD, // Элементы отсортированы по значению X-координаты, от меньшего к большему
SORT_EL_BY_Y_COORD, // Элементы отсортированы по значению Y-координаты, от меньшего к большему
};
//+------------------------------------------------------------------+
//| Базовый элемент графического элемента панели. Включает |
//| наиболее распространенные свойства элемента. |
//+------------------------------------------------------------------+
class CElChart : public CNode
{
private:
ENUM_OBJECT m_obj_type; // Графический тип, лежащий в основе элемента
long m_x; // X-координата точки привязки
long m_y; // Y-координата точки привязки
long m_height; // Длина элемента в пикселях
long m_width; // Ширина элемента в пикселях
string m_text; // Текст или надпись на элементе
int m_text_size; // Размер шрифта элемента
color m_text_color; // Цвет шрифта надписи элемента
string m_text_font; // Название шрифта надписи
bool m_read_only; // Режим только чтения
ENUM_ALIGN_MODE m_align; // Тип выравнивания для OBJ_EDIT
color m_bground_color; // Цвет фона элемента
color m_border_color; // Цвет рамки элемента
ENUM_BORDER_TYPE m_border_type; // Тип рамки элемента
ENUM_BASE_CORNER m_corner; // Тип привязки графического объекта
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 ;
};
//+------------------------------------------------------------------+
//| Конструктор по-умолчанию |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Возвращает значение сортировки в зависимости от режима |
//+------------------------------------------------------------------+
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);
}
//+------------------------------------------------------------------+
//| Создает элемент на графике и конфигурирует его основные свойства:|
//| Тип элемента - TypeElement; |
//| Привязка по оси X = XCoord() |
//| Привязка по оси X = YCoord() |
//| Ширина = Height() |
//| Высота = Width() |
//| Размер шрифта = 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);
}
}
//+------------------------------------------------------------------+
//| Устанавливает привязку элемента по оси X |
//+------------------------------------------------------------------+
void CElChart::XCoord(long x)
{
m_x=x;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_XDISTANCE,m_x);
OnXCoordChange();
}
//+------------------------------------------------------------------+
//| Возвращает привязку элемента по оси X |
//+------------------------------------------------------------------+
long CElChart::XCoord(void)const
{
return m_x;
}
//+------------------------------------------------------------------+
//| Устанавливает привязку элемента по оси Y |
//+------------------------------------------------------------------+
void CElChart::YCoord(long y)
{
m_y=y;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_YDISTANCE,m_y);
OnYCoordChange();
}
//+------------------------------------------------------------------+
//| Возвращает привязку элемента по оси Y |
//+------------------------------------------------------------------+
long CElChart::YCoord(void)const
{
return m_y;
}
//+------------------------------------------------------------------+
//| Устанавливает ширину элемента в пикселях |
//+------------------------------------------------------------------+
void CElChart::Width(long width)
{
m_width=width;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_XSIZE,m_width);
OnWidthChange();
}
//+------------------------------------------------------------------+
//| Возвращает высоту элемента в пикселях |
//+------------------------------------------------------------------+
long CElChart::Width(void)
{
return m_width;
}
//+------------------------------------------------------------------+
//| Устанавливает ширину элемента в пикселях |
//+------------------------------------------------------------------+
void CElChart::Height(long height)
{
m_height=height;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_YSIZE,m_height);
OnHeightChange();
}
//+------------------------------------------------------------------+
//| Возвращает ширину элемента в пикселях |
//+------------------------------------------------------------------+
long CElChart::Height(void)
{
return m_height;
}
//+------------------------------------------------------------------+
//| Устанавливает текст элемента |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
//| Возвращает текст элемента |
//+------------------------------------------------------------------+
string CElChart::Text(void)
{
//if(IsShowed())
// m_text = ObjectGetString(ChartID(),m_name,OBJPROP_TEXT);
return m_text;
}
//+------------------------------------------------------------------+
//| Устанавливает размер шрифта надписи элемента |
//+------------------------------------------------------------------+
void CElChart::TextSize(int text_size)
{
m_text_size=text_size;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_FONTSIZE,m_text_size);
}
//+------------------------------------------------------------------+
//| Возвращает размер шрифта надписи элемента |
//+------------------------------------------------------------------+
int CElChart::TextSize(void)
{
return m_text_size;
}
//+------------------------------------------------------------------+
//| Устанавливает цвет надписи элемента |
//+------------------------------------------------------------------+
void CElChart::TextColor(color clr)
{
m_text_color=clr;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_COLOR,m_text_color);
}
//+------------------------------------------------------------------+
//| Возвращает цвет надписи элемента |
//+------------------------------------------------------------------+
color CElChart::TextColor(void)
{
return m_text_color;
}
//+------------------------------------------------------------------+
//| Устанавливает текст элемента |
//+------------------------------------------------------------------+
void CElChart::TextFont(string text_font)
{
m_text_font=text_font;
if(IsShowed())
ObjectSetString(ChartID(),m_name,OBJPROP_FONT,m_text_font);
}
//+------------------------------------------------------------------+
//| Возвращает название шрифта. |
//+------------------------------------------------------------------+
string CElChart::TextFont(void)
{
return m_text_font;
}
//+------------------------------------------------------------------+
//| Устанавливает цвет фона элемента |
//+------------------------------------------------------------------+
void CElChart::BackgroundColor(color clr)
{
m_bground_color=clr;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_BGCOLOR,m_bground_color);
}
//+------------------------------------------------------------------+
//| Возвращает цвет фона элемента |
//+------------------------------------------------------------------+
color CElChart::BackgroundColor(void)
{
return m_bground_color;
}
//+------------------------------------------------------------------+
//| Устанавливает цвет рамки элемента |
//+------------------------------------------------------------------+
void CElChart::BorderColor(color clr)
{
m_border_color=clr;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_BORDER_COLOR,m_border_color);
}
//+------------------------------------------------------------------+
//| Возвращает цвет рамки элемента |
//+------------------------------------------------------------------+
color CElChart::BorderColor(void)
{
return m_border_color;
}
//+------------------------------------------------------------------+
//| Устанавливает тип рамки элемента |
//+------------------------------------------------------------------+
void CElChart::BorderType(ENUM_BORDER_TYPE type)
{
m_border_type=type;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_BORDER_TYPE,m_border_type);
}
//+------------------------------------------------------------------+
//| Возвращает тип рамки элемента |
//+------------------------------------------------------------------+
ENUM_BORDER_TYPE CElChart::BorderType(void)
{
return m_border_type;
}
//+------------------------------------------------------------------+
//| Устанавливает или снимает режим только чтение |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
//| Возвращает угол привязки графического объекта |
//+------------------------------------------------------------------+
ENUM_BASE_CORNER CElChart::Corner(void)
{
return m_corner;
}
//+------------------------------------------------------------------+
//| Устанавливает угол привязки графического объекта |
//+------------------------------------------------------------------+
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);
}
}
//+------------------------------------------------------------------+
//| Возвращает выравнивание текста для OBJ_EDIT |
//+------------------------------------------------------------------+
ENUM_ALIGN_MODE CElChart::Align(void)
{
return m_align;
}
//+------------------------------------------------------------------+
//| Выравнивание текста для OBJ_EDIT |
//+------------------------------------------------------------------+
void CElChart::Align(ENUM_ALIGN_MODE align)
{
m_align=align;
if(IsShowed())
ObjectSetInteger(ChartID(),m_name,OBJPROP_ALIGN,m_align);
}
//+------------------------------------------------------------------+
//| Устанавливает или снимает режим только чтение |
//+------------------------------------------------------------------+
bool CElChart::ReadOnly(void)
{
return m_read_only;
}
//+------------------------------------------------------------------+
//| Это событие происходит после изменения привязки элемента по оси X|
//+------------------------------------------------------------------+
void CElChart::OnXCoordChange(void)
{
}
//+------------------------------------------------------------------+
//| Это событие происходит после изменения привязки элемента по оси Y|
//+------------------------------------------------------------------+
void CElChart::OnYCoordChange(void)
{
}
//+------------------------------------------------------------------+
//| Это событие происходит после изменения высоты элемента |
//+------------------------------------------------------------------+
void CElChart::OnHeightChange(void)
{
}
//+------------------------------------------------------------------+
//| Это событие происходит после изменения ширины элемента |
//+------------------------------------------------------------------+
void CElChart::OnWidthChange(void)
{
}
//+------------------------------------------------------------------+