Object Detection  5.0
Image Processing Using Qt and Opencv
circledetectorpluginmodelimpl.cpp
1 #include "circledetectorpluginmodelimpl.h"
2 
3 #include <QPluginLoader>
4 
5 
6 CIRCLE_MODEL_BEGIN_NAMESPACE
7 CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::_CircleDetectorPluginModelImpl(QString path, CircleDetectorPluginModel* const _ptr) : ptr{_ptr},
8  m_pluginPath{path}
9 {
10 
11  loadPlugins();
12 }
13 
14 void CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::loadPlugins()
15 {
16  ptr->removeRows(0, m_filters.size(), QModelIndex());
17  m_filters.clear();
18  QDir dir_path(pluginPath());
19  foreach (QString fileName, dir_path.entryList(QDir::Files)) {
20  QPluginLoader loader(dir_path.absoluteFilePath(fileName));
21  QObject *obj = loader.instance();
22  if(obj){
23  PluginSharedPointer iface(qobject_cast<PluginIFace *>(obj));
24  if(iface){
25  m_pluginPaths.push_back(dir_path.absoluteFilePath(fileName));
26  m_filters.push_back(iface);
27  }
28 
29  }
30  }
31 
32 }
33 
34 CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::~_CircleDetectorPluginModelImpl()
35 {
36 
37 }
38 
39 
40 int CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::rowCount(const QModelIndex &parent) const
41 {
42  return m_filters.size();
43 }
44 
45 int CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::columnCount(const QModelIndex &parent) const
46 {
47  return COLUMN_COUNT;
48 }
49 
50 QVariant CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::data(const QModelIndex &index, int role) const
51 {
52  int row = index.row();
53  int col = index.column();
54  switch (role) {
55  case Qt::DisplayRole:
56  return data(index, Qt::UserRole + 2 + col);
57  case FILTER_NAME:
58  return m_filters[row]->filterName();
59  break;
60  case FILTER:
61  {
62  QVariant v;
63  v.setValue(m_filters[row]);
64  return v;
65  break;
66  }
67  case FILTER_AUTHOR:
68  return m_filters[row]->author();
69 
70  case FILTER_DESCRIPTION:
71  return m_filters[row]->filterDescription();
72 
73  case FILTER_PATH:
74  return m_pluginPaths[row];
75  default:
76  break;
77  }
78  return QVariant();
79 }
80 
81 QString CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::pluginPath() const
82 {
83  return m_pluginPath;
84 }
85 
86 void CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::setPluginPath(const QString &pluginPath)
87 {
88  m_pluginPath = pluginPath;
89 }
90 
91 
92 PluginSharedPointerList CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::filters() const
93 {
94  return m_filters;
95 }
96 
97 void CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::setFilters(const PluginSharedPointerList &filters)
98 {
99  m_filters = filters;
100 }
101 
102 QList<QString> CircleDetectorPluginModel::_CircleDetectorPluginModelImpl::pluginPaths() const
103 {
104  return m_pluginPaths;
105 }
106 
107 CIRCLE_MODEL_END_NAMESPACE