Skip to content
This repository was archived by the owner on Nov 6, 2019. It is now read-only.

Commit 80e7073

Browse files
committed
GH-223 Enable / Disable Tab Dragging in DockPanel
Allow user to enable / disable tab dragging at runtime. Fixes GH-223 Signed-off-by: Gordon Smith <[email protected]>
1 parent 5eea83b commit 80e7073

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

packages/widgets/src/dockpanel.ts

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,16 @@ class DockPanel extends Widget {
6666
this._mode = options.mode || 'multiple-document';
6767
this._renderer = options.renderer || DockPanel.defaultRenderer;
6868
this._edges = options.edges || Private.DEFAULT_EDGES;
69+
if (options.tabsMovable !== undefined) {
70+
this._tabsMovable = options.tabsMovable;
71+
}
6972

7073
// Toggle the CSS mode attribute.
7174
this.dataset['mode'] = this._mode;
7275

7376
// Create the delegate renderer for the layout.
7477
let renderer: DockPanel.IRenderer = {
75-
createTabBar: () => this._createTabBar(),
78+
createTabBar: () => this._createTabBar(this._tabsMovable),
7679
createHandle: () => this._createHandle()
7780
};
7881

@@ -190,6 +193,21 @@ class DockPanel extends Widget {
190193
MessageLoop.postMessage(this, Private.LayoutModified);
191194
}
192195

196+
/**
197+
* Whether the tabs are movable.
198+
*/
199+
get tabsMovable(): boolean {
200+
return this._tabsMovable;
201+
}
202+
203+
/**
204+
* Enable / Disable movable tabs.
205+
*/
206+
set tabsMovable(value: boolean) {
207+
this._tabsMovable = value;
208+
each(this.tabBars(), (tabbar) => tabbar.tabsMovable = value);
209+
}
210+
193211
/**
194212
* Whether the dock panel is empty.
195213
*/
@@ -829,7 +847,7 @@ class DockPanel extends Widget {
829847
/**
830848
* Create a new tab bar for use by the panel.
831849
*/
832-
private _createTabBar(): TabBar<Widget> {
850+
private _createTabBar(tabsMovable: boolean): TabBar<Widget> {
833851
// Create the tab bar.
834852
let tabBar = this._renderer.createTabBar();
835853

@@ -843,7 +861,7 @@ class DockPanel extends Widget {
843861

844862
// Enforce necessary tab bar behavior.
845863
// TODO do we really want to enforce *all* of these?
846-
tabBar.tabsMovable = true;
864+
tabBar.tabsMovable = tabsMovable;
847865
tabBar.allowDeselect = false;
848866
tabBar.removeBehavior = 'select-previous-tab';
849867
tabBar.insertBehavior = 'select-tab-if-needed';
@@ -960,6 +978,7 @@ class DockPanel extends Widget {
960978
private _mode: DockPanel.Mode;
961979
private _drag: Drag | null = null;
962980
private _renderer: DockPanel.IRenderer;
981+
private _tabsMovable: boolean = true;
963982
private _pressData: Private.IPressData | null = null;
964983
private _layoutModified = new Signal<this, void>(this);
965984
}
@@ -1003,11 +1022,19 @@ namespace DockPanel {
10031022
*/
10041023
mode?: DockPanel.Mode;
10051024

1025+
10061026
/**
10071027
* The sizes of the edge drop zones, in pixels.
10081028
* If not given, default values will be used.
10091029
*/
10101030
edges?: IEdges;
1031+
1032+
/**
1033+
* Allow user tab placement.
1034+
*
1035+
* The deafult is `'true'`.
1036+
*/
1037+
tabsMovable?: boolean;
10111038
}
10121039

10131040
/**

0 commit comments

Comments
 (0)