Browse Source

Merge pull request #13 from D0pu/master

ModelViewer : Add visibility toggles in hierarchy
trethaller 6 years ago
parent
commit
cd715ad4a2
5 changed files with 62 additions and 8 deletions
  1. 17 4
      bin/style.css
  2. 10 2
      bin/style.less
  3. 7 1
      hide/comp/IconTree.hx
  4. 17 0
      hide/comp/SceneTree.hx
  5. 11 1
      hide/view/Model.hx

+ 17 - 4
bin/style.css

@@ -675,9 +675,13 @@ input[type=checkbox]:checked:after {
 .fx-scriptParams .slider {
   margin: 10px;
 }
-.fx-scriptParams .checkBox {
+.fx-scriptParams .checkbox {
   margin: 10px;
 }
+.fx-scriptParams input[type=checkbox] {
+  display: inline-block;
+  float: none;
+}
 .fx-animpanel {
   position: relative;
 }
@@ -1057,16 +1061,25 @@ body.hide-subview .lm_controls {
 .jstree-icon i {
   color: #aaa;
 }
-.visibility-toggle {
+.jstree-node {
+  padding-right: 10px!important;
+}
+.visibility-toggle,
+.visibility-large-toggle {
   float: right;
   padding: 4px;
 }
-.visibility-toggle:hover {
+.visibility-toggle:hover,
+.visibility-large-toggle:hover {
   color: white;
 }
-.visibility-toggle .hidden i {
+.visibility-toggle .hidden i,
+.visibility-large-toggle .hidden i {
   color: #555;
 }
+.visibility-large-toggle {
+  font-size: 14px!important;
+}
 .jstree.small a {
   font-size: 12px;
 }

+ 10 - 2
bin/style.less

@@ -1168,7 +1168,11 @@ body.hide-subview {
 	}
 }
 
-.visibility-toggle {
+.jstree-node {
+	padding-right: 10px!important;
+}
+
+.visibility-toggle, .visibility-large-toggle {
 	float: right;
 	padding: 4px;
 
@@ -1177,12 +1181,16 @@ body.hide-subview {
 	}
 }
 
-.visibility-toggle .hidden {
+.visibility-toggle .hidden, .visibility-large-toggle .hidden {
 	i {
 		color: #555;
 	}
 }
 
+.visibility-large-toggle {
+	font-size: 14px!important;
+}
+
 .jstree.small {
 	@size: 18px;
 

+ 7 - 1
hide/comp/IconTree.hx

@@ -155,6 +155,12 @@ class IconTree<T:{}> extends Component {
 		element.on("move_node.jstree", function(event, e) {
 			onMove(map.get(e.node.id).value, e.parent == "#" ? null : map.get(e.parent).value, e.position);
 		});
+		element.on('ready.jstree', function () {
+			var lis = element.find("li");
+			for(li in lis) {
+				applyStyle(map.get(li.id).value, new Element(li));
+			}
+		});
 		element.on('changed.jstree', function (e, data) {
 			var nodes: Array<Dynamic> = data.changed.deselected;
 			for(id in nodes) {
@@ -168,7 +174,7 @@ class IconTree<T:{}> extends Component {
 			var el = getElement(item);
 			applyStyle(item, el);
 		});
-		element.on("before_open.jstree", function(event, data) {
+		element.on("after_open.jstree", function(event, data) {
 			var lis = new Element(event.target).find("li");
 			for(li in lis) {
 				applyStyle(map.get(li.id).value, new Element(li));

+ 17 - 0
hide/comp/SceneTree.hx

@@ -46,6 +46,23 @@ class SceneTree extends IconTree<String> {
 	public dynamic function onSelectMaterial( m : h3d.mat.Material ) {
 	}
 
+	override function applyStyle(id: String, el: Element) {
+		var v : Dynamic = resolvePath(id);
+		
+		var obj = Std.instance(v, h3d.scene.Object);
+
+		if (obj != null) {
+			if (el.find(".fa-eye").length == 0) {
+				var visibilityToggle = new Element('<i class="fa fa-eye visibility-large-toggle"/>').appendTo(el.find(".jstree-wholerow").first());
+				visibilityToggle.click(function (e) {
+					obj.visible = !obj.visible;
+					el.toggleClass("hidden", !obj.visible);
+				});
+			}
+			el.toggleClass("hidden", !obj.visible);
+		}
+	}
+
 	function getIcon( c : h3d.scene.Object ) {
 		if( c.isMesh() ) {
 			if( Std.is(c, h3d.scene.Skin) )

+ 11 - 1
hide/view/Model.hx

@@ -228,7 +228,6 @@ class Model extends FileView {
 					<dt>X</dt><dd><input field="x"/></dd>
 					<dt>Y</dt><dd><input field="y"/></dd>
 					<dt>Z</dt><dd><input field="z"/></dd>
-					<dt>Visible</dt><dd><input type="checkbox" field="visible"/></dd>
 					<dt>Attach</dt><dd><select class="follow"><option value="">--- None ---</option></select></dd>
 				</dl>
 			</div>
@@ -309,6 +308,17 @@ class Model extends FileView {
 		obj = scene.loadModel(state.path, true);
 		new h3d.scene.Object(scene.s3d).addChild(obj);
 
+		var autoHide : Array<String> = config.get("scene.autoHide");
+		
+		function hidePropsRec( obj : h3d.scene.Object ) {
+			for(n in autoHide)
+				if(obj.name != null && obj.name.indexOf(n) == 0)
+					obj.visible = false;
+			for( o in obj )
+				hidePropsRec(o);
+		}
+		hidePropsRec(obj);
+
 		if( tree != null ) tree.remove();
 		tree = new hide.comp.SceneTree(obj, overlay, obj.name != null);
 		tree.onSelectMaterial = selectMaterial;