ctkPluginManager.cxx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. * ctkPluginManager.cxx
  3. *
  4. * Created on: Mar 11, 2010
  5. * Author: zelzer
  6. */
  7. #include "ctkPluginManager.h"
  8. #include <QServiceManager>
  9. #include <QDirIterator>
  10. #include <QDebug>
  11. #include <QLibrary>
  12. #include <QApplication>
  13. namespace ctk {
  14. class PluginManagerPrivate
  15. {
  16. public:
  17. QList<QString> pluginPaths;
  18. QServiceManager serviceManager;
  19. };
  20. PluginManager::PluginManager()
  21. : d_ptr(new PluginManagerPrivate())
  22. {
  23. Q_D(PluginManager);
  24. QString libName("CTKCore");
  25. QLibrary lib(libName);
  26. QFileInfo fileInfo(libName);
  27. QString libBaseName(fileInfo.baseName());
  28. if (libBaseName.startsWith("lib"))
  29. {
  30. libBaseName.remove(0, 3);
  31. }
  32. qDebug() << libBaseName;
  33. lib.load();
  34. if (lib.isLoaded())
  35. {
  36. QString xyz = QString(":/") + libBaseName + "/servicedescriptor.xml";
  37. qDebug() << "resource string: " << xyz;
  38. QFile serviceDescriptor(xyz);
  39. qDebug() << "file exists: " << serviceDescriptor.exists();
  40. qDebug() << "open returns:" << serviceDescriptor.open(QIODevice::ReadOnly);
  41. qDebug() << "file open: " << serviceDescriptor.isOpen();
  42. qDebug() << "file is readable: " << serviceDescriptor.isReadable();
  43. //QByteArray serviceBA = serviceDescriptor.readAll();
  44. //qDebug() << serviceBA;
  45. qDebug() << "Service for " << libBaseName << " registered:" << d->serviceManager.addService(&serviceDescriptor);
  46. lib.unload();
  47. }
  48. }
  49. PluginManager::~PluginManager()
  50. {
  51. Q_D(PluginManager);
  52. delete d;
  53. }
  54. QServiceManager* PluginManager::serviceManager()
  55. {
  56. Q_D(PluginManager);
  57. return &(d->serviceManager);
  58. }
  59. void PluginManager::addSearchPath(const QString & searchPath)
  60. {
  61. Q_D(PluginManager);
  62. d->pluginPaths.push_back(searchPath);
  63. }
  64. void PluginManager::startAllPlugins()
  65. {
  66. Q_D(PluginManager);
  67. QDirIterator it(d->pluginPaths.front(), QDir::Files);
  68. if (it.hasNext())
  69. {
  70. qApp->addLibraryPath(d->pluginPaths.front());
  71. }
  72. while (it.hasNext()) {
  73. QString libName(it.next());
  74. QLibrary lib(libName);
  75. QFileInfo fileInfo(libName);
  76. QString libBaseName(fileInfo.baseName());
  77. if (libBaseName.startsWith("lib"))
  78. {
  79. libBaseName.remove(0, 3);
  80. }
  81. qDebug() << libBaseName;
  82. lib.load();
  83. if (lib.isLoaded())
  84. {
  85. QString xyz = QString(":/") + libBaseName + "/servicedescriptor.xml";
  86. qDebug() << "resource string: " << xyz;
  87. QFile serviceDescriptor(xyz);
  88. //qDebug() << "file exists: " << serviceDescriptor.exists();
  89. qDebug() << "open returns:" << serviceDescriptor.open(QIODevice::ReadOnly);
  90. qDebug() << "file open: " << serviceDescriptor.isOpen();
  91. qDebug() << "file is readable: " << serviceDescriptor.isReadable();
  92. //QByteArray serviceBA = serviceDescriptor.readAll();
  93. //qDebug() << serviceBA;
  94. qDebug() << "Service for " << libBaseName << " registered:" << d->serviceManager.addService(&serviceDescriptor);
  95. lib.unload();
  96. }
  97. }
  98. }
  99. }