aboutsummaryrefslogtreecommitdiff
path: root/src/client/northstar/utils/SizeConverter.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/northstar/utils/SizeConverter.ts')
-rw-r--r--src/client/northstar/utils/SizeConverter.ts82
1 files changed, 31 insertions, 51 deletions
diff --git a/src/client/northstar/utils/SizeConverter.ts b/src/client/northstar/utils/SizeConverter.ts
index 2dc2a7557..ffd162a83 100644
--- a/src/client/northstar/utils/SizeConverter.ts
+++ b/src/client/northstar/utils/SizeConverter.ts
@@ -1,68 +1,48 @@
import { PIXIPoint } from "./MathUtil";
-import { NominalVisualBinRange } from "../model/binRanges/NominalVisualBinRange";
import { VisualBinRange } from "../model/binRanges/VisualBinRange";
import { Bin, DoubleValueAggregateResult, AggregateKey } from "../model/idea/idea";
-import { AttributeTransformationModel } from "../core/attribute/AttributeTransformationModel";
import { ModelHelpers } from "../model/ModelHelpers";
+import { observable, action, computed } from "mobx";
export class SizeConverter {
- public RenderSize: Array<number> = new Array<number>(2);
- public DataMins: Array<number> = new Array<number>(2);;
- public DataMaxs: Array<number> = new Array<number>(2);;
- public DataRanges: Array<number> = new Array<number>(2);;
- public MaxLabelSizes: Array<PIXIPoint> = new Array<PIXIPoint>(2);;
-
- public LeftOffset: number = 40;
- public RightOffset: number = 20;
- public TopOffset: number = 20;
- public BottomOffset: number = 45;
-
- public IsSmall: boolean = false;
-
- constructor(size: { x: number, y: number }, visualBinRanges: Array<VisualBinRange>, labelAngle: number) {
- this.LeftOffset = 40;
- this.RightOffset = 20;
- this.TopOffset = 20;
- this.BottomOffset = 45;
- this.IsSmall = false;
-
- if (visualBinRanges.length < 1)
- return;
-
+ public DataMins: Array<number> = new Array<number>(2);
+ public DataMaxs: Array<number> = new Array<number>(2);
+ public DataRanges: Array<number> = new Array<number>(2);
+ public MaxLabelSizes: Array<PIXIPoint> = new Array<PIXIPoint>(2);
+ public RenderDimension: number = 300;
+
+ @observable _leftOffset: number = 40;
+ @observable _rightOffset: number = 20;
+ @observable _topOffset: number = 20;
+ @observable _bottomOffset: number = 45;
+ @observable _labelAngle: number = 0;
+ @observable _isSmall: boolean = false;
+ @observable public Initialized = 0;
+
+ @action public SetIsSmall(isSmall: boolean) { this._isSmall = isSmall; }
+ @action public SetLabelAngle(angle: number) { this._labelAngle = angle; }
+ @computed public get IsSmall() { return this._isSmall; }
+ @computed public get LabelAngle() { return this._labelAngle; }
+ @computed public get LeftOffset() { return this.IsSmall ? 5 : this._leftOffset; }
+ @computed public get RightOffset() { return this.IsSmall ? 5 : !this._labelAngle ? this._bottomOffset : Math.max(this._rightOffset, Math.cos(this._labelAngle) * (this.MaxLabelSizes[0].x + 18)); }
+ @computed public get TopOffset() { return this.IsSmall ? 5 : this._topOffset; }
+ @computed public get BottomOffset() { return this.IsSmall ? 25 : !this._labelAngle ? this._bottomOffset : Math.max(this._bottomOffset, Math.sin(this._labelAngle) * (this.MaxLabelSizes[0].x + 18)) + 18; }
+
+ public SetVisualBinRanges(visualBinRanges: Array<VisualBinRange>) {
+ this.Initialized++;
var xLabels = visualBinRanges[0].GetLabels();
var yLabels = visualBinRanges[1].GetLabels();
var xLabelStrings = xLabels.map(l => l.label!).sort(function (a, b) { return b.length - a.length });
var yLabelStrings = yLabels.map(l => l.label!).sort(function (a, b) { return b.length - a.length });
- var metricsX = { width: 100 }; // RenderUtils.MeasureText(FontStyles.Default.fontFamily.toString(), 12, // FontStyles.AxisLabel.fontSize as number,
+ var metricsX = { width: 75 }; // RenderUtils.MeasureText(FontStyles.Default.fontFamily.toString(), 12, // FontStyles.AxisLabel.fontSize as number,
//xLabelStrings[0]!.slice(0, 20)) // StyleConstants.MAX_CHAR_FOR_HISTOGRAM_LABELS));
var metricsY = { width: 22 }; // RenderUtils.MeasureText(FontStyles.Default.fontFamily.toString(), 12, // FontStyles.AxisLabel.fontSize as number,
// yLabelStrings[0]!.slice(0, 20)); // StyleConstants.MAX_CHAR_FOR_HISTOGRAM_LABELS));
this.MaxLabelSizes[0] = new PIXIPoint(metricsX.width, 12);// FontStyles.AxisLabel.fontSize as number);
this.MaxLabelSizes[1] = new PIXIPoint(metricsY.width, 12); // FontStyles.AxisLabel.fontSize as number);
- this.LeftOffset = Math.max(10, metricsY.width + 10 + 20);
-
- if (visualBinRanges[0] instanceof NominalVisualBinRange) {
- var lw = this.MaxLabelSizes[0].x + 18;
- this.BottomOffset = Math.max(this.BottomOffset, Math.cos(labelAngle) * lw) + 5;
- this.RightOffset = Math.max(this.RightOffset, Math.sin(labelAngle) * lw);
- }
-
- this.RenderSize[0] = (size.x - this.LeftOffset - this.RightOffset);
- this.RenderSize[1] = (size.y - this.TopOffset - this.BottomOffset);
-
- //if (this.RenderSize.reduce((agg, cur) => Math.min(agg, cur), Number.MAX_VALUE) < 40) {
- if ((this.RenderSize[0] < 40 && this.RenderSize[1] < 40) ||
- (this.RenderSize[0] < 0 || this.RenderSize[1] < 0)) {
- this.LeftOffset = 5;
- this.RightOffset = 5;
- this.TopOffset = 5;
- this.BottomOffset = 25;
- this.IsSmall = true;
- this.RenderSize[0] = (size.x - this.LeftOffset - this.RightOffset);
- this.RenderSize[1] = (size.y - this.TopOffset - this.BottomOffset);
- }
+ this._leftOffset = Math.max(10, metricsY.width + 10 + 20);
this.DataMins[0] = xLabels.map(l => l.minValue!).reduce((m, c) => Math.min(m, c), Number.MAX_VALUE);
this.DataMins[1] = yLabels.map(l => l.minValue!).reduce((m, c) => Math.min(m, c), Number.MAX_VALUE);
@@ -94,11 +74,11 @@ export class SizeConverter {
}
public DataToScreenX(x: number): number {
- return (((x - this.DataMins[0]) / this.DataRanges[0]) * (this.RenderSize[0]) + (this.LeftOffset));
+ return ((x - this.DataMins[0]) / this.DataRanges[0]) * this.RenderDimension;
}
public DataToScreenY(y: number, flip: boolean = true) {
- var retY = ((y - this.DataMins[1]) / this.DataRanges[1]) * (this.RenderSize[1]);
- return flip ? (this.RenderSize[1]) - retY + (this.TopOffset) : retY + (this.TopOffset);
+ var retY = ((y - this.DataMins[1]) / this.DataRanges[1]) * this.RenderDimension;
+ return flip ? (this.RenderDimension) - retY : retY;
}
public DataToScreenCoord(v: number, axis: number) {
if (axis == 0)