Skip to content
Snippets Groups Projects
Commit e046bb82 authored by Mirko Wächter's avatar Mirko Wächter
Browse files

any filter can now be used in the observerview

parent 34427e1a
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -137,23 +137,24 @@ void ObserverWidget::filterSelected() ...@@ -137,23 +137,24 @@ void ObserverWidget::filterSelected()
QAction* action = qobject_cast<QAction*>(sender()); QAction* action = qobject_cast<QAction*>(sender());
if (action) if (action)
{ {
auto widget = qobject_cast<DataFieldPropertiesWidget*>(propertiesWidget); // auto widget = qobject_cast<DataFieldPropertiesWidget*>(propertiesWidget);
DatafieldFilterBasePtr filter; DatafieldFilterBasePtr filter;
if (action->text() == "Median Filter") if (!action->data().isNull())
{ {
filter = new filters::MedianFilter(); auto filterName = action->data().toString().toStdString();
} auto objFac = controller->getIceManager()->getCommunicator()->findObjectFactory(filterName);
else if (action->text() == "Average Filter") if (!objFac)
{ {
filter = new filters::MedianFilter(); ARMARX_WARNING << "Could not find obj factory of type " << filterName;
} return;
else if (action->text() == "Gaussian Filter") }
{
filter = new filters::MedianFilter(); filter = DatafieldFilterBasePtr::dynamicCast(objFac->create(filterName));
} if (!filter)
else if (action->text() == "Butterworth Filter") {
{ ARMARX_WARNING << "Could not create filter of type " << objFac;
filter = new filters::ButterworthFilter(10, 100, Lowpass, 1); return;
}
} }
else else
{ {
...@@ -222,17 +223,70 @@ void ObserverWidget::treeView_contextMenu(const QPoint& point) ...@@ -222,17 +223,70 @@ void ObserverWidget::treeView_contextMenu(const QPoint& point)
connect(autoUpdateAction, SIGNAL(toggled(bool)), this, SLOT(toggleAutoUpdate(bool))); connect(autoUpdateAction, SIGNAL(toggled(bool)), this, SLOT(toggleAutoUpdate(bool)));
treeViewMenu.addAction(autoUpdateAction); treeViewMenu.addAction(autoUpdateAction);
auto widget = qobject_cast<DataFieldPropertiesWidget*>(propertiesWidget); DataFieldPropertiesWidget* widget = qobject_cast<DataFieldPropertiesWidget*>(propertiesWidget);
if (widget) if (widget)
{ {
auto typeId = widget->getVariant()->getType();
selectedFilterId = widget->getDatafieldIdentifier()->getIdentifierStr(); selectedFilterId = widget->getDatafieldIdentifier()->getIdentifierStr();
QMenu* filters = treeViewMenu.addMenu("Filters"); QMenu* filters = treeViewMenu.addMenu("Filters");
filters->addAction("Median Filter", this, SLOT(filterSelected())); std::map<std::string, bool> filterNames;
filters->addAction("Average Filter", this, SLOT(filterSelected())); for (const FactoryCollectionBasePtr & facContainer : FactoryCollectionBase::GetPreregistratedFactories())
filters->addAction("Gaussian Filter", this, SLOT(filterSelected())); {
filters->addAction("Butterworth Filter", this, SLOT(filterSelected())); if (!facContainer)
{
continue;
}
for (auto pair : facContainer->getFactories())
{
Ice::ObjectFactoryPtr fac = pair.second;
if (!fac)
{
continue;
}
try
{
auto obj = fac->create(pair.first);
if (!obj)
{
continue;
}
// auto ids = obj->ice_ids();
// auto it = std::find(ids.begin(), ids.end(), "::armarx::DatafieldFilterBase");
DatafieldFilterBasePtr filter = DatafieldFilterBasePtr::dynamicCast(obj);
if (filter)
{
auto supportedTypes = filter->getSupportedTypes();
auto typeIt = std::find(supportedTypes.begin(), supportedTypes.end(), typeId);
filterNames.insert(std::make_pair(pair.first, typeIt != supportedTypes.end()));
}
}
catch (...)
{
}
}
}
for (auto filter : filterNames)
{
const boost::regex e("::armarx::([a-zA-Z0-9_]+)Base");
boost::match_results<std::string::const_iterator> what;
boost::regex_search(filter.first, what, e);
QAction* a;
if (what.size() < 2)
{
a = filters->addAction(filter.first.c_str(), this, SLOT(filterSelected()));
}
else
{
std::string filteredName = what[1];
a = filters->addAction(filteredName.c_str(), this, SLOT(filterSelected()));
}
a->setEnabled(filter.second);
a->setData(filter.first.c_str());
}
} }
// show menu // show menu
......
...@@ -55,6 +55,11 @@ DataFieldIdentifierPtr DataFieldPropertiesWidget::getDatafieldIdentifier() const ...@@ -55,6 +55,11 @@ DataFieldIdentifierPtr DataFieldPropertiesWidget::getDatafieldIdentifier() const
return dataFieldIdentifier; return dataFieldIdentifier;
} }
VariantPtr DataFieldPropertiesWidget::getVariant()
{
return variant;
}
void DataFieldPropertiesWidget::createUi() void DataFieldPropertiesWidget::createUi()
{ {
// create property entries // create property entries
......
...@@ -45,7 +45,7 @@ namespace armarx ...@@ -45,7 +45,7 @@ namespace armarx
void setEnableEdit(bool enableEdit); void setEnableEdit(bool enableEdit);
bool getEnableEdit(); bool getEnableEdit();
DataFieldIdentifierPtr getDatafieldIdentifier() const; DataFieldIdentifierPtr getDatafieldIdentifier() const;
VariantPtr getVariant();
private: private:
void createUi(); void createUi();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment