commonControlPropertyGridComponent.tsx 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import * as React from "react";
  2. import { Observable } from "babylonjs/Misc/observable";
  3. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  4. import { LineContainerComponent } from "../../../lineContainerComponent";
  5. import { TextLineComponent } from "../../../lines/textLineComponent";
  6. import { Control } from "babylonjs-gui/2D/controls/control";
  7. import { Grid } from "babylonjs-gui/2D/controls/grid";
  8. import { SliderLineComponent } from "../../../lines/sliderLineComponent";
  9. import { FloatLineComponent } from "../../../lines/floatLineComponent";
  10. import { TextInputLineComponent } from "../../../lines/textInputLineComponent";
  11. import { LockObject } from "../lockObject";
  12. import { OptionsLineComponent } from "../../../lines/optionsLineComponent";
  13. import { GlobalState } from '../../../../globalState';
  14. interface ICommonControlPropertyGridComponentProps {
  15. globalState: GlobalState;
  16. control: Control;
  17. lockObject: LockObject;
  18. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  19. }
  20. export class CommonControlPropertyGridComponent extends React.Component<ICommonControlPropertyGridComponentProps> {
  21. constructor(props: ICommonControlPropertyGridComponentProps) {
  22. super(props);
  23. }
  24. renderGridInformation() {
  25. const control = this.props.control;
  26. if (!control.parent || !control.parent.parent) {
  27. return null;
  28. }
  29. const gridParent = control.parent.parent;
  30. if ((gridParent as any).rowCount === undefined) {
  31. return null;
  32. }
  33. const grid = gridParent as Grid;
  34. const cellInfos = grid.getChildCellInfo(control).split(":");
  35. return (
  36. <LineContainerComponent globalState={this.props.globalState} title="GRID">
  37. <TextLineComponent label={"Row"} value={cellInfos[0]} />
  38. <TextLineComponent label={"Column"} value={cellInfos[1]} />
  39. </LineContainerComponent>
  40. );
  41. }
  42. render() {
  43. const control = this.props.control;
  44. var horizontalOptions = [
  45. { label: "Left", value: Control.HORIZONTAL_ALIGNMENT_LEFT },
  46. { label: "Right", value: Control.HORIZONTAL_ALIGNMENT_RIGHT },
  47. { label: "Center", value: Control.HORIZONTAL_ALIGNMENT_CENTER },
  48. ];
  49. var verticalOptions = [
  50. { label: "Top", value: Control.VERTICAL_ALIGNMENT_TOP },
  51. { label: "Bottom", value: Control.VERTICAL_ALIGNMENT_BOTTOM },
  52. { label: "Center", value: Control.VERTICAL_ALIGNMENT_CENTER },
  53. ];
  54. return (
  55. <div>
  56. <LineContainerComponent globalState={this.props.globalState} title="GENERAL">
  57. <TextLineComponent label="Class" value={control.getClassName()} />
  58. <TextLineComponent label="Unique ID" value={control.uniqueId.toString()} />
  59. <SliderLineComponent label="Alpha" target={control} propertyName="alpha" minimum={0} maximum={1} step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  60. {
  61. (control as any).color !== undefined &&
  62. <TextInputLineComponent lockObject={this.props.lockObject} label="Color" target={control} propertyName="color" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  63. }
  64. {
  65. (control as any).background !== undefined &&
  66. <TextInputLineComponent lockObject={this.props.lockObject} label="Background" target={control} propertyName="background" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  67. }
  68. </LineContainerComponent>
  69. {
  70. this.renderGridInformation()
  71. }
  72. <LineContainerComponent globalState={this.props.globalState} title="ALIGNMENT">
  73. <OptionsLineComponent label="Horizontal" options={horizontalOptions} target={control} propertyName="horizontalAlignment" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  74. <OptionsLineComponent label="Vertical" options={verticalOptions} target={control} propertyName="verticalAlignment" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  75. </LineContainerComponent>
  76. <LineContainerComponent globalState={this.props.globalState} title="POSITION">
  77. <TextInputLineComponent lockObject={this.props.lockObject} label="Left" target={control} propertyName="left" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  78. <TextInputLineComponent lockObject={this.props.lockObject} label="Top" target={control} propertyName="top" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  79. <TextInputLineComponent lockObject={this.props.lockObject} label="Width" target={control} propertyName="width" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  80. <TextInputLineComponent lockObject={this.props.lockObject} label="Height" target={control} propertyName="height" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  81. <TextInputLineComponent lockObject={this.props.lockObject} label="Padding left" target={control} propertyName="paddingLeft" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  82. <TextInputLineComponent lockObject={this.props.lockObject} label="Padding top" target={control} propertyName="paddingTop" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  83. <TextInputLineComponent lockObject={this.props.lockObject} label="Padding right" target={control} propertyName="paddingRight" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  84. <TextInputLineComponent lockObject={this.props.lockObject} label="Padding bottom" target={control} propertyName="paddingBottom" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  85. </LineContainerComponent>
  86. <LineContainerComponent globalState={this.props.globalState} title="TRANSFORMATION" closed={true}>
  87. <FloatLineComponent lockObject={this.props.lockObject} label="ScaleX" target={control} propertyName="scaleX" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  88. <FloatLineComponent lockObject={this.props.lockObject} label="ScaleY" target={control} propertyName="scaleY" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  89. <SliderLineComponent label="Rotation" target={control} propertyName="rotation" minimum={0} maximum={2 * Math.PI} step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  90. <FloatLineComponent lockObject={this.props.lockObject} label="Transform center X" target={control} propertyName="transformCenterX" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  91. <FloatLineComponent lockObject={this.props.lockObject} label="Transform center Y" target={control} propertyName="transformCenterY" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  92. </LineContainerComponent>
  93. <LineContainerComponent globalState={this.props.globalState} title="FONT" closed={true}>
  94. <TextInputLineComponent lockObject={this.props.lockObject} label="Family" target={control} propertyName="fontFamily" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  95. <TextInputLineComponent lockObject={this.props.lockObject} label="Size" target={control} propertyName="fontSize" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  96. <TextInputLineComponent lockObject={this.props.lockObject} label="Weight" target={control} propertyName="fontWeight" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  97. <TextInputLineComponent lockObject={this.props.lockObject} label="Style" target={control} propertyName="fontStyle" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  98. </LineContainerComponent>
  99. <LineContainerComponent globalState={this.props.globalState} title="SHADOWS" closed={true}>
  100. <TextInputLineComponent lockObject={this.props.lockObject} label="Color" target={control} propertyName="shadowColor" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  101. <FloatLineComponent lockObject={this.props.lockObject} label="Offset X" target={control} propertyName="shadowOffsetX" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  102. <FloatLineComponent lockObject={this.props.lockObject} label="Offset Y" target={control} propertyName="shadowOffsetY" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  103. <FloatLineComponent lockObject={this.props.lockObject} label="Blur" target={control} propertyName="shadowBlur" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  104. </LineContainerComponent>
  105. </div>
  106. );
  107. }
  108. }