diff options
-rw-r--r-- | src/views/collections/CollectionDockingView.tsx | 25 | ||||
-rw-r--r-- | src/views/collections/CollectionFreeFormView.tsx | 2 | ||||
-rw-r--r-- | src/views/nodes/DocumentView.tsx | 27 |
3 files changed, 50 insertions, 4 deletions
diff --git a/src/views/collections/CollectionDockingView.tsx b/src/views/collections/CollectionDockingView.tsx index 8c822fba4..d4965645c 100644 --- a/src/views/collections/CollectionDockingView.tsx +++ b/src/views/collections/CollectionDockingView.tsx @@ -165,6 +165,24 @@ export class CollectionDockingView extends React.Component<CollectionViewProps> // all of this must be undone when the document has been dropped (see tabCreated) } + + _makeFullScreen: boolean = false; + _maximizedStack: any = null; + public static OpenFullScreen(dv: DocumentView) { + var newItemConfig = { + type: 'component', + componentName: 'documentViewComponent', + componentState: { doc: dv.props.Document } + }; + CollectionDockingView.myLayout._makeFullScreen = true; + CollectionDockingView.myLayout.root.contentItems[ 0 ].addChild(newItemConfig); + } + public static CloseFullScreen() { + if (CollectionDockingView.myLayout._maximizedStack != null) { + CollectionDockingView.myLayout._maximizedStack.header.controlsContainer.find('.lm_close').click(); + CollectionDockingView.myLayout._maximizedStack = null; + } + } goldenLayoutFactory() { CollectionDockingView.myLayout = this.modelForGoldenLayout; @@ -186,6 +204,10 @@ export class CollectionDockingView extends React.Component<CollectionViewProps> }); CollectionDockingView.myLayout.on('stackCreated', function (stack: any) { + if (CollectionDockingView.myLayout._makeFullScreen) { + CollectionDockingView.myLayout._maximizedStack = stack; + CollectionDockingView.myLayout._maxstack = stack.header.controlsContainer.find('.lm_maximise'); + } stack.header.controlsContainer.find('.lm_popout').hide(); stack.header.controlsContainer.find('.lm_close') //get the close icon .off('click') //unbind the current click handler @@ -210,6 +232,9 @@ export class CollectionDockingView extends React.Component<CollectionViewProps> ), document.getElementById(containingDiv) ); + if (CollectionDockingView.myLayout._maxstack != null) { + CollectionDockingView.myLayout._maxstack.click(); + } }, 0); }); CollectionDockingView.myLayout.container = this._containerRef.current; diff --git a/src/views/collections/CollectionFreeFormView.tsx b/src/views/collections/CollectionFreeFormView.tsx index b118f7ac8..39a8fc44f 100644 --- a/src/views/collections/CollectionFreeFormView.tsx +++ b/src/views/collections/CollectionFreeFormView.tsx @@ -70,8 +70,6 @@ export class CollectionFreeFormView extends React.Component<CollectionViewProps> @action onPointerDown = (e: React.PointerEvent): void => { if (e.button === 2 && this.active) { - e.stopPropagation(); - e.preventDefault(); document.removeEventListener("pointermove", this.onPointerMove); document.addEventListener("pointermove", this.onPointerMove); document.removeEventListener("pointerup", this.onPointerUp); diff --git a/src/views/nodes/DocumentView.tsx b/src/views/nodes/DocumentView.tsx index a3d7d550e..147727a67 100644 --- a/src/views/nodes/DocumentView.tsx +++ b/src/views/nodes/DocumentView.tsx @@ -253,7 +253,12 @@ export class DocumentView extends React.Component<DocumentViewProps> { } onPointerMove = (e: PointerEvent): void => { + if (e.cancelBubble) { + this._contextMenuCanOpen = false; + return; + } if (Math.abs(this._downX - e.clientX) > 3 || Math.abs(this._downY - e.clientY) > 3) { + this._contextMenuCanOpen = false; if (this._mainCont.current != null && this.props.ContainingCollectionView != null) { this._contextMenuCanOpen = false; const rect = this.screenRect; @@ -287,6 +292,20 @@ export class DocumentView extends React.Component<DocumentViewProps> { this.props.ContainingCollectionView.removeDocument(this.props.Document) } } + @action + fullScreenClicked = (e: React.MouseEvent): void => { + CollectionDockingView.OpenFullScreen(this); + ContextMenu.Instance.clearItems(); + ContextMenu.Instance.addItem({ description: "Close Full Screen", event: this.closeFullScreenClicked }); + ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15) + } + @action + closeFullScreenClicked = (e: React.MouseEvent): void => { + CollectionDockingView.CloseFullScreen(); + ContextMenu.Instance.clearItems(); + ContextMenu.Instance.addItem({ description: "Full Screen", event: this.fullScreenClicked }) + ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15) + } @action onContextMenu = (e: React.MouseEvent): void => { @@ -299,17 +318,21 @@ export class DocumentView extends React.Component<DocumentViewProps> { return; } - var topMost = this.props.ContainingCollectionView == undefined; + var topMost = this.props.ContainingCollectionView == undefined || + this.props.ContainingCollectionView instanceof CollectionDockingView; if (topMost) { ContextMenu.Instance.clearItems() + ContextMenu.Instance.addItem({ description: "Full Screen", event: this.fullScreenClicked }) + ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15) } else { // DocumentViews should stop propogation of this event e.stopPropagation(); ContextMenu.Instance.clearItems(); + ContextMenu.Instance.addItem({ description: "Full Screen", event: this.fullScreenClicked }) ContextMenu.Instance.addItem({ description: "Delete", event: this.deleteClicked }) - ContextMenu.Instance.displayMenu(e.pageX, e.pageY) + ContextMenu.Instance.displayMenu(e.pageX - 15, e.pageY - 15) SelectionManager.SelectDoc(this, e.ctrlKey); } } |