scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
329 lines (328 loc) • 14.1 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.PieSegment = void 0;
var classFactory_1 = require("../../../../Builder/classFactory");
var Point_1 = require("../../../../Core/Point");
var BaseType_1 = require("../../../../types/BaseType");
var guid_1 = require("../../../../utils/guid");
var PieLabelProvider_1 = require("../../Axis/LabelProvider/PieLabelProvider");
var constants_1 = require("./constants");
var PieSegment = /** @class */ (function () {
function PieSegment(options) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
this.colorProperty = "grey";
this.isSelectedProperty = false;
this.textProperty = "";
this.deltaProperty = 15;
this.shiftProperty = 0;
this.labelOffsetProperty = new Point_1.Point(0, 0);
this.radiusAdjustmentProperty = 1;
this.id = (_a = options === null || options === void 0 ? void 0 : options.id) !== null && _a !== void 0 ? _a : (0, guid_1.generateGuid)();
this.colorProperty = (_b = options === null || options === void 0 ? void 0 : options.color) !== null && _b !== void 0 ? _b : this.colorProperty;
this.colorLinearGradientProperty = (_c = options === null || options === void 0 ? void 0 : options.colorLinearGradient) !== null && _c !== void 0 ? _c : this.colorLinearGradientProperty;
this.isSelectedProperty = (_d = options === null || options === void 0 ? void 0 : options.isSelected) !== null && _d !== void 0 ? _d : this.isSelectedProperty;
this.textProperty = (_e = options === null || options === void 0 ? void 0 : options.text) !== null && _e !== void 0 ? _e : this.textProperty;
this.valueProperty = (_f = options === null || options === void 0 ? void 0 : options.value) !== null && _f !== void 0 ? _f : this.valueProperty;
this.deltaProperty = (_g = options === null || options === void 0 ? void 0 : options.delta) !== null && _g !== void 0 ? _g : this.deltaProperty;
this.showLabelProperty = (_h = options === null || options === void 0 ? void 0 : options.showLabel) !== null && _h !== void 0 ? _h : true;
if (options === null || options === void 0 ? void 0 : options.labelProvider) {
if (!("getSegmentText" in (options === null || options === void 0 ? void 0 : options.labelProvider))) {
options.labelProvider = (0, classFactory_1.createType)(BaseType_1.EBaseType.LabelProvider, options.labelProvider.type, undefined, options.labelProvider.options);
}
}
this.labelProviderProperty = options === null || options === void 0 ? void 0 : options.labelProvider; // No default here as we default to labelprovider on parent surface
this.labelOffsetProperty = (_j = options === null || options === void 0 ? void 0 : options.labelOffset) !== null && _j !== void 0 ? _j : this.labelOffsetProperty;
this.labelStyleProperty = options === null || options === void 0 ? void 0 : options.labelStyle;
this.radiusAdjustmentProperty = (_k = options === null || options === void 0 ? void 0 : options.radiusAdjustment) !== null && _k !== void 0 ? _k : this.radiusAdjustmentProperty;
}
PieSegment.prototype.onAttach = function (scps) {
this.parentSurface = scps;
if (this.labelProviderProperty) {
this.labelProviderProperty.attachedToSurface(scps);
}
this.invalidateParentCallback = scps.invalidateElement;
};
PieSegment.prototype.onDetach = function () {
this.invalidateParentCallback = undefined;
};
Object.defineProperty(PieSegment.prototype, "showLabel", {
// GETTERS AND SETTERS FOR PROPERTIES
/**
* When true, show the label on this pie segment, else false
*/
get: function () {
return this.showLabelProperty;
},
/**
* When true, show the label on this pie segment, else false
*/
set: function (value) {
this.showLabelProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.SHOW_LABEL);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "colorLinearGradient", {
/**
* An optional color gradient
*/
get: function () {
return this.colorLinearGradientProperty;
},
/**
* An optional color gradient
*/
set: function (value) {
this.colorLinearGradientProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.COLOR_LINEAR_GRADIENT);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "color", {
/**
* The color of the segment as an HTML color code
*/
get: function () {
return this.colorProperty;
},
/**
* The color of the segment as an HTML color code
*/
set: function (value) {
this.colorProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.COLOR);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "isSelected", {
/**
* Whether the segment is selected. Selected segments are shifted outwards by the delta
*/
get: function () {
return this.isSelectedProperty;
},
/**
* Whether the segment is selected. Selected segments are shifted outwards by the delta
*/
set: function (value) {
if (this.isSelectedProperty !== value) {
this.isSelectedProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.IS_SELECTED);
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "text", {
/**
* A text value for the segment which will be displayed in the legend
*/
get: function () {
return this.textProperty;
},
/**
* A text value for the segment which will be displayed in the legend
*/
set: function (value) {
this.textProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.TEXT);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "labelProvider", {
/**
* Optional class that can override the default label formatting for this segment only. Must be or inherit from {@link PieLabelProvider}
*/
get: function () {
// Create a labelProvider if it is accessed. This will override behaviour from the parent surface
if (this.labelProviderProperty === undefined) {
this.labelProvider = new PieLabelProvider_1.PieLabelProvider();
}
return this.labelProviderProperty;
},
/**
* Optional class that can override the default label formatting for this segment only. Must be or inherit from {@link PieLabelProvider}
*/
set: function (value) {
this.labelProviderProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.LABEL_PROVIDER);
},
enumerable: false,
configurable: true
});
PieSegment.prototype.getPercentage = function (total) {
return (100 * this.value) / total;
};
Object.defineProperty(PieSegment.prototype, "value", {
/**
* The numerical value of the segment
*/
get: function () {
return this.valueProperty;
},
/**
* The numerical value of the segment
*/
set: function (value) {
this.oldValueProperty = this.valueProperty;
this.valueProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.VALUE);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "oldValue", {
/**
* The previous value of the segment, if it has been updated. Used for animations
*/
get: function () {
return this.oldValueProperty;
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "delta", {
/**
* The amount to shift the segment when it is selected. Default 15 px
*/
get: function () {
return this.deltaProperty;
},
/**
* The amount to shift the segment when it is selected. Default 15 px
*/
set: function (value) {
if (this.deltaProperty !== value) {
this.deltaProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.DELTA);
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "shift", {
/**
* The amount the segment is shifted radially outwards. Automatically set during selected/deselection animations
* Do not set this directly. Use delta and isSelected instead
*/
get: function () {
return this.shiftProperty;
},
/**
* The amount the segment is shifted radially outwards. Automatically set during selected/deselection animations
*/
set: function (value) {
if (this.shiftProperty !== value) {
this.shiftProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.SHIFT);
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "labelStyle", {
/**
* Gets or sets a {@link TTextStyle} object for styling labels for this segment only
*/
get: function () {
var _a;
return __assign(__assign({}, (_a = this.parentSurface) === null || _a === void 0 ? void 0 : _a.labelStyle), this.labelStyleProperty);
},
/**
* Gets or sets a {@link TTextStyle} object for styling labels for this segment only
*/
set: function (textStyle) {
this.labelStyleProperty = __assign(__assign({}, this.labelStyleProperty), textStyle);
this.notifyPropertyChanged(constants_1.PROPERTY.LABEL_STYLE);
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "labelOffset", {
/**
* An x, y offset for the label position
*/
get: function () {
return this.labelOffsetProperty;
},
/**
* An x, y offset for the label position
*/
set: function (value) {
var _a, _b;
if (((_a = this.labelOffsetProperty) === null || _a === void 0 ? void 0 : _a.x) !== value.x && ((_b = this.labelOffsetProperty) === null || _b === void 0 ? void 0 : _b.y) !== value.y) {
this.labelOffsetProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.LABEL_OFFSET);
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(PieSegment.prototype, "radiusAdjustment", {
/**
* A relative adjustment of the radius for this segment. eg 1.5 will be 50% larger than normal
*/
get: function () {
return this.radiusAdjustmentProperty;
},
/**
* A relative adjustment of the radius for this segment. eg 1.5 will be 50% larger than normal
*/
set: function (value) {
this.radiusAdjustmentProperty = value;
this.notifyPropertyChanged(constants_1.PROPERTY.RADIUS_ADJUSTMENT);
},
enumerable: false,
configurable: true
});
PieSegment.prototype.toJSON = function () {
var _a;
return {
id: this.id,
color: this.color,
colorLinearGradient: this.colorLinearGradient,
isSelected: this.isSelected,
delta: this.delta,
text: this.text,
value: this.value,
// @ts-ignore
labelProvider: (_a = this.labelProviderProperty) === null || _a === void 0 ? void 0 : _a.toJSON(),
labelOffset: this.labelOffset,
labelStyle: this.labelStyle,
radiusAdjustment: this.radiusAdjustment
};
};
PieSegment.prototype.getLabelText = function (total) {
if (this.labelProviderProperty) {
return this.labelProvider.getSegmentText(this, total);
}
else {
return this.parentSurface.labelProvider.getSegmentText(this, total);
}
};
PieSegment.prototype.notifyPropertyChanged = function (propertyName) {
if (propertyName === constants_1.PROPERTY.LABEL_PROVIDER && this.labelProviderProperty) {
this.labelProviderProperty.attachedToSurface(this.parentSurface);
}
if (this.invalidateParentCallback) {
this.invalidateParentCallback(propertyName);
}
};
return PieSegment;
}());
exports.PieSegment = PieSegment;