|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2013 - Raw Material Software Ltd.
-
- Permission is granted to use this software under the terms of either:
- a) the GPL v2 (or any later version)
- b) the Affero GPL v3
-
- Details of these licenses can be found at: www.gnu.org/licenses
-
- JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- ------------------------------------------------------------------------------
-
- To release a closed-source product which uses JUCE, commercial licenses are
- available: visit www.juce.com for more information.
-
- ==============================================================================
- */
-
- class ActionBroadcaster::ActionMessage : public MessageManager::MessageBase
- {
- public:
- ActionMessage (const ActionBroadcaster* ab,
- const String& messageText, ActionListener* l) noexcept
- : broadcaster (const_cast<ActionBroadcaster*> (ab)),
- message (messageText),
- listener (l)
- {}
-
- void messageCallback() override
- {
- if (const ActionBroadcaster* const b = broadcaster)
- if (b->actionListeners.contains (listener))
- listener->actionListenerCallback (message);
- }
-
- private:
- WeakReference<ActionBroadcaster> broadcaster;
- const String message;
- ActionListener* const listener;
-
- JUCE_DECLARE_NON_COPYABLE (ActionMessage)
- };
-
- //==============================================================================
- ActionBroadcaster::ActionBroadcaster()
- {
- // are you trying to create this object before or after juce has been intialised??
- jassert (MessageManager::getInstanceWithoutCreating() != nullptr);
- }
-
- ActionBroadcaster::~ActionBroadcaster()
- {
- // all event-based objects must be deleted BEFORE juce is shut down!
- jassert (MessageManager::getInstanceWithoutCreating() != nullptr);
-
- masterReference.clear();
- }
-
- void ActionBroadcaster::addActionListener (ActionListener* const listener)
- {
- const ScopedLock sl (actionListenerLock);
-
- if (listener != nullptr)
- actionListeners.add (listener);
- }
-
- void ActionBroadcaster::removeActionListener (ActionListener* const listener)
- {
- const ScopedLock sl (actionListenerLock);
- actionListeners.removeValue (listener);
- }
-
- void ActionBroadcaster::removeAllActionListeners()
- {
- const ScopedLock sl (actionListenerLock);
- actionListeners.clear();
- }
-
- void ActionBroadcaster::sendActionMessage (const String& message) const
- {
- const ScopedLock sl (actionListenerLock);
-
- for (int i = actionListeners.size(); --i >= 0;)
- (new ActionMessage (this, message, actionListeners.getUnchecked(i)))->post();
- }
|