advancedDynamicTextureTreeItemComponent.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { faImage, faCrosshairs } from '@fortawesome/free-solid-svg-icons';
  2. import { IExplorerExtensibilityGroup, Nullable, Observer, Observable } from "babylonjs";
  3. import { TreeItemLabelComponent } from "../../treeItemLabelComponent";
  4. import { ExtensionsComponent } from "../../extensionsComponent";
  5. import * as React from 'react';
  6. import { AdvancedDynamicTexture, Control } from 'babylonjs-gui';
  7. import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
  8. interface IAdvancedDynamicTextureTreeItemComponentProps {
  9. texture: AdvancedDynamicTexture,
  10. extensibilityGroups?: IExplorerExtensibilityGroup[],
  11. onSelectionChangeObservable?: Observable<any>,
  12. onClick: () => void
  13. }
  14. export class AdvancedDynamicTextureTreeItemComponent extends React.Component<IAdvancedDynamicTextureTreeItemComponentProps, { isInPickingMode: boolean }> {
  15. private _onControlPickedObserver: Nullable<Observer<Control>>;
  16. constructor(props: IAdvancedDynamicTextureTreeItemComponentProps) {
  17. super(props);
  18. this.state = { isInPickingMode: false };
  19. }
  20. componentWillUnmount() {
  21. let adt = this.props.texture;
  22. if (this._onControlPickedObserver) {
  23. adt.onControlPickedObservable.remove(this._onControlPickedObserver);
  24. this._onControlPickedObserver = null;
  25. }
  26. }
  27. onPickingMode() {
  28. let adt = this.props.texture;
  29. if (this._onControlPickedObserver) {
  30. adt.onControlPickedObservable.remove(this._onControlPickedObserver);
  31. this._onControlPickedObserver = null;
  32. }
  33. if (!this.state.isInPickingMode) {
  34. this._onControlPickedObserver = adt.onControlPickedObservable.add((control) => {
  35. if (!this.props.onSelectionChangeObservable) {
  36. return;
  37. }
  38. this.props.onSelectionChangeObservable.notifyObservers(control);
  39. });
  40. }
  41. this.setState({ isInPickingMode: !this.state.isInPickingMode });
  42. }
  43. render() {
  44. return (
  45. <div className="adtextureTools">
  46. <TreeItemLabelComponent label={this.props.texture.name} onClick={() => this.props.onClick()} icon={faImage} color="mediumpurple" />
  47. <div className={this.state.isInPickingMode ? "pickingMode selected icon" : "pickingMode icon"} onClick={() => this.onPickingMode()} title="Turn picking mode on/off">
  48. <FontAwesomeIcon icon={faCrosshairs} />
  49. </div>
  50. <ExtensionsComponent target={this.props.texture} extensibilityGroups={this.props.extensibilityGroups} />
  51. </div>
  52. )
  53. }
  54. }