Browse Source

Custom Section and Attribute UI

Josh Engebretson 10 years ago
parent
commit
f7eccbd414

+ 0 - 0
Script/AtomicEditor/ui/frames/inspector/ComponentSectionUI.ts → Script/AtomicEditor/ui/frames/inspector/ComponentAttributeUI.ts


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

@@ -19,6 +19,7 @@ import PrefabInspector = require("./PrefabInspector");
 import SelectionInspector = require("./SelectionInspector");
 // make sure these are hooked in
 import "./SelectionEditTypes";
+import "./SelectionSectionCoreUI";
 
 
 class InspectorFrame extends ScriptWidget {

+ 21 - 2
Script/AtomicEditor/ui/frames/inspector/SelectionSection.ts

@@ -1,7 +1,9 @@
 
 import SerializableEditType = require("./SerializableEditType");
 import AttributeInfoEdit = require("./AttributeInfoEdit");
-import "./ComponentSectionUI";
+import SelectionSectionUI = require("./SelectionSectionUI");
+
+import "./ComponentAttributeUI";
 
 abstract class SelectionSection extends Atomic.UISection {
 
@@ -28,7 +30,7 @@ abstract class SelectionSection extends Atomic.UISection {
 
         for (var name in this.attrEdits) {
 
-          this.attrEdits[name].refresh();
+            this.attrEdits[name].refresh();
 
         }
 
@@ -76,10 +78,27 @@ abstract class SelectionSection extends Atomic.UISection {
 
         }
 
+        if (SelectionSection.customSectionUI[this.editType.typeName]) {
+
+            var ui = new SelectionSection.customSectionUI[this.editType.typeName]();
+            ui.createUI(this.editType);
+            attrLayout.addChild(ui);
+
+        }
+
     }
 
     static fontDesc: Atomic.UIFontDescription;
 
+    static customSectionUI: { [typeName: string]: typeof SelectionSectionUI } = {};
+
+    static registerCustomSectionUI(typeName: string, ui: typeof SelectionSectionUI) {
+
+        SelectionSection.customSectionUI[typeName] = ui;
+
+    }
+
+
     private static Ctor = (() => {
 
         var fd = SelectionSection.fontDesc = new Atomic.UIFontDescription();

+ 44 - 0
Script/AtomicEditor/ui/frames/inspector/SelectionSectionCoreUI.ts

@@ -0,0 +1,44 @@
+
+
+import InspectorUtils = require("./InspectorUtils");
+import SelectionSection = require("./SelectionSection");
+import SelectionSectionUI = require("./SelectionSectionUI");
+import SerializableEditType = require("./SerializableEditType");
+
+
+class CollisionShapeSectionUI extends SelectionSectionUI {
+
+    editType: SerializableEditType;
+
+    createUI(editType: SerializableEditType) {
+
+        this.editType = editType;
+
+        var button = new Atomic.UIButton();
+        button.fontDescription = InspectorUtils.attrFontDesc;
+        button.gravity = Atomic.UI_GRAVITY_RIGHT;
+        button.text = "Set from StaticModel";
+
+        button.onClick = () => {
+
+            for (var i in this.editType.objects) {
+
+                var shape = <Atomic.CollisionShape>this.editType.objects[i];
+                var model = <Atomic.Drawable>shape.node.getComponent("StaticModel");
+
+                if (model) {
+                    var box = model.boundingBox;
+                    shape.setBox([box[3] - box[0], box[4] - box[1], box[5] - box[2]]);
+                }
+
+            }
+
+        };
+
+        this.addChild(button);
+
+    }
+
+}
+
+SelectionSection.registerCustomSectionUI("CollisionShape", CollisionShapeSectionUI);

+ 16 - 0
Script/AtomicEditor/ui/frames/inspector/SelectionSectionUI.ts

@@ -0,0 +1,16 @@
+
+import SerializableEditType = require("./SerializableEditType");
+
+class SelectionSectionUI extends Atomic.UILayout {
+
+    editType: SerializableEditType;
+
+    createUI(editType: SerializableEditType) {
+
+      this.editType = editType;
+
+    }
+
+}
+
+export = SelectionSectionUI;