/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2013 - Raw Material Software Ltd. Permission is granted to use this software under the terms of either: a) the GPL v2 (or any later version) b) the Affero GPL v3 Details of these licenses can be found at: www.gnu.org/licenses JUCE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ------------------------------------------------------------------------------ To release a closed-source product which uses JUCE, commercial licenses are available: visit www.juce.com for more information. ============================================================================== */ #ifndef __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__ #define __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__ //============================================================================== /** */ class ItemPreviewComponent : public Component { public: ItemPreviewComponent (const File& f) : file (f) { setOpaque (true); tryToLoadImage(); } void paint (Graphics& g) { IntrojucerLookAndFeel::fillWithBackgroundTexture (*this, g); if (drawable != nullptr) { Rectangle area = RectanglePlacement (RectanglePlacement::centred | RectanglePlacement::onlyReduceInSize) .appliedTo (drawable->getBounds(), Rectangle (4, 22, getWidth() - 8, getHeight() - 26)); Path p; p.addRectangle (area); DropShadow (Colours::black.withAlpha (0.5f), 6, Point (0, 1)).drawForPath (g, p); g.fillCheckerBoard (area, 24, 24, Colour (0xffffffff), Colour (0xffeeeeee)); g.setOpacity (1.0f); drawable->drawWithin (g, area.toFloat(), RectanglePlacement::stretchToFit, 1.0f); } g.setFont (Font (14.0f, Font::bold)); g.setColour (findColour (mainBackgroundColourId).contrasting()); g.drawMultiLineText (facts.joinIntoString ("\n"), 10, 15, getWidth() - 16); } private: StringArray facts; File file; ScopedPointer drawable; void tryToLoadImage() { facts.clear(); facts.add (file.getFullPathName()); drawable = nullptr; { ScopedPointer input (file.createInputStream()); if (input != nullptr) { const int64 totalSize = input->getTotalLength(); String formatName; if (ImageFileFormat* format = ImageFileFormat::findImageFormatForStream (*input)) formatName = " " + format->getFormatName(); input = nullptr; Image image (ImageCache::getFromFile (file)); if (image.isValid()) { DrawableImage* d = new DrawableImage(); d->setImage (image); drawable = d; facts.add (String (image.getWidth()) + " x " + String (image.getHeight()) + formatName); } if (totalSize > 0) facts.add (File::descriptionOfSizeInBytes (totalSize)); } } if (drawable == nullptr) { ScopedPointer svg (XmlDocument::parse (file)); if (svg != nullptr) drawable = Drawable::createFromSVG (*svg); } facts.removeEmptyStrings (true); } JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ItemPreviewComponent) }; #endif // __JUCER_FILEPREVIEWCOMPONENT_JUCEHEADER__