/* * Copyright (c) 1999-2000, Eric Moon. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions, and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // InfoWindowManager.h // // * PURPOSE // Manages all the ParameterWindows and control panels. // Will not let you open multiple windows referring to // the same node, and takes care of quitting them all // when shut down. // // * HISTORY // c.lenz 17feb2000 Begun // #ifndef __InfoWindowManager_H__ #define __InfoWindowManager_H__ #include #include class BList; class BWindow; #include "cortex_defs.h" struct dormant_node_info; struct media_destination; struct media_input; struct media_output; struct media_source; __BEGIN_CORTEX_NAMESPACE class Connection; class NodeRef; class InfoWindowManager : public BLooper { public: // *** constants // the screen position where the first window should // be displayed static const BPoint M_INIT_POSITION; // horizontal/vertical offset by which subsequent // windows positions are shifted static const BPoint M_DEFAULT_OFFSET; enum message_t { M_INFO_WINDOW_REQUESTED = InfoView_message_base, M_LIVE_NODE_WINDOW_CLOSED, M_DORMANT_NODE_WINDOW_CLOSED, M_CONNECTION_WINDOW_CLOSED, M_INPUT_WINDOW_CLOSED, M_OUTPUT_WINDOW_CLOSED }; private: // *** ctor/dtor // hidden ctor; is called only from inside Instance() InfoWindowManager(); public: // quits all registered info windows virtual ~InfoWindowManager(); public: // *** singleton access // access to the one and only instance of this class static InfoWindowManager *Instance(); // will delete the singleton instance and take down all // open windows static void shutDown(); public: // *** operations status_t openWindowFor( const NodeRef *ref); status_t openWindowFor( const dormant_node_info &info); status_t openWindowFor( const Connection &connection); status_t openWindowFor( const media_input &input); status_t openWindowFor( const media_output &output); public: // *** BLooper impl virtual void MessageReceived( BMessage *message); private: // *** internal operations // management of windows for live nodes bool _addWindowFor( const NodeRef *ref, BWindow *window); bool _findWindowFor( int32 nodeID, BWindow **outWindow); void _removeWindowFor( int32 nodeID); // management of windows for dormant nodes bool _addWindowFor( const dormant_node_info &info, BWindow *window); bool _findWindowFor( const dormant_node_info &info, BWindow **outWindow); void _removeWindowFor( const dormant_node_info &info); // management of windows for connections bool _addWindowFor( const Connection &connection, BWindow *window); bool _findWindowFor( const media_source &source, const media_destination &destination, BWindow **outWindow); void _removeWindowFor( const media_source &source, const media_destination &destination); // management of windows for media_inputs bool _addWindowFor( const media_input &input, BWindow *window); bool _findWindowFor( const media_destination &destination, BWindow **outWindow); void _removeWindowFor( const media_destination &destination); // management of windows for media_outputs bool _addWindowFor( const media_output &output, BWindow *window); bool _findWindowFor( const media_source &source, BWindow **outWindow); void _removeWindowFor( const media_source &source); private: // *** data members // list of all currently open windows about live nodes BList *m_liveNodeWindows; // list of all currently open windows about dormant nodes BList *m_dormantNodeWindows; // list of all currently open windows about connections BList *m_connectionWindows; // list of all currently open windows about media_inputs BList *m_inputWindows; // list of all currently open windows about media_outputs BList *m_outputWindows; // the BPoint at which the last InfoWindow was initially // opened BPoint m_nextWindowPosition; private: // *** static members // the magic singleton instance static InfoWindowManager *s_instance; }; __END_CORTEX_NAMESPACE #endif /*__InfoWindowManager_H__*/