File indexing completed on 2024-04-28 04:21:22

0001 // SPDX-FileCopyrightText: 2003-2020 The KPhotoAlbum Development Team
0002 // SPDX-FileCopyrightText: 2021-2023 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #ifndef THUMBNAILFACADE_H
0007 #define THUMBNAILFACADE_H
0008 #include "ThumbnailFactory.h"
0009 #include "ThumbnailWidget.h"
0010 
0011 #include <kpabase/FileNameList.h>
0012 
0013 class KActionCollection;
0014 class QSlider;
0015 
0016 namespace DB
0017 {
0018 class ImageSearchInfo;
0019 }
0020 namespace ImageManager
0021 {
0022 class ThumbnailCache;
0023 }
0024 
0025 namespace ThumbnailView
0026 {
0027 class ThumbnailModel;
0028 class CellGeometry;
0029 class FilterWidget;
0030 class ThumbnailPainter;
0031 class ThumbnailToolTip;
0032 
0033 class ThumbnailFacade : public QObject, public ThumbnailFactory
0034 {
0035     Q_OBJECT
0036 public:
0037     static ThumbnailFacade *instance();
0038     ThumbnailFacade(ImageManager::ThumbnailCache *thumbnailCache);
0039     QWidget *gui();
0040     void setCurrentItem(const DB::FileName &fileName);
0041     void reload(SelectionUpdateMethod method);
0042     DB::FileNameList selection(ThumbnailView::SelectionMode mode = ExpandCollapsedStacks) const;
0043     DB::FileNameList imageList(Order) const;
0044     DB::FileName mediaIdUnderCursor() const;
0045     DB::FileName currentItem() const;
0046     void setImageList(const DB::FileNameList &list);
0047     void setSortDirection(SortDirection);
0048     /**
0049      * @brief createResizeSlider returns a QSlider that can be used to resize the thumbnail grid.
0050      * @return a (horizontal) QSlider
0051      */
0052     QSlider *createResizeSlider();
0053 
0054     /**
0055      * @brief filterWidget provides a FilterWidget that is connected to the ThumbnailModel.
0056      * The widget will reflect changes in the filter and can be used to set the filter.
0057      * @return a FilterWidget
0058      */
0059     FilterWidget *createFilterWidget(QWidget *parent);
0060 
0061 public Q_SLOTS:
0062     void gotoDate(const DB::ImageDate &date, bool includeRanges);
0063     void selectAll();
0064     void clearSelection();
0065     void showToolTipsOnImages(bool b);
0066     void toggleStackExpansion(const DB::FileName &id);
0067     void collapseAllStacks();
0068     void expandAllStacks();
0069     void updateDisplayModel();
0070     void changeSingleSelection(const DB::FileName &fileName);
0071 
0072     void clearFilter();
0073     void setFreeformFilter(const QString &text);
0074 
0075 Q_SIGNALS:
0076     void showImage(const DB::FileName &id);
0077     void showSelection();
0078     void showSearch();
0079     void fileIdUnderCursorChanged(const DB::FileName &id);
0080     void currentDateChanged(const Utilities::FastDateTime &);
0081     void selectionChanged(int numberOfItemsSelected);
0082     void collapseAllStacksEnabled(bool enabled);
0083     void expandAllStacksEnabled(bool enabled);
0084     void filterChanged(const DB::ImageSearchInfo &);
0085 
0086 private:
0087     ThumbnailModel *model() override;
0088     CellGeometry *cellGeometry() override;
0089     ThumbnailWidget *widget() override;
0090 
0091 private:
0092     static ThumbnailFacade *s_instance;
0093     CellGeometry *m_cellGeometry;
0094     ThumbnailModel *m_model;
0095     ThumbnailWidget *m_widget;
0096     ThumbnailToolTip *m_toolTip;
0097     ImageManager::ThumbnailCache *m_thumbnailCache;
0098 };
0099 }
0100 
0101 #endif /* THUMBNAILFACADE_H */
0102 
0103 // vi:expandtab:tabstop=4 shiftwidth=4: