Browse Source

Multiselect WIP

Josh Engebretson 10 years ago
parent
commit
3e78d80f23

+ 7 - 1
Script/AtomicEditor/editor/EditorEvents.ts

@@ -31,7 +31,6 @@ export interface ActiveSceneEditorChangeEvent {
 }
 
 
-export const ActiveNodeChange = "EditorActiveNodeChange";
 export const SceneClosed = "EditorSceneClosed";
 export interface SceneClosedEvent {
 
@@ -82,3 +81,10 @@ export interface EditResourceEvent {
   path: string;
 
 }
+
+export const SceneEditStateChange = "SceneEditStateChange";
+export interface SceneEditStateChangeEvent {
+
+  serializable: Atomic.Serializable;
+
+}

+ 9 - 4
Script/AtomicEditor/ui/frames/inspector/ComponentInspector.ts

@@ -212,8 +212,7 @@ class ComponentInspector extends Atomic.UISection {
             var node = this.component.node;
             this.component.remove();
 
-            // refresh entire inspector, fix this...
-            this.sendEvent("EditorActiveNodeChange", { node: node });
+            this.visibility = Atomic.UI_WIDGET_VISIBILITY_GONE;
 
             return true;
 
@@ -296,13 +295,19 @@ class ComponentInspector extends Atomic.UISection {
 
     }
 
-    handleSceneEditStateChangeEvent(ev) {
+    updateWidgetValues() {
 
       for (var i in this.bindings) {
           this.bindings[i].objectLocked = true;
           this.bindings[i].setWidgetValueFromObject();
           this.bindings[i].objectLocked = false;
-      }
+      }      
+
+    }
+
+    handleSceneEditStateChangeEvent(ev) {
+
+      this.updateWidgetValues();
 
     }
 

+ 3 - 0
Script/AtomicEditor/ui/frames/inspector/DataBinding.ts

@@ -275,6 +275,8 @@ class DataBinding {
 
         this.widgetLocked = true;
 
+        Atomic.ui.blockChangedEvents = true;
+
         var attrInfo = this.attrInfo;
         var object = this.object;
         var widget = this.widget;
@@ -364,6 +366,7 @@ class DataBinding {
 
         }
 
+        Atomic.ui.blockChangedEvents = false;
         this.widgetLocked = false;
 
     }

+ 0 - 2
Script/AtomicEditor/ui/frames/inspector/InspectorFrame.ts

@@ -114,8 +114,6 @@ class InspectorFrame extends ScriptWidget {
 
     inspectAsset(asset: ToolCore.Asset) {
 
-        this.sendEvent(EditorEvents.ActiveNodeChange, { node: null });
-
         var container = this.getWidget("inspectorcontainer");
         container.deleteAllChildren();
 

+ 23 - 5
Script/AtomicEditor/ui/frames/inspector/NodeInspector.ts

@@ -9,6 +9,7 @@ import ScriptWidget = require("ui/ScriptWidget");
 import ComponentInspector = require("./ComponentInspector");
 import DataBinding = require("./DataBinding");
 import CreateComponentButton = require("./CreateComponentButton");
+import EditorEvents = require("editor/EditorEvents");
 
 interface ComponentState {
 
@@ -242,8 +243,6 @@ class NodeInspector extends ScriptWidget {
 
                     prefabComponent.savePrefab();
 
-                    this.sendEvent("EditorActiveNodeChange", { node: this.node });
-
                     return true;
 
                 }
@@ -262,7 +261,8 @@ class NodeInspector extends ScriptWidget {
 
                     prefabComponent.undoPrefab();
 
-                    this.sendEvent("EditorActiveNodeChange", { node: this.node });
+                    // our components are now recreated
+                    // need to handle this
 
                     return true;
 
@@ -282,7 +282,7 @@ class NodeInspector extends ScriptWidget {
 
                     prefabComponent.breakPrefab();
 
-                    this.sendEvent("EditorActiveNodeChange", { node: this.node });
+                    prefabLayout.visibility = Atomic.UI_WIDGET_VISIBILITY_GONE;
 
                     return true;
 
@@ -312,6 +312,7 @@ class NodeInspector extends ScriptWidget {
             //  continue;
 
             var ci = new ComponentInspector();
+            this.componentInspectors.push(ci);
             ci.id = "component_section_" + component.id;
 
             ci.inspect(component);
@@ -335,7 +336,7 @@ class NodeInspector extends ScriptWidget {
 
     }
 
-    handleSceneEditStateChangeEvent(ev) {
+    updateWidgetValues(components: boolean = false) {
 
         for (var i in this.bindings) {
             this.bindings[i].objectLocked = true;
@@ -343,6 +344,22 @@ class NodeInspector extends ScriptWidget {
             this.bindings[i].objectLocked = false;
         }
 
+        if (components) {
+
+            for (var i in this.componentInspectors) {
+
+                this.componentInspectors[i].updateWidgetValues();
+
+            }
+
+        }
+
+    }
+
+    handleSceneEditStateChangeEvent(ev) {
+
+        this.updateWidgetValues();
+
     }
 
     saveState() {
@@ -442,6 +459,7 @@ class NodeInspector extends ScriptWidget {
     bindings: Array<DataBinding>;
     gizmoMoved = false;
     updateDelta = 0;
+    componentInspectors: Array<ComponentInspector> = [];
 
     static nodeStates: { [sceneID: number]: { [nodeId: number]: NodeState } } = {};
 

+ 0 - 9
Script/AtomicEditor/ui/frames/menus/HierarchyFrameMenu.ts

@@ -38,8 +38,6 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
                 if (node) {
 
                     child = node.createChild("Node");
-                    node.scene.sendEvent("SceneEditNodeAddedRemoved", { scene:node.scene, node:node, added:true});
-
                 }
 
             }
@@ -55,12 +53,6 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
 
             }
 
-            if (child) {
-
-                this.sendEvent(EditorEvents.ActiveNodeChange, { node: child });
-
-            }
-
             return true;
 
         }
@@ -87,7 +79,6 @@ class HierarchyFrameMenus extends Atomic.ScriptObject {
             } else if (refid == "duplicate_node") {
 
                 var newnode = node.clone();
-                this.sendEvent(EditorEvents.ActiveNodeChange, { node: newnode });
 
             }
 

+ 2 - 1
Source/Atomic/UI/UI.cpp

@@ -111,7 +111,8 @@ UI::UI(Context* context) :
     initialized_(false),
     skinLoaded_(false),
     consoleVisible_(false),
-    exitRequested_(false)
+    exitRequested_(false),
+    changedEventsBlocked_(false)
 {
 
     SubscribeToEvent(E_EXITREQUESTED, HANDLER(UI, HandleExitRequested));

+ 4 - 0
Source/Atomic/UI/UI.h

@@ -105,6 +105,9 @@ public:
 
     UIWidget* GetWidgetAt(int x, int y, bool include_children);
 
+    bool GetBlockChangedEvents() const { return changedEventsBlocked_; }
+    void SetBlockChangedEvents(bool blocked) { changedEventsBlocked_ = blocked; }
+
 private:
 
     static WeakPtr<Context> uiContext_;
@@ -138,6 +141,7 @@ private:
     HashMap<tb::TBWidget*, SharedPtr<UIWidget> > widgetWrap_;
     HashMap<unsigned, String> tbidToString_;
 
+    bool changedEventsBlocked_;
     bool inputDisabled_;
     bool keyboardDisabled_;
     bool initialized_;

+ 41 - 4
Source/Atomic/UI/UIListView.cpp

@@ -24,6 +24,7 @@
 #include <TurboBadger/tb_select.h>
 
 #include <Atomic/IO/Log.h>
+#include <Atomic/Core/Timer.h>
 
 #include "UI.h"
 #include "UIEvents.h"
@@ -400,7 +401,7 @@ static int select_list_sort_cb(TBSelectItemSource *_source, const int *a, const
 
 UIListView::UIListView(Context* context, bool createWidget) :
     UIWidget(context, createWidget),
-    source_(0), itemLookupId_(0), multiSelect_(false)
+    source_(0), itemLookupId_(0), multiSelect_(false), moveDelta_(0.0f)
 {
     rootList_ = new UISelectList(context);
     rootList_->SetUIListView(true);
@@ -673,6 +674,9 @@ void UIListView::SetValueFirstSelected()
 void UIListView::SelectSingleItem(ListViewItem* item, bool expand)
 {
 
+    if (!item)
+        return;
+
     bool dirty = !item->GetSelected();
 
     if (!dirty)
@@ -719,6 +723,18 @@ void UIListView::SelectSingleItem(ListViewItem* item, bool expand)
 
 void UIListView::Move(tb::SPECIAL_KEY key)
 {
+    const float delta = 0.015f;
+    if (moveDelta_)
+    {
+        Time* time = GetSubsystem<Time>();
+        moveDelta_ -= time->GetTimeStep();
+        if (moveDelta_ < 0.0f)
+            moveDelta_ = 0.0f;
+    }
+
+    if (moveDelta_ > 0.0f)
+        return;
+
     // selected index
     int index = -1;
 
@@ -743,10 +759,17 @@ void UIListView::Move(tb::SPECIAL_KEY key)
         {
             item->SetExpanded(false);
             UpdateItemVisibility();
+            moveDelta_ = delta;
+            return;
         }
         else
         {
-            key = TB_KEY_UP;
+            if (!item->parent_)
+                return;
+
+            SelectSingleItem(item->parent_, false);
+            moveDelta_ = delta;
+            return;
         }
     }
 
@@ -757,10 +780,18 @@ void UIListView::Move(tb::SPECIAL_KEY key)
         {
             item->SetExpanded(true);
             UpdateItemVisibility();
+            moveDelta_ = delta;
+            return;
         }
         else
         {
-            key = TB_KEY_DOWN;
+            if (!item->children_.Size())
+                return;
+
+            SelectSingleItem(source_->GetItem(index + 1), false);
+            moveDelta_ = delta;
+            return;
+
         }
     }
 
@@ -777,6 +808,7 @@ void UIListView::Move(tb::SPECIAL_KEY key)
             if (item->widget_ && item->widget_->GetVisibility() == WIDGET_VISIBILITY_VISIBLE)
             {
                 SelectSingleItem(item, false);
+                moveDelta_ = delta;
                 return;
             }
 
@@ -796,6 +828,7 @@ void UIListView::Move(tb::SPECIAL_KEY key)
             if (item->widget_ && item->widget_->GetVisibility() == WIDGET_VISIBILITY_VISIBLE)
             {
                 SelectSingleItem(item, false);
+                moveDelta_ = delta;
                 return;
             }
 
@@ -822,8 +855,12 @@ void UIListView::SendItemSelectedChanged(ListViewItem* item)
 
 bool UIListView::OnEvent(const tb::TBWidgetEvent &ev)
 {
-
     if (ev.type == EVENT_TYPE_KEY_UP )
+    {
+        moveDelta_ = 0.0f;
+    }
+
+    if (ev.type == EVENT_TYPE_KEY_DOWN )
     {
         if (ev.special_key == TB_KEY_DOWN || ev.special_key == TB_KEY_UP || ev.special_key == TB_KEY_LEFT || ev.special_key == TB_KEY_RIGHT)
         {

+ 2 - 0
Source/Atomic/UI/UIListView.h

@@ -87,6 +87,8 @@ private:
 
     bool multiSelect_;
 
+    float moveDelta_;
+
     SharedPtr<UISelectList> rootList_;
     ListViewItemSource* source_;
 

+ 1 - 1
Source/Atomic/UI/UIWidget.cpp

@@ -654,7 +654,7 @@ bool UIWidget::OnEvent(const tb::TBWidgetEvent &ev)
 {
     UI* ui = GetSubsystem<UI>();
 
-    if (ev.type == EVENT_TYPE_CHANGED || ev.type == EVENT_TYPE_KEY_UP)
+    if ((ev.type == EVENT_TYPE_CHANGED && !ui->GetBlockChangedEvents()) || ev.type == EVENT_TYPE_KEY_UP)
     {
         if (!ev.target || ui->IsWidgetWrapped(ev.target))
         {

+ 0 - 5
Source/AtomicEditor/EditorMode/AEEditorEvents.h

@@ -100,11 +100,6 @@ EVENT(E_EDITORACTIVESCENEEDITORCHANGE, EditorActiveSceneEditorChange)
 }
 
 
-EVENT(E_EDITORACTIVENODECHANGE, EditorActiveNodeChange)
-{
-    PARAM(P_NODE, Node);      // Node*
-}
-
 EVENT(E_PLAYERERROR, PlayerError)
 {
     PARAM(P_TEXT, Text);      // string

+ 0 - 40
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.cpp

@@ -98,7 +98,6 @@ SceneEditor3D ::SceneEditor3D(Context* context, const String &fullpath, UITabCon
     UpdateGizmoSnapSettings();
 
     SubscribeToEvent(E_UPDATE, HANDLER(SceneEditor3D, HandleUpdate));
-    SubscribeToEvent(E_EDITORACTIVENODECHANGE, HANDLER(SceneEditor3D, HandleEditorActiveNodeChange));
 
     SubscribeToEvent(E_GIZMOEDITMODECHANGED, HANDLER(SceneEditor3D, HandleGizmoEditModeChanged));
     SubscribeToEvent(E_GIZMOAXISMODECHANGED, HANDLER(SceneEditor3D, HandleGizmoAxisModeChanged));
@@ -112,10 +111,6 @@ SceneEditor3D ::SceneEditor3D(Context* context, const String &fullpath, UITabCon
 
     SubscribeToEvent(E_EDITORPLAYSTARTED, HANDLER(SceneEditor3D, HandlePlayStarted));
     SubscribeToEvent(E_EDITORPLAYSTOPPED, HANDLER(SceneEditor3D, HandlePlayStopped));
-
-    SubscribeToEvent(scene_, E_NODEADDED, HANDLER(SceneEditor3D, HandleNodeAdded));
-    SubscribeToEvent(scene_, E_NODEREMOVED, HANDLER(SceneEditor3D, HandleNodeRemoved));
-
     SubscribeToEvent(scene_, E_SCENEEDITSCENEMODIFIED, HANDLER(SceneEditor3D, HandleSceneEditSceneModified));
 
 }
@@ -197,46 +192,11 @@ void SceneEditor3D::SetFocus()
     sceneView_->SetFocus();
 }
 
-void SceneEditor3D::SelectNode(Node* node)
-{
-    /*
-    selectedNode_ = node;
-    if (!node)
-        gizmo3D_->Hide();
-    else
-        gizmo3D_->Show();
-    */
-}
-
-void SceneEditor3D::HandleNodeAdded(StringHash eventType, VariantMap& eventData)
-{
-    // Node does not have values set here
-
-    //Node* node =  static_cast<Node*>(eventData[NodeAdded::P_NODE].GetPtr());
-    //LOGINFOF("Node Added: %s", node->GetName().CString());
-}
-
-
-void SceneEditor3D::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
-{
-    Node* node = (Node*) (eventData[NodeRemoved::P_NODE].GetPtr());
-    /*
-    if (node == selectedNode_)
-        SelectNode(0);
-    */
-}
-
 void SceneEditor3D::HandleUpdate(StringHash eventType, VariantMap& eventData)
 {
     gizmo3D_->Update();
 }
 
-void SceneEditor3D::HandleEditorActiveNodeChange(StringHash eventType, VariantMap& eventData)
-{
-    Node* node = (Node*) (eventData[EditorActiveNodeChange::P_NODE].GetPtr());
-    SelectNode(node);
-}
-
 void SceneEditor3D::HandlePlayStarted(StringHash eventType, VariantMap& eventData)
 {
     sceneView_->Disable();

+ 0 - 6
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.h

@@ -52,8 +52,6 @@ public:
 
     bool OnEvent(const TBWidgetEvent &ev);
 
-    void SelectNode(Node* node);
-
     SceneSelection* GetSelection() { return selection_; }
     SceneView3D* GetSceneView3D() { return sceneView_; }
 
@@ -80,7 +78,6 @@ public:
 private:
 
     void HandleUpdate(StringHash eventType, VariantMap& eventData);
-    void HandleEditorActiveNodeChange(StringHash eventType, VariantMap& eventData);
     void HandlePlayStarted(StringHash eventType, VariantMap& eventData);
     void HandlePlayStopped(StringHash eventType, VariantMap& eventData);
     void HandleGizmoEditModeChanged(StringHash eventType, VariantMap& eventData);
@@ -88,9 +85,6 @@ private:
 
     void HandleUserPrefSaved(StringHash eventType, VariantMap& eventData);
 
-    void HandleNodeAdded(StringHash eventType, VariantMap& eventData);
-    void HandleNodeRemoved(StringHash eventType, VariantMap& eventData);
-
     void HandleSceneEditSceneModified(StringHash eventType, VariantMap& eventData);
 
     void UpdateGizmoSnapSettings();

+ 0 - 20
Source/AtomicEditor/Editors/SceneEditor3D/SceneView3D.cpp

@@ -98,11 +98,8 @@ SceneView3D ::SceneView3D(Context* context, SceneEditor3D *sceneEditor) :
     SetAutoUpdate(false);
 
     SubscribeToEvent(E_UPDATE, HANDLER(SceneView3D, HandleUpdate));
-    SubscribeToEvent(E_EDITORACTIVENODECHANGE, HANDLER(SceneView3D, HandleEditorActiveNodeChange));
     SubscribeToEvent(E_POSTRENDERUPDATE, HANDLER(SceneView3D, HandlePostRenderUpdate));
 
-    SubscribeToEvent(scene_, E_NODEREMOVED, HANDLER(SceneView3D, HandleNodeRemoved));
-
     SubscribeToEvent(E_MOUSEMOVE, HANDLER(SceneView3D,HandleMouseMove));
 
     SubscribeToEvent(this, E_DRAGENTERWIDGET, HANDLER(SceneView3D, HandleDragEnterWidget));
@@ -444,11 +441,6 @@ void SceneView3D::HandlePostRenderUpdate(StringHash eventType, VariantMap& event
 
 }
 
-void SceneView3D::SelectNode(Node* node)
-{
-    //selectedNode_ = node;
-}
-
 bool SceneView3D::OnEvent(const TBWidgetEvent &ev)
 {
     if (ev.type == EVENT_TYPE_SHORTCUT)
@@ -500,18 +492,6 @@ void SceneView3D::HandleUpdate(StringHash eventType, VariantMap& eventData)
 
 }
 
-void SceneView3D::HandleEditorActiveNodeChange(StringHash eventType, VariantMap& eventData)
-{
-    Node* node = (Node*) (eventData[EditorActiveNodeChange::P_NODE].GetPtr());
-    SelectNode(node);
-}
-
-void SceneView3D::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
-{
-    Node* node = (Node*) (eventData[NodeRemoved::P_NODE].GetPtr());
-    //if (node == selectedNode_)
-    //    SelectNode(0);
-}
 
 void SceneView3D::UpdateDragNode(int mouseX, int mouseY)
 {

+ 0 - 3
Source/AtomicEditor/Editors/SceneEditor3D/SceneView3D.h

@@ -37,7 +37,6 @@ public:
 
     SceneView3D(Context* context, SceneEditor3D* sceneEditor);
     virtual ~SceneView3D();
-    void SelectNode(Node* node);
 
     Ray GetCameraRay();
 
@@ -71,8 +70,6 @@ private:
 
     void HandleUpdate(StringHash eventType, VariantMap& eventData);
     void HandlePostRenderUpdate(StringHash eventType, VariantMap& eventData);
-    void HandleEditorActiveNodeChange(StringHash eventType, VariantMap& eventData);
-    void HandleNodeRemoved(StringHash eventType, VariantMap& eventData);
 
     void HandleUIWidgetFocusEscaped(StringHash eventType, VariantMap& eventData);
     void HandleUIUnhandledShortcut(StringHash eventType, VariantMap& eventData);