// $Id: DiskChanger.hh 5855 2006-11-06 20:05:55Z m9710797 $ #ifndef DISKCHANGER_HH #define DISKCHANGER_HH #include "DiskContainer.hh" #include "MSXEventListener.hh" #include "noncopyable.hh" #include #include #include namespace openmsx { class CommandController; class MSXEventDistributor; class Scheduler; class DiskManipulator; class Disk; class DiskCommand; class CliComm; class GlobalSettings; class TclObject; class DiskChanger : public DiskContainer, private MSXEventListener, private noncopyable { public: DiskChanger(const std::string& driveName, CommandController& commandController, DiskManipulator& manipulator, MSXEventDistributor* msxEventDistributor = NULL, Scheduler* scheduler = NULL); ~DiskChanger(); const std::string& getDriveName() const; const std::string& getDiskName() const; bool diskChanged(); bool peekDiskChanged() const; Disk& getDisk(); // DiskContainer virtual SectorAccessibleDisk* getSectorAccessibleDisk(); virtual const std::string& getContainerName() const; private: void insertDisk(const std::vector& args); void ejectDisk(); void changeDisk(std::auto_ptr newDisk); void sendChangeDiskEvent(const std::vector& args); // MSXEventListener virtual void signalEvent(shared_ptr event, const EmuTime& time); std::string driveName; DiskManipulator& manipulator; std::auto_ptr disk; bool diskChangedFlag; friend class DiskCommand; const std::auto_ptr diskCommand; CliComm& cliComm; GlobalSettings& globalSettings; MSXEventDistributor* msxEventDistributor; Scheduler* scheduler; }; } // namespace openmsx #endif