package hide.comp; import hrt.prefab.Props; class PropsEditor extends Component { public var undo : hide.ui.UndoHistory; public var lastChange : Float = 0.; public var fields(default, null) : Array; public var isTempChange = false; public function new(?undo,?parent,?el) { super(parent,el); element.addClass("hide-properties"); this.undo = undo == null ? new hide.ui.UndoHistory() : undo; fields = []; } public function clear() { element.empty(); fields = []; } public function onDragDrop( items : Array, isDrop : Bool ) : Bool { if( items.length == 0 ) return false; var pickedEl = js.Browser.document.elementFromPoint(ide.mouseX, ide.mouseY); var rootEl = element[0]; while( pickedEl != null ) { if( pickedEl == rootEl ) return false; for( field in fields ) { if( field.tselect != null && field.tselect.element[0] == pickedEl ) return field.tselect.onDragDrop(items, isDrop); if( field.fselect != null && field.fselect.element[0] == pickedEl ) return field.fselect.onDragDrop(items, isDrop); } pickedEl = pickedEl.parentElement; } return false; } public function addMaterial( m : h3d.mat.Material, ?parent : Element, ?onChange ) { var def = m.editProps(); def = add(def, m.props, function(name) { m.refreshProps(); if( !isTempChange ) { def.remove(); addMaterial(m, parent, onChange); if( onChange != null ) onChange(name); } }); if( parent != null && parent.length != 0 ) def.appendTo(parent); } public static function makePropEl(p: PropDef, parent: Element) { switch( p.t ) { case PInt(min, max): var e = new Element('').appendTo(parent); if( min != null ) e.attr("min", "" + min); if(p.def != null) e.attr("value", "" + p.def); e.attr("max", "" + (max == null ? 100 : max)); case PFloat(min, max): var e = new Element('').appendTo(parent); if(p.def != null) e.attr("value", "" + p.def); if( min != null ) e.attr("min", "" + min); if( max != null ) e.attr("max", "" + max); case PBool: new Element('').appendTo(parent); case PTexture: new Element('').appendTo(parent); case PUnsupported(text): new Element('' + StringTools.htmlEscape(text) + '').appendTo(parent); case PVec(n, min, max): var isColor = p.name.toLowerCase().indexOf("color") >= 0; if(isColor && (n == 3 || n == 4)) { new Element('').appendTo(parent); } else { var row = new Element('
').appendTo(parent); for( i in 0...n ) { var e = new Element('').appendTo(row); if(min == null) min = isColor ? 0.0 : -1.0; if(max == null) max = 1.0; e.attr("min", "" + min); e.attr("max", "" + max); } } case PChoice(choices): var e = new Element('').appendTo(parent); for(c in choices) new hide.Element('