Multiplicator/GridTk.mqh

138 lines
5.5 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:10:33 +02:00
//+------------------------------------------------------------------+
//| GridTk.mqh |
//| Enrico Lambino |
//| www.mql5.com/en/users/iceron|
//+------------------------------------------------------------------+
#property copyright "Enrico Lambino"
#property link "https://www.mql5.com/en/articles/1998"
#property strict
#include "Grid.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CGridConstraints : public CObject
{
protected:
CWnd *m_control;
int m_row;
int m_col;
int m_rowspan;
int m_colspan;
public:
CGridConstraints(CWnd *control,int row,int column,int rowspan=1,int colspan=1);
~CGridConstraints();
CWnd *Control(){return(m_control);}
int Row(){return(m_row);}
int Column(){return(m_col);}
int RowSpan(){return(m_rowspan);}
int ColSpan(){return(m_colspan);}
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CGridConstraints::CGridConstraints(CWnd *control,int row,int column,int rowspan=1,int colspan=1)
{
m_control = control;
m_row = MathMax(0,row);
m_col = MathMax(0,column);
m_rowspan = MathMax(1,rowspan);
m_colspan = MathMax(1,colspan);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CGridConstraints::~CGridConstraints()
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CGridTk : public CGrid
{
protected:
CArrayObj m_constraints;
public:
CGridTk();
~CGridTk();
bool Grid(CWnd *control,int row,int column,int rowspan,int colspan);
bool Pack();
CGridConstraints *GetGridConstraints(CWnd *control);
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CGridTk::CGridTk(void)
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CGridTk::~CGridTk(void)
{
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CGridTk::Grid(CWnd *control,int row,int column,int rowspan=1,int colspan=1)
{
CGridConstraints *constraints=new CGridConstraints(control,row,column,rowspan,colspan);
if(!CheckPointer(constraints))
return(false);
if(!m_constraints.Add(constraints))
return(false);
return(Add(control));
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool CGridTk::Pack()
{
CGrid::Pack();
CSize size=Size();
m_cell_size.cx = (size.cx-(m_cols+1)*m_hgap)/m_cols;
m_cell_size.cy = (size.cy-(m_rows+1)*m_vgap)/m_rows;
for(int i=0;i<ControlsTotal();i++)
{
int x=0,y=0,sizex=0,sizey=0;
CWnd *control=Control(i);
if(control==NULL)
continue;
if(control==GetPointer(m_background))
continue;
CGridConstraints *constraints = GetGridConstraints(control);
if (constraints==NULL)
continue;
int column = constraints.Column();
int row = constraints.Row();
x = (column*m_cell_size.cx)+((column+1)*m_hgap);
y = (row*m_cell_size.cy)+((row+1)*m_vgap);
int colspan = constraints.ColSpan();
int rowspan = constraints.RowSpan();
control.Size(colspan*m_cell_size.cx+((colspan-1)*m_hgap),rowspan*m_cell_size.cy+((rowspan-1)*m_vgap));
control.Move(x,y);
if(control.Type()==CLASS_LAYOUT)
{
CBox *container=control;
container.Pack();
}
}
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CGridConstraints *CGridTk::GetGridConstraints(CWnd *control)
{
for(int i=0;i<m_constraints.Total();i++)
{
CGridConstraints *constraints=m_constraints.At(i);
CWnd *ctrl=constraints.Control();
if(ctrl==NULL)
continue;
if(ctrl==control)
return(constraints);
}
return (NULL);
}
//+------------------------------------------------------------------+