File indexing completed on 2024-04-28 04:51:35

0001 /*
0002     SPDX-FileCopyrightText: 2023 Jean-Baptiste Mardelle <jb@kdenlive.org>
0003 
0004 SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #pragma once
0008 
0009 #include "definitions.h"
0010 #include "jobs/abstracttask.h"
0011 #include "ui_clipjobmanager_ui.h"
0012 
0013 #include <KConfig>
0014 #include <QDialog>
0015 
0016 /**
0017  * @class ClipJobManager
0018  * @brief A dialog for editing Bin Clip jobs.
0019  * @author Jean-Baptiste Mardelle
0020  */
0021 
0022 class ClipJobManager : public QDialog, public Ui::ClipJobManager_UI
0023 {
0024     Q_OBJECT
0025 
0026 public:
0027     enum class JobCompletionAction { ReplaceOriginal = 0, RootFolder = 1, SubFolder = 2, NoAction = 3 };
0028 
0029     explicit ClipJobManager(AbstractTask::JOBTYPE type, QWidget *parent = nullptr);
0030     virtual ~ClipJobManager() override;
0031     static QMap<QString, QString> getClipJobNames();
0032     /** @brief Returns the {wanted action, folder name} for clip job type @jobId */
0033     static std::pair<JobCompletionAction, QString> getJobAction(const QString &jobId);
0034     /** @brief Resutrns the params list as {binary, parameters, output} for clip job type @jobId */
0035     static QMap<QString, QString> getJobParameters(const QString &jobId);
0036 
0037 private:
0038     /** @brief Populate the list view with jobs */
0039     void loadJobs();
0040     /** @brief Map of clip job ids */
0041     QMap<QString, QString> m_ids;
0042     /** @brief Map of clip job params */
0043     QMap<QString, QString> m_params;
0044     /** @brief Map of clip job folder names */
0045     QMap<QString, QString> m_folderNames;
0046     /** @brief Map of clip job folder usage */
0047     QMap<QString, QString> m_folderUse;
0048     /** @brief Map of clip job binaries */
0049     QMap<QString, QString> m_binaries;
0050     /** @brief Map of clip job output pattern */
0051     QMap<QString, QString> m_output;
0052     /** @brief Map of clip job enablements */
0053     QMap<QString, QString> m_enableType;
0054     /** @brief Map of clip param types*/
0055     QMap<QString, QString> m_param1Type;
0056     QMap<QString, QString> m_param2Type;
0057     /** @brief Map of clip param optional list*/
0058     QMap<QString, QString> m_param1List;
0059     QMap<QString, QString> m_param2List;
0060     QMap<QString, QString> m_param1Name;
0061     QMap<QString, QString> m_param2Name;
0062     QMap<QString, QString> m_description;
0063 
0064     /** @brief Sync a group to config file */
0065     void writeGroup(KConfig &conf, const QString &groupName, QMap<QString, QString> values);
0066     /** @brief Remember current changes */
0067     void saveCurrentPreset();
0068     /** @brief Save all jobs to the config file */
0069     void writePresetsToConfig();
0070 
0071 private Q_SLOTS:
0072     /** @brief Display a job's parameters */
0073     void displayJob(int row);
0074     void setDirty();
0075     void validate();
0076     /** @brief Create a new Clip Job entry */
0077     void addJob();
0078     /** @brief Delete current Clip Job entry */
0079     void deleteJob();
0080     /** @brief Check if job name was edited and correctly store it */
0081     void updateName(QListWidgetItem *item);
0082     /** @brief Check if the script file or application exists and is executable */
0083     void checkScript();
0084 
0085 private:
0086     QString m_dirty;
0087 };