import { Disposable, ViewKey } from "@anz-bank/vscode-sysl-model"; import { ViewModel, ViewModelDelta } from "@anz-bank/vscode-sysl-plugin"; import { URI } from "vscode-uri"; import { Document } from "../plugins/types"; import { ViewEdit } from "./edits"; import { ViewEvent, ViewModelChangeEvent } from "./events"; import { MultiViewFactory } from "./multi"; import { MultiView } from "./multi/types"; import { View, Views } from "./types"; export type DocumentFinder = (docUri: URI) => Thenable; /** * Records the views that have been rendered and exposes an API to manage them. * * Requires that {@link multiviewFactory} be set before creating new multi views. This is an * inelegant dependency injection to break a cyclic dependency. */ export declare class ViewRegistry implements Views { /** Map of view URI to all rendered instances. */ private readonly views; private readonly multiviews; private readonly pendingMultiviews; private _multiviewFactory; private _docFinder; onDidOpenViewListeners: ((e: ViewEvent) => any)[]; onDidCloseViewListeners: ((e: ViewEvent) => any)[]; onDidShowViewListeners: ((e: ViewEvent) => any)[]; onDidHideViewListeners: ((e: ViewEvent) => any)[]; onDidChangeViewListeners: ((e: ViewModelChangeEvent) => any)[]; getAllViews(): View[]; /** Returns the list of views sharing {@code key}, or {@code undefined} if there are none. */ getViews(key: ViewKey): View[] | undefined; getAllMultiViews(): MultiView[]; /** * Returns the list of multi views rendering the document with {@code docUri}, or {@code undefined} * if there are none. */ getMultiViews(docUri: URI): MultiView[] | undefined; private buildEvent; /** Invoked by a view when it is opened. */ acceptOpenView(view: View): Promise; /** Invoked by a view when it is shown. */ acceptShowView(view: View): Promise; /** Invoked by a view when it is hidden. */ acceptHideView(view: View): Promise; /** Invoked by a view when it is opened. */ acceptCloseView(view: View): Promise; /** Invoked by a view when its model changes. */ acceptChangeView(view: View, change: D, model?: T): Promise; /** Invoked by a multi view when it is opened. */ acceptOpenMultiView(docUri: URI, multiView: MultiView): void; /** Invoked by a multi view when it is closed. */ acceptCloseMultiView(multiview: MultiView): void; onDidOpenView(listener: (e: ViewEvent) => any): Disposable; onDidCloseView(listener: (e: ViewEvent) => any): Disposable; onDidShowView(listener: (e: ViewEvent) => any): Disposable; onDidHideView(listener: (e: ViewEvent) => any): Disposable; onDidChangeView(listener: (e: ViewModelChangeEvent) => any): Disposable; openView(key: ViewKey, model?: T): Promise[]>; applyEdit(viewEdits: [ViewKey, ViewEdit[]][]): Promise; set multiviewFactory(multiviewFactory: MultiViewFactory | undefined); set docFinder(docFinder: DocumentFinder | undefined); }