xref: /haiku/src/apps/cortex/MediaRoutingView/MediaJack.h (revision 7749d0bb0c358a3279b1b9cc76d8376e900130a5)
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 // MediaJack.h
33 // c.lenz 10oct99
34 //
35 // * PURPOSE
36 //	 DiagramEndPoint derived class implementing the drawing
37 //	 code and
38 //
39 // HISTORY
40 //
41 
42 #ifndef __MediaJack_H__
43 #define __MediaJack_H__
44 
45 #include "DiagramEndPoint.h"
46 
47 // Media Kit
48 #include <MediaDefs.h>
49 #include <MediaNode.h>
50 // Support Kit
51 #include <String.h>
52 
53 class BBitmap;
54 
55 #include "cortex_defs.h"
56 __BEGIN_CORTEX_NAMESPACE
57 
58 int compareTypeAndID(const void *lValue, const void *rValue);
59 
60 class MediaJack : public DiagramEndPoint
61 {
62 
63 public:					// *** jack types
64 
65 	enum jack_t
66 	{
67 		M_INPUT,
68 		M_OUTPUT
69 	};
70 
71 public:					// *** constants
72 
73 	// [e.moon 26oct99] moved definitions to MediaJack.cpp
74 	static float M_DEFAULT_WIDTH;
75 	static float M_DEFAULT_HEIGHT;
76 	static const float M_DEFAULT_GAP;
77 	static const int32 M_MAX_ABBR_LENGTH;
78 
79 public:					// *** ctor/dtor
80 
81 	// Constructor for input jacks
82 						MediaJack(
83 							media_input input);
84 
85 	// Constructor for output jacks
86 						MediaJack(
87 							media_output output);
88 
89 	virtual				~MediaJack();
90 
91 public:					// *** accessors
92 
93 	// returns the full name of the input/output
94 	BString				name() const
95 						{ return m_label; }
96 
97 	// return true if this is an input jack
98 	bool				isInput() const
99 						{ return (m_jackType == M_INPUT); }
100 
101 	// copies the media_input struct into input; returns
102 	// B_ERROR if this isn't an input jack
103 	status_t			getInput(
104 							media_input *input) const;
105 
106 	// return true if this is an output jack
107 	bool				isOutput() const
108 						{ return (m_jackType == M_OUTPUT); }
109 
110 	// copies the media_output struct into input; returns
111 	// B_ERROR if this isn't an input jack
112 	status_t			getOutput(
113 							media_output *output) const;
114 
115 public:					// *** derived from DiagramEndPoint/Item
116 
117 	// is called by the parent DiagramBox after adding endpoint
118 	virtual void		attachedToDiagram();
119 
120 	// is called by the parent DiagramBox just before the endpoint
121 	// will be removed
122 	virtual void		detachedFromDiagram();
123 
124 	// the actual drawing code
125 	virtual void		drawEndPoint();
126 
127 	// returns the coordinate at which a connected MediaWire is
128 	// supposed to start/end
129 	virtual BPoint		connectionPoint() const;
130 
131 	// hook called by the base class; just verifies if the jack
132 	// type isn't equal, i.e. not connecting an input to an input
133 	virtual bool		connectionRequested(
134 							DiagramEndPoint *which);
135 
136 	// displays the context menu for right-clicks
137 	virtual void		MouseDown(
138 							BPoint point,
139 							uint32 buttons,
140 							uint32 clicks);
141 
142 	// changes the mouse cursor and prepares a tooltip
143 	virtual void		MouseOver(
144 							BPoint point,
145 							uint32 transit);
146 
147 	// changes the mouse cursor
148 	virtual void		MessageDragged(
149 							BPoint point,
150 							uint32 transit,
151 							const BMessage *message);
152 
153 	// updates the offscreen bitmap
154 	virtual void		selected();
155 
156 	// updates the offscreen bitmap
157 	virtual void		deselected();
158 
159 	// updates the offscreen bitmap
160 	virtual void		connected();
161 
162 	// updates the offscreen bitmap
163 	virtual void		disconnected();
164 
165 public:					// *** operations
166 
167 	// updates the jacks bitmap
168 	void				layoutChanged(
169 							int32 layout);
170 
171 	// special function to be called by the parent MediaNodePanel
172 	// for simple positioning; this method only needs to know the
173 	// vertical offset of the jack and the left/right frame coords
174 	// of the panel
175 	void				setPosition(
176 							float verticalOffset,
177 							float leftBoundary,
178 							float rightBoundary,
179 							BRegion *updateRegion = 0);
180 
181 protected:					// *** operations
182 
183 	// display a popup-menu at given point
184 	void				showContextMenu(
185 							BPoint point);
186 
187 private:				// *** internal methods
188 
189 	// update the offscreen bitmap
190 	void				_updateBitmap();
191 
192 	// draw jack into the specified target view
193 	void				_drawInto(
194 							BView *target,
195 							BRect frame,
196 							int32 layout);
197 
198 	// make/update an abbreviation for the jacks name
199 	void				_updateAbbreviation();
200 
201 public:					// *** sorting methods
202 
203 	// used for sorting; will put input jacks before output jacks
204 	// and inside those sort by index
205 	friend int			compareTypeAndID(
206 							const void *lValue,
207 							const void *rValue);
208 
209 private:				// *** data
210 
211 	int32				m_jackType;
212 	BBitmap			   *m_bitmap;
213 	int32				m_index;
214 	media_node			m_node;
215 	media_source		m_source;
216 	media_destination	m_destination;
217 	media_format		m_format;
218 	BString				m_label;
219 	BString				m_abbreviation;
220 };
221 
222 __END_CORTEX_NAMESPACE
223 #endif /* __MediaJack_H__ */
224