diff options
| author | Stanley Yip <33562077+yipstanley@users.noreply.github.com> | 2019-11-16 14:34:33 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-11-16 14:34:33 -0500 |
| commit | 2231fc61a0a667c207ec3ca7156f7545cf909d17 (patch) | |
| tree | c3ef95f57ff84c847aedd0125173b6c58cbeb239 /src/client/views/collections/CollectionStaffView.tsx | |
| parent | 22d1e65236bae11c508d5c34ebcbddd1a552bfd8 (diff) | |
| parent | 68c9c230b3c98ec70adaa1dacb66215f09d2c1f6 (diff) | |
Merge pull request #302 from browngraphicslab/interaction_stanley
Interaction Improvements
Diffstat (limited to 'src/client/views/collections/CollectionStaffView.tsx')
| -rw-r--r-- | src/client/views/collections/CollectionStaffView.tsx | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/client/views/collections/CollectionStaffView.tsx b/src/client/views/collections/CollectionStaffView.tsx new file mode 100644 index 000000000..5b1224b96 --- /dev/null +++ b/src/client/views/collections/CollectionStaffView.tsx @@ -0,0 +1,65 @@ +import { CollectionSubView } from "./CollectionSubView"; +import { InkingCanvas } from "../InkingCanvas"; +import { Transform } from "../../util/Transform"; +import React = require("react") +import { computed, action, IReactionDisposer, reaction, runInAction, observable } from "mobx"; +import { Doc, HeightSym } from "../../../new_fields/Doc"; +import { NumCast } from "../../../new_fields/Types"; +import "./CollectionStaffView.scss"; +import { observer } from "mobx-react"; + +@observer +export class CollectionStaffView extends CollectionSubView(doc => doc) { + private getTransform = (): Transform => this.props.ScreenToLocalTransform().translate(0, -this._mainCont.current!.scrollTop); + private _mainCont = React.createRef<HTMLDivElement>(); + private _reactionDisposer: IReactionDisposer | undefined; + @observable private _staves = NumCast(this.props.Document.staves); + + componentDidMount = () => { + this._reactionDisposer = reaction( + () => NumCast(this.props.Document.staves), + (staves) => runInAction(() => this._staves = staves) + ); + + this.props.Document.staves = 5; + } + + @computed get fieldExtensionDoc() { + return Doc.fieldExtensionDoc(this.props.DataDoc || this.props.Document, this.props.fieldKey); + } + + @computed get addStaffButton() { + return <div onPointerDown={this.addStaff}>+</div>; + } + + @computed get staves() { + let staves = []; + for (let i = 0; i < this._staves; i++) { + let rows = []; + for (let j = 0; j < 5; j++) { + rows.push(<div key={`staff-${i}-${j}`} className="collectionStaffView-line"></div>) + } + staves.push(<div key={`staff-${i}`} className="collectionStaffView-staff"> + {rows} + </div>); + } + return staves; + } + + @action + addStaff = (e: React.PointerEvent) => { + this.props.Document.staves = this._staves + 1; + } + + render() { + return ( + <div className="collectionStaffView" ref={this._mainCont}> + <InkingCanvas getScreenTransform={this.getTransform} Document={this.props.Document} AnnotationDocument={this.fieldExtensionDoc} inkFieldKey={"ink"} > + {() => []} + </InkingCanvas> + {this.staves} + {this.addStaffButton} + </div> + ) + } +}
\ No newline at end of file |
