1 | /* |
---|---|
2 | SPDX-FileCopyrightText: 2025 Akseli Lahtinen <akselmo@akselmo.dev> |
3 | |
4 | SPDX-License-Identifier: LGPL-2.0-or-later |
5 | */ |
6 | |
7 | #include "kfileitemselectionemblem.h" |
8 | #include "kfileitemdelegate.h" |
9 | |
10 | #include <QAbstractItemDelegate> |
11 | #include <QAbstractItemView> |
12 | #include <QApplication> |
13 | #include <QModelIndex> |
14 | #include <QPoint> |
15 | |
16 | KFileItemSelectionEmblem::KFileItemSelectionEmblem(QAbstractItemView *itemView, QModelIndex index, KDirOperator *dirOperator) |
17 | { |
18 | m_itemView = itemView; |
19 | m_index = index; |
20 | m_fileItemDelegate = fileItemDelegate(); |
21 | m_dirOperator = dirOperator; |
22 | m_fileItem = m_fileItemDelegate->fileItem(index: m_index); |
23 | } |
24 | |
25 | KFileItemSelectionEmblem::~KFileItemSelectionEmblem() |
26 | { |
27 | } |
28 | |
29 | bool KFileItemSelectionEmblem::isEmblemEnabled() |
30 | { |
31 | if (m_itemView->selectionMode() == QAbstractItemView::ExtendedSelection && qApp->style()->styleHint(stylehint: QStyle::SH_ItemView_ActivateItemOnSingleClick)) { |
32 | if (m_fileItem.isDir()) { |
33 | return m_dirOperator->isSelected(item: m_fileItem); |
34 | } |
35 | return true; |
36 | } |
37 | return false; |
38 | } |
39 | |
40 | KFileItemDelegate *KFileItemSelectionEmblem::fileItemDelegate() |
41 | { |
42 | auto itemDelegate = m_itemView->itemDelegateForIndex(index: m_index); |
43 | if (itemDelegate) { |
44 | return qobject_cast<KFileItemDelegate *>(object: itemDelegate); |
45 | } |
46 | return nullptr; |
47 | } |
48 | |
49 | void KFileItemSelectionEmblem::updateSelectionEmblemRectForIndex(const int iconSize) |
50 | { |
51 | if (isEmblemEnabled() && m_fileItemDelegate) { |
52 | m_fileItemDelegate->setSelectionEmblemRect(rect: m_itemView->visualRect(index: m_index), iconSize); |
53 | } |
54 | } |
55 | |
56 | bool KFileItemSelectionEmblem::handleMousePressEvent(const QPoint mousePos) |
57 | { |
58 | if (isEmblemEnabled() && m_fileItemDelegate && m_fileItemDelegate->selectionEmblemRect().contains(p: mousePos)) { |
59 | m_itemView->selectionModel()->select(index: m_index, command: QItemSelectionModel::Toggle); |
60 | return true; |
61 | } |
62 | return false; |
63 | } |
64 |