diff --git a/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_FillType.h b/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_FillType.h index 8218a9fa65..129553cdf2 100644 --- a/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_FillType.h +++ b/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_FillType.h @@ -27,7 +27,7 @@ #include "../jucer_JucerDocument.h" #include "../jucer_UtilityFunctions.h" - +#include "../../Project Saving/jucer_ResourceFile.h" //============================================================================== class JucerFillType @@ -147,7 +147,7 @@ public: case imageBrush: { - const String imageVariable ("cachedImage_" + imageResourceName + "_" + String (code.getUniqueSuffix())); + const String imageVariable ("cachedImage_" + imageResourceName.replace ("::", "_") + "_" + String (code.getUniqueSuffix())); code.addImageResourceLoader (imageVariable, imageResourceName); @@ -191,7 +191,7 @@ public: + ", 1=" + gradCol2.toString(); case imageBrush: - return "image: " + imageResourceName + return "image: " + imageResourceName.replaceCharacter (':', '#') + ", " + String (imageOpacity) + ", " @@ -236,7 +236,7 @@ public: else if (toks[0] == "image") { mode = imageBrush; - imageResourceName = toks[1]; + imageResourceName = toks[1].replaceCharacter ('#', ':'); imageOpacity = toks[2].getDoubleValue(); imageAnchor= RelativePositionedRectangle(); imageAnchor.rect = PositionedRectangle (toks[3]); @@ -340,7 +340,30 @@ private: if (image.isNull()) { if (document != nullptr) - image = document->getResources().getImageFromCache (imageResourceName); + { + if (imageResourceName.contains ("::")) + { + if (Project* project = document->getCppDocument().getProject()) + { + ResourceFile resourceFile (*project); + + for (int i = 0; i < resourceFile.getNumFiles(); ++i) + { + const File& file = resourceFile.getFile(i); + + if (imageResourceName == resourceFile.getClassName() + "::" + resourceFile.getDataVariableFor (file)) + { + image = ImageCache::getFromFile (file); + break; + } + } + } + } + else + { + image = document->getResources().getImageFromCache (imageResourceName); + } + } if (image.isNull()) { diff --git a/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h b/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h index 7d7b77381d..eb833973d6 100644 --- a/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h +++ b/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_ImageResourceProperty.h @@ -25,6 +25,7 @@ #ifndef __JUCER_IMAGERESOURCEPROPERTY_JUCEHEADER__ #define __JUCER_IMAGERESOURCEPROPERTY_JUCEHEADER__ +#include "../../Project Saving/jucer_ResourceFile.h" //============================================================================== /** @@ -44,12 +45,7 @@ public: element (e), document (doc), allowChoiceOfNoResource (allowChoiceOfNoResource_) { - choices.add ("-- create a new image resource -- "); - choices.add (String::empty); - if (allowChoiceOfNoResource_) - choices.add ("<< none >>"); - choices.addArray (doc.getResources().getResourceNames()); - + refreshChoices(); doc.addChangeListener (this); } @@ -59,13 +55,7 @@ public: element (e), document (*e->getDocument()), allowChoiceOfNoResource (allowChoiceOfNoResource_) { - choices.add ("-- create a new image resource -- "); - choices.add (String::empty); - if (allowChoiceOfNoResource_) - choices.add ("<< none >>"); - - choices.addArray (document.getResources().getResourceNames()); - + refreshChoices(); document.addChangeListener (this); } @@ -95,7 +85,7 @@ public: } else { - if (choices[newIndex] == "<< none >>" && allowChoiceOfNoResource) + if (choices[newIndex] == getNoneText() && allowChoiceOfNoResource) setResource (String::empty); else setResource (choices [newIndex]); @@ -115,6 +105,36 @@ public: refresh(); } + void refreshChoices() + { + choices.clear(); + + choices.add ("-- create a new image resource -- "); + choices.add (String::empty); + + if (allowChoiceOfNoResource) + choices.add (getNoneText()); + + choices.addArray (document.getResources().getResourceNames()); + + const SourceCodeDocument& cpp = document.getCppDocument(); + + if (Project* project = cpp.getProject()) + { + ResourceFile resourceFile (*project); + + for (int i = 0; i < resourceFile.getNumFiles(); ++i) + { + const File& file = resourceFile.getFile(i); + + if (ImageFileFormat::findImageFormatForFileExtension(file)) + choices.add (resourceFile.getClassName() + "::" + resourceFile.getDataVariableFor (file)); + } + } + } + + const char* getNoneText() noexcept { return "<< none >>"; } + protected: mutable Component::SafePointer element; JucerDocument& document; diff --git a/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_PaintElementImage.h b/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_PaintElementImage.h index e485d43865..fa62303e9d 100644 --- a/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_PaintElementImage.h +++ b/extras/Introjucer/Source/ComponentEditor/paintelements/jucer_PaintElementImage.h @@ -100,7 +100,7 @@ public: { if (dynamic_cast (getDrawable()) != 0) { - const String imageVariable ("cachedImage_" + resourceName); + const String imageVariable ("cachedImage_" + resourceName.replace ("::", "_")); code.addImageResourceLoader (imageVariable, resourceName); diff --git a/extras/Introjucer/Source/Project Saving/jucer_ResourceFile.h b/extras/Introjucer/Source/Project Saving/jucer_ResourceFile.h index 64d7887bcd..5efe0f3252 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ResourceFile.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ResourceFile.h @@ -46,6 +46,8 @@ public: String getSizeVariableFor (const File& file) const; int getNumFiles() const { return files.size(); } + const File& getFile (int index) const { return files.getReference (index); } + int64 getTotalDataSize() const; bool write (Array& filesCreated, int maxFileSize);