File indexing completed on 2024-04-28 04:21:18
0001 // SPDX-FileCopyrightText: 2014-2020 The KPhotoAlbum Development Team 0002 // SPDX-FileCopyrightText: 2022 Johannes Zarl-Zierl <johannes@zarl-zierl.at> 0003 // 0004 // SPDX-License-Identifier: GPL-2.0-or-later 0005 0006 #include "CategoriesGroupsWidget.h" 0007 0008 // Qt includes 0009 #include <QDropEvent> 0010 0011 // Local includes 0012 #include "TagGroupsPage.h" 0013 0014 #include <DB/Category.h> 0015 0016 Settings::CategoriesGroupsWidget::CategoriesGroupsWidget(QWidget *parent) 0017 : QTreeWidget(parent) 0018 , m_backgroundHiglightTarget(Qt::lightGray) 0019 { 0020 setDragEnabled(true); 0021 setAcceptDrops(true); 0022 0023 m_tagGroupsPage = dynamic_cast<TagGroupsPage *>(parentWidget()); 0024 } 0025 0026 Settings::CategoriesGroupsWidget::~CategoriesGroupsWidget() 0027 { 0028 } 0029 0030 void Settings::CategoriesGroupsWidget::mousePressEvent(QMouseEvent *event) 0031 { 0032 m_draggedItem = itemAt(event->pos()); 0033 0034 if (m_draggedItem != nullptr) { 0035 if (m_draggedItem->parent() != nullptr) { 0036 m_draggedItemCategory = m_tagGroupsPage->getCategory(m_draggedItem); 0037 } 0038 } else { 0039 m_draggedItemCategory = QString(); 0040 } 0041 0042 QTreeWidget::mousePressEvent(event); 0043 } 0044 0045 void Settings::CategoriesGroupsWidget::dragMoveEvent(QDragMoveEvent *event) 0046 { 0047 QTreeWidgetItem *target = itemAt(event->pos()); 0048 0049 if (target == nullptr) { 0050 // We don't have a target, so we don't allow a drop. 0051 event->setDropAction(Qt::IgnoreAction); 0052 } else { 0053 // The target has to be in the same category as the dragged group. 0054 QTreeWidgetItem *parent = target; 0055 // the category is the root item: 0056 while (parent->parent() != nullptr) { 0057 parent = parent->parent(); 0058 if (parent == m_draggedItem) { 0059 event->setDropAction(Qt::IgnoreAction); 0060 return; 0061 } 0062 } 0063 if (parent->text(0) != m_draggedItemCategory) { 0064 event->setDropAction(Qt::IgnoreAction); 0065 } else { 0066 updateHighlight(target); 0067 event->setDropAction(Qt::MoveAction); 0068 event->accept(); 0069 } 0070 } 0071 } 0072 0073 void Settings::CategoriesGroupsWidget::updateHighlight(QTreeWidgetItem *target) 0074 { 0075 Q_ASSERT(target != nullptr); 0076 if (target == m_oldTarget) { 0077 return; 0078 } 0079 0080 if (m_oldTarget != nullptr) { 0081 m_oldTarget->setBackground(0, m_backgroundNoTarget); 0082 } 0083 0084 m_backgroundNoTarget = target->background(0); 0085 target->setBackground(0, m_backgroundHiglightTarget); 0086 0087 m_oldTarget = target; 0088 } 0089 0090 void Settings::CategoriesGroupsWidget::dropEvent(QDropEvent *event) 0091 { 0092 QTreeWidgetItem *target = itemAt(event->pos()); 0093 target->setBackground(0, m_backgroundNoTarget); 0094 m_oldTarget = nullptr; 0095 0096 if (m_draggedItem != target) { 0097 m_tagGroupsPage->processDrop(m_draggedItem, target); 0098 } 0099 } 0100 0101 // vi:expandtab:tabstop=4 shiftwidth=4: 0102 0103 #include "moc_CategoriesGroupsWidget.cpp"