Browse Source

Fix behavior for expanding/collapsing editor frames with arrow keys

rsredsq 10 years ago
parent
commit
23c9c0a108

+ 29 - 1
Script/AtomicEditor/ui/frames/HierarchyFrame.ts

@@ -197,7 +197,7 @@ class HierarchyFrame extends Atomic.UIWidget {
 
 
         if (data.type == Atomic.UI_EVENT_TYPE_KEY_UP) {
         if (data.type == Atomic.UI_EVENT_TYPE_KEY_UP) {
 
 
-            if (data.key == Atomic.KEY_DOWN || data.key == Atomic.KEY_UP) {
+            if (data.key == Atomic.KEY_DOWN || data.key == Atomic.KEY_UP || data.key == Atomic.KEY_LEFT || data.key == Atomic.KEY_RIGHT) {
                 var selectedId = Number(this.hierList.selectedItemID);
                 var selectedId = Number(this.hierList.selectedItemID);
                 var node = this.scene.getNode(selectedId);
                 var node = this.scene.getNode(selectedId);
 
 
@@ -207,6 +207,34 @@ class HierarchyFrame extends Atomic.UIWidget {
 
 
                 }
                 }
             }
             }
+            if (data.key == Atomic.KEY_RIGHT) {
+                var selectedId = Number(this.hierList.selectedItemID);
+                var itemNodeId = this.nodeIDToItemID[selectedId];
+
+                if (!this.hierList.getExpanded(itemNodeId) && this.hierList.getExpandable(itemNodeId)) {
+                    this.hierList.setExpanded(itemNodeId, true);
+                    this.hierList.rootList.invalidateList();
+                } else {
+                    this.hierList.rootList.selectNextItem();
+                }
+
+            } else if (data.key == Atomic.KEY_LEFT) {
+                var selectedId = Number(this.hierList.selectedItemID);
+                var itemNodeId = this.nodeIDToItemID[selectedId];
+
+                if (this.hierList.getExpanded(itemNodeId)) {
+                    this.hierList.setExpanded(itemNodeId, false);
+                    this.hierList.rootList.invalidateList();
+                } else {
+                    var node = this.scene.getNode(selectedId);
+                    var parentNode = node.getParent();
+                    if (parentNode) {
+                        this.hierList.selectItemByID(parentNode.id.toString());
+                    }
+                }
+
+            }
+
             // node deletion
             // node deletion
             if (data.key == Atomic.KEY_DELETE || data.key == Atomic.KEY_BACKSPACE) {
             if (data.key == Atomic.KEY_DELETE || data.key == Atomic.KEY_BACKSPACE) {
 
 

+ 35 - 1
Script/AtomicEditor/ui/frames/ProjectFrame.ts

@@ -138,7 +138,41 @@ class ProjectFrame extends ScriptWidget {
 
 
         if (data.type == Atomic.UI_EVENT_TYPE_KEY_UP) {
         if (data.type == Atomic.UI_EVENT_TYPE_KEY_UP) {
 
 
-            if (data.key == Atomic.KEY_DOWN || data.key == Atomic.KEY_UP) {
+          if (data.key == Atomic.KEY_RIGHT) {
+              var selectedId = this.folderList.selectedItemID;
+              var itemAssetId = this.assetGUIDToItemID[selectedId];
+
+              if (selectedId != "0") {
+                  if (!this.folderList.getExpanded(itemAssetId) && this.folderList.getExpandable(itemAssetId)) {
+                      this.folderList.setExpanded(itemAssetId, true);
+                      this.folderList.rootList.invalidateList();
+                  } else {
+                      this.folderList.rootList.selectNextItem();
+                  }
+              }
+
+
+          } else if (data.key == Atomic.KEY_LEFT) {
+              var selectedId = this.folderList.selectedItemID;
+              var itemAssetId = this.assetGUIDToItemID[selectedId];
+              if (selectedId != "0") {
+                  if (this.folderList.getExpanded(itemAssetId)) {
+                      this.folderList.setExpanded(itemAssetId, false);
+                      this.folderList.rootList.invalidateList();
+                  } else {
+                      var db = ToolCore.getAssetDatabase();
+
+                      var asset = db.getAssetByGUID(selectedId);
+
+                      var parentAsset = asset.parent;
+                      if (parentAsset) {
+                         this.folderList.selectItemByID(parentAsset.guid.toString());
+                      }
+                  }
+              }
+          }
+
+            if (data.key == Atomic.KEY_DOWN || data.key == Atomic.KEY_UP || data.key == Atomic.KEY_LEFT || data.key == Atomic.KEY_RIGHT) {
 
 
                 var selectedId = this.folderList.selectedItemID;
                 var selectedId = this.folderList.selectedItemID;
 
 

+ 17 - 0
Source/Atomic/UI/UIListView.cpp

@@ -518,6 +518,23 @@ void UIListView::SetExpanded(unsigned itemID, bool value)
 
 
 }
 }
 
 
+bool UIListView::GetExpanded(unsigned itemID)
+{
+    if (!itemLookup_.Contains(itemID))
+        return false;
+
+    return itemLookup_[itemID]->GetExpanded();
+
+}
+
+bool UIListView::GetExpandable(unsigned itemID)
+{
+    if (!itemLookup_.Contains(itemID))
+        return false;
+
+    return itemLookup_[itemID]->children_.Size() > 0;
+}
+
 
 
 void UIListView::DeleteAllItems()
 void UIListView::DeleteAllItems()
 {
 {

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

@@ -55,6 +55,8 @@ public:
     void ScrollToSelectedItem();
     void ScrollToSelectedItem();
 
 
     void SetExpanded(unsigned itemID, bool value);
     void SetExpanded(unsigned itemID, bool value);
+    bool GetExpanded(unsigned itemID);
+    bool GetExpandable(unsigned itemID);
 
 
     void DeleteAllItems();
     void DeleteAllItems();
     void SelectItemByID(const String& id);
     void SelectItemByID(const String& id);

+ 16 - 0
Source/Atomic/UI/UISelectList.cpp

@@ -201,4 +201,20 @@ bool UISelectList::OnEvent(const tb::TBWidgetEvent &ev)
     return UIWidget::OnEvent(ev);
     return UIWidget::OnEvent(ev);
 }
 }
 
 
+void UISelectList::SelectNextItem()
+{
+    if (!widget_)
+        return;
+    
+    ((TBSelectList*)widget_)->ChangeValue(TB_KEY_DOWN);
+}
+
+void UISelectList::SelectPreviousItem()
+{
+    if (!widget_)
+        return;
+
+    ((TBSelectList*)widget_)->ChangeValue(TB_KEY_UP);
+}
+
 }
 }

+ 3 - 0
Source/Atomic/UI/UISelectList.h

@@ -57,6 +57,9 @@ public:
 
 
     tb::TBSelectList* GetTBSelectList();
     tb::TBSelectList* GetTBSelectList();
 
 
+    void SelectNextItem();
+    void SelectPreviousItem();
+
 protected:
 protected:
 
 
     void HandleUIUpdate(StringHash eventType, VariantMap& eventData);
     void HandleUIUpdate(StringHash eventType, VariantMap& eventData);