GrapichsByLeo/Histogram/Histograma/LineCorte.mqh

260 lines
20 KiB
MQL5
Raw Permalink Normal View History

2025-10-13 07:15:19 -05:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| 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"
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Clase Base Abstracta |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
class CHistogramLineCorteBase
2025-10-13 07:15:19 -05:00
{
protected:
CCanvasCustom* m_canvas;
2025-10-13 07:15:19 -05:00
bool m_init;
int m_x;
int m_y;
int m_size;
uint m_clr;
uint m_clr_clean;
2025-10-13 07:15:19 -05:00
public:
CHistogramLineCorteBase(void);
~CHistogramLineCorteBase(void) {}
2025-10-13 07:15:19 -05:00
void Init(CCanvasCustom* c);
void Set(int x, int y, int width, uint clr, uint clr_clean, bool update = false);
2025-10-13 07:15:19 -05:00
// M<EFBFBD>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;
2025-10-13 07:15:19 -05:00
// M<EFBFBD>todos comunes
void Color(uint new_value, bool update = false);
2025-10-13 07:15:19 -05:00
__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; }
};
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| 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)
{
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Inicializaci<EFBFBD>n Base |
//+------------------------------------------------------------------+
void CHistogramLineCorteBase::Init(CCanvasCustom *c)
{
if(m_init)
return;
2025-10-13 07:15:19 -05:00
m_init = true;
m_canvas = c;
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Cambiar Color |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
void CHistogramLineCorteBase::Color(uint new_value, bool update = false)
{
m_clr = new_value;
DrawLine();
if(update)
m_canvas.Update();
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Configurar L<EFBFBD>nea |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
void CHistogramLineCorteBase::Set(int x, int y, int width, uint clr, uint clr_clean, bool update = false)
2025-10-13 07:15:19 -05:00
{
m_x = x;
m_y = y;
m_size = width;
m_clr = clr;
m_clr_clean = clr_clean;
2025-10-13 07:15:19 -05:00
DrawLine();
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
2025-10-13 07:15:19 -05:00
}
//+------------------------------------------------------------------+
//| Clase para L<EFBFBD>nea Horizontal |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
class CHistogramLineCorteHor : public CHistogramLineCorteBase
2025-10-13 07:15:19 -05:00
{
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;
};
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Dibujar L<EFBFBD>nea Horizontal |
//+------------------------------------------------------------------+
__forceinline void CHistogramLineCorteHor::DrawLine(void)
{
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr);
2025-10-13 07:15:19 -05:00
}
//+------------------------------------------------------------------+
//| Limpiar L<EFBFBD>nea Horizontal |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
__forceinline void CHistogramLineCorteHor::CleanLine()
2025-10-13 07:15:19 -05:00
{
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr_clean);
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Redimensionar L<EFBFBD>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);
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
}
//+------------------------------------------------------------------+
//| Cambiar Valor Eje Principal (Y) Horizontal |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
void CHistogramLineCorteHor::SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false)
2025-10-13 07:15:19 -05:00
{
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);
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
}
//+------------------------------------------------------------------+
//| Establecer Coordenadas Horizontal |
//+------------------------------------------------------------------+
void CHistogramLineCorteHor::SetCordenadas(int x, int y, int width, bool update = false)
2025-10-13 07:15:19 -05:00
{
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr_clean);
2025-10-13 07:15:19 -05:00
m_x = x;
m_y = y;
m_size = width;
m_canvas.LineHorizontal(m_x, m_x + m_size, m_y, m_clr);
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Clase para L<EFBFBD>nea Vertical |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
class CHistogramLineCorteVer : public CHistogramLineCorteBase
2025-10-13 07:15:19 -05:00
{
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<EFBFBD>nea Vertical |
//+------------------------------------------------------------------+
__forceinline void CHistogramLineCorteVer::DrawLine(void)
{
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
}
//+------------------------------------------------------------------+
//| Limpiar L<EFBFBD>nea Vertical |
//+------------------------------------------------------------------+
__forceinline void CHistogramLineCorteVer::CleanLine()
{
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Redimensionar L<EFBFBD>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);
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Cambiar Valor Eje Principal (X) Vertical |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
void CHistogramLineCorteVer::SetNewValueEjePrincipal(int eje_value, bool clean, bool update = false)
2025-10-13 07:15:19 -05:00
{
if(clean)
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
2025-10-13 07:15:19 -05:00
m_x = eje_value;
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
}
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
//| Establecer Coordenadas Vertical |
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+
void CHistogramLineCorteVer::SetCordenadas(int x, int y, int width, bool update = false)
2025-10-13 07:15:19 -05:00
{
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr_clean);
2025-10-13 07:15:19 -05:00
m_x = x;
m_y = y;
m_size = width;
m_canvas.LineVertical(m_x, m_y, m_y + m_size, m_clr);
2025-10-13 07:15:19 -05:00
if(update)
m_canvas.Update();
}
//+------------------------------------------------------------------+
#endif
2025-10-13 07:15:19 -05:00
//+------------------------------------------------------------------+