Initial commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#ifndef UndoH
|
||||
#define UndoH
|
||||
//---------------------------------------------------------------------------
|
||||
#define UNDO_VOLUME 0x00
|
||||
#define UNDO_PRESET 0x01
|
||||
#define UNDO_FONT_SET 0x02
|
||||
|
||||
#define UNDO_KEY_MELODY 0x10
|
||||
#define UNDO_KEY_BARS 0x11
|
||||
|
||||
#define UNDO_CHORD 0x20
|
||||
|
||||
#define UNDO_AUDIO_ERASE 0x30
|
||||
#define UNDO_AUDIO_COPY 0x31
|
||||
#define UNDO_AUDIO_MOVE 0x32
|
||||
#define UNDO_AUDIO_LOAD 0x33
|
||||
#define UNDO_AUDIO_RECORD 0x34
|
||||
#define UNDO_AUDIO_FX 0x35
|
||||
|
||||
#define UNDO_BAR_INSERT 0x40
|
||||
#define UNDO_BAR_DELETE 0x41
|
||||
#define UNDO_BAR_MOVE 0x42
|
||||
#define UNDO_BAR_CHANGE 0x43
|
||||
|
||||
#define UNDO_MIDI_ADD 0x50
|
||||
#define UNDO_MIDI_DEL 0x51
|
||||
#define UNDO_MIDI_SUB 0x52
|
||||
#define UNDO_MIDI_FONT 0x53
|
||||
|
||||
#define UNDO_OPUS_STYLE 0x60
|
||||
#define UNDO_STAGE_VOL 0x61
|
||||
#define UNDO_PROG_VOL 0x62
|
||||
|
||||
#define UNDO_FX_ADD 0x70
|
||||
#define UNDO_FX_DEL 0x71
|
||||
#define UNDO_FX_MOVE 0x72
|
||||
#define UNDO_FX_PARAM 0x73
|
||||
|
||||
#define UNDO_TRACK_STATE 0x80
|
||||
#define UNDO_TRACK_VOL 0x81
|
||||
#define UNDO_TRACK_PAN 0x82
|
||||
#define UNDO_TRACK_GAIN 0x83
|
||||
#define UNDO_TRACK_CHNO 0x84
|
||||
|
||||
#define UNDO_TRKAUD_ADD 0x90
|
||||
#define UNDO_TRKAUD_DEL 0x91
|
||||
#define UNDO_TRKAUD_DELALL 0x92
|
||||
#define UNDO_TRKAUD_SHOW 0x93
|
||||
#define UNDO_TRKAUD_SHOWALL 0x94
|
||||
#define UNDO_TRKAUD_HIDE 0x95
|
||||
#define UNDO_TRKAUD_HIDEALL 0x96
|
||||
|
||||
#define UNDO_TRKMID_ADD 0xA0
|
||||
#define UNDO_TRKMID_DEL 0xA1
|
||||
#define UNDO_TRKMID_DELALL 0xA2
|
||||
#define UNDO_TRKMID_SHOW 0xA3
|
||||
#define UNDO_TRKMID_SHOWALL 0xA4
|
||||
#define UNDO_TRKMID_HIDE 0xA5
|
||||
#define UNDO_TRKMID_HIDEALL 0xA6
|
||||
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
extern char* g_strUndoType[][16];
|
||||
|
||||
typedef struct tagUndoLite
|
||||
{
|
||||
int iType;
|
||||
int iCode;
|
||||
int iBegin, iEnd; //修改范围
|
||||
int iExt1, iExt2, iExt3; //整形附加参数
|
||||
void *pBefore, //修改前参数
|
||||
*pAfter, //修改后参数
|
||||
*pExt1, //指针型附加参数1
|
||||
*pExt2; //指针型附加参数2
|
||||
|
||||
tagUndoLite( int iTypeP, int iCodeP, int iBeginP, int iEndP ){
|
||||
iType = iTypeP;
|
||||
iCode = iCodeP;
|
||||
iBegin = iBeginP;
|
||||
iEnd = iEndP;
|
||||
iExt1 = iExt2 = iExt3 = 0;
|
||||
pBefore = pAfter = pExt1 = pExt2 = NULL;
|
||||
}
|
||||
} TUndoLite;
|
||||
|
||||
class TUndo
|
||||
{
|
||||
private:
|
||||
vector<TUndoLite*> m_lstLites; //操作列表
|
||||
int m_iPos; //当前位置
|
||||
|
||||
void RemoveLites( int iFrom );
|
||||
void DelLiteParams( TUndoLite* pLite );
|
||||
|
||||
public:
|
||||
void AddUndo( int iType, int iCode, int iBegin, int iEnd, void* pBefore, void* pAfter );
|
||||
void SetUndoExtra( int iExt1, int iExt2, int iExt3, void* pExt1, void* pExt2 );
|
||||
void SetUndoCode( int iCode );
|
||||
void CancelUndo();
|
||||
|
||||
TUndoLite* GetLastLite() { return m_iPos==0 ? NULL : m_lstLites[m_iPos-1]; };
|
||||
|
||||
int GetUndoType()
|
||||
{ return m_iPos>0 ? m_lstLites[m_iPos-1]->iType : -1; };
|
||||
int GetRedoType()
|
||||
{ return m_iPos<m_lstLites.size() ? m_lstLites[m_iPos]->iType : -1; };
|
||||
int GetUndoCode()
|
||||
{ return m_iPos>0 ? m_lstLites[m_iPos-1]->iCode : -1; };
|
||||
int GetRedoCode()
|
||||
{ return m_iPos<m_lstLites.size() ? m_lstLites[m_iPos]->iCode : -1; };
|
||||
|
||||
TUndoLite* Undo()
|
||||
{ return m_lstLites[--m_iPos]; };
|
||||
TUndoLite* Redo()
|
||||
{ return m_lstLites[m_iPos++]; };
|
||||
void ClearUndoList()
|
||||
{ RemoveLites( m_iPos = 0 ); };
|
||||
|
||||
TUndo()
|
||||
{ m_iPos = 0; };
|
||||
~TUndo()
|
||||
{ ClearUndoList(); };
|
||||
};
|
||||
|
||||
extern TUndo g_Undo;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user