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

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2009-04-20
0007  * Description : a view to host all available tools.
0008  *
0009  * SPDX-FileCopyrightText: 2009-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 #include "toolsview.h"
0016 
0017 // Qt includes
0018 
0019 #include <QList>
0020 #include <QWidget>
0021 #include <QIcon>
0022 
0023 // KDE includes
0024 
0025 #include <klocalizedstring.h>
0026 
0027 // Local includes
0028 
0029 #include "workflowmanager.h"
0030 #include "batchtool.h"
0031 #include "toolslistview.h"
0032 #include "workflowlist.h"
0033 
0034 namespace Digikam
0035 {
0036 
0037 class Q_DECL_HIDDEN ToolsView::Private
0038 {
0039 
0040 public:
0041 
0042     explicit Private()
0043       : baseTools  (nullptr),
0044         historyView(nullptr),
0045         workflow   (nullptr)
0046     {
0047     }
0048 
0049     ToolsListView* baseTools;
0050     DHistoryView*  historyView;
0051     WorkflowList*  workflow;
0052 };
0053 
0054 ToolsView::ToolsView(QWidget* const parent)
0055     : QTabWidget(parent),
0056       d         (new Private)
0057 {
0058     setTabsClosable(false);
0059 
0060     // --------------------------------------------------------
0061 
0062     d->baseTools = new ToolsListView(this);
0063     d->baseTools->setWhatsThis(i18n("This is the list of digiKam batch tools available."));
0064     new ToolListViewGroup(d->baseTools, BatchTool::ColorTool);
0065     new ToolListViewGroup(d->baseTools, BatchTool::EnhanceTool);
0066     new ToolListViewGroup(d->baseTools, BatchTool::TransformTool);
0067     new ToolListViewGroup(d->baseTools, BatchTool::DecorateTool);
0068     new ToolListViewGroup(d->baseTools, BatchTool::FiltersTool);
0069     new ToolListViewGroup(d->baseTools, BatchTool::ConvertTool);
0070     new ToolListViewGroup(d->baseTools, BatchTool::MetadataTool);
0071     new ToolListViewGroup(d->baseTools, BatchTool::CustomTool);
0072     insertTab(TOOLS, d->baseTools, QIcon::fromTheme(QLatin1String("digikam")), i18n("Base Tools"));
0073 
0074     // --------------------------------------------------------
0075 
0076     d->workflow    = new WorkflowList(this);
0077     d->workflow->setWhatsThis(i18n("This is the list of your customized workflow settings."));
0078     insertTab(WORKFLOW, d->workflow, QIcon::fromTheme(QLatin1String("step")), i18n("Workflow"));
0079 
0080     // --------------------------------------------------------
0081 
0082     d->historyView = new DHistoryView(this);
0083     d->historyView->setWhatsThis(i18n("You can see below the history of last batch operations processed."));
0084     insertTab(HISTORY, d->historyView, QIcon::fromTheme(QLatin1String("edit-find")), i18n("History"));
0085 
0086     // --------------------------------------------------------
0087 
0088     connect(d->baseTools, SIGNAL(signalAssignTools(QMultiMap<int,QString>)),
0089             this, SIGNAL(signalAssignTools(QMultiMap<int,QString>)));
0090 
0091     connect(d->workflow, SIGNAL(signalAssignQueueSettings(QString)),
0092             this, SIGNAL(signalAssignQueueSettings(QString)));
0093 
0094     connect(d->workflow, SIGNAL(signalUpdateQueueSettings(QString)),
0095             this, SIGNAL(signalUpdateQueueSettings(QString)));
0096 
0097     connect(WorkflowManager::instance(), SIGNAL(signalQueueSettingsAdded(QString)),
0098             d->workflow, SLOT(slotAddQueueSettings(QString)));
0099 
0100     connect(d->historyView, SIGNAL(signalEntryClicked(QVariant)),
0101             this, SLOT(slotHistoryEntryClicked(QVariant)));
0102 }
0103 
0104 ToolsView::~ToolsView()
0105 {
0106     delete d;
0107 }
0108 
0109 void ToolsView::setBusy(bool b)
0110 {
0111     for (int i = 0 ; i < count() ; ++i)
0112     {
0113         ToolsListView* const view = dynamic_cast<ToolsListView*>(widget(i));
0114 
0115         if (view)
0116         {
0117             view->viewport()->setEnabled(!b);
0118         }
0119     }
0120 }
0121 
0122 void ToolsView::addTool(BatchTool* const tool)
0123 {
0124     if (!tool)
0125     {
0126         return;
0127     }
0128 
0129     switch (tool->toolGroup())
0130     {
0131         case BatchTool::ColorTool:
0132         case BatchTool::EnhanceTool:
0133         case BatchTool::TransformTool:
0134         case BatchTool::DecorateTool:
0135         case BatchTool::FiltersTool:
0136         case BatchTool::ConvertTool:
0137         case BatchTool::MetadataTool:
0138         case BatchTool::CustomTool:
0139             d->baseTools->addTool(tool);
0140             break;
0141 
0142         default:
0143             break;
0144     }
0145 }
0146 
0147 bool ToolsView::removeTool(BatchTool* const tool)
0148 {
0149     bool ret = false;
0150 
0151     if (tool)
0152     {
0153         switch (tool->toolGroup())
0154         {
0155             case BatchTool::ColorTool:
0156             case BatchTool::EnhanceTool:
0157             case BatchTool::TransformTool:
0158             case BatchTool::DecorateTool:
0159             case BatchTool::FiltersTool:
0160             case BatchTool::ConvertTool:
0161             case BatchTool::MetadataTool:
0162             case BatchTool::CustomTool:
0163                 ret = d->baseTools->removeTool(tool);
0164                 break;
0165 
0166             default:
0167                 break;
0168         }
0169     }
0170 
0171     return ret;
0172 }
0173 
0174 void ToolsView::addHistoryEntry(const QString& msg, DHistoryView::EntryType type, int queueId, qlonglong itemId)
0175 {
0176     if ((queueId != -1) && (itemId != -1))
0177     {
0178         QList<QVariant> list;
0179         list << queueId << itemId;
0180         d->historyView->addEntry(msg, type, QVariant(list));
0181     }
0182     else
0183     {
0184         d->historyView->addEntry(msg, type);
0185     }
0186 }
0187 
0188 void ToolsView::showTab(ViewTabs t)
0189 {
0190     setCurrentIndex(t);
0191 }
0192 
0193 void ToolsView::slotHistoryEntryClicked(const QVariant& metadata)
0194 {
0195     QList<QVariant> list = metadata.toList();
0196 
0197     if (!list.isEmpty())
0198     {
0199         int queueId      = list.at(0).toInt();
0200         qlonglong itemId = list.at(1).toLongLong();
0201 
0202         Q_EMIT signalHistoryEntryClicked(queueId, itemId);
0203     }
0204 }
0205 
0206 } // namespace Digikam
0207 
0208 #include "moc_toolsview.cpp"