Sidebar.Outliner.Geometries.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. Sidebar.Outliner.Geometries = function ( signals ) {
  2. var container = new UI.Panel();
  3. container.name = "GEO";
  4. container.setPadding( '10px' );
  5. var outliner = new UI.FancySelect().setWidth( '100%' ).setHeight('170px').setColor( '#444' ).setFontSize( '12px' ).onChange( selectFromOutliner );
  6. container.add( outliner );
  7. var geometries = null;
  8. function getGeometries() {
  9. var options = {};
  10. for ( var i in editor.geometries ) {
  11. var geometry = editor.geometries[ i ];
  12. if ( geometry.name == '') geometry.name = 'Geometry' + geometry.id;
  13. options[ i ] = geometry.name;
  14. }
  15. outliner.setOptions( options );
  16. getSelected();
  17. }
  18. function getSelected() {
  19. var selectedUuids = [];
  20. for ( var uuid in editor.selected ) {
  21. if ( editor.geometries[uuid] ) selectedUuids.push(uuid);
  22. }
  23. // TODO: implement multiple selection
  24. outliner.setValue( selectedUuids.length ? selectedUuids[0] : null );
  25. }
  26. function selectFromOutliner() {
  27. var uuid = outliner.getValue();
  28. editor.select( editor.geometries[uuid] );
  29. }
  30. // events
  31. var timeout;
  32. signals.sceneChanged.add( function () {
  33. clearTimeout( timeout );
  34. timeout = setTimeout( function () {
  35. getGeometries();
  36. }, 100 );
  37. } );
  38. signals.selected.add( getSelected );
  39. return container;
  40. }