ForkGrapichsByLeo/Histogram/EjeHist/Hor.mqh

265 lines
8.6 KiB
MQL5
Raw Permalink Normal View History

2025-10-13 22:07:20 -05:00
//+------------------------------------------------------------------+
//| Hor.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
2025-10-14 07:28:22 -05:00
#ifndef GRAPHICS_HISTOGRAM_EJES_HIST_HOR_MQH_BY_LEO
#define GRAPHICS_HISTOGRAM_EJES_HIST_HOR_MQH_BY_LEO
2025-10-13 22:07:20 -05:00
#include "Base.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CHistogramEjeHorizontal : public CHistogramEje
{
public:
2025-12-05 07:06:30 -05:00
void Init(CCanvasCustom *c, int x1, int x2, int y1, int y2, int mode,
uint clr_line_eje_simple, uint clr_line_eje_fij, uint clr_clean, uint style, bool extendent_line) override;
2025-10-14 14:25:54 -05:00
void CreateTituloEje2(int gap_eje, const string& txt, uint clr, int fontsize = 0, string font = NULL, uint flagtext = UINT_MAX) override;
2025-10-13 22:07:20 -05:00
//--- SImple eje
//- Color
void EjeSimpleColor(uint new_value, bool redraw = false) override final;
//--- Cordenadas
void ChangeCordinates(int x1, int x2, int y1, int y2, bool redraw = false)override final;
void ChangeAnclaje2(int x2, int y2, bool redraw = false) override final;
void ChangeAnclaje1(int x1, int y1, bool redraw = false) override final;
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2025-12-05 07:06:30 -05:00
void CHistogramEjeHorizontal::Init(CCanvasCustom *c, int x1, int x2, int y1, int y2, int mode,
uint clr_line_eje_simple, uint clr_line_eje_fij, uint clr_clean, uint style, bool extendent_line)
2025-10-13 22:07:20 -05:00
{
if(m_init)
return;
//---
2025-10-14 07:28:22 -05:00
m_init = true;
2025-10-13 22:07:20 -05:00
//---
2025-10-14 10:58:09 -05:00
m_canvas = c;
2025-10-13 22:07:20 -05:00
m_x1 = x1;
m_y1 = y1;
m_x2 = x2;
m_y2 = y2;
/*
x1 x2
y1 y1
y2 x2
x1 y2
*/
//---
m_histogram_eje_2.clr = clr_line_eje_fij;
//---
const int size_line = fabs(y2 - y1);
m_histogram_eje = new CHistogramEjeLineHorizontal();
2025-12-05 07:06:30 -05:00
m_mode_line = mode;
2025-10-13 22:07:20 -05:00
if(mode == HIST_LINE_MODE_IZQUIERDA)
{
2025-12-05 07:06:30 -05:00
m_histogram_eje.Init(c, m_x1, m_y1, size_line, clr_line_eje_simple, mode, (extendent_line ? m_x2 : 0), style);
2025-10-13 22:07:20 -05:00
}
else
{
2025-12-05 07:06:30 -05:00
m_histogram_eje.Init(c, m_x2, m_y1, size_line, clr_line_eje_simple, mode, (extendent_line ? m_x1 : 0), style);
2025-10-13 22:07:20 -05:00
}
m_histogram_eje.CleanColor(clr_clean);
//--- Eje simple
2025-12-05 07:06:30 -05:00
// Cambiante
2025-10-13 22:07:20 -05:00
m_histogram_eje_2.init = m_y2;
m_histogram_eje_2.c1 = m_x1;
m_histogram_eje_2.c2 = m_x2;
2025-10-14 10:58:09 -05:00
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_histogram_eje_2.clr);
2025-12-05 07:06:30 -05:00
// Eje arriba
m_histogram_eje_arriba = new CCanvasHorLine(m_y1, m_x1, m_x2, clr_line_eje_fij, clr_clean, m_canvas);
m_histogram_eje_arriba.Draw();
// Eje derecha
m_histogram_eje_derecha = new CCanvasVerLine((m_mode_line == HIST_LINE_MODE_IZQUIERDA ? m_x2 : m_x1), m_y1, m_y2, clr_line_eje_fij, m_clr_clean, m_canvas);
m_histogram_eje_derecha.Draw();
2025-10-13 22:07:20 -05:00
}
2025-10-14 14:25:54 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CHistogramEjeHorizontal::CreateTituloEje2(int gap_eje, const string& txt, uint clr, int fontsize = 0, string font = NULL, uint flagtext = UINT_MAX)
{
if(m_eje_2_text != NULL)
return;
m_eje_2_text = new CTextCanvas();
int x = m_x1 + ((m_x2 - m_x1) >> 1);
int y = m_y2 + gap_eje;
m_eje_2_text.Create(m_canvas, x, y, txt, clr, TA_TOP | TA_CENTER, fontsize, font, flagtext);
m_eje_2_text.CleanColor(m_clr_clean);
m_eje_2_text_gap = gap_eje;
}
2025-10-13 22:07:20 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2025-10-14 10:58:09 -05:00
void CHistogramEjeHorizontal::ChangeAnclaje1(int x1, int y1, bool redraw = false)
2025-10-13 22:07:20 -05:00
{
//---
2025-12-05 07:06:30 -05:00
const bool aument_x = x1 > m_x1;
if(aument_x)
{
2025-10-13 22:07:20 -05:00
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_clr_clean);
2025-12-05 07:06:30 -05:00
}
2025-10-13 22:07:20 -05:00
//---
m_x1 = x1;
m_y1 = y1;
//---
m_histogram_eje_2.c1 = m_x1;
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_histogram_eje_2.clr);
2025-12-05 07:06:30 -05:00
//---
m_histogram_eje_arriba.ChangeCordinatesAnc1(x1, y1);
//---
if(m_mode_line == HIST_LINE_MODE_IZQUIERDA)
m_histogram_eje_derecha.C1(y1);
else
m_histogram_eje_derecha.ChangeCordinatesAnc1(x1, y1);
2025-10-14 14:25:54 -05:00
//---
const int x = m_x1 + ((m_x2 - m_x1) >> 1);
m_eje_2_text.X(x);
2025-10-13 22:07:20 -05:00
//---
const int size_line = fabs(m_y2 - m_y1); // Nuevo ancho
const int real_x = (m_mode_line == HIST_LINE_MODE_IZQUIERDA) ? m_x1 : m_x2; // X Real
m_histogram_eje.SetCordinates(real_x, m_y1, size_line, redraw); // Cambiamos
2025-12-05 07:06:30 -05:00
//---
if(redraw)
m_canvas.Update();
2025-10-13 22:07:20 -05:00
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2025-10-14 10:58:09 -05:00
void CHistogramEjeHorizontal::ChangeAnclaje2(int x2, int y2, bool redraw = false)
2025-10-13 22:07:20 -05:00
{
//---
const bool reduce = x2 < m_x2;
if(reduce)
2025-12-05 07:06:30 -05:00
{
2025-10-13 22:07:20 -05:00
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_clr_clean);
2025-12-05 07:06:30 -05:00
}
2025-10-13 22:07:20 -05:00
//---
m_x2 = x2;
m_y2 = y2;
//---
m_histogram_eje_2.init = m_y2;
m_histogram_eje_2.c2 = m_x2;
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_histogram_eje_2.clr);
2025-12-05 07:06:30 -05:00
//---
m_histogram_eje_arriba.C2(m_x2);
//---
if(m_mode_line == HIST_LINE_MODE_IZQUIERDA)
m_histogram_eje_derecha.ChangeCordinates(m_x2, m_y1, m_y2);
else
m_histogram_eje_derecha.C2(m_y2);
2025-10-14 14:25:54 -05:00
//---
const int x = m_x1 + ((m_x2 - m_x1) >> 1);
const int y = m_y2 + m_eje_2_text_gap;
2025-12-05 07:06:30 -05:00
m_eje_2_text.ChangeYAndX(x, y);
2025-10-14 14:25:54 -05:00
2025-10-13 22:07:20 -05:00
//---
const int size_line = fabs(m_y2 - m_y1); // Nuevo ancho
const int real_x = (m_mode_line == HIST_LINE_MODE_IZQUIERDA) ? m_x1 : m_x2; // X Real
m_histogram_eje.SetCordinates(real_x, m_y1, size_line, redraw); // Cambiamos
2025-12-05 07:06:30 -05:00
//---
if(redraw)
m_canvas.Update();
2025-10-13 22:07:20 -05:00
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2025-10-14 10:58:09 -05:00
void CHistogramEjeHorizontal::ChangeCordinates(int x1, int x2, int y1, int y2, bool redraw = false)
2025-10-13 22:07:20 -05:00
{
//---
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_clr_clean);
//---
m_x1 = x1;
m_y1 = y1;
m_x2 = x2;
m_y2 = y2;
//--- Eje simple
m_histogram_eje_2.init = m_y2;
m_histogram_eje_2.c1 = m_x1;
m_histogram_eje_2.c2 = m_x2;
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_histogram_eje_2.clr);
2025-12-05 07:06:30 -05:00
//---
m_histogram_eje_derecha.ChangeCordinates((m_mode_line == HIST_LINE_MODE_IZQUIERDA ? m_x2 : m_x1), m_y1, m_y2);
//---
m_histogram_eje_arriba.ChangeCordinates(m_y1, m_x1, m_x2);
2025-10-14 14:25:54 -05:00
//---
const int x = m_x1 + ((m_x2 - m_x1) >> 1);
const int y = m_y2 + m_eje_2_text_gap;
2025-12-05 07:06:30 -05:00
m_eje_2_text.ChangeYAndX(x, y);
2025-10-14 14:25:54 -05:00
2025-10-13 22:07:20 -05:00
//---
const int size_line = fabs(m_y2 - m_y1); // Nuevo ancho
const int real_x = (m_mode_line == HIST_LINE_MODE_IZQUIERDA) ? m_x1 : m_x2; // X Real
m_histogram_eje.SetCordinates(real_x, m_y1, size_line, redraw); // Cambiamos
2025-12-05 07:06:30 -05:00
//---
2025-10-13 22:07:20 -05:00
if(redraw)
m_canvas.Update();
}
2025-12-05 07:06:30 -05:00
2025-10-13 22:07:20 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2025-12-05 07:06:30 -05:00
void CHistogramEjeHorizontal::EjeSimpleColor(uint new_value, bool redraw = false)
2025-10-13 22:07:20 -05:00
{
2025-12-05 07:06:30 -05:00
//---
m_histogram_eje_derecha.Color(new_value);
//---
m_histogram_eje_arriba.Color(new_value);
//---
m_histogram_eje_2.clr = new_value;
2025-10-13 22:07:20 -05:00
m_canvas.LineHorizontal(m_histogram_eje_2.c1, m_histogram_eje_2.c2, m_histogram_eje_2.init, m_histogram_eje_2.clr);
2025-12-05 07:06:30 -05:00
//---
2025-10-13 22:07:20 -05:00
if(redraw)
m_canvas.Update();
}
//+------------------------------------------------------------------+
2025-10-14 14:25:54 -05:00
#endif
//+------------------------------------------------------------------+