Преглед на файлове

Filters in toolbar and reorder

Jed преди 4 години
родител
ревизия
c19a8d910a
променени са 2 файла, в които са добавени 27 реда и са изтрити 28 реда
  1. 9 5
      hide/comp/Toolbar.hx
  2. 18 23
      hide/view/l3d/Level3D.hx

+ 9 - 5
hide/comp/Toolbar.hx

@@ -4,18 +4,19 @@ enum ToolType {
 	Toggle;
 	Range;
 	Color;
+	Menu;
 }
 class ToolsObject {
 	static public var level3D : hide.view.l3d.Level3D;
 	static var texContent : Element = null;
-	static public var tools : Map<String, {title : String, ?icon : String, type : ToolType, ?iconTransform : String, ?rightClick : Void -> Void, ?buttonFunction : Void -> Void, ?toggleFunction : Bool -> Void, ?rangeFunction : Float -> Void, ?colorFunction : Int -> Void}> = [
+	static public var tools : Map<String, {title : String, ?icon : String, type : ToolType, ?iconTransform : String, ?rightClick : Void -> Void, ?buttonFunction : Void -> Void, ?toggleFunction : Bool -> Void, ?rangeFunction : Float -> Void, ?colorFunction : Int -> Void, ?menuItems : () -> Array<hide.comp.ContextMenu.ContextMenuItem>}> = [
 		"perspectiveCamera" => {title : "Perspective camera", icon : "video-camera", type : Button, buttonFunction : () -> @:privateAccess level3D.resetCamera(false)},
 		"topCamera" => {title : "Top camera", icon : "video-camera", type : Button, iconTransform : "rotateZ(90deg)", buttonFunction : () -> @:privateAccess level3D.resetCamera(true)},
 		"snapToGroundToggle" => {title : "Snap to ground", icon : "anchor", type : Toggle, toggleFunction : (v) -> level3D.sceneEditor.snapToGround = v},
 		"localTransformsToggle"=> {title : "Local transforms", icon : "compass", type : Toggle, toggleFunction : (v) -> level3D.sceneEditor.localTransform = v},
 		"gridToggle" => {title : "Toggle grid", icon : "th", type : Toggle, toggleFunction : (v) -> { @:privateAccess level3D.showGrid = v; @:privateAccess level3D.updateGrid(); }},
 		"bakeLights" => {title : "Bake lights", icon : "lightbulb-o", type : Button, buttonFunction : () -> @:privateAccess level3D.bakeLights()},
-		"sceneeditor.sceneInformationToggle" => {title : "Scene information", icon : "info-circle", type : Toggle, toggleFunction : (b) -> @:privateAccess level3D.statusText.visible = b, rightClick : () -> {
+		"sceneInformationToggle" => {title : "Scene information", icon : "info-circle", type : Toggle, toggleFunction : (b) -> @:privateAccess level3D.statusText.visible = b, rightClick : () -> {
 			if( texContent != null ) {
 				texContent.remove();
 				texContent = null;
@@ -44,11 +45,14 @@ class ToolsObject {
 				}
 			]);
 		}},
-		"sceneeditor.autoSyncToggle" => {title : "Auto synchronize", icon : "refresh", type : Toggle, toggleFunction : (b) -> @:privateAccess level3D.autoSync = b},
-		"sceneeditor.backgroundColor" => {title : "Background Color", type : Color, colorFunction :  function(v) {
+		"autoSyncToggle" => {title : "Auto synchronize", icon : "refresh", type : Toggle, toggleFunction : (b) -> @:privateAccess level3D.autoSync = b},
+		"graphicsFilters" => {title : "Graphics filters", type : Menu, menuItems : () -> @:privateAccess level3D.filtersToMenuItem(level3D.graphicsFilters, "Graphics")},
+		"sceneFilters" => {title : "Scene filters", type : Menu, menuItems : () -> @:privateAccess level3D.filtersToMenuItem(level3D.sceneFilters, "Scene")},
+		"backgroundColor" => {title : "Background Color", type : Color, colorFunction :  function(v) {
 			@:privateAccess level3D.scene.engine.backgroundColor = v;
 			@:privateAccess level3D.updateGrid();}},
-		"sceneeditor.sceneSpeed" => {title : "Speed", type : Range, rangeFunction : function(v) @:privateAccess level3D.scene.speed = v}
+		"sceneSpeed" => {title : "Speed", type : Range, rangeFunction : function(v) @:privateAccess level3D.scene.speed = v},
+		
 	];
 }
 typedef ToolToggle = {

+ 18 - 23
hide/view/l3d/Level3D.hx

@@ -432,7 +432,9 @@ class Level3D extends FileView {
 						tools.addColor(tool.title, tool.colorFunction);
 					case Range:
 						tools.addRange(tool.title, tool.rangeFunction, 1.);
-
+					case Menu:
+						var menu = tools.addMenu(tool.icon, tool.title);
+						menu.setContent(tool.menuItems());
 				}
 			}
 		}
@@ -647,21 +649,6 @@ class Level3D extends FileView {
 		for(f in filters) {
 			sceneFilters.set(f, getDisplayState("sceneFilters/" + f) != false);
 		}
-
-		var sceneFiltersMenu = layerToolbar.addMenu("", "Scene filters");
-		var content : Array<hide.comp.ContextMenu.ContextMenuItem> = [];
-		var initDone = false;
-		for(typeid in sceneFilters.keys()) {
-			content.push({label : typeid, checked : sceneFilters[typeid], click : function() {
-				var on = !sceneFilters[typeid];
-				sceneFilters.set(typeid, on);
-				if(initDone)
-					applySceneFilter(typeid, on);
-				content.find(function(item) return item.label == typeid).checked = on;
-			}});
-		}
-		sceneFiltersMenu.setContent(content);
-		initDone = true;
 	}
 
 	function initGraphicsFilters() {
@@ -678,20 +665,28 @@ class Level3D extends FileView {
 		for(f in filters) {
 			graphicsFilters.set(f, getDisplayState("graphicsFilters/" + f) != false);
 		}
-		var graphicsFiltersMenu = layerToolbar.addMenu("", "Graphics filters");
+	}
+
+	function filtersToMenuItem(filters : Map<String, Bool>, type : String) : Array<hide.comp.ContextMenu.ContextMenuItem> {
 		var content : Array<hide.comp.ContextMenu.ContextMenuItem> = [];
 		var initDone = false;
-		for(typeid in graphicsFilters.keys()) {
-			content.push({label : typeid, checked : graphicsFilters[typeid], click : function() {
-				var on = !graphicsFilters[typeid];
-				graphicsFilters.set(typeid, on);
+		for(typeid in filters.keys()) {
+			content.push({label : typeid, checked : filters[typeid], click : function() {
+				var on = !filters[typeid];
+				filters.set(typeid, on);
 				if(initDone)
-					applyGraphicsFilters(typeid, on);
+					switch (type){
+						case "Graphics":
+							applyGraphicsFilters(typeid, on);
+						case "Scene":
+							applySceneFilter(typeid, on);
+					}
+					
 				content.find(function(item) return item.label == typeid).checked = on;
 			}});
 		}
-		graphicsFiltersMenu.setContent(content);
 		initDone = true;
+		return content;
 	}
 
 	function applyTreeStyle(p: PrefabElement, el: Element, pname: String) {