diff options
| author | Andy Rickert <andrew_rickert@brown.edu> | 2020-04-29 16:23:30 -0700 | 
|---|---|---|
| committer | Andy Rickert <andrew_rickert@brown.edu> | 2020-04-29 16:23:30 -0700 | 
| commit | ddf0902be470f6557695627fc65103c2d10e42f7 (patch) | |
| tree | 38311ac28f3f253462b9f867220fdee732f7a336 /src/client/views/animationtimeline/TimelineMenu.tsx | |
| parent | 9aab1f5e7dc7438dfa8a93afe03bd5746315c994 (diff) | |
| parent | dadbb74ffa56a0dc55745ce972e7b13925629b7b (diff) | |
merge w master
Diffstat (limited to 'src/client/views/animationtimeline/TimelineMenu.tsx')
| -rw-r--r-- | src/client/views/animationtimeline/TimelineMenu.tsx | 78 | 
1 files changed, 78 insertions, 0 deletions
| diff --git a/src/client/views/animationtimeline/TimelineMenu.tsx b/src/client/views/animationtimeline/TimelineMenu.tsx new file mode 100644 index 000000000..59c25596e --- /dev/null +++ b/src/client/views/animationtimeline/TimelineMenu.tsx @@ -0,0 +1,78 @@ +import * as React from "react"; +import {observable, action, runInAction} from "mobx";  +import {observer} from "mobx-react";  +import "./TimelineMenu.scss";  +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faChartLine, faRoad, faClipboard, faPen, faTrash, faTable } from "@fortawesome/free-solid-svg-icons"; +import { Utils } from "../../../Utils"; + + +@observer +export class TimelineMenu extends React.Component { +    public static Instance:TimelineMenu;  + +    @observable private _opacity = 0; +    @observable private _x = 0;  +    @observable private _y = 0;  +    @observable private _currentMenu:JSX.Element[] = [];  + +    constructor (props:Readonly<{}>){ +        super(props);  +        TimelineMenu.Instance = this;  +    } +     +    @action +    openMenu = (x?:number, y?:number) => { +        this._opacity = 1;  +        x ? this._x = x : this._x = 0;  +        y ? this._y = y : this._y = 0;  +    } + +    @action +    closeMenu = () => { +        this._opacity = 0;  +        this._currentMenu = [];  +        this._x = -1000000;  +        this._y = -1000000;  +    } + +    @action +    addItem = (type: "input" | "button", title: string, event: (e:any, ...args:any[]) => void) => { +        if (type === "input"){ +            let inputRef = React.createRef<HTMLInputElement>();  +            let text = "";  +            this._currentMenu.push(<div key={Utils.GenerateGuid()} className="timeline-menu-item"><FontAwesomeIcon icon={faClipboard} size="lg"/><input className="timeline-menu-input" ref = {inputRef} placeholder={title} onChange={(e) => { +                e.stopPropagation(); +                text = e.target.value; +            }} onKeyDown={(e) => { +                if (e.keyCode === 13) { +                    event(text);  +                    this.closeMenu();                     +                     e.stopPropagation();  +                }  +            }}/></div>);  +        } else if (type === "button") { +            let buttonRef = React.createRef<HTMLDivElement>();  +            this._currentMenu.push( <div key={Utils.GenerateGuid()} className="timeline-menu-item"><FontAwesomeIcon icon={faChartLine}size="lg"/><p className="timeline-menu-desc" onClick={(e) => { +                e.preventDefault();  +                e.stopPropagation();  +                event(e);  +                this.closeMenu();  +            }}>{title}</p></div>);  +        }   +    } + +    @action  +    addMenu = (title:string) => { +        this._currentMenu.unshift(<div key={Utils.GenerateGuid()} className="timeline-menu-header"><p className="timeline-menu-header-desc">{title}</p></div>);      +    } + +    render() { +        return ( +            <div key={Utils.GenerateGuid()} className="timeline-menu-container" style={{opacity: this._opacity, left: this._x, top: this._y}} > +                {this._currentMenu} +            </div> +        ); +    } + +}
\ No newline at end of file | 
