commonControlPropertyGridComponent.tsx 9.6 KB

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