Cleanup: Reduce `void *` reliance of new sequencer C++ Outliner elements

Plan is to remove things like `TreeElement.directdata` and to instead
expose specific queries in the new type specific tree-element classes.
e.g. like here: `TreeElementSequence.getSequence()`

For now uses `tree_element_cast<>()` to get the new type specific
tree-element, later these should replace `TreeElement` all together.
This commit is contained in:
Julian Eisel 2022-01-26 16:24:59 +01:00
parent 08e2885796
commit fc0dd5583c
5 changed files with 33 additions and 9 deletions

View File

@ -107,7 +107,7 @@ typedef struct TreeElement {
short idcode; /* From TreeStore id. */
short xend; /* Width of item display, for select. */
const char *name;
void *directdata; /* Armature Bones, Base, Sequence, Strip... */
void *directdata; /* Armature Bones, Base, ... */
PointerRNA rnaptr; /* RNA Pointer. */
} TreeElement;

View File

@ -80,6 +80,9 @@
#include "RNA_define.h"
#include "outliner_intern.hh"
#include "tree/tree_element_seq.hh"
using namespace blender::ed::outliner;
/**
* \note changes to selection are by convention and not essential.
@ -676,7 +679,8 @@ static void tree_element_sequence_activate(bContext *C,
TreeElement *te,
const eOLSetState set)
{
Sequence *seq = (Sequence *)te->directdata;
const TreeElementSequence *te_seq = tree_element_cast<TreeElementSequence>(te);
Sequence *seq = &te_seq->getSequence();
Editing *ed = SEQ_editing_get(scene);
if (BLI_findindex(ed->seqbasep, seq) != -1) {
@ -954,7 +958,8 @@ static eOLDrawState tree_element_posegroup_state_get(const ViewLayer *view_layer
static eOLDrawState tree_element_sequence_state_get(const Scene *scene, const TreeElement *te)
{
const Sequence *seq = (const Sequence *)te->directdata;
const TreeElementSequence *te_seq = tree_element_cast<TreeElementSequence>(te);
const Sequence *seq = &te_seq->getSequence();
const Editing *ed = scene->ed;
if (ed && ed->act_seq == seq && seq->flag & SELECT) {
@ -965,7 +970,9 @@ static eOLDrawState tree_element_sequence_state_get(const Scene *scene, const Tr
static eOLDrawState tree_element_sequence_dup_state_get(const TreeElement *te)
{
const Sequence *seq = (const Sequence *)te->directdata;
const TreeElementSequenceStripDuplicate *te_dup =
tree_element_cast<TreeElementSequenceStripDuplicate>(te);
const Sequence *seq = &te_dup->getSequence();
if (seq->flag & SELECT) {
return OL_DRAWSEL_NORMAL;
}

View File

@ -96,9 +96,12 @@
#include "SEQ_sequencer.h"
#include "outliner_intern.hh"
#include "tree/tree_element_seq.hh"
static CLG_LogRef LOG = {"ed.outliner.tools"};
using namespace blender::ed::outliner;
/* -------------------------------------------------------------------- */
/** \name ID/Library/Data Set/Un-link Utilities
* \{ */
@ -1285,7 +1288,8 @@ static void ebone_fn(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem),
static void sequence_fn(int event, TreeElement *te, TreeStoreElem *UNUSED(tselem), void *scene_ptr)
{
Sequence *seq = (Sequence *)te->directdata;
TreeElementSequence *te_seq = tree_element_cast<TreeElementSequence>(te);
Sequence *seq = &te_seq->getSequence();
Scene *scene = (Scene *)scene_ptr;
Editing *ed = SEQ_editing_get(scene);
if (BLI_findindex(ed->seqbasep, seq) != -1) {

View File

@ -41,7 +41,6 @@ TreeElementSequence::TreeElementSequence(TreeElement &legacy_te, Sequence &seque
* so this is "safe".
*/
legacy_te.idcode = sequence_.type;
legacy_te.directdata = &sequence_;
legacy_te.name = sequence_.name + 2;
}
@ -70,6 +69,11 @@ void TreeElementSequence::expand(SpaceOutliner &space_outliner) const
}
}
Sequence &TreeElementSequence::getSequence() const
{
return sequence_;
}
/* -------------------------------------------------------------------- */
/* Strip */
@ -84,7 +88,6 @@ TreeElementSequenceStrip::TreeElementSequenceStrip(TreeElement &legacy_te, Strip
else {
legacy_te_.name = IFACE_("Strip None");
}
legacy_te_.directdata = &strip;
}
/* -------------------------------------------------------------------- */
@ -92,13 +95,17 @@ TreeElementSequenceStrip::TreeElementSequenceStrip(TreeElement &legacy_te, Strip
TreeElementSequenceStripDuplicate::TreeElementSequenceStripDuplicate(TreeElement &legacy_te,
Sequence &sequence)
: AbstractTreeElement(legacy_te)
: AbstractTreeElement(legacy_te), sequence_(sequence)
{
BLI_assert(legacy_te.store_elem->type == TSE_SEQUENCE_DUP);
legacy_te_.idcode = sequence.type;
legacy_te_.directdata = &sequence;
legacy_te_.name = sequence.strip->stripdata->name;
}
Sequence &TreeElementSequenceStripDuplicate::getSequence() const
{
return sequence_;
}
} // namespace blender::ed::outliner

View File

@ -35,6 +35,8 @@ class TreeElementSequence : public AbstractTreeElement {
bool expandPoll(const SpaceOutliner &) const override;
void expand(SpaceOutliner &) const override;
Sequence &getSequence() const;
};
/* -------------------------------------------------------------------- */
@ -47,8 +49,12 @@ class TreeElementSequenceStrip : public AbstractTreeElement {
/* -------------------------------------------------------------------- */
class TreeElementSequenceStripDuplicate : public AbstractTreeElement {
Sequence &sequence_;
public:
TreeElementSequenceStripDuplicate(TreeElement &legacy_te, Sequence &sequence);
Sequence &getSequence() const;
};
} // namespace blender::ed::outliner