From 5073d69d7253a6944576218a2f18e15312ec37ca Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Sun, 28 May 2023 21:32:58 +0200 Subject: [PATCH] initial commit --- importDigiKey/cimportdigikey.cpp | 11 +++++ importDigiKey/cimportdigikey.h | 24 +++++++++++ importDigiKey/importDigiKey.cpp | 8 ---- importDigiKey/importDigiKey.h | 20 --------- importDigiKey/importDigiKey.pro | 6 ++- inventryParts.pro | 2 - inventryParts/cimportinterface.h | 21 ++++++++++ inventryParts/cmainwindow.cpp | 72 +++++++++++++++++++++++++++++--- inventryParts/cmainwindow.h | 16 +++++-- inventryParts/inventryParts.pro | 1 + inventryParts/main.cpp | 1 + 11 files changed, 141 insertions(+), 41 deletions(-) create mode 100644 importDigiKey/cimportdigikey.cpp create mode 100644 importDigiKey/cimportdigikey.h delete mode 100644 importDigiKey/importDigiKey.cpp delete mode 100644 importDigiKey/importDigiKey.h create mode 100644 inventryParts/cimportinterface.h diff --git a/importDigiKey/cimportdigikey.cpp b/importDigiKey/cimportdigikey.cpp new file mode 100644 index 0000000..b5599d4 --- /dev/null +++ b/importDigiKey/cimportdigikey.cpp @@ -0,0 +1,11 @@ +#include "cimportdigikey.h" + + +QString cImportDigikey::pluginName() +{ + return(PLUGIN_NAME); +} +qint16 cImportDigikey::pluginVersion() +{ + return(PLUGIN_VERSION); +} diff --git a/importDigiKey/cimportdigikey.h b/importDigiKey/cimportdigikey.h new file mode 100644 index 0000000..20f89dc --- /dev/null +++ b/importDigiKey/cimportdigikey.h @@ -0,0 +1,24 @@ +#ifndef CIMPORTDIGIKEY_H +#define CIMPORTDIGIKEY_H + + +#include +#include +#include "cimportinterface.h" + +#define PLUGIN_NAME "Import DigiKey" +#define PLUGIN_VERSION 1 + + +class cImportDigikey : public QObject, cImportInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "at.windesign.importInterface" FILE "importDigiKey.json") + Q_INTERFACES(cImportInterface) + +public: + QString pluginName() override; + qint16 pluginVersion() override; +}; + +#endif diff --git a/importDigiKey/importDigiKey.cpp b/importDigiKey/importDigiKey.cpp deleted file mode 100644 index 86056c9..0000000 --- a/importDigiKey/importDigiKey.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "importDigiKey.h" - -//! [0] -QString cImportDigiKey::echo(const QString &message) -{ - return message; -} -//! [0] diff --git a/importDigiKey/importDigiKey.h b/importDigiKey/importDigiKey.h deleted file mode 100644 index 883ab18..0000000 --- a/importDigiKey/importDigiKey.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef IMPORTDIGIKEY_H -#define IMPORTDIGIKEY_H - -#include -#include -#include "inventryPartsInterface.h" - -//! [0] -class importDigikey : public QObject, inventryPartsInterface -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "at.windesign.inventryPartsInterface" FILE "importDigiKey.json") - Q_INTERFACES(inventryPartsInterface) - -public: - QString echo(const QString &message) override; -}; -//! [0] - -#endif diff --git a/importDigiKey/importDigiKey.pro b/importDigiKey/importDigiKey.pro index 5340b27..fd435f5 100644 --- a/importDigiKey/importDigiKey.pro +++ b/importDigiKey/importDigiKey.pro @@ -3,8 +3,10 @@ TEMPLATE = lib CONFIG += plugin QT += widgets INCLUDEPATH += ../inventryParts -HEADERS = importDigiKey.h -SOURCES = importDigiKey.cpp +HEADERS = \ + cimportdigikey.h +SOURCES = \ + cimportdigikey.cpp TARGET = $$qtLibraryTarget(importDigiKey) DESTDIR = ../plugins #! [0] diff --git a/inventryParts.pro b/inventryParts.pro index 7e6545d..b960b67 100644 --- a/inventryParts.pro +++ b/inventryParts.pro @@ -1,5 +1,3 @@ -#! [0] TEMPLATE = subdirs SUBDIRS = inventryParts \ importDigiKey -#! [0] diff --git a/inventryParts/cimportinterface.h b/inventryParts/cimportinterface.h new file mode 100644 index 0000000..973962e --- /dev/null +++ b/inventryParts/cimportinterface.h @@ -0,0 +1,21 @@ +#ifndef CIMPORTINTERFACE_H +#define CIMPORTINTERFACE_H + +#include +#include + +class cImportInterface { +public: + virtual ~cImportInterface() = default; + virtual QString pluginName() = 0; + virtual qint16 pluginVersion() = 0; +}; + +QT_BEGIN_NAMESPACE + +#define cImportInterface_iid "at.windesign.importInterface" + +Q_DECLARE_INTERFACE(cImportInterface, cImportInterface_iid) +QT_END_NAMESPACE + +#endif // CIMPORTINTERFACE_H diff --git a/inventryParts/cmainwindow.cpp b/inventryParts/cmainwindow.cpp index d39c82b..dab2082 100644 --- a/inventryParts/cmainwindow.cpp +++ b/inventryParts/cmainwindow.cpp @@ -1,15 +1,77 @@ #include "cmainwindow.h" #include "ui_cmainwindow.h" -cMainWindow::cMainWindow(QWidget *parent) - : QMainWindow(parent) - , ui(new Ui::cMainWindow) +#include +#include + +#include + + +cMainWindow::cMainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::cMainWindow) { - ui->setupUi(this); + createGUI(); + + if(!loadPlugin()) + { + QMessageBox::information(this, "Error", "Could not load the plugin"); + } } cMainWindow::~cMainWindow() { - delete ui; + delete ui; } +void cMainWindow::createGUI() +{ + ui->setupUi(this); +} + +bool cMainWindow::loadPlugin() +{ + QDir pluginsDir(QCoreApplication::applicationDirPath()); + + qDebug() << pluginsDir.absolutePath(); +#if defined(Q_OS_WIN) + if(pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release") + { + pluginsDir.cdUp(); + pluginsDir.cdUp(); + } +#elif defined(Q_OS_MAC) + if (pluginsDir.dirName() == "MacOS") + { + pluginsDir.cdUp(); + pluginsDir.cdUp(); + pluginsDir.cdUp(); + } +#endif + pluginsDir.cd("plugins"); + + const QStringList entries = pluginsDir.entryList(QDir::Files); + + for(const QString &fileName : entries) + { + QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName)); + QObject* plugin = pluginLoader.instance(); + + if(plugin) + { + m_importInterface = qobject_cast(plugin); + + if(m_importInterface) + { + qDebug() << m_importInterface->pluginName(); + qDebug() << m_importInterface->pluginVersion(); + + return true; + } + + pluginLoader.unload(); + } + } + + return false; +} diff --git a/inventryParts/cmainwindow.h b/inventryParts/cmainwindow.h index a79919b..9a58340 100644 --- a/inventryParts/cmainwindow.h +++ b/inventryParts/cmainwindow.h @@ -1,21 +1,29 @@ #ifndef CMAINWINDOW_H #define CMAINWINDOW_H + +#include "cimportinterface.h" + #include + QT_BEGIN_NAMESPACE namespace Ui { class cMainWindow; } QT_END_NAMESPACE class cMainWindow : public QMainWindow { - Q_OBJECT + Q_OBJECT public: - cMainWindow(QWidget *parent = nullptr); - ~cMainWindow(); + cMainWindow(QWidget *parent = nullptr); + ~cMainWindow(); private: - Ui::cMainWindow *ui; + Ui::cMainWindow* ui; + cImportInterface* m_importInterface; + + void createGUI(); + bool loadPlugin(); }; #endif // CMAINWINDOW_H diff --git a/inventryParts/inventryParts.pro b/inventryParts/inventryParts.pro index bf9faa8..0f08a35 100644 --- a/inventryParts/inventryParts.pro +++ b/inventryParts/inventryParts.pro @@ -13,6 +13,7 @@ SOURCES += \ cmainwindow.cpp HEADERS += \ + cimportinterface.h \ cmainwindow.h FORMS += \ diff --git a/inventryParts/main.cpp b/inventryParts/main.cpp index 5c1de8a..02d019d 100644 --- a/inventryParts/main.cpp +++ b/inventryParts/main.cpp @@ -1,4 +1,5 @@ #include "cmainwindow.h" +#include "cimportinterface.h" #include