mirror of
https://github.com/mathuo/dockview
synced 2025-03-11 00:12:07 +00:00
fix: dockview panel group should derive constraints
This commit is contained in:
parent
d1f67828e3
commit
a74daf410e
@ -12,7 +12,11 @@ export interface TitleEvent {
|
|||||||
* omit visibility modifiers since the visibility of a single group doesn't make sense
|
* omit visibility modifiers since the visibility of a single group doesn't make sense
|
||||||
* because it belongs to a groupview
|
* because it belongs to a groupview
|
||||||
*/
|
*/
|
||||||
export interface DockviewPanelApi extends Omit<GridviewPanelApi, 'setVisible'> {
|
export interface DockviewPanelApi
|
||||||
|
extends Omit<
|
||||||
|
GridviewPanelApi,
|
||||||
|
'setVisible' | 'onDidConstraintsChange' | 'setConstraints'
|
||||||
|
> {
|
||||||
readonly group: DockviewGroupPanel;
|
readonly group: DockviewGroupPanel;
|
||||||
readonly isGroupActive: boolean;
|
readonly isGroupActive: boolean;
|
||||||
readonly title: string;
|
readonly title: string;
|
||||||
|
@ -4,13 +4,14 @@ import { GridviewPanelApi } from '../api/gridviewPanelApi';
|
|||||||
import {
|
import {
|
||||||
DockviewGroupPanelModel,
|
DockviewGroupPanelModel,
|
||||||
GroupOptions,
|
GroupOptions,
|
||||||
|
IDockviewGroupPanelModel,
|
||||||
IHeader,
|
IHeader,
|
||||||
} from './dockviewGroupPanelModel';
|
} from './dockviewGroupPanelModel';
|
||||||
import { GridviewPanel, IGridviewPanel } from '../gridview/gridviewPanel';
|
import { GridviewPanel, IGridviewPanel } from '../gridview/gridviewPanel';
|
||||||
import { IDockviewPanel } from '../dockview/dockviewPanel';
|
import { IDockviewPanel } from '../dockview/dockviewPanel';
|
||||||
|
|
||||||
export interface IDockviewGroupPanel extends IGridviewPanel {
|
export interface IDockviewGroupPanel extends IGridviewPanel {
|
||||||
model: DockviewGroupPanelModel;
|
model: IDockviewGroupPanelModel;
|
||||||
locked: boolean;
|
locked: boolean;
|
||||||
readonly size: number;
|
readonly size: number;
|
||||||
readonly panels: IDockviewPanel[];
|
readonly panels: IDockviewPanel[];
|
||||||
@ -25,7 +26,7 @@ export class DockviewGroupPanel
|
|||||||
extends GridviewPanel
|
extends GridviewPanel
|
||||||
implements IDockviewGroupPanel
|
implements IDockviewGroupPanel
|
||||||
{
|
{
|
||||||
private readonly _model: DockviewGroupPanelModel;
|
private readonly _model: IDockviewGroupPanelModel;
|
||||||
|
|
||||||
get panels(): IDockviewPanel[] {
|
get panels(): IDockviewPanel[] {
|
||||||
return this._model.panels;
|
return this._model.panels;
|
||||||
@ -39,26 +40,10 @@ export class DockviewGroupPanel
|
|||||||
return this._model.size;
|
return this._model.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
get model(): DockviewGroupPanelModel {
|
get model(): IDockviewGroupPanelModel {
|
||||||
return this._model;
|
return this._model;
|
||||||
}
|
}
|
||||||
|
|
||||||
get minimumHeight(): number {
|
|
||||||
return this._model.minimumHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
get maximumHeight(): number {
|
|
||||||
return this._model.maximumHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
get minimumWidth(): number {
|
|
||||||
return this._model.minimumWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
get maximumWidth(): number {
|
|
||||||
return this._model.maximumWidth;
|
|
||||||
}
|
|
||||||
|
|
||||||
get locked(): boolean {
|
get locked(): boolean {
|
||||||
return this._model.locked;
|
return this._model.locked;
|
||||||
}
|
}
|
||||||
@ -76,7 +61,10 @@ export class DockviewGroupPanel
|
|||||||
id: string,
|
id: string,
|
||||||
options: GroupOptions
|
options: GroupOptions
|
||||||
) {
|
) {
|
||||||
super(id, 'groupview_default');
|
super(id, 'groupview_default', {
|
||||||
|
minimumHeight: 100,
|
||||||
|
minimumWidth: 100,
|
||||||
|
});
|
||||||
|
|
||||||
this._model = new DockviewGroupPanelModel(
|
this._model = new DockviewGroupPanelModel(
|
||||||
this.element,
|
this.element,
|
||||||
|
@ -4,10 +4,9 @@ import { Droptarget, Position } from '../dnd/droptarget';
|
|||||||
import { DockviewComponent } from './dockviewComponent';
|
import { DockviewComponent } from './dockviewComponent';
|
||||||
import { isAncestor, toggleClass } from '../dom';
|
import { isAncestor, toggleClass } from '../dom';
|
||||||
import { addDisposableListener, Emitter, Event } from '../events';
|
import { addDisposableListener, Emitter, Event } from '../events';
|
||||||
import { IGridPanelView } from '../gridview/baseComponentGridview';
|
|
||||||
import { IViewSize } from '../gridview/gridview';
|
import { IViewSize } from '../gridview/gridview';
|
||||||
import { CompositeDisposable } from '../lifecycle';
|
import { CompositeDisposable } from '../lifecycle';
|
||||||
import { PanelInitParameters, PanelUpdateEvent } from '../panel/types';
|
import { IPanel, PanelInitParameters, PanelUpdateEvent } from '../panel/types';
|
||||||
import {
|
import {
|
||||||
ContentContainer,
|
ContentContainer,
|
||||||
IContentContainer,
|
IContentContainer,
|
||||||
@ -82,7 +81,7 @@ export interface IHeader {
|
|||||||
height: number | undefined;
|
height: number | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDockviewGroupPanelModel extends IGridPanelView {
|
export interface IDockviewGroupPanelModel extends IPanel {
|
||||||
readonly isActive: boolean;
|
readonly isActive: boolean;
|
||||||
readonly size: number;
|
readonly size: number;
|
||||||
readonly panels: IDockviewPanel[];
|
readonly panels: IDockviewPanel[];
|
||||||
@ -95,13 +94,20 @@ export interface IDockviewGroupPanelModel extends IGridPanelView {
|
|||||||
readonly onDidActivePanelChange: Event<GroupviewChangeEvent>;
|
readonly onDidActivePanelChange: Event<GroupviewChangeEvent>;
|
||||||
readonly onMove: Event<GroupMoveEvent>;
|
readonly onMove: Event<GroupMoveEvent>;
|
||||||
locked: boolean;
|
locked: boolean;
|
||||||
|
setActive(isActive: boolean): void;
|
||||||
|
initialize(): void;
|
||||||
// state
|
// state
|
||||||
isPanelActive: (panel: IDockviewPanel) => boolean;
|
isPanelActive: (panel: IDockviewPanel) => boolean;
|
||||||
indexOf(panel: IDockviewPanel): number;
|
indexOf(panel: IDockviewPanel): number;
|
||||||
// panel lifecycle
|
// panel lifecycle
|
||||||
openPanel(
|
openPanel(
|
||||||
panel: IDockviewPanel,
|
panel: IDockviewPanel,
|
||||||
options?: { index?: number; skipFocus?: boolean }
|
options?: {
|
||||||
|
index?: number;
|
||||||
|
skipFocus?: boolean;
|
||||||
|
skipSetPanelActive?: boolean;
|
||||||
|
skipSetGroupActive?: boolean;
|
||||||
|
}
|
||||||
): void;
|
): void;
|
||||||
closePanel(panel: IDockviewPanel): void;
|
closePanel(panel: IDockviewPanel): void;
|
||||||
closeAllPanels(): void;
|
closeAllPanels(): void;
|
||||||
@ -199,22 +205,6 @@ export class DockviewGroupPanelModel
|
|||||||
return this._panels.length === 0;
|
return this._panels.length === 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
get minimumHeight(): number {
|
|
||||||
return 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
get maximumHeight(): number {
|
|
||||||
return Number.MAX_SAFE_INTEGER;
|
|
||||||
}
|
|
||||||
|
|
||||||
get minimumWidth(): number {
|
|
||||||
return 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
get maximumWidth(): number {
|
|
||||||
return Number.MAX_SAFE_INTEGER;
|
|
||||||
}
|
|
||||||
|
|
||||||
get hasWatermark(): boolean {
|
get hasWatermark(): boolean {
|
||||||
return !!(
|
return !!(
|
||||||
this.watermark && this.container.contains(this.watermark.element)
|
this.watermark && this.container.contains(this.watermark.element)
|
||||||
|
@ -126,9 +126,31 @@ export abstract class GridviewPanel
|
|||||||
return this.api.isActive;
|
return this.api.isActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(id: string, component: string) {
|
constructor(
|
||||||
|
id: string,
|
||||||
|
component: string,
|
||||||
|
options?: {
|
||||||
|
minimumWidth?: number;
|
||||||
|
maximumWidth?: number;
|
||||||
|
minimumHeight?: number;
|
||||||
|
maximumHeight?: number;
|
||||||
|
}
|
||||||
|
) {
|
||||||
super(id, component, new GridviewPanelApiImpl(id));
|
super(id, component, new GridviewPanelApiImpl(id));
|
||||||
|
|
||||||
|
if (typeof options?.minimumWidth === 'number') {
|
||||||
|
this._minimumWidth = options.minimumWidth;
|
||||||
|
}
|
||||||
|
if (typeof options?.maximumWidth === 'number') {
|
||||||
|
this._maximumWidth = options.maximumWidth;
|
||||||
|
}
|
||||||
|
if (typeof options?.minimumHeight === 'number') {
|
||||||
|
this._minimumHeight = options.minimumHeight;
|
||||||
|
}
|
||||||
|
if (typeof options?.maximumHeight === 'number') {
|
||||||
|
this._maximumHeight = options.maximumHeight;
|
||||||
|
}
|
||||||
|
|
||||||
this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
|
this.api.initialize(this); // TODO: required to by-pass 'super before this' requirement
|
||||||
|
|
||||||
this.addDisposables(
|
this.addDisposables(
|
||||||
|
Loading…
Reference in New Issue
Block a user