/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { URI } from 'vs/base/common/uri'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Event } from 'vs/base/common/event'; import { IDisposable } from 'vs/base/common/lifecycle'; import { Command } from 'vs/editor/common/modes'; import { ISequence } from 'vs/base/common/sequence'; import { IAction } from 'vs/base/common/actions'; import { IMenu } from 'vs/platform/actions/common/actions'; export const VIEWLET_ID = 'workbench.view.scm'; export const VIEW_PANE_ID = 'workbench.scm'; export const REPOSITORIES_VIEW_PANE_ID = 'workbench.scm.repositories'; export interface IBaselineResourceProvider { getBaselineResource(resource: URI): Promise; } export const ISCMService = createDecorator('scm'); export interface ISCMResourceDecorations { icon?: URI; iconDark?: URI; tooltip?: string; strikeThrough?: boolean; faded?: boolean; } export interface ISCMResource { readonly resourceGroup: ISCMResourceGroup; readonly sourceUri: URI; readonly decorations: ISCMResourceDecorations; readonly contextValue?: string; open(preserveFocus: boolean): Promise; } export interface ISCMResourceGroup extends ISequence { readonly provider: ISCMProvider; readonly label: string; readonly id: string; readonly hideWhenEmpty: boolean; readonly onDidChange: Event; } export interface ISCMProvider extends IDisposable { readonly label: string; readonly id: string; readonly contextValue: string; readonly groups: ISequence; // TODO@Joao: remove readonly onDidChangeResources: Event; readonly rootUri?: URI; readonly count?: number; readonly commitTemplate: string; readonly onDidChangeCommitTemplate: Event; readonly onDidChangeStatusBarCommands?: Event; readonly acceptInputCommand?: Command; readonly statusBarCommands?: Command[]; readonly onDidChange: Event; getOriginalResource(uri: URI): Promise; } export const enum InputValidationType { Error = 0, Warning = 1, Information = 2 } export interface IInputValidation { message: string; type: InputValidationType; } export interface IInputValidator { (value: string, cursorPosition: number): Promise; } export interface ISCMInput { readonly repository: ISCMRepository; value: string; readonly onDidChange: Event; placeholder: string; readonly onDidChangePlaceholder: Event; validateInput: IInputValidator; readonly onDidChangeValidateInput: Event; visible: boolean; readonly onDidChangeVisibility: Event; } export interface ISCMRepository extends IDisposable { readonly selected: boolean; readonly onDidChangeSelection: Event; readonly provider: ISCMProvider; readonly input: ISCMInput; setSelected(selected: boolean): void; } export interface ISCMService { readonly _serviceBrand: undefined; readonly onDidAddRepository: Event; readonly onDidRemoveRepository: Event; readonly repositories: ISCMRepository[]; registerSCMProvider(provider: ISCMProvider): ISCMRepository; } export interface ISCMTitleMenu { readonly actions: IAction[]; readonly secondaryActions: IAction[]; readonly onDidChangeTitle: Event; readonly menu: IMenu; } export interface ISCMRepositoryMenus { readonly titleMenu: ISCMTitleMenu; readonly repositoryMenu: IMenu; getResourceGroupMenu(group: ISCMResourceGroup): IMenu; getResourceMenu(resource: ISCMResource): IMenu; getResourceFolderMenu(group: ISCMResourceGroup): IMenu; } export interface ISCMMenus { readonly titleMenu: ISCMTitleMenu; getRepositoryMenus(provider: ISCMProvider): ISCMRepositoryMenus; } export const ISCMViewService = createDecorator('scmView'); export interface ISCMViewVisibleRepositoryChangeEvent { readonly added: Iterable; readonly removed: Iterable; } export interface ISCMViewService { readonly _serviceBrand: undefined; readonly menus: ISCMMenus; visibleRepositories: ISCMRepository[]; readonly onDidChangeVisibleRepositories: Event; isVisible(repository: ISCMRepository): boolean; toggleVisibility(repository: ISCMRepository, visible?: boolean): void; }