File indexing completed on 2024-04-28 04:21:22
0001 // SPDX-FileCopyrightText: 2003-2010 Jesper K. Pedersen <blackie@kde.org> 0002 // SPDX-FileCopyrightText: 2022 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0003 // 0004 // SPDX-License-Identifier: GPL-2.0-or-later 0005 0006 #include "GridResizeInteraction.h" 0007 0008 #include "CellGeometry.h" 0009 #include "ThumbnailModel.h" 0010 #include "ThumbnailWidget.h" 0011 0012 #include <ImageManager/ThumbnailBuilder.h> 0013 #include <ImageManager/enums.h> 0014 #include <MainWindow/Window.h> 0015 #include <kpabase/SettingsData.h> 0016 #include <kpathumbnails/ThumbnailCache.h> 0017 0018 #include <KLocalizedString> 0019 #include <KSharedConfig> 0020 #include <QScrollBar> 0021 ThumbnailView::GridResizeInteraction::GridResizeInteraction(ThumbnailFactory *factory) 0022 : ThumbnailComponent(factory) 0023 , m_origWidth(0) 0024 , m_resizing(false) 0025 , m_currentRow(0) 0026 { 0027 } 0028 0029 bool ThumbnailView::GridResizeInteraction::mousePressEvent(QMouseEvent *event) 0030 { 0031 m_resizing = true; 0032 m_mousePressPos = event->pos(); 0033 enterGridResizingMode(); 0034 return true; 0035 } 0036 0037 bool ThumbnailView::GridResizeInteraction::mouseMoveEvent(QMouseEvent *event) 0038 { 0039 // no need to query this more than once (can't be changed in the GUI): 0040 static int _minimum_ = Settings::SettingsData::instance()->minimumThumbnailSize(); 0041 QPoint dist = event->pos() - m_mousePressPos; 0042 setCellSize(qMax(_minimum_, m_origWidth + dist.x() / 5)); 0043 return true; 0044 } 0045 0046 bool ThumbnailView::GridResizeInteraction::mouseReleaseEvent(QMouseEvent *) 0047 { 0048 leaveGridResizingMode(); 0049 m_resizing = false; 0050 return true; 0051 } 0052 0053 void ThumbnailView::GridResizeInteraction::setCellSize(int size) 0054 { 0055 const int baseSize = Settings::SettingsData::instance()->thumbnailSize(); 0056 0057 // snap to base size: 0058 if (qAbs(size - baseSize) < 10) 0059 size = baseSize; 0060 0061 model()->beginResetModel(); 0062 Settings::SettingsData::instance()->setActualThumbnailSize(size); 0063 cellGeometryInfo()->calculateCellSize(); 0064 model()->endResetModel(); 0065 } 0066 0067 bool ThumbnailView::GridResizeInteraction::isResizingGrid() 0068 { 0069 return m_resizing; 0070 } 0071 0072 void ThumbnailView::GridResizeInteraction::leaveGridResizingMode() 0073 { 0074 KSharedConfig::openConfig()->sync(); 0075 model()->beginResetModel(); 0076 cellGeometryInfo()->flushCache(); 0077 model()->endResetModel(); 0078 model()->updateVisibleRowInfo(); 0079 widget()->setCurrentIndex(model()->index(m_currentRow, 0)); 0080 } 0081 0082 void ThumbnailView::GridResizeInteraction::enterGridResizingMode() 0083 { 0084 m_origWidth = widget()->cellWidth(); 0085 ImageManager::ThumbnailBuilder::instance()->cancelRequests(); 0086 m_currentRow = widget()->currentIndex().row(); 0087 widget()->verticalScrollBar()->setValue(0); 0088 } 0089 0090 // vi:expandtab:tabstop=4 shiftwidth=4: