mirror of
https://github.com/mathuo/dockview
synced 2025-05-08 12:38:24 +00:00
Merge pull request #127 from mathuo/126-remove-dockview-ontabcontextmenu
feat: remove onTabContextMenu and add a default tab option
This commit is contained in:
commit
9951563ce1
@ -24,7 +24,7 @@ describe('dockviewGroupPanel', () => {
|
|||||||
|
|
||||||
let latestTitle: string | undefined = undefined;
|
let latestTitle: string | undefined = undefined;
|
||||||
|
|
||||||
const disposable = cut.api.titleChanged((event) => {
|
const disposable = cut.api.onDidTitleChange((event) => {
|
||||||
latestTitle = event.title;
|
latestTitle = event.title;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ describe('dockviewGroupPanel', () => {
|
|||||||
|
|
||||||
let latestSuppressClosable: boolean | undefined = undefined;
|
let latestSuppressClosable: boolean | undefined = undefined;
|
||||||
|
|
||||||
const disposable = cut.api.suppressClosableChanged((event) => {
|
const disposable = cut.api.onDidSuppressClosableChange((event) => {
|
||||||
latestSuppressClosable = event.suppressClosable;
|
latestSuppressClosable = event.suppressClosable;
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -101,6 +101,7 @@ describe('dockviewGroupPanel', () => {
|
|||||||
return {
|
return {
|
||||||
init: jest.fn(),
|
init: jest.fn(),
|
||||||
dispose: jest.fn(),
|
dispose: jest.fn(),
|
||||||
|
update: jest.fn(),
|
||||||
} as any;
|
} as any;
|
||||||
});
|
});
|
||||||
const view = new viewMock();
|
const view = new viewMock();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Emitter } from '../events';
|
import { Emitter, Event } from '../events';
|
||||||
import { GridviewPanelApiImpl, GridviewPanelApi } from './gridviewPanelApi';
|
import { GridviewPanelApiImpl, GridviewPanelApi } from './gridviewPanelApi';
|
||||||
import { IDockviewPanel } from '../groupview/groupPanel';
|
import { IDockviewPanel } from '../groupview/groupPanel';
|
||||||
import { GroupPanel } from '../groupview/groupviewPanel';
|
import { GroupPanel } from '../groupview/groupviewPanel';
|
||||||
@ -21,6 +21,9 @@ export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible'> {
|
|||||||
readonly isGroupActive: boolean;
|
readonly isGroupActive: boolean;
|
||||||
readonly title: string;
|
readonly title: string;
|
||||||
readonly suppressClosable: boolean;
|
readonly suppressClosable: boolean;
|
||||||
|
readonly onDidActiveGroupChange: Event<void>;
|
||||||
|
readonly onDidGroupChange: Event<void>;
|
||||||
|
readonly onDidSuppressClosableChange: Event<SuppressClosableEvent>;
|
||||||
close(): void;
|
close(): void;
|
||||||
setTitle(title: string): void;
|
setTitle(title: string): void;
|
||||||
}
|
}
|
||||||
@ -34,11 +37,10 @@ export class DockviewPanelApiImpl
|
|||||||
readonly _onDidTitleChange = new Emitter<TitleEvent>();
|
readonly _onDidTitleChange = new Emitter<TitleEvent>();
|
||||||
readonly onDidTitleChange = this._onDidTitleChange.event;
|
readonly onDidTitleChange = this._onDidTitleChange.event;
|
||||||
|
|
||||||
readonly _titleChanged = new Emitter<TitleEvent>();
|
readonly _onDidSuppressClosableChange =
|
||||||
readonly titleChanged = this._titleChanged.event;
|
new Emitter<SuppressClosableEvent>();
|
||||||
|
readonly onDidSuppressClosableChange =
|
||||||
readonly _suppressClosableChanged = new Emitter<SuppressClosableEvent>();
|
this._onDidSuppressClosableChange.event;
|
||||||
readonly suppressClosableChanged = this._suppressClosableChanged.event;
|
|
||||||
|
|
||||||
private readonly _onDidActiveGroupChange = new Emitter<void>();
|
private readonly _onDidActiveGroupChange = new Emitter<void>();
|
||||||
readonly onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
readonly onDidActiveGroupChange = this._onDidActiveGroupChange.event;
|
||||||
@ -89,8 +91,7 @@ export class DockviewPanelApiImpl
|
|||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
this.disposable,
|
this.disposable,
|
||||||
this._onDidTitleChange,
|
this._onDidTitleChange,
|
||||||
this._titleChanged,
|
this._onDidSuppressClosableChange,
|
||||||
this._suppressClosableChanged,
|
|
||||||
this._onDidGroupChange,
|
this._onDidGroupChange,
|
||||||
this._onDidActiveGroupChange
|
this._onDidActiveGroupChange
|
||||||
);
|
);
|
||||||
|
@ -24,7 +24,6 @@ import {
|
|||||||
AddPanelOptions,
|
AddPanelOptions,
|
||||||
DockviewComponentOptions,
|
DockviewComponentOptions,
|
||||||
MovementOptions,
|
MovementOptions,
|
||||||
TabContextMenuEvent,
|
|
||||||
} from './options';
|
} from './options';
|
||||||
import {
|
import {
|
||||||
BaseGrid,
|
BaseGrid,
|
||||||
@ -32,7 +31,6 @@ import {
|
|||||||
toTarget,
|
toTarget,
|
||||||
} from '../gridview/baseComponentGridview';
|
} from '../gridview/baseComponentGridview';
|
||||||
import { DockviewApi } from '../api/component.api';
|
import { DockviewApi } from '../api/component.api';
|
||||||
import { LayoutMouseEvent, MouseEventKind } from '../groupview/tab';
|
|
||||||
import { Orientation } from '../splitview/core/splitview';
|
import { Orientation } from '../splitview/core/splitview';
|
||||||
import { DefaultTab } from './components/tab/defaultTab';
|
import { DefaultTab } from './components/tab/defaultTab';
|
||||||
import {
|
import {
|
||||||
@ -106,7 +104,6 @@ export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
|
|||||||
addEmptyGroup(options?: AddGroupOptions): void;
|
addEmptyGroup(options?: AddGroupOptions): void;
|
||||||
closeAllGroups(): void;
|
closeAllGroups(): void;
|
||||||
// events
|
// events
|
||||||
onTabContextMenu: Event<TabContextMenuEvent>;
|
|
||||||
moveToNext(options?: MovementOptions): void;
|
moveToNext(options?: MovementOptions): void;
|
||||||
moveToPrevious(options?: MovementOptions): void;
|
moveToPrevious(options?: MovementOptions): void;
|
||||||
setActivePanel(panel: IDockviewPanel): void;
|
setActivePanel(panel: IDockviewPanel): void;
|
||||||
@ -128,10 +125,6 @@ export class DockviewComponent
|
|||||||
private _api: DockviewApi;
|
private _api: DockviewApi;
|
||||||
private _options: Exclude<DockviewComponentOptions, 'orientation'>;
|
private _options: Exclude<DockviewComponentOptions, 'orientation'>;
|
||||||
|
|
||||||
private readonly _onTabContextMenu = new Emitter<TabContextMenuEvent>();
|
|
||||||
readonly onTabContextMenu: Event<TabContextMenuEvent> =
|
|
||||||
this._onTabContextMenu.event;
|
|
||||||
|
|
||||||
private readonly _onDidDrop = new Emitter<DockviewDropEvent>();
|
private readonly _onDidDrop = new Emitter<DockviewDropEvent>();
|
||||||
readonly onDidDrop: Event<DockviewDropEvent> = this._onDidDrop.event;
|
readonly onDidDrop: Event<DockviewDropEvent> = this._onDidDrop.event;
|
||||||
|
|
||||||
@ -200,7 +193,6 @@ export class DockviewComponent
|
|||||||
});
|
});
|
||||||
|
|
||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
this._onTabContextMenu,
|
|
||||||
this._onDidDrop,
|
this._onDidDrop,
|
||||||
Event.any(
|
Event.any(
|
||||||
this.onDidAddPanel,
|
this.onDidAddPanel,
|
||||||
@ -427,18 +419,6 @@ export class DockviewComponent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fireMouseEvent(event: LayoutMouseEvent): void {
|
|
||||||
if (event.kind === MouseEventKind.CONTEXT_MENU) {
|
|
||||||
if (event.tab && event.panel) {
|
|
||||||
this._onTabContextMenu.fire({
|
|
||||||
event: event.event,
|
|
||||||
api: this._api,
|
|
||||||
panel: event.panel,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
addPanel(options: AddPanelOptions): IDockviewPanel {
|
addPanel(options: AddPanelOptions): IDockviewPanel {
|
||||||
if (this.panels.find((_) => _.id === options.id)) {
|
if (this.panels.find((_) => _.id === options.id)) {
|
||||||
throw new Error(`panel with id ${options.id} already exists`);
|
throw new Error(`panel with id ${options.id} already exists`);
|
||||||
|
@ -63,10 +63,6 @@ export class DockviewGroupPanel
|
|||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
this.api.onActiveChange(() => {
|
this.api.onActiveChange(() => {
|
||||||
accessor.setActivePanel(this);
|
accessor.setActivePanel(this);
|
||||||
}),
|
|
||||||
this.api.onDidTitleChange((event) => {
|
|
||||||
const title = event.title;
|
|
||||||
this.update({ params: { title } });
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -107,7 +103,15 @@ export class DockviewGroupPanel
|
|||||||
|
|
||||||
if (didTitleChange) {
|
if (didTitleChange) {
|
||||||
this._title = title;
|
this._title = title;
|
||||||
this.api._titleChanged.fire({ title: this.title });
|
|
||||||
|
this.view?.update({
|
||||||
|
params: {
|
||||||
|
params: this._params,
|
||||||
|
title: this.title,
|
||||||
|
suppressClosable: this.suppressClosable,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
this.api._onDidTitleChange.fire({ title });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,7 +121,15 @@ export class DockviewGroupPanel
|
|||||||
|
|
||||||
if (didSuppressChangableClose) {
|
if (didSuppressChangableClose) {
|
||||||
this._suppressClosable = suppressClosable;
|
this._suppressClosable = suppressClosable;
|
||||||
this.api._suppressClosableChanged.fire({
|
|
||||||
|
this.view?.update({
|
||||||
|
params: {
|
||||||
|
params: this._params,
|
||||||
|
title: this.title,
|
||||||
|
suppressClosable: this.suppressClosable,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
this.api._onDidSuppressClosableChange.fire({
|
||||||
suppressClosable: !!this.suppressClosable,
|
suppressClosable: !!this.suppressClosable,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -132,11 +144,19 @@ export class DockviewGroupPanel
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (typeof params.title === 'string') {
|
if (typeof params.title === 'string') {
|
||||||
this.setTitle(params.title);
|
if (params.title !== this.title) {
|
||||||
|
this._title = params.title;
|
||||||
|
this.api._onDidTitleChange.fire({ title: this.title });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof params.suppressClosable === 'boolean') {
|
if (typeof params.suppressClosable === 'boolean') {
|
||||||
this.setSuppressClosable(params.suppressClosable);
|
if (params.suppressClosable !== this._suppressClosable) {
|
||||||
|
this._suppressClosable = params.suppressClosable;
|
||||||
|
this.api._onDidSuppressClosableChange.fire({
|
||||||
|
suppressClosable: !!this.suppressClosable,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.view?.update({
|
this.view?.update({
|
||||||
|
@ -16,7 +16,6 @@ import { DragHandler } from '../dnd/abstractDragHandler';
|
|||||||
|
|
||||||
export enum MouseEventKind {
|
export enum MouseEventKind {
|
||||||
CLICK = 'CLICK',
|
CLICK = 'CLICK',
|
||||||
CONTEXT_MENU = 'CONTEXT_MENU',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LayoutMouseEvent {
|
export interface LayoutMouseEvent {
|
||||||
@ -106,12 +105,6 @@ export class Tab extends CompositeDisposable implements ITab {
|
|||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
||||||
this._onChanged.fire({ kind: MouseEventKind.CLICK, event });
|
this._onChanged.fire({ kind: MouseEventKind.CLICK, event });
|
||||||
}),
|
|
||||||
addDisposableListener(this._element, 'contextmenu', (event) => {
|
|
||||||
this._onChanged.fire({
|
|
||||||
kind: MouseEventKind.CONTEXT_MENU,
|
|
||||||
event,
|
|
||||||
});
|
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -264,7 +264,6 @@ export class TabsContainer
|
|||||||
const alreadyFocused =
|
const alreadyFocused =
|
||||||
panel.id === this.group.model.activePanel?.id &&
|
panel.id === this.group.model.activePanel?.id &&
|
||||||
this.group.model.isContentFocused;
|
this.group.model.isContentFocused;
|
||||||
this.accessor.fireMouseEvent({ ...event, panel, tab: true });
|
|
||||||
|
|
||||||
const isLeftClick = event.event.button === 0;
|
const isLeftClick = event.event.button === 0;
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ import { ReactPanelDeserialzier } from '../deserializer';
|
|||||||
import {
|
import {
|
||||||
DockviewDndOverlayEvent,
|
DockviewDndOverlayEvent,
|
||||||
GroupPanelFrameworkComponentFactory,
|
GroupPanelFrameworkComponentFactory,
|
||||||
TabContextMenuEvent,
|
|
||||||
} from '../../dockview/options';
|
} from '../../dockview/options';
|
||||||
import { DockviewPanelApi } from '../../api/groupPanelApi';
|
import { DockviewPanelApi } from '../../api/groupPanelApi';
|
||||||
import { ReactPortalStore, usePortalsLifecycle } from '../react';
|
import { ReactPortalStore, usePortalsLifecycle } from '../react';
|
||||||
@ -63,7 +62,6 @@ export interface IDockviewReactProps {
|
|||||||
watermarkComponent?: React.FunctionComponent<IWatermarkPanelProps>;
|
watermarkComponent?: React.FunctionComponent<IWatermarkPanelProps>;
|
||||||
onReady: (event: DockviewReadyEvent) => void;
|
onReady: (event: DockviewReadyEvent) => void;
|
||||||
tabHeight?: number;
|
tabHeight?: number;
|
||||||
onTabContextMenu?: (event: TabContextMenuEvent) => void;
|
|
||||||
onDidDrop?: (event: DockviewDropEvent) => void;
|
onDidDrop?: (event: DockviewDropEvent) => void;
|
||||||
showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
|
showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
|
||||||
hideBorders?: boolean;
|
hideBorders?: boolean;
|
||||||
@ -237,24 +235,6 @@ export const DockviewReact = React.forwardRef(
|
|||||||
});
|
});
|
||||||
}, [props.tabComponents]);
|
}, [props.tabComponents]);
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
if (!props.onTabContextMenu || !dockviewRef.current) {
|
|
||||||
return () => {
|
|
||||||
//noop
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
const disposable = dockviewRef.current.onTabContextMenu((event) => {
|
|
||||||
if (props.onTabContextMenu) {
|
|
||||||
props.onTabContextMenu(event);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
disposable.dispose();
|
|
||||||
};
|
|
||||||
}, [props.onTabContextMenu]);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
if (!dockviewRef.current) {
|
if (!dockviewRef.current) {
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user