scichart
Version:
Fast WebGL JavaScript Charting Library and Framework
108 lines (107 loc) • 4.75 kB
TypeScript
import { Point } from "../../../Core/Point";
import { Rect } from "../../../Core/Rect";
import { IRenderContext2D } from "../../Drawing/IRenderContext2D";
import { CoordinateCalculatorBase } from "../../Numerics/CoordinateCalculators/CoordinateCalculatorBase";
import { SciChartSurfaceBase } from "../SciChartSurfaceBase";
import { BoxAnnotation, IBoxAnnotationOptions } from "./BoxAnnotation";
import { EAnnotationType, IAnnotation } from "./IAnnotation";
export interface ICompositeAnnotationOptions extends IBoxAnnotationOptions {
annotations?: IAnnotation[];
}
/**
* Interface for composite annotations that group multiple annotations together
*/
export interface ICompositeAnnotation extends IAnnotation {
/** Gets or sets the collection of child annotations */
annotations: IAnnotation[];
}
/**
* Parent annotation that groups other annotations and keeps child positions
* relative to the parent box.
*
* `CompositeAnnotation` is intentionally much simpler than
* {@link MultiPointAnnotationBase}. It does not define its own multi-point
* geometry, snapping, label anchors, segment labels or drag-grip model. Instead,
* it acts as a lightweight container: child annotations are attached to the same
* surface, assigned this annotation as their parent and repositioned when the
* composite box moves or resizes.
*
* Use this when several existing annotations should behave like one grouped
* object. Use {@link MultiPointAnnotationBase} derived annotations when the
* annotation itself is defined by multiple points and needs labels, snapping or
* specialized editing handles.
*/
export declare class CompositeAnnotation extends BoxAnnotation implements ICompositeAnnotation {
/** @inheritdoc */
readonly type = EAnnotationType.CompositeAnnotation;
private readonly children;
private readonly relativePositions;
private isUpdatingChildren;
/**
* Creates a new {@link CompositeAnnotation}
* @param options Configuration options. See {@link ICompositeAnnotationOptions} for details.
*/
constructor(options?: ICompositeAnnotationOptions);
/**
* Gets the child annotations contained within this composite.
* This array should be treated as read-only.
*/
get annotations(): IAnnotation[];
/**
* Replaces all child annotations in the composite.
* Existing children will be removed before adding the new ones.
*/
set annotations(value: IAnnotation[]);
/**
* Adds one or more annotations to the composite.
* Duplicate or invalid annotations are ignored.
* @param items Child annotation(s) to add
*/
add(...items: IAnnotation[]): void;
/**
* Removes a child annotation from the composite.
* @param annotation The child annotation to remove
* @param callDeleteOnChildren When `true`, calls delete() on the removed child
*/
remove(annotation: IAnnotation, callDeleteOnChildren?: boolean): void;
/**
* Removes all child annotations from the composite.
* @param callDeleteOnChildren When true, it also deletes the child annotations, which removes the memory claimed by the child annotations.
*
* Default `true`
*/
clear(callDeleteOnChildren?: boolean): void;
/**
* Sets a normalized relative position for a child annotation.
* Coordinates are expressed in the range [0..1] relative to the parent bounds.
* @param child The child annotation
* @param x1 Normalized X1 position
* @param y1 Normalized Y1 position
* @param x2 Optional normalized X2 position
* @param y2 Optional normalized Y2 position
*/
setChildRelativePosition(child: IAnnotation, x1: number, y1: number, x2?: number, y2?: number): void;
/** @inheritdoc */
onAttach(surface: SciChartSurfaceBase): void;
/** @inheritdoc */
onDetach(): void;
/** @inheritdoc */
drawWithContext(renderContext: IRenderContext2D, xCalc: CoordinateCalculatorBase, yCalc: CoordinateCalculatorBase, seriesViewRect: Rect, surfaceViewRect: Rect, chartViewRect: Rect): void;
/** @inheritdoc */
calcDragDistance(xyValues: Point): void;
private attachChild;
private captureInitialPosition;
private updateAllChildren;
private ensureNormalized;
private updateChildPosition;
private syncPropertiesToChildren;
/** @inheritdoc */
protected notifyPropertyChanged(propertyName: string): void;
/** @inheritdoc */
toJSON(): {
type: EAnnotationType;
options: Required<Omit<import("./AnnotationBase").IAnnotationBaseOptions, never>>;
};
/** @inheritdoc */
delete(): void;
}