Spaces:
Running
Running
| /* | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| */ | |
| import * as axisPointerModelHelper from '../axisPointer/modelHelper'; | |
| import ComponentView from '../../view/Component'; | |
| import { AxisBaseModel } from '../../coord/AxisBaseModel'; | |
| import GlobalModel from '../../model/Global'; | |
| import ExtensionAPI from '../../core/ExtensionAPI'; | |
| import { Payload, Dictionary } from '../../util/types'; | |
| import type BaseAxisPointer from '../axisPointer/BaseAxisPointer'; | |
| const axisPointerClazz: Dictionary<AxisPointerConstructor> = {}; | |
| interface AxisPointerConstructor { | |
| new(): BaseAxisPointer | |
| } | |
| /** | |
| * Base class of AxisView. | |
| */ | |
| class AxisView extends ComponentView { | |
| static type = 'axis'; | |
| type = AxisView.type; | |
| /** | |
| * @private | |
| */ | |
| private _axisPointer: BaseAxisPointer; | |
| /** | |
| * @protected | |
| */ | |
| axisPointerClass: string; | |
| /** | |
| * @override | |
| */ | |
| render(axisModel: AxisBaseModel, ecModel: GlobalModel, api: ExtensionAPI, payload: Payload) { | |
| // FIXME | |
| // This process should proformed after coordinate systems updated | |
| // (axis scale updated), and should be performed each time update. | |
| // So put it here temporarily, although it is not appropriate to | |
| // put a model-writing procedure in `view`. | |
| this.axisPointerClass && axisPointerModelHelper.fixValue(axisModel); | |
| super.render.apply(this, arguments as any); | |
| this._doUpdateAxisPointerClass(axisModel, api, true); | |
| } | |
| /** | |
| * Action handler. | |
| */ | |
| updateAxisPointer( | |
| axisModel: AxisBaseModel, | |
| ecModel: GlobalModel, | |
| api: ExtensionAPI, | |
| payload: Payload | |
| ) { | |
| this._doUpdateAxisPointerClass(axisModel, api, false); | |
| } | |
| /** | |
| * @override | |
| */ | |
| remove(ecModel: GlobalModel, api: ExtensionAPI) { | |
| const axisPointer = this._axisPointer; | |
| axisPointer && axisPointer.remove(api); | |
| } | |
| /** | |
| * @override | |
| */ | |
| dispose(ecModel: GlobalModel, api: ExtensionAPI) { | |
| this._disposeAxisPointer(api); | |
| super.dispose.apply(this, arguments as any); | |
| } | |
| private _doUpdateAxisPointerClass(axisModel: AxisBaseModel, api: ExtensionAPI, forceRender?: boolean) { | |
| const Clazz = AxisView.getAxisPointerClass(this.axisPointerClass); | |
| if (!Clazz) { | |
| return; | |
| } | |
| const axisPointerModel = axisPointerModelHelper.getAxisPointerModel(axisModel); | |
| axisPointerModel | |
| ? (this._axisPointer || (this._axisPointer = new Clazz())) | |
| .render(axisModel, axisPointerModel, api, forceRender) | |
| : this._disposeAxisPointer(api); | |
| } | |
| private _disposeAxisPointer(api: ExtensionAPI) { | |
| this._axisPointer && this._axisPointer.dispose(api); | |
| this._axisPointer = null; | |
| } | |
| static registerAxisPointerClass(type: string, clazz: AxisPointerConstructor) { | |
| if (__DEV__) { | |
| if (axisPointerClazz[type]) { | |
| throw new Error('axisPointer ' + type + ' exists'); | |
| } | |
| } | |
| axisPointerClazz[type] = clazz; | |
| }; | |
| static getAxisPointerClass(type: string) { | |
| return type && axisPointerClazz[type]; | |
| }; | |
| } | |
| export default AxisView; |