| 99 | } |
| 100 | |
| 101 | void PatchCableSource::SetPatchCableTarget(PatchCable* cable, IClickable* target, bool fromUserClick) |
| 102 | { |
| 103 | IClickable* oldTarget = cable->GetTarget(); |
| 104 | |
| 105 | mOwner->PreRepatch(this); |
| 106 | |
| 107 | if (cable->GetTarget()) |
| 108 | { |
| 109 | mAudioReceiver = nullptr; |
| 110 | RemoveFromVector(dynamic_cast<INoteReceiver*>(cable->GetTarget()), mNoteReceivers); |
| 111 | RemoveFromVector(dynamic_cast<IPulseReceiver*>(cable->GetTarget()), mPulseReceivers); |
| 112 | } |
| 113 | |
| 114 | cable->SetCableTarget(target); |
| 115 | |
| 116 | INoteReceiver* noteReceiver = dynamic_cast<INoteReceiver*>(target); |
| 117 | if (noteReceiver) |
| 118 | mNoteReceivers.push_back(noteReceiver); |
| 119 | IPulseReceiver* pulseReceiver = dynamic_cast<IPulseReceiver*>(target); |
| 120 | if (pulseReceiver) |
| 121 | mPulseReceivers.push_back(pulseReceiver); |
| 122 | IAudioReceiver* audioReceiver = dynamic_cast<IAudioReceiver*>(target); |
| 123 | if (audioReceiver) |
| 124 | { |
| 125 | mAudioReceiver = audioReceiver; |
| 126 | TheSynth->ArrangeAudioSourceDependencies(); |
| 127 | } |
| 128 | |
| 129 | mOwner->PostRepatch(this, fromUserClick); |
| 130 | |
| 131 | //insert |
| 132 | if (GetKeyModifiers() == kModifier_Shift && fromUserClick) |
| 133 | { |
| 134 | if (sAllowInsert) //avoid cascade on the next set |
| 135 | { |
| 136 | sAllowInsert = false; |
| 137 | IDrawableModule* targetModule = dynamic_cast<IDrawableModule*>(target); |
| 138 | if (targetModule && targetModule->GetPatchCableSource()) |
| 139 | { |
| 140 | targetModule->GetPatchCableSource()->FindValidTargets(); |
| 141 | if (targetModule->GetPatchCableSource()->IsValidTarget(oldTarget)) |
| 142 | targetModule->SetTarget(oldTarget); |
| 143 | } |
| 144 | sAllowInsert = true; |
| 145 | } |
| 146 | } |
| 147 | } |
| 148 | |
| 149 | void PatchCableSource::Clear() |
| 150 | { |
no test coverage detected