提交 04f74856 编写于 作者: B Benjamin Pasero

debt - acitivtybar as declarative service

上级 c056a5da
......@@ -49,6 +49,10 @@ export abstract class Part extends Component implements ISerializableView {
}
}
updateStyles(): void {
super.updateStyles();
}
/**
* Note: Clients should not call this method, the workbench calls this
* method. Calling it otherwise may result in unexpected behavior.
......
......@@ -32,6 +32,7 @@ import { IContextKeyService, ContextKeyExpr } from 'vs/platform/contextkey/commo
import { IViewlet } from 'vs/workbench/common/viewlet';
import { isUndefinedOrNull } from 'vs/base/common/types';
import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
const SCM_VIEWLET_ID = 'workbench.view.scm';
......@@ -75,7 +76,7 @@ export class ActivitybarPart extends Part implements IActivityBarService {
@IStorageService private readonly storageService: IStorageService,
@IExtensionService private readonly extensionService: IExtensionService,
@IViewsService private readonly viewsService: IViewsService,
@IContextKeyService private readonly contextKeyService: IContextKeyService
@IContextKeyService private readonly contextKeyService: IContextKeyService,
) {
super(Parts.ACTIVITYBAR_PART, { hasTitle: false }, themeService, storageService);
......@@ -101,6 +102,8 @@ export class ActivitybarPart extends Part implements IActivityBarService {
overflowActionSize: ActivitybarPart.ACTION_HEIGHT
}));
this.layoutService.registerPart(this);
this.registerListeners();
this.onDidRegisterViewlets(viewletService.getViewlets());
}
......@@ -502,3 +505,5 @@ export class ActivitybarPart extends Part implements IActivityBarService {
};
}
}
registerSingleton(IActivityBarService, ActivitybarPart);
\ No newline at end of file
......@@ -421,7 +421,7 @@ export abstract class CompositePart<T extends Composite> extends Part {
};
}
protected updateStyles(): void {
updateStyles(): void {
super.updateStyles();
// Forward to title label
......
......@@ -776,7 +776,7 @@ export class EditorPart extends Part implements IEditorGroupsService, IEditorGro
return this.theme.getColor(EDITOR_GROUP_BORDER) || this.theme.getColor(contrastBorder) || Color.transparent;
}
protected updateStyles(): void {
updateStyles(): void {
this.container.style.backgroundColor = this.getColor(editorBackground);
const separatorBorderStyle = { separatorBorder: this.gridSeparatorBorder, background: this.theme.getColor(EDITOR_PANE_BACKGROUND) || Color.transparent };
......
......@@ -147,7 +147,7 @@ export class StatusbarPart extends Part implements IStatusbarService {
return this.element;
}
protected updateStyles(): void {
updateStyles(): void {
super.updateStyles();
const container = this.getContainer();
......
......@@ -459,7 +459,7 @@ export class TitlebarPart extends Part implements ITitleService {
this.adjustTitleMarginToCenter();
}
protected updateStyles(): void {
updateStyles(): void {
super.updateStyles();
// Part container
......
......@@ -20,7 +20,6 @@ import { isWindows, isLinux, isMacintosh } from 'vs/base/common/platform';
import { IResourceInput } from 'vs/platform/editor/common/editor';
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
import { IEditorInputFactoryRegistry, Extensions as EditorExtensions, IUntitledResourceInput, IResourceDiffInput } from 'vs/workbench/common/editor';
import { ActivitybarPart } from 'vs/workbench/browser/parts/activitybar/activitybarPart';
import { SidebarPart } from 'vs/workbench/browser/parts/sidebar/sidebarPart';
import { PanelPart } from 'vs/workbench/browser/parts/panel/panelPart';
import { StatusbarPart } from 'vs/workbench/browser/parts/statusbar/statusbarPart';
......@@ -36,7 +35,6 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
import { ContextKeyService } from 'vs/platform/contextkey/browser/contextKeyService';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { IActivityService } from 'vs/workbench/services/activity/common/activity';
import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { IFileService } from 'vs/platform/files/common/files';
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
......@@ -49,7 +47,6 @@ import { IWindowService, IWindowConfiguration, IPath, MenuBarVisibility, getTitl
import { IStatusbarService } from 'vs/platform/statusbar/common/statusbar';
import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { ActivityService } from 'vs/workbench/services/activity/browser/activityService';
import { IViewsService } from 'vs/workbench/common/views';
import { ViewsService } from 'vs/workbench/browser/parts/views/views';
import { INotificationService } from 'vs/platform/notification/common/notification';
......@@ -94,7 +91,6 @@ import { IProductService } from 'vs/platform/product/common/product';
import { WorkbenchContextKeysHandler } from 'vs/workbench/browser/contextkeys';
import { IDimension } from 'vs/platform/layout/browser/layoutService';
import { Part } from 'vs/workbench/browser/part';
import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
// import@node
import { getDelayedChannel } from 'vs/base/parts/ipc/node/ipc';
......@@ -176,7 +172,6 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
private parts: Map<string, Part> = new Map<string, Part>();
private activitybarPart: ActivitybarPart;
private sidebarPart: SidebarPart;
private panelPart: PanelPart;
private statusbarPart: StatusbarPart;
......@@ -453,11 +448,6 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
// Views service
serviceCollection.set(IViewsService, new SyncDescriptor(ViewsService));
// Activity service (activitybar part)
this.activitybarPart = this.instantiationService.createInstance(ActivitybarPart);
serviceCollection.set(IActivityBarService, this.activitybarPart); // TODO@Ben use SyncDescriptor
serviceCollection.set(IActivityService, new SyncDescriptor(ActivityService, [this.activitybarPart, this.panelPart], true));
// Contributed services
const contributedServices = getServices();
for (let contributedService of contributedServices) {
......@@ -592,7 +582,7 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
private createActivityBarPart(): void {
const activitybarPartContainer = this.createPart(Parts.ACTIVITYBAR_PART, 'navigation', 'activitybar', this.state.sideBar.position === Position.LEFT ? 'left' : 'right');
this.activitybarPart.create(activitybarPartContainer);
this.parts.get(Parts.ACTIVITYBAR_PART).create(activitybarPartContainer);
}
private createSidebarPart(): void {
......@@ -946,6 +936,7 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
}
private setSideBarPosition(position: Position): void {
const activityBar = this.parts.get(Parts.ACTIVITYBAR_PART);
const wasHidden = this.state.sideBar.hidden;
if (this.state.sideBar.hidden) {
......@@ -957,13 +948,13 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
this.state.sideBar.position = position;
// Adjust CSS
removeClass(this.activitybarPart.getContainer(), oldPositionValue);
removeClass(activityBar.getContainer(), oldPositionValue);
removeClass(this.sidebarPart.getContainer(), oldPositionValue);
addClass(this.activitybarPart.getContainer(), newPositionValue);
addClass(activityBar.getContainer(), newPositionValue);
addClass(this.sidebarPart.getContainer(), newPositionValue);
// Update Styles
this.activitybarPart.updateStyles();
activityBar.updateStyles();
this.sidebarPart.updateStyles();
// Layout
......@@ -1164,7 +1155,7 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
case Parts.TITLEBAR_PART:
return this.parts.get(Parts.TITLEBAR_PART).getContainer();
case Parts.ACTIVITYBAR_PART:
return this.activitybarPart.getContainer();
return this.parts.get(Parts.ACTIVITYBAR_PART).getContainer();
case Parts.SIDEBAR_PART:
return this.sidebarPart.getContainer();
case Parts.PANEL_PART:
......@@ -1342,13 +1333,14 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
private createWorkbenchLayout(): void {
const titlePart = this.parts.get(Parts.TITLEBAR_PART);
const editorPart = this.parts.get(Parts.EDITOR_PART);
const activityBar = this.parts.get(Parts.ACTIVITYBAR_PART);
if (this.configurationService.getValue('workbench.useExperimentalGridLayout')) {
// Create view wrappers for all parts
this.titleBarPartView = new View(titlePart);
this.sideBarPartView = new View(this.sidebarPart);
this.activityBarPartView = new View(this.activitybarPart);
this.activityBarPartView = new View(activityBar);
this.editorPartView = new View(editorPart);
this.panelPartView = new View(this.panelPart);
this.statusBarPartView = new View(this.statusbarPart);
......@@ -1363,7 +1355,7 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService {
this.workbench,
{
titlebar: titlePart,
activitybar: this.activitybarPart,
activitybar: activityBar,
editor: editorPart,
sidebar: this.sidebarPart,
panel: this.panelPart,
......
......@@ -4,26 +4,27 @@
*--------------------------------------------------------------------------------------------*/
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { ActivitybarPart } from 'vs/workbench/browser/parts/activitybar/activitybarPart';
import { PanelPart } from 'vs/workbench/browser/parts/panel/panelPart';
import { IActivityService, IBadge } from 'vs/workbench/services/activity/common/activity';
import { IDisposable } from 'vs/base/common/lifecycle';
import { IActivityBarService } from 'vs/workbench/services/activityBar/browser/activityBarService';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
export class ActivityService implements IActivityService {
public _serviceBrand: any;
constructor(
private activitybarPart: ActivitybarPart,
private panelPart: PanelPart,
@IPanelService private readonly panelService: IPanelService
@IPanelService private readonly panelService: IPanelService,
@IActivityBarService private readonly activityBarService: IActivityBarService
) { }
showActivity(compositeOrActionId: string, badge: IBadge, clazz?: string, priority?: number): IDisposable {
if (this.panelService.getPanels().filter(p => p.id === compositeOrActionId).length) {
return this.panelPart.showActivity(compositeOrActionId, badge, clazz);
return this.panelService.showActivity(compositeOrActionId, badge, clazz);
}
return this.activitybarPart.showActivity(compositeOrActionId, badge, clazz, priority);
return this.activityBarService.showActivity(compositeOrActionId, badge, clazz, priority);
}
}
registerSingleton(IActivityService, ActivityService, true);
\ No newline at end of file
......@@ -4,12 +4,19 @@
*--------------------------------------------------------------------------------------------*/
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { IBadge } from 'vs/workbench/services/activity/common/activity';
import { IDisposable } from 'vs/base/common/lifecycle';
export const IActivityBarService = createDecorator<IActivityBarService>('activityBarService');
export interface IActivityBarService {
_serviceBrand: any;
/**
* Show an activity in a viewlet.
*/
showActivity(viewletOrActionId: string, badge: IBadge, clazz?: string, priority?: number): IDisposable;
/**
* Returns id of pinned viewlets following the visual order.
*/
......
......@@ -86,7 +86,7 @@ suite('Editor groups service', () => {
function createPart(): EditorPart {
const instantiationService = workbenchInstantiationService();
const part = instantiationService.createInstance(EditorPart, false);
const part = instantiationService.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......
......@@ -76,7 +76,7 @@ suite('Editor service', () => {
test('basics', function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, false);
const part = partInstantiator.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......@@ -149,7 +149,7 @@ suite('Editor service', () => {
test('openEditors() / replaceEditors()', function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, false);
const part = partInstantiator.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......@@ -290,7 +290,7 @@ suite('Editor service', () => {
test('close editor does not dispose when editor opened in other group', function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, false);
const part = partInstantiator.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......@@ -329,7 +329,7 @@ suite('Editor service', () => {
test('open to the side', function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, false);
const part = partInstantiator.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......@@ -363,7 +363,7 @@ suite('Editor service', () => {
test('active editor change / visible editor change events', async function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, false);
const part = partInstantiator.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......@@ -573,7 +573,7 @@ suite('Editor service', () => {
test('openEditor returns NULL when opening fails or is inactive', async function () {
const partInstantiator = workbenchInstantiationService();
const part = partInstantiator.createInstance(EditorPart, false);
const part = partInstantiator.createInstance(EditorPart);
part.create(document.createElement('div'));
part.layout(400, 300);
......
......@@ -6,6 +6,8 @@
import { Event } from 'vs/base/common/event';
import { IPanel } from 'vs/workbench/common/panel';
import { createDecorator, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
import { IBadge } from 'vs/workbench/services/activity/common/activity';
import { IDisposable } from 'vs/base/common/lifecycle';
export const IPanelService = createDecorator<IPanelService>('panelService');
......@@ -41,4 +43,9 @@ export interface IPanelService {
* Returns pinned panels following the visual order
*/
getPinnedPanels(): IPanelIdentifier[];
/**
* Show an activity in a panel.
*/
showActivity(panelId: string, badge: IBadge, clazz?: string): IDisposable;
}
......@@ -13,6 +13,8 @@ import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet';
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { IViewlet } from 'vs/workbench/common/viewlet';
import { Emitter } from 'vs/base/common/event';
import { IBadge } from 'vs/workbench/services/activity/common/activity';
import { IDisposable } from 'vs/base/common/lifecycle';
let activeViewlet: Viewlet = {} as any;
......@@ -87,6 +89,10 @@ class TestPanelService implements IPanelService {
public dispose() {
}
public showActivity(panelId: string, badge: IBadge, clazz?: string): IDisposable {
throw new Error('Method not implemented.');
}
}
class TestViewlet implements IViewlet {
......
......@@ -79,10 +79,12 @@ import 'vs/platform/accessibility/node/accessibilityService';
import 'vs/workbench/services/editor/browser/editorService';
import 'vs/workbench/services/history/browser/history';
import 'vs/workbench/services/files/node/remoteFileService';
import 'vs/workbench/services/activity/browser/activityService';
import 'vs/workbench/browser/parts/quickinput/quickInput';
import 'vs/workbench/browser/parts/quickopen/quickOpenController';
import 'vs/workbench/browser/parts/titlebar/titlebarPart';
import 'vs/workbench/browser/parts/editor/editorPart';
import 'vs/workbench/browser/parts/activitybar/activitybarPart';
registerSingleton(IMenuService, MenuService, true);
registerSingleton(IListService, ListService, true);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册