| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 | 
							- /*=============================================================================
 
-   Library: CTK
 
-   Copyright (c) German Cancer Research Center,
 
-     Division of Medical and Biological Informatics
 
-   Licensed under the Apache License, Version 2.0 (the "License");
 
-   you may not use this file except in compliance with the License.
 
-   You may obtain a copy of the License at
 
-     http://www.apache.org/licenses/LICENSE-2.0
 
-   Unless required by applicable law or agreed to in writing, software
 
-   distributed under the License is distributed on an "AS IS" BASIS,
 
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-   See the License for the specific language governing permissions and
 
-   limitations under the License.
 
- =============================================================================*/
 
- #ifndef CTKCMDLINEMODULEBACKENDFUNCTIONPOINTER_H
 
- #define CTKCMDLINEMODULEBACKENDFUNCTIONPOINTER_H
 
- #include "ctkCmdLineModuleBackend.h"
 
- #include "ctkCommandLineModulesBackendFunctionPointerExport.h"
 
- #include "ctkCmdLineModuleBackendFPTypeTraits.h"
 
- #include "ctkCmdLineModuleBackendFPUtil_p.h"
 
- #include <QScopedPointer>
 
- #include <QSharedPointer>
 
- #include <QString>
 
- #include <QUrl>
 
- #include <QMetaType>
 
- #include <QDebug>
 
- namespace ctk {
 
- namespace CmdLineModuleBackendFunctionPointer {
 
- struct FunctionPointerProxy;
 
- template<typename T>
 
- QString GetParameterTypeName();
 
- struct ImageType {};
 
- // default parameter description
 
- template<typename T, typename Enable = void>
 
- struct CreateXmlFor
 
- {
 
-   static QString parameter(int index, const QString& typeName, const QString& label = QString(), const QString& description = QString())
 
-   {
 
-     QString xmlParameter;
 
-     QTextStream str(&xmlParameter);
 
-     str << "    <" << typeName << ">\n";
 
-     str << "      <name>" << QString("param%1").arg(index) << "</name>\n";
 
-     str << "      <index>" << index << "</index>\n";
 
-     str << "      <description>" << (description.isEmpty() ? "Description not available." : description) << "</description>\n";
 
-     str << "      <label>" << (label.isEmpty() ? QString("Parameter %1").arg(index) : label) << "</label>\n";
 
-     str << "    </" << typeName << ">\n";
 
-     return xmlParameter;
 
-   }
 
- };
 
- // specialization for input image types
 
- template<typename T>
 
- struct CreateXmlFor<T, typename EnableIf<IsBaseOf<ImageType, T>::value >::Type >
 
- {
 
-   static QString parameter(int index, const QString& typeName, const QString& label = QString(), const QString& description = QString())
 
-   {
 
-     QString xmlParameter;
 
-     QTextStream str(&xmlParameter);
 
-     str << "    <" << typeName << ">\n";
 
-     str << "      <name>" << QString("param%1").arg(index) << "</name>\n";
 
-     str << "      <index>" << index << "</index>\n";
 
-     str << "      <description>" << (description.isEmpty() ? "Description not available." : description) << "</description>\n";
 
-     str << "      <label>" << (label.isEmpty() ? QString("Parameter %1").arg(index) : label) << "</label>\n";
 
-     str << "      <channel>input</channel>\n";
 
-     str << "    </" << typeName << ">\n";
 
-     return xmlParameter;
 
-   }
 
- };
 
- }
 
- }
 
- Q_DECLARE_METATYPE(QList<int>*)
 
- struct ctkCmdLineModuleBackendFunctionPointerPrivate;
 
- /**
 
-  * \class ctkCmdLineModuleBackendFunctionPointer
 
-  * \brief Provides a back-end implementation to enable directly calling a function pointer.
 
-  * \ingroup CommandLineModulesBackendFunctionPointer_API
 
-  *
 
-  * \warning This back-end is highly experimental and will not work for most function pointers when
 
-  *          trying to register them via registerFunctionPointer().
 
-  */
 
- class CTK_CMDLINEMODULEBACKENDFP_EXPORT ctkCmdLineModuleBackendFunctionPointer : public ctkCmdLineModuleBackend
 
