wip: show scm viewlet contents

This commit is contained in:
Joao Moreno
2016-11-23 17:53:57 +01:00
parent 92e6a9e311
commit aa00a4d022
3 changed files with 81 additions and 19 deletions
@@ -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[];