113 lines
2.7 KiB
C++
113 lines
2.7 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
EffectCategory.cpp
|
|
|
|
Audacity(R) is copyright (c) 1999-2008 Audacity Team.
|
|
License: GPL v2. See License.txt.
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
#include "Effect.h"
|
|
#include "EffectCategory.h"
|
|
|
|
|
|
EffectCategory::EffectCategory(const wxString& uri, const wxString& name)
|
|
: mUri(uri),
|
|
mName(name),
|
|
mParentsFrozen(false) {
|
|
|
|
}
|
|
|
|
|
|
const wxString& EffectCategory::GetUri() const {
|
|
return mUri;
|
|
}
|
|
|
|
const wxString& EffectCategory::GetName() const {
|
|
return mName;
|
|
}
|
|
|
|
const CategorySet& EffectCategory::GetParents() const {
|
|
return mParents;
|
|
}
|
|
|
|
const CategorySet& EffectCategory::GetSubCategories() const {
|
|
return mSubCategories;
|
|
}
|
|
|
|
EffectSet EffectCategory::GetEffects(int type) const {
|
|
EffectSet result;
|
|
EffectSet::const_iterator iter;
|
|
for (iter = mEffects.begin(); iter != mEffects.end(); ++iter) {
|
|
int g = (*iter)->GetEffectFlags();
|
|
if ((g & type) == g)
|
|
result.insert(*iter);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
// Return all the effects that belong to this immediate category or any
|
|
// of its subcategories), filtered by effect type.
|
|
EffectSet EffectCategory::GetAllEffects(int type) const {
|
|
EffectSet result = GetEffects(type);
|
|
CategorySet::const_iterator iter;
|
|
for (iter = mSubCategories.begin(); iter != mSubCategories.end(); ++iter) {
|
|
EffectSet tmp = (*iter)->GetAllEffects(type);
|
|
EffectSet::const_iterator itr2;
|
|
for (itr2 = tmp.begin(); itr2 != tmp.end(); ++itr2)
|
|
result.insert(*itr2);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
bool EffectCategory::AddParent(EffectCategory* parent) {
|
|
if (mParentsFrozen)
|
|
return false;
|
|
if (parent->IsDescendantOf(this))
|
|
return false;
|
|
mParents.insert(parent);
|
|
parent->mSubCategories.insert(this);
|
|
return true;
|
|
}
|
|
|
|
bool EffectCategory::AddEffect(Effect* effect) {
|
|
mEffects.insert(effect);
|
|
return true;
|
|
}
|
|
|
|
void EffectCategory::FreezeParents() {
|
|
mParentsFrozen = true;
|
|
}
|
|
|
|
void EffectCategory::UnfreezeParents() {
|
|
mParentsFrozen = false;
|
|
}
|
|
|
|
bool EffectCategory::IsDescendantOf(EffectCategory* category) {
|
|
if (category == this)
|
|
return true;
|
|
CategorySet::const_iterator iter;
|
|
for (iter = mParents.begin(); iter != mParents.end(); ++iter) {
|
|
if ((*iter)->IsDescendantOf(category))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
// Indentation settings for Vim and Emacs and unique identifier for Arch, a
|
|
// version control system. Please do not modify past this point.
|
|
//
|
|
// Local Variables:
|
|
// c-basic-offset: 3
|
|
// indent-tabs-mode: nil
|
|
// End:
|
|
//
|
|
// vim: et sts=3 sw=3
|
|
// arch-tag: 2eabc50c-b33d-4699-a526-66a5b2284fc5
|
|
|