aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/DocumentManager.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/DocumentManager.tsx')
-rw-r--r--src/client/views/DocumentManager.tsx283
1 files changed, 283 insertions, 0 deletions
diff --git a/src/client/views/DocumentManager.tsx b/src/client/views/DocumentManager.tsx
new file mode 100644
index 000000000..a53ed4a91
--- /dev/null
+++ b/src/client/views/DocumentManager.tsx
@@ -0,0 +1,283 @@
+import React = require('react')
+import { observer } from 'mobx-react';
+import { observable, action } from 'mobx';
+import { DocumentView } from './nodes/DocumentView';
+import { Document } from "../../fields/Document"
+import { CollectionFreeFormView } from './collections/CollectionFreeFormView';
+import { KeyStore } from '../../fields/KeyStore';
+import { CollectionViewBase } from './collections/CollectionViewBase';
+import { CollectionViewType, CollectionView } from './collections/CollectionView';
+
+
+export class DocumentManager {
+
+ //global holds all of the nodes (regardless of which collection they're in)
+ @observable
+ public DocumentViews: DocumentView[] = [];
+
+ // singleton instance
+ private static _instance: DocumentManager;
+
+ // create one and only one instance of NodeManager
+ public static get Instance(): DocumentManager {
+ return this._instance || (this._instance = new this());
+ }
+
+ //private constructor so no other class can create a nodemanager
+ private constructor() {
+ // this.DocumentViews = new Array<DocumentView>();
+ }
+
+ public getDocumentView(toFind: Document): DocumentView | null {
+
+ let toReturn: DocumentView | null;
+ toReturn = null;
+
+ //gets document view that is in a freeform canvas collection
+ DocumentManager.Instance.DocumentViews.map(view => {
+ let doc = view.props.Document;
+ // if (view.props.ContainingCollectionView instanceof CollectionFreeFormView) {
+ // if (Object.is(doc, toFind)) {
+ // toReturn = view;
+ // return;
+ // }
+ // }
+
+ if (Object.is(doc, toFind)) {
+ toReturn = view;
+ return;
+ }
+
+ })
+
+ return (toReturn);
+ }
+
+ // public getDocumentViewFreeform2(toFind: Document): DocumentView | null {
+
+ // let toReturn: DocumentView | null;
+ // toReturn = null;
+
+ // //gets document view that is in a freeform canvas collection
+ // DocumentManager.Instance.DocumentViews.map(view => {
+ // let doc = view.props.Document;
+ // if (view.props.ContainingCollectionView && view.props.ContainingCollectionView.collectionViewType == CollectionViewType.Freeform) {
+ // if (Object.is(doc, toFind)) {
+ // console.log("finding view")
+ // toReturn = view;
+ // return;
+ // }
+ // }
+ // })
+
+ // return (toReturn);
+ // }
+
+ public getCollectionView(toFind: Document): DocumentView | null {
+
+ let toReturn: DocumentView | null;
+ toReturn = null;
+
+ //gets document view that is in a freeform canvas collection
+ DocumentManager.Instance.DocumentViews.map(view => {
+ let doc = view.props.Document;
+ if (view instanceof CollectionView) {
+ console.log("finding view")
+ if (Object.is(doc, toFind)) {
+ toReturn = view;
+ return;
+ }
+ }
+ })
+
+ return (toReturn);
+ }
+
+ // @action
+ // public centerNode2(doc: Document | DocumentView): any {
+ // //console.log(doc.Title)
+ // //gets document view that is in freeform collection
+
+ // let docView: DocumentView | null;
+
+ // if (doc instanceof Document) {
+ // docView = DocumentManager.Instance.getDocumentViewFreeform(doc)
+ // }
+ // else {
+ // docView = doc
+ // }
+
+ // let scale: number;
+ // let XView: number;
+ // let YView: number;
+
+ // //if the view exists in a freeform collection
+ // if (docView) {
+ // let { width, height } = docView.size();
+
+ // //base case: parent of parent does not exist
+ // if (!docView.props.ContainingCollectionView) {
+ // scale = docView.props.ScreenToLocalTransform().Scale
+ // let doc = docView.props.Document;
+ // console.log("hello")
+ // XView = (-doc.GetNumber(KeyStore.X, 0) * scale) - (width * scale / 2)
+ // YView = (-doc.GetNumber(KeyStore.Y, 0) * scale) - (height * scale / 2)
+ // //set x and y view of parent
+ // if (docView instanceof CollectionView) {
+ // console.log("here")
+ // DocumentManager.Instance.setViewportXY(docView, XView, YView)
+ // }
+ // }
+ // //parent is not main, parent is centered and calls itself
+ // else {
+ // if (true) {
+ // //view of parent
+ // let scale = docView.props.ContainingCollectionView.props.Document.GetNumber(KeyStore.Scale, 1)
+ // let doc = docView.props.Document
+
+ // //TODO: make sure to test if the parent view is a freeform view. if not, just skip to the next level
+ // if (docView.props.ContainingCollectionView.collectionViewType == CollectionViewType.Freeform) {
+ // //scale of parent
+ // console.log("scale: " + scale)
+ // XView = (-doc.GetNumber(KeyStore.X, 0) * scale) - (width * scale / 2);
+ // YView = (-doc.GetNumber(KeyStore.Y, 0) * scale) - (height * scale / 2);
+ // // //node.Parent.setViewportXY(XView, YView);
+ // DocumentManager.Instance.setViewportXY(docView.props.ContainingCollectionView, XView, YView)
+ // return DocumentManager.Instance.centerNode2(docView.props.ContainingCollectionView.props.Document)
+ // }
+ // else { return DocumentManager.Instance.centerNode2(docView.props.ContainingCollectionView.props.Document) }
+ // }
+ // else {
+ // // return DocumentManager.Instance.centerNode2(docView.props.ContainingCollectionView.props.Document)
+ // }
+ // }
+ // }
+ // }
+
+ // @action
+ // public centerNode4(doc: Document | DocumentView): any {
+ // //console.log(doc.Title)
+ // //gets document view that is in freeform collection
+
+ // console.log("things are happening")
+
+ // let docView: DocumentView | null;
+
+ // if (doc instanceof Document) {
+ // console.log(doc.Title)
+ // docView = DocumentManager.Instance.getDocumentViewFreeform(doc)
+ // }
+ // else {
+ // docView = doc
+ // console.log(docView.props.Document.Title)
+ // }
+
+ // let scale: number;
+ // let XView: number;
+ // let YView: number;
+
+ // //if the view exists in a freeform collection
+ // if (docView) {
+ // let { width, height } = docView.size();
+
+ // if (docView.props.ContainingCollectionView) {
+ // //view of parent
+ // let scale = docView.props.ContainingCollectionView.props.Document.GetNumber(KeyStore.Scale, 1)
+ // let doc = docView.props.Document
+
+ // if (docView.props.ContainingCollectionView.collectionViewType == CollectionViewType.Freeform) {
+ // //scale of parent
+ // XView = (-doc.GetNumber(KeyStore.X, 0) * scale) - (width * scale / 2);
+ // YView = (-doc.GetNumber(KeyStore.Y, 0) * scale) - (height * scale / 2);
+ // DocumentManager.Instance.setViewportXY(docView.props.ContainingCollectionView, XView, YView)
+ // return DocumentManager.Instance.centerNode4(docView.props.ContainingCollectionView.props.Document)
+ // }
+ // else { return DocumentManager.Instance.centerNode4(docView.props.ContainingCollectionView.props.Document) }
+ // }
+ // }
+ // }
+
+ @action
+ public centerNode(doc: Document | DocumentView, collection: Document): void {
+ //console.log(doc.Title)
+ //gets document view that is in freeform collection
+ let docView: DocumentView | null;
+
+ if (doc instanceof Document) {
+ console.log(doc.Title)
+ docView = DocumentManager.Instance.getDocumentView(doc)
+ }
+ else {
+ docView = doc
+ console.log(docView.props.Document.Title)
+ }
+
+ let scale: number;
+ let XView: number;
+ let YView: number;
+
+ if (docView) {
+ let { width, height } = docView.size();
+ let scale = docView.props.Document.GetNumber(KeyStore.Scale, 1);
+ let doc = docView.props.Document;
+ let x = doc.GetNumber(KeyStore.X, 0);
+ let y = doc.GetNumber(KeyStore.X, 0);
+
+ if (x && y) {
+ XView = (-x * scale) - (width * scale / 2);
+ YView = (-y * scale) - (height * scale / 2);
+ DocumentManager.Instance.setViewportXY(collection, XView, YView)
+ }
+
+ }
+ }
+
+ // @action
+ // public centerNode3(doc: Document | DocumentView): any {
+ // //console.log(doc.Title)
+ // //gets document view that is in freeform collection
+
+ // let docView: DocumentView | null;
+
+ // if (doc instanceof Document) {
+ // docView = DocumentManager.Instance.getDocumentViewFreeform(doc)
+ // }
+ // else {
+ // docView = doc
+ // }
+
+ // let scale: number;
+ // let XView: number;
+ // let YView: number;
+
+ // //if the view exists in a freeform collection
+ // if (docView) {
+ // let { width, height } = docView.size();
+
+ // //parent is not main, parent is centered and calls itself
+ // if (docView.props.ContainingCollectionView) {
+ // //view of parent
+ // let scale = docView.props.ContainingCollectionView.props.Document.GetNumber(KeyStore.Scale, 1)
+ // let doc = docView.props.Document
+
+ // if (docView.props.ContainingCollectionView.collectionViewType == CollectionViewType.Freeform) {
+ // //scale of parent
+ // XView = doc.GetNumber(KeyStore.X, 0) - width / 2
+ // YView = doc.GetNumber(KeyStore.Y, 0) - height / 2
+ // // console.log("X location: " + XView)
+ // // console.log("Y location: " + YView)
+ // DocumentManager.Instance.setViewportXY(docView.props.ContainingCollectionView, XView, YView)
+ // return DocumentManager.Instance.centerNode3(docView.props.ContainingCollectionView.props.Document)
+ // }
+ // else { return DocumentManager.Instance.centerNode3(docView.props.ContainingCollectionView.props.Document) }
+ // }
+ // }
+ // }
+
+
+ @action
+ private setViewportXY(collection: Document, x: number, y: number) {
+ collection.SetNumber(KeyStore.PanX, x);
+ collection.SetNumber(KeyStore.PanY, y);
+ }
+} \ No newline at end of file