add a setting to enable showing tabs

This commit is contained in:
Benjamin Pasero
2016-06-13 15:37:25 +02:00
parent cf6035ad5e
commit bc9686b4cf
9 changed files with 67 additions and 17 deletions

View File

@@ -26,6 +26,7 @@ import {BinaryResourceDiffEditor} from 'vs/workbench/browser/parts/editor/binary
import {IEditorGroupService} from 'vs/workbench/services/group/common/groupService';
import {IFrameEditor} from 'vs/workbench/browser/parts/editor/iframeEditor';
import {IFrameEditorInput} from 'vs/workbench/common/editor/iframeEditorInput';
import {IConfigurationRegistry, Extensions as ConfigurationExtensions} from 'vs/platform/configuration/common/configurationRegistry';
import {ChangeEncodingAction, ChangeEOLAction, ChangeModeAction, EditorStatus} from 'vs/workbench/browser/parts/editor/editorStatus';
import {IWorkbenchActionRegistry, Extensions as ActionExtensions} from 'vs/workbench/common/actionRegistry';
import {Scope, IActionBarRegistry, Extensions as ActionBarExtensions, ActionBarContributor} from 'vs/workbench/browser/actionBarRegistry';
@@ -393,4 +394,20 @@ registry.registerWorkbenchAction(new SyncActionDescriptor(OpenPreviousEditorFrom
registry.registerWorkbenchAction(new SyncActionDescriptor(ClearEditorHistoryAction, ClearEditorHistoryAction.ID, ClearEditorHistoryAction.LABEL), 'Clear Editor History');
registry.registerWorkbenchAction(new SyncActionDescriptor(RemoveFromEditorHistoryAction, RemoveFromEditorHistoryAction.ID, RemoveFromEditorHistoryAction.LABEL), 'Remove From Editor History');
registry.registerWorkbenchAction(new SyncActionDescriptor(QuickOpenNavigateNextAction, QuickOpenNavigateNextAction.ID, QuickOpenNavigateNextAction.LABEL, navigateKeybinding(false), KbExpr.has('inQuickOpen')), 'Navigate Next in Quick Open');
registry.registerWorkbenchAction(new SyncActionDescriptor(QuickOpenNavigatePreviousAction, QuickOpenNavigatePreviousAction.ID, QuickOpenNavigatePreviousAction.LABEL, navigateKeybinding(true), KbExpr.has('inQuickOpen'), KeybindingsRegistry.WEIGHT.workbenchContrib(50)), 'Navigate Previous in Quick Open');
registry.registerWorkbenchAction(new SyncActionDescriptor(QuickOpenNavigatePreviousAction, QuickOpenNavigatePreviousAction.ID, QuickOpenNavigatePreviousAction.LABEL, navigateKeybinding(true), KbExpr.has('inQuickOpen'), KeybindingsRegistry.WEIGHT.workbenchContrib(50)), 'Navigate Previous in Quick Open');
// Configuration
let configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
configurationRegistry.registerConfiguration({
'id': 'workbench',
'order': 7,
'title': nls.localize('workbenchConfigurationTitle', "Workbench configuration"),
'type': 'object',
'properties': {
'workbench.showTabs': {
'type': 'boolean',
'description': nls.localize('showTabs', "Controls if opened editors should show in tabs or not."),
'default': false
}
}
});

View File

@@ -23,16 +23,15 @@ import {IEditorGroupService} from 'vs/workbench/services/group/common/groupServi
import {IEventService} from 'vs/platform/event/common/event';
import {IMessageService} from 'vs/platform/message/common/message';
import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry';
import {IConfigurationService} from 'vs/platform/configuration/common/configuration';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {IKeybindingService} from 'vs/platform/keybinding/common/keybindingService';
import {IDisposable, dispose} from 'vs/base/common/lifecycle';
import {TabsTitleControl} from 'vs/workbench/browser/parts/editor/tabsTitleControl';
import {NoTabsTitleControl} from 'vs/workbench/browser/parts/editor/noTabsTitleControl';
import {IEditorStacksModel, IStacksModelChangeEvent} from 'vs/workbench/common/editor';
import {IEditorStacksModel, IStacksModelChangeEvent, IWorkbenchEditorConfiguration} from 'vs/workbench/common/editor';
import {ITitleAreaControl} from 'vs/workbench/browser/parts/editor/titleControl';
const useTabs = true;
export enum Rochade {
NONE,
CENTER_TO_LEFT,
@@ -123,6 +122,7 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti
@ITelemetryService private telemetryService: ITelemetryService,
@IContextMenuService private contextMenuService: IContextMenuService,
@IEventService private eventService: IEventService,
@IConfigurationService private configurationService: IConfigurationService,
@IKeybindingService private keybindingService: IKeybindingService,
@IInstantiationService private instantiationService: IInstantiationService
) {
@@ -153,6 +153,26 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti
private registerListeners(): void {
this.toDispose.push(this.stacks.onModelChanged(e => this.onStacksChanged(e)));
this.toDispose.push(this.configurationService.onDidUpdateConfiguration(e => this.onConfigurationUpdated(e.config)));
}
private onConfigurationUpdated(configuration: IWorkbenchEditorConfiguration): void {
POSITIONS.forEach(position => {
const titleControl = this.titleAreaControl[position];
if (titleControl) {
const usingTabs = (titleControl instanceof TabsTitleControl);
const useTabs = configuration.workbench.showTabs;
if (usingTabs !== useTabs) {
// Dispose old
titleControl.dispose();
this.titleContainer[position].empty();
// Create new
this.createTitleControl(position);
}
}
});
}
private onStacksChanged(e: IStacksModelChangeEvent): void {
@@ -714,10 +734,8 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti
this.titleContainer[position] = $(this.containers[position]).div({ 'class': 'title' });
this.hookTitleDragListener(position);
this.titleAreaControl[position] = useTabs ? this.instantiationService.createInstance(TabsTitleControl) : this.instantiationService.createInstance(NoTabsTitleControl);
this.titleAreaControl[position].create($(this.titleContainer[position]));
this.titleAreaControl[position].setContext(this.stacks.groupAt(position));
this.titleAreaControl[position].refresh(true);
// Title Control
this.createTitleControl(position);
});
// Progress Bars per position
@@ -732,6 +750,15 @@ export class SideBySideEditorControl implements ISideBySideEditorControl, IVerti
}
}
private createTitleControl(position: Position): void {
const useTabs = !!this.configurationService.getConfiguration<IWorkbenchEditorConfiguration>().workbench.showTabs;
this.titleAreaControl[position] = useTabs ? this.instantiationService.createInstance(TabsTitleControl) : this.instantiationService.createInstance(NoTabsTitleControl);
this.titleAreaControl[position].create($(this.titleContainer[position]));
this.titleAreaControl[position].setContext(this.stacks.groupAt(position));
this.titleAreaControl[position].refresh(true);
}
private hookTitleDragListener(position: Position): void {
let wasDragged = false;

View File

@@ -661,4 +661,10 @@ export interface IEditorContext extends IEditorIdentifier {
event: any;
}
export type GroupIdentifier = number;
export type GroupIdentifier = number;
export interface IWorkbenchEditorConfiguration {
workbench: {
showTabs: boolean;
};
}

View File

@@ -41,7 +41,7 @@ if (platform.isWindows || platform.isLinux) {
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
configurationRegistry.registerConfiguration({
'id': 'window',
'order': 6,
'order': 8,
'title': nls.localize('windowConfigurationTitle', "Window configuration"),
'type': 'object',
'properties': {
@@ -72,7 +72,7 @@ configurationRegistry.registerConfiguration({
// Configuration: Update
configurationRegistry.registerConfiguration({
'id': 'update',
'order': 10,
'order': 15,
'title': nls.localize('updateConfigurationTitle', "Update configuration"),
'type': 'object',
'properties': {

View File

@@ -38,7 +38,7 @@ KeybindingsRegistry.registerCommandRule({
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
configurationRegistry.registerConfiguration({
'id': 'emmet',
'order': 7,
'order': 6,
'title': nls.localize('emmetConfigurationTitle', "Emmet configuration"),
'type': 'object',
'properties': {

View File

@@ -161,7 +161,7 @@ let configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExt
configurationRegistry.registerConfiguration({
'id': 'files',
'order': 7,
'order': 9,
'title': nls.localize('filesConfigurationTitle', "Files configuration"),
'type': 'object',
'properties': {
@@ -234,7 +234,7 @@ configurationRegistry.registerConfiguration({
configurationRegistry.registerConfiguration({
'id': 'explorer',
'order': 8,
'order': 10,
'title': nls.localize('explorerConfigurationTitle', "File Explorer configuration"),
'type': 'object',
'properties': {

View File

@@ -509,7 +509,7 @@ export function registerContributions(): void {
var configurationRegistry = <confregistry.IConfigurationRegistry>platform.Registry.as(confregistry.Extensions.Configuration);
configurationRegistry.registerConfiguration({
id: 'git',
order: 10,
order: 15,
title: nls.localize('gitConfigurationTitle', "Git configuration"),
type: 'object',
properties: {

View File

@@ -166,7 +166,7 @@ registry.registerWorkbenchAction(new SyncActionDescriptor(ShowAllSymbolsAction,
const configurationRegistry = <IConfigurationRegistry>Registry.as(ConfigurationExtensions.Configuration);
configurationRegistry.registerConfiguration({
'id': 'search',
'order': 10,
'order': 13,
'title': nls.localize('searchConfigurationTitle', "Search configuration"),
'type': 'object',
'properties': {

View File

@@ -145,7 +145,7 @@ export class RequestService extends BaseRequestService {
let confRegistry = <IConfigurationRegistry>platform.Registry.as(Extensions.Configuration);
confRegistry.registerConfiguration({
id: 'http',
order: 9,
order: 15,
title: nls.localize('httpConfigurationTitle', "HTTP configuration"),
type: 'object',
properties: {