File indexing completed on 2025-03-09 03:58:51

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2008-11-27
0007  * Description : batch tools list assigned to an queued item.
0008  *
0009  * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  *
0011  * SPDX-License-Identifier: GPL-2.0-or-later
0012  *
0013  * ============================================================ */
0014 
0015 #ifndef DIGIKAM_BQM_ASSIGNED_LIST_H
0016 #define DIGIKAM_BQM_ASSIGNED_LIST_H
0017 
0018 // Qt includes
0019 
0020 #include <QTreeWidget>
0021 #include <QWidget>
0022 #include <QIcon>
0023 
0024 // Local includes
0025 
0026 #include "batchtool.h"
0027 #include "batchtoolutils.h"
0028 
0029 namespace Digikam
0030 {
0031 
0032 class QueueSettings;
0033 
0034 class AssignedListViewItem : public QTreeWidgetItem
0035 {
0036 
0037 public:
0038 
0039     explicit AssignedListViewItem(QTreeWidget* const parent);
0040     AssignedListViewItem(QTreeWidget* const parent, QTreeWidgetItem* const preceding);
0041     ~AssignedListViewItem()                                             override;
0042 
0043     void setIndex(int index);
0044 
0045     void setToolSet(const BatchToolSet& set);
0046     BatchToolSet toolSet();
0047 
0048 private:
0049 
0050     BatchToolSet m_set;
0051 
0052 private:
0053 
0054     Q_DISABLE_COPY(AssignedListViewItem)
0055 };
0056 
0057 // -------------------------------------------------------------------------
0058 
0059 class AssignedListView : public QTreeWidget
0060 {
0061     Q_OBJECT
0062 
0063 public:
0064 
0065     explicit AssignedListView(QWidget* const parent);
0066     ~AssignedListView()                                                 override;
0067 
0068     int                assignedCount();
0069     AssignedBatchTools assignedList();
0070 
0071     AssignedListViewItem* insertTool(AssignedListViewItem* const preceding, const BatchToolSet& set);
0072     AssignedListViewItem* moveTool(AssignedListViewItem* const preceding, const BatchToolSet& set);
0073     AssignedListViewItem* addTool(const BatchToolSet& set);
0074 
0075     bool removeTool(const BatchToolSet& set);
0076 
0077     void setBusy(bool b);
0078 
0079 Q_SIGNALS:
0080 
0081     void signalToolSelected(const BatchToolSet&);
0082     void signalAssignedToolsChanged(const AssignedBatchTools&);
0083 
0084 public Q_SLOTS:
0085 
0086     void slotMoveCurrentToolUp();
0087     void slotMoveCurrentToolDown();
0088     void slotRemoveCurrentTool();
0089     void slotClearToolsList();
0090     void slotQueueSelected(int, const QueueSettings&, const AssignedBatchTools&);
0091     void slotSettingsChanged(const BatchToolSet&);
0092     void slotAssignTools(const QMultiMap<int, QString>&);
0093 
0094 protected:
0095 
0096     void keyPressEvent(QKeyEvent*)                                      override;
0097 
0098 private Q_SLOTS:
0099 
0100     void slotSelectionChanged();
0101     void slotContextMenu();
0102 
0103 private:
0104 
0105     AssignedListViewItem* findTool(const BatchToolSet& set);
0106     void assignTools(const QMultiMap<int, QString>& map, AssignedListViewItem* const preceding);
0107     void refreshIndex();
0108 
0109     Qt::DropActions supportedDropActions()                         const override;
0110     QStringList     mimeTypes()                                    const override;
0111 
0112 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
0113 
0114     QMimeData*      mimeData(const QList<QTreeWidgetItem*>& items) const override;
0115 
0116 #else
0117 
0118     // cppcheck-suppress passedByValue
0119     QMimeData*      mimeData(const QList<QTreeWidgetItem*> items)  const override;      // clazy:exclude=function-args-by-ref
0120 
0121 #endif
0122 
0123     void dragEnterEvent(QDragEnterEvent*)                                override;
0124     void dragMoveEvent(QDragMoveEvent*)                                  override;
0125     void dropEvent(QDropEvent*)                                          override;
0126 };
0127 
0128 } // namespace Digikam
0129 
0130 #endif // DIGIKAM_BQM_ASSIGNED_LIST_H