xterm
[VSoRC/.git] / node_modules / xterm / src / browser / services / Services.ts
1 /**
2  * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3  * @license MIT
4  */
5
6 import { IEvent } from 'common/EventEmitter';
7 import { IRenderDimensions, IRenderer, CharacterJoinerHandler } from 'browser/renderer/Types';
8 import { IColorSet } from 'browser/Types';
9 import { ISelectionRedrawRequestEvent } from 'browser/selection/Types';
10 import { createDecorator } from 'common/services/ServiceRegistry';
11 import { IDisposable } from 'common/Types';
12
13 export const ICharSizeService = createDecorator<ICharSizeService>('CharSizeService');
14 export interface ICharSizeService {
15   serviceBrand: any;
16
17   readonly width: number;
18   readonly height: number;
19   readonly hasValidSize: boolean;
20
21   readonly onCharSizeChange: IEvent<void>;
22
23   measure(): void;
24 }
25
26 export const IMouseService = createDecorator<IMouseService>('MouseService');
27 export interface IMouseService {
28   serviceBrand: any;
29
30   getCoords(event: {clientX: number, clientY: number}, element: HTMLElement, colCount: number, rowCount: number, isSelection?: boolean): [number, number] | undefined;
31   getRawByteCoords(event: MouseEvent, element: HTMLElement, colCount: number, rowCount: number): { x: number, y: number } | undefined;
32 }
33
34 export const IRenderService = createDecorator<IRenderService>('RenderService');
35 export interface IRenderService extends IDisposable {
36   serviceBrand: any;
37
38   onDimensionsChange: IEvent<IRenderDimensions>;
39   onRender: IEvent<{ start: number, end: number }>;
40   onRefreshRequest: IEvent<{ start: number, end: number }>;
41
42   dimensions: IRenderDimensions;
43
44   refreshRows(start: number, end: number): void;
45   resize(cols: number, rows: number): void;
46   changeOptions(): void;
47   setRenderer(renderer: IRenderer): void;
48   setColors(colors: IColorSet): void;
49   onDevicePixelRatioChange(): void;
50   onResize(cols: number, rows: number): void;
51   // TODO: Is this useful when we have onResize?
52   onCharSizeChanged(): void;
53   onBlur(): void;
54   onFocus(): void;
55   onSelectionChanged(start: [number, number], end: [number, number], columnSelectMode: boolean): void;
56   onCursorMove(): void;
57   clear(): void;
58   registerCharacterJoiner(handler: CharacterJoinerHandler): number;
59   deregisterCharacterJoiner(joinerId: number): boolean;
60 }
61
62 export const ISelectionService = createDecorator<ISelectionService>('SelectionService');
63 export interface ISelectionService {
64   serviceBrand: any;
65
66   readonly selectionText: string;
67   readonly hasSelection: boolean;
68   readonly selectionStart: [number, number] | undefined;
69   readonly selectionEnd: [number, number] | undefined;
70
71   readonly onLinuxMouseSelection: IEvent<string>;
72   readonly onRedrawRequest: IEvent<ISelectionRedrawRequestEvent>;
73   readonly onSelectionChange: IEvent<void>;
74
75   disable(): void;
76   enable(): void;
77   reset(): void;
78   setSelection(row: number, col: number, length: number): void;
79   selectAll(): void;
80   selectLines(start: number, end: number): void;
81   clearSelection(): void;
82   isClickInSelection(event: MouseEvent): boolean;
83   selectWordAtCursor(event: MouseEvent): void;
84   shouldColumnSelect(event: KeyboardEvent | MouseEvent): boolean;
85   shouldForceSelection(event: MouseEvent): boolean;
86   refresh(isLinuxMouseSelection?: boolean): void;
87   onMouseDown(event: MouseEvent): void;
88 }
89
90 export const ISoundService = createDecorator<ISoundService>('SoundService');
91 export interface ISoundService {
92   serviceBrand: any;
93
94   playBellSound(): void;
95 }