From: <m97...@us...> - 2009-06-30 18:23:45
|
Revision: 10102 http://openmsx.svn.sourceforge.net/openmsx/?rev=10102&view=rev Author: m9710797 Date: 2009-06-30 18:23:23 +0000 (Tue, 30 Jun 2009) Log Message: ----------- merged EventTranslator/EventDelay into one class / small cleanups in MSXMotherBoard Modified Paths: -------------- openmsx/trunk/src/MSXMotherBoard.cc openmsx/trunk/src/MSXMotherBoard.hh openmsx/trunk/src/input/EventDelay.cc openmsx/trunk/src/input/EventDelay.hh openmsx/trunk/src/input/node.mk Removed Paths: ------------- openmsx/trunk/src/input/EventTranslator.cc openmsx/trunk/src/input/EventTranslator.hh Modified: openmsx/trunk/src/MSXMotherBoard.cc =================================================================== --- openmsx/trunk/src/MSXMotherBoard.cc 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/MSXMotherBoard.cc 2009-06-30 18:23:23 UTC (rev 10102) @@ -25,7 +25,6 @@ #include "LedStatus.hh" #include "MSXEventDistributor.hh" #include "EventDelay.hh" -#include "EventTranslator.hh" #include "RealTime.hh" #include "DeviceFactory.hh" #include "BooleanSetting.hh" @@ -43,6 +42,7 @@ #include "ref.hh" #include <cassert> #include <map> +#include <vector> #include <iostream> using std::set; @@ -72,7 +72,6 @@ const string& getMachineName() const; bool execute(); - void exitCPULoopSync(); void exitCPULoopAsync(); void pause(); void unpause(); @@ -86,7 +85,9 @@ void setMachineConfig(HardwareConfig* machineConfig); bool isTurboR() const; void loadMachine(const string& machine); - const MSXMotherBoard::Extensions& getExtensions() const; + + typedef std::vector<HardwareConfig*> Extensions; + const Extensions& getExtensions() const; HardwareConfig* findExtension(const string& extensionName); string loadExtension(const string& extensionName); string insertExtension(const std::string& name, @@ -100,7 +101,6 @@ Scheduler& getScheduler(); CartridgeSlotManager& getSlotManager(); EventDelay& getEventDelay(); - EventTranslator& getEventTranslator(); RealTime& getRealTime(); Debugger& getDebugger(); MSXMixer& getMSXMixer(); @@ -169,7 +169,7 @@ auto_ptr<HardwareConfig> machineConfig2; HardwareConfig* machineConfig; - MSXMotherBoard::Extensions extensions; + Extensions extensions; // order of auto_ptr's is important! auto_ptr<AddRemoveUpdate> addRemoveUpdate; @@ -179,7 +179,6 @@ auto_ptr<Scheduler> scheduler; auto_ptr<CartridgeSlotManager> slotManager; auto_ptr<EventDelay> eventDelay; - auto_ptr<EventTranslator> eventTranslator; auto_ptr<RealTime> realTime; auto_ptr<Debugger> debugger; auto_ptr<MSXMixer> msxMixer; @@ -320,7 +319,7 @@ getMSXMixer().mute(); // powered down getRealTime(); // make sure it's instantiated - getEventTranslator(); + getEventDelay(); powerSetting.attach(*this); addRemoveUpdate.reset(new AddRemoveUpdate(*this)); @@ -453,7 +452,7 @@ HardwareConfig* MSXMotherBoardImpl::findExtension(const string& extensionName) { - for (MSXMotherBoard::Extensions::const_iterator it = extensions.begin(); + for (Extensions::const_iterator it = extensions.begin(); it != extensions.end(); ++it) { if ((*it)->getName() == extensionName) { return *it; @@ -462,7 +461,7 @@ return NULL; } -const MSXMotherBoard::Extensions& MSXMotherBoardImpl::getExtensions() const +const MSXMotherBoardImpl::Extensions& MSXMotherBoardImpl::getExtensions() const { return extensions; } @@ -470,7 +469,7 @@ void MSXMotherBoardImpl::removeExtension(const HardwareConfig& extension) { extension.testRemove(); - MSXMotherBoard::Extensions::iterator it = + Extensions::iterator it = find(extensions.begin(), extensions.end(), &extension); assert(it != extensions.end()); self.getMSXCliComm().update(CliComm::EXTENSION, extension.getName(), "remove"); @@ -529,20 +528,11 @@ if (!eventDelay.get()) { eventDelay.reset(new EventDelay( getScheduler(), getCommandController(), - getMSXEventDistributor())); + getEventDistributor(), getMSXEventDistributor())); } return *eventDelay; } -EventTranslator& MSXMotherBoardImpl::getEventTranslator() -{ - if (!eventTranslator.get()) { - eventTranslator.reset(new EventTranslator( - getEventDistributor(), getEventDelay())); - } - return *eventTranslator; -} - RealTime& MSXMotherBoardImpl::getRealTime() { if (!realTime.get()) { @@ -837,13 +827,6 @@ return active; } -void MSXMotherBoardImpl::exitCPULoopSync() -{ - if (getMachineConfig()) { - getCPU().exitCPULoopSync(); - } -} - void MSXMotherBoardImpl::exitCPULoopAsync() { if (getMachineConfig()) { @@ -1023,8 +1006,8 @@ void ListExtCmd::execute(const vector<TclObject*>& /*tokens*/, TclObject& result) { - const MSXMotherBoard::Extensions& extensions = motherBoard.getExtensions(); - for (MSXMotherBoard::Extensions::const_iterator it = extensions.begin(); + const MSXMotherBoardImpl::Extensions& extensions = motherBoard.getExtensions(); + for (MSXMotherBoardImpl::Extensions::const_iterator it = extensions.begin(); it != extensions.end(); ++it) { result.addListElement((*it)->getName()); } @@ -1108,7 +1091,7 @@ { if (tokens.size() == 2) { set<string> names; - for (MSXMotherBoard::Extensions::const_iterator it = + for (MSXMotherBoardImpl::Extensions::const_iterator it = motherBoard.getExtensions().begin(); it != motherBoard.getExtensions().end(); ++it) { names.insert((*it)->getName()); @@ -1198,7 +1181,7 @@ // don't serialize: // machineID, userNames, availableDevices, addRemoveUpdate, // sharedStuffMap, msxCliComm, msxEventDistributor, - // msxCommandController, slotManager, eventDelay, eventTranslator, + // msxCommandController, slotManager, eventDelay, // debugger, msxMixer, dummyDevice, panasonicMemory, renShaTurbo, // ledStatus @@ -1254,18 +1237,10 @@ { return pimple->getMachineID(); } -const string& MSXMotherBoard::getMachineName() const -{ - return pimple->getMachineName(); -} bool MSXMotherBoard::execute() { return pimple->execute(); } -void MSXMotherBoard::exitCPULoopSync() -{ - pimple->exitCPULoopSync(); -} void MSXMotherBoard::exitCPULoopAsync() { pimple->exitCPULoopAsync(); @@ -1310,10 +1285,6 @@ { pimple->loadMachine(machine); } -const MSXMotherBoard::Extensions& MSXMotherBoard::getExtensions() const -{ - return pimple->getExtensions(); -} HardwareConfig* MSXMotherBoard::findExtension(const string& extensionName) { return pimple->findExtension(extensionName); @@ -1360,10 +1331,6 @@ { return pimple->getEventDelay(); } -EventTranslator& MSXMotherBoard::getEventTranslator() -{ - return pimple->getEventTranslator(); -} RealTime& MSXMotherBoard::getRealTime() { return pimple->getRealTime(); Modified: openmsx/trunk/src/MSXMotherBoard.hh =================================================================== --- openmsx/trunk/src/MSXMotherBoard.hh 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/MSXMotherBoard.hh 2009-06-30 18:23:23 UTC (rev 10102) @@ -7,7 +7,6 @@ #include "openmsx.hh" #include "noncopyable.hh" #include <memory> -#include <vector> #include <string> namespace openmsx { @@ -22,7 +21,6 @@ class EventDistributor; class MSXEventDistributor; class EventDelay; -class EventTranslator; class RealTime; class Debugger; class MSXMixer; @@ -51,7 +49,6 @@ ~MSXMotherBoard(); const std::string& getMachineID(); - const std::string& getMachineName() const; /** * Run emulation. @@ -60,8 +57,6 @@ */ bool execute(); - /** See CPU::exitCPULoopSync(). */ - void exitCPULoopSync(); /** See CPU::exitCPULoopAsync(). */ void exitCPULoopAsync(); @@ -85,8 +80,6 @@ void loadMachine(const std::string& machine); - typedef std::vector<HardwareConfig*> Extensions; - const Extensions& getExtensions() const; HardwareConfig* findExtension(const std::string& extensionName); std::string loadExtension(const std::string& extensionName); std::string insertExtension(const std::string& name, @@ -101,7 +94,6 @@ MSXEventDistributor& getMSXEventDistributor(); CartridgeSlotManager& getSlotManager(); EventDelay& getEventDelay(); - EventTranslator& getEventTranslator(); RealTime& getRealTime(); Debugger& getDebugger(); MSXMixer& getMSXMixer(); Modified: openmsx/trunk/src/input/EventDelay.cc =================================================================== --- openmsx/trunk/src/input/EventDelay.cc 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/input/EventDelay.cc 2009-06-30 18:23:23 UTC (rev 10102) @@ -1,7 +1,9 @@ // $Id$ #include "EventDelay.hh" +#include "EventDistributor.hh" #include "MSXEventDistributor.hh" +#include "Event.hh" #include "FloatSetting.hh" #include "Timer.hh" #include "MSXException.hh" @@ -11,24 +13,63 @@ EventDelay::EventDelay(Scheduler& scheduler, CommandController& commandController, - MSXEventDistributor& eventDistributor_) + EventDistributor& eventDistributor_, + MSXEventDistributor& msxEventDistributor_) : Schedulable(scheduler) , eventDistributor(eventDistributor_) + , msxEventDistributor(msxEventDistributor_) , prevEmu(EmuTime::zero) , prevReal(Timer::getTime()) , delaySetting(new FloatSetting(commandController, "inputdelay", "delay input to avoid key-skips", 0.03, 0.0, 10.0)) { + eventDistributor.registerEventListener( + OPENMSX_KEY_DOWN_EVENT, *this, EventDistributor::MSX); + eventDistributor.registerEventListener( + OPENMSX_KEY_UP_EVENT, *this, EventDistributor::MSX); + + eventDistributor.registerEventListener( + OPENMSX_MOUSE_MOTION_EVENT, *this, EventDistributor::MSX); + eventDistributor.registerEventListener( + OPENMSX_MOUSE_BUTTON_DOWN_EVENT, *this, EventDistributor::MSX); + eventDistributor.registerEventListener( + OPENMSX_MOUSE_BUTTON_UP_EVENT, *this, EventDistributor::MSX); + + eventDistributor.registerEventListener( + OPENMSX_JOY_AXIS_MOTION_EVENT, *this, EventDistributor::MSX); + eventDistributor.registerEventListener( + OPENMSX_JOY_BUTTON_DOWN_EVENT, *this, EventDistributor::MSX); + eventDistributor.registerEventListener( + OPENMSX_JOY_BUTTON_UP_EVENT, *this, EventDistributor::MSX); } EventDelay::~EventDelay() { + eventDistributor.unregisterEventListener( + OPENMSX_KEY_DOWN_EVENT, *this); + eventDistributor.unregisterEventListener( + OPENMSX_KEY_UP_EVENT, *this); + + eventDistributor.unregisterEventListener( + OPENMSX_MOUSE_MOTION_EVENT, *this); + eventDistributor.unregisterEventListener( + OPENMSX_MOUSE_BUTTON_DOWN_EVENT, *this); + eventDistributor.unregisterEventListener( + OPENMSX_MOUSE_BUTTON_UP_EVENT, *this); + + eventDistributor.unregisterEventListener( + OPENMSX_JOY_AXIS_MOTION_EVENT, *this); + eventDistributor.unregisterEventListener( + OPENMSX_JOY_BUTTON_DOWN_EVENT, *this); + eventDistributor.unregisterEventListener( + OPENMSX_JOY_BUTTON_UP_EVENT, *this); } -void EventDelay::queueEvent(EventPtr event) +bool EventDelay::signalEvent(EventPtr event) { toBeScheduledEvents.push_back(EventTime(event, Timer::getTime())); + return true; } void EventDelay::sync(EmuTime::param emuTime) @@ -64,7 +105,7 @@ void EventDelay::executeUntil(EmuTime::param time, int /*userData*/) { try { - eventDistributor.distributeEvent(scheduledEvents.front(), time); + msxEventDistributor.distributeEvent(scheduledEvents.front(), time); } catch (MSXException&) { // ignore } Modified: openmsx/trunk/src/input/EventDelay.hh =================================================================== --- openmsx/trunk/src/input/EventDelay.hh 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/input/EventDelay.hh 2009-06-30 18:23:23 UTC (rev 10102) @@ -3,10 +3,9 @@ #ifndef EVENTDELAY_HH #define EVENTDELAY_HH +#include "EventListener.hh" #include "Schedulable.hh" -#include "Event.hh" #include "EmuTime.hh" -#include "shared_ptr.hh" #include <vector> #include <deque> #include <memory> @@ -15,27 +14,37 @@ class Scheduler; class CommandController; +class Event; +class EventDistributor; class MSXEventDistributor; class FloatSetting; -class EventDelay : private Schedulable +/** This class is responsible for translating host events into MSX events. + * It also translates host event timing into EmuTime. To better do this + * we introduce a small delay (default 0.03s) in this translation. + */ +class EventDelay : private EventListener, private Schedulable { public: - typedef shared_ptr<const Event> EventPtr; - EventDelay(Scheduler& scheduler, CommandController& commandController, - MSXEventDistributor& eventDistributor); + EventDistributor& eventDistributor, + MSXEventDistributor& msxEventDistributor); virtual ~EventDelay(); - void queueEvent(EventPtr event); void sync(EmuTime::param time); private: + typedef shared_ptr<const Event> EventPtr; + + // EventListener + virtual bool signalEvent(EventPtr event); + // Schedulable virtual void executeUntil(EmuTime::param time, int userData); virtual const std::string& schedName() const; - MSXEventDistributor& eventDistributor; + EventDistributor& eventDistributor; + MSXEventDistributor& msxEventDistributor; struct EventTime { EventTime(EventPtr event_, unsigned long long time_) Deleted: openmsx/trunk/src/input/EventTranslator.cc =================================================================== --- openmsx/trunk/src/input/EventTranslator.cc 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/input/EventTranslator.cc 2009-06-30 18:23:23 UTC (rev 10102) @@ -1,64 +0,0 @@ -// $Id$ - -#include "EventTranslator.hh" -#include "EventDelay.hh" -#include "EventDistributor.hh" - -namespace openmsx { - -EventTranslator::EventTranslator(EventDistributor& eventDistributor_, - EventDelay& eventDelay_) - : eventDistributor(eventDistributor_) - , eventDelay(eventDelay_) -{ - eventDistributor.registerEventListener( - OPENMSX_KEY_DOWN_EVENT, *this, EventDistributor::MSX); - eventDistributor.registerEventListener( - OPENMSX_KEY_UP_EVENT, *this, EventDistributor::MSX); - - eventDistributor.registerEventListener( - OPENMSX_MOUSE_MOTION_EVENT, *this, EventDistributor::MSX); - eventDistributor.registerEventListener( - OPENMSX_MOUSE_BUTTON_DOWN_EVENT, *this, EventDistributor::MSX); - eventDistributor.registerEventListener( - OPENMSX_MOUSE_BUTTON_UP_EVENT, *this, EventDistributor::MSX); - - eventDistributor.registerEventListener( - OPENMSX_JOY_AXIS_MOTION_EVENT, *this, EventDistributor::MSX); - eventDistributor.registerEventListener( - OPENMSX_JOY_BUTTON_DOWN_EVENT, *this, EventDistributor::MSX); - eventDistributor.registerEventListener( - OPENMSX_JOY_BUTTON_UP_EVENT, *this, EventDistributor::MSX); -} - -EventTranslator::~EventTranslator() -{ - eventDistributor.unregisterEventListener( - OPENMSX_KEY_DOWN_EVENT, *this); - eventDistributor.unregisterEventListener( - OPENMSX_KEY_UP_EVENT, *this); - - eventDistributor.unregisterEventListener( - OPENMSX_MOUSE_MOTION_EVENT, *this); - eventDistributor.unregisterEventListener( - OPENMSX_MOUSE_BUTTON_DOWN_EVENT, *this); - eventDistributor.unregisterEventListener( - OPENMSX_MOUSE_BUTTON_UP_EVENT, *this); - - eventDistributor.unregisterEventListener( - OPENMSX_JOY_AXIS_MOTION_EVENT, *this); - eventDistributor.unregisterEventListener( - OPENMSX_JOY_BUTTON_DOWN_EVENT, *this); - eventDistributor.unregisterEventListener( - OPENMSX_JOY_BUTTON_UP_EVENT, *this); -} - -bool EventTranslator::signalEvent(shared_ptr<const Event> event) -{ - // TODO do some real translation here ;) - // (e.g. depending on host/MSX keyboard layout) - eventDelay.queueEvent(event); - return true; -} - -} // namespace openmsx Deleted: openmsx/trunk/src/input/EventTranslator.hh =================================================================== --- openmsx/trunk/src/input/EventTranslator.hh 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/input/EventTranslator.hh 2009-06-30 18:23:23 UTC (rev 10102) @@ -1,31 +0,0 @@ -// $Id$ - -#ifndef EVENTTRANSLATOR_HH -#define EVENTTRANSLATOR_HH - -#include "EventListener.hh" -#include "noncopyable.hh" - -namespace openmsx { - -class EventDistributor; -class EventDelay; - -class EventTranslator : private EventListener, private noncopyable -{ -public: - EventTranslator(EventDistributor& eventDistributor, - EventDelay& eventDelay); - virtual ~EventTranslator(); - -private: - // EventListener - virtual bool signalEvent(shared_ptr<const Event> event); - - EventDistributor& eventDistributor; - EventDelay & eventDelay; -}; - -} // namespace openmsx - -#endif Modified: openmsx/trunk/src/input/node.mk =================================================================== --- openmsx/trunk/src/input/node.mk 2009-06-29 21:35:35 UTC (rev 10101) +++ openmsx/trunk/src/input/node.mk 2009-06-30 18:23:23 UTC (rev 10102) @@ -17,7 +17,6 @@ JoyTap \ NinjaTap \ ArkanoidPad \ - EventTranslator \ EventDelay \ MSXEventDistributor \ MSXEventRecorder \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |