//+------------------------------------------------------------------+ //| WndObj.mqh | //| Copyright 2000-2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #include "Wnd.mqh" //+------------------------------------------------------------------+ //| Class CWndObj | //| Usage: base class to work with chart objects | //+------------------------------------------------------------------+ class CWndObj : public CWnd { private: //--- flags of object bool m_undeletable; // "object is not deletable" flag bool m_unchangeable; // "object is not changeable" flag bool m_unmoveable; // "object is not movable" flag protected: //--- parameters of the chart object string m_text; // object text color m_color; // object color color m_color_background; // object background color color m_color_border; // object border color string m_font; // object font int m_font_size; // object font size long m_zorder; // Z order public: CWndObj(void); ~CWndObj(void); //--- chart event handler virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); //--- set up the object string Text(void) const { return(m_text); } bool Text(const string value); color Color(void) const { return(m_color); } bool Color(const color value); color ColorBackground(void) const { return(m_color_background); } bool ColorBackground(const color value); color ColorBorder(void) const { return(m_color_border); } bool ColorBorder(const color value); string Font(void) const { return(m_font); } bool Font(const string value); int FontSize(void) const { return(m_font_size); } bool FontSize(const int value); long ZOrder(void) const { return(m_zorder); } bool ZOrder(const long value); protected: //--- handlers of object events virtual bool OnObjectCreate(void); virtual bool OnObjectChange(void); virtual bool OnObjectDelete(void); virtual bool OnObjectDrag(void); //--- handlers of object settings virtual bool OnSetText(void) { return(true); } virtual bool OnSetColor(void) { return(true); } virtual bool OnSetColorBackground(void) { return(true); } virtual bool OnSetColorBorder(void) { return(true); } virtual bool OnSetFont(void) { return(true); } virtual bool OnSetFontSize(void) { return(true); } virtual bool OnSetZOrder(void) { return(true); } //--- internal event handlers virtual bool OnDestroy(void) { return(ObjectDelete(m_chart_id,m_name)); } virtual bool OnChange(void); }; //+------------------------------------------------------------------+ //| Common handler of chart events | //+------------------------------------------------------------------+ bool CWndObj::OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam) { if(m_name==sparam) { //--- object name and string parameters are equal //--- this means that event should be handled switch(id) { case CHARTEVENT_OBJECT_CREATE: return(OnObjectCreate()); case CHARTEVENT_OBJECT_CHANGE: return(OnObjectChange()); case CHARTEVENT_OBJECT_DELETE: return(OnObjectDelete()); case CHARTEVENT_OBJECT_DRAG : return(OnObjectDrag()); } } //--- event was not handled return(CWnd::OnEvent(id,lparam,dparam,sparam)); } //+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CWndObj::CWndObj(void) : m_color(clrNONE), m_color_background(clrNONE), m_color_border(clrNONE), m_font(CONTROLS_FONT_NAME), m_font_size(CONTROLS_FONT_SIZE), m_zorder(0), m_undeletable(true), m_unchangeable(true), m_unmoveable(true) { } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CWndObj::~CWndObj(void) { } //+------------------------------------------------------------------+ //| Set the "Text" parameter | //+------------------------------------------------------------------+ bool CWndObj::Text(const string value) { //--- save new value of parameter m_text=value; //--- call virtual event handler return(OnSetText()); } //+------------------------------------------------------------------+ //| Set the "Color" parameter | //+------------------------------------------------------------------+ bool CWndObj::Color(const color value) { //--- save new value of parameter m_color=value; //--- call virtual event handler return(OnSetColor()); } //+------------------------------------------------------------------+ //| Setting the "Background color" parameter | //+------------------------------------------------------------------+ bool CWndObj::ColorBackground(const color value) { //--- save new value of parameter m_color_background=value; //--- call virtual event handler return(OnSetColorBackground()); } //+------------------------------------------------------------------+ //| Set the "Border color" parameter | //+------------------------------------------------------------------+ bool CWndObj::ColorBorder(const color value) { //--- save new value of parameter m_color_border=value; //--- call virtual event handler return(OnSetColorBorder()); } //+------------------------------------------------------------------+ //| Set the "Font" parameter | //+------------------------------------------------------------------+ bool CWndObj::Font(const string value) { //--- save new value of parameter m_font=value; //--- call virtual event handler return(OnSetFont()); } //+------------------------------------------------------------------+ //| Set the "Font size" parameter | //+------------------------------------------------------------------+ bool CWndObj::FontSize(const int value) { //--- save new value of parameter m_font_size=value; //--- call virtual event handler return(OnSetFontSize()); } //+------------------------------------------------------------------+ //| Set the "Z order" parameter | //+------------------------------------------------------------------+ bool CWndObj::ZOrder(const long value) { //--- save new value of parameter m_zorder=value; //--- call virtual event handler return(OnSetZOrder()); } //+------------------------------------------------------------------+ //| Handler of the "Object creation" event | //+------------------------------------------------------------------+ bool CWndObj::OnObjectCreate(void) { //--- event is handled return(true); } //+------------------------------------------------------------------+ //| Handler of the "Object modification" event | //+------------------------------------------------------------------+ bool CWndObj::OnObjectChange(void) { //--- if object is not changeable if(m_unchangeable) { //--- restore position if(!OnMove()) return(false); //--- restore size if(!OnResize()) return(false); //--- restore settings if(!OnChange()) return(false); } //--- event is handled return(true); } //+------------------------------------------------------------------+ //| Handler of the "Object deletion" event | //+------------------------------------------------------------------+ bool CWndObj::OnObjectDelete(void) { //--- if object is not deletable if(m_undeletable) { //--- restore the object if(!OnCreate()) return(false); //--- restore settings if(!OnChange()) return(false); //--- restore visibility return(IS_VISIBLE ? OnShow():OnHide()); } //--- event is handled return(true); } //+------------------------------------------------------------------+ //| Handler of the "Object dragging" event | //+------------------------------------------------------------------+ bool CWndObj::OnObjectDrag(void) { //--- if object is not movable if(m_unmoveable) { //--- restore position return(OnMove()); } //--- event is handled return(true); } //+------------------------------------------------------------------+ //| Set up the object | //+------------------------------------------------------------------+ bool CWndObj::OnChange(void) { //--- set up the chart object according to previously set parameters if(!OnSetText()) return(false); if(!OnSetFont()) return(false); if(!OnSetFontSize()) return(false); if(!OnSetColor()) return(false); if(!OnSetColorBackground()) return(false); if(!OnSetColorBorder()) return(false); //--- succeed return(true); } //+------------------------------------------------------------------+