diff options
12 files changed, 566 insertions, 63 deletions
diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt index b21b969493a..74f99540bee 100644 --- a/source/blender/editors/space_outliner/CMakeLists.txt +++ b/source/blender/editors/space_outliner/CMakeLists.txt @@ -52,10 +52,19 @@ set(SRC tree/tree_display_orphaned.cc tree/tree_display_scenes.cc tree/tree_display_data.cc + tree/tree_element.cc + tree/tree_element_anim_data.cc + tree/tree_element_driver_base.cc + tree/tree_element_nla.cc outliner_intern.h tree/tree_display.h tree/tree_display.hh + tree/tree_element.h + tree/tree_element.hh + tree/tree_element_anim_data.hh + tree/tree_element_driver_base.hh + tree/tree_element_nla.hh ) set(LIB diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index ecf8cc0f800..0294b4836c8 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -75,6 +75,14 @@ typedef TreeTraversalAction (*TreeTraversalFunc)(struct TreeElement *te, void *c typedef struct TreeElement { struct TreeElement *next, *prev, *parent; + + /** + * Handle to the new C++ object (a derived type of base #AbstractTreeElement) that should replace + * #TreeElement. Step by step, data should be moved to it and operations based on the type should + * become virtual methods of the class hierarchy. + */ + struct TreeElementType *type; + ListBase subtree; int xs, ys; /* Do selection. */ TreeStoreElem *store_elem; /* Element in tree store. */ diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index a02a8441620..7308b161d18 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -84,6 +84,7 @@ #include "outliner_intern.h" #include "tree/tree_display.h" +#include "tree/tree_element.h" #ifdef WIN32 # include "BLI_math_base.h" /* M_PI */ @@ -230,6 +231,7 @@ void outliner_free_tree_element(TreeElement *element, ListBase *parent_subtree) if (element->flag & TE_FREE_NAME) { MEM_freeN((void *)element->name); } + outliner_tree_element_type_free(&element->type); MEM_freeN(element); } @@ -959,6 +961,11 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, te->parent = parent; te->index = index; /* For data arrays. */ + + /* New C++ based type handle (`TreeElementType` in C, `AbstractTreeElement` in C++). Only some + * support this, eventually this should replace `TreeElement` entirely. */ + te->type = outliner_tree_element_type_create(type, te, idv); + if (ELEM(type, TSE_SEQUENCE, TSE_SEQ_STRIP, TSE_SEQUENCE_DUP)) { /* pass */ } @@ -994,7 +1001,10 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, te->idcode = GS(id->name); } - if (type == 0) { + if (te->type) { + outliner_tree_element_type_expand(te->type, space_outliner); + } + else if (type == 0) { TreeStoreElem *tsepar = parent ? TREESTORE(parent) : NULL; /* ID data-block. */ @@ -1002,68 +1012,9 @@ TreeElement *outliner_add_element(SpaceOutliner *space_outliner, outliner_add_id_contents(space_outliner, te, tselem, id); } } - else if (type == TSE_ANIM_DATA) { - IdAdtTemplate *iat = (IdAdtTemplate *)idv; - AnimData *adt = (AnimData *)iat->adt; - - /* this element's info */ - te->name = IFACE_("Animation"); - - /* Action */ - outliner_add_element(space_outliner, &te->subtree, adt->action, te, 0, 0); - - /* Drivers */ - if (adt->drivers.first) { - TreeElement *ted = outliner_add_element( - space_outliner, &te->subtree, adt, te, TSE_DRIVER_BASE, 0); - ID *lastadded = NULL; - FCurve *fcu; - - ted->name = IFACE_("Drivers"); - - for (fcu = adt->drivers.first; fcu; fcu = fcu->next) { - if (fcu->driver && fcu->driver->variables.first) { - ChannelDriver *driver = fcu->driver; - DriverVar *dvar; - - for (dvar = driver->variables.first; dvar; dvar = dvar->next) { - /* loop over all targets used here */ - DRIVER_TARGETS_USED_LOOPER_BEGIN (dvar) { - if (lastadded != dtar->id) { - /* XXX this lastadded check is rather lame, and also fails quite badly... */ - outliner_add_element( - space_outliner, &ted->subtree, dtar->id, ted, TSE_LINKED_OB, 0); - lastadded = dtar->id; - } - } - DRIVER_TARGETS_LOOPER_END; - } - } - } - } - - /* NLA Data */ - if (adt->nla_tracks.first) { - TreeElement *tenla = outliner_add_element(space_outliner, &te->subtree, adt, te, TSE_NLA, 0); - NlaTrack *nlt; - int a = 0; - - tenla->name = IFACE_("NLA Tracks"); - - for (nlt = adt->nla_tracks.first; nlt; nlt = nlt->next) { - TreeElement *tenlt = outliner_add_element( - space_outliner, &tenla->subtree, nlt, tenla, TSE_NLA_TRACK, a); - NlaStrip *strip; - int b = 0; - - tenlt->name = nlt->name; - - for (strip = nlt->strips.first; strip; strip = strip->next, b++) { - outliner_add_element( - space_outliner, &tenlt->subtree, strip->act, tenlt, TSE_NLA_ACTION, b); - } - } - } + else if (ELEM(type, TSE_ANIM_DATA, TSE_DRIVER_BASE, TSE_NLA, TSE_NLA_ACTION, TSE_NLA_TRACK)) { + /* Should already use new AbstractTreeElement design. */ + BLI_assert(0); } else if (type == TSE_GP_LAYER) { bGPDlayer *gpl = (bGPDlayer *)idv; diff --git a/source/blender/editors/space_outliner/tree/tree_element.cc b/source/blender/editors/space_outliner/tree/tree_element.cc new file mode 100644 index 00000000000..ce2a8fa634d --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element.cc @@ -0,0 +1,88 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#include "DNA_listBase.h" + +#include "../outliner_intern.h" + +#include "tree_element_anim_data.hh" +#include "tree_element_driver_base.hh" +#include "tree_element_nla.hh" + +#include "tree_element.h" +#include "tree_element.hh" + +namespace blender::ed::outliner { + +static AbstractTreeElement *tree_element_create(int type, TreeElement &legacy_te, void *idv) +{ + /* Would be nice to get rid of void * here, can we somehow expect the right type right away? + * Perfect forwarding maybe, once the API is C++ only? */ + ID &id = *static_cast<ID *>(idv); + + switch (type) { + case TSE_ANIM_DATA: + return new TreeElementAnimData(legacy_te, id); + case TSE_DRIVER_BASE: + return new TreeElementDriverBase(legacy_te, *static_cast<AnimData *>(idv)); + case TSE_NLA: + return new TreeElementNLA(legacy_te, *static_cast<AnimData *>(idv)); + case TSE_NLA_TRACK: + return new TreeElementNLATrack(legacy_te, *static_cast<NlaTrack *>(idv)); + case TSE_NLA_ACTION: + return new TreeElementNLAAction(legacy_te); + default: + break; + } + + return nullptr; +} + +static void tree_element_free(AbstractTreeElement **tree_element) +{ + delete *tree_element; + *tree_element = nullptr; +} + +static void tree_element_expand(AbstractTreeElement &tree_element, SpaceOutliner &space_outliner) +{ + tree_element.expand(space_outliner); +} + +} // namespace blender::ed::outliner + +namespace outliner = blender::ed::outliner; + +TreeElementType *outliner_tree_element_type_create(int type, TreeElement *legacy_te, void *idv) +{ + outliner::AbstractTreeElement *element = outliner::tree_element_create(type, *legacy_te, idv); + return reinterpret_cast<TreeElementType *>(element); +} + +void outliner_tree_element_type_expand(TreeElementType *type, SpaceOutliner *space_outliner) +{ + outliner::tree_element_expand(reinterpret_cast<outliner::AbstractTreeElement &>(*type), + *space_outliner); +} + +void outliner_tree_element_type_free(TreeElementType **type) +{ + outliner::tree_element_free(reinterpret_cast<outliner::AbstractTreeElement **>(type)); +} diff --git a/source/blender/editors/space_outliner/tree/tree_element.h b/source/blender/editors/space_outliner/tree/tree_element.h new file mode 100644 index 00000000000..9012321a323 --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element.h @@ -0,0 +1,45 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + * + * C-API for the Tree-Element types. + * This API shouldn't stay for long. All tree building should eventually be done through C++ types, + * with more type safety and an easier to reason about design. + */ + +#pragma once + +#include "DNA_space_types.h" + +struct TreeElement; + +#ifdef __cplusplus +extern "C" { +#endif + +/** C alias for an #AbstractTreeElement handle. */ +typedef struct TreeElementType TreeElementType; + +TreeElementType *outliner_tree_element_type_create(int type, TreeElement *legacy_te, void *idv); +void outliner_tree_element_type_free(TreeElementType **element); + +void outliner_tree_element_type_expand(TreeElementType *type, SpaceOutliner *space_outliner); + +#ifdef __cplusplus +} +#endif diff --git a/source/blender/editors/space_outliner/tree/tree_element.hh b/source/blender/editors/space_outliner/tree/tree_element.hh new file mode 100644 index 00000000000..8a1ebb51eae --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element.hh @@ -0,0 +1,53 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#pragma once + +#include "tree_element.h" + +namespace blender::ed::outliner { + +/* -------------------------------------------------------------------- */ +/* Tree-Display Interface */ + +class AbstractTreeElement { + protected: + /** + * Reference back to the owning legacy TreeElement. + * Most concrete types need access to this, so storing here. Eventually the type should be + * replaced by AbstractTreeElement and derived types. + */ + TreeElement &legacy_te_; + + public: + AbstractTreeElement(TreeElement &legacy_te) : legacy_te_(legacy_te) + { + } + virtual ~AbstractTreeElement() = default; + + /** + * Let the type add its own children. + */ + virtual void expand(SpaceOutliner &) const + { + } +}; + +} // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_anim_data.cc b/source/blender/editors/space_outliner/tree/tree_element_anim_data.cc new file mode 100644 index 00000000000..13a25800800 --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element_anim_data.cc @@ -0,0 +1,70 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#include "BLI_listbase_wrapper.hh" + +#include "DNA_anim_types.h" +#include "DNA_listBase.h" + +#include "BLT_translation.h" + +#include "../outliner_intern.h" +#include "tree_display.h" + +#include "tree_element_anim_data.hh" + +namespace blender::ed::outliner { + +TreeElementAnimData::TreeElementAnimData(TreeElement &legacy_te, ID &id) + : AbstractTreeElement(legacy_te), anim_data_(*reinterpret_cast<IdAdtTemplate &>(id).adt) +{ + BLI_assert(legacy_te.store_elem->type == TSE_ANIM_DATA); + /* this element's info */ + legacy_te.name = IFACE_("Animation"); + legacy_te.directdata = &anim_data_; +} + +void TreeElementAnimData::expand(SpaceOutliner &space_outliner) const +{ + /* Animation data-block itself. */ + outliner_add_element(&space_outliner, &legacy_te_.subtree, anim_data_.action, &legacy_te_, 0, 0); + + expand_drivers(space_outliner); + expand_NLA_tracks(space_outliner); +} + +void TreeElementAnimData::expand_drivers(SpaceOutliner &space_outliner) const +{ + if (BLI_listbase_is_empty(&anim_data_.drivers)) { + return; + } + outliner_add_element( + &space_outliner, &legacy_te_.subtree, &anim_data_, &legacy_te_, TSE_DRIVER_BASE, 0); +} + +void TreeElementAnimData::expand_NLA_tracks(SpaceOutliner &space_outliner) const +{ + if (BLI_listbase_is_empty(&anim_data_.nla_tracks)) { + return; + } + outliner_add_element(&space_outliner, &legacy_te_.subtree, &anim_data_, &legacy_te_, TSE_NLA, 0); +} + +} // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_anim_data.hh b/source/blender/editors/space_outliner/tree/tree_element_anim_data.hh new file mode 100644 index 00000000000..8114277b6d6 --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element_anim_data.hh @@ -0,0 +1,42 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#pragma once + +#include "tree_element.hh" + +struct TreeElement; + +namespace blender::ed::outliner { + +class TreeElementAnimData final : public AbstractTreeElement { + AnimData &anim_data_; + + public: + TreeElementAnimData(TreeElement &legacy_te, ID &id); + + void expand(SpaceOutliner &space_outliner) const override; + + private: + void expand_drivers(SpaceOutliner &space_outliner) const; + void expand_NLA_tracks(SpaceOutliner &space_outliner) const; +}; + +} // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_driver_base.cc b/source/blender/editors/space_outliner/tree/tree_element_driver_base.cc new file mode 100644 index 00000000000..a01a3c42531 --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element_driver_base.cc @@ -0,0 +1,68 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#include "BLI_listbase_wrapper.hh" + +#include "BKE_fcurve_driver.h" + +#include "DNA_anim_types.h" +#include "DNA_listBase.h" + +#include "BLT_translation.h" + +#include "../outliner_intern.h" +#include "tree_display.h" + +#include "tree_element_driver_base.hh" + +namespace blender::ed::outliner { + +TreeElementDriverBase::TreeElementDriverBase(TreeElement &legacy_te, AnimData &anim_data) + : AbstractTreeElement(legacy_te), anim_data_(anim_data) +{ + BLI_assert(legacy_te.store_elem->type == TSE_DRIVER_BASE); + legacy_te.name = IFACE_("Drivers"); +} + +void TreeElementDriverBase::expand(SpaceOutliner &space_outliner) const +{ + ID *lastadded = nullptr; + + for (FCurve *fcu : blender::ListBaseWrapper<FCurve>(anim_data_.drivers)) { + if (fcu->driver && fcu->driver->variables.first) { + ChannelDriver *driver = fcu->driver; + + for (DriverVar *dvar : blender::ListBaseWrapper<DriverVar>(driver->variables)) { + /* loop over all targets used here */ + DRIVER_TARGETS_USED_LOOPER_BEGIN (dvar) { + if (lastadded != dtar->id) { + /* XXX this lastadded check is rather lame, and also fails quite badly... */ + outliner_add_element( + &space_outliner, &legacy_te_.subtree, dtar->id, &legacy_te_, TSE_LINKED_OB, 0); + lastadded = dtar->id; + } + } + DRIVER_TARGETS_LOOPER_END; + } + } + } +} + +} // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_driver_base.hh b/source/blender/editors/space_outliner/tree/tree_element_driver_base.hh new file mode 100644 index 00000000000..1925e3570be --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element_driver_base.hh @@ -0,0 +1,38 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#pragma once + +#include "tree_element.hh" + +struct TreeElement; + +namespace blender::ed::outliner { + +class TreeElementDriverBase final : public AbstractTreeElement { + AnimData &anim_data_; + + public: + TreeElementDriverBase(TreeElement &legacy_te, AnimData &anim_data); + + void expand(SpaceOutliner &space_outliner) const override; +}; + +} // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_nla.cc b/source/blender/editors/space_outliner/tree/tree_element_nla.cc new file mode 100644 index 00000000000..5d4ec53e60c --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element_nla.cc @@ -0,0 +1,78 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#include "BLI_listbase_wrapper.hh" + +#include "DNA_anim_types.h" +#include "DNA_listBase.h" + +#include "BLT_translation.h" + +#include "../outliner_intern.h" +#include "tree_display.h" + +#include "tree_element_nla.hh" + +namespace blender::ed::outliner { + +TreeElementNLA::TreeElementNLA(TreeElement &legacy_te, AnimData &anim_data) + : AbstractTreeElement(legacy_te), anim_data_(anim_data) +{ + BLI_assert(legacy_te.store_elem->type == TSE_NLA); + legacy_te.name = IFACE_("NLA Tracks"); + legacy_te.directdata = &anim_data; +} + +void TreeElementNLA::expand(SpaceOutliner &space_outliner) const +{ + int a = 0; + for (NlaTrack *nlt : ListBaseWrapper<NlaTrack>(anim_data_.nla_tracks)) { + outliner_add_element(&space_outliner, &legacy_te_.subtree, nlt, &legacy_te_, TSE_NLA_TRACK, a); + a++; + } +} + +/* -------------------------------------------------------------------- */ + +TreeElementNLATrack::TreeElementNLATrack(TreeElement &legacy_te, NlaTrack &track) + : AbstractTreeElement(legacy_te), track_(track) +{ + BLI_assert(legacy_te.store_elem->type == TSE_NLA_TRACK); + legacy_te.name = track.name; +} + +void TreeElementNLATrack::expand(SpaceOutliner &space_outliner) const +{ + int a = 0; + for (NlaStrip *strip : ListBaseWrapper<NlaStrip>(track_.strips)) { + outliner_add_element( + &space_outliner, &legacy_te_.subtree, strip->act, &legacy_te_, TSE_NLA_ACTION, a); + a++; + } +} + +/* -------------------------------------------------------------------- */ + +TreeElementNLAAction::TreeElementNLAAction(TreeElement &legacy_te) : AbstractTreeElement(legacy_te) +{ + BLI_assert(legacy_te.store_elem->type == TSE_NLA_ACTION); +} + +} // namespace blender::ed::outliner diff --git a/source/blender/editors/space_outliner/tree/tree_element_nla.hh b/source/blender/editors/space_outliner/tree/tree_element_nla.hh new file mode 100644 index 00000000000..3ca62b13bd8 --- /dev/null +++ b/source/blender/editors/space_outliner/tree/tree_element_nla.hh @@ -0,0 +1,53 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +/** \file + * \ingroup spoutliner + */ + +#pragma once + +#include "tree_element.hh" + +struct NlaTrack; +struct NlaStrip; + +namespace blender::ed::outliner { + +class TreeElementNLA final : public AbstractTreeElement { + AnimData &anim_data_; + + public: + TreeElementNLA(TreeElement &legacy_te, AnimData &anim_data); + + void expand(SpaceOutliner &space_outliner) const override; +}; + +class TreeElementNLATrack final : public AbstractTreeElement { + NlaTrack &track_; + + public: + TreeElementNLATrack(TreeElement &legacy_te, NlaTrack &track); + + void expand(SpaceOutliner &space_outliner) const override; +}; + +class TreeElementNLAAction final : public AbstractTreeElement { + public: + TreeElementNLAAction(TreeElement &legacy_te); +}; + +} // namespace blender::ed::outliner |