File indexing completed on 2024-04-28 04:21:22
0001 // SPDX-FileCopyrightText: 2015-2022 The KPhotoAlbum Development Team 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 // Qt includes 0006 #include <QTimer> 0007 0008 // KDE includes 0009 #include <KLocalizedString> 0010 #include <KMessageBox> 0011 #include <KSharedConfig> 0012 0013 // Local includes 0014 #include "CellGeometry.h" 0015 #include "GridResizeSlider.h" 0016 #include "Logging.h" 0017 #include "ThumbnailModel.h" 0018 #include "ThumbnailWidget.h" 0019 0020 #include <ImageManager/ThumbnailBuilder.h> 0021 #include <MainWindow/Window.h> 0022 #include <kpabase/SettingsData.h> 0023 0024 ThumbnailView::GridResizeSlider::GridResizeSlider(ThumbnailFactory *factory) 0025 : QSlider(Qt::Horizontal) 0026 , ThumbnailComponent(factory) 0027 { 0028 Settings::SettingsData *settings = Settings::SettingsData::instance(); 0029 setMinimum(settings->minimumThumbnailSize()); 0030 setMaximum(settings->thumbnailSize()); 0031 setValue(settings->actualThumbnailSize()); 0032 0033 // timer for event-timeout: 0034 m_timer = new QTimer(this); 0035 m_timer->setSingleShot(true); 0036 0037 // we have no definitive leave event when using the mousewheel -> use a timeout 0038 connect(m_timer, &QTimer::timeout, this, &GridResizeSlider::leaveGridResizingMode); 0039 0040 connect(settings, &Settings::SettingsData::actualThumbnailSizeChanged, this, &GridResizeSlider::setValue); 0041 connect(settings, &Settings::SettingsData::thumbnailSizeChanged, this, &GridResizeSlider::setMaximum); 0042 0043 connect(this, &GridResizeSlider::sliderPressed, this, &GridResizeSlider::enterGridResizingMode); 0044 connect(this, &GridResizeSlider::valueChanged, this, &GridResizeSlider::setCellSize); 0045 0046 // disable drawing of thumbnails while resizing: 0047 connect(this, SIGNAL(isResizing(bool)), widget(), SLOT(setExternallyResizing(bool))); 0048 } 0049 0050 ThumbnailView::GridResizeSlider::~GridResizeSlider() 0051 { 0052 delete m_timer; 0053 } 0054 0055 void ThumbnailView::GridResizeSlider::mousePressEvent(QMouseEvent *event) 0056 { 0057 qCDebug(ThumbnailViewLog) << "Mouse pressed"; 0058 enterGridResizingMode(); 0059 QSlider::mousePressEvent(event); 0060 } 0061 0062 void ThumbnailView::GridResizeSlider::mouseReleaseEvent(QMouseEvent *event) 0063 { 0064 qCDebug(ThumbnailViewLog) << "Mouse released"; 0065 leaveGridResizingMode(); 0066 QSlider::mouseReleaseEvent(event); 0067 } 0068 0069 void ThumbnailView::GridResizeSlider::wheelEvent(QWheelEvent *event) 0070 { 0071 // set (or reset) the timer to leave resizing mode: 0072 m_timer->start(200); 0073 qCDebug(ThumbnailViewLog) << "(Re)starting timer"; 0074 if (!m_resizing) { 0075 enterGridResizingMode(); 0076 } 0077 QSlider::wheelEvent(event); 0078 } 0079 0080 void ThumbnailView::GridResizeSlider::enterGridResizingMode() 0081 { 0082 if (m_resizing) 0083 return; // already resizing 0084 m_resizing = true; 0085 0086 qCDebug(ThumbnailViewLog) << "Entering grid resizing mode"; 0087 ImageManager::ThumbnailBuilder::instance()->cancelRequests(); 0088 Q_EMIT isResizing(true); 0089 } 0090 0091 void ThumbnailView::GridResizeSlider::leaveGridResizingMode() 0092 { 0093 if (!m_resizing) 0094 return; // not resizing 0095 m_resizing = false; 0096 qCDebug(ThumbnailViewLog) << "Leaving grid resizing mode"; 0097 0098 model()->beginResetModel(); 0099 cellGeometryInfo()->flushCache(); 0100 model()->endResetModel(); 0101 model()->updateVisibleRowInfo(); 0102 Q_EMIT isResizing(false); 0103 } 0104 0105 void ThumbnailView::GridResizeSlider::setCellSize(int size) 0106 { 0107 blockSignals(true); 0108 Settings::SettingsData::instance()->setActualThumbnailSize(size); 0109 blockSignals(false); 0110 0111 model()->beginResetModel(); 0112 cellGeometryInfo()->calculateCellSize(); 0113 model()->endResetModel(); 0114 } 0115 0116 void ThumbnailView::GridResizeSlider::setMaximum(int size) 0117 { 0118 // QSlider::setMaximum() is not a slot, which is why we need this slot as workaround 0119 QSlider::setMaximum(size); 0120 } 0121 0122 // vi:expandtab:tabstop=4 shiftwidth=4: 0123 0124 #include "moc_GridResizeSlider.cpp"