mixxxdj/mixxx — pull request #119 by rryan (2013-12-10 21:32:08+00:00)
Title: Major refactor of EngineSync / RateControl / BpmControl for master sync.

* Add SyncControl, an EngineControl that manages syncing for decks.
* Remove most BpmControl / RateControl logic dealing with sync.
* Add Syncable interface and make InternalClock and SyncControl implement it.
* Remove tracking the master with its group string -- instead use Syncable
pointer to decide what is master.
* Treat InternalClock the same as SyncControls in master / follower logic.
* Add a SyncableListener interface for EngineSync (eventually use that instead
of EngineSync to prevent future developers from calling methods on EngineSync
we do not allow).
* Reduce risks of signal infinite loops by using a request/response setup where
EngineSync makes all decisions.
* Some minor hacks were needed -- I hope to remove them.
* Tests pass but I had to change something I thought was a bug in the
test. Please review, @owilliams.
* Left some tracing qDebugs in. These aren't too spammy and are quite helpful
for debugging. I think we should leave them on during alpha testing.
* SyncControl gets its EngineChannel via its constructor instead of EngineSync
dealing with setting up the EngineChannel of its syncables.