File indexing completed on 2025-04-27 03:58:22
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2009-12-23 0007 * Description : Autodetect binary program and version 0008 * 0009 * SPDX-FileCopyrightText: 2009-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * SPDX-FileCopyrightText: 2012-2016 by Benjamin Girault <benjamin dot girault at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #ifndef DIGIKAM_DBINARY_IFACE_H 0017 #define DIGIKAM_DBINARY_IFACE_H 0018 0019 // Qt includes 0020 0021 #include <QString> 0022 #include <QStringList> 0023 #include <QPushButton> 0024 #include <QLabel> 0025 #include <QLineEdit> 0026 #include <QSet> 0027 #include <QGridLayout> 0028 #include <QUrl> 0029 0030 // Local includes 0031 0032 #include "digikam_export.h" 0033 0034 namespace Digikam 0035 { 0036 0037 class DIGIKAM_EXPORT DBinaryIface : public QObject 0038 { 0039 Q_OBJECT 0040 0041 public: 0042 0043 DBinaryIface(const QString& binaryName, 0044 const QString& projectName, 0045 const QString& url, 0046 const QString& pluginName, 0047 const QStringList& args = QStringList(), 0048 const QString& desc = QString() 0049 ); 0050 DBinaryIface(const QString& binaryName, 0051 const QString& minimalVersion, 0052 const QString& header, 0053 const int headerLine, 0054 const QString& projectName, 0055 const QString& url, 0056 const QString& pluginName, 0057 const QStringList& args = QStringList(), 0058 const QString& desc = QString() 0059 ); 0060 ~DBinaryIface() override; 0061 0062 public: 0063 0064 bool isFound() const { return m_isFound; } 0065 const QString& version() const; 0066 bool versionIsRight() const; 0067 bool versionIsRight(const float) const; 0068 inline bool isValid() const { return (m_isFound && versionIsRight()); } 0069 inline bool hasError() const { return m_hasError; } 0070 inline bool developmentVersion() const { return m_developmentVersion; } 0071 const QString& description() const { return m_description; } 0072 0073 virtual void setup(const QString& prev = QString()); 0074 virtual bool checkDir() { return checkDirForPath(m_pathDir); } 0075 virtual bool checkDirForPath(const QString& path); 0076 virtual bool recheckDirectories(); 0077 0078 virtual QString path(const QString& dir) const; 0079 virtual QString path() const { return path(m_pathDir); } 0080 virtual QString directory() const { return m_pathDir; } 0081 virtual QString baseName() const { return m_binaryBaseName; } 0082 virtual QString minimalVersion() const { return m_minimalVersion; } 0083 0084 0085 virtual QUrl url() const { return m_url; } 0086 virtual QString projectName() const { return m_projectName; } 0087 0088 static QString goodBaseName(const QString& b); 0089 0090 public Q_SLOTS: 0091 0092 virtual void slotNavigateAndCheck(); 0093 virtual void slotAddPossibleSearchDirectory(const QString& dir); 0094 virtual void slotAddSearchDirectory(const QString& dir); 0095 0096 Q_SIGNALS: 0097 0098 void signalSearchDirectoryAdded(const QString& dir); 0099 void signalBinaryValid(); 0100 0101 protected: 0102 0103 QString findHeader(const QStringList& output, const QString& header) const; 0104 virtual bool parseHeader(const QString& output); 0105 void setVersion(QString& version); 0106 0107 virtual QString readConfig(); 0108 virtual void writeConfig(); 0109 0110 protected: 0111 0112 const bool m_checkVersion; 0113 const QString m_headerStarts; 0114 const int m_headerLine; 0115 const QString m_minimalVersion; 0116 const QString m_configGroup; 0117 const QString m_binaryBaseName; 0118 const QStringList m_binaryArguments; 0119 const QString m_projectName; 0120 const QUrl m_url; 0121 0122 bool m_isFound; 0123 bool m_hasError; 0124 bool m_developmentVersion; 0125 0126 QString m_version; 0127 QString m_pathDir; 0128 QString m_description; 0129 0130 QFrame* m_pathWidget; 0131 QLabel* m_binaryLabel; 0132 QLabel* m_versionLabel; 0133 QPushButton* m_pathButton; 0134 QLabel* m_downloadButton; 0135 QLineEdit* m_lineEdit; 0136 QLabel* m_statusIcon; 0137 0138 QSet<QString> m_searchPaths; 0139 0140 private: 0141 0142 // Disabled 0143 explicit DBinaryIface(QObject*); 0144 }; 0145 0146 } // namespace Digikam 0147 0148 #endif // DIGIKAM_DBINARY_IFACE_H