From 6162c5da053aa5bad4d009953651ad5f27be71bc Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 8 Dec 2022 20:00:55 -0600 Subject: [PATCH 1/4] Updates the behavior and layout of the ImageAsset, MaterialAsset and ShapeAsset inspector field types to be clearer, with previews and obvious edit buttons Also fixes drag-n-drop behavior from the AB into the image and shape fields to ensure they update as expected. --- Engine/source/T3D/assets/ImageAsset.cpp | 172 ++++++++++++++---- .../source/T3D/assets/ImageAssetInspectors.h | 11 +- Engine/source/T3D/assets/MaterialAsset.cpp | 136 ++++++++++++-- Engine/source/T3D/assets/MaterialAsset.h | 11 +- Engine/source/T3D/assets/ShapeAsset.cpp | 133 +++++++++++--- Engine/source/T3D/assets/ShapeAsset.h | 10 +- Engine/source/T3D/tsStatic.cpp | 25 +-- Engine/source/gui/controls/guiBitmapCtrl.cpp | 3 - .../scripts/assetTypes/image.tscript | 13 +- .../scripts/assetTypes/shape.tscript | 14 +- .../game/tools/gui/profiles.ed.tscript | 2 +- 11 files changed, 422 insertions(+), 108 deletions(-) diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index 7e56c555f..c2349ccef 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -475,73 +475,116 @@ GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() if (retCtrl == NULL) return retCtrl; - retCtrl->getRenderTooltipDelegate().bind(this, &GuiInspectorTypeImageAssetPtr::renderTooltip); + // Change filespec + char szBuffer[512]; + + const char* previewImage; if (mInspector->getInspectObject() != nullptr) { - // Change filespec - char szBuffer[512]; dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ImageAsset\", \"AssetBrowser.changeAsset\", %s, %s);", mInspector->getIdString(), mCaption); mBrowseButton->setField("Command", szBuffer); setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + + previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL); } else { //if we don't have a target object, we'll be manipulating the desination value directly - char szBuffer[512]; dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ImageAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");", mInspector->getIdString(), mVariableName); mBrowseButton->setField("Command", szBuffer); + + previewImage = Con::getVariable(mVariableName); } - mImageEdButton = NULL; - // Create "Open in ImageEditor" button - /*mImageEdButton = new GuiBitmapButtonCtrl(); + mLabel = new GuiTextCtrl(); + mLabel->registerObject(); + mLabel->setControlProfile(mProfile); + mLabel->setText(mCaption); + addObject(mLabel); - char bitmapName[512] = "ToolsModule:GameTSCtrl_image"; - mImageEdButton->setBitmap(StringTable->insert(bitmapName)); - mImageEdButton->setHidden(true); + // + GuiTextEditCtrl* editTextCtrl = static_cast(retCtrl); + GuiControlProfile* toolEditProfile; + if (Sim::findObject("ToolsGuiTextEditProfile", toolEditProfile)) + editTextCtrl->setControlProfile(toolEditProfile); - mImageEdButton->setDataField(StringTable->insert("Profile"), NULL, "GuiButtonProfile"); - mImageEdButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); - mImageEdButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); - mImageEdButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this file in the Image Editor"); + GuiControlProfile* toolDefaultProfile = nullptr; + Sim::findObject("ToolsGuiDefaultProfile", toolDefaultProfile); - mImageEdButton->registerObject(); - addObject(mImageEdButton);*/ + // + mPreviewImage = new GuiBitmapCtrl(); + mPreviewImage->registerObject(); + + if (toolDefaultProfile) + mPreviewImage->setControlProfile(toolDefaultProfile); + + updatePreviewImage(); + + addObject(mPreviewImage); + + // + mPreviewBorderButton = new GuiBitmapButtonCtrl(); + mPreviewBorderButton->registerObject(); + + if (toolDefaultProfile) + mPreviewBorderButton->setControlProfile(toolDefaultProfile); + + mPreviewBorderButton->_setBitmap(StringTable->insert("ToolsModule:cubemapBtnBorder_n_image")); + + mPreviewBorderButton->setField("Command", szBuffer); //clicking the preview does the same thing as the edit button, for simplicity + addObject(mPreviewBorderButton); + + // + // Create "Open in Editor" button + mEditButton = new GuiBitmapButtonCtrl(); + + dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.editAsset(%d.getText());", retCtrl->getId()); + mEditButton->setField("Command", szBuffer); + + mEditButton->setText("Edit"); + mEditButton->setSizing(horizResizeLeft, vertResizeAspectTop); + + mEditButton->setDataField(StringTable->insert("Profile"), NULL, "ToolsGuiButtonProfile"); + mEditButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); + mEditButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); + mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Material Editor"); + + mEditButton->registerObject(); + addObject(mEditButton); + + // + mUseHeightOverride = true; + mHeightOverride = 72; return retCtrl; } bool GuiInspectorTypeImageAssetPtr::updateRects() { + S32 rowSize = 18; S32 dividerPos, dividerMargin; mInspector->getDivider(dividerPos, dividerMargin); Point2I fieldExtent = getExtent(); Point2I fieldPos = getPosition(); - mCaptionRect.set(0, 0, fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); - mEditCtrlRect.set(fieldExtent.x - dividerPos + dividerMargin, 1, dividerPos - dividerMargin - 34, fieldExtent.y); + mEditCtrlRect.set(0, 0, fieldExtent.x, fieldExtent.y); + mLabel->resize(Point2I(mProfile->mTextOffset.x, 0), Point2I(fieldExtent.x, rowSize)); - bool resized = mEdit->resize(mEditCtrlRect.point, mEditCtrlRect.extent); - if (mImageEdButton != NULL) - { - RectI shapeEdRect(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4); - resized |= mImageEdButton->resize(shapeEdRect.point, shapeEdRect.extent); - } + RectI previewRect = RectI(Point2I(mProfile->mTextOffset.x, rowSize), Point2I(50, 50)); + mPreviewBorderButton->resize(previewRect.point, previewRect.extent); + mPreviewImage->resize(previewRect.point, previewRect.extent); - if (mBrowseButton != NULL) - { - if(mImageEdButton != NULL) - mBrowseRect.set(fieldExtent.x - 32, 2, 14, fieldExtent.y - 4); - else - mBrowseRect.set(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4); - resized |= mBrowseButton->resize(mBrowseRect.point, mBrowseRect.extent); - } + mEdit->resize(Point2I(previewRect.point.x + previewRect.extent.x + 10, rowSize * 1.5), Point2I(200, rowSize)); - return resized; + mEditButton->resize(Point2I(fieldExtent.x - 100, fieldExtent.y - rowSize), Point2I(100, rowSize)); + + mBrowseButton->setHidden(true); + + return true; } bool GuiInspectorTypeImageAssetPtr::renderTooltip(const Point2I& hoverPos, const Point2I& cursorPos, const char* tipText) @@ -617,6 +660,69 @@ bool GuiInspectorTypeImageAssetPtr::renderTooltip(const Point2I& hoverPos, const return true; } +void GuiInspectorTypeImageAssetPtr::updateValue() +{ + Parent::updateValue(); + + updatePreviewImage(); +} + +void GuiInspectorTypeImageAssetPtr::updatePreviewImage() +{ + const char* previewImage; + if (mInspector->getInspectObject() != nullptr) + previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL); + else + previewImage = Con::getVariable(mVariableName); + + String imgPreviewAssetId = String(previewImage) + "_PreviewImage"; + imgPreviewAssetId.replace(":", "_"); + imgPreviewAssetId = "ToolsModule:" + imgPreviewAssetId; + if (AssetDatabase.isDeclaredAsset(imgPreviewAssetId.c_str())) + { + mPreviewImage->setBitmap(StringTable->insert(imgPreviewAssetId.c_str())); + } + else + { + if (AssetDatabase.isDeclaredAsset(previewImage)) + { + ImageAsset* imgAsset = AssetDatabase.acquireAsset(previewImage); + if (imgAsset && imgAsset->isAssetValid()) + { + mPreviewImage->_setBitmap(imgAsset->getAssetId()); + } + } + } + + if (mPreviewImage->getBitmapAsset().isNull()) + mPreviewImage->_setBitmap(StringTable->insert("ToolsModule:genericAssetIcon_image")); +} + +void GuiInspectorTypeImageAssetPtr::setPreviewImage(StringTableEntry assetId) +{ + String imgPreviewAssetId = String(assetId) + "_PreviewImage"; + imgPreviewAssetId.replace(":", "_"); + imgPreviewAssetId = "ToolsModule:" + imgPreviewAssetId; + if (AssetDatabase.isDeclaredAsset(imgPreviewAssetId.c_str())) + { + mPreviewImage->setBitmap(StringTable->insert(imgPreviewAssetId.c_str())); + } + else + { + if (AssetDatabase.isDeclaredAsset(assetId)) + { + ImageAsset* imgAsset = AssetDatabase.acquireAsset(assetId); + if (imgAsset && imgAsset->isAssetValid()) + { + mPreviewImage->_setBitmap(imgAsset->getAssetId()); + } + } + } + + if (mPreviewImage->getBitmapAsset().isNull()) + mPreviewImage->_setBitmap(StringTable->insert("ToolsModule:genericAssetIcon_image")); +} + IMPLEMENT_CONOBJECT(GuiInspectorTypeImageAssetId); ConsoleDocClass(GuiInspectorTypeImageAssetId, diff --git a/Engine/source/T3D/assets/ImageAssetInspectors.h b/Engine/source/T3D/assets/ImageAssetInspectors.h index 253dd356c..f83e3705e 100644 --- a/Engine/source/T3D/assets/ImageAssetInspectors.h +++ b/Engine/source/T3D/assets/ImageAssetInspectors.h @@ -5,6 +5,7 @@ #ifndef _GUI_INSPECTOR_TYPES_H_ #include "gui/editor/guiInspectorTypes.h" #endif +#include #ifdef TORQUE_TOOLS class GuiInspectorTypeImageAssetPtr : public GuiInspectorTypeFileName @@ -12,7 +13,10 @@ class GuiInspectorTypeImageAssetPtr : public GuiInspectorTypeFileName typedef GuiInspectorTypeFileName Parent; public: - GuiBitmapButtonCtrl* mImageEdButton; + GuiTextCtrl* mLabel; + GuiBitmapButtonCtrl* mPreviewBorderButton; + GuiBitmapCtrl* mPreviewImage; + GuiButtonCtrl* mEditButton; DECLARE_CONOBJECT(GuiInspectorTypeImageAssetPtr); static void consoleInit(); @@ -20,6 +24,11 @@ public: virtual GuiControl* constructEditControl(); virtual bool updateRects(); bool renderTooltip(const Point2I& hoverPos, const Point2I& cursorPos, const char* tipText = NULL); + + virtual void updateValue(); + + void updatePreviewImage(); + void setPreviewImage(StringTableEntry assetId); }; class GuiInspectorTypeImageAssetId : public GuiInspectorTypeImageAssetPtr diff --git a/Engine/source/T3D/assets/MaterialAsset.cpp b/Engine/source/T3D/assets/MaterialAsset.cpp index de46d18f8..1965451a5 100644 --- a/Engine/source/T3D/assets/MaterialAsset.cpp +++ b/Engine/source/T3D/assets/MaterialAsset.cpp @@ -480,6 +480,8 @@ GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl() // Change filespec char szBuffer[512]; + const char* previewImage; + if (mInspector->getInspectObject() != nullptr) { dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, %s);", @@ -487,6 +489,8 @@ GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl() mBrowseButton->setField("Command", szBuffer); setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + + previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL); } else { @@ -494,18 +498,59 @@ GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl() dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"MaterialAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");", mInspector->getIdString(), mVariableName); mBrowseButton->setField("Command", szBuffer); + + previewImage = Con::getVariable(mVariableName); } + mLabel = new GuiTextCtrl(); + mLabel->registerObject(); + mLabel->setControlProfile(mProfile); + mLabel->setText(mCaption); + addObject(mLabel); + + // + GuiTextEditCtrl* editTextCtrl = static_cast(retCtrl); + GuiControlProfile* toolEditProfile; + if (Sim::findObject("ToolsGuiTextEditProfile", toolEditProfile)) + editTextCtrl->setControlProfile(toolEditProfile); + + GuiControlProfile* toolDefaultProfile = nullptr; + Sim::findObject("ToolsGuiDefaultProfile", toolDefaultProfile); + + // + mPreviewImage = new GuiBitmapCtrl(); + mPreviewImage->registerObject(); + + if(toolDefaultProfile) + mPreviewImage->setControlProfile(toolDefaultProfile); + + updatePreviewImage(); + + addObject(mPreviewImage); + + // + mPreviewBorderButton = new GuiBitmapButtonCtrl(); + mPreviewBorderButton->registerObject(); + + if(toolDefaultProfile) + mPreviewBorderButton->setControlProfile(toolDefaultProfile); + + mPreviewBorderButton->_setBitmap(StringTable->insert("ToolsModule:cubemapBtnBorder_n_image")); + + mPreviewBorderButton->setField("Command", szBuffer); //clicking the preview does the same thing as the edit button, for simplicity + addObject(mPreviewBorderButton); + + // // Create "Open in Editor" button mEditButton = new GuiBitmapButtonCtrl(); dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.editAsset(%d.getText());", retCtrl->getId()); mEditButton->setField("Command", szBuffer); - char bitmapName[512] = "ToolsModule:material_editor_n_image"; - mEditButton->setBitmap(StringTable->insert(bitmapName)); + mEditButton->setText("Edit"); + mEditButton->setSizing(horizResizeLeft, vertResizeAspectTop); - mEditButton->setDataField(StringTable->insert("Profile"), NULL, "GuiButtonProfile"); + mEditButton->setDataField(StringTable->insert("Profile"), NULL, "ToolsGuiButtonProfile"); mEditButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); mEditButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Material Editor"); @@ -513,33 +558,98 @@ GuiControl* GuiInspectorTypeMaterialAssetPtr::constructEditControl() mEditButton->registerObject(); addObject(mEditButton); + // + mUseHeightOverride = true; + mHeightOverride = 72; + return retCtrl; } bool GuiInspectorTypeMaterialAssetPtr::updateRects() { + S32 rowSize = 18; S32 dividerPos, dividerMargin; mInspector->getDivider(dividerPos, dividerMargin); Point2I fieldExtent = getExtent(); Point2I fieldPos = getPosition(); - mCaptionRect.set(0, 0, fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); - mEditCtrlRect.set(fieldExtent.x - dividerPos + dividerMargin, 1, dividerPos - dividerMargin - 34, fieldExtent.y); + mEditCtrlRect.set(0, 0, fieldExtent.x, fieldExtent.y); + mLabel->resize(Point2I(mProfile->mTextOffset.x, 0), Point2I(fieldExtent.x, rowSize)); - bool resized = mEdit->resize(mEditCtrlRect.point, mEditCtrlRect.extent); - if (mBrowseButton != NULL) + RectI previewRect = RectI(Point2I(mProfile->mTextOffset.x, rowSize), Point2I(50, 50)); + mPreviewBorderButton->resize(previewRect.point, previewRect.extent); + mPreviewImage->resize(previewRect.point, previewRect.extent); + + mEdit->resize(Point2I(previewRect.point.x + previewRect.extent.x + 10, rowSize * 1.5), Point2I(200, rowSize)); + + mEditButton->resize(Point2I(fieldExtent.x - 100, fieldExtent.y - rowSize), Point2I(100, rowSize)); + + mBrowseButton->setHidden(true); + + return true; +} + +void GuiInspectorTypeMaterialAssetPtr::updateValue() +{ + Parent::updateValue(); + + updatePreviewImage(); +} + +void GuiInspectorTypeMaterialAssetPtr::updatePreviewImage() +{ + const char* previewImage; + if (mInspector->getInspectObject() != nullptr) + previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL); + else + previewImage = Con::getVariable(mVariableName); + + String matPreviewAssetId = String(previewImage) + "_PreviewImage"; + matPreviewAssetId.replace(":", "_"); + matPreviewAssetId = "ToolsModule:" + matPreviewAssetId; + if (AssetDatabase.isDeclaredAsset(matPreviewAssetId.c_str())) { - mBrowseRect.set(fieldExtent.x - 32, 2, 14, fieldExtent.y - 4); - resized |= mBrowseButton->resize(mBrowseRect.point, mBrowseRect.extent); + mPreviewImage->setBitmap(StringTable->insert(matPreviewAssetId.c_str())); + } + else + { + if (AssetDatabase.isDeclaredAsset(previewImage)) + { + MaterialAsset* matAsset = AssetDatabase.acquireAsset(previewImage); + if (matAsset && matAsset->getMaterialDefinition()) + { + mPreviewImage->_setBitmap(matAsset->getMaterialDefinition()->mDiffuseMapAssetId[0]); + } + } } - if (mEditButton != NULL) + if (mPreviewImage->getBitmapAsset().isNull()) + mPreviewImage->_setBitmap(StringTable->insert("ToolsModule:genericAssetIcon_image")); +} + +void GuiInspectorTypeMaterialAssetPtr::setPreviewImage(StringTableEntry assetId) +{ + String matPreviewAssetId = String(assetId) + "_PreviewImage"; + matPreviewAssetId.replace(":", "_"); + matPreviewAssetId = "ToolsModule:" + matPreviewAssetId; + if (AssetDatabase.isDeclaredAsset(matPreviewAssetId.c_str())) { - RectI shapeEdRect(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4); - resized |= mEditButton->resize(shapeEdRect.point, shapeEdRect.extent); + mPreviewImage->setBitmap(StringTable->insert(matPreviewAssetId.c_str())); + } + else + { + if (AssetDatabase.isDeclaredAsset(assetId)) + { + MaterialAsset* matAsset = AssetDatabase.acquireAsset(assetId); + if (matAsset && matAsset->getMaterialDefinition()) + { + mPreviewImage->_setBitmap(matAsset->getMaterialDefinition()->mDiffuseMapAssetId[0]); + } + } } - return resized; + if (mPreviewImage->getBitmapAsset().isNull()) + mPreviewImage->_setBitmap(StringTable->insert("ToolsModule:genericAssetIcon_image")); } IMPLEMENT_CONOBJECT(GuiInspectorTypeMaterialAssetId); diff --git a/Engine/source/T3D/assets/MaterialAsset.h b/Engine/source/T3D/assets/MaterialAsset.h index fb5e01235..efb677ef6 100644 --- a/Engine/source/T3D/assets/MaterialAsset.h +++ b/Engine/source/T3D/assets/MaterialAsset.h @@ -57,6 +57,7 @@ #include "materials/customMaterialDefinition.h" #include "materials/materialManager.h" #include "assetMacroHelpers.h" +#include //----------------------------------------------------------------------------- class MaterialAsset : public AssetBase @@ -140,13 +141,21 @@ class GuiInspectorTypeMaterialAssetPtr : public GuiInspectorTypeFileName typedef GuiInspectorTypeFileName Parent; public: - GuiBitmapButtonCtrl* mEditButton; + GuiTextCtrl* mLabel; + GuiBitmapButtonCtrl* mPreviewBorderButton; + GuiBitmapCtrl* mPreviewImage; + GuiButtonCtrl* mEditButton; DECLARE_CONOBJECT(GuiInspectorTypeMaterialAssetPtr); static void consoleInit(); virtual GuiControl* constructEditControl(); virtual bool updateRects(); + + virtual void updateValue(); + + void updatePreviewImage(); + void setPreviewImage(StringTableEntry assetId); }; class GuiInspectorTypeMaterialAssetId : public GuiInspectorTypeMaterialAssetPtr diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp index b7225c8a0..6eedbfaeb 100644 --- a/Engine/source/T3D/assets/ShapeAsset.cpp +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -745,12 +745,15 @@ void GuiInspectorTypeShapeAssetPtr::consoleInit() GuiControl* GuiInspectorTypeShapeAssetPtr::constructEditControl() { // Create base filename edit controls - GuiControl *retCtrl = Parent::constructEditControl(); + GuiControl* retCtrl = Parent::constructEditControl(); if (retCtrl == NULL) return retCtrl; // Change filespec char szBuffer[512]; + + const char* previewImage; + if (mInspector->getInspectObject() != nullptr) { dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, %s);", @@ -758,6 +761,8 @@ GuiControl* GuiInspectorTypeShapeAssetPtr::constructEditControl() mBrowseButton->setField("Command", szBuffer); setDataField(StringTable->insert("targetObject"), NULL, mInspector->getInspectObject()->getIdString()); + + previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL); } else { @@ -765,52 +770,136 @@ GuiControl* GuiInspectorTypeShapeAssetPtr::constructEditControl() dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.showDialog(\"ShapeAsset\", \"AssetBrowser.changeAsset\", %s, \"%s\");", mInspector->getIdString(), mVariableName); mBrowseButton->setField("Command", szBuffer); + + previewImage = Con::getVariable(mVariableName); } - // Create "Open in ShapeEditor" button - mShapeEdButton = new GuiBitmapButtonCtrl(); + mLabel = new GuiTextCtrl(); + mLabel->registerObject(); + mLabel->setControlProfile(mProfile); + mLabel->setText(mCaption); + addObject(mLabel); + + // + GuiTextEditCtrl* editTextCtrl = static_cast(retCtrl); + GuiControlProfile* toolEditProfile; + if (Sim::findObject("ToolsGuiTextEditProfile", toolEditProfile)) + editTextCtrl->setControlProfile(toolEditProfile); + + GuiControlProfile* toolDefaultProfile = nullptr; + Sim::findObject("ToolsGuiDefaultProfile", toolDefaultProfile); + + // + mPreviewImage = new GuiBitmapCtrl(); + mPreviewImage->registerObject(); + + if (toolDefaultProfile) + mPreviewImage->setControlProfile(toolDefaultProfile); + + updatePreviewImage(); + + addObject(mPreviewImage); + + // + mPreviewBorderButton = new GuiBitmapButtonCtrl(); + mPreviewBorderButton->registerObject(); + + if (toolDefaultProfile) + mPreviewBorderButton->setControlProfile(toolDefaultProfile); + + mPreviewBorderButton->_setBitmap(StringTable->insert("ToolsModule:cubemapBtnBorder_n_image")); + + mPreviewBorderButton->setField("Command", szBuffer); //clicking the preview does the same thing as the edit button, for simplicity + addObject(mPreviewBorderButton); + + // + // Create "Open in Editor" button + mEditButton = new GuiBitmapButtonCtrl(); dSprintf(szBuffer, sizeof(szBuffer), "ShapeEditorPlugin.openShapeAssetId(%d.getText());", retCtrl->getId()); - mShapeEdButton->setField("Command", szBuffer); + mEditButton->setField("Command", szBuffer); - char bitmapName[512] = "ToolsModule:shape_editor_n_image"; - mShapeEdButton->setBitmap(StringTable->insert(bitmapName)); + mEditButton->setText("Edit"); + mEditButton->setSizing(horizResizeLeft, vertResizeAspectTop); - mShapeEdButton->setDataField(StringTable->insert("Profile"), NULL, "GuiButtonProfile"); - mShapeEdButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); - mShapeEdButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); - mShapeEdButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this file in the Shape Editor"); + mEditButton->setDataField(StringTable->insert("Profile"), NULL, "ToolsGuiButtonProfile"); + mEditButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); + mEditButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); + mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Material Editor"); - mShapeEdButton->registerObject(); - addObject(mShapeEdButton); + mEditButton->registerObject(); + addObject(mEditButton); + + // + mUseHeightOverride = true; + mHeightOverride = 72; return retCtrl; } bool GuiInspectorTypeShapeAssetPtr::updateRects() { + S32 rowSize = 18; S32 dividerPos, dividerMargin; mInspector->getDivider(dividerPos, dividerMargin); Point2I fieldExtent = getExtent(); Point2I fieldPos = getPosition(); - mCaptionRect.set(0, 0, fieldExtent.x - dividerPos - dividerMargin, fieldExtent.y); - mEditCtrlRect.set(fieldExtent.x - dividerPos + dividerMargin, 1, dividerPos - dividerMargin - 34, fieldExtent.y); + mEditCtrlRect.set(0, 0, fieldExtent.x, fieldExtent.y); + mLabel->resize(Point2I(mProfile->mTextOffset.x, 0), Point2I(fieldExtent.x, rowSize)); - bool resized = mEdit->resize(mEditCtrlRect.point, mEditCtrlRect.extent); - if (mBrowseButton != NULL) + RectI previewRect = RectI(Point2I(mProfile->mTextOffset.x, rowSize), Point2I(50, 50)); + mPreviewBorderButton->resize(previewRect.point, previewRect.extent); + mPreviewImage->resize(previewRect.point, previewRect.extent); + + mEdit->resize(Point2I(previewRect.point.x + previewRect.extent.x + 10, rowSize * 1.5), Point2I(200, rowSize)); + + mEditButton->resize(Point2I(fieldExtent.x - 100, fieldExtent.y - rowSize), Point2I(100, rowSize)); + + mBrowseButton->setHidden(true); + + return true; +} + +void GuiInspectorTypeShapeAssetPtr::updateValue() +{ + Parent::updateValue(); + + updatePreviewImage(); +} + +void GuiInspectorTypeShapeAssetPtr::updatePreviewImage() +{ + const char* previewImage; + if (mInspector->getInspectObject() != nullptr) + previewImage = mInspector->getInspectObject()->getDataField(mCaption, NULL); + else + previewImage = Con::getVariable(mVariableName); + + String shpPreviewAssetId = String(previewImage) + "_PreviewImage"; + shpPreviewAssetId.replace(":", "_"); + shpPreviewAssetId = "ToolsModule:" + shpPreviewAssetId; + if (AssetDatabase.isDeclaredAsset(shpPreviewAssetId.c_str())) { - mBrowseRect.set(fieldExtent.x - 32, 2, 14, fieldExtent.y - 4); - resized |= mBrowseButton->resize(mBrowseRect.point, mBrowseRect.extent); + mPreviewImage->setBitmap(StringTable->insert(shpPreviewAssetId.c_str())); } - if (mShapeEdButton != NULL) + if (mPreviewImage->getBitmapAsset().isNull()) + mPreviewImage->_setBitmap(StringTable->insert("ToolsModule:genericAssetIcon_image")); +} + +void GuiInspectorTypeShapeAssetPtr::setPreviewImage(StringTableEntry assetId) +{ + String shpPreviewAssetId = String(assetId) + "_PreviewImage"; + shpPreviewAssetId.replace(":", "_"); + shpPreviewAssetId = "ToolsModule:" + shpPreviewAssetId; + if (AssetDatabase.isDeclaredAsset(shpPreviewAssetId.c_str())) { - RectI shapeEdRect(fieldExtent.x - 16, 2, 14, fieldExtent.y - 4); - resized |= mShapeEdButton->resize(shapeEdRect.point, shapeEdRect.extent); + mPreviewImage->setBitmap(StringTable->insert(shpPreviewAssetId.c_str())); } - return resized; + if (mPreviewImage->getBitmapAsset().isNull()) + mPreviewImage->_setBitmap(StringTable->insert("ToolsModule:genericAssetIcon_image")); } IMPLEMENT_CONOBJECT(GuiInspectorTypeShapeAssetId); diff --git a/Engine/source/T3D/assets/ShapeAsset.h b/Engine/source/T3D/assets/ShapeAsset.h index c648b0750..43710474c 100644 --- a/Engine/source/T3D/assets/ShapeAsset.h +++ b/Engine/source/T3D/assets/ShapeAsset.h @@ -221,13 +221,21 @@ class GuiInspectorTypeShapeAssetPtr : public GuiInspectorTypeFileName typedef GuiInspectorTypeFileName Parent; public: - GuiBitmapButtonCtrl* mShapeEdButton; + GuiTextCtrl* mLabel; + GuiBitmapButtonCtrl* mPreviewBorderButton; + GuiBitmapCtrl* mPreviewImage; + GuiButtonCtrl* mEditButton; DECLARE_CONOBJECT(GuiInspectorTypeShapeAssetPtr); static void consoleInit(); virtual GuiControl* constructEditControl(); virtual bool updateRects(); + + virtual void updateValue(); + + void updatePreviewImage(); + void setPreviewImage(StringTableEntry assetId); }; class GuiInspectorTypeShapeAssetId : public GuiInspectorTypeShapeAssetPtr diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index b74e6ee6f..06cbb1db3 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -411,8 +411,8 @@ bool TSStatic::_createShape() resetWorldBox(); mShapeInstance = new TSShapeInstance(mShape, isClientObject()); - if (isClientObject()) - mShapeInstance->cloneMaterialList(); + mShapeInstance->resetMaterialList(); + mShapeInstance->cloneMaterialList(); if (isGhost()) { @@ -1649,28 +1649,18 @@ void TSStatic::onInspect(GuiInspector* inspector) GuiControl* stack = dynamic_cast(materialGroup->findObjectByInternalName(StringTable->insert("Stack"))); //Do this on both the server and client - S32 materialCount = mShapeAsset->getShape()->materialList->getMaterialNameList().size(); //mMeshAsset->getMaterialCount(); + TSMaterialList* matList = mShapeInstance->getMaterialList(); + Vector matListNames = matList->getMaterialNameList(); + S32 materialCount = matListNames.size(); if (isServerObject()) { - //we need to update the editor - /*for (U32 i = 0; i < mFields.size(); i++) - { - //find any with the materialslot title and clear them out - if (FindMatch::isMatch("MaterialSlot*", mFields[i].mFieldName, false)) - { - setDataField(mFields[i].mFieldName, NULL, ""); - mFields.erase(i); - continue; - } - }*/ - //next, get a listing of our materials in the shape, and build our field list for them char matFieldName[128]; for (U32 i = 0; i < materialCount; i++) { - StringTableEntry materialname = StringTable->insert(mShapeAsset->getShape()->materialList->getMaterialName(i).c_str()); + StringTableEntry materialname = StringTable->insert(mShapeInstance->getMaterialList()->getMaterialName(i).c_str()); AssetPtr matAsset; if(MaterialAsset::getAssetByMaterialName(materialname, &matAsset) == MaterialAsset::Ok) @@ -1694,6 +1684,9 @@ void TSStatic::onInspect(GuiInspector* inspector) { StringTableEntry fieldValue = matAsset->getAssetId(); + GuiInspectorTypeMaterialAssetPtr* matFieldPtr = dynamic_cast(fieldGui); + matFieldPtr->setPreviewImage(fieldValue); + //Check if we'd already actually changed it, and display the modified value for (U32 c = 0; c < mChangingMaterials.size(); c++) { diff --git a/Engine/source/gui/controls/guiBitmapCtrl.cpp b/Engine/source/gui/controls/guiBitmapCtrl.cpp index 499311831..7a1d8b4f2 100644 --- a/Engine/source/gui/controls/guiBitmapCtrl.cpp +++ b/Engine/source/gui/controls/guiBitmapCtrl.cpp @@ -126,9 +126,6 @@ void GuiBitmapCtrl::inspectPostApply() void GuiBitmapCtrl::setBitmap( const char *name, bool resize ) { - if ( !isAwake() ) - return; - _setBitmap(StringTable->insert(name)); if (mBitmap && resize) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript index afa13fddf..47abe84bf 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript @@ -336,17 +336,14 @@ function GuiInspectorTypeImageAssetPtr::onControlDropped( %this, %payload, %posi return; %assetType = %payload.assetType; + %module = %payload.moduleName; + %assetName = %payload.assetName; if(%assetType $= "ImageAsset") { - %module = %payload.moduleName; - %asset = %payload.assetName; - - %oldValue = %this.targetObject.bitmapAsset; - %arrayIndex = ""; - - %targetObject = %this.targetObject; - %targetObject.bitmapAsset = %module @ ":" @ %asset; + %cmd = %this @ ".apply(\""@ %module @ ":" @ %assetName @ "\");"; + echo("Changing asset via the " @ %cmd @ " command"); + eval(%cmd); } EWorldEditor.isDirty = true; diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript index ffe6c53ac..0fee6599c 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript @@ -411,18 +411,14 @@ function GuiInspectorTypeShapeAssetPtr::onControlDropped( %this, %payload, %posi return; %assetType = %payload.assetType; + %module = %payload.moduleName; + %assetName = %payload.assetName; if(%assetType $= "ShapeAsset") { - %module = %payload.moduleName; - %asset = %payload.assetName; - - %oldValue = %this.targetObject.shapeAsset; - %arrayIndex = ""; - - %targetObject = %this.targetObject; - %targetObject.shapeAsset = %module @ ":" @ %asset; - + %cmd = %this @ ".apply(\""@ %module @ ":" @ %assetName @ "\");"; + echo("Changing asset via the " @ %cmd @ " command"); + eval(%cmd); } EWorldEditor.isDirty = true; diff --git a/Templates/BaseGame/game/tools/gui/profiles.ed.tscript b/Templates/BaseGame/game/tools/gui/profiles.ed.tscript index cd8e35888..1f83afeec 100644 --- a/Templates/BaseGame/game/tools/gui/profiles.ed.tscript +++ b/Templates/BaseGame/game/tools/gui/profiles.ed.tscript @@ -305,7 +305,7 @@ new GuiControlProfile( ToolsGuiTextEditProfile ) border = -2; // fix to display textEdit img //borderWidth = "1"; // fix to display textEdit img //borderColor = "100 100 100"; - fillColor = EditorSettings.value("Theme/fieldBGColor"); + fillColor = EditorSettings.value("Theme/dividerDarkColor"); fillColorHL = "75 75 75 255"; fillColorSEL = EditorSettings.value("Theme/fieldBGSELColor"); From 739a111fc257ddd8f132a321b20d6495452a6fc6 Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 8 Dec 2022 20:15:20 -0600 Subject: [PATCH 2/4] Re-added accidentally deleted line that removed the preview tooltip --- Engine/source/T3D/assets/ImageAsset.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index c2349ccef..e090c7838 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -475,6 +475,8 @@ GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() if (retCtrl == NULL) return retCtrl; + retCtrl->getRenderTooltipDelegate().bind(this, &GuiInspectorTypeImageAssetPtr::renderTooltip); + // Change filespec char szBuffer[512]; From 6f8df41c6d6129140c317ae602b2686386e03dff Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 8 Dec 2022 20:18:51 -0600 Subject: [PATCH 3/4] Remove debug messaging that isn't needed with the drag-n-drop field behavior --- .../game/tools/assetBrowser/scripts/assetTypes/image.tscript | 1 - .../game/tools/assetBrowser/scripts/assetTypes/material.tscript | 1 - .../game/tools/assetBrowser/scripts/assetTypes/shape.tscript | 1 - 3 files changed, 3 deletions(-) diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript index 47abe84bf..6e2e9deea 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript @@ -342,7 +342,6 @@ function GuiInspectorTypeImageAssetPtr::onControlDropped( %this, %payload, %posi if(%assetType $= "ImageAsset") { %cmd = %this @ ".apply(\""@ %module @ ":" @ %assetName @ "\");"; - echo("Changing asset via the " @ %cmd @ " command"); eval(%cmd); } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript index 70c32b6e3..ee6de7e73 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript @@ -595,7 +595,6 @@ function GuiInspectorTypeMaterialAssetPtr::onControlDropped( %this, %payload, %p if(%assetType $= "MaterialAsset") { %cmd = %this @ ".apply(\""@ %module @ ":" @ %assetName @ "\");"; - echo("Changing asset via the " @ %cmd @ " command"); eval(%cmd); } diff --git a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript index 0fee6599c..7ca8a3efe 100644 --- a/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript +++ b/Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript @@ -417,7 +417,6 @@ function GuiInspectorTypeShapeAssetPtr::onControlDropped( %this, %payload, %posi if(%assetType $= "ShapeAsset") { %cmd = %this @ ".apply(\""@ %module @ ":" @ %assetName @ "\");"; - echo("Changing asset via the " @ %cmd @ " command"); eval(%cmd); } From 74ac45e877043fe93d875cdb85d27ab234366e3d Mon Sep 17 00:00:00 2001 From: Areloch Date: Thu, 8 Dec 2022 23:45:56 -0600 Subject: [PATCH 4/4] Fixed Edit button tooltip for Shape Asset field Disabled Edit button on image asset field as there's no current image editor Fixed positioning of edit buttons to align with preview Fixed horizontal sizing for the edit control so it keeps to the width of the field Fixed handling on the preview display so if an invalid asset is input, it clears the preview display to help indicate it's invalid Disabled the MaterialSlot handling for TSStatics until it can be further refined --- Engine/source/T3D/assets/ImageAsset.cpp | 25 +++++++++++++++++----- Engine/source/T3D/assets/MaterialAsset.cpp | 19 ++++++++++++++-- Engine/source/T3D/assets/ShapeAsset.cpp | 21 +++++++++++++++--- Engine/source/T3D/tsStatic.cpp | 2 +- 4 files changed, 56 insertions(+), 11 deletions(-) diff --git a/Engine/source/T3D/assets/ImageAsset.cpp b/Engine/source/T3D/assets/ImageAsset.cpp index e090c7838..80f0053f1 100644 --- a/Engine/source/T3D/assets/ImageAsset.cpp +++ b/Engine/source/T3D/assets/ImageAsset.cpp @@ -542,7 +542,7 @@ GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() // // Create "Open in Editor" button - mEditButton = new GuiBitmapButtonCtrl(); + /*mEditButton = new GuiBitmapButtonCtrl(); dSprintf(szBuffer, sizeof(szBuffer), "AssetBrowser.editAsset(%d.getText());", retCtrl->getId()); mEditButton->setField("Command", szBuffer); @@ -553,10 +553,10 @@ GuiControl* GuiInspectorTypeImageAssetPtr::constructEditControl() mEditButton->setDataField(StringTable->insert("Profile"), NULL, "ToolsGuiButtonProfile"); mEditButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); mEditButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); - mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Material Editor"); + mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Image Editor"); mEditButton->registerObject(); - addObject(mEditButton); + addObject(mEditButton);*/ // mUseHeightOverride = true; @@ -580,9 +580,10 @@ bool GuiInspectorTypeImageAssetPtr::updateRects() mPreviewBorderButton->resize(previewRect.point, previewRect.extent); mPreviewImage->resize(previewRect.point, previewRect.extent); - mEdit->resize(Point2I(previewRect.point.x + previewRect.extent.x + 10, rowSize * 1.5), Point2I(200, rowSize)); + S32 editPos = previewRect.point.x + previewRect.extent.x + 10; + mEdit->resize(Point2I(editPos, rowSize * 1.5), Point2I(fieldExtent.x - editPos - 5, rowSize)); - mEditButton->resize(Point2I(fieldExtent.x - 100, fieldExtent.y - rowSize), Point2I(100, rowSize)); + //mEditButton->resize(Point2I(fieldExtent.x - 105, previewRect.point.y + previewRect.extent.y - rowSize), Point2I(100, rowSize)); mBrowseButton->setHidden(true); @@ -677,6 +678,13 @@ void GuiInspectorTypeImageAssetPtr::updatePreviewImage() else previewImage = Con::getVariable(mVariableName); + //if what we're working with isn't even a valid asset, don't present like we found a good one + if (!AssetDatabase.isDeclaredAsset(previewImage)) + { + mPreviewImage->_setBitmap(StringTable->EmptyString()); + return; + } + String imgPreviewAssetId = String(previewImage) + "_PreviewImage"; imgPreviewAssetId.replace(":", "_"); imgPreviewAssetId = "ToolsModule:" + imgPreviewAssetId; @@ -702,6 +710,13 @@ void GuiInspectorTypeImageAssetPtr::updatePreviewImage() void GuiInspectorTypeImageAssetPtr::setPreviewImage(StringTableEntry assetId) { + //if what we're working with isn't even a valid asset, don't present like we found a good one + if (!AssetDatabase.isDeclaredAsset(assetId)) + { + mPreviewImage->_setBitmap(StringTable->EmptyString()); + return; + } + String imgPreviewAssetId = String(assetId) + "_PreviewImage"; imgPreviewAssetId.replace(":", "_"); imgPreviewAssetId = "ToolsModule:" + imgPreviewAssetId; diff --git a/Engine/source/T3D/assets/MaterialAsset.cpp b/Engine/source/T3D/assets/MaterialAsset.cpp index 1965451a5..f5ef117ba 100644 --- a/Engine/source/T3D/assets/MaterialAsset.cpp +++ b/Engine/source/T3D/assets/MaterialAsset.cpp @@ -580,9 +580,10 @@ bool GuiInspectorTypeMaterialAssetPtr::updateRects() mPreviewBorderButton->resize(previewRect.point, previewRect.extent); mPreviewImage->resize(previewRect.point, previewRect.extent); - mEdit->resize(Point2I(previewRect.point.x + previewRect.extent.x + 10, rowSize * 1.5), Point2I(200, rowSize)); + S32 editPos = previewRect.point.x + previewRect.extent.x + 10; + mEdit->resize(Point2I(editPos, rowSize * 1.5), Point2I(fieldExtent.x - editPos - 5, rowSize)); - mEditButton->resize(Point2I(fieldExtent.x - 100, fieldExtent.y - rowSize), Point2I(100, rowSize)); + mEditButton->resize(Point2I(fieldExtent.x - 105, previewRect.point.y + previewRect.extent.y - rowSize), Point2I(100, rowSize)); mBrowseButton->setHidden(true); @@ -604,6 +605,13 @@ void GuiInspectorTypeMaterialAssetPtr::updatePreviewImage() else previewImage = Con::getVariable(mVariableName); + //if what we're working with isn't even a valid asset, don't present like we found a good one + if (!AssetDatabase.isDeclaredAsset(previewImage)) + { + mPreviewImage->_setBitmap(StringTable->EmptyString()); + return; + } + String matPreviewAssetId = String(previewImage) + "_PreviewImage"; matPreviewAssetId.replace(":", "_"); matPreviewAssetId = "ToolsModule:" + matPreviewAssetId; @@ -629,6 +637,13 @@ void GuiInspectorTypeMaterialAssetPtr::updatePreviewImage() void GuiInspectorTypeMaterialAssetPtr::setPreviewImage(StringTableEntry assetId) { + //if what we're working with isn't even a valid asset, don't present like we found a good one + if (!AssetDatabase.isDeclaredAsset(assetId)) + { + mPreviewImage->_setBitmap(StringTable->EmptyString()); + return; + } + String matPreviewAssetId = String(assetId) + "_PreviewImage"; matPreviewAssetId.replace(":", "_"); matPreviewAssetId = "ToolsModule:" + matPreviewAssetId; diff --git a/Engine/source/T3D/assets/ShapeAsset.cpp b/Engine/source/T3D/assets/ShapeAsset.cpp index 6eedbfaeb..3f67227e2 100644 --- a/Engine/source/T3D/assets/ShapeAsset.cpp +++ b/Engine/source/T3D/assets/ShapeAsset.cpp @@ -825,7 +825,7 @@ GuiControl* GuiInspectorTypeShapeAssetPtr::constructEditControl() mEditButton->setDataField(StringTable->insert("Profile"), NULL, "ToolsGuiButtonProfile"); mEditButton->setDataField(StringTable->insert("tooltipprofile"), NULL, "GuiToolTipProfile"); mEditButton->setDataField(StringTable->insert("hovertime"), NULL, "1000"); - mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Material Editor"); + mEditButton->setDataField(StringTable->insert("tooltip"), NULL, "Open this asset in the Shape Editor"); mEditButton->registerObject(); addObject(mEditButton); @@ -852,9 +852,10 @@ bool GuiInspectorTypeShapeAssetPtr::updateRects() mPreviewBorderButton->resize(previewRect.point, previewRect.extent); mPreviewImage->resize(previewRect.point, previewRect.extent); - mEdit->resize(Point2I(previewRect.point.x + previewRect.extent.x + 10, rowSize * 1.5), Point2I(200, rowSize)); + S32 editPos = previewRect.point.x + previewRect.extent.x + 10; + mEdit->resize(Point2I(editPos, rowSize * 1.5), Point2I(fieldExtent.x - editPos - 5, rowSize)); - mEditButton->resize(Point2I(fieldExtent.x - 100, fieldExtent.y - rowSize), Point2I(100, rowSize)); + mEditButton->resize(Point2I(fieldExtent.x - 105, previewRect.point.y + previewRect.extent.y - rowSize), Point2I(100, rowSize)); mBrowseButton->setHidden(true); @@ -876,6 +877,13 @@ void GuiInspectorTypeShapeAssetPtr::updatePreviewImage() else previewImage = Con::getVariable(mVariableName); + //if what we're working with isn't even a valid asset, don't present like we found a good one + if (!AssetDatabase.isDeclaredAsset(previewImage)) + { + mPreviewImage->_setBitmap(StringTable->EmptyString()); + return; + } + String shpPreviewAssetId = String(previewImage) + "_PreviewImage"; shpPreviewAssetId.replace(":", "_"); shpPreviewAssetId = "ToolsModule:" + shpPreviewAssetId; @@ -890,6 +898,13 @@ void GuiInspectorTypeShapeAssetPtr::updatePreviewImage() void GuiInspectorTypeShapeAssetPtr::setPreviewImage(StringTableEntry assetId) { + //if what we're working with isn't even a valid asset, don't present like we found a good one + if (!AssetDatabase.isDeclaredAsset(assetId)) + { + mPreviewImage->_setBitmap(StringTable->EmptyString()); + return; + } + String shpPreviewAssetId = String(assetId) + "_PreviewImage"; shpPreviewAssetId.replace(":", "_"); shpPreviewAssetId = "ToolsModule:" + shpPreviewAssetId; diff --git a/Engine/source/T3D/tsStatic.cpp b/Engine/source/T3D/tsStatic.cpp index 06cbb1db3..a93c90949 100644 --- a/Engine/source/T3D/tsStatic.cpp +++ b/Engine/source/T3D/tsStatic.cpp @@ -1638,7 +1638,7 @@ void TSStatic::getUtilizedAssets(Vector* usedAssetsList) #ifdef TORQUE_TOOLS void TSStatic::onInspect(GuiInspector* inspector) { - if (mShapeAsset == nullptr) + //if (mShapeAsset == nullptr) return; //Put the GameObject group before everything that'd be gameobject-effecting, for orginazational purposes