217 lines
7.8 KiB
C++
Executable File
217 lines
7.8 KiB
C++
Executable File
#pragma once
|
|
|
|
typedef enum
|
|
{
|
|
SVT_PROCEED,
|
|
SVT_EXISTS,
|
|
SVT_DO_NOT_PROCEED,
|
|
} SvTraverseStatus;
|
|
|
|
typedef enum
|
|
{
|
|
REFTYPE_CHILD,
|
|
REFTYPE_SUBANIM,
|
|
REFTYPE_PLUGIN,
|
|
} SvReferenceType;
|
|
|
|
// Filter bits...
|
|
static const DWORD SV_FILTER_SELOBJECTS = (1<<0);
|
|
static const DWORD SV_FILTER_OBJECTMODS = (1<<1);
|
|
static const DWORD SV_FILTER_BASEPARAMS = (1<<2);
|
|
static const DWORD SV_FILTER_MATPARAMS = (1<<3);
|
|
static const DWORD SV_FILTER_GEOM = (1<<4);
|
|
static const DWORD SV_FILTER_SHAPES = (1<<5);
|
|
static const DWORD SV_FILTER_LIGHTS = (1<<6);
|
|
static const DWORD SV_FILTER_CAMERAS = (1<<7);
|
|
static const DWORD SV_FILTER_HELPERS = (1<<8);
|
|
static const DWORD SV_FILTER_WARPS = (1<<9);
|
|
static const DWORD SV_FILTER_VISIBLE_OBJS = (1<<10);
|
|
static const DWORD SV_FILTER_CONTROLLERS = (1<<11);
|
|
static const DWORD SV_FILTER_ANIMATEDONLY = (1<<12);
|
|
static const DWORD SV_FILTER_MAPS = (1<<13);
|
|
static const DWORD SV_FILTER_BONES = (1<<14);
|
|
|
|
// Schematic view UI colors...
|
|
static const int SV_UICLR_WINBK = 0;
|
|
static const int SV_UICLR_NODEBK = 1;
|
|
static const int SV_UICLR_SELNODEBK = 2;
|
|
static const int SV_UICLR_NODE_HIGHLIGHT = 3;
|
|
static const int SV_UICLR_MATERIAL_HIGHLIGHT = 4;
|
|
static const int SV_UICLR_MODIFIER_HIGHLIGHT = 5;
|
|
static const int SV_UICLR_PLUGIN_HIGHLIGHT = 6;
|
|
static const int SV_UICLR_SUBANIM_LINE = 7;
|
|
static const int SV_UICLR_CHILD_LINE = 8;
|
|
static const int SV_UICLR_FRAME = 9;
|
|
static const int SV_UICLR_SELTEXT = 10;
|
|
static const int SV_UICLR_TEXT = 11;
|
|
static const int SV_UICLR_FOCUS = 12;
|
|
static const int SV_UICLR_MARQUIS = 13;
|
|
static const int SV_UICLR_COLLAPSEARROW = 14;
|
|
static const int SV_UICLR_GEOMOBJECT_BK = 15;
|
|
static const int SV_UICLR_LIGHT_BK = 16;
|
|
static const int SV_UICLR_CAMERA_BK = 17;
|
|
static const int SV_UICLR_SHAPE_BK = 18;
|
|
static const int SV_UICLR_HELPER_BK = 19;
|
|
static const int SV_UICLR_SYSTEM_BK = 20;
|
|
static const int SV_UICLR_CONTROLLER_BK = 21;
|
|
static const int SV_UICLR_MODIFIER_BK = 22;
|
|
static const int SV_UICLR_MATERIAL_BK = 23;
|
|
static const int SV_UICLR_MAP_BK = 24;
|
|
|
|
static const int SV_UICLR_CACHE_SIZE = 25;
|
|
|
|
// Magic value returned from Animatable::SvGetSwatchColor(...)
|
|
// to indicate that no swatch is to be drawn...
|
|
static const int SV_NO_SWATCH = 0xFFFFFFFF;
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Bit flags which can be passed to IGraphObjectManager::AddAnimatable(...)
|
|
// and Animatable::SvTraverseAnimGraph(....)
|
|
//-------------------------------------------------------------------------
|
|
|
|
// If set, newly created node will be in the hidden state. If the node
|
|
// already exists in the graph, the flag is ignored...
|
|
static const DWORD SV_INITIALLY_HIDDEN = 0x00000001;
|
|
|
|
// If set, shared instances of an animatable will produce multiple
|
|
// graph nodes in the schematic view instead of a single shared graph node...
|
|
static const DWORD SV_DUPLICATE_INSTANCES = 0x00000002;
|
|
|
|
// If set, the newly created children of the newly created node
|
|
// will be in the hidden state. If the node already exists in the graph,
|
|
// the flag is ignored. Children of this node that already exist in
|
|
// the graph will not have their visibility state changed...
|
|
static const DWORD SV_INITIALLY_CLOSED = 0x00000004;
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Flags which can be passed to IGraphObjectManager::PushLevel(...)
|
|
//-------------------------------------------------------------------------
|
|
|
|
// This id, when passed to PushLevel(), indicates that no id is to be associated
|
|
// with Animatable being pushed onto the stack...
|
|
static const int SV_NO_ID = 0x80000000;
|
|
|
|
class IGraphNode;
|
|
class Animatable;
|
|
class IGraphObjectManager;
|
|
|
|
class MultiSelectCallback
|
|
{
|
|
public:
|
|
virtual int Priority() = 0; // Used for sorting select order.
|
|
virtual void Begin(IGraphObjectManager *gom, bool clear) = 0;
|
|
virtual void Select(IGraphObjectManager *gom, IGraphNode *gNode, bool isSelected) = 0;
|
|
virtual void End(IGraphObjectManager *gom) = 0;
|
|
};
|
|
|
|
class IGraphRef
|
|
{
|
|
public:
|
|
};
|
|
|
|
class IGraphNode
|
|
{
|
|
public:
|
|
|
|
// Returns the Animatable associated with this node...
|
|
virtual Animatable *GetAnim() = 0;
|
|
|
|
// Returns the "primary parent" of this node. Nodes
|
|
// can have multiple parents (objects referencing
|
|
// this node) so this function is not strictly
|
|
// accurate. That said, many nodes have the
|
|
// concept of an owner node, which is what this
|
|
// function returns.
|
|
virtual IGraphNode *GetParentNode() = 0;
|
|
|
|
// Returns the "owner" of this node. Some nodes
|
|
// have multiple owners. When this is the case, this
|
|
// function returns the "first" owner (the object
|
|
// that first added this node to the schematic view)...
|
|
virtual Animatable *GetOwner() = 0;
|
|
|
|
// Return the "id" of this node. When nodes are
|
|
// added to the schematic view (via the
|
|
// IGraphObjectManager::AddAnimatable(...) method),
|
|
// an integer is provided. This value is is not
|
|
// used internally by the schematic view. Rather,
|
|
// it is available to implementers of the
|
|
// Animatable::Sv*() methods to aid in identifying
|
|
// the node.
|
|
virtual int GetID() = 0;
|
|
};
|
|
|
|
class SvGraphNodeReference
|
|
{
|
|
public:
|
|
|
|
IGraphNode *gNode;
|
|
SvTraverseStatus stat;
|
|
|
|
SvGraphNodeReference()
|
|
{
|
|
gNode= NULL;
|
|
stat = SVT_DO_NOT_PROCEED;
|
|
}
|
|
};
|
|
|
|
class IGraphObjectManager
|
|
{
|
|
public:
|
|
|
|
// During traversal of the Animatable graph via SvTraverseAnimGraph(...),
|
|
// PushLevel() and PopLevel() should be called appropriately to
|
|
// maintain an ownership stack. This is required by the schematic view
|
|
// when nodes are added to the graph with the "SV_DUPLICATE_INSTANCES"
|
|
// flag set...
|
|
virtual void PushLevel(Animatable *anim, int id = SV_NO_ID) = 0;
|
|
virtual void PopLevel() = 0;
|
|
|
|
// Adds an Animatable to the schematic view...
|
|
virtual SvGraphNodeReference AddAnimatable(Animatable *anim, Animatable *owner, int id, DWORD flags = 0) = 0;
|
|
|
|
// Add a reference from "maker" node to "target"...
|
|
virtual IGraphRef *AddReference(IGraphNode *maker, IGraphNode *target, SvReferenceType type) = 0;
|
|
|
|
// Pops up the property editor dialog on the
|
|
// selected nodes in the schematic view...
|
|
virtual void SvEditSelectedNodeProperties() = 0;
|
|
|
|
// Selects the given node in the material editor.
|
|
// Does nothing if "gNode" does not represent a
|
|
// material or map...
|
|
virtual void SvSelectInMaterialEditor(IGraphNode *gNode) = 0;
|
|
|
|
// Selects the given node in the modifier panel.
|
|
// Does nothing if "gNode" does not represent an
|
|
// object...
|
|
virtual void SvSetCurEditObject(IGraphNode *gNode) = 0;
|
|
|
|
// Returns true if the given node is current
|
|
// in the modifier panel...
|
|
virtual bool SvIsCurEditObject(IGraphNode *gNode) = 0;
|
|
|
|
virtual bool ApplyModifier(IGraphNode *gModNode, IGraphNode *gParentNode) = 0;
|
|
virtual bool DeleteModifier(IGraphNode *gNode) = 0;
|
|
|
|
// Invalidates the schematic view window...
|
|
virtual void SvInvalidateView() = 0;
|
|
|
|
// Invalidates a node in the schematic view window...
|
|
virtual void SvInvalidateNode(IGraphNode *gNode) = 0;
|
|
|
|
// Forces the material editor to update...
|
|
virtual void SvUpdateMaterialEditor() = 0;
|
|
|
|
// Forces the modifier panel to update...
|
|
virtual void SvUpdateModifierPanel() = 0;
|
|
|
|
// Set, Clear and Test filter flags...
|
|
virtual void SetFilter(DWORD mask) = 0;
|
|
virtual void ClearFilter(DWORD mask) = 0;
|
|
virtual bool TestFilter(DWORD mask) = 0;
|
|
|
|
// Get a SV UI color given a color index...
|
|
virtual COLORREF SvGetUIColor(int colorIndex) = 0;
|
|
};
|