- {
 
- public:
 
-   class DescriptionPrivate;
 
-   class Description
 
-   {
 
-   public:
 
-     Description();
 
-     ~Description();
 
-     QUrl moduleLocation() const;
 
-     QString moduleCategory() const;
 
-     void setModuleCategory(const QString &category);
 
-     QString moduleTitle() const;
 
-     void setModuleTitle(const QString& title);
 
-     QString moduleDescription() const;
 
-     void setModuleDescription(const QString& description);
 
-     QString moduleVersion() const;
 
-     void setModuleVersion(const QString& version);
 
-     QString moduleContributor() const;
 
-     void setModuleContributor(const QString& contributor);
 
-   private:
 
-     friend class ctkCmdLineModuleBackendFunctionPointer;
 
-     friend class ctkCmdLineModuleFunctionPointerTask;
 
-     Description(const QUrl& location, const ctk::CmdLineModuleBackendFunctionPointer::FunctionPointerProxy& fpProxy);
 
-     QSharedPointer<DescriptionPrivate> d;
 
-   };
 
-   ctkCmdLineModuleBackendFunctionPointer();
 
-   ~ctkCmdLineModuleBackendFunctionPointer();
 
-   virtual QString name() const;
 
-   virtual QString description() const;
 
-   virtual QList<QString> schemes() const;
 
-   virtual qint64 timeStamp(const QUrl &location) const;
 
-   virtual QByteArray rawXmlDescription(const QUrl& location);
 
-   QList<QUrl> registeredFunctionPointers() const;
 
-   template<typename A>
 
-   Description* registerFunctionPointer(const QString& title, void (*fp)(A),
 
-                                        const QString& paramLabel = QString(), const QString& paramDescr = QString())
 
-   {
 
-     typedef typename ctk::CmdLineModuleBackendFunctionPointer::TypeTraits<A>::RawType RawTypeA;
 
-     QList<QString> params;
 
-     params << ctk::CmdLineModuleBackendFunctionPointer::CreateXmlFor<RawTypeA>::
 
-               parameter(0,
 
-                         ctk::CmdLineModuleBackendFunctionPointer::GetParameterTypeName<RawTypeA>(),
 
-                         paramLabel, paramDescr);
 
-     return this->registerFunctionPointerProxy(title, ctk::CmdLineModuleBackendFunctionPointer::FunctionPointerProxy(fp), params);
 
-   }
 
-   template<typename A, typename B>
 
-   Description* registerFunctionPointer(const QString& title, void (*fp)(A,B),
 
-                                        const QString& paramLabel0 = QString(), const QString& paramDescr0 = QString(),
 
-                                        const QString& paramLabel1 = QString(), const QString& paramDescr1 = QString())
 
-   {
 
-     typedef typename ctk::CmdLineModuleBackendFunctionPointer::TypeTraits<A>::RawType RawTypeA;
 
-     typedef typename ctk::CmdLineModuleBackendFunctionPointer::TypeTraits<B>::RawType RawTypeB;
 
-     QList<QString> params;
 
-     params << ctk::CmdLineModuleBackendFunctionPointer::CreateXmlFor<RawTypeA>::
 
-               parameter(0,
 
-                         ctk::CmdLineModuleBackendFunctionPointer::GetParameterTypeName<RawTypeA>(),
 
-                         paramLabel0, paramDescr0);
 
-     params << ctk::CmdLineModuleBackendFunctionPointer::CreateXmlFor<RawTypeB>::
 
-               parameter(1,
 
-                         ctk::CmdLineModuleBackendFunctionPointer::GetParameterTypeName<RawTypeB>(),
 
-                         paramLabel1, paramDescr1);
 
-     return this->registerFunctionPointerProxy(title, ctk::CmdLineModuleBackendFunctionPointer::FunctionPointerProxy(fp), params);
 
-   }
 
- protected:
 
-   virtual ctkCmdLineModuleFuture run(ctkCmdLineModuleFrontend* frontend);
 
-   virtual QList<QVariant> arguments(ctkCmdLineModuleFrontend* frontend) const;
 
- private:
 
-   Description* registerFunctionPointerProxy(const QString &title,
 
-                                             const ctk::CmdLineModuleBackendFunctionPointer::FunctionPointerProxy& proxy,
 
-                                             const QList<QString>& params);
 
-   QScopedPointer<ctkCmdLineModuleBackendFunctionPointerPrivate> d;
 
- };
 
- #endif // CTKCMDLINEMODULEBACKENDFUNCTIONPOINTER_H
 
 
  |