Files
Pierre8rTeam f73c061349 Commit
2018-04-06 20:55:57 +02:00

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));
}
//---------------------------------------------------------------------