/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #pragma once #if !defined(Q_MOC_RUN) #include #include #include #include #include #include #include #include #endif namespace Ui { class ImagePreviewerClass; } namespace AzToolsFramework { namespace AssetBrowser { class ProductAssetBrowserEntry; class SourceAssetBrowserEntry; class AssetBrowserEntry; } } class QResizeEvent; namespace ImageProcessingAtom { class ImagePreviewer : public AzToolsFramework::AssetBrowser::Previewer , private AZ::SystemTickBus::Handler { Q_OBJECT public: AZ_CLASS_ALLOCATOR(ImagePreviewer, AZ::SystemAllocator, 0); explicit ImagePreviewer(QWidget* parent = nullptr); ~ImagePreviewer(); //! AzToolsFramework::AssetBrowser::Previewer overrides void Clear() const override; void Display(const AzToolsFramework::AssetBrowser::AssetBrowserEntry* entry) override; const QString& GetName() const override; protected: void resizeEvent(QResizeEvent * event) override; private: void DisplayProduct(const AzToolsFramework::AssetBrowser::ProductAssetBrowserEntry* product); void DisplaySource(const AzToolsFramework::AssetBrowser::SourceAssetBrowserEntry* source); QString GetFileSize(const char* path); void DisplayTextureItem(); template void CreateAndDisplayTextureItemAsync(CreateFn create); void PreviewSubImage(uint32_t mip); // QLabel word wrap does not break long words such as filenames, so manual word wrap needed static QString WordWrap(const QString& string, int maxLength); // SystemTickBus void OnSystemTick() override; QScopedPointer m_ui; QString m_fileinfo; QString m_name = "ImagePreviewer"; // Decompressed image in preview. Cache it so we can preview its sub images IImageObjectPtr m_previewImageObject; // Properties for tracking the status of an asynchronous request to display an asset browser entry using CreateDisplayTextureResult = AZStd::pair; QFuture m_createDisplayTextureResult; }; }//namespace ImageProcessingAtom