Cairo-Chart/src/Axis.vala

209 lines
3.6 KiB
Vala

namespace CairoChart {
/**
* ``Chart`` axis.
*/
public class Axis {
protected Chart chart;
protected string _format = "%.2Lf";
protected string _date_format = "%Y.%m.%d";
protected string _time_format = "%H:%M:%S";
protected int _dsec_signs = 2; // 2 signs = centiseconds
/**
* ``Axis`` title.
*/
public Text title;
/**
* ``Axis`` range/limits.
*/
public Range range = new Range();
/**
* Data type.
*/
public enum DType {
/**
* Float128 numbers.
*/
NUMBERS = 0,
/**
* Date/Time.
*/
DATE_TIME
}
/**
* Data type.
*/
public DType dtype;
/**
* ``Axis`` scale type.
*/
public enum Scale {
/**
* Linear scale.
*/
LINEAR = 0,
/**
* Logarithmic scale.
*/
// LOGARITHMIC,
}
/**
* Scale type.
*/
public Scale scale;
/**
* ``Axis`` position.
*/
public enum Position {
/**
* Bottom/Left ``Axis``.
*/
LOW = 0,
/**
* Top/Right ``Axis``.
*/
HIGH = 1,
/**
* 2 ``Axes``.
*/
BOTH = 2
}
/**
* Position.
*/
public Position position = Position.LOW;
/**
* Float128 numbers print string format.
*/
public virtual string format {
get { return _format; }
set {
// TODO: check format
_format = value;
}
default = "%.2Lf";
}
/**
* Date print string format.
*/
public virtual string date_format {
get { return _date_format; }
set {
// TODO: check format
_date_format = value;
}
default = "%Y.%m.%d";
}
/**
* Time print string format.
*/
public virtual string time_format {
get { return _time_format; }
set {
// TODO: check format
_time_format = value;
}
default = "%H:%M:%S";
}
/**
* Number of second's signs after point.
*
* 2 signs means centiseconds, 3 signs means milliseconds, etc...
*/
public virtual int dsec_signs {
get { return _dsec_signs; }
set {
// TODO: check format
_dsec_signs = value;
}
default = 2;
}
/**
* ``Axis`` Font style.
*/
public Font font = new Font ();
/**
* ``Axis`` color.
*/
public Color color = Color ();
/**
* ``Axis`` line style.
*/
public LineStyle line_style = LineStyle ();
/**
* Number of equally placed points to evaluate records sizes.
*/
public int nrecords = 128;
/**
* Constructs a new ``Axis``.
* @param chart {@link Chart} instance.
*/
public Axis (Chart chart) {
this.chart = chart;
title = new Text (chart, "");
}
/**
* Gets a copy of the ``Axis``.
*/
public virtual Axis copy () {
var axis = new Axis (chart);
axis._date_format = this._date_format;
axis._dsec_signs = this._dsec_signs;
axis._format = this._format;
axis._time_format = this._time_format;
axis.color = this.color;
axis.font = this.font.copy();
axis.line_style = this.line_style;
axis.range = this.range.copy();
axis.position = this.position;
axis.scale = this.scale;
axis.title = this.title.copy();
axis.dtype = this.dtype;
axis.nrecords = this.nrecords;
return axis;
}
/**
* Prints date/time to strings with a current formats.
*/
public virtual void print_dt (Float128 x, out string date, out string time) {
date = time = "";
var dt = new DateTime.from_unix_utc((int64)x);
date = dt.format(date_format);
var dsec_str =
("%."+(dsec_signs.to_string())+"Lf").printf((LongDouble)(x - (int64)x)).offset(1);
time = dt.format(time_format) + dsec_str;
}
/**
* Zooms out ``Axis``.
*/
public virtual void zoom_out () {
range.zoom_out();
}
}
}