diff --git a/src/chart/components/x_axis/x-axis-scale.handler.ts b/src/chart/components/x_axis/x-axis-scale.handler.ts index b47fad8f..725c8be6 100644 --- a/src/chart/components/x_axis/x-axis-scale.handler.ts +++ b/src/chart/components/x_axis/x-axis-scale.handler.ts @@ -23,6 +23,9 @@ export class XAxisScaleHandler extends ChartBaseElement { lastXWidth: Unit = 0; lastXPxWidth: Pixel = 0; + private dblClickCallback: () => void; + private dblTapCallback: () => void; + constructor( private scale: ScaleModel, private canvasInputListener: CanvasInputListenerComponent, @@ -33,6 +36,9 @@ export class XAxisScaleHandler extends ChartBaseElement { ) { super(); + this.dblClickCallback = () => chartModel.doBasicScale(); + this.dblTapCallback = () => chartModel.doBasicScale(); + const dragNDropXComponent = new DragNDropXComponent( this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.X_AXIS), { @@ -63,9 +69,13 @@ export class XAxisScaleHandler extends ChartBaseElement { this.addRxSubscription( this.canvasInputListener .observeDbClick(this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.X_AXIS)) - .subscribe(() => this.chartModel.doBasicScale()), + .subscribe(() => this.dblClickCallback()), + ); + this.addRxSubscription( + this.canvasInputListener + .observeDbTap(this.canvasBoundsContainer.getBoundsHitTest(CanvasElement.X_AXIS)) + .subscribe(() => this.dblTapCallback()), ); - this.addRxSubscription( this.chartModel.candlesPrependSubject.subscribe( ({ prependedCandlesWidth }) => (this.lastXStart += prependedCandlesWidth), @@ -99,4 +109,8 @@ export class XAxisScaleHandler extends ChartBaseElement { // Continue redrawing hit test this.hitTestCanvasModel.hitTestDrawersPredicateSubject.next(true); }; + + public setDblTapCallback = (cb: () => void) => this.dblTapCallback = cb; + + public setDblClickCallback = (cb: () => void) => this.dblClickCallback = cb; } diff --git a/src/chart/components/x_axis/x-axis.component.ts b/src/chart/components/x_axis/x-axis.component.ts index 96fad6f1..188dabe0 100644 --- a/src/chart/components/x_axis/x-axis.component.ts +++ b/src/chart/components/x_axis/x-axis.component.ts @@ -199,5 +199,19 @@ export class XAxisComponent extends ChartBaseElement { public isVisible(): boolean { return this.config.components?.xAxis.visible ?? false; } + + /* This function assigns a callback to be executed when a double-click event is detected. + * It accepts one parameter `cb`, which is a callback function. + * When a double-click event occurs, the specified callback function `cb` will be invoked. + * By default it calls basic scale on XAxis + */ + public setDblClickCallback = (cb: () => void) => this.xAxisScaleHandler.setDblClickCallback(cb); + + /* This function assigns a callback to be executed when a double-tap event is detected. + * Similar to the dblclick function, it takes one parameter `cb`, which is a callback function. + * This function ensures that the callback `cb` is called whenever a double-tap event is triggered. + * By default it calls basic scale on XAxis + */ + public setDblTapCallback = (cb: () => void) => this.xAxisScaleHandler.setDblTapCallback(cb); //#endregion } diff --git a/src/chart/components/y_axis/y-axis-scale.handler.ts b/src/chart/components/y_axis/y-axis-scale.handler.ts index cef3f99c..766877f0 100644 --- a/src/chart/components/y_axis/y-axis-scale.handler.ts +++ b/src/chart/components/y_axis/y-axis-scale.handler.ts @@ -31,6 +31,9 @@ export class YAxisScaleHandler extends ChartBaseElement { lastYHeight: Unit = 0; lastYPxHeight: Pixel = 0; + private dblClickCallback: () => void; + private dblTapCallback: () => void; + constructor( private bus: EventBus, private config: YAxisConfig, @@ -39,10 +42,13 @@ export class YAxisScaleHandler extends ChartBaseElement { private canvasInputListener: CanvasInputListenerComponent, private bounds: CanvasBoundsContainer, private hitTest: HitBoundsTest, - private autoScaleCallback: (auto: boolean) => void, private hitTestCanvasModel: HitTestCanvasModel, ) { super(); + + this.dblClickCallback = () => scale.autoScale(true); + this.dblTapCallback = () => scale.autoScale(true); + // drag to Y-scale and double click to auto scale if (config.customScale) { const dragNDropYComponent = new DragNDropYComponent( @@ -66,7 +72,13 @@ export class YAxisScaleHandler extends ChartBaseElement { if (this.config.customScaleDblClick) { this.addRxSubscription( this.canvasInputListener.observeDbClick(this.hitTest).subscribe(() => { - this.autoScaleCallback(true); + this.dblClickCallback(); + this.bus.fireDraw(); + }), + ); + this.addRxSubscription( + this.canvasInputListener.observeDbTap(this.hitTest).subscribe(() => { + this.dblTapCallback(); this.bus.fireDraw(); }), ); @@ -102,7 +114,7 @@ export class YAxisScaleHandler extends ChartBaseElement { const newYEnd = this.lastYEnd + delta; if (this.lastYStart !== newYStart || this.lastYEnd !== newYEnd) { this.scale.setYScale(newYStart, newYEnd); - this.autoScaleCallback(false); + this.scale.state.auto = false; this.bus.fireDraw(); } }; @@ -112,4 +124,8 @@ export class YAxisScaleHandler extends ChartBaseElement { // Continue redrawing hit test this.hitTestCanvasModel.hitTestDrawersPredicateSubject.next(true); }; + + public setDblTapCallback = (cb: () => void) => this.dblTapCallback = cb; + + public setDblClickCallback = (cb: () => void) => this.dblClickCallback = cb; } \ No newline at end of file diff --git a/src/chart/components/y_axis/y-axis.component.ts b/src/chart/components/y_axis/y-axis.component.ts index 9c1b694e..81be6cdc 100644 --- a/src/chart/components/y_axis/y-axis.component.ts +++ b/src/chart/components/y_axis/y-axis.component.ts @@ -90,7 +90,6 @@ export class YAxisComponent extends ChartBaseElement { canvasInputListeners, canvasBoundsContainer, canvasBoundsContainer.getBoundsHitTest(CanvasElement.PANE_UUID_Y_AXIS(paneUUID, extentIdx)), - auto => scale.autoScale(auto), hitTestCanvasModel, ); this.addChildEntity(this.yAxisScaleHandler); @@ -333,5 +332,19 @@ export class YAxisComponent extends ChartBaseElement { // recalculating labels is not needed, so just redraw YAxis this.canvasModel.fireDraw(); } + + /* This function assigns a callback to be executed when a double-click event is detected. + * It accepts one parameter `cb`, which is a callback function. + * When a double-click event occurs, the specified callback function `cb` will be invoked. + * By default it calls auto scale on YAxis + */ + public setDblClickCallback = (cb: () => void) => this.yAxisScaleHandler.setDblClickCallback(cb); + + /* This function assigns a callback to be executed when a double-tap event is detected. + * Similar to the dblclick function, it takes one parameter `cb`, which is a callback function. + * This function ensures that the callback `cb` is called whenever a double-tap event is triggered. + * By default it calls auto scale on YAxis + */ + public setDblTapCallback = (cb: () => void) => this.yAxisScaleHandler.setDblTapCallback(cb); //#endregion }