cheetah-grid
Version:
Cheetah Grid is a high performance grid engine that works on canvas
115 lines (112 loc) • 3.63 kB
text/typescript
import type {
BaseStyleOption,
ColorDef,
ColumnStyle,
IndicatorDefine,
IndicatorObject,
Visibility,
} from "../../ts-types";
import { EventTarget } from "../../core/EventTarget";
const STYLE_EVENT_TYPE = {
CHANGE_STYLE: "change_style" as const,
};
let defaultStyle: BaseStyle;
export class BaseStyle extends EventTarget implements ColumnStyle {
private _bgColor?: ColorDef;
private _visibility?: Visibility;
private _indicatorTopLeft?: IndicatorObject;
private _indicatorTopRight?: IndicatorObject;
private _indicatorBottomRight?: IndicatorObject;
private _indicatorBottomLeft?: IndicatorObject;
static get EVENT_TYPE(): { CHANGE_STYLE: "change_style" } {
return STYLE_EVENT_TYPE;
}
static get DEFAULT(): BaseStyle {
return defaultStyle ? defaultStyle : (defaultStyle = new BaseStyle());
}
constructor({
bgColor,
visibility,
indicatorTopLeft,
indicatorTopRight,
indicatorBottomRight,
indicatorBottomLeft,
}: BaseStyleOption = {}) {
super();
this._bgColor = bgColor;
this._visibility = normalizeVisibility(visibility, undefined);
this._indicatorTopLeft = normalizeIndicator(indicatorTopLeft);
this._indicatorTopRight = normalizeIndicator(indicatorTopRight);
this._indicatorBottomRight = normalizeIndicator(indicatorBottomRight);
this._indicatorBottomLeft = normalizeIndicator(indicatorBottomLeft);
}
get bgColor(): ColorDef | undefined {
return this._bgColor;
}
set bgColor(bgColor: ColorDef | undefined) {
this._bgColor = bgColor;
this.doChangeStyle();
}
get visibility(): Visibility | undefined {
return this._visibility;
}
set visibility(visibility: Visibility | undefined) {
const normalized = normalizeVisibility(visibility, this._visibility);
if (this._visibility === normalized) {
return;
}
this._visibility = normalized;
this.doChangeStyle();
}
get indicatorTopLeft(): IndicatorObject | undefined {
return this._indicatorTopLeft;
}
set indicatorTopLeft(indicatorTopLeft: IndicatorObject | undefined) {
this._indicatorTopLeft = normalizeIndicator(indicatorTopLeft);
this.doChangeStyle();
}
get indicatorTopRight(): IndicatorObject | undefined {
return this._indicatorTopRight;
}
set indicatorTopRight(indicatorTopRight: IndicatorObject | undefined) {
this._indicatorTopRight = normalizeIndicator(indicatorTopRight);
this.doChangeStyle();
}
get indicatorBottomRight(): IndicatorObject | undefined {
return this._indicatorBottomRight;
}
set indicatorBottomRight(indicatorBottomRight: IndicatorObject | undefined) {
this._indicatorBottomRight = normalizeIndicator(indicatorBottomRight);
this.doChangeStyle();
}
get indicatorBottomLeft(): IndicatorObject | undefined {
return this._indicatorBottomLeft;
}
set indicatorBottomLeft(indicatorBottomLeft: IndicatorObject | undefined) {
this._indicatorBottomLeft = normalizeIndicator(indicatorBottomLeft);
this.doChangeStyle();
}
doChangeStyle(): void {
this.fireListeners(STYLE_EVENT_TYPE.CHANGE_STYLE);
}
clone(): BaseStyle {
return new BaseStyle(this);
}
}
function normalizeIndicator(
indicator: IndicatorDefine | undefined
): IndicatorObject | undefined {
if (typeof indicator === "string") {
return { style: indicator };
}
return indicator;
}
function normalizeVisibility(
visibility: Visibility | undefined,
defaultValue: Visibility | undefined
): Visibility | undefined {
if (visibility && visibility !== "visible" && visibility !== "hidden") {
return defaultValue;
}
return visibility;
}