//+------------------------------------------------------------------+ //| ChartObjectPanel.mqh | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #include #include #include //+------------------------------------------------------------------+ //| Class CChartObjectPanel. | //| Purpose: Class for grouping objects for managing a chart | //+------------------------------------------------------------------+ class CChartObjectPanel : public CChartObjectButton { protected: CArrayObj m_attachment; // array of attached objects CArrayInt m_dX; // array of dX attached objects CArrayInt m_dY; // array of dY attached objects bool m_expanded; // collapsed/expanded flag public: CChartObjectPanel(); ~CChartObjectPanel(); //--- method for attaching objects bool Attach(CChartObjectLabel *chart_object); bool X_Distance(const int X); int X_Distance(void) const { return(CChartObjectButton::X_Distance()); } bool Y_Distance(const int Y); int Y_Distance(void) const { return(CChartObjectButton::Y_Distance()); } int X_Size() const; int X_Size(const int Y) const { return(CChartObjectButton::X_Size()); } int Y_Size() const; int Y_Size(const int Y) const { return(CChartObjectButton::Y_Size()); } int Timeframes(void) const { return(CChartObjectButton::Timeframes()); } virtual bool Timeframes(const int timeframes); bool State(const bool state); bool State(void) const { return(CChartObjectButton::State()); } bool CheckState(); protected: }; //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ void CChartObjectPanel::CChartObjectPanel(void) : m_expanded(true) { } //+------------------------------------------------------------------+ //| Destructor. | //+------------------------------------------------------------------+ void CChartObjectPanel::~CChartObjectPanel(void) { //--- All objects added by the method Add(), deleted automatically } //+------------------------------------------------------------------+ //| Method Attach | //+------------------------------------------------------------------+ bool CChartObjectPanel::Attach(CChartObjectLabel *chart_object) { if(m_attachment.Add(chart_object)) { int x,y; x=chart_object.X_Distance(); m_dX.Add(chart_object.X_Distance()); x+=X_Distance(); chart_object.X_Distance(X_Distance()+chart_object.X_Distance()); y=CChartObjectButton::Y_Size(); y+=chart_object.Y_Distance(); m_dY.Add(chart_object.Y_Distance()+CChartObjectButton::Y_Size()+2); chart_object.Y_Distance(Y_Distance()+chart_object.Y_Distance()+CChartObjectButton::Y_Size()+2); return(true); } //--- return(false); } //+------------------------------------------------------------------+ //| Method X_Distance | //+------------------------------------------------------------------+ bool CChartObjectPanel::X_Distance(const int X) { CChartObjectLabel *chart_object; //--- for(int i=0;i