views: show secondary view visibility actions in title area

#98614
This commit is contained in:
isidor 2020-06-22 16:32:30 +02:00
parent 33676982c8
commit 4f76209b7c
2 changed files with 35 additions and 8 deletions

View file

@ -1040,14 +1040,7 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
}
}
const viewToggleActions = this.viewContainerModel.activeViewDescriptors.map(viewDescriptor => (<IAction>{
id: `${viewDescriptor.id}.toggleVisibility`,
label: viewDescriptor.name,
checked: this.viewContainerModel.isVisible(viewDescriptor.id),
enabled: viewDescriptor.canToggleVisibility && (!this.viewContainerModel.isVisible(viewDescriptor.id) || this.viewContainerModel.visibleViewDescriptors.length > 1),
run: () => this.toggleViewVisibility(viewDescriptor.id)
}));
const viewToggleActions = this.getViewsVisibilityActions();
if (result.length && viewToggleActions.length) {
result.push(new Separator());
}
@ -1073,6 +1066,16 @@ export class ViewPaneContainer extends Component implements IViewPaneContainer {
return [];
}
getViewsVisibilityActions(): IAction[] {
return this.viewContainerModel.activeViewDescriptors.map(viewDescriptor => (<IAction>{
id: `${viewDescriptor.id}.toggleVisibility`,
label: viewDescriptor.name,
checked: this.viewContainerModel.isVisible(viewDescriptor.id),
enabled: viewDescriptor.canToggleVisibility && (!this.viewContainerModel.isVisible(viewDescriptor.id) || this.viewContainerModel.visibleViewDescriptors.length > 1),
run: () => this.toggleViewVisibility(viewDescriptor.id)
}));
}
getActionViewItem(action: IAction): IActionViewItem | undefined {
if (this.isViewMergedWithContainer()) {
return this.paneItems[0].pane.getActionViewItem(action);

View file

@ -27,6 +27,8 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { PaneComposite } from 'vs/workbench/browser/panecomposite';
import { Separator } from 'vs/base/browser/ui/actionbar/actionbar';
import { ContextSubMenu } from 'vs/base/browser/contextmenu';
import { Event } from 'vs/base/common/event';
export abstract class Viewlet extends PaneComposite implements IViewlet {
@ -43,6 +45,10 @@ export abstract class Viewlet extends PaneComposite implements IViewlet {
@IConfigurationService protected configurationService: IConfigurationService
) {
super(id, viewPaneContainer, telemetryService, storageService, instantiationService, themeService, contextMenuService, extensionService, contextService);
this._register(Event.any(viewPaneContainer.onDidAddViews, viewPaneContainer.onDidRemoveViews)(() => {
// Update title area since there is no better way to update secondary actions
this.updateTitleArea();
}));
}
getContextMenuActions(): IAction[] {
@ -60,6 +66,24 @@ export abstract class Viewlet extends PaneComposite implements IViewlet {
run: () => this.layoutService.setSideBarHidden(true)
}];
}
getSecondaryActions(): IAction[] {
const viewSecondaryActions = this.viewPaneContainer.getViewsVisibilityActions();
const secondaryActions = this.viewPaneContainer.getSecondaryActions();
if (viewSecondaryActions.length <= 1) {
return secondaryActions;
}
if (secondaryActions.length === 0) {
return viewSecondaryActions;
}
return [
new ContextSubMenu(nls.localize('views', "Views"), viewSecondaryActions),
new Separator(),
...secondaryActions
];
}
}
/**