xref: /haiku/src/apps/cortex/InfoView/InfoWindowManager.h (revision 25a7b01d15612846f332751841da3579db313082)
1 /*
2  * Copyright (c) 1999-2000, Eric Moon.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions, and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions, and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * 3. The name of the author may not be used to endorse or promote products
17  *    derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21  * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 
32 // InfoWindowManager.h
33 //
34 // * PURPOSE
35 //	 Manages all the ParameterWindows and control panels.
36 //   Will not let you open multiple windows referring to
37 //	 the same node, and takes care of quitting them all
38 //	 when shut down.
39 //
40 // * HISTORY
41 //   c.lenz		17feb2000		Begun
42 //
43 
44 #ifndef __InfoWindowManager_H__
45 #define __InfoWindowManager_H__
46 
47 #include <Looper.h>
48 #include <Point.h>
49 
50 class BList;
51 class BWindow;
52 
53 #include "cortex_defs.h"
54 
55 struct dormant_node_info;
56 struct media_destination;
57 struct media_input;
58 struct media_output;
59 struct media_source;
60 
61 __BEGIN_CORTEX_NAMESPACE
62 
63 class Connection;
64 class NodeRef;
65 
66 class InfoWindowManager :
67 	public	BLooper {
68 
69 public:								// *** constants
70 
71 	// the screen position where the first window should
72 	// be displayed
73 	static const BPoint				M_INIT_POSITION;
74 
75 	// horizontal/vertical offset by which subsequent
76 	// windows positions are shifted
77 	static const BPoint 			M_DEFAULT_OFFSET;
78 
79 	enum message_t {
80 									M_INFO_WINDOW_REQUESTED = InfoView_message_base,
81 
82 									M_LIVE_NODE_WINDOW_CLOSED,
83 
84 									M_DORMANT_NODE_WINDOW_CLOSED,
85 
86 									M_CONNECTION_WINDOW_CLOSED,
87 
88 									M_INPUT_WINDOW_CLOSED,
89 
90 									M_OUTPUT_WINDOW_CLOSED
91 	};
92 
93 private:							// *** ctor/dtor
94 
95 	// hidden ctor; is called only from inside Instance()
96 									InfoWindowManager();
97 
98 public:
99 
100 	// quits all registered info windows
101 	virtual							~InfoWindowManager();
102 
103 public:								// *** singleton access
104 
105 	// access to the one and only instance of this class
106 	static InfoWindowManager	   *Instance();
107 
108 	// will delete the singleton instance and take down all
109 	// open windows
110 	static void						shutDown();
111 
112 public:								// *** operations
113 
114 	status_t						openWindowFor(
115 										const NodeRef *ref);
116 
117 	status_t						openWindowFor(
118 										const dormant_node_info &info);
119 
120 	status_t						openWindowFor(
121 										const Connection &connection);
122 
123 	status_t						openWindowFor(
124 										const media_input &input);
125 
126 	status_t						openWindowFor(
127 										const media_output &output);
128 
129 public:								// *** BLooper impl
130 
131 	virtual void					MessageReceived(
132 										BMessage *message);
133 
134 private:							// *** internal operations
135 
136 	// management of windows for live nodes
137 	bool							_addWindowFor(
138 										const NodeRef *ref,
139 										BWindow *window);
140 	bool							_findWindowFor(
141 										int32 nodeID,
142 										BWindow **outWindow);
143 	void							_removeWindowFor(
144 										int32 nodeID);
145 
146 	// management of windows for dormant nodes
147 	bool							_addWindowFor(
148 										const dormant_node_info &info,
149 										BWindow *window);
150 	bool							_findWindowFor(
151 										const dormant_node_info &info,
152 										BWindow **outWindow);
153 	void							_removeWindowFor(
154 										const dormant_node_info &info);
155 
156 	// management of windows for connections
157 	bool							_addWindowFor(
158 										const Connection &connection,
159 										BWindow *window);
160 	bool							_findWindowFor(
161 										const media_source &source,
162 										const media_destination &destination,
163 										BWindow **outWindow);
164 	void							_removeWindowFor(
165 										const media_source &source,
166 										const media_destination &destination);
167 
168 	// management of windows for media_inputs
169 	bool							_addWindowFor(
170 										const media_input &input,
171 										BWindow *window);
172 	bool							_findWindowFor(
173 										const media_destination &destination,
174 										BWindow **outWindow);
175 	void							_removeWindowFor(
176 										const media_destination &destination);
177 
178 	// management of windows for media_outputs
179 	bool							_addWindowFor(
180 										const media_output &output,
181 										BWindow *window);
182 	bool							_findWindowFor(
183 										const media_source &source,
184 										BWindow **outWindow);
185 	void							_removeWindowFor(
186 										const media_source &source);
187 
188 private:							// *** data members
189 
190 	// list of all currently open windows about live nodes
191 	BList						   *m_liveNodeWindows;
192 
193 	// list of all currently open windows about dormant nodes
194 	BList						   *m_dormantNodeWindows;
195 
196 	// list of all currently open windows about connections
197 	BList						   *m_connectionWindows;
198 
199 	// list of all currently open windows about media_inputs
200 	BList						   *m_inputWindows;
201 
202 	// list of all currently open windows about media_outputs
203 	BList						   *m_outputWindows;
204 
205 	// the BPoint at which the last InfoWindow was initially
206 	// opened
207 	BPoint							m_nextWindowPosition;
208 
209 private:							// *** static members
210 
211 	// the magic singleton instance
212 	static InfoWindowManager  *s_instance;
213 };
214 
215 __END_CORTEX_NAMESPACE
216 #endif /*__InfoWindowManager_H__*/
217