Sidebar.Project.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import { UIPanel, UIRow, UIInput, UICheckbox, UIText, UIListbox, UISpan, UIButton } from './libs/ui.js';
  2. import { SidebarProjectRenderer } from './Sidebar.Project.Renderer.js';
  3. import { SetMaterialCommand } from './commands/SetMaterialCommand.js';
  4. function SidebarProject( editor ) {
  5. var config = editor.config;
  6. var signals = editor.signals;
  7. var strings = editor.strings;
  8. var container = new UISpan();
  9. var projectsettings = new UIPanel();
  10. projectsettings.setBorderTop( '0' );
  11. projectsettings.setPaddingTop( '20px' );
  12. container.add( projectsettings );
  13. // Title
  14. var titleRow = new UIRow();
  15. var title = new UIInput( config.getKey( 'project/title' ) ).setLeft( '100px' ).setWidth( '150px' ).onChange( function () {
  16. config.setKey( 'project/title', this.getValue() );
  17. } );
  18. titleRow.add( new UIText( strings.getKey( 'sidebar/project/title' ) ).setWidth( '90px' ) );
  19. titleRow.add( title );
  20. projectsettings.add( titleRow );
  21. // Editable
  22. var editableRow = new UIRow();
  23. var editable = new UICheckbox( config.getKey( 'project/editable' ) ).setLeft( '100px' ).onChange( function () {
  24. config.setKey( 'project/editable', this.getValue() );
  25. } );
  26. editableRow.add( new UIText( strings.getKey( 'sidebar/project/editable' ) ).setWidth( '90px' ) );
  27. editableRow.add( editable );
  28. projectsettings.add( editableRow );
  29. // WebVR
  30. var vrRow = new UIRow();
  31. var vr = new UICheckbox( config.getKey( 'project/vr' ) ).setLeft( '100px' ).onChange( function () {
  32. config.setKey( 'project/vr', this.getValue() );
  33. } );
  34. vrRow.add( new UIText( strings.getKey( 'sidebar/project/vr' ) ).setWidth( '90px' ) );
  35. vrRow.add( vr );
  36. projectsettings.add( vrRow );
  37. // Renderer
  38. container.add( new SidebarProjectRenderer( editor ) );
  39. // Materials
  40. var materials = new UIPanel();
  41. var headerRow = new UIRow();
  42. headerRow.add( new UIText( strings.getKey( 'sidebar/project/materials' ).toUpperCase() ) );
  43. materials.add( headerRow );
  44. var listbox = new UIListbox();
  45. materials.add( listbox );
  46. var buttonsRow = new UIRow();
  47. buttonsRow.setPadding( '10px 0px' );
  48. materials.add( buttonsRow );
  49. /*
  50. var addButton = new UI.Button().setLabel( 'Add' ).setMarginRight( '5px' );
  51. addButton.onClick( function () {
  52. editor.addMaterial( new THREE.MeshStandardMaterial() );
  53. } );
  54. buttonsRow.add( addButton );
  55. */
  56. var assignMaterial = new UIButton().setLabel( strings.getKey( 'sidebar/project/Assign' ) ).setMargin( '0px 5px' );
  57. assignMaterial.onClick( function () {
  58. var selectedObject = editor.selected;
  59. if ( selectedObject !== null ) {
  60. var oldMaterial = selectedObject.material;
  61. // only assing materials to objects with a material property (e.g. avoid assigning material to THREE.Group)
  62. if ( oldMaterial !== undefined ) {
  63. var material = editor.getMaterialById( parseInt( listbox.getValue() ) );
  64. if ( material !== undefined ) {
  65. editor.removeMaterial( oldMaterial );
  66. editor.execute( new SetMaterialCommand( editor, selectedObject, material ) );
  67. editor.addMaterial( material );
  68. }
  69. }
  70. }
  71. } );
  72. buttonsRow.add( assignMaterial );
  73. container.add( materials );
  74. // signals
  75. signals.objectSelected.add( function ( object ) {
  76. if ( object !== null ) {
  77. var index = Object.values( editor.materials ).indexOf( object.material );
  78. listbox.selectIndex( index );
  79. }
  80. } );
  81. signals.materialAdded.add( refreshMaterialBrowserUI );
  82. signals.materialChanged.add( refreshMaterialBrowserUI );
  83. signals.materialRemoved.add( refreshMaterialBrowserUI );
  84. function refreshMaterialBrowserUI() {
  85. listbox.setItems( Object.values( editor.materials ) );
  86. }
  87. return container;
  88. }
  89. export { SidebarProject };