460 lines
35 KiB
MQL5
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)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|