1 // SPDX-FileCopyrightText: 2003-2020 The KPhotoAlbum Development Team 2 // SPDX-FileCopyrightText: 2021 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 3 // 4 // SPDX-License-Identifier: GPL-2.0-or-later 5 6 #ifndef THUMBNAILFACADE_H 7 #define THUMBNAILFACADE_H 8 #include "ThumbnailFactory.h" 9 #include "ThumbnailWidget.h" 10 11 #include <kpabase/FileNameList.h> 12 13 class KActionCollection; 14 class QSlider; 15 16 namespace DB 17 { 18 class ImageSearchInfo; 19 } 20 namespace ImageManager 21 { 22 class ThumbnailCache; 23 } 24 25 namespace ThumbnailView 26 { 27 class ThumbnailModel; 28 class CellGeometry; 29 class FilterWidget; 30 class ThumbnailPainter; 31 class ThumbnailToolTip; 32 33 class ThumbnailFacade : public QObject, public ThumbnailFactory 34 { 35 Q_OBJECT 36 public: 37 static ThumbnailFacade *instance(); 38 ThumbnailFacade(ImageManager::ThumbnailCache *thumbnailCache); 39 QWidget *gui(); 40 void setCurrentItem(const DB::FileName &fileName); 41 void reload(SelectionUpdateMethod method); 42 DB::FileNameList selection(ThumbnailView::SelectionMode mode = ExpandCollapsedStacks) const; 43 DB::FileNameList imageList(Order) const; 44 DB::FileName mediaIdUnderCursor() const; 45 DB::FileName currentItem() const; 46 void setImageList(const DB::FileNameList &list); 47 void setSortDirection(SortDirection); 48 /** 49 * @brief createResizeSlider returns a QSlider that can be used to resize the thumbnail grid. 50 * @return a (horizontal) QSlider 51 */ 52 QSlider *createResizeSlider(); 53 54 /** 55 * @brief filterWidget provides a FilterWidget that is connected to the ThumbnailModel. 56 * The widget will reflect changes in the filter and can be used to set the filter. 57 * @return a FilterWidget 58 */ 59 FilterWidget *createFilterWidget(QWidget *parent); 60 61 public slots: 62 void gotoDate(const DB::ImageDate &date, bool includeRanges); 63 void selectAll(); 64 void clearSelection(); 65 void showToolTipsOnImages(bool b); 66 void toggleStackExpansion(const DB::FileName &id); 67 void collapseAllStacks(); 68 void expandAllStacks(); 69 void updateDisplayModel(); 70 void changeSingleSelection(const DB::FileName &fileName); 71 void slotRecreateThumbnail(); 72 73 void clearFilter(); 74 void setFreeformFilter(const QString &text); 75 76 signals: 77 void showImage(const DB::FileName &id); 78 void showSelection(); 79 void showSearch(); 80 void fileIdUnderCursorChanged(const DB::FileName &id); 81 void currentDateChanged(const Utilities::FastDateTime &); 82 void selectionChanged(int numberOfItemsSelected); 83 void collapseAllStacksEnabled(bool enabled); 84 void expandAllStacksEnabled(bool enabled); 85 void filterChanged(const DB::ImageSearchInfo &); 86 87 private: 88 ThumbnailModel *model() override; 89 CellGeometry *cellGeometry() override; 90 ThumbnailWidget *widget() override; 91 92 private: 93 static ThumbnailFacade *s_instance; 94 CellGeometry *m_cellGeometry; 95 ThumbnailModel *m_model; 96 ThumbnailWidget *m_widget; 97 ThumbnailPainter *m_painter; 98 ThumbnailToolTip *m_toolTip; 99 ImageManager::ThumbnailCache *m_thumbnailCache; 100 }; 101 } 102 103 #endif /* THUMBNAILFACADE_H */ 104 105 // vi:expandtab:tabstop=4 shiftwidth=4: 106