www.pudn.com > MP3CORD.rar > undomanager.h


/*____________________________________________________________________________ 
	 
	FreeAmp - The Free MP3 Player 
 
	Portions Copyright (C) 1999 EMusic.com 
 
	This program is free software; you can redistribute it and/or modify 
	it under the terms of the GNU General Public License as published by 
	the Free Software Foundation; either version 2 of the License, or 
	(at your option) any later version. 
 
	This program is distributed in the hope that it will be useful, 
	but WITHOUT ANY WARRANTY; without even the implied warranty of 
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
	GNU General Public License for more details. 
 
	You should have received a copy of the GNU General Public License 
	along with this program; if not, write to the Free Software 
	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
	 
	$Id: undomanager.h,v 1.1 1999/12/12 18:43:04 elrod Exp $ 
____________________________________________________________________________*/ 
 
#ifndef INCLUDED_UNDO_MANAGER_H_ 
#define INCLUDED_UNDO_MANAGER_H_ 
 
#include  
#include  
#include  
#include  
#include  
 
using namespace std; 
 
#include "config.h" 
#include "facontext.h" 
 
#include "errors.h" 
#include "mutex.h" 
#include "semaphore.h" 
#include "thread.h" 
 
#define kRootIndex 0xFFFFFFFF 
 
class UndoItem { 
 public: 
    virtual ~UndoItem() { } 
 
    virtual void Undo() {}; 
    virtual void Redo() {}; 
}; 
 
class UndoMultiItem : public UndoItem { 
 public: 
            UndoMultiItem(); 
    virtual ~UndoMultiItem(); 
 
    virtual void Undo(); 
    virtual void Redo(); 
 
    void AddItem(UndoItem* item);  
 private: 
    vector m_items; 
}; 
 
class UndoManager { 
 
 public: 
    UndoManager(); 
    virtual ~UndoManager(); 
     
    void Undo(); 
    void Redo(); 
 
    bool CanUndo(); 
    bool CanRedo(); 
 
    void AddItem(UndoItem* item);  
 
    void Clear(); 
 
 protected: 
     
 
 private: 
    Mutex m_mutex; 
    vector m_items; 
    uint32 m_current; 
    bool m_doing; 
    
}; 
 
#endif // INCLUDED_UNDO_MANAGER_H_