forked from nique_372/GrapichsByLeo
259 lines
20 KiB
MQL5
259 lines
20 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| LineCorte.mqh |
|
|
//| Copyright 2025, Niquel Mendoza. |
|
|
//| https://www.mql5.com/es/users/nique_372/news |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2025, Niquel Mendoza."
|
|
#property link "https://www.mql5.com/es/users/nique_372/news"
|
|
#property strict
|
|
|
|
#ifndef HISTOGRAM_FINAL_FILE_LINE_CORTE_BY_LEO_MQH
|
|
#define HISTOGRAM_FINAL_FILE_LINE_CORTE_BY_LEO_MQH
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| |
|
|
//+------------------------------------------------------------------+
|
|
#include "..\\..\\General\\Canvas.mqh"
|
|
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Clase Base Abstracta |
|
|
//+------------------------------------------------------------------+
|
|
class CHistogramLineCorteBase
|
|
{
|
|
protected:
|
|
CCanvasCustom* m_canvas;
|
|
bool m_init;
|
|
|
|
int m_x;
|
|
int m_y;
|
|
int m_size;
|
|
uint m_clr;
|
|
uint m_clr_clean;
|
|
|
|
public:
|
|
CHistogramLineCorteBase(void);
|
|
~CHistogramLineCorteBase(void) {}
|
|
|
|
void Init(CCanvasCustom* c);
|
|
void Set(int x, int y, int width, uint clr, uint clr_clean, bool update = false);
|
|
|
|
// Métodos virtuales puros
|
|
virtual __forceinline void DrawLine(void) = 0;
|
|
virtual __forceinline void CleanLine(void) = 0;
|
|
virtual void ReSize(int new_size, bool update = false) = 0;
|
|
virtual void SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false) = 0;
|
|
virtual void SetCordenadas(int x, int y, int width, bool update = false) = 0;
|
|
|
|
// Métodos comunes
|
|
void Color(uint new_value, bool update = false);
|
|
|
|
__forceinline uint Color(void) const { return m_clr; }
|
|
__forceinline int Size(void) const { return m_size; }
|
|
__forceinline int X(void) const { return m_x; }
|
|
__forceinline int Y(void) const { return m_y; }
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Constructor Base |
|
|
//+------------------------------------------------------------------+
|
|
CHistogramLineCorteBase::CHistogramLineCorteBase(void)
|
|
: m_x(0), m_y(0), m_size(0), m_canvas(NULL),
|
|
m_clr(0x00000000), m_clr_clean(0x00000000), m_init(false)
|
|
{
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Inicialización Base |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteBase::Init(CCanvasCustom *c)
|
|
{
|
|
if(m_init)
|
|
return;
|
|
|
|
m_init = true;
|
|
m_canvas = c;
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Cambiar Color |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteBase::Color(uint new_value, bool update = false)
|
|
{
|
|
m_clr = new_value;
|
|
DrawLine();
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Configurar Línea |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteBase::Set(int x, int y, int width, uint clr, uint clr_clean, bool update = false)
|
|
{
|
|
m_x = x;
|
|
m_y = y;
|
|
m_size = width;
|
|
m_clr = clr;
|
|
m_clr_clean = clr_clean;
|
|
|
|
DrawLine();
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Clase para Línea Horizontal |
|
|
//+------------------------------------------------------------------+
|
|
class CHistogramLineCorteHor : public CHistogramLineCorteBase
|
|
{
|
|
public:
|
|
CHistogramLineCorteHor(void) {}
|
|
~CHistogramLineCorteHor(void) {}
|
|
|
|
__forceinline void DrawLine(void) override;
|
|
__forceinline void CleanLine() override;
|
|
void ReSize(int new_size, bool update = false) override;
|
|
void SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false) override;
|
|
void SetCordenadas(int x, int y, int width, bool update = false) override;
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Dibujar Línea Horizontal |
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CHistogramLineCorteHor::DrawLine(void)
|
|
{
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Limpiar Línea Horizontal |
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CHistogramLineCorteHor::CleanLine()
|
|
{
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr_clean);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Redimensionar Línea Horizontal |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteHor::ReSize(int new_size, bool update = false)
|
|
{
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr_clean);
|
|
m_size = new_size;
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr);
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Cambiar Valor Eje Principal (Y) Horizontal |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteHor::SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false)
|
|
{
|
|
if(clean)
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr_clean);
|
|
|
|
m_y = eje_value;
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr);
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Establecer Coordenadas Horizontal |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteHor::SetCordenadas(int x, int y, int width, bool update = false)
|
|
{
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr_clean);
|
|
m_x = x;
|
|
m_y = y;
|
|
m_size = width;
|
|
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr);
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Clase para Línea Vertical |
|
|
//+------------------------------------------------------------------+
|
|
class CHistogramLineCorteVer : public CHistogramLineCorteBase
|
|
{
|
|
public:
|
|
CHistogramLineCorteVer(void) {}
|
|
~CHistogramLineCorteVer(void) {}
|
|
|
|
__forceinline void DrawLine(void) override;
|
|
__forceinline void CleanLine() override;
|
|
void ReSize(int new_size, bool update = false) override;
|
|
void SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false) override;
|
|
void SetCordenadas(int x, int y, int width, bool update = false) override;
|
|
};
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Dibujar Línea Vertical |
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CHistogramLineCorteVer::DrawLine(void)
|
|
{
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Limpiar Línea Vertical |
|
|
//+------------------------------------------------------------------+
|
|
__forceinline void CHistogramLineCorteVer::CleanLine()
|
|
{
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Redimensionar Línea Vertical |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteVer::ReSize(int new_size, bool update = false)
|
|
{
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
|
|
m_size = new_size;
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Cambiar Valor Eje Principal (X) Vertical |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteVer::SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false)
|
|
{
|
|
if(clean)
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
|
|
|
|
m_x = eje_value;
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Establecer Coordenadas Vertical |
|
|
//+------------------------------------------------------------------+
|
|
void CHistogramLineCorteVer::SetCordenadas(int x, int y, int width, bool update = false)
|
|
{
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
|
|
m_x = x;
|
|
m_y = y;
|
|
m_size = width;
|
|
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
|
|
|
|
if(update)
|
|
m_canvas.Update();
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
#endif
|
|
//+------------------------------------------------------------------+
|