328 |
* and their influences. |
* and their influences. |
329 |
*/ |
*/ |
330 |
class CCSignalUnit: public SignalUnit { |
class CCSignalUnit: public SignalUnit { |
331 |
|
public: |
332 |
|
/** Listener which will be notified when the level of the unit is changed. */ |
333 |
|
class Listener { |
334 |
|
public: |
335 |
|
virtual void ValueChanged(CCSignalUnit* pUnit) = 0; |
336 |
|
}; |
337 |
|
|
338 |
protected: |
protected: |
339 |
class CC { |
class CC { |
340 |
public: |
public: |
363 |
}; |
}; |
364 |
|
|
365 |
FixedArray<CC> Ctrls; // The MIDI controllers which modulates this signal unit. |
FixedArray<CC> Ctrls; // The MIDI controllers which modulates this signal unit. |
366 |
|
Listener* pListener; |
367 |
|
|
368 |
public: |
public: |
369 |
CCSignalUnit(SignalUnitRack* rack): SignalUnit(rack), Ctrls(128) { |
|
370 |
|
CCSignalUnit(SignalUnitRack* rack, Listener* l = NULL): SignalUnit(rack), Ctrls(128) { |
371 |
|
pListener = l; |
372 |
} |
} |
373 |
|
|
374 |
CCSignalUnit(const CCSignalUnit& Unit): SignalUnit(Unit.pRack), Ctrls(128) { Copy(Unit); } |
CCSignalUnit(const CCSignalUnit& Unit): SignalUnit(Unit.pRack), Ctrls(128) { Copy(Unit); } |
376 |
|
|
377 |
void Copy(const CCSignalUnit& Unit) { |
void Copy(const CCSignalUnit& Unit) { |
378 |
Ctrls.copy(Unit.Ctrls); |
Ctrls.copy(Unit.Ctrls); |
379 |
|
pListener = Unit.pListener; |
380 |
SignalUnit::Copy(Unit); |
SignalUnit::Copy(Unit); |
381 |
} |
} |
382 |
|
|
406 |
recalculate = true; |
recalculate = true; |
407 |
} |
} |
408 |
|
|
409 |
if (recalculate) Calculate(); |
if (recalculate) { |
410 |
|
Calculate(); |
411 |
|
if (pListener!= NULL) pListener->ValueChanged(this); |
412 |
|
} |
413 |
} |
} |
414 |
|
|
415 |
virtual void Calculate() { |
virtual void Calculate() { |