Files

1587 lines
118 KiB
Plaintext
Raw Permalink Normal View History

2025-02-07 19:17:11 +03:30
//+------------------------------------------------------------------+
//| Control panel MCM.mq5 |
//| Copyright 2010, Lizar |
//| https://login.mql5.com/ru/users/Lizar |
//| Revision 2010.12.09 |
//+------------------------------------------------------------------+
enum ENUM_CHART_EVENT_SYMBOL
{
CHARTEVENT_NEWBAR_NO =0, // No events
CHARTEVENT_NEWBAR_M1 =0x00000001, // "New bar" event on M1 chart
CHARTEVENT_NEWBAR_M2 =0x00000002, // "New bar" event on M2 chart
CHARTEVENT_NEWBAR_M3 =0x00000004, // "New bar" event on M3 chart
CHARTEVENT_NEWBAR_M4 =0x00000008, // "New bar" event on M4 chart
CHARTEVENT_NEWBAR_M5 =0x00000010, // "New bar" event on M5 chart
CHARTEVENT_NEWBAR_M6 =0x00000020, // "New bar" event on M6 chart
CHARTEVENT_NEWBAR_M10=0x00000040, // "New bar" event on M10 chart
CHARTEVENT_NEWBAR_M12=0x00000080, // "New bar" event on M12 chart
CHARTEVENT_NEWBAR_M15=0x00000100, // "New bar" event on M15 chart
CHARTEVENT_NEWBAR_M20=0x00000200, // "New bar" event on M20 chart
CHARTEVENT_NEWBAR_M30=0x00000400, // "New bar" event on M30 chart
CHARTEVENT_NEWBAR_H1 =0x00000800, // "New bar" event on H1 chart
CHARTEVENT_NEWBAR_H2 =0x00001000, // "New bar" event on H2 chart
CHARTEVENT_NEWBAR_H3 =0x00002000, // "New bar" event on H3 chart
CHARTEVENT_NEWBAR_H4 =0x00004000, // "New bar" event on H4 chart
CHARTEVENT_NEWBAR_H6 =0x00008000, // "New bar" event on H6 chart
CHARTEVENT_NEWBAR_H8 =0x00010000, // "New bar" event on H8 chart
CHARTEVENT_NEWBAR_H12=0x00020000, // "New bar" event on H12 chart
CHARTEVENT_NEWBAR_D1 =0x00040000, // "New bar" event on D1 chart
CHARTEVENT_NEWBAR_W1 =0x00080000, // "New bar" event on W1 chart
CHARTEVENT_NEWBAR_MN1=0x00100000, // "New bar" event on MN chart
CHARTEVENT_TICK =0x00200000, // "New tick" event
CHARTEVENT_ALL =0xFFFFFFFF, // All events
};
string EventDescription(long event)
{
ENUM_CHART_EVENT_SYMBOL event_current=(ENUM_CHART_EVENT_SYMBOL)event;
switch(event_current)
{
case CHARTEVENT_NEWBAR_NO: return(" Initialization "); // Initialization
case CHARTEVENT_NEWBAR_M1: return(" M1 "); // "New bar" event on M1 chart
case CHARTEVENT_NEWBAR_M2: return(" M2 "); // "New bar" event on M2 chart
case CHARTEVENT_NEWBAR_M3: return(" M3 "); // "New bar" event on M3 chart
case CHARTEVENT_NEWBAR_M4: return(" M4 "); // "New bar" event on M4 chart
case CHARTEVENT_NEWBAR_M5: return(" M5 "); // "New bar" event on M5 chart
case CHARTEVENT_NEWBAR_M6: return(" M6 "); // "New bar" event on M6 chart
case CHARTEVENT_NEWBAR_M10:return(" M10 "); // "New bar" event on M10 chart
case CHARTEVENT_NEWBAR_M12:return(" M12 "); // "New bar" event on M12 chart
case CHARTEVENT_NEWBAR_M15:return(" M15 "); // "New bar" event on M15 chart
case CHARTEVENT_NEWBAR_M20:return(" M20 "); // "New bar" event on M20 chart
case CHARTEVENT_NEWBAR_M30:return(" M30 "); // "New bar" event on M30 chart
case CHARTEVENT_NEWBAR_H1: return(" H1 "); // "New bar" event on H1 chart
case CHARTEVENT_NEWBAR_H2: return(" H2 "); // "New bar" event on H2 chart
case CHARTEVENT_NEWBAR_H3: return(" H3 "); // "New bar" event on H3 chart
case CHARTEVENT_NEWBAR_H4: return(" H4 "); // "New bar" event on H4 chart
case CHARTEVENT_NEWBAR_H6: return(" H6 "); // "New bar" event on H6 chart
case CHARTEVENT_NEWBAR_H8: return(" H8 "); // "New bar" event on H8 chart
case CHARTEVENT_NEWBAR_H12:return(" H12 "); // "New bar" event on H12 chart
case CHARTEVENT_NEWBAR_D1: return(" D1 "); // "New bar" event on D1 chart
case CHARTEVENT_NEWBAR_W1: return(" W1 "); // "New bar" event on W1 chart
case CHARTEVENT_NEWBAR_MN1:return(" MN1 "); // "New bar" event on MN chart
case CHARTEVENT_TICK :return(" tick "); // "New tick" event
default: return(" Unknown event ");
}
return(" Unknown event ");
}
ENUM_TIMEFRAMES EventToPeriod(long event)
{
ENUM_CHART_EVENT_SYMBOL event_current=(ENUM_CHART_EVENT_SYMBOL)event;
switch(event_current)
{
case CHARTEVENT_NEWBAR_M1: return(PERIOD_M1);
case CHARTEVENT_NEWBAR_M2: return(PERIOD_M2);
case CHARTEVENT_NEWBAR_M3: return(PERIOD_M3);
case CHARTEVENT_NEWBAR_M4: return(PERIOD_M4);
case CHARTEVENT_NEWBAR_M5: return(PERIOD_M5);
case CHARTEVENT_NEWBAR_M6: return(PERIOD_M6);
case CHARTEVENT_NEWBAR_M10:return(PERIOD_M10);
case CHARTEVENT_NEWBAR_M12:return(PERIOD_M12);
case CHARTEVENT_NEWBAR_M15:return(PERIOD_M15);
case CHARTEVENT_NEWBAR_M20:return(PERIOD_M20);
case CHARTEVENT_NEWBAR_M30:return(PERIOD_M30);
case CHARTEVENT_NEWBAR_H1: return(PERIOD_H1);
case CHARTEVENT_NEWBAR_H2: return(PERIOD_H2);
case CHARTEVENT_NEWBAR_H3: return(PERIOD_H3);
case CHARTEVENT_NEWBAR_H4: return(PERIOD_H4);
case CHARTEVENT_NEWBAR_H6: return(PERIOD_H6);
case CHARTEVENT_NEWBAR_H8: return(PERIOD_H8);
case CHARTEVENT_NEWBAR_H12:return(PERIOD_H12);
case CHARTEVENT_NEWBAR_D1: return(PERIOD_D1);
case CHARTEVENT_NEWBAR_W1: return(PERIOD_W1);
case CHARTEVENT_NEWBAR_MN1:return(PERIOD_MN1);
default: return(PERIOD_CURRENT);
}
return(PERIOD_CURRENT);
}
#define MSG_CONTROL_PANEL_MCM "MCM Control panel for multicurrency mode "
#define MSG_EVENT "Waiting for event... "
#define MSG_SELECT_SYMBOL "Select symbols for multicurrency mode "
#define MSG_SYMBOL_CHANGE "The number of symbols in Market Watch has changed "
#define MSG_HELP "Help - brief information about program "
#define MSG_SYMBOL_PERIOD "Set symbol and period for the currenct chart "
#define MSG_ESTABLISH_EVENTS "Set event for selected symbol "
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//+------------------------------------------------------------------+
//| Class CControlElement. |
//| Purpose: A set of functions for menu |
//+------------------------------------------------------------------+
class CControlElement : public CChartObjectButton
{
protected:
//---
int m_intparam;
uint m_uintparam;
//---
//--- Button parameters:
ENUM_BASE_CORNER m_corner; // corner
int m_coord_x; // X coordinate
int m_coord_y; // Y coordinate
//---
//--- Control panel parameters:
string m_description; // description
int m_size_x; // X size
int m_size_y; // Y size
int m_state; // status
int m_state_select; // is selected
int m_flag_visibility;
color m_col_bg; // background color
color m_col_font; // text color
color m_col_select;
string m_font; // font name
int m_size_font; // font size
ENUM_OBJECT m_type; // object type
//---
public:
void CControlElement();
bool CreateElement(
ENUM_OBJECT type, // object type
string name, // object name (button name)
string description, // description or button text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
color col_select,
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
int state=0, // button status
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // chart binding corner
);
bool DisplayElement();
bool Display(int coord_x, int coord_y, int size_x, int size_y);
bool CreateButton( // Creates a button
string name, // Button name
string description, // Description or button text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
int state=0, // button status
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
);
bool DisplayButton(); // Show button
bool CreateEdit( // Creates an Edit
string name, // name
string text, // text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
);
bool DisplayBackground();// Show background on the chart
bool CreateLabel( // Creates a Label
string name, // object name (text label)
int coord_x, // X coordinate
int coord_y, // Y coordinate
color col_font, // font color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding color
);
bool DisplayLabel(); // Show label
int Type() const { return(m_type); }
bool Hide(); // Hide object
bool Coord_x(int coord_x);
int Coord_x() {return(m_coord_x);}
bool Coord_y(int coord_y);
int Coord_y() {return(m_coord_y);}
bool Descript(string description);
void StateElement(bool state) {m_state=state;}
void ColorElement(color col_font) {m_col_font=col_font; Color(col_font);}
bool StateElement() { return(m_state);}
void FlagVisibility(int flag) {m_flag_visibility=flag;}
int FlagVisibility() {return(m_flag_visibility);}
void ChangeStateSelect() {m_state_select=m_state;}
void ChangeState() {m_state=m_state_select;}
void IntParam(int param) {m_intparam=param;}
int IntParam() {return(m_intparam);}
void UIntParam(int param) {m_uintparam=param;}
int UIntParam() {return(m_uintparam);}
};
void CControlElement :: CControlElement()
{
m_intparam=-1;
m_uintparam=0;
//--- Chart paramters:
m_corner =CORNER_LEFT_LOWER; // binding corner
m_chart_id =ChartID(); // chart ID
m_window =0; // chart window
m_num_points=1; // number of anchor points of object
//--- Control element parameters:
m_state=false; // status
m_col_bg=(color)ChartGetInteger(m_chart_id,CHART_COLOR_BACKGROUND);
m_col_font=(color)ChartGetInteger(m_chart_id,CHART_COLOR_FOREGROUND);
m_flag_visibility=OBJ_ALL_PERIODS;
m_font="Segoe UI Semibold"; // font name
m_size_font=10; // font size
//---
}
bool CControlElement :: Descript(string description)
{
m_description=description;
if(!Description(description)) return(false);
return(true);
}
bool CControlElement :: Coord_x(int coord_x)
{
m_coord_x=coord_x;
if(!X_Distance(coord_x)) return(false);
return(true);
}
bool CControlElement :: Coord_y(int coord_y)
{
m_coord_y=coord_y;
if(!Y_Distance(coord_y)) return(false);
return(true);
}
//+------------------------------------------------------------------+
//| Show control element |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CControlElement :: DisplayButton()
{
if(!Create(m_chart_id,m_name,m_window,m_coord_x,m_coord_y,m_size_x,m_size_y)) return(false); // Create button
if(!Description(m_description)) return(false); // description or button text
if(!BackColor (m_col_bg)) return(false); // background color
if(!Font(m_font)) return(false); // font name
if(!FontSize(m_size_font)) return(false); // font size
if(!Color(m_col_font)) return(false); // text color
if(!State(m_state)) return(false); // state
if(!Corner(m_corner)) return(false); // binding corner
return(true);
}
bool CControlElement :: DisplayElement()
{
if(!Create(m_chart_id,m_name,m_window,m_coord_x,m_coord_y,m_size_x,m_size_y)) return(false); // Create element
if(!Description(m_description)) return(false); // description of text
if(!BackColor (m_col_bg)) return(false); // background color
if(!Font(m_font)) return(false); // font name
if(!FontSize(m_size_font)) return(false); // font size
if(m_state) { if(!Color(m_col_select)) return(false); }// selected text color
else { if(!Color(m_col_font)) return(false); }// text color
if(!State(m_state)) return(false); // state
if(!Corner(m_corner)) return(false); // binding corner
if(!SetInteger(OBJPROP_READONLY,true)) return(false);
if(!Timeframes(m_flag_visibility)) return(false);
return(true);
}
bool CControlElement :: Display(int coord_x, int coord_y, int size_x, int size_y)
{
m_coord_x=coord_x;
m_coord_y=coord_y;
m_size_x=size_x;
m_size_y=size_y;
if(!DisplayElement()) return(false);
return(true);
}
bool CControlElement :: CreateElement(
ENUM_OBJECT type, // object type
string name, // object name
string description, // description of button text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
color col_select, // selected text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
int state=0, // state
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
m_chart_id=chart_id; // chart ID
m_name=name; // object name
m_window=window; // chart window
m_num_points=1; // number of anchor points of object
//--- Button parameters:
m_corner=corner; // binding corner
m_coord_x=coord_x; // X coordinate
m_coord_y=coord_y; // Y coordinate
//---
//--- Button parameters:
m_type=type;
m_description=description; // description
m_size_x=size_x; // X size
m_size_y=size_y; // Y size
m_state=state; // state
m_col_bg=col_bg; // background color
m_col_font=col_font; // text color
m_col_select=col_select;
m_font=font; // font name
m_size_font=size_font; // font size
//---
return(true);
}
//+------------------------------------------------------------------+
//| Create a button |
//| INPUT: ... |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CControlElement :: CreateButton(
string name, // object name
string description, // description or text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
int state=0, // state
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
m_chart_id=chart_id; // chart ID
m_name=name; // object name
m_window=window; // chart window
m_num_points=1; // number of anchor points of object
//--- Button parameters:
m_corner=corner; // binding corner
m_coord_x=coord_x; // X coordinate
m_coord_y=coord_y; // Y coordinate
//---
//--- Button parameters:
m_type=OBJ_BUTTON;
m_description=description; // object description or text
m_size_x=size_x; // X size
m_size_y=size_y; // Y size
m_state=state; // state
m_col_bg=col_bg; // background color
m_col_font=col_font; // text color
m_font=font; // font name
m_size_font=size_font; // font size
//---
if(!DisplayButton()) return(false);
return(true);
}
//+------------------------------------------------------------------+
//| Create an Edit |
//| INPUT: ... |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CControlElement :: CreateEdit(
string name, // object name
string text, // text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // border color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
m_chart_id=chart_id; // chart id
m_name=name; // name
m_description=text;
m_window=window; // chart window
m_num_points=1; // number of anchor points of object
//--- Parameters:
m_corner=corner; // binding corner
m_coord_x=coord_x; // X coordinate
m_coord_y=coord_y; // Y coordinate
//---
//--- Edit field parameters:
m_type=OBJ_EDIT;
m_size_x=size_x; // X size
m_size_y=size_y; // Y size
m_col_bg=col_bg; // background color
m_col_font=col_font; // border color
m_font=font; // font name
m_size_font=size_font; // font size
//---
return(true);
}
//+------------------------------------------------------------------+
//| Show Edit field |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CControlElement :: DisplayBackground()
{
if(!Create(m_chart_id,m_name,m_window,m_coord_x,m_coord_y,m_size_x,m_size_y)) return(false); // Create edit
if(!BackColor (m_col_bg)) return(false); // background color
if(!Color(m_col_font)) return(false); // text color
if(!Corner(m_corner)) return(false); // binding corner
if(!Description(m_description)) return(false); // description
if(!Font(m_font)) return(false); // font name
if(!FontSize(m_size_font)) return(false); // font size
if(!SetInteger(OBJPROP_READONLY,true)) return(false);
return(true);
}
bool CControlElement :: CreateLabel(
string name, // object name
int coord_x, // X coordinate
int coord_y, // Y coordinate
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
m_chart_id=chart_id; // chart id
m_name=name; // object name
m_window=window; // chart window
m_num_points=1; // number of anchor points of object
//--- label parameters:
m_corner=corner; // binding corner
m_coord_x=coord_x; // X coordinate
m_coord_y=coord_y; // Y coordinate
//---
//--- label parameters:
m_type=OBJ_LABEL;
m_col_font=col_font; // text color
m_font=font; // font name
m_size_font=size_font; // font size
//---
// if(!DisplayLabel()) return(false);
return(true);
}
//+------------------------------------------------------------------+
//| Show label |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CControlElement :: DisplayLabel()
{
if(!Create(m_chart_id,m_name,m_window,m_coord_x,m_coord_y)) return(false); // Create label
if(!Font(m_font)) return(false); // font name
if(!Color(m_col_font)) return(false); // text color
if(!FontSize(m_size_font)) return(false); // font size
if(!Corner(m_corner)) return(false); // binding corner
return(true);
}
//+------------------------------------------------------------------+
//| Hide element |
//| The hidden element can be show using Display method |
//| Display() |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CControlElement :: Hide()
{
if(!ObjectDelete(m_chart_id,m_name)) return(false);
return(true);
}
#include <Arrays\List.mqh>
class CMenuHorizontal : public CList
{
protected:
long m_chart_id;
string m_name[];
string m_description[];
int m_chart_width;
int m_size_x[];
int m_coord_y;
int m_coord_x;
int m_width;
int m_height;
int m_quantity_buttons;
bool m_flag_status_message;
bool m_flag_menu_horizontal;
public:
void CMenuHorizontal();
CObject *CreateElement(
string name, // object name
string description, // description or text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
int state=0, // state
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
);
bool Create(
string& name_buttom[],// button names
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=10, // font size
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
);
bool Delete();
void StatusMessage(string Message);
bool GetFlagStatusMessage() {return(m_flag_status_message);}
bool GetFlagMenuHorizontal() {return(m_flag_menu_horizontal);}
int GetChartWidth() {return(m_chart_width);}
bool AlignmentCenter();
bool Shift_x(int shift=0);
bool Shift_y(int shift=0);
bool HideStatusMessage();
bool DisplayStatusMessage();
bool HideMenuHorizontal();
bool DisplayMenuHorizontal();
};
void CMenuHorizontal :: CMenuHorizontal()
{
m_flag_status_message=true;
m_flag_menu_horizontal=true;
}
bool CMenuHorizontal :: AlignmentCenter()
{
m_chart_width=(int)ChartGetInteger(m_chart_id,CHART_WIDTH_IN_PIXELS);
int menu_x=(m_chart_width>(m_width+5))?(m_chart_width-m_width)/2:5;
int shift=0;
if (m_coord_x!=menu_x)
{
shift=menu_x-m_coord_x;
m_coord_x=menu_x;
Shift_x(shift);
}
return(true);
}
bool CMenuHorizontal :: Shift_x(int shift=0)
{
int total=Total();
CControlElement *element;
for(int i=0;i<total;i++)
{
element=GetNodeAtIndex(i);
int coord_x=element.Coord_x();
if(!element.Coord_x(coord_x+shift)) return(false);
}
return(true);
}
bool CMenuHorizontal :: Shift_y(int shift=0)
{
int total=Total();
CControlElement *element;
for(int i=0;i<total;i++)
{
element=GetNodeAtIndex(i);
int coord_y=element.Coord_y();
if(!element.Coord_y(coord_y+shift)) return(false);
}
return(true);
}
CObject* CMenuHorizontal :: CreateElement(
string name, // object name
string description, // description or text
int coord_x, // X coordinate
int coord_y, // Y coordinate
int size_x, // X size
int size_y, // Y size
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font name
int size_font=8, // font size
int state=0, // state
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
CControlElement *button=new CControlElement;
if(!button.CreateButton(name,description,coord_x,coord_y,size_x,size_y,col_bg,col_font,font,size_font,state,chart_id,window,corner))
{
Print(__FUNCTION__," Error in creation of button ",GetLastError());
delete button;
button=NULL;
}
return(button);
}
bool CMenuHorizontal :: Create(
string& name_buttom[],// names
color col_bg, // background color
color col_font, // text color
string font="Segoe UI Semibold", // font color
int size_font=10, // font size
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
//--- Menu colors:
if(col_bg==CLR_NONE) col_bg=(color)ChartGetInteger(chart_id,CHART_COLOR_BACKGROUND);
if(col_font==CLR_NONE) col_font=(color)ChartGetInteger(chart_id,CHART_COLOR_FOREGROUND);
m_chart_id=chart_id;
m_width=0;
m_height=(size_font+1)*2;
m_coord_y=m_height*2;
m_quantity_buttons=ArraySize(name_buttom);
ArrayResize(m_name,m_quantity_buttons);
ArrayResize(m_description,m_quantity_buttons);
ArrayResize(m_size_x,m_quantity_buttons);
for(int i=0; i<m_quantity_buttons; i++)
{
m_name[i]=name_buttom[i];
m_description[i]=name_buttom[i];
m_size_x[i]=StringLen(m_description[i])*size_font+2;
// Print(StringLen(m_description[i])," ",m_size_x[i]);
m_width+=m_size_x[i]+1;
}
int width_chart=(int)ChartGetInteger(chart_id,CHART_WIDTH_IN_PIXELS);
m_coord_x=(width_chart>(m_width+5))?(width_chart-m_width)/2:5;
CControlElement *background=new CControlElement;
if(!background.CreateEdit("background","",m_coord_x,m_coord_y-m_height-1,m_width,m_height-1,col_bg,col_bg,font,size_font))//col_font))
{
Print(__FUNCTION__," Erro in creation of menu backround ",GetLastError());
delete background;
return(false);
}
Add(background);
if(!background.DisplayBackground()) return(false);
for(int i=0,buttom_x=m_coord_x; i<m_quantity_buttons; i++)
{
CObject *button_object=CreateElement(m_name[i],m_description[i],buttom_x,m_coord_y,m_size_x[i],m_height,col_bg,col_font,font,size_font,0,chart_id,window,corner);
if(button_object==NULL) return(false);
Add(button_object);
buttom_x+=m_size_x[i]+1;
}
CControlElement *status_control_panel=new CControlElement;
if(!status_control_panel.CreateLabel("● "+MSG_CONTROL_PANEL_MCM,m_coord_x,m_coord_y-m_height-2,col_font,font,size_font,chart_id,window,corner))
{
Print(__FUNCTION__," Error in creation of text label ",GetLastError());
delete status_control_panel;
return(false);
}
Add(status_control_panel);
if(!status_control_panel.DisplayLabel()) return(false);
return(true);
}
bool CMenuHorizontal :: Delete()
{
Clear();
return(true);
}
void CMenuHorizontal :: StatusMessage(string Message)
{
CControlElement *message=GetLastNode();
message.Description(" ● "+Message);
ChartRedraw();
}
//+------------------------------------------------------------------+
//| Hide horizontal menu in the lower bottom corner |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CMenuHorizontal :: HideMenuHorizontal()
{
m_flag_menu_horizontal=false;
CControlElement *element;
int total=Total();
for(int i=0;i<total;i++)
{
// if(i!=2)
if(i!=1 && i!=2)
{
element=GetNodeAtIndex(i);
if(!ObjectDelete(m_chart_id,element.Name())) return(false);
}
else if(i==2)
{
element=GetNodeAtIndex(i);
element.Descript("˃");
}
}
// element=GetNodeAtIndex(2);
// Shift_x(1-element.Coord_x());
Shift_x(1-m_coord_x);
if(GetFlagStatusMessage()) Shift_y(-m_height);
m_coord_x=1;
return(true);
}
//+------------------------------------------------------------------+
//| Show horizontal menu |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CMenuHorizontal :: DisplayMenuHorizontal()
{
m_flag_menu_horizontal=true;
if(GetFlagStatusMessage()) Shift_y(m_height);
CControlElement *element;
int total=Total();
element=GetFirstNode();
if(!element.DisplayBackground()) return(false);
for(int i=1;i<total-1;i++)
{
if(i!=1 && i!=2)
{
element=GetNodeAtIndex(i);
if(!element.DisplayButton()) return(false);
}
else if(i==2)
{
element=GetNodeAtIndex(i);
element.Descript("˂");
}
}
element=GetLastNode();
if(!element.DisplayLabel()) return(false);
AlignmentCenter();
return(true);
}
//+------------------------------------------------------------------+
//| Hide status string |
//| The hidden status string can be shown using Display method |
//| Display() |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool CMenuHorizontal :: HideStatusMessage()
{
m_flag_status_message=false;
CControlElement *element;
element=GetFirstNode();
if(!ObjectDelete(m_chart_id,element.Name())) return(false);
element=GetLastNode();
if(!ObjectDelete(m_chart_id,element.Name())) return(false);
element=GetPrevNode();
element.Descript("˄");
Shift_y(-m_height);
return(true);
}
bool CMenuHorizontal :: DisplayStatusMessage()
{
m_flag_status_message=true;
CControlElement *element;
Shift_y(m_height);
element=GetFirstNode();
if(!element.DisplayBackground()) return(false);
element=GetLastNode();
if(!element.DisplayLabel()) return(false);
element=GetPrevNode();
element.Descript("˅");
return(true);
}
// Symbol events structure
struct stEventSymbol
{
string symbol; // Symbol
ENUM_CHART_EVENT_SYMBOL event; // Event flag
};
//+------------------------------------------------------------------+
//| MCM Control panel initalization method. |
//| It shoul be called from OnInit() function only. |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
#define INDICATOR_NAME "iControl panel MCM"
int _handle_control_panel=INVALID_HANDLE;
bool InitControlPanelMCM(color init_bg_color=Gray, // Menu background color
color init_font_color=Gainsboro,// Text color
color init_select_color=Yellow, // Selected text color
int init_font_size=10) // Font size
{
//--- check if it already exist
int window=-1;
window=ChartWindowFind(0,"Control panel MCM");
if(window!=-1)
{
Print(__FUNCTION__+" "+INDICATOR_NAME," already installed");
return(true);
}
//--- launch the iControl panel MCM.mq5 custom indicator
_handle_control_panel=iCustom(_Symbol,_Period,INDICATOR_NAME,init_bg_color,init_font_color,init_select_color,init_font_size);
if(_handle_control_panel==INVALID_HANDLE)
{ Print("Error in "+INDICATOR_NAME); return(false);}
bool Testing=((bool)MQL5InfoInteger(MQL5_TESTING) || (bool)MQL5InfoInteger(MQL5_OPTIMIZATION));
if(!Testing)
if(!ChartIndicatorAdd(ChartID(),0,_handle_control_panel))
{
Alert(__FUNCTION__," Error in attaching of MCM panel to the chart, error N: ",GetLastError());
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
//| MCM Control panel deinitialization function |
//| It should be called from OnDeinit() function only |
//| INPUT: no. |
//| OUTPUT: true - if successful |
//| false - if error |
//| REMARK: no. |
//+------------------------------------------------------------------+
bool DeinitControlPanelMCM()
{
//--- Release iControl panel MCA.mq5
if(_handle_control_panel!=INVALID_HANDLE)
if(IndicatorRelease(_handle_control_panel)) Print("Deinitialization of MCM Control panel: Successful");
else
{
Print("Error in deinitialization of MCM Control Panel");
return(false);
}
// Print("Number of indicators ", ChartIndicatorsTotal(ChartID(),0));
// Print("Indicator name ", ChartIndicatorName(ChartID(),0,0)," ----- ","Control panel MCM");
//--- check if it already installed:
int window=-1;
window=ChartWindowFind(0,"Control panel MCM");
if(window!=-1)
{
if(!ChartIndicatorDelete(ChartID(),0,"Control panel MCM"))
{
Print(__FUNCTION__+" Error in detaching of "+INDICATOR_NAME+" from chart");
return(false);
}
Print(__FUNCTION__+": "+INDICATOR_NAME+" removed from chart");
return(true);
}
return(true);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class CVertical_scrolled_menus : public CList
{
protected:
long m_chart_id;
int m_window;
ENUM_BASE_CORNER m_corner;
string m_menu_name;
string m_name_save_buttom;
int m_menu_coord_y;
int m_menu_coord_x;
int m_menu_width;
int m_menu_height;
color m_menu_col_bg;
color m_menu_col_font;
color m_menu_col_select;
int m_size_font;
string m_font;
int m_width_scrolling_line;
bool m_save_buttom;
bool m_menu_visibility;
string m_element_text[];
int m_element_quantity;
int m_element_min;
int m_element_max;
int m_element_width;
int m_element_height;
int m_element_begin;
bool m_flag_status_message;
bool m_flag_menu_horizontal;
public:
void CVertical_scrolled_menus();
CObject* CreateElement(
string text, // text color
int coord_x, // X coordinate
int coord_y, // Y coordinate
color col_font, // text color
color col_select, // selected text color
string font="Segoe UI Semibold", // font name
int size_font=10, // font size
long chart_id=0, // chart ID
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
);
bool Create(
string name, // vertical menu color
string name_save_buttom, // "Save" button name
string& text_lebel[], // text of the labels
int coord_x, // X coordinate
int coord_y, // Y coordinate
color col_bg, // background color
color col_font, // text color
color col_select, // selected text color
string font="Segoe UI Semibold", // font name
int size_font=10, // font size
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
);
bool CreateScrollingLine();
int SelectOneElement(string name);
int SelectMuchElement(string name);
int GetMenuWidth() {return(m_menu_width+m_width_scrolling_line);}
string Name() {return(m_menu_name);}
void Name(string name) {m_menu_name=name;}
bool Scrolling(string button_scroll);
bool Display(int coord_x,int coord_y);
bool Hide();
bool Visibility() {return(m_menu_visibility);}
bool ChangeState();
bool ChangeStateSelect();
void Quantity(int quantity) {m_element_quantity=quantity;}
bool SynchronizationTradingTools();
};
void CVertical_scrolled_menus :: CVertical_scrolled_menus()
{
m_chart_id=ChartID();
m_width_scrolling_line=4;
//--- Colors of menu:
m_menu_col_bg=(color)ChartGetInteger(m_chart_id,CHART_COLOR_BACKGROUND);
m_menu_col_font=(color)ChartGetInteger(m_chart_id,CHART_COLOR_FOREGROUND);
m_menu_col_select=m_menu_col_font;
m_menu_name="??????";
m_element_begin=0;
m_menu_visibility=false;
}
CObject* CVertical_scrolled_menus :: CreateElement(
string text, // text
int coord_x, // X coordinate
int coord_y, // Y coordinate
color col_font, // text color
color col_select, // selected color
string font="Segoe UI Semibold", // font name
int size_font=10, // font size
long chart_id=0, // chart id
int window=0, // chart window
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
CControlElement *lebel=new CControlElement;
if(!lebel.CreateElement(OBJ_LABEL,text,text,coord_x,coord_y,0,0,col_font,col_font,col_select,font,size_font,0,chart_id,window,corner))
{
Print(__FUNCTION__," Error in creation of text label ",GetLastError());
delete lebel;
lebel=NULL;
}
return(lebel);
}
bool CVertical_scrolled_menus :: Display(int coord_x,int coord_y)
{
bool result=true;
m_element_begin=0;
//--- Height
long height_chart;
result&=ChartGetInteger(m_chart_id,CHART_HEIGHT_IN_PIXELS,m_window,height_chart);
m_element_max=(int)((height_chart-coord_y)/m_element_height-3+m_save_buttom);
m_element_max=MathMin(m_element_quantity,m_element_max);
m_element_max=MathMax(m_element_min,m_element_max);
m_menu_height=(m_element_max+2-m_save_buttom)*m_element_height;
//---
m_width_scrolling_line=((m_element_quantity>m_element_max)?4:2)*m_size_font;
m_menu_coord_x=coord_x;
m_menu_coord_y=coord_y+m_menu_height+1;
CControlElement *element=GetFirstNode();
element.Display(m_menu_coord_x,m_menu_coord_y,m_menu_width+m_width_scrolling_line,m_menu_height);
element=GetNextNode();
element.Display(m_menu_coord_x+m_size_font/2, m_menu_coord_y, m_menu_width+m_size_font, m_element_height-2);
int element_quantity=ArraySize(m_element_text);
for(int i=0,lebel_y=m_menu_coord_y-m_element_height; i<m_element_quantity; i++)
{
element=GetNextNode();
element.Coord_x(m_menu_coord_x+m_size_font);
element.Coord_y(lebel_y);
if(i<m_element_max) element.Display(m_menu_coord_x+m_size_font,lebel_y,m_menu_width+m_width_scrolling_line,m_menu_height);
else element.Hide();
lebel_y-=m_element_height;
}
/* int element_quantity=ArraySize(m_element_text);
for(int i=0, j=0,lebel_y=m_menu_coord_y-m_element_height; i<element_quantity; i++)
{
element=GetNextNode();
string name=element.Name();
int visibility=element.FlagVisibility();
if(element.FlagVisibility()==OBJ_ALL_PERIODS)
{
element.Coord_x(m_menu_coord_x+m_size_font);
element.Coord_y(lebel_y);
if(j<m_element_max) element.Display(m_menu_coord_x+m_size_font,lebel_y,m_menu_width+m_width_scrolling_line,m_menu_height);
else element.Hide();
MoveToIndex(j+2);
lebel_y-=m_element_height;
j++;
}
}
*/
element=GetNodeAtIndex(element_quantity+2);
element.Display(m_menu_coord_x,m_menu_coord_y,m_menu_width+m_width_scrolling_line,m_element_height);
element=GetNextNode();
if(m_element_quantity>m_element_max) element.FlagVisibility(OBJ_ALL_PERIODS); else element.FlagVisibility(OBJ_NO_PERIODS);
element.Display(m_menu_coord_x+m_menu_width+m_width_scrolling_line-5-m_size_font-5,m_menu_coord_y-2*m_element_height,m_size_font+4,m_element_height*(m_element_max-2));
element=GetNextNode();
if(m_element_quantity>m_element_max) element.FlagVisibility(OBJ_ALL_PERIODS); else element.FlagVisibility(OBJ_NO_PERIODS);
element.Display(m_menu_coord_x+m_menu_width+m_width_scrolling_line-5-m_size_font-5,m_menu_coord_y-m_element_height-5,m_size_font+4,m_element_height-5);
element=GetNextNode();
if(m_element_quantity>m_element_max) element.FlagVisibility(OBJ_ALL_PERIODS); else element.FlagVisibility(OBJ_NO_PERIODS);
element.Display(m_menu_coord_x+m_menu_width+m_width_scrolling_line-5-m_size_font-5,m_menu_coord_y-m_element_height*(m_element_max),m_size_font+4,m_element_height-5);
element=GetNextNode();
if(m_save_buttom) element.FlagVisibility(OBJ_NO_PERIODS); else element.FlagVisibility(OBJ_ALL_PERIODS);
element.Display(m_menu_coord_x+1,m_menu_coord_y-m_element_height*(m_element_max+1),m_menu_width+m_width_scrolling_line-2,m_element_height-1);
m_menu_visibility=true;
return(true);
}
bool CVertical_scrolled_menus :: Hide()
{
CControlElement *element=GetFirstNode();
for(int i=0; i<Total(); i++)
{
element.Hide();
element=GetNextNode();
}
m_menu_visibility=false;
return(true);
}
bool CVertical_scrolled_menus :: ChangeStateSelect()
{
CControlElement *element=GetFirstNode();
for(int i=0; i<Total(); i++)
{
element.ChangeStateSelect();
element=GetNextNode();
}
return(true);
}
bool CVertical_scrolled_menus :: ChangeState()
{
CControlElement *element=GetFirstNode();
for(int i=0; i<Total(); i++)
{
element.ChangeState();
element=GetNextNode();
}
return(true);
}
bool CVertical_scrolled_menus :: Create(
string name, // name of the vertical menu
string name_save_buttom, // "save" button name, set "" if isn't necessary
string& text[], // menu button text
int coord_x, // X coordinate
int coord_y, // Y coordinate
color col_bg, // background color
color col_font, // text color
color col_select, // selected text color
string font="Segoe UI Semibold", // font name
int size_font=10, // font size
long chart_id=0, // chart id
int window=0, // char windowо
ENUM_BASE_CORNER corner=CORNER_LEFT_LOWER // binding corner
)
{
bool result=true;
//--- Menu colors:
// if(col_bg==CLR_NONE) result&=ChartGetInteger(chart_id,CHART_COLOR_BACKGROUND,m_menu_col_bg);
// else m_menu_col_bg=col_bg;
// if(col_font==CLR_NONE) result&=ChartGetInteger(chart_id,CHART_COLOR_FOREGROUND,m_menu_col_font);
// else m_menu_col_font=col_font;
if(col_bg!=CLR_NONE) m_menu_col_bg=col_bg;
if(col_font!=CLR_NONE) m_menu_col_font=col_font;
if(col_select!=CLR_NONE) m_menu_col_select=col_select;
//---
m_menu_name=name;
m_name_save_buttom=name_save_buttom;
m_chart_id=chart_id;
m_window=window;
m_corner=corner;
m_size_font=size_font;
m_font=font;
m_element_begin=0;
m_menu_width=0;
m_element_quantity=ArraySize(text);
if(ArrayResize(m_element_text,m_element_quantity)==-1) result=false;
m_save_buttom=(m_name_save_buttom=="");
//--- Menu height
long height_chart;
result&=ChartGetInteger(m_chart_id,CHART_HEIGHT_IN_PIXELS,m_window,height_chart);
m_element_height=m_size_font*2;
m_element_min=2;
m_element_max=(int)((height_chart-coord_y)/m_element_height-3+m_save_buttom);
m_element_max=MathMin(m_element_quantity,m_element_max);
m_element_max=MathMax(m_element_min,m_element_max);
m_menu_height=(m_element_max+2-m_save_buttom)*m_element_height;
//---
m_width_scrolling_line=((m_element_quantity>m_element_max)?m_width_scrolling_line:2)*m_size_font;
//--- Menu width
for(int i=0; i<m_element_quantity; i++)
{
m_element_text[i]=text[i];
m_element_width=(StringLen(m_element_text[i]))*(size_font);
m_menu_width=(m_menu_width>m_element_width)?m_menu_width:m_element_width;
}
//---
m_menu_coord_x=coord_x;
m_menu_coord_y=coord_y+m_menu_height+1;
CControlElement *element=new CControlElement;
if(!element.CreateElement(OBJ_EDIT,m_menu_name+"background_chart","",m_menu_coord_x,m_menu_coord_y,m_menu_width+m_width_scrolling_line,m_menu_height,m_menu_col_bg,m_menu_col_font,m_menu_col_select,font,size_font))
{
Print(__FUNCTION__," Error in creation of menu background ",GetLastError());
delete element;
return(false);
}
Add(element);
element=new CControlElement;
if(!element.CreateElement(OBJ_EDIT,m_menu_name+"select","",m_menu_coord_x+size_font/2, m_menu_coord_y, m_menu_width+size_font, m_element_height-2,m_menu_col_bg,m_menu_col_select,m_menu_col_select,font,size_font))
{
Print(__FUNCTION__," Error in creation of menu backround ",GetLastError());
delete element;
return(false);
}
Add(element);
for(int i=0,lebel_y=m_menu_coord_y-m_element_height; i<m_element_quantity; i++)
{
CObject *lebel=CreateElement(m_element_text[i],m_menu_coord_x+size_font,lebel_y,col_font,m_menu_col_select,font,size_font,chart_id,window,corner);
if(lebel==NULL) return(false);
Add(lebel);
lebel_y-=m_element_height;
}
element=new CControlElement;
if(!element.CreateElement(OBJ_EDIT,m_menu_name,m_menu_name,m_menu_coord_x,m_menu_coord_y,m_menu_width+m_width_scrolling_line,m_element_height,m_menu_col_bg,m_menu_col_font,m_menu_col_select,font,size_font))
{
Print(__FUNCTION__," Error in creation of menu item ",GetLastError());
delete element;
return(false);
}
Add(element);
CreateScrollingLine();
element=new CControlElement;
if(!element.CreateElement(OBJ_BUTTON,m_menu_name+"_button_save",m_name_save_buttom,m_menu_coord_x+1,m_menu_coord_y-m_element_height*(m_element_max+1),m_menu_width+m_width_scrolling_line-2,m_element_height-1,m_menu_col_bg,m_menu_col_font,m_menu_col_select,m_font,m_size_font,0,m_chart_id,m_window,m_corner))
{
Print(__FUNCTION__," Error in creation of menu button ",GetLastError());
delete element;
return(false);
}
Add(element);
if(m_save_buttom) element.FlagVisibility(OBJ_NO_PERIODS); else element.FlagVisibility(OBJ_ALL_PERIODS);
// Display(coord_x,coord_y);
return(true);
}
bool CVertical_scrolled_menus :: CreateScrollingLine()
{
CControlElement *scrolling_line=new CControlElement;
if(!scrolling_line.CreateElement(OBJ_BUTTON,m_menu_name+"scrolling_line"," ",m_menu_coord_x+m_menu_width+m_width_scrolling_line-5-m_size_font-5,m_menu_coord_y-2*m_element_height,m_size_font+4,m_element_height*(m_element_max-2),m_menu_col_bg,m_menu_col_font,m_menu_col_select,m_font,m_size_font,0,m_chart_id,m_window,m_corner))
{
Print(__FUNCTION__," Error in creation of menu button ",GetLastError());
delete scrolling_line;
return(false);
}
Add(scrolling_line);
if(m_element_quantity>m_element_max) scrolling_line.FlagVisibility(OBJ_ALL_PERIODS); else scrolling_line.FlagVisibility(OBJ_NO_PERIODS);
CControlElement *button_up=new CControlElement;
if(!button_up.CreateElement(OBJ_BUTTON,m_menu_name+"▲","▲",m_menu_coord_x+m_menu_width+m_width_scrolling_line-5-m_size_font-5,m_menu_coord_y-m_element_height-5,m_size_font+4,m_element_height-5,m_menu_col_bg,m_menu_col_font,m_menu_col_select,m_font,m_size_font,0,m_chart_id,m_window,m_corner))
{
Print(__FUNCTION__," Error in creation of menu button ",GetLastError());
delete button_up;
return(false);
}
Add(button_up);
if(m_element_quantity>m_element_max) button_up.FlagVisibility(OBJ_ALL_PERIODS); else button_up.FlagVisibility(OBJ_NO_PERIODS);
CControlElement *button_dn=new CControlElement;
if(!button_dn.CreateElement(OBJ_BUTTON,m_menu_name+"▼","▼",m_menu_coord_x+m_menu_width+m_width_scrolling_line-5-m_size_font-5,m_menu_coord_y-m_element_height*(m_element_max),m_size_font+4,m_element_height-5,m_menu_col_bg,m_menu_col_font,m_menu_col_select,m_font,m_size_font,0,m_chart_id,m_window,m_corner))
{
Print(__FUNCTION__," Error in creation of menu button ",GetLastError());
delete button_dn;
return(false);
}
Add(button_dn);
if(m_element_quantity>m_element_max) button_dn.FlagVisibility(OBJ_ALL_PERIODS); else button_dn.FlagVisibility(OBJ_NO_PERIODS);
return(true);
}
int CVertical_scrolled_menus :: SelectMuchElement(string name)
{
int prev_id_select=0;
CControlElement *element;
element=GetNodeAtIndex(1);
int coord_y=element.Coord_y()+1;
element.Coord_y(m_menu_coord_y);
for(int i=0;i<m_element_quantity;i++)
{
element=GetNodeAtIndex(i+2);
// if(name==m_element_text[i])
if(name==element.Name())
{
if(coord_y==element.Coord_y()) element.StateElement(element.StateElement()^true);
color cur_color=element.StateElement()? m_menu_col_select:m_menu_col_font;
element.Color(cur_color);
coord_y=element.Coord_y()-1;
element=GetNodeAtIndex(1);
element.Coord_y(coord_y);
element.Color(cur_color);
return(i);
}
}
return(-1);
}
int CVertical_scrolled_menus :: SelectOneElement(string name="")
{
int prev_id_select=0;
CControlElement *element;
element=GetNodeAtIndex(1);
element.Coord_y(m_menu_coord_y);
for(int i=0;i<m_element_quantity;i++)
{
element=GetNodeAtIndex(i+2);
if(element.StateElement())
{
prev_id_select=i+1;
if(name=="") name=element.Name();
break;
}
}
for(int i=0;i<m_element_quantity;i++)
{
element=GetNodeAtIndex(i+2);
// if(name==m_element_text[i])
if(name==element.Name())
{
element.StateElement(true);
element.Color(m_menu_col_select);
int coord_y=element.Coord_y()-1;
element=GetNodeAtIndex(1);
element.Coord_y(coord_y);
if(prev_id_select!=0 && prev_id_select!=i+1)
{
element=GetNodeAtIndex(prev_id_select+1);
element.StateElement(false);
element.Color(m_menu_col_font);
}
return(i);;
}
}
return(prev_id_select-1);
}
bool CVertical_scrolled_menus :: Scrolling(string button_scroll)
{
CControlElement *element;
if(button_scroll==m_menu_name+"scrolling_line")
{
element=GetNodeAtIndex(Total()-4);
element.State(false);
}
if(button_scroll==m_menu_name+"▲")
{
if(m_element_begin==0)
{
element=GetNodeAtIndex(Total()-2);
element.State(false);
element=GetPrevNode();
element.State(true);
return(true);
}
element=GetNodeAtIndex(m_element_begin+1);
element.Coord_y(m_menu_coord_y-m_element_height);
element.DisplayElement();
for(int i=0,lebel_y=m_menu_coord_y-2*m_element_height; i<m_element_max-1; i++)
{
element=GetNodeAtIndex(m_element_begin+i+2);
string name=element.Name();
element.Coord_y(lebel_y);
lebel_y-=m_element_height;
}
element=GetNodeAtIndex(m_element_begin+m_element_max+1);
element.Coord_y(m_menu_coord_y);
element.Hide();
m_element_begin--;
element=GetNodeAtIndex(Total()-2);
element.State(false);
element=GetPrevNode();
element.State(false);
return(true);
}
if(button_scroll==m_menu_name+"▼")
{
if(m_element_begin>=m_element_quantity-m_element_max)
{
element=GetNodeAtIndex(Total()-2);
element.State(true);
element=GetPrevNode();
element.State(false);
return(true);
}
element=GetNodeAtIndex(m_element_begin+2);
element.Coord_y(m_menu_coord_y);
element.Hide();
for(int i=1,lebel_y=m_menu_coord_y-m_element_height; i<m_element_max; i++)
{
element=GetNodeAtIndex(m_element_begin+i+2);
string name=element.Name();
element.Coord_y(lebel_y);
lebel_y-=m_element_height;
}
element=GetNodeAtIndex(m_element_begin+m_element_max+2);
element.Coord_y(m_menu_coord_y-m_menu_height+m_element_height*(2-m_save_buttom));
element.DisplayElement();
m_element_begin++;
element=GetNodeAtIndex(Total()-2);
element.State(false);
element=GetPrevNode();
element.State(false);
return(true);
}
// SelectOneElement();
return(true);
}
bool CVertical_scrolled_menus :: SynchronizationTradingTools()
{
Quantity(SymbolsTotal(true));
for(int j=0;j<SymbolsTotal(true);j++)
{
for(int pos=0;pos<SymbolsTotal(false);pos++) // loop on all symbols
{
CControlElement *element=GetNodeAtIndex(pos+2);
if(SymbolName(j,true)==element.Name())
{
Exchange(GetNodeAtIndex(pos+2),GetNodeAtIndex(j+2));
break;
}
}
}
return(true);
}