Add Supports for Signalling Panel and its Actions and also Completely Test it ...

This commit is contained in:
2024-09-25 06:41:21 +03:30
parent 960ac6fd82
commit 20aeac12f6
3 changed files with 286 additions and 90 deletions
@@ -122,6 +122,16 @@ class XCButton : XSCBase
ObjectSetInteger(0, mName, OBJPROP_BGCOLOR, value); ObjectSetInteger(0, mName, OBJPROP_BGCOLOR, value);
} }
/**
* Set Object Text Color ...
*
* @param value: Color
*/
void SetColor(color value)
{
ObjectSetInteger(0, mName, OBJPROP_COLOR, value);
}
/** /**
* Set Object Text ... * Set Object Text ...
* *
@@ -152,6 +162,16 @@ class XCButton : XSCBase
ObjectSetInteger(0, mName, OBJPROP_BACK, value); ObjectSetInteger(0, mName, OBJPROP_BACK, value);
} }
/**
* Set Button Click State ...
*
* @param value: state
*/
void SetState(bool value)
{
ObjectSetInteger(0, mName, OBJPROP_STATE, value);
}
// //
// Protected ... // Protected ...
protected: protected:
+31 -11
View File
@@ -107,7 +107,7 @@ class XCPanel : XSCBase
// //
mTitleBarName = name + "_TITLE_BAR"; mTitleBarName = name + "_TITLE_BAR";
mTitleTextName = name + "_CAPTION"; mCaptionLblName = name + "_CAPTION";
mBodyName = name + "_BODY"; mBodyName = name + "_BODY";
// //
@@ -156,22 +156,22 @@ class XCPanel : XSCBase
// //
// Caption ... // Caption ...
result = mTitleText.Create(mTitleTextName, xDis, yDis); result = mCaptionLbl.Create(mCaptionLblName, xDis, yDis);
if (!result) if (!result)
{ {
// //
Destroy(); Destroy();
return result; return result;
} }
mTitleText.SetText(caption); mCaptionLbl.SetText(caption);
mTitleText.SetAnchor(captionAnchor); mCaptionLbl.SetAnchor(captionAnchor);
mTitleText.SetTextColor(captionColor); mCaptionLbl.SetTextColor(captionColor);
mTitleText.SetFontSize(captionontSize); mCaptionLbl.SetFontSize(captionontSize);
// //
// Adding Child Objects ... // Adding Child Objects ...
mTitleBar.Add(mBodyName); mTitleBar.Add(mBodyName);
mTitleBar.Add(mTitleTextName); mTitleBar.Add(mCaptionLblName);
// //
return result; return result;
@@ -185,12 +185,12 @@ class XCPanel : XSCBase
// //
mBodyName = NULL; mBodyName = NULL;
mTitleBarName = NULL; mTitleBarName = NULL;
mTitleTextName = NULL; mCaptionLblName = NULL;
// //
mBody.Destroy(); mBody.Destroy();
mTitleBar.Destroy(); mTitleBar.Destroy();
mTitleText.Destroy(); mCaptionLbl.Destroy();
} }
/** /**
@@ -226,6 +226,26 @@ class XCPanel : XSCBase
mTitleBar.Add(name); mTitleBar.Add(name);
} }
/**
* Retrieve Panel Caption ...
*
* @return ( string )
*/
string Caption()
{
return mCaptionLbl.GetText();
}
/**
* Set Panel Caption ...
*
* @param value: Caption
*/
void Caption(string value)
{
mCaptionLbl.SetText(value);
}
// //
protected: protected:
private: private:
@@ -235,10 +255,10 @@ class XCPanel : XSCBase
// //
string mBodyName; string mBodyName;
string mTitleBarName; string mTitleBarName;
string mTitleTextName; string mCaptionLblName;
// //
XCLabel mTitleText; XCLabel mCaptionLbl;
XCRectangleLabel mBody; XCRectangleLabel mBody;
XCRectangleLabel mTitleBar; XCRectangleLabel mTitleBar;
+235 -79
View File
@@ -14,13 +14,16 @@ CTrade trade;
// //
string mTag; string mTag;
XCPanel eaPanel; XCPanel eaSignallingPanel;
XCButton eaStateBtn; string eaSignallingPanelName;
string eaStateBtnName; XCButton eaSignallingBtn;
XCButton eaLongStateBtn; string eaSignallingBtnName;
string eaLongStateBtnName; XCButton eaSignallingLongBtn;
XCButton eaShortStateBtn; string eaSignallingLongBtnName;
string eaShortStateBtnName; XCButton eaSignallingShortBtn;
string eaSignallingShortBtnName;
//
bool eaEnableLongs = true; bool eaEnableLongs = true;
bool eaEnableShorts = true; bool eaEnableShorts = true;
@@ -31,7 +34,8 @@ int OnInit()
{ {
// //
mTag = "XPanel"; mTag = "XPanel";
if (!InitialGUI()) { if (!InitialGUI())
{
return INIT_FAILED; return INIT_FAILED;
} }
@@ -47,6 +51,15 @@ void OnDeinit(const int reason)
DestroyGUI(); DestroyGUI();
} }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//
UpdateGUI();
}
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+
//|Chart event handling function | //|Chart event handling function |
//+------------------------------------------------------------------+ //+------------------------------------------------------------------+
@@ -54,7 +67,7 @@ void OnChartEvent(const int id, const long &lparam, const double &dparam, const
{ {
// //
// Handle Object Movement ... // Handle Object Movement ...
eaPanel.OnEvent(id, lparam, dparam, sparam); eaSignallingPanel.OnEvent(id, lparam, dparam, sparam);
// //
// Handle OnClick Event ... // Handle OnClick Event ...
@@ -76,71 +89,12 @@ bool InitialGUI()
bool result = false; bool result = false;
// //
// Create a Panel ... result = InitSignallingGUI();
result = eaPanel.Create(
mTag,
100,
100,
300,
200 //
);
if (!result) if (!result)
{ {
return result; return result;
} }
//
// Create Activation Button ...
string eaStatePrefix = mTag + "_State_";
//
// Signalling ...
eaStateBtnName = eaStatePrefix + "btn";
result = eaStateBtn.Create(
eaStateBtnName,
100,
120,
300,
25 //
);
if (!result)
{
return result;
}
eaPanel.Add(eaStateBtnName);
//
// Long Signalling ...
eaLongStateBtnName = eaStatePrefix + "_Long_btn";
result = eaLongStateBtn.Create(
eaLongStateBtnName,
100,
145,
150,
25 //
);
if (!result)
{
return result;
}
eaPanel.Add(eaLongStateBtnName);
//
// Short Signalling ...
eaShortStateBtnName = eaStatePrefix + "_Short_btn";
result = eaShortStateBtn.Create(
eaShortStateBtnName,
250,
145,
150,
25 //
);
if (!result)
{
return result;
}
eaPanel.Add(eaShortStateBtnName);
// //
ChartRedraw(0); ChartRedraw(0);
@@ -148,21 +102,164 @@ bool InitialGUI()
return result; return result;
} }
/**
* Update GUI Content ...
*/
void UpdateGUI()
{
//
UpdateSignallingGUI();
}
/**
* Initialize State and Signalling GUI ...
*
* @return ( bool )
*/
bool InitSignallingGUI()
{
//
bool result = false;
//
eaSignallingPanelName = mTag + "SIGNALLING";
//
// Create a Panel ...
result = eaSignallingPanel.Create(
eaSignallingPanelName,
100,
100,
300,
50 //
);
if (!result)
{
return result;
}
eaSignallingPanel.Caption("Signalling");
//
// Create Activation Button ...
string eaSignallingPrefix = eaSignallingPanelName + "_State_";
//
// Signalling ...
eaSignallingBtnName = eaSignallingPrefix + "btn";
result = eaSignallingBtn.Create(
eaSignallingBtnName,
100,
120,
300,
25 //
);
if (!result)
{
return result;
}
eaSignallingBtn.SetText("");
eaSignallingPanel.Add(eaSignallingBtnName);
//
// Long Signalling ...
eaSignallingLongBtnName = eaSignallingPrefix + "_Long_btn";
result = eaSignallingLongBtn.Create(
eaSignallingLongBtnName,
100,
145,
150,
25 //
);
if (!result)
{
return result;
}
eaSignallingLongBtn.SetText("");
eaSignallingPanel.Add(eaSignallingLongBtnName);
//
// Short Signalling ...
eaSignallingShortBtnName = eaSignallingPrefix + "_Short_btn";
result = eaSignallingShortBtn.Create(
eaSignallingShortBtnName,
250,
145,
150,
25 //
);
if (!result)
{
return result;
}
eaSignallingShortBtn.SetText("");
eaSignallingPanel.Add(eaSignallingShortBtnName);
//
UpdateSignallingGUI();
//
return result;
}
/**
* Update Signalling GUI Content ...
*/
void UpdateSignallingGUI()
{
//
// Preparing State ...
bool isSignallingActive = eaEnableLongs ||
eaEnableShorts;
//
// All Signalls ...
color mSignallingBtnTextColor = isSignallingActive
? clrRed
: clrGreen;
string mSignallingBtnText = isSignallingActive
? "Deactive"
: "Active";
eaSignallingBtn.SetText(mSignallingBtnText);
eaSignallingBtn.SetColor(mSignallingBtnTextColor);
//
// Long Signals ...
color mSignallingLongBtnTextColor = eaEnableLongs
? clrRed
: clrGreen;
string mSignallingLongBtnText = eaEnableLongs
? "Deactive Longs"
: "Active Longs";
eaSignallingLongBtn.SetText(mSignallingLongBtnText);
eaSignallingLongBtn.SetColor(mSignallingLongBtnTextColor);
//
// Short Signals ...
color mSignallingShortBtnTextColor = eaEnableShorts
? clrRed
: clrGreen;
string mSignallingShortBtnText = eaEnableShorts
? "Deactive Shorts"
: "Active Shorts";
eaSignallingShortBtn.SetText(mSignallingShortBtnText);
eaSignallingShortBtn.SetColor(mSignallingShortBtnTextColor);
}
/** /**
* Destroy GUI ... * Destroy GUI ...
*/ */
void DestroyGUI() void DestroyGUI()
{ {
// //
eaStateBtnName = NULL; eaSignallingBtnName = NULL;
eaLongStateBtnName = NULL; eaSignallingLongBtnName = NULL;
eaShortStateBtnName = NULL; eaSignallingShortBtnName = NULL;
// //
eaPanel.Destroy(); eaSignallingPanel.Destroy();
eaStateBtn.Destroy(); eaSignallingBtn.Destroy();
eaLongStateBtn.Destroy(); eaSignallingLongBtn.Destroy();
eaShortStateBtn.Destroy(); eaSignallingShortBtn.Destroy();
} }
/** /**
@@ -180,23 +277,82 @@ void HandleOnClickEvent(string name)
// //
// State Button ... // State Button ...
if (name == eaStateBtnName) bool isClicked = false;
if (name == eaSignallingBtnName)
{ {
// //
isClicked = true;
HandleChangeState();
eaSignallingBtn.SetState(false);
Print("State Button Clicked ..."); Print("State Button Clicked ...");
} }
// //
else if (name == eaLongStateBtnName) else if (name == eaSignallingLongBtnName)
{ {
// //
isClicked = true;
HandleChangeLongsState();
eaSignallingLongBtn.SetState(false);
Print("Long State Button Clicked ..."); Print("Long State Button Clicked ...");
} }
// //
else if (name == eaShortStateBtnName) else if (name == eaSignallingShortBtnName)
{ {
// //
isClicked = true;
HandleChangeShortsState();
eaSignallingShortBtn.SetState(false);
Print("Short State Button Clicked ..."); Print("Short State Button Clicked ...");
} }
//
if (isClicked)
{
UpdateGUI();
}
}
//
// GUI EVENT Handlers ...
/**
* Toggle Signalling State ...
*/
void HandleChangeState()
{
//
bool isActive = eaEnableLongs ||
eaEnableShorts;
//
if (isActive)
{
//
eaEnableLongs = false;
eaEnableShorts = false;
}
else
{
//
eaEnableLongs = true;
eaEnableShorts = true;
}
}
/**
* Toggle Longs Signalling State ...
*/
void HandleChangeLongsState()
{
eaEnableLongs = !eaEnableLongs;
}
/**
* Toggle Shorts Signalling State ...
*/
void HandleChangeShortsState()
{
eaEnableShorts = !eaEnableShorts;
} }
// //