Mediator pattern example for Borland components.
class Mediator
{
private:
// text fields to mediate
TEdit
*m_txtOne,
*m_txtTwo;
// original "onchange" events from text fields
TNotifyEvent
m_eventOne,
m_eventTwo;
public:
// initialize text fields to mediate
void init
(TEdit* txtOne, TEdit* txtTwo);
// shadowed "onchange" events for text fields
void __fastcall txtOneChange
(TObject *Sender);
void __fastcall txtTwoChange
(TObject *Sender);
};
void Mediator::init(TEdit* txtOne, TEdit* txtTwo)
{
// save pointers to text fields
m_txtOne = txtOne;
m_txtTwo = txtTwo;
// save original "onchange" events
m_eventOne = m_txtOne->OnChange;
m_eventTwo = m_txtTwo->OnChange;
// override original "onchange" events
m_txtOne->OnChange = txtOneChange;
m_txtTwo->OnChange = txtTwoChange;
}
void __fastcall Mediator::txtOneChange(TObject *sender)
{
m_txtTwo->Enabled = !m_txtOne->Text.IsEmpty();
if (m_eventOne != 0)
{
// call original "onchange" event
m_eventOne(sender);
}
}
void __fastcall Mediator::txtTwoChange(TObject *sender)
{
m_txtOne->Enabled = !m_txtTwo->Text.IsEmpty();
if (m_eventTwo != 0)
{
// call original "onchange" event
m_eventTwo(sender);
}
}