You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
4.2 KiB
125 lines
4.2 KiB
//====== Copyright © 1996-2005, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose:
|
|
//
|
|
//=============================================================================
|
|
|
|
#ifndef BASEANIMSETCONTROLGROUPPANEL_H
|
|
#define BASEANIMSETCONTROLGROUPPANEL_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "dme_controls/BaseAnimationSetEditorController.h"
|
|
#include "vgui_controls/EditablePanel.h"
|
|
#include "datamodel/dmehandle.h"
|
|
#include "tier1/utlntree.h"
|
|
#include "tier1/utldict.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Forward declarations
|
|
//-----------------------------------------------------------------------------
|
|
class CBaseAnimationSetEditor;
|
|
class CBaseAnimationSetControl;
|
|
class CDmeAnimationSet;
|
|
class CDmeChannel;
|
|
class CDmeControlGroup;
|
|
class CDmeDag;
|
|
class CDmElement;
|
|
class CAnimGroupTree;
|
|
|
|
namespace vgui
|
|
{
|
|
class TreeView;
|
|
class IScheme;
|
|
class Menu;
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Animation set editor control/group tree item types. These types represent
|
|
// the different types of items which can be added to the m_hGroupsTree. They
|
|
// are used in determining the action to be taken when an item is selected and
|
|
// to determine the content of the right click context menu for an item.
|
|
//-----------------------------------------------------------------------------
|
|
enum AnimTreeItemType_t
|
|
{
|
|
ANIMTREE_ITEM_ANIMSET,
|
|
ANIMTREE_ITEM_GROUP,
|
|
ANIMTREE_ITEM_CONTROL,
|
|
ANIMTREE_ITEM_COMPONENT,
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Panel which shows a tree of controls
|
|
//-----------------------------------------------------------------------------
|
|
class CBaseAnimSetControlGroupPanel : public vgui::EditablePanel, public IAnimationSetControlSelectionChangedListener
|
|
{
|
|
DECLARE_CLASS_SIMPLE( CBaseAnimSetControlGroupPanel, EditablePanel );
|
|
public:
|
|
CBaseAnimSetControlGroupPanel( vgui::Panel *parent, char const *className, CBaseAnimationSetEditor *editor, bool bControlStateInterface );
|
|
virtual ~CBaseAnimSetControlGroupPanel();
|
|
|
|
CBaseAnimationSetEditor *GetEditor() { return m_hEditor; }
|
|
|
|
void ChangeAnimationSetClip( CDmeFilmClip *pFilmClip );
|
|
void OnControlsAddedOrRemoved();
|
|
|
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme );
|
|
|
|
CDmeDag *GetWorkCameraParent();
|
|
|
|
// Rebuild the tree view from the current control selection hierarchy
|
|
void RebuildTree( bool bRestoreExpansion );
|
|
void UpdateSelection();
|
|
|
|
// inherited from IAnimationSetControlSelectionChangedListener
|
|
virtual void OnControlSelectionChanged();
|
|
virtual void ExpandTreeToControl( const CDmElement *pSelection, TransformComponent_t nComponentFlags );
|
|
|
|
// Create a new control group containing the selected controls
|
|
void CreateGroupFromSelectedControls();
|
|
|
|
|
|
protected:
|
|
|
|
MESSAGE_FUNC_INT_INT( OnTreeViewItemSelected, "TreeViewItemSelected", itemIndex, replaceSelection );
|
|
MESSAGE_FUNC_INT( OnTreeViewItemDeselected, "TreeViewItemDeselected", itemIndex );
|
|
MESSAGE_FUNC( OnTreeViewStartRangeSelection, "TreeViewStartRangeSelection" );
|
|
MESSAGE_FUNC( OnTreeViewFinishRangeSelection, "TreeViewFinishRangeSelection" );
|
|
MESSAGE_FUNC( OnTreeViewItemSelectionCleared, "TreeViewItemSelectionCleared" );
|
|
MESSAGE_FUNC_INT( OnTreeViewOpenContextMenu, "TreeViewOpenContextMenu", itemID );
|
|
|
|
|
|
protected:
|
|
|
|
void SelectAnimTreeItem( int itemIndex, ESelectionMode selectionMode );
|
|
|
|
struct ElementExpansion_t
|
|
{
|
|
CDmElement *m_pElement;
|
|
TransformComponent_t m_ComponentFlags;
|
|
};
|
|
|
|
// pre-order traversal so that we can ExpandItems linearly
|
|
void CollectExpandedItems( CUtlVector< ElementExpansion_t > &expandedNodes, int nParentIndex );
|
|
// assumes expandedNodes have parents before children (ie expandedNodes is a pre-order traversal)
|
|
void ExpandItems( const CUtlVector< ElementExpansion_t > &expandedNodes );
|
|
|
|
SelectionState_t UpdateSelection_R( int nParentIndex );
|
|
|
|
vgui::DHANDLE< CBaseAnimationSetEditor > m_hEditor;
|
|
|
|
vgui::DHANDLE< CAnimGroupTree > m_hGroups;
|
|
|
|
CBaseAnimationSetControl *m_pController;
|
|
|
|
Color m_FullSelectionColor;
|
|
Color m_PartialSelectionColor;
|
|
Color m_ContextMenuHighlightColor;
|
|
|
|
friend class CAnimGroupTree;
|
|
};
|
|
|
|
#endif // BASEANIMSETCONTROLGROUPPANEL_H
|