File indexing completed on 2024-05-12 12:21:01
0001 // SPDX-FileCopyrightText: 2003-2020 The KPhotoAlbum Development Team 0002 // SPDX-FileCopyrightText: 2021-2022 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0003 // 0004 // SPDX-License-Identifier: GPL-2.0-or-later 0005 0006 #include "KeyboardEventHandler.h" 0007 0008 #include "CellGeometry.h" 0009 #include "ThumbnailModel.h" 0010 #include "ThumbnailWidget.h" 0011 #include "VideoThumbnailCycler.h" 0012 #include "enums.h" 0013 0014 #include <DB/CategoryCollection.h> 0015 #include <DB/ImageDB.h> 0016 #include <MainWindow/DirtyIndicator.h> 0017 #include <kpabase/SettingsData.h> 0018 0019 ThumbnailView::KeyboardEventHandler::KeyboardEventHandler(ThumbnailFactory *factory) 0020 : ThumbnailComponent(factory) 0021 { 0022 } 0023 0024 bool ThumbnailView::KeyboardEventHandler::keyPressEvent(QKeyEvent *event) 0025 { 0026 if (event->modifiers() == Qt::NoModifier && event->key() == Qt::Key_Escape) { 0027 if (model()->isFiltered()) { 0028 model()->clearFilter(); 0029 return true; 0030 } 0031 } 0032 // tokens 0033 if (event->key() >= Qt::Key_A && event->key() <= Qt::Key_Z) { 0034 const QString token = event->text().toUpper().left(1); 0035 if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::ShiftModifier) { 0036 // toggle tokens 0037 bool mustRemoveToken = false; 0038 bool hadHit = false; 0039 0040 const DB::FileNameList selection = widget()->selection(event->modifiers() == Qt::NoModifier ? NoExpandCollapsedStacks : IncludeAllStacks); 0041 const DB::CategoryPtr tokensCategory = DB::ImageDB::instance()->categoryCollection()->categoryForSpecial(DB::Category::TokensCategory); 0042 for (const DB::FileName &fileName : selection) { 0043 DB::ImageInfoPtr info = DB::ImageDB::instance()->info(fileName); 0044 if (!hadHit) { 0045 mustRemoveToken = info->hasCategoryInfo(tokensCategory->name(), token); 0046 hadHit = true; 0047 } 0048 0049 if (mustRemoveToken) 0050 info->removeCategoryInfo(tokensCategory->name(), token); 0051 else 0052 info->addCategoryInfo(tokensCategory->name(), token); 0053 0054 model()->updateCell(fileName); 0055 } 0056 0057 tokensCategory->addItem(token); 0058 MainWindow::DirtyIndicator::markDirty(); 0059 return true; 0060 } 0061 if (event->modifiers() == (Qt::AltModifier | Qt::ShiftModifier)) { 0062 // filter view 0063 const QString tokensCategory = DB::ImageDB::instance()->categoryCollection()->categoryForSpecial(DB::Category::TokensCategory)->name(); 0064 model()->toggleCategoryFilter(tokensCategory, token); 0065 return true; 0066 } 0067 } 0068 0069 // rating 0070 if (event->key() >= Qt::Key_0 && event->key() <= Qt::Key_5) { 0071 bool ok; 0072 const short rating = 2 * event->text().left(1).toShort(&ok, 10); 0073 if (ok) { 0074 if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::ShiftModifier) { 0075 // set rating 0076 const DB::FileNameList selection = widget()->selection(event->modifiers() == Qt::NoModifier ? NoExpandCollapsedStacks : IncludeAllStacks); 0077 for (const DB::FileName &fileName : selection) { 0078 DB::ImageInfoPtr info = DB::ImageDB::instance()->info(fileName); 0079 info->setRating(rating); 0080 } 0081 MainWindow::DirtyIndicator::markDirty(); 0082 return true; 0083 } 0084 } 0085 } 0086 0087 if (event->key() == Qt::Key_Control && widget()->isItemUnderCursorSelected()) 0088 VideoThumbnailCycler::instance()->stopCycle(); 0089 0090 if (event->key() == Qt::Key_Return) { 0091 Q_EMIT showSelection(); 0092 return true; 0093 } 0094 0095 if (event->key() == Qt::Key_Slash) { 0096 Q_EMIT showSearch(); 0097 return true; 0098 } 0099 0100 return false; 0101 } 0102 0103 /** 0104 Handle key release event. 0105 \return true if the event should propagate 0106 */ 0107 bool ThumbnailView::KeyboardEventHandler::keyReleaseEvent(QKeyEvent *event) 0108 { 0109 if (widget()->m_wheelResizing && event->key() == Qt::Key_Control) { 0110 widget()->m_gridResizeInteraction.leaveGridResizingMode(); 0111 widget()->m_wheelResizing = false; 0112 0113 return false; // Don't propagate the event - I'm not sure why. 0114 } 0115 0116 if (event->key() == Qt::Key_Control) 0117 VideoThumbnailCycler::instance()->setActive(widget()->mediaIdUnderCursor()); 0118 0119 return true; 0120 } 0121 0122 // vi:expandtab:tabstop=4 shiftwidth=4: 0123 0124 #include "moc_KeyboardEventHandler.cpp"