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

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2008-11-21
0007  * Description : Batch Queue Manager items list.
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_QUEUE_LIST_H
0016 #define DIGIKAM_BQM_QUEUE_LIST_H
0017 
0018 // Qt includes
0019 
0020 #include <QTreeWidget>
0021 #include <QWidget>
0022 #include <QPixmap>
0023 #include <QIcon>
0024 
0025 // Local includes
0026 
0027 #include "batchtool.h"
0028 #include "batchtoolutils.h"
0029 #include "iteminfo.h"
0030 #include "iteminfolist.h"
0031 #include "loadingdescription.h"
0032 #include "queuesettingsview.h"
0033 
0034 namespace Digikam
0035 {
0036 
0037 class QueueListView;
0038 
0039 class QueueListViewItem : public QTreeWidgetItem
0040 {
0041 
0042 public:
0043 
0044     QueueListViewItem(QueueListView* const view, const ItemInfo& info);
0045     ~QueueListViewItem()              override;
0046 
0047     bool hasValidThumbnail()    const;
0048 
0049     void setInfo(const ItemInfo& info);
0050     ItemInfo info()             const;
0051 
0052     void assignTool(int index, const BatchToolSet& set);
0053     void unassignTool(int index);
0054 
0055     void setThumb(const QPixmap& pix, bool hasThumb = true);
0056 
0057     void animProgress();
0058 
0059     void setCanceled();
0060     void setFailed();
0061 
0062     void setDone();
0063     bool isDone()               const;
0064 
0065     void setBusy();
0066     bool isBusy()               const;
0067 
0068     void reset();
0069 
0070     void    setDestFileName(const QString& str);
0071     QString destFileName()      const;
0072     QString destBaseName()      const;
0073     QString destSuffix()        const;
0074 
0075 private:
0076 
0077     void setPixmap(const QPixmap& pix);
0078 
0079 private:
0080 
0081     class Private;
0082     Private* const d;
0083 
0084 private:
0085 
0086     Q_DISABLE_COPY(QueueListViewItem)
0087 };
0088 
0089 // -------------------------------------------------------------------------
0090 
0091 class CollectionImageChangeset;
0092 
0093 class QueueListView : public QTreeWidget
0094 {
0095     Q_OBJECT
0096 
0097 public:
0098 
0099     explicit QueueListView(QWidget* const parent);
0100     ~QueueListView()                                                     override;
0101 
0102     void cancelItems();
0103     int  itemsCount();
0104     void removeItemByInfo(const ItemInfo& info);
0105     void removeItemById(qlonglong id);
0106 
0107     ItemInfoList pendingItemsList();
0108     int          pendingItemsCount();
0109     int          pendingTasksCount();
0110 
0111     QueueListViewItem* findItemByUrl(const QUrl& url);
0112     QueueListViewItem* findItemById(qlonglong id);
0113 
0114     void setSettings(const QueueSettings& settings);
0115     QueueSettings settings()                                       const;
0116 
0117     void setAssignedTools(const AssignedBatchTools& tools);
0118     AssignedBatchTools assignedTools()                             const;
0119 
0120     void setEnableToolTips(bool val);
0121 
0122     void reloadThumbs(const QUrl& url);
0123 
0124     void setItemBusy(qlonglong id);
0125     QPixmap progressPixmapForIndex(int index)                      const;
0126 
0127 Q_SIGNALS:
0128 
0129     void signalQueueContentsChanged();
0130 
0131 public Q_SLOTS:
0132 
0133     void slotClearList();
0134     void slotRemoveSelectedItems();
0135     void slotRemoveItemsDone();
0136     void slotAddItems(const ItemInfoList&);
0137     void slotAssignedToolsChanged(const AssignedBatchTools&);
0138 
0139 private Q_SLOTS:
0140 
0141     void slotCollectionImageChange(const CollectionImageChangeset&);
0142     void slotThumbnailLoaded(const LoadingDescription&, const QPixmap&);
0143     void slotContextMenu();
0144     void slotToolTip();
0145     void slotProgressTimerDone();
0146 
0147 private:
0148 
0149     bool findItemByInfo(const ItemInfo& info);
0150 
0151     void removeItems(int removeType);
0152     void updateDestFileNames();
0153     void hideToolTip();
0154     bool acceptToolTip(const QPoint& pos)                          const;
0155 
0156 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
0157 
0158     QMimeData*      mimeData(const QList<QTreeWidgetItem*>& items) const override;
0159 
0160 #else
0161 
0162     // cppcheck-suppress passedByValue
0163     QMimeData*      mimeData(const QList<QTreeWidgetItem*> items)  const override;      // clazy:exclude=function-args-by-ref
0164 
0165 #endif
0166 
0167     Qt::DropActions supportedDropActions()                         const override;
0168     void            startDrag(Qt::DropActions supportedActions)          override;
0169 
0170     void dragMoveEvent(QDragMoveEvent*)                                  override;
0171     void dragEnterEvent(QDragEnterEvent*)                                override;
0172     void dropEvent(QDropEvent*)                                          override;
0173     void mouseMoveEvent(QMouseEvent*)                                    override;
0174     void wheelEvent(QWheelEvent*)                                        override;
0175     void keyPressEvent(QKeyEvent*)                                       override;
0176     void focusOutEvent(QFocusEvent*)                                     override;
0177     void leaveEvent(QEvent*)                                             override;
0178     void resetQueue();
0179 
0180     void drawRow(QPainter* p,
0181                  const QStyleOptionViewItem& opt,
0182                  const QModelIndex& index)                         const override;
0183 
0184 private:
0185 
0186     class Private;
0187     Private* const d;
0188 };
0189 
0190 } // namespace Digikam
0191 
0192 #endif // DIGIKAM_BQM_QUEUE_LIST_H