Start Developing GUI Panel ...

This commit is contained in:
2024-09-23 17:55:28 +03:30
parent 0eaaf6bd36
commit a36e78254d
9 changed files with 1119 additions and 606 deletions
@@ -0,0 +1,162 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// --------------------------------------
// Name: XCButton
// Description: provides all based classes for use ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
#include "../x-saherelm.base.class.mq5"
//
// Definitions ...
//
// Implementation ...
//
// a Button Creation Class ...
class XCButton : XSCBase
{
//
// Public ...
public:
//
// Constructor(s) ...
void XCButton()
{
}
//
// Deconstructor ...
void ~XCButton()
{
}
//
// Actions ...
/**
* Create an Instance of Class Object ...
*
* @param name: Object Name
* @param xDis: X Distance
* @param yDis: Y Distance
* @param xSize: X Size
* @param ySize: Y Size
*/
bool Create(
string name,
int xDis,
int yDis,
int xSize,
int ySize //
)
{
//
// Object creation and property settings
bool result = false;
//
result = ObjectCreate(0, name, OBJ_BUTTON, 0, 0, 0);
if (!result)
{
return result;
}
//
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xDis);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDis);
ObjectSetInteger(0, name, OBJPROP_XSIZE, xSize);
ObjectSetInteger(0, name, OBJPROP_YSIZE, ySize);
//
mName = name;
//
return result;
}
/**
* Destroy Class Instance ...
*/
void Destroy()
{
ObjectDelete(0, mName);
}
//
// Getter(s) / Setter(s) ...
/**
* Set Object Border Color ...
*
* @param value: color
*/
void SetBorderColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_BORDER_COLOR, value);
}
/**
* Set Object Background Color ...
*
* @param value: color
*/
void SetBGColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_BGCOLOR, value);
}
/**
* Set Object Text ...
*
* @param value: text
*/
void SetText(string value)
{
ObjectSetString(0, mName, OBJPROP_TEXT, value);
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
//
string mName; // Name of Object
//
// Mouse state tracking variables ...
int mlbDownX;
int mlbDownY;
int mlbDownXDistance;
int mlbDownYDistance;
int mPreviousMouseState;
//
bool mMovingState; // State for whether the object is moving
//
string mAddedNames[]; // Array of added names
long mAddedXDisDiffrence[]; // Arrays to store added distance differences
long mAddedYDisDiffrence[]; // Arrays to store added distance differences
};
@@ -0,0 +1,182 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// --------------------------------------
// Name: XCEdit
// Description: provides all based classes for use ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
#include "../x-saherelm.base.class.mq5"
//
// Definitions ...
//
// Implementation ...
//
// a Label Creation Class ...
class XCEdit : XSCBase
{
//
// Public ...
public:
//
// Constructor(s) ...
void XCEdit()
{
}
//
// Deconstructor ...
void ~XCEdit()
{
}
//
// Actions ...
/**
* Create an Instance of Class Object ...
*
* @param name: Object Name
* @param xDis: X Distance
* @param yDis: Y Distance
* @param xSize: X Size
* @param ySize: Y Size
*/
bool Create(
string name,
int xDis,
int yDis,
int xSize,
int ySize //
)
{
//
// Object creation and property settings
bool result = false;
//
result = ObjectCreate(0, name, OBJ_EDIT, 0, 0, 0);
if (!result)
{
return result;
}
//
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xDis);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDis);
ObjectSetInteger(0, name, OBJPROP_XSIZE, xSize);
ObjectSetInteger(0, name, OBJPROP_YSIZE, ySize);
//
mName = name;
//
return result;
}
/**
* Destroy Class Instance ...
*/
void Destroy()
{
ObjectDelete(0, mName);
}
//
// Getter(s) / Setter(s) ...
/**
* Set Object Border Color ...
*
* @param value: color
*/
void SetBorderColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_BORDER_COLOR, value);
}
/**
* Set Background Color of Object ...
*
* @param value: color
*/
void SetBGColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_BGCOLOR, value);
}
/**
* Set Object Text Color ...
*
* @param value: color
*/
void SetTextColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_COLOR, value);
}
/**
* Set Text of Object ...
*
* @param value: text
*/
void SetText(string value)
{
ObjectSetString(0, mName, OBJPROP_TEXT, value);
}
/**
* Get Current Text of Object ...
*
* @return ( string )
*/
string GetText()
{
return ObjectGetString(0, mName, OBJPROP_TEXT);
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
//
string mName; // Name of Object
//
// Mouse state tracking variables ...
int mlbDownX;
int mlbDownY;
int mlbDownXDistance;
int mlbDownYDistance;
int mPreviousMouseState;
//
bool mMovingState; // State for whether the object is moving
//
string mAddedNames[]; // Array of added names
long mAddedXDisDiffrence[]; // Arrays to store added distance differences
long mAddedYDisDiffrence[]; // Arrays to store added distance differences
};
@@ -0,0 +1,176 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// --------------------------------------
// Name: XCLabel
// Description: provides all based classes for use ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
#include "../x-saherelm.base.class.mq5"
//
// Definitions ...
//
// Implementation ...
//
// a Label Creation Class ...
class XCLabel : XSCBase
{
//
// Public ...
public:
//
// Constructor(s) ...
void XCLabel()
{
}
//
// Deconstructor ...
void ~XCLabel()
{
}
//
// Actions ...
/**
* Create an Instance of Class Object ...
*
* @param name: Object Name
* @param xDis: X Distance
* @param yDis: Y Distance
*/
bool Create(
string name,
int xDis,
int yDis //
)
{
//
// Object creation and property settings
bool result = false;
//
result = ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
if (!result)
{
return result;
}
//
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xDis);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDis);
//
mName = name;
//
return result;
}
/**
* Destroy Class Instance ...
*/
void Destroy()
{
ObjectDelete(0, mName);
}
//
// Getter(s) / Setter(s) ...
/**
* Set Text Color ...
*
* @param value: color
*/
void SetTextColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_COLOR, value);
}
/**
* Set Text of Object ...
*
* @param value: text
*/
void SetText(string value)
{
ObjectSetString(0, mName, OBJPROP_TEXT, value);
}
/**
* Get Text Of Object ...
*
* @return ( string )
*/
string GetText()
{
return ObjectGetString(0, mName, OBJPROP_TEXT);
}
/**
* Set Font Size of Object ...
*
* @param value: size
*/
void SetFontSize(int value)
{
ObjectSetInteger(0, mName, OBJPROP_FONTSIZE, value);
}
/**
* Set Font Name Of Object ...
*
* @param value: font name
*/
void SetFont(string value)
{
ObjectSetString(0, mName, OBJPROP_FONT, value);
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
//
string mName; // Name of Object
//
// Mouse state tracking variables ...
int mlbDownX;
int mlbDownY;
int mlbDownXDistance;
int mlbDownYDistance;
int mPreviousMouseState;
//
bool mMovingState; // State for whether the object is moving
//
string mAddedNames[]; // Array of added names
long mAddedXDisDiffrence[]; // Arrays to store added distance differences
long mAddedYDisDiffrence[]; // Arrays to store added distance differences
};
@@ -0,0 +1,213 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// --------------------------------------
// Name: XCPanel
// Description: provides all based classes for use ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
// Imports ...
#include "../XCObjects/x-saherelm.x-button.class.mq5"
#include "../XCObjects/x-saherelm.x-edit.class.mq5"
#include "../XCObjects/x-saherelm.x-label.class.mq5"
#include "../XCObjects/x-saherelm.x-rectangle.label.class.mq5"
//
// Implementation ...
//
class XCPanel : XSCBase
{
public:
//
// Constructor(s) ...
void XCPanel()
{
//
// Enables mouse move events on the chart
ChartSetInteger(0, CHART_EVENT_MOUSE_MOVE, true);
}
//
// Deconstructor ...
void ~XCPanel()
{
Destroy();
}
//
// Action ...
//
bool Create(
string name,
int xDis,
int yDis,
int xSize,
int ySize,
//
// Title Bar ...
ENUM_BORDER_TYPE titleBarBorderType = BORDER_FLAT,
color titleBarBGColor = clrBlueViolet,
//
// Caption ...
string caption = "",
int captionontSize = 9,
color captionColor = clrWhite,
//
// Body ...
ENUM_BORDER_TYPE bodyBorderType = BORDER_FLAT,
color bodyBGColor = clrMediumSlateBlue //
)
{
//
bool result = false;
//
result = IsValid(name);
if (!result)
{
//
Destroy();
return result;
}
//
mTitleBarName = name + "_TITLE_BAR";
mTitleTextName = name + "_CAPTION";
mBodyName = name + "_BODY";
//
if (!IsValid(caption))
{
caption = name;
}
//
// Title Bar ...
int titleBarHeight = ySize / 5;
result = mTitleBar.Create(
mTitleBarName,
xDis,
yDis,
xSize,
titleBarHeight //
);
if (!result)
{
//
Destroy();
return result;
}
mTitleBar.SetBorderType(titleBarBorderType);
mTitleBar.SetBGColor(titleBarBGColor);
//
// Body ...
result = mBody.Create(
mBodyName,
xDis,
yDis + titleBarHeight - 1,
xSize,
ySize //
);
if (!result)
{
//
Destroy();
return result;
}
mBody.SetBorderType(bodyBorderType);
mBody.SetBGColor(bodyBGColor);
//
// Caption ...
result = mTitleText.Create(mTitleTextName, xDis, yDis);
if (!result)
{
//
Destroy();
return result;
}
mTitleText.SetText(caption);
mTitleText.SetTextColor(captionColor);
mTitleText.SetFontSize(captionontSize);
//
// Adding Child Objects ...
mTitleBar.Add(mBodyName);
mTitleBar.Add(mTitleTextName);
//
return result;
}
//
void Destroy()
{
//
mBodyName = NULL;
mTitleBarName = NULL;
mTitleTextName = NULL;
//
mBody.Destroy();
mTitleBar.Destroy();
mTitleText.Destroy();
}
/**
* Event Handling for Mouse Movement ...
* @param id: Event ID
* @param lparam: Event parameter of long type
* @param dparam: Event parameter of double type
* @param sparam: Event parameter of string type
*/
void OnEvent(
int id,
long lparam,
double dparam,
string sparam //
)
{
//
mTitleBar.OnEvent(
id,
lparam,
dparam,
sparam //
);
}
//
protected:
private:
//
// Props ...
//
string mBodyName;
string mTitleBarName;
string mTitleTextName;
//
XCLabel mTitleText;
XCRectangleLabel mBody;
XCRectangleLabel mTitleBar;
//
};
@@ -0,0 +1,268 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// --------------------------------------
// Name: XCRectangleLabel
// Description: provides all based classes for use ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
#include "../x-saherelm.base.class.mq5"
//
// Definitions ...
//
// Implementation ...
//
// a Rectangle Label Creation Class ...
class XCRectangleLabel : XSCBase
{
//
// Public ...
public:
//
// Constructor(s) ...
void XCRectangleLabel()
{
}
//
// Deconstructor ...
void ~XCRectangleLabel()
{
}
//
// Getter(s) / Setter(s) ...
//
// Handlers ...
/**
* Event Handling for Mouse Movement ...
* @param id: Event ID
* @param lparam: Event parameter of long type
* @param dparam: Event parameter of double type
* @param sparam: Event parameter of string type
*/
void OnEvent(
int id,
long lparam,
double dparam,
string sparam //
)
{
//
// Handle mouse movement events for dragging the rectangle label
if (id == CHARTEVENT_MOUSE_MOVE)
{
//
int X = (int)lparam;
int Y = (int)dparam;
int MouseState = (int)sparam;
//
string name = mName;
int XSize = (int)ObjectGetInteger(0, name, OBJPROP_XSIZE);
int YSize = (int)ObjectGetInteger(0, name, OBJPROP_YSIZE);
int XDistance = (int)ObjectGetInteger(0, name, OBJPROP_XDISTANCE);
int YDistance = (int)ObjectGetInteger(0, name, OBJPROP_YDISTANCE);
//
if (MouseState == 1 &&
mPreviousMouseState == 0)
{
//
mlbDownX = X;
mlbDownY = Y;
mlbDownXDistance = XDistance;
mlbDownYDistance = YDistance;
//
if (X >= XDistance &&
Y >= YDistance &&
X <= XDistance + XSize &&
Y <= YDistance + YSize)
{
mMovingState = true;
}
}
//
if (mMovingState)
{
//
ChartSetInteger(0, CHART_MOUSE_SCROLL, false);
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, mlbDownXDistance + X - mlbDownX);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, mlbDownYDistance + Y - mlbDownY);
//
for (int i = 0; i < ArraySize(mAddedNames); i++)
{
//
ObjectSetInteger(0, mAddedNames[i], OBJPROP_XDISTANCE, mlbDownXDistance + X - mlbDownX - mAddedXDisDiffrence[i]);
ObjectSetInteger(0, mAddedNames[i], OBJPROP_YDISTANCE, mlbDownYDistance + Y - mlbDownY - mAddedYDisDiffrence[i]);
}
//
ChartRedraw(0);
}
//
if (MouseState == 0)
{
//
mMovingState = false;
ChartSetInteger(0, CHART_MOUSE_SCROLL, true);
}
//
mPreviousMouseState = MouseState;
}
}
//
// Actions ...
/**
* Create an Instance of Class Object ...
*
* @param name: Object Name
* @param xDis: X Distance
* @param yDis: Y Distance
* @param xSize: X Size
* @param ySize: Y Size
*/
bool Create(
string name,
int xDis,
int yDis,
int xSize,
int ySize //
)
{
//
// Object creation and property settings
bool result = false;
//
result = ObjectCreate(0, name, OBJ_RECTANGLE_LABEL, 0, 0, 0);
if (!result)
{
return result;
}
//
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xDis);
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDis);
ObjectSetInteger(0, name, OBJPROP_XSIZE, xSize);
ObjectSetInteger(0, name, OBJPROP_YSIZE, ySize);
//
mName = name;
//
return result;
}
/**
* Destroy Class Instance ...
*/
void Destroy()
{
ObjectDelete(0, mName);
}
/**
* Set Object Border Type ...
*
* @param borderType: Specified border type
*/
void SetBorderType(ENUM_BORDER_TYPE borderType)
{
//
ObjectSetInteger(
0,
mName,
OBJPROP_BORDER_TYPE,
borderType //
);
}
/**
* Set Object Background Color
*
* @param value: color
*/
void SetBGColor(color value)
{
//
ObjectSetInteger(
0,
mName,
OBJPROP_BGCOLOR,
value //
);
}
/**
* Add a Name to Object
* @param name: name
*/
void Add(string name)
{
//
// Add a new object by name to the rectangle label and track distances
ArrayResize(mAddedNames, ArraySize(mAddedNames) + 1);
ArrayResize(mAddedXDisDiffrence, ArraySize(mAddedXDisDiffrence) + 1);
ArrayResize(mAddedYDisDiffrence, ArraySize(mAddedYDisDiffrence) + 1);
//
mAddedNames[ArraySize(mAddedNames) - 1] = name;
mAddedXDisDiffrence[ArraySize(mAddedXDisDiffrence) - 1] = ObjectGetInteger(0, mName, OBJPROP_XDISTANCE) - ObjectGetInteger(0, name, OBJPROP_XDISTANCE);
mAddedYDisDiffrence[ArraySize(mAddedYDisDiffrence) - 1] = ObjectGetInteger(0, mName, OBJPROP_YDISTANCE) - ObjectGetInteger(0, name, OBJPROP_YDISTANCE);
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
//
string mName; // Name of Object
//
// Mouse state tracking variables ...
int mlbDownX;
int mlbDownY;
int mlbDownXDistance;
int mlbDownYDistance;
int mPreviousMouseState;
//
bool mMovingState; // State for whether the object is moving
//
string mAddedNames[]; // Array of added names
long mAddedXDisDiffrence[]; // Arrays to store added distance differences
long mAddedYDisDiffrence[]; // Arrays to store added distance differences
};