From 0402105238f24785a1229dbbb37f2e4dba958f88 Mon Sep 17 00:00:00 2001 From: bob Date: Tue, 29 Jan 2019 10:47:28 -0500 Subject: playing with a docking view. --- src/views/collections/CollectionDockingView.tsx | 154 ++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 src/views/collections/CollectionDockingView.tsx (limited to 'src/views/collections/CollectionDockingView.tsx') diff --git a/src/views/collections/CollectionDockingView.tsx b/src/views/collections/CollectionDockingView.tsx new file mode 100644 index 000000000..51323e94b --- /dev/null +++ b/src/views/collections/CollectionDockingView.tsx @@ -0,0 +1,154 @@ +import { observer } from "mobx-react"; +import { Key, KeyStore } from "../../fields/Key"; +import React = require("react"); +import FlexLayout from "flexlayout-react"; +import { action, observable, computed } from "mobx"; +import { Document } from "../../fields/Document"; +import { DocumentView, DocumentFieldViewProps, CollectionViewProps } from "../nodes/DocumentView"; +import { ListField } from "../../fields/ListField"; +import { NumberField } from "../../fields/NumberField"; +import { SSL_OP_SINGLE_DH_USE } from "constants"; +import { SelectionManager } from "../../util/SelectionManager"; +import { ContextMenu } from "../ContextMenu"; +import "./CollectionDockingView.scss" + + +@observer +export class CollectionDockingView extends React.Component { + + public static LayoutString() { return ''; } + + + private _times: number = 0; + private _containerRef = React.createRef(); + private _canvasRef = React.createRef(); + private _json = { + global: {}, + borders: [], + layout: { + "type": "row", + "weight": 100, + "children": [ + { + "type": "tabset", + "weight": 50, + "selected": 0, + "children": [ + { + "type": "tab", + "name": "CHILD #1", + "component": "grid", + } + ] + }, + { + "type": "tabset", + "weight": 50, + "selected": 0, + "children": [ + { + "type": "tab", + "name": "CHILD #2", + "component": "grid", + } + ] + } + ] + } + }; + private _model: any; + constructor(props: CollectionViewProps) { + super(props); + this._model = FlexLayout.Model.fromJson(this._json); + } + + public static BORDER_WIDTH = 2; + + @computed + public get active(): boolean { + var isSelected = (this.props.ContainingDocumentView != undefined && SelectionManager.IsSelected(this.props.ContainingDocumentView)); + var childSelected = SelectionManager.SelectedDocuments().some(view => view.props.ContainingCollectionView == this); + var topMost = this.props.ContainingDocumentView != undefined && this.props.ContainingDocumentView.props.ContainingCollectionView == undefined; + return isSelected || childSelected || topMost; + } + + componentDidMount() { + // if (this._containerRef.current) { + // DragManager.MakeDropTarget(this._containerRef.current, { + // handlers: { + // drop: this.drop + // } + // }); + // } + } + + + @action + addDocument = (doc: Document): void => { + //TODO This won't create the field if it doesn't already exist + const value = this.props.Document.GetFieldValue(this.props.fieldKey, ListField, new Array()) + value.push(doc); + } + + @action + removeDocument = (doc: Document): void => { + //TODO This won't create the field if it doesn't already exist + const value = this.props.Document.GetFieldValue(this.props.fieldKey, ListField, new Array()) + if (value.indexOf(doc) !== -1) { + value.splice(value.indexOf(doc), 1) + + SelectionManager.DeselectAll() + ContextMenu.Instance.clearItems() + } + } + @action + onPointerDown = (e: React.PointerEvent): void => { + if (e.button === 2 && this.active) { + e.stopPropagation(); + e.preventDefault(); + } else { + if (e.buttons === 1 && SelectionManager.IsSelected(this.props.ContainingDocumentView!)) { + e.stopPropagation(); + } + } + } + factory = (node: any): any => { + var component = node.getComponent(); + if (component === "button") { + return ; + } + if (component === "grid") { + let which = this._times++ % 3; + if (which == 0) + return
+ if (which == 1) + return
+ if (which == 2) + return
+ } + } + + render() { + const { fieldKey, Document: Document } = this.props; + + const value: Document[] = Document.GetFieldValue(fieldKey, ListField, []); + const panx: number = Document.GetFieldValue(KeyStore.PanX, NumberField, Number(0)); + const pany: number = Document.GetFieldValue(KeyStore.PanY, NumberField, Number(0)); + const currScale: number = Document.GetFieldValue(KeyStore.Scale, NumberField, Number(1)); + return ( +
+
e.preventDefault()} style={{ + width: "100%", + height: `calc(100% - 2*${CollectionDockingView.BORDER_WIDTH}px)`, + }} ref={this._containerRef}> +
+ +
+
+
+ ); + } +} \ No newline at end of file -- cgit v1.2.3-70-g09d2