diff --git a/interfaces/KoGenericRegistry.h b/interfaces/KoGenericRegistry.h --- a/interfaces/KoGenericRegistry.h +++ b/interfaces/KoGenericRegistry.h @@ -25,6 +25,8 @@ #include #include +#include "kis_assert.h" + /** * Base class for registry objects. * @@ -73,8 +75,11 @@ */ void add(T item) { - Q_ASSERT(item); - QString id = item->id(); + KIS_SAFE_ASSERT_RECOVER_RETURN(item); + + const QString id = item->id(); + KIS_SAFE_ASSERT_RECOVER_NOOP(!m_aliases.contains(id)); + if (m_hash.contains(id)) { m_doubleEntries << value(id); remove(id); @@ -89,7 +94,9 @@ */ void add(const QString &id, T item) { - Q_ASSERT(item); + KIS_SAFE_ASSERT_RECOVER_RETURN(item); + KIS_SAFE_ASSERT_RECOVER_NOOP(!m_aliases.contains(id)); + if (m_hash.contains(id)) { m_doubleEntries << value(id); remove(id); @@ -105,6 +112,17 @@ m_hash.remove(id); } + void addAlias(const QString &alias, const QString &id) + { + KIS_SAFE_ASSERT_RECOVER_NOOP(!m_hash.contains(alias)); + m_aliases[alias] = id; + } + + void removeAlias(const QString &alias) + { + m_aliases.remove(alias); + } + /** * Retrieve the object from the registry based on the unique * identifier string. @@ -123,16 +141,28 @@ */ bool contains(const QString &id) const { - return m_hash.contains(id); + bool result = m_hash.contains(id); + + if (!result && m_aliases.contains(id)) { + result = m_hash.contains(m_aliases.value(id)); + } + + return result; } /** * Retrieve the object from the registry based on the unique identifier string * @param id the id */ const T value(const QString &id) const { - return m_hash.value(id); + T result = m_hash.value(id); + + if (!result && m_aliases.contains(id)) { + result = m_hash.value(m_aliases.value(id)); + } + + return result; } /** @@ -165,6 +195,7 @@ private: QHash m_hash; + QHash m_aliases; }; #endif diff --git a/libs/image/kis_filter_strategy.cc b/libs/image/kis_filter_strategy.cc --- a/libs/image/kis_filter_strategy.cc +++ b/libs/image/kis_filter_strategy.cc @@ -193,15 +193,16 @@ KisFilterStrategyRegistry* KisFilterStrategyRegistry::instance() { if (!s_instance.exists()) { + s_instance->add(new KisBoxFilterStrategy); + s_instance->addAlias("Box", "NearestNeighbor"); + s_instance->add(new KisHermiteFilterStrategy); s_instance->add(new KisBicubicFilterStrategy); - s_instance->add(new KisBoxFilterStrategy); s_instance->add(new KisBilinearFilterStrategy); s_instance->add(new KisBellFilterStrategy); s_instance->add(new KisBSplineFilterStrategy); s_instance->add(new KisLanczos3FilterStrategy); s_instance->add(new KisMitchellFilterStrategy); - } return s_instance; }