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: