Browse Source

Auto-reload changed assets in editor, working on InspectorWidget

Josh Engebretson 10 years ago
parent
commit
0df4c703a6

+ 2 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/editor/Editor.ts

@@ -55,6 +55,8 @@ class Editor extends Atomic.ScriptObject {
 
 
         Editor.instance = this;
         Editor.instance = this;
 
 
+        Atomic.getResourceCache().autoReloadResources = true;
+
         this.assetImport = new AssetImport();
         this.assetImport = new AssetImport();
 
 
         var graphics = Atomic.getGraphics();
         var graphics = Atomic.getGraphics();

+ 1 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/tsconfig.json

@@ -26,6 +26,7 @@
         "./ui/inspector/ComponentInspector.ts",
         "./ui/inspector/ComponentInspector.ts",
         "./ui/inspector/DataBinding.ts",
         "./ui/inspector/DataBinding.ts",
         "./ui/inspector/InspectorFrame.ts",
         "./ui/inspector/InspectorFrame.ts",
+        "./ui/inspector/InspectorWidget.ts",
         "./ui/inspector/MaterialInspector.ts",
         "./ui/inspector/MaterialInspector.ts",
         "./ui/inspector/ModelInspector.ts",
         "./ui/inspector/ModelInspector.ts",
         "./ui/inspector/NodeInspector.ts",
         "./ui/inspector/NodeInspector.ts",

+ 23 - 30
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/inspector/DataBinding.ts

@@ -34,8 +34,7 @@ class DataBinding {
 
 
             widget = field;
             widget = field;
         }
         }
-        else if (attrInfo.type == Atomic.VAR_VECTOR3 || attrInfo.type == Atomic.VAR_QUATERNION)
-        {
+        else if (attrInfo.type == Atomic.VAR_VECTOR3 || attrInfo.type == Atomic.VAR_QUATERNION) {
             var layout = new Atomic.UILayout();
             var layout = new Atomic.UILayout();
             widget = layout;
             widget = layout;
             layout.spacing = 0;
             layout.spacing = 0;
@@ -43,8 +42,7 @@ class DataBinding {
             var lp = new Atomic.UILayoutParams();
             var lp = new Atomic.UILayoutParams();
             lp.width = 100;
             lp.width = 100;
 
 
-            for (var i = 0; i < 3; i++)
-            {
+            for (var i = 0; i < 3; i++) {
                 var select = new Atomic.UIInlineSelect();
                 var select = new Atomic.UIInlineSelect();
                 select.id = String(i + 1);
                 select.id = String(i + 1);
                 select.fontDescription = fd;
                 select.fontDescription = fd;
@@ -70,48 +68,43 @@ class DataBinding {
 
 
     }
     }
 
 
-    setObjectValueFromWidget(srcWidget:Atomic.UIWidget) {
+    setObjectValueFromWidget(srcWidget: Atomic.UIWidget) {
 
 
-      if (this.objectLocked)
-          return;
+        if (this.objectLocked)
+            return;
 
 
-      this.objectLocked = true;
+        this.objectLocked = true;
 
 
-      var type = this.attrInfo.type;
-
-      if (type == Atomic.VAR_BOOL)
-      {
-          var box = <Atomic.UICheckBox> this.widget;
-
-          this.object.setAttribute(this.attrInfo.name, box.value ? true : false);
-      }
+        var type = this.attrInfo.type;
 
 
+        if (type == Atomic.VAR_BOOL) {
+            var box = <Atomic.UICheckBox> this.widget;
 
 
+            this.object.setAttribute(this.attrInfo.name, box.value ? true : false);
+        }
 
 
-      this.objectLocked = false;
+        this.objectLocked = false;
 
 
     }
     }
 
 
-    handleWidgetEvent(ev: Atomic.UIWidgetEvent) : boolean {
+    handleWidgetEvent(ev: Atomic.UIWidgetEvent): boolean {
 
 
-      if (this.objectLocked)
-          return false;
+        if (this.objectLocked)
+            return false;
 
 
-      if (ev.type == Atomic.UI_EVENT_TYPE_CHANGED)
-      {
-          if (this.widget == ev.target || this.widget.isAncestorOf(ev.target))
-          {
-              this.setObjectValueFromWidget(ev.target);
-              return true;
-          }
-      }
+        if (ev.type == Atomic.UI_EVENT_TYPE_CHANGED) {
+            if (this.widget == ev.target || this.widget.isAncestorOf(ev.target)) {
+                this.setObjectValueFromWidget(ev.target);
+                return true;
+            }
+        }
 
 
-      return false;
+        return false;
 
 
     }
     }
 
 
     object: Atomic.Serializable;
     object: Atomic.Serializable;
-    objectLocked:boolean = false;
+    objectLocked: boolean = false;
     attrInfo: Atomic.AttributeInfo;
     attrInfo: Atomic.AttributeInfo;
     widget: Atomic.UIWidget;
     widget: Atomic.UIWidget;
 
 

+ 135 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/inspector/InspectorWidget.ts

@@ -0,0 +1,135 @@
+import ScriptWidget = require("../ScriptWidget");
+
+class InspectorWidget extends ScriptWidget {
+
+    constructor() {
+
+        super();
+
+        var fd = this.attrFontDesc = new Atomic.UIFontDescription();
+        fd.id = "Vera";
+        fd.size = 11;
+
+        var nlp = new Atomic.UILayoutParams();
+        nlp.width = 320;
+
+        var layout = this.rootLayout = new Atomic.UILayout();
+        layout.spacing = 4;
+
+        layout.layoutDistribution = Atomic.UI_LAYOUT_DISTRIBUTION_GRAVITY;
+        layout.layoutPosition = Atomic.UI_LAYOUT_POSITION_LEFT_TOP;
+        layout.layoutParams = nlp;
+        layout.axis = Atomic.UI_AXIS_Y;
+
+        this.gravity = Atomic.UI_GRAVITY_ALL;
+        this.addChild(layout);
+
+        this.subscribeToEvent("WidgetEvent", (data) => this.handleWidgetEvent(data));
+
+    }
+
+    onApply() {
+      print("Apply Pressed!");
+    }
+
+    createAttrName(name:string):Atomic.UITextField {
+
+      var nameField = new Atomic.UITextField();
+      nameField.textAlign = Atomic.UI_TEXT_ALIGN_LEFT;
+      nameField.skinBg = "InspectorTextAttrName";
+      nameField.text = name;
+      nameField.fontDescription = this.attrFontDesc;
+      return nameField;
+    }
+
+    createSection(text:string, expanded:number):Atomic.UISection {
+
+      var section = new Atomic.UISection();
+
+      section.text = text;
+      section.value = expanded;
+      section.fontDescription = this.attrFontDesc;
+
+      return section;
+
+    }
+
+    createVerticalAttrLayout():Atomic.UILayout {
+
+      var layout = new Atomic.UILayout(Atomic.UI_AXIS_Y);
+      layout.spacing = 3;
+      layout.layoutPosition = Atomic.UI_LAYOUT_POSITION_LEFT_TOP;
+      layout.layoutSize = Atomic.UI_LAYOUT_SIZE_AVAILABLE;
+
+      return layout;
+
+    }
+
+    createApplyButton():Atomic.UIButton {
+
+      var button = new Atomic.UIButton();
+      button.fontDescription = this.attrFontDesc;
+      button.gravity = Atomic.UI_GRAVITY_RIGHT;
+      button.text = "Apply";
+
+      button.onClick = function() {
+
+        this.onApply();
+
+      }.bind(this);
+
+      return button;
+
+    }
+
+    createAttrCheckBox(name:string, parent:Atomic.UIWidget):Atomic.UICheckBox {
+
+      var attrLayout = new Atomic.UILayout();
+      attrLayout.layoutDistribution = Atomic.UI_LAYOUT_DISTRIBUTION_GRAVITY;
+
+      var _name = this.createAttrName(name);
+      attrLayout.addChild(_name);
+
+      var box = new Atomic.UICheckBox();
+      box.skinBg = "TBGreyCheckBox";
+      attrLayout.addChild(box);
+      parent.addChild(attrLayout);
+
+      return box;
+
+    }
+
+
+    createAttrEditField(name:string, parent:Atomic.UIWidget):Atomic.UIEditField {
+
+      var attrLayout = new Atomic.UILayout();
+      attrLayout.layoutDistribution = Atomic.UI_LAYOUT_DISTRIBUTION_GRAVITY;
+
+      var _name = this.createAttrName(name);
+      attrLayout.addChild(_name);
+
+      var edit = new Atomic.UIEditField();
+      edit.textAlign = Atomic.UI_TEXT_ALIGN_LEFT;
+      edit.skinBg = "TBAttrEditorField";
+      edit.fontDescription = this.attrFontDesc;
+      var lp = new Atomic.UILayoutParams();
+      lp.width = 180;
+      edit.layoutParams = lp;
+
+      attrLayout.addChild(edit);
+      parent.addChild(attrLayout);
+
+      return edit;
+
+    }
+
+    handleWidgetEvent(ev: Atomic.UIWidgetEvent) {
+
+    }
+
+    rootLayout:Atomic.UILayout;
+    attrFontDesc:Atomic.UIFontDescription;
+
+}
+
+export  = InspectorWidget;

+ 44 - 50
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/inspector/ModelInspector.ts

@@ -1,8 +1,8 @@
 
 
 
 
-import ScriptWidget = require("../ScriptWidget");
+import InspectorWidget = require("./InspectorWidget");
 
 
-class ModelInspector extends ScriptWidget {
+class ModelInspector extends InspectorWidget {
 
 
     constructor() {
     constructor() {
 
 
@@ -16,72 +16,66 @@ class ModelInspector extends ScriptWidget {
 
 
     }
     }
 
 
-    inspect(asset: ToolCore.Asset) {
-
-        var fd = new Atomic.UIFontDescription();
-        fd.id = "Vera";
-        fd.size = 11;
-
-        var nlp = new Atomic.UILayoutParams();
-        nlp.width = 320;
+    onApply() {
 
 
-        var assetLayout = new Atomic.UILayout();
-        assetLayout.spacing = 4;
+      this.importer.scale = Number(this.scaleEdit.text);
+      this.importer.startTime = Number(this.startTimeEdit.text);
+      this.importer.endTime = Number(this.endTimeEdit.text);
 
 
-        assetLayout.layoutDistribution = Atomic.UI_LAYOUT_DISTRIBUTION_GRAVITY;
-        assetLayout.layoutPosition = Atomic.UI_LAYOUT_POSITION_LEFT_TOP;
-        assetLayout.layoutParams = nlp;
-        assetLayout.axis = Atomic.UI_AXIS_Y;
-
-        // node attr layout
+      this.importer.importAnimations = this.importAnimationBox.value ? true : false;
 
 
-        var modelSection = new Atomic.UISection();
-        modelSection.text = "Model Import";
-        modelSection.value = 1;
-        //modelSection.textAlign = Atomic.UI_TEXT_ALIGN_LEFT;
-        //modelSection.skinBg = "InspectorTextLabel";
-        assetLayout.addChild(modelSection);
+      this.importer.import(this.asset.guid);
+      this.asset.save();
 
 
-        var attrsVerticalLayout = new Atomic.UILayout(Atomic.UI_AXIS_Y);
-        attrsVerticalLayout.spacing = 3;
-        attrsVerticalLayout.layoutPosition = Atomic.UI_LAYOUT_POSITION_LEFT_TOP;
-        attrsVerticalLayout.layoutSize = Atomic.UI_LAYOUT_SIZE_AVAILABLE;
+    }
 
 
-        modelSection.contentRoot.addChild(attrsVerticalLayout);
+    inspect(asset: ToolCore.Asset) {
 
 
-        var attrLayout = new Atomic.UILayout();
+        this.asset = asset;
+        this.importer = <ToolCore.ModelImporter> asset.importer;
 
 
-        attrLayout.layoutDistribution = Atomic.UI_LAYOUT_DISTRIBUTION_GRAVITY;
+        // node attr layout
+        var rootLayout = this.rootLayout;
 
 
-        var name = new Atomic.UITextField();
-        name.textAlign = Atomic.UI_TEXT_ALIGN_LEFT;
-        name.skinBg = "InspectorTextAttrName";
-        name.text = "Scale";
-        name.fontDescription = fd;
-        attrLayout.addChild(name);
+        // Model Section
+        var modelSection = this.createSection("Model", 1);
+        var modelVerticalLayout = this.createVerticalAttrLayout();
+        rootLayout.addChild(modelSection);
+        modelSection.contentRoot.addChild(modelVerticalLayout);
 
 
-        var scaleEdit = new Atomic.UIEditField();
-        scaleEdit.textAlign = Atomic.UI_TEXT_ALIGN_LEFT;
-        scaleEdit.skinBg = "TBAttrEditorField";;
-        scaleEdit.fontDescription = fd;
-        var lp = new Atomic.UILayoutParams();
-        lp.width = 180;
-        scaleEdit.layoutParams = lp;
+        this.scaleEdit = this.createAttrEditField("Scale", modelVerticalLayout);
+        this.scaleEdit.text = this.importer.scale.toString();
 
 
-        var importer = <ToolCore.ModelImporter> asset.importer;
+        // Animations Section
+        var animationSection = this.createSection("Animation", 1);
+        var animVerticalLayout = this.createVerticalAttrLayout();
+        rootLayout.addChild(animationSection);
+        animationSection.contentRoot.addChild(animVerticalLayout);
 
 
-        scaleEdit.text = importer.scale.toString();
+        this.importAnimationBox = this.createAttrCheckBox("Import Animations", animVerticalLayout);
+        this.importAnimationBox.value = this.importer.importAnimations ? 1 : 0;
 
 
-        attrLayout.addChild(scaleEdit);
+        this.startTimeEdit = this.createAttrEditField("Start Time", animVerticalLayout);
+        this.startTimeEdit.text = this.importer.startTime.toString();
 
 
-        attrsVerticalLayout.addChild(attrLayout);
+        this.endTimeEdit = this.createAttrEditField("End Time", animVerticalLayout);
+        this.endTimeEdit.text = this.importer.endTime.toString();
 
 
-        this.addChild(assetLayout);
+        // apply button
+        rootLayout.addChild(this.createApplyButton());
 
 
     }
     }
 
 
-    bindings:Array<DataBinding> = new Array();
+    // model
+    scaleEdit:Atomic.UIEditField;
+
+    // animation
+    startTimeEdit:Atomic.UIEditField;
+    endTimeEdit:Atomic.UIEditField;
+    importAnimationBox:Atomic.UICheckBox;
 
 
+    asset:ToolCore.Asset;
+    importer:ToolCore.ModelImporter;
 
 
 }
 }
 
 

+ 9 - 0
Source/Atomic/UI/UIWidget.cpp

@@ -139,6 +139,15 @@ void UIWidget::AddChild(UIWidget* child)
     widget_->AddChild(child->widget_);
     widget_->AddChild(child->widget_);
 }
 }
 
 
+String UIWidget::GetText()
+{
+    if (!widget_)
+        return "";
+
+    return widget_->GetText().CStr();
+}
+
+
 void UIWidget::SetText(const String& text)
 void UIWidget::SetText(const String& text)
 {
 {
     if (!widget_)
     if (!widget_)

+ 1 - 0
Source/Atomic/UI/UIWidget.h

@@ -121,6 +121,7 @@ public:
     IntRect GetRect();
     IntRect GetRect();
 
 
     UIPreferredSize* GetPreferredSize();
     UIPreferredSize* GetPreferredSize();
+    String GetText();
 
 
     void SetRect(IntRect r);    
     void SetRect(IntRect r);    
     void SetSize(int width, int height);
     void SetSize(int width, int height);

+ 2 - 2
Source/ToolCore/Assets/Asset.h

@@ -47,13 +47,13 @@ public:
 
 
     bool IsFolder() const { return isFolder_; }
     bool IsFolder() const { return isFolder_; }
 
 
-private:
-
     // load .asset
     // load .asset
     bool Load();
     bool Load();
     // save .asset
     // save .asset
     bool Save();
     bool Save();
 
 
+private:
+
     bool CreateImporter();
     bool CreateImporter();
 
 
     bool CheckCacheFile();
     bool CheckCacheFile();

+ 3 - 0
Source/ToolCore/Assets/ModelImporter.h

@@ -27,6 +27,9 @@ public:
     float GetEndTime() { return endTime_; }
     float GetEndTime() { return endTime_; }
     void SetEndTime(float endTime) { endTime_ = endTime; }
     void SetEndTime(float endTime) { endTime_ = endTime; }
 
 
+    bool GetImportAnimations() { return importAnimations_; }
+    void SetImportAnimations(bool importAnimations) { importAnimations_ = importAnimations; }
+
     bool Import(const String& guid);
     bool Import(const String& guid);
 
 
 protected:
 protected: