//#################################################################################
//
// BASE DEFINITION CLASS OF DLL interface Modification
//
//#################################################################################
//
//

#ifndef __ACMODIF_HPP__
#define __ACMODIF_HPP__

/******************************************/
#if _MSC_VER >= 1000
#pragma once
#endif
/******************************************/

class CPA_Family;
class CPA_Anim;
class CPA_Action;
class CPA_State;
class TAction_Interface;

#include "TAC.h"

///////////////////////////////////////////////////////////////////////////////
// class Action_New

class Action_New : public CPA_Modif
{
protected:
    TAction_Interface  *m_p_oParentDLL;
    CPA_Family         *m_p_oFamily;
    CPA_Action         *m_p_oAction;
    char               *m_szName;

public:
    Action_New(TAction_Interface *_p_oParentDLL, CPA_Family *_p_oFamily, char *_szNewName);
    ~Action_New();
// actions
    BOOL Do();
    BOOL Undo();
};

///////////////////////////////////////////////////////////////////////////////
// class Action_Copy

class Action_Copy : public CPA_Modif
{
protected:
    TAction_Interface  *m_p_oParentDLL;
    CPA_Family         *m_p_oFamily;
    CPA_Action         *m_p_oActionSource;
    CPA_Action         *m_p_oActionTarget;
    CPA_List<CPA_State> m_oListOfStates;
public:
    Action_Copy(TAction_Interface *_p_oParentDLL, CPA_Family *_p_oFamily,
                CPA_Action *_p_oAction);
    ~Action_Copy();
// actions
    BOOL Do();
    BOOL Undo();
};

///////////////////////////////////////////////////////////////////////////////
// class Action_Rename

class Action_Rename : public CPA_Modif
{
protected:
    TAction_Interface  *m_p_oParentDLL;
    CPA_Action         *m_p_oAction;
    char               *m_szNewName;
public:
    Action_Rename(TAction_Interface *_p_oParentDLL, CPA_Action *_p_oAction, char *_szNewName);
    ~Action_Rename();
// actions
    BOOL Do();
    BOOL Undo();
};

///////////////////////////////////////////////////////////////////////////////
// class Action_Delete

class Action_Delete : public CPA_Modif
{
protected:
    TAction_Interface	   *m_p_oParentDLL;
    CPA_Family			   *m_p_oFamily;
    CPA_Action			   *m_p_oAction;
    CPA_List<CPA_State>		m_oListOfStates;
    CPA_List<tdstTSIState>	m_oListOfTransitionalStates;
    CPA_EditorBase		   *m_p_oOACDLL;
    CPA_State			   *m_p_oDefaultState;
public:
    Action_Delete(TAction_Interface *_p_oParentDLL, CPA_Family *_p_oFamily, CPA_Action *_p_oAction);
    ~Action_Delete();
// actions
    BOOL Do();
    BOOL Undo();
};

///////////////////////////////////////////////////////////////////////////////
// class Action_DelAllStates

class Action_DelAllStates : public CPA_Modif
{
protected:
    TAction_Interface       *m_p_oParentDLL;
    CPA_Family              *m_p_oFamily;
    CPA_Action              *m_p_oAction;
    CPA_State               *m_p_oDefaultState;
    CPA_List<CPA_State>      m_oListOfStates;
public:
    Action_DelAllStates(TAction_Interface *_p_oParentDLL, CPA_Family *_p_oFamily, CPA_Action *_p_oAction);
    ~Action_DelAllStates();
// actions
    BOOL Do();
    BOOL Undo();
};


#endif //__ACMODIF_HPP__