#include "cBroadcastingTableSelectors.h" // =========================================================================== // cBroadcastingTableSelectors.cpp Version 1.0 ©1998 Joakim Braun All rights reserved. // =========================================================================== // // Two subclasses of LBroadcaster and, respectively, LTableSingleSelector and LTableMultiSelector. // Classes broadcasts a message every time table selection is about to change, // and another message every time selection has changed. Messages are customizable. // Useful if you have an LTableView and clicking in it causes entry data to be // made available for the user to edit. When you receive mAboutToChangeMsg, // you know it's time to retrieve the data shown and prepare to show another entry's data. // cBroadcastingTableSelectors is free for any and all use. // Do not distribute modified source code under my name. // No support promised, no liability accepted. Provided "as is". // That said, I can be reached at braun@swipnet.se. // Change history: // 1.0 June 4, 1998 First release // =========================================================================== // Ä Constructor // =========================================================================== // Takes an LTableView as parameter. cBroadcastingSingleSelector::cBroadcastingSingleSelector(LTableView *inTableView) : LTableSingleSelector(inTableView){ mAboutToChangeMsg = msg_Nothing, mChangedMsg = msg_Nothing; } // =========================================================================== // Ä Constructor // =========================================================================== // Takes an LTableView and two MessageT:s as parameters. cBroadcastingSingleSelector::cBroadcastingSingleSelector(LTableView *inTableView, MessageT inAboutToChangeMessage, MessageT inChangedMsg) : LTableSingleSelector(inTableView){ SetMessages(inAboutToChangeMessage, inChangedMsg); } // =========================================================================== // Ä SelectCell // =========================================================================== // Overridden from LTableSelector. Broadcast messages before and after selection changes. void cBroadcastingSingleSelector::SelectCell( const STableCell &inCell){ if(inCell != mSelectedCell){ if(mIsBroadcasting) BroadcastMessage(mAboutToChangeMsg); LTableSingleSelector::SelectCell(inCell); if(mIsBroadcasting) BroadcastMessage(mChangedMsg); } } // =========================================================================== // Ä UnselectCell // =========================================================================== // Overridden from LTableSelector. Broadcast messages before and after selection changes. void cBroadcastingSingleSelector::UnselectCell( const STableCell &inCell){ if(inCell == mSelectedCell){ if(mIsBroadcasting) BroadcastMessage(mAboutToChangeMsg); LTableSingleSelector::UnselectCell(inCell); if(mIsBroadcasting) BroadcastMessage(mChangedMsg); } } // =========================================================================== // Ä SetMessages // =========================================================================== // Set messages to broadcast before and after selection changes. void cBroadcastingSingleSelector::SetMessages(MessageT inAboutToChangeMessage, MessageT inChangedMsg){ mAboutToChangeMsg = inAboutToChangeMessage, mChangedMsg = inChangedMsg; } // =========================================================================== // Ä GetMessages // =========================================================================== // Get messages to broadcast before and after selection changes. void cBroadcastingSingleSelector::GetMessages(MessageT& outAboutToChangeMessage, MessageT& outChangedMsg){ outAboutToChangeMessage = mAboutToChangeMsg, outChangedMsg = mChangedMsg; } #pragma mark - // =========================================================================== // Ä Constructor // =========================================================================== // Takes an LTableView as parameter. cBroadcastingMultiSelector::cBroadcastingMultiSelector(LTableView *inTableView) : LTableMultiSelector(inTableView){ mAboutToChangeMsg = msg_Nothing, mChangedMsg = msg_Nothing; } // =========================================================================== // Ä Constructor // =========================================================================== // Takes an LTableView and two MessageT:s as parameters. cBroadcastingMultiSelector::cBroadcastingMultiSelector(LTableView *inTableView, MessageT inAboutToChangeMessage, MessageT inChangedMsg) : LTableMultiSelector(inTableView){ SetMessages(inAboutToChangeMessage, inChangedMsg); } // =========================================================================== // Ä SelectCell // =========================================================================== // Overridden from LTableSelector. Broadcast messages before and after selection changes. // Note that in an LTableMultiSelector, SelectCell() may be called many times // for a single click, so this may not be an appropriate way of handling that case. void cBroadcastingMultiSelector::SelectCell( const STableCell &inCell){ if (!CellIsSelected(inCell)) { if(mIsBroadcasting) BroadcastMessage(mAboutToChangeMsg); LTableMultiSelector::SelectCell(inCell); if(mIsBroadcasting) BroadcastMessage(mChangedMsg); } } // =========================================================================== // Ä UnselectCell // =========================================================================== // Overridden from LTableSelector. Broadcast messages before and after selection changes. // Note that in an LTableMultiSelector, UnselectCell() may be called many times // for a single click, so this may not be an appropriate way of handling that case. void cBroadcastingMultiSelector::UnselectCell( const STableCell &inCell){ if(CellIsSelected(inCell)){ if(mIsBroadcasting) BroadcastMessage(mAboutToChangeMsg); LTableMultiSelector::UnselectCell(inCell); if(mIsBroadcasting) BroadcastMessage(mChangedMsg); } } // =========================================================================== // Ä SetMessages // =========================================================================== // Set messages to broadcast before and after selection changes. void cBroadcastingMultiSelector::SetMessages(MessageT inAboutToChangeMessage, MessageT inChangedMsg){ mAboutToChangeMsg = inAboutToChangeMessage, mChangedMsg = inChangedMsg; } // =========================================================================== // Ä GetMessages // =========================================================================== // Get messages to broadcast before and after selection changes. void cBroadcastingMultiSelector::GetMessages(MessageT& outAboutToChangeMessage, MessageT& outChangedMsg){ outAboutToChangeMessage = mAboutToChangeMsg, outChangedMsg = mChangedMsg; }