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"