mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-27 02:37:26 +01:00
wip: show scm viewlet contents
This commit is contained in:
@@ -4,15 +4,36 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import { localize } from 'vs/nls';
|
||||
import URI from 'vs/base/common/uri';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { ISCMResourceGroup } from 'vs/workbench/services/scm/common/scm';
|
||||
import { SCMProvider } from 'vs/workbench/services/scm/common/scmProvider';
|
||||
|
||||
export class GitSCMProvider extends SCMProvider {
|
||||
|
||||
private mergeGroup: ISCMResourceGroup;
|
||||
private indexGroup: ISCMResourceGroup;
|
||||
private workingTreeGroup: ISCMResourceGroup;
|
||||
|
||||
constructor(
|
||||
) {
|
||||
super('git', 'Git');
|
||||
|
||||
this.mergeGroup = this.createResourceGroup('merge', localize('conflict changes', "Conflict Changes"));
|
||||
this.indexGroup = this.createResourceGroup('index', localize('staged changes', "Staged Changes"));
|
||||
this.workingTreeGroup = this.createResourceGroup('workingtree', localize('changes', "Changes"));
|
||||
|
||||
this.indexGroup.set(
|
||||
{ uri: URI.parse('file:///Users/joao/hello.ts') },
|
||||
{ uri: URI.parse('file:///Users/joao/cool.ts') },
|
||||
{ uri: URI.parse('file:///Users/joao/works.ts') }
|
||||
);
|
||||
|
||||
this.workingTreeGroup.set(
|
||||
{ uri: URI.parse('file:///Users/joao/works.ts') },
|
||||
{ uri: URI.parse('file:///Users/joao/monkey.ts') }
|
||||
);
|
||||
}
|
||||
|
||||
commit(message: string): TPromise<void> {
|
||||
|
||||
@@ -15,41 +15,69 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||
import { List } from 'vs/base/browser/ui/list/listWidget';
|
||||
import { IDelegate, IRenderer } from 'vs/base/browser/ui/list/list';
|
||||
import { VIEWLET_ID } from 'vs/workbench/parts/scm/common/scm';
|
||||
import { ISCMService } from 'vs/workbench/services/scm/common/scm';
|
||||
import { ISCMService, ISCMResourceGroup, ISCMResource } from 'vs/workbench/services/scm/common/scm';
|
||||
|
||||
interface SearchInputEvent extends Event {
|
||||
target: HTMLInputElement;
|
||||
immediate?: boolean;
|
||||
}
|
||||
|
||||
type RendererType = any;
|
||||
type RendererTemplateType = any;
|
||||
interface ResourceGroupTemplate {
|
||||
container: HTMLElement;
|
||||
}
|
||||
|
||||
class Renderer implements IRenderer<RendererType, RendererTemplateType> {
|
||||
class ResourceGroupRenderer implements IRenderer<ISCMResourceGroup, ResourceGroupTemplate> {
|
||||
|
||||
templateId: string;
|
||||
|
||||
renderTemplate(container: HTMLElement): RendererTemplateType {
|
||||
static TEMPLATE_ID = 'resource group';
|
||||
get templateId(): string { return ResourceGroupRenderer.TEMPLATE_ID; }
|
||||
|
||||
renderTemplate(container: HTMLElement): ResourceGroupTemplate {
|
||||
return { container };
|
||||
}
|
||||
|
||||
renderElement(element: RendererType, index: number, templateData: RendererTemplateType): void {
|
||||
|
||||
renderElement(group: ISCMResourceGroup, index: number, template: ResourceGroupTemplate): void {
|
||||
template.container.textContent = group.label;
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: RendererTemplateType): void {
|
||||
|
||||
disposeTemplate(templateData: ResourceGroupTemplate): void {
|
||||
// noop
|
||||
}
|
||||
}
|
||||
|
||||
class Delegate implements IDelegate<RendererType> {
|
||||
getHeight() { return 62; }
|
||||
getTemplateId() { return 'extension'; }
|
||||
interface ResourceTemplate {
|
||||
container: HTMLElement;
|
||||
}
|
||||
|
||||
class ResourceRenderer implements IRenderer<ISCMResource, ResourceTemplate> {
|
||||
|
||||
static TEMPLATE_ID = 'resource';
|
||||
get templateId(): string { return ResourceRenderer.TEMPLATE_ID; }
|
||||
|
||||
renderTemplate(container: HTMLElement): ResourceTemplate {
|
||||
return { container };
|
||||
}
|
||||
|
||||
renderElement(resource: ISCMResource, index: number, template: ResourceTemplate): void {
|
||||
template.container.textContent = resource.uri.fsPath;
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: ResourceTemplate): void {
|
||||
// noop
|
||||
}
|
||||
}
|
||||
|
||||
class Delegate implements IDelegate<ISCMResourceGroup | ISCMResource> {
|
||||
|
||||
getHeight() { return 22; }
|
||||
|
||||
getTemplateId(element: ISCMResourceGroup | ISCMResource) {
|
||||
return (element as ISCMResource).uri ? ResourceRenderer.TEMPLATE_ID : ResourceGroupRenderer.TEMPLATE_ID;
|
||||
}
|
||||
}
|
||||
|
||||
export class SCMViewlet extends Viewlet {
|
||||
|
||||
private list: List<RendererType>;
|
||||
private list: List<ISCMResourceGroup | ISCMResource>;
|
||||
private disposables: IDisposable[] = [];
|
||||
|
||||
constructor(
|
||||
@@ -57,8 +85,6 @@ export class SCMViewlet extends Viewlet {
|
||||
@ISCMService private scmService: ISCMService
|
||||
) {
|
||||
super(VIEWLET_ID, telemetryService);
|
||||
|
||||
console.log(scmService.activeProvider);
|
||||
}
|
||||
|
||||
create(parent: Builder): TPromise<void> {
|
||||
@@ -69,17 +95,31 @@ export class SCMViewlet extends Viewlet {
|
||||
const list = append(root, $('.scm-status'));
|
||||
|
||||
const delegate = new Delegate();
|
||||
const renderer = new Renderer();
|
||||
this.list = new List(list, delegate, [renderer]);
|
||||
|
||||
this.list = new List(list, delegate, [
|
||||
new ResourceGroupRenderer(),
|
||||
new ResourceRenderer()
|
||||
]);
|
||||
|
||||
|
||||
// chain(this.list.onSelectionChange)
|
||||
// .map(e => e.elements[0])
|
||||
// .filter(e => !!e)
|
||||
// .on(this.openExtension, this, this.disposables);
|
||||
|
||||
this.update();
|
||||
|
||||
return TPromise.as(null);
|
||||
}
|
||||
|
||||
private update(): void {
|
||||
const provider = this.scmService.activeProvider;
|
||||
const groups = provider.resourceGroups;
|
||||
const elements = groups.reduce<(ISCMResourceGroup | ISCMResource)[]>((result, group) => [...result, group, ...group.get()], []);
|
||||
|
||||
this.list.splice(0, this.list.length, ...elements);
|
||||
}
|
||||
|
||||
layout({ height }: Dimension): void {
|
||||
this.list.layout(height);
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ export interface ISCMResource {
|
||||
}
|
||||
|
||||
export interface ISCMResourceGroup {
|
||||
label: string;
|
||||
onChange: Event<void>;
|
||||
set(...resources: ISCMResource[]): void;
|
||||
get(): ISCMResource[];
|
||||
|
||||
Reference in New Issue
Block a user