|
@@ -82,6 +82,7 @@ enum RefreshMode {
|
|
|
class SceneEditor {
|
|
|
|
|
|
public var tree : hide.comp.IconTree<PrefabElement>;
|
|
|
+ public var favTree : hide.comp.IconTree<PrefabElement>;
|
|
|
public var scene : hide.comp.Scene;
|
|
|
public var properties : hide.comp.PropsEditor;
|
|
|
public var context(default,null) : hxd.prefab.Context;
|
|
@@ -99,6 +100,7 @@ class SceneEditor {
|
|
|
var ide : hide.Ide;
|
|
|
public var event(default, null) : hxd.WaitEvent;
|
|
|
var hideList : Map<PrefabElement, Bool> = new Map();
|
|
|
+ var favorites : Array<PrefabElement> = [];
|
|
|
|
|
|
var undo(get, null):hide.ui.UndoHistory;
|
|
|
function get_undo() { return view.undo; }
|
|
@@ -121,6 +123,10 @@ class SceneEditor {
|
|
|
tree.async = false;
|
|
|
tree.autoOpenNodes = false;
|
|
|
|
|
|
+ favTree = new hide.comp.IconTree();
|
|
|
+ favTree.async = false;
|
|
|
+ favTree.autoOpenNodes = false;
|
|
|
+
|
|
|
var sceneEl = new Element('<div class="heaps-scene"></div>');
|
|
|
scene = new hide.comp.Scene(view.config, null, sceneEl);
|
|
|
scene.editor = this;
|
|
@@ -175,13 +181,23 @@ class SceneEditor {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- var list = @:privateAccess view.getDisplayState("hideList");
|
|
|
- if(list != null) {
|
|
|
- var m = [for(i in (list:Array<Dynamic>)) i => true];
|
|
|
+ // Load display state
|
|
|
+ {
|
|
|
var all = sceneData.flatten(hxd.prefab.Prefab);
|
|
|
- for(p in all) {
|
|
|
- if(m.exists(p.getAbsPath()))
|
|
|
- hideList.set(p, true);
|
|
|
+ var list = @:privateAccess view.getDisplayState("hideList");
|
|
|
+ if(list != null) {
|
|
|
+ var m = [for(i in (list:Array<Dynamic>)) i => true];
|
|
|
+ for(p in all) {
|
|
|
+ if(m.exists(p.getAbsPath()))
|
|
|
+ hideList.set(p, true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var favList = @:privateAccess view.getDisplayState("favorites");
|
|
|
+ if(favList != null) {
|
|
|
+ for(p in all) {
|
|
|
+ if(favList.indexOf(p.getAbsPath()) >= 0)
|
|
|
+ favorites.push(p);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -255,22 +271,39 @@ class SceneEditor {
|
|
|
|
|
|
// BUILD scene tree
|
|
|
|
|
|
- function makeItem(o:PrefabElement) : hide.comp.IconTree.IconTreeItem<PrefabElement> {
|
|
|
+ function makeItem(o:PrefabElement, ?state) : hide.comp.IconTree.IconTreeItem<PrefabElement> {
|
|
|
var p = o.getHideProps();
|
|
|
var r : hide.comp.IconTree.IconTreeItem<PrefabElement> = {
|
|
|
value : o,
|
|
|
text : o.name,
|
|
|
icon : "fa fa-"+p.icon,
|
|
|
- children : o.children.length > 0
|
|
|
+ children : o.children.length > 0,
|
|
|
+ state: state
|
|
|
};
|
|
|
return r;
|
|
|
}
|
|
|
+ favTree.get = function (o:PrefabElement) {
|
|
|
+ if(o == null) {
|
|
|
+ return [for(f in favorites) makeItem(f, {
|
|
|
+ disabled: true
|
|
|
+ })];
|
|
|
+ }
|
|
|
+ return [];
|
|
|
+ }
|
|
|
+ favTree.allowRename = false;
|
|
|
+ favTree.init();
|
|
|
+ favTree.onAllowMove = function(_, _) {
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+ favTree.onClick = function(e) {
|
|
|
+ selectObjects([e], true);
|
|
|
+ }
|
|
|
tree.get = function(o:PrefabElement) {
|
|
|
var objs = o == null ? sceneData.children : Lambda.array(o);
|
|
|
var out = [for( o in objs ) makeItem(o)];
|
|
|
return out;
|
|
|
};
|
|
|
- tree.element.parent().contextmenu(function(e) {
|
|
|
+ function ctxMenu(tree, e) {
|
|
|
e.preventDefault();
|
|
|
var current = tree.getCurrentOver();
|
|
|
if(current != null && (curEdit == null || curEdit.elements.indexOf(current) < 0)) {
|
|
@@ -282,6 +315,7 @@ class SceneEditor {
|
|
|
{ label : "New...", menu : newItems },
|
|
|
];
|
|
|
var actionItems : Array<hide.comp.ContextMenu.ContextMenuItem> = [
|
|
|
+ { label : "Favorite", checked : current != null && isFavorite(current), click : function() setFavorite(current, !isFavorite(current)) },
|
|
|
{ label : "Rename", enabled : current != null, click : function() tree.editNode(current) },
|
|
|
{ label : "Delete", enabled : current != null, click : function() deleteElements(curEdit.rootElements) },
|
|
|
{ label : "Duplicate", enabled : current != null, click : duplicate.bind(false) },
|
|
@@ -307,7 +341,9 @@ class SceneEditor {
|
|
|
|
|
|
menuItems.push({ isSeparator : true, label : "" });
|
|
|
new hide.comp.ContextMenu(menuItems.concat(actionItems));
|
|
|
- });
|
|
|
+ };
|
|
|
+ tree.element.parent().contextmenu(ctxMenu.bind(tree));
|
|
|
+ favTree.element.parent().contextmenu(ctxMenu.bind(favTree));
|
|
|
tree.allowRename = true;
|
|
|
tree.init();
|
|
|
tree.onClick = function(e) {
|
|
@@ -353,6 +389,7 @@ class SceneEditor {
|
|
|
|
|
|
public function refresh( ?mode: RefreshMode, ?callb: Void->Void) {
|
|
|
if(mode == null || mode == Full) refreshScene();
|
|
|
+ refreshFavs();
|
|
|
refreshTree(callb);
|
|
|
}
|
|
|
|
|
@@ -368,6 +405,10 @@ class SceneEditor {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ function refreshFavs() {
|
|
|
+ favTree.refresh();
|
|
|
+ }
|
|
|
+
|
|
|
function refreshProps() {
|
|
|
selectObjects(curEdit.elements, false);
|
|
|
}
|
|
@@ -746,6 +787,7 @@ class SceneEditor {
|
|
|
public function applyTreeStyle(p: PrefabElement, el: Element) {
|
|
|
var obj3d = p.to(Object3D);
|
|
|
el.toggleClass("disabled", !p.enabled);
|
|
|
+ el.find("a").first().toggleClass("favorite", isFavorite(p));
|
|
|
|
|
|
if(obj3d != null) {
|
|
|
el.toggleClass("hidden", isHidden(obj3d));
|
|
@@ -1172,9 +1214,29 @@ class SceneEditor {
|
|
|
return hideList.exists(e);
|
|
|
}
|
|
|
|
|
|
- function saveHideState() {
|
|
|
+ function saveDisplayState() {
|
|
|
var state = [for (h in hideList.keys()) h.getAbsPath()];
|
|
|
@:privateAccess view.saveDisplayState("hideList", state);
|
|
|
+ var state = [for(f in favorites) f.getAbsPath()];
|
|
|
+ @:privateAccess view.saveDisplayState("favorites", state);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function isFavorite(e: PrefabElement) {
|
|
|
+ return favorites.indexOf(e) >= 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function setFavorite(e: PrefabElement, fav: Bool) {
|
|
|
+ if(fav && !isFavorite(e))
|
|
|
+ favorites.push(e);
|
|
|
+ else if(!fav && isFavorite(e))
|
|
|
+ favorites.remove(e);
|
|
|
+
|
|
|
+ var el = tree.getElement(e);
|
|
|
+ if(el != null)
|
|
|
+ applyTreeStyle(e, el);
|
|
|
+
|
|
|
+ refreshFavs();
|
|
|
+ saveDisplayState();
|
|
|
}
|
|
|
|
|
|
public function setVisible(elements : Array<PrefabElement>, visible: Bool) {
|
|
@@ -1194,7 +1256,7 @@ class SceneEditor {
|
|
|
applySceneStyle(o);
|
|
|
}
|
|
|
}
|
|
|
- saveHideState();
|
|
|
+ saveDisplayState();
|
|
|
}
|
|
|
|
|
|
function isolate(elts : Array<PrefabElement>) {
|