Adwizard/Virtual/VirtualInterface.mqh

104 lines
8.6 KiB
MQL5
Raw Permalink Normal View History

2025-04-11 13:28:40 +03:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| VirtualInterface.mqh |
//| Copyright 2022-2025, Yuriy Bykov |
//| https://www.mql5.com/ru/users/antekov |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022-2025, Yuriy Bykov"
#property link "https://www.mql5.com/ru/users/antekov"
#property version "1.00"
class CVirtualChartOrder;
#include "../Base/Interface.mqh"
#include "VirtualChartOrder.mqh"
//+------------------------------------------------------------------+
//| ;0AA 3@0D8G5A:>3> 8=B5@D59A0 A>25B=8:0 |
//+------------------------------------------------------------------+
class CVirtualInterface : public CInterface {
protected:
// !B0B8G5A:89 C:070B5;L =0 548=AB25==K9 M:75<?;O@ 40==>3> :;0AA0
static CVirtualInterface *s_instance;
CVirtualChartOrder *m_chartOrders[]; // 0AA82 3@0D8G5A:8E 28@BC0;L=KE ?>78F89
//--- '0AB=K5 <5B>4K
CVirtualInterface(); // 0:@KBK9 :>=AB@C:B>@
public:
~CVirtualInterface(); // 5AB@C:B>@
//--- !B0B8G5A:85 <5B>4K
static
CVirtualInterface *Instance(ulong p_magic = 0); // !8=3;B>= - A>740=85 8 ?>;CG5=85 548=AB25==>3> M:75<?;O@0
//--- C1;8G=K5 <5B>4K
void Changed(CVirtualOrder *p_order); // 1@01>B:0 87<5=5=89 28@BC0;L=>9 ?>78F88
void Add(CVirtualOrder *p_order); // >102;5=85 28@BC0;L=>9 ?>78F88
virtual void Redraw() override; // B@8A>2:0 =0 3@0D8:5 87<5=Q==KE >1J5:B>2
};
// =8F80;870F8O AB0B8G5A:>3> C:070B5;O =0 548=AB25==K9 M:75<?;O@ 40==>3> :;0AA0
CVirtualInterface *CVirtualInterface::s_instance = NULL;
//+------------------------------------------------------------------+
//| 0:@KBK9 :>=AB@C:B>@ |
//+------------------------------------------------------------------+
CVirtualInterface::CVirtualInterface() {}
//+------------------------------------------------------------------+
//| 5AB@C:B>@ |
//+------------------------------------------------------------------+
CVirtualInterface::~CVirtualInterface() {
// #40;O5< 2A5 A>740==K5 >1J5:BK 3@0D8G5A:8E 28@BC0;L=KE ?>78F89
FOREACH(m_chartOrders) delete m_chartOrders[i];
}
//+------------------------------------------------------------------+
//| !8=3;B>= - A>740=85 8 ?>;CG5=85 548=AB25==>3> M:75<?;O@0 |
//+------------------------------------------------------------------+
CVirtualInterface* CVirtualInterface::Instance(ulong p_magic = 0) {
if(!s_instance) {
s_instance = new CVirtualInterface();
}
if(s_magic == 0 && p_magic != 0) {
s_magic = p_magic;
}
return s_instance;
}
//+------------------------------------------------------------------+
//| >102;5=85 28@BC0;L=>9 ?>78F88 |
//+------------------------------------------------------------------+
void CVirtualInterface::Add(CVirtualOrder *p_order) {
// >102;O5< =>2CN 3@0D8G:A:CN 28@BC0;L=CN ?>78F8N,
// A>740==CN 87 28@BC0;L=>9 ?>78F88
APPEND(m_chartOrders, new CVirtualChartOrder(p_order));
}
//+------------------------------------------------------------------+
//| 1@01>B:0 87<5=5=8O 28@BC0;L=>9 ?>78F88 |
//+------------------------------------------------------------------+
void CVirtualInterface::Changed(CVirtualOrder *p_order) {
// 0?><=8<, GB> 87<5=5=8O 5ABL C 40==>9 ?>78F88
int i;
FIND(m_chartOrders, p_order.Id(), i);
if(i != -1) {
m_chartOrders[i].Changed();
m_isChanged = true;
}
}
//+------------------------------------------------------------------+
//| B@8A>2:0 =0 3@0D8:5 87<5=Q==KE >1J5:B>2 |
//+------------------------------------------------------------------+
void CVirtualInterface::Redraw() {
if(m_isActive && m_isChanged) { // A;8 8=B5@D59A 0:B825= 8 5ABL 87<5=5=8O
// 0?CA:05< ?5@5@8A>2:C 3@0D8G5A:8E 28@BC0;L=KE ?>78F89
FOREACH(m_chartOrders) m_chartOrders[i].Redraw();
m_isChanged = false; // !1@0AK205< D;03 87<5=5=89
}
}
//+------------------------------------------------------------------+