commonControlPropertyGridComponent.tsx 9.3 KB

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