429 lines
15 KiB
Plaintext
429 lines
15 KiB
Plaintext
//=====================================================================
|
|
// A library for output of text information on the chart.
|
|
//=====================================================================
|
|
|
|
//---------------------------------------------------------------------
|
|
#property copyright "Dima S., 2010 ã."
|
|
#property link "dimascub@mail.com"
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
#import "user32.dll"
|
|
int GetSystemMetrics(int _index);
|
|
#import
|
|
//---------------------------------------------------------------------
|
|
#define SM_CXSCREEN 0
|
|
#define SM_CYSCREEN 1
|
|
#define SM_CXFULLSCREEN 16
|
|
#define SM_CYFULLSCREEN 17
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// Include libraries
|
|
//---------------------------------------------------------------------
|
|
#include <ChartObjects\ChartObjectsTxtControls.mqh>
|
|
#include <Arrays\List.mqh>
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// TTitleDisplay class
|
|
//---------------------------------------------------------------------
|
|
class TTitleDisplay : public CChartObjectLabel
|
|
{
|
|
protected:
|
|
long chart_id;
|
|
int sub_window;
|
|
long chart_width; // chart width in pixels
|
|
long chart_height; // chart height in pixels
|
|
long chart_width_step; // chart width step
|
|
long chart_height_step; // chart height step
|
|
int columns_number; // number of columns
|
|
int lines_number; // number of rows
|
|
int curr_column;
|
|
int curr_row;
|
|
|
|
private:
|
|
void SetParams(long _chart_id,int _window,int _cols,int _lines);// set object parameters
|
|
|
|
public:
|
|
string GetUniqName(); // get unique name
|
|
bool Create(long _chart_id,int _window,int _cols,int _lines,int _col,int _row);
|
|
void RecalcAndRedraw(); // recalculate coordinates and redraw
|
|
|
|
public:
|
|
void TTitleDisplay(); // constructor
|
|
void ~TTitleDisplay(); // destructor
|
|
|
|
};
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// Constructor
|
|
//---------------------------------------------------------------------
|
|
void TTitleDisplay::TTitleDisplay()
|
|
{
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Desctructor
|
|
//---------------------------------------------------------------------
|
|
void TTitleDisplay::~TTitleDisplay()
|
|
{
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Create object
|
|
//---------------------------------------------------------------------
|
|
bool TTitleDisplay::Create(long _chart_id,int _window,int _cols,int _lines,int _col,int _row)
|
|
{
|
|
this.curr_column=_col;
|
|
this.curr_row=_row;
|
|
SetParams(_chart_id,_window,_cols,_lines);
|
|
|
|
return(this.Create(this.chart_id,this.GetUniqName(),this.sub_window,(int)(_col*this.chart_width_step),(int)(_row*this.chart_height_step)));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set object parameters
|
|
//---------------------------------------------------------------------
|
|
void TTitleDisplay::SetParams(long _chart_id,int _window,int _cols,int _lines)
|
|
{
|
|
this.chart_id=_chart_id;
|
|
this.sub_window=_window;
|
|
this.columns_number=_cols;
|
|
this.lines_number=_lines;
|
|
|
|
// get chart width in pixels
|
|
this.chart_width=GetSystemMetrics(SM_CXFULLSCREEN);
|
|
this.chart_height=GetSystemMetrics(SM_CYFULLSCREEN);
|
|
|
|
// calculate steps
|
|
this.chart_width_step=this.chart_width/_cols;
|
|
this.chart_height_step=this.chart_height/_lines;
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Recalculate object parameters and redraw
|
|
//---------------------------------------------------------------------
|
|
void TTitleDisplay::RecalcAndRedraw()
|
|
{
|
|
// Get size of the chart (in pixels)
|
|
long width=GetSystemMetrics(SM_CXFULLSCREEN);
|
|
long height=GetSystemMetrics(SM_CYFULLSCREEN);
|
|
if(width==this.chart_width && height==this.chart_height)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.chart_width=width;
|
|
this.chart_height=height;
|
|
|
|
// Recalculate steps
|
|
this.chart_width_step=this.chart_width/this.columns_number;
|
|
this.chart_height_step=this.chart_height/this.lines_number;
|
|
|
|
// Move object to new coordinates
|
|
this.X_Distance(( int )( this.curr_column * this.chart_width_step ));
|
|
this.Y_Distance(( int )( this.curr_row * this.chart_height_step ));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Get unique name
|
|
//---------------------------------------------------------------------
|
|
string TTitleDisplay::GetUniqName()
|
|
{
|
|
static uint prev_count=0;
|
|
|
|
uint count=GetTickCount();
|
|
while(1)
|
|
{
|
|
if(prev_count==UINT_MAX)
|
|
{
|
|
prev_count=0;
|
|
}
|
|
if(count<=prev_count)
|
|
{
|
|
prev_count++;
|
|
count=prev_count;
|
|
}
|
|
else
|
|
{
|
|
prev_count=count;
|
|
}
|
|
|
|
// Check the presence of the object with the same name
|
|
string name=TimeToString(TimeGMT(),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" "+DoubleToString(count,0);
|
|
if(ObjectFind(0,name)<0)
|
|
{
|
|
return(name);
|
|
}
|
|
}
|
|
|
|
return(NULL);
|
|
}
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// TFieldDisplay class
|
|
//---------------------------------------------------------------------
|
|
class TFieldDisplay : public CChartObjectEdit
|
|
{
|
|
protected:
|
|
long chart_id;
|
|
int sub_window;
|
|
long chart_width; // chart width in pixels
|
|
long chart_height; // chart height in pixels
|
|
long chart_width_step; // horizontal step size
|
|
long chart_height_step; // vertical step size
|
|
int columns_number; // number of columns
|
|
int limes_number; // number of rows
|
|
int curr_column;
|
|
int curr_row;
|
|
|
|
private:
|
|
int type; // edit field type ( string, numerical )
|
|
|
|
private:
|
|
void SetParams(long _chart_id,int _window,int _cols,int _lines);// set object parameters
|
|
|
|
public:
|
|
string GetUniqName(); // get unique name
|
|
bool Create(long _chart_id,int _window,int _cols,int _lines,int _col,int _row);
|
|
void RecalcAndRedraw(); // recalculate coordinates and redraw
|
|
|
|
public:
|
|
void TFieldDisplay(); // constructor
|
|
void ~TFieldDisplay(); // desctructor
|
|
};
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// Constructor
|
|
//---------------------------------------------------------------------
|
|
void TFieldDisplay::TFieldDisplay()
|
|
{
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Destructor
|
|
//---------------------------------------------------------------------
|
|
void TFieldDisplay::~TFieldDisplay()
|
|
{
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Create object
|
|
//---------------------------------------------------------------------
|
|
bool TFieldDisplay::Create(long _chart_id,int _window,int _cols,int _lines,int _col,int _row)
|
|
{
|
|
this.curr_column=_col;
|
|
this.curr_row=_row;
|
|
SetParams(_chart_id,_window,_cols,_lines);
|
|
|
|
return(this.Create(this.chart_id,this.GetUniqName(),this.sub_window,(int)(_col*this.chart_width_step),(int)(_row*this.chart_height_step)));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set object parameters
|
|
//---------------------------------------------------------------------
|
|
void TFieldDisplay::SetParams(long _chart_id,int _window,int _cols,int _lines)
|
|
{
|
|
this.chart_id=_chart_id;
|
|
this.sub_window=_window;
|
|
this.columns_number=_cols;
|
|
this.limes_number=_lines;
|
|
|
|
// get window width in pixels
|
|
this.chart_width=GetSystemMetrics(SM_CXFULLSCREEN);
|
|
this.chart_height=GetSystemMetrics(SM_CYFULLSCREEN);
|
|
|
|
// calculate steps
|
|
this.chart_width_step=this.chart_width/_cols;
|
|
this.chart_height_step=this.chart_height/_lines;
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Recalculate and redraw
|
|
//---------------------------------------------------------------------
|
|
void TFieldDisplay::RecalcAndRedraw()
|
|
{
|
|
// get window size (in pixels)
|
|
long width=GetSystemMetrics(SM_CXFULLSCREEN);
|
|
long height=GetSystemMetrics(SM_CYFULLSCREEN);
|
|
if(width==this.chart_width && height==this.chart_height)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.chart_width=width;
|
|
this.chart_height=height;
|
|
|
|
// Calculate steps
|
|
this.chart_width_step=this.chart_width/this.columns_number;
|
|
this.chart_height_step=this.chart_height/this.limes_number;
|
|
|
|
// Move object to new coordinates
|
|
this.X_Distance(( int )( this.curr_column * this.chart_width_step ));
|
|
this.Y_Distance(( int )( this.curr_row * this.chart_height_step ));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Get unique name
|
|
//---------------------------------------------------------------------
|
|
string TFieldDisplay::GetUniqName()
|
|
{
|
|
static uint prev_count=0;
|
|
|
|
uint count=GetTickCount();
|
|
while(1)
|
|
{
|
|
if(prev_count==UINT_MAX)
|
|
{
|
|
prev_count=0;
|
|
}
|
|
if(count<=prev_count)
|
|
{
|
|
prev_count++;
|
|
count=prev_count;
|
|
}
|
|
else
|
|
{
|
|
prev_count=count;
|
|
}
|
|
|
|
// Ïðîâåðèì, íåò ëè óæå îáúåêòà ñ òàêèì èìåíåì:
|
|
string name=TimeToString(TimeGMT(),TIME_DATE|TIME_MINUTES|TIME_SECONDS)+" "+DoubleToString(count,0);
|
|
if(ObjectFind(0,name)<0)
|
|
{
|
|
return(name);
|
|
}
|
|
}
|
|
|
|
return(NULL);
|
|
}
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// TableDisplay class (List of objects)
|
|
//---------------------------------------------------------------------
|
|
class TableDisplay : public CList
|
|
{
|
|
protected:
|
|
long chart_id;
|
|
int sub_window;
|
|
ENUM_BASE_CORNER corner;
|
|
|
|
public:
|
|
void SetParams(long _chart_id,int _window,ENUM_BASE_CORNER _corner=CORNER_LEFT_UPPER);
|
|
int AddTitleObject(int _cols,int _lines,int _col,int _row,string _title,color _color,string _fontname="Arial",int _fontsize=10);
|
|
int AddFieldObject(int _cols,int _lines,int _col,int _row,color _color,string _fontname="Arial",int _fontsize=10);
|
|
bool SetColor(int _index,color _color);
|
|
bool SetFont(int _index,string _fontname,int _fontsize);
|
|
bool SetText(int _index,string _text);
|
|
bool SetAnchor(int _index,ENUM_ANCHOR_POINT _anchor);
|
|
|
|
public:
|
|
void TableDisplay();
|
|
void ~TableDisplay();
|
|
};
|
|
//---------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------
|
|
// Constructor
|
|
//---------------------------------------------------------------------
|
|
void TableDisplay::TableDisplay()
|
|
{
|
|
this.chart_id=0;
|
|
this.sub_window=0;
|
|
this.corner=CORNER_LEFT_UPPER;
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Destructor
|
|
//---------------------------------------------------------------------
|
|
void TableDisplay::~TableDisplay()
|
|
{
|
|
// Delete all objects
|
|
this.Clear();
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set common parameters for all list objects
|
|
//---------------------------------------------------------------------
|
|
void TableDisplay::SetParams(long _chart_id,int _window,ENUM_BASE_CORNER _corner)
|
|
{
|
|
this.chart_id=_chart_id;
|
|
this.sub_window=_window;
|
|
this.corner=_corner;
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Add a header (title) object
|
|
//---------------------------------------------------------------------
|
|
int TableDisplay::AddTitleObject(int _cols,int _lines,int _col,int _row,string _title,color _color,string _fontname,int _fontsize)
|
|
{
|
|
TTitleDisplay *title=new TTitleDisplay();
|
|
title.Create( this.chart_id, this.sub_window, _cols, _lines, _col, _row );
|
|
title.Description( _title );
|
|
title.Color( _color );
|
|
title.Font( _fontname );
|
|
title.FontSize( _fontsize );
|
|
title.Corner( this.corner );
|
|
return(this.Add(title));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Add Edit Field object
|
|
//---------------------------------------------------------------------
|
|
int TableDisplay::AddFieldObject(int _cols,int _lines,int _col,int _row,color _color,string _fontname,int _fontsize)
|
|
{
|
|
TFieldDisplay *field=new TFieldDisplay();
|
|
field.Create( this.chart_id, this.sub_window, _cols, _lines, _col, _row );
|
|
field.Description( "" );
|
|
field.Color( _color );
|
|
field.Font( _fontname );
|
|
field.FontSize( _fontsize );
|
|
field.Corner( this.corner );
|
|
return(this.Add(field));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set Anchor points
|
|
//---------------------------------------------------------------------
|
|
bool TableDisplay::SetAnchor(int _index,ENUM_ANCHOR_POINT _anchor)
|
|
{
|
|
CChartObjectText *object=GetNodeAtIndex(_index);
|
|
if(object==NULL)
|
|
{
|
|
return(false);
|
|
}
|
|
return(object.Anchor(_anchor));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set color of graphic object
|
|
//---------------------------------------------------------------------
|
|
bool TableDisplay::SetColor(int _index,color _color)
|
|
{
|
|
CChartObjectText *object=GetNodeAtIndex(_index);
|
|
if(object==NULL)
|
|
{
|
|
return(false);
|
|
}
|
|
return(object.Color(_color));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set font
|
|
//---------------------------------------------------------------------
|
|
bool TableDisplay::SetFont(int _index,string _fontname,int _fontsize)
|
|
{
|
|
CChartObjectText *object=GetNodeAtIndex(_index);
|
|
if(object==NULL)
|
|
{
|
|
return(false);
|
|
}
|
|
|
|
if(object.Font(_fontname)==false)
|
|
{
|
|
return(false);
|
|
}
|
|
return(object.FontSize(_fontsize));
|
|
}
|
|
//---------------------------------------------------------------------
|
|
// Set text
|
|
//---------------------------------------------------------------------
|
|
bool TableDisplay::SetText(int _index,string _text)
|
|
{
|
|
CChartObjectText *object=GetNodeAtIndex(_index);
|
|
if(object==NULL)
|
|
{
|
|
return(false);
|
|
}
|
|
return(object.Description(_text));
|
|
}
|
|
//---------------------------------------------------------------------
|