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