提交 84a9a8fd 编写于 作者: J Joao Moreno

scm: selected repositories

上级 dcd17d8b
......@@ -1321,6 +1321,11 @@ export class SCMViewlet extends PanelViewlet implements IViewModel, IViewsViewle
this.updateTitleArea();
}
if (this.isVisible()) {
panelsToRemove.forEach(p => p.repository.setSelected(false));
newRepositoryPanels.forEach(p => p.repository.setSelected(true));
}
}
private getContributableViewsSize(): number {
......
......@@ -96,9 +96,12 @@ export interface ISCMInput {
export interface ISCMRepository extends IDisposable {
readonly onDidFocus: Event<void>;
readonly selected: boolean;
readonly onDidChangeSelection: Event<boolean>;
readonly provider: ISCMProvider;
readonly input: ISCMInput;
focus(): void;
setSelected(selected: boolean): void;
}
export interface ISCMService {
......@@ -108,6 +111,8 @@ export interface ISCMService {
readonly onDidRemoveRepository: Event<ISCMRepository>;
readonly repositories: ISCMRepository[];
readonly selectedRepositories: ISCMRepository[];
readonly onDidChangeSelectedRepositories: Event<ISCMRepository[]>;
registerSCMProvider(provider: ISCMProvider): ISCMRepository;
}
......@@ -10,6 +10,7 @@ import { Event, Emitter } from 'vs/base/common/event';
import { ISCMService, ISCMProvider, ISCMInput, ISCMRepository, IInputValidator } from './scm';
import { ILogService } from 'vs/platform/log/common/log';
import { TPromise } from 'vs/base/common/winjs.base';
import { equals } from 'vs/base/common/arrays';
class SCMInput implements ISCMInput {
......@@ -61,6 +62,14 @@ class SCMRepository implements ISCMRepository {
private _onDidFocus = new Emitter<void>();
readonly onDidFocus: Event<void> = this._onDidFocus.event;
private _selected = false;
get selected(): boolean {
return this._selected;
}
private _onDidChangeSelection = new Emitter<boolean>();
readonly onDidChangeSelection: Event<boolean> = this._onDidChangeSelection.event;
readonly input: ISCMInput = new SCMInput();
constructor(
......@@ -72,6 +81,11 @@ class SCMRepository implements ISCMRepository {
this._onDidFocus.fire();
}
setSelected(selected: boolean): void {
this._selected = selected;
this._onDidChangeSelection.fire(selected);
}
dispose(): void {
this.disposable.dispose();
this.provider.dispose();
......@@ -86,6 +100,12 @@ export class SCMService implements ISCMService {
private _repositories: ISCMRepository[] = [];
get repositories(): ISCMRepository[] { return [...this._repositories]; }
private _selectedRepositories: ISCMRepository[] = [];
get selectedRepositories(): ISCMRepository[] { return [...this._selectedRepositories]; }
private _onDidChangeSelectedRepositories = new Emitter<ISCMRepository[]>();
readonly onDidChangeSelectedRepositories: Event<ISCMRepository[]> = this._onDidChangeSelectedRepositories.event;
private _onDidAddProvider = new Emitter<ISCMRepository>();
get onDidAddRepository(): Event<ISCMRepository> { return this._onDidAddProvider.event; }
......@@ -110,15 +130,34 @@ export class SCMService implements ISCMService {
return;
}
selectedDisposable.dispose();
this._providerIds.delete(provider.id);
this._repositories.splice(index, 1);
this._onDidRemoveProvider.fire(repository);
});
const repository = new SCMRepository(provider, disposable);
const selectedDisposable = repository.onDidChangeSelection(this.onDidChangeSelection, this);
this._repositories.push(repository);
this._onDidAddProvider.fire(repository);
// automatically select the first repository
if (this._repositories.length === 1) {
repository.setSelected(true);
}
return repository;
}
private onDidChangeSelection(): void {
const selectedRepositories = this._repositories.filter(r => r.selected);
if (equals(this._selectedRepositories, selectedRepositories)) {
return;
}
this._selectedRepositories = this._repositories.filter(r => r.selected);
this._onDidChangeSelectedRepositories.fire(this.selectedRepositories);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册