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 #include "ThumbnailFacade.h" 0007 0008 #include "CellGeometry.h" 0009 #include "FilterWidget.h" 0010 #include "GridResizeSlider.h" 0011 #include "ThumbnailModel.h" 0012 #include "ThumbnailToolTip.h" 0013 #include "ThumbnailWidget.h" 0014 0015 #include <BackgroundJobs/HandleVideoThumbnailRequestJob.h> 0016 #include <kpabase/SettingsData.h> 0017 #include <kpathumbnails/ThumbnailCache.h> 0018 0019 ThumbnailView::ThumbnailFacade *ThumbnailView::ThumbnailFacade::s_instance = nullptr; 0020 ThumbnailView::ThumbnailFacade::ThumbnailFacade(ImageManager::ThumbnailCache *thumbnailCache) 0021 : m_cellGeometry(nullptr) 0022 , m_model(nullptr) 0023 , m_widget(nullptr) 0024 , m_toolTip(nullptr) 0025 , m_thumbnailCache(thumbnailCache) 0026 { 0027 // To avoid one of the components references one of the other before it has been initialized, we first construct them all with null. 0028 m_cellGeometry = new CellGeometry(this); 0029 m_model = new ThumbnailModel(this, m_thumbnailCache); 0030 m_widget = new ThumbnailWidget(this); 0031 // I don't want to introduce a strong interdependency between ThumbnailWidget and ThumbnailToolTip, 0032 // hence I don't want to push the tooltip construction into the thumbnail widget. 0033 // Unfortunately, this causes a warning in lgtm: 0034 m_toolTip = new ThumbnailToolTip(m_widget); // lgtm [cpp/resource-not-released-in-destructor] 0035 0036 connect(m_widget, &ThumbnailWidget::showImage, this, &ThumbnailFacade::showImage); 0037 connect(m_widget, &ThumbnailWidget::showSelection, this, &ThumbnailFacade::showSelection); 0038 connect(m_widget, &ThumbnailWidget::showSearch, this, &ThumbnailFacade::showSearch); 0039 connect(m_widget, &ThumbnailWidget::fileIdUnderCursorChanged, this, &ThumbnailFacade::fileIdUnderCursorChanged); 0040 connect(m_widget, &ThumbnailWidget::currentDateChanged, this, &ThumbnailFacade::currentDateChanged); 0041 connect(m_widget, &ThumbnailWidget::selectionCountChanged, this, &ThumbnailFacade::selectionChanged); 0042 connect(m_model, &ThumbnailModel::collapseAllStacksEnabled, this, &ThumbnailFacade::collapseAllStacksEnabled); 0043 connect(m_model, &ThumbnailModel::expandAllStacksEnabled, this, &ThumbnailFacade::expandAllStacksEnabled); 0044 connect(m_model, &ThumbnailModel::filterChanged, this, &ThumbnailFacade::filterChanged); 0045 0046 s_instance = this; 0047 } 0048 0049 QWidget *ThumbnailView::ThumbnailFacade::gui() 0050 { 0051 return m_widget; 0052 } 0053 0054 void ThumbnailView::ThumbnailFacade::gotoDate(const DB::ImageDate &date, bool b) 0055 { 0056 m_widget->gotoDate(date, b); 0057 } 0058 0059 void ThumbnailView::ThumbnailFacade::setCurrentItem(const DB::FileName &fileName) 0060 { 0061 widget()->setCurrentItem(fileName); 0062 } 0063 0064 void ThumbnailView::ThumbnailFacade::reload(SelectionUpdateMethod method) 0065 { 0066 m_widget->reload(method); 0067 } 0068 0069 DB::FileNameList ThumbnailView::ThumbnailFacade::selection(ThumbnailView::SelectionMode mode) const 0070 { 0071 return m_widget->selection(mode); 0072 } 0073 0074 DB::FileNameList ThumbnailView::ThumbnailFacade::imageList(Order order) const 0075 { 0076 return m_model->imageList(order); 0077 } 0078 0079 DB::FileName ThumbnailView::ThumbnailFacade::mediaIdUnderCursor() const 0080 { 0081 return m_widget->mediaIdUnderCursor(); 0082 } 0083 0084 DB::FileName ThumbnailView::ThumbnailFacade::currentItem() const 0085 { 0086 const auto index = m_widget->currentIndex(); 0087 if (!index.isValid()) { 0088 return DB::FileName(); 0089 } 0090 return m_model->imageAt(m_widget->currentIndex().row()); 0091 } 0092 0093 void ThumbnailView::ThumbnailFacade::setImageList(const DB::FileNameList &list) 0094 { 0095 m_model->setImageList(list); 0096 } 0097 0098 void ThumbnailView::ThumbnailFacade::setSortDirection(SortDirection direction) 0099 { 0100 m_model->setSortDirection(direction); 0101 } 0102 0103 QSlider *ThumbnailView::ThumbnailFacade::createResizeSlider() 0104 { 0105 return new GridResizeSlider(this); 0106 } 0107 0108 ThumbnailView::FilterWidget *ThumbnailView::ThumbnailFacade::createFilterWidget(QWidget *parent) 0109 { 0110 return model()->createFilterWidget(parent); 0111 } 0112 0113 void ThumbnailView::ThumbnailFacade::selectAll() 0114 { 0115 m_widget->selectAll(); 0116 } 0117 0118 void ThumbnailView::ThumbnailFacade::clearSelection() 0119 { 0120 m_widget->clearSelection(); 0121 } 0122 0123 void ThumbnailView::ThumbnailFacade::showToolTipsOnImages(bool on) 0124 { 0125 m_toolTip->setActive(on); 0126 } 0127 0128 void ThumbnailView::ThumbnailFacade::toggleStackExpansion(const DB::FileName &fileName) 0129 { 0130 m_model->toggleStackExpansion(fileName); 0131 } 0132 0133 void ThumbnailView::ThumbnailFacade::collapseAllStacks() 0134 { 0135 m_model->collapseAllStacks(); 0136 } 0137 0138 void ThumbnailView::ThumbnailFacade::expandAllStacks() 0139 { 0140 m_model->expandAllStacks(); 0141 } 0142 0143 void ThumbnailView::ThumbnailFacade::updateDisplayModel() 0144 { 0145 m_model->updateDisplayModel(); 0146 } 0147 0148 void ThumbnailView::ThumbnailFacade::changeSingleSelection(const DB::FileName &fileName) 0149 { 0150 m_widget->changeSingleSelection(fileName); 0151 } 0152 0153 ThumbnailView::ThumbnailModel *ThumbnailView::ThumbnailFacade::model() 0154 { 0155 Q_ASSERT(m_model); 0156 return m_model; 0157 } 0158 0159 ThumbnailView::CellGeometry *ThumbnailView::ThumbnailFacade::cellGeometry() 0160 { 0161 Q_ASSERT(m_cellGeometry); 0162 return m_cellGeometry; 0163 } 0164 0165 ThumbnailView::ThumbnailWidget *ThumbnailView::ThumbnailFacade::widget() 0166 { 0167 Q_ASSERT(m_widget); 0168 return m_widget; 0169 } 0170 0171 ThumbnailView::ThumbnailFacade *ThumbnailView::ThumbnailFacade::instance() 0172 { 0173 Q_ASSERT(s_instance); 0174 return s_instance; 0175 } 0176 0177 void ThumbnailView::ThumbnailFacade::clearFilter() 0178 { 0179 Q_ASSERT(m_model); 0180 m_model->clearFilter(); 0181 } 0182 0183 void ThumbnailView::ThumbnailFacade::setFreeformFilter(const QString &text) 0184 { 0185 model()->filterByFreeformText(text); 0186 } 0187 0188 // vi:expandtab:tabstop=4 shiftwidth=4: 0189 0190 #include "moc_ThumbnailFacade.cpp"