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