customPropertyGridComponent.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import * as React from "react";
  2. import { Observable } from "babylonjs/Misc/observable";
  3. import { PropertyChangedEvent } from "../../../propertyChangedEvent";
  4. import { Color3LineComponent } from "../../lines/color3LineComponent";
  5. import { GlobalState } from '../../../globalState';
  6. import { IInspectable, InspectableType } from 'babylonjs/Misc/iInspectable';
  7. import { CheckBoxLineComponent } from '../../lines/checkBoxLineComponent';
  8. import { SliderLineComponent } from '../../lines/sliderLineComponent';
  9. import { Vector3LineComponent } from '../../lines/vector3LineComponent';
  10. import { QuaternionLineComponent } from '../../lines/quaternionLineComponent';
  11. import { LineContainerComponent } from '../../lineContainerComponent';
  12. import { TextInputLineComponent } from '../../lines/textInputLineComponent';
  13. import { LockObject } from './lockObject';
  14. interface ICustomPropertyGridComponentProps {
  15. globalState: GlobalState;
  16. target: any,
  17. lockObject: LockObject;
  18. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  19. }
  20. export class CustomPropertyGridComponent extends React.Component<ICustomPropertyGridComponentProps, { mode: number }> {
  21. constructor(props: ICustomPropertyGridComponentProps) {
  22. super(props);
  23. this.state = { mode: 0 };
  24. }
  25. renderInspectable(inspectable: IInspectable) {
  26. switch (inspectable.type) {
  27. case InspectableType.Checkbox:
  28. return (
  29. <CheckBoxLineComponent key={inspectable.label} label={inspectable.label} target={this.props.target} propertyName={inspectable.propertyName}
  30. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  31. )
  32. case InspectableType.Slider:
  33. return (
  34. <SliderLineComponent key={inspectable.label} label={inspectable.label} target={this.props.target} propertyName={inspectable.propertyName}
  35. step={inspectable.step !== undefined ? inspectable.step : 0.1}
  36. minimum={inspectable.min !== undefined ? inspectable.min : 0} maximum={inspectable.max !== undefined ? inspectable.max : 1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  37. )
  38. case InspectableType.Vector3:
  39. return (
  40. <Vector3LineComponent key={inspectable.label} label={inspectable.label} target={this.props.target} propertyName={inspectable.propertyName}
  41. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  42. )
  43. case InspectableType.Quaternion:
  44. return (
  45. <QuaternionLineComponent useEuler={this.props.globalState.onlyUseEulers} key={inspectable.label} label={inspectable.label} target={this.props.target} propertyName={inspectable.propertyName}
  46. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  47. )
  48. case InspectableType.Color3:
  49. return (
  50. <Color3LineComponent key={inspectable.label} label={inspectable.label} target={this.props.target} propertyName={inspectable.propertyName}
  51. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  52. )
  53. case InspectableType.String:
  54. return (
  55. <TextInputLineComponent key={inspectable.label} label={inspectable.label} lockObject={this.props.lockObject} target={this.props.target} propertyName={inspectable.propertyName}
  56. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  57. )
  58. }
  59. return null;
  60. }
  61. render() {
  62. let inspectables: IInspectable[] = this.props.target.inspectableCustomProperties;
  63. if (!inspectables || inspectables.length === 0) {
  64. return null;
  65. }
  66. return (
  67. <LineContainerComponent title="CUSTOM" globalState={this.props.globalState}>
  68. {
  69. inspectables.map(inspectable => {
  70. return this.renderInspectable(inspectable);
  71. })
  72. }
  73. </LineContainerComponent>
  74. );
  75. }
  76. }