00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "itemfactory.h"
00023
00024 #include <QVApplication>
00025 #include <QVMPlayerCamera>
00026 #include <QVWorker>
00027 #include "qvworkers/qvfilterselectorworker.h"
00028 #include "qvworkers/qvimageretarderworker.h"
00029 #include "qvworkers/qvimagemeansworker.h"
00030 #include "qvworkers/qvgraphsworker.h"
00031 #include "qvworkers/qvpointworker.h"
00032 #include <QVImageCanvas>
00033 #include <QVNumericPlot>
00034 #include <QVHistogramPlot>
00035 #include <QVCPUPlot>
00036
00038 ItemFactory::ItemFactory(): QObject()
00039 {
00040 inputItems.append("QVMPlayerCamera");
00041 inputItems.append("QVPointWorker");
00042
00043 outputItems.append("QVImageCanvas");
00044 outputItems.append("QVNumericPlot");
00045 outputItems.append("QVHistogramPlot");
00046 outputItems.append("QVCPUPlot");
00047 middleItems.append("QVGraphsWorker");
00048 middleItems.append("QVFilterSelectorWorker<uchar,1>");
00049 middleItems.append("QVFilterSelectorWorker<uchar,3>");
00050 middleItems.append("QVImageRetarderWorker<uchar,3>");
00051 middleItems.append("QVImageRetarderWorker<uchar,1>");
00052 middleItems.append("QVImageMeans<uChar,1>");
00053 middleItems.append("QVImageMeans<uChar,3>");
00054
00055
00056 foreach(QString qvippWorkerName, getQVIPPWorkersNames())
00057 middleItems.append(qvippWorkerName);
00058
00059
00060
00061
00062
00063
00064
00065 }
00066
00067 QList<QString> ItemFactory::getItemTypes() const
00068 {
00069 return inputItems + middleItems + outputItems;
00070 }
00071
00072 QList<QString> ItemFactory::getInputItemTypes() const
00073 {
00074 return inputItems;
00075 }
00076
00077 QList<QString> ItemFactory::getMiddleItemTypes() const
00078 {
00079 return middleItems;
00080 }
00081
00082 QList<QString> ItemFactory::getOutputItemTypes() const
00083 {
00084 return outputItems;
00085 }
00086
00087 QVPropertyContainer *ItemFactory::createContainer(QString type, QString name) const
00088 {
00089 QVPropertyContainer *qvippWorker = newQVIPPWorker(type, name);
00090 if (qvippWorker != NULL)
00091 return qvippWorker;
00092 else if (type == "QVMPlayerCamera") {
00093 QVMPlayerCamera* mpc = new QVMPlayerCamera(name);
00094 if (mpc->getPropertyValue<QString>("URL").isEmpty())
00095 mpc->setPropertyValue("URL", QString("http://perception.inf.um.es/public_data/videos/misc/penguin.dv"));
00096 return mpc;
00097 }
00098 else if (type == "QVImageCanvas") return new QVImageCanvas(name);
00099 else if (type == "QVNumericPlot") return new QVNumericPlot(name);
00100 else if (type == "QVHistogramPlot") return new QVHistogramPlot(name);
00101 else if (type == "QVCPUPlot") return new QVCPUPlot(name);
00102 else if (type == "QVGraphsWorker") return new QVGraphsWorker(name);
00103 else if (type == "QVFilterSelectorWorker<uchar,1>") return new QVFilterSelectorWorker<uchar, 1>(name);
00104 else if (type == "QVFilterSelectorWorker<uchar,3>") return new QVFilterSelectorWorker<uchar, 3>(name);
00105 else if (type == "QVImageRetarderWorker<uchar,3>") return new QVImageRetarderWorker<uchar, 3>(name);
00106 else if (type == "QVImageRetarderWorker<uchar,1>") return new QVImageRetarderWorker<uchar, 1>(name);
00107 else if (type == "QVImageMeans<uChar,1>") return new QVImageMeans<uChar, 1>(name);
00108 else if (type == "QVImageMeans<uChar,3>") return new QVImageMeans<uChar, 3>(name);
00109 else if (type == "QVPointWorker") return new QVPointWorker(name);
00110 else if (userWorkers.contains(type)) {
00111 QVWorker * newWorker = (QVWorker *)QMetaType::construct(userWorkers.value(type), (void *)0);
00112 newWorker->setName(name);
00113 return newWorker;
00114 }
00115 return 0;
00116 }
00117
00118 bool ItemFactory::deleteContainer(QVPropertyContainer *cont) const
00119 {
00120
00121 QString type = typeName(cont);
00122
00123
00124
00125
00126
00127
00128
00129 delete cont;
00130
00131 return TRUE;
00132 }
00133
00134 QString ItemFactory::containerType(QVPropertyContainer *cont) const
00135 {
00136
00137 return QString(typeName(cont));
00138 }
00139
00140 const QString ItemFactory::registerUserWorker(QVWorker * worker)
00141 {
00142 const char * choptypeidname = typeName(worker);
00143
00144
00145 QString typeString(choptypeidname);
00146 int type = QMetaType::type(choptypeidname);
00147
00148
00149 if ( (type != 0) && (!middleItems.contains(typeString)) ) {
00150 middleItems.append(typeString);
00151 userWorkers.insert(typeString, type);
00152 return typeString;
00153 }
00154 return QString();
00155 }
00156
00157 bool ItemFactory::isUserType(QString type) const
00158 {
00159 return userWorkers.contains(type);
00160 }
00161
00162 const char *ItemFactory::typeName(QVPropertyContainer *cont) const
00163 {
00164
00165 const char * typeidname = typeid(*cont).name();
00166
00167
00168 int i = 0;
00169 while ( (typeidname[i] != '\0') && ((typeidname[i] == '0') || (typeidname[i] == '1') || (typeidname[i] == '2') || (typeidname[i] == '3') ||
00170 (typeidname[i] == '4') || (typeidname[i] == '5') || (typeidname[i] == '6') || (typeidname[i] == '7') || (typeidname[i] == '8') ||
00171 (typeidname[i] == '9')) ) {
00172 i++;
00173 }
00174 return (typeidname + i*(sizeof(char)));
00175 }
00176
00177