xref: /haiku/src/apps/cortex/addons/common/MediaNodeControlApp.cpp (revision 2cba2d5642ee902f1ac72ec6ce2fa383516a3f35)
1c284bb0fSMatt Madia /*
2c284bb0fSMatt Madia  * Copyright (c) 1999-2000, Eric Moon.
3c284bb0fSMatt Madia  * All rights reserved.
4c284bb0fSMatt Madia  *
5c284bb0fSMatt Madia  * Redistribution and use in source and binary forms, with or without
6c284bb0fSMatt Madia  * modification, are permitted provided that the following conditions
7c284bb0fSMatt Madia  * are met:
8c284bb0fSMatt Madia  *
9c284bb0fSMatt Madia  * 1. Redistributions of source code must retain the above copyright
10c284bb0fSMatt Madia  *    notice, this list of conditions, and the following disclaimer.
11c284bb0fSMatt Madia  *
12c284bb0fSMatt Madia  * 2. Redistributions in binary form must reproduce the above copyright
13c284bb0fSMatt Madia  *    notice, this list of conditions, and the following disclaimer in the
14c284bb0fSMatt Madia  *    documentation and/or other materials provided with the distribution.
15c284bb0fSMatt Madia  *
16c284bb0fSMatt Madia  * 3. The name of the author may not be used to endorse or promote products
17c284bb0fSMatt Madia  *    derived from this software without specific prior written permission.
18c284bb0fSMatt Madia  *
19c284bb0fSMatt Madia  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
20c284bb0fSMatt Madia  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21c284bb0fSMatt Madia  * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22c284bb0fSMatt Madia  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
23c284bb0fSMatt Madia  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24c284bb0fSMatt Madia  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25c284bb0fSMatt Madia  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26c284bb0fSMatt Madia  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27c284bb0fSMatt Madia  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28c284bb0fSMatt Madia  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29c284bb0fSMatt Madia  */
30c284bb0fSMatt Madia 
31c284bb0fSMatt Madia 
32a0795c6fSMarcus Overhagen // MediaNodeControlApp.cpp
33a0795c6fSMarcus Overhagen // e.moon 8jun99
34a0795c6fSMarcus Overhagen 
35a0795c6fSMarcus Overhagen #include "MediaNodeControlApp.h"
36a0795c6fSMarcus Overhagen #include <Window.h>
37a0795c6fSMarcus Overhagen #include <View.h>
38a0795c6fSMarcus Overhagen #include <MediaRoster.h>
39a0795c6fSMarcus Overhagen #include <MediaTheme.h>
40a0795c6fSMarcus Overhagen #include <ParameterWeb.h>
41a0795c6fSMarcus Overhagen #include <String.h>
42a0795c6fSMarcus Overhagen #include <Alert.h>
43*2cba2d56SDancsó Róbert #include <Catalog.h>
44a0795c6fSMarcus Overhagen 
45a0795c6fSMarcus Overhagen #include <cstdlib>
46a0795c6fSMarcus Overhagen #include <cstring>
47a0795c6fSMarcus Overhagen #include <cstdio>
48a0795c6fSMarcus Overhagen 
49*2cba2d56SDancsó Róbert 
50*2cba2d56SDancsó Róbert #undef B_TRANSLATION_CONTEXT
51*2cba2d56SDancsó Róbert #define B_TRANSLATION_CONTEXT "CortexAddOnsCommonMediaNodeControlApp"
52*2cba2d56SDancsó Róbert 
53*2cba2d56SDancsó Róbert 
54a0795c6fSMarcus Overhagen // -------------------------------------------------------- //
55a0795c6fSMarcus Overhagen // ctor/dtor
56a0795c6fSMarcus Overhagen // -------------------------------------------------------- //
57a0795c6fSMarcus Overhagen 
58a0795c6fSMarcus Overhagen class PanelWindow :
59a0795c6fSMarcus Overhagen 	public		BWindow {
60a0795c6fSMarcus Overhagen 	typedef	BWindow _inherited;
61a0795c6fSMarcus Overhagen public:
PanelWindow()62a0795c6fSMarcus Overhagen 	PanelWindow() :
63a0795c6fSMarcus Overhagen 		BWindow(BRect(50, 50, 100, 100), "MediaNodeControlApp",
64a0795c6fSMarcus Overhagen 			B_TITLED_WINDOW,
65a0795c6fSMarcus Overhagen 			B_ASYNCHRONOUS_CONTROLS |
66a0795c6fSMarcus Overhagen 			B_WILL_ACCEPT_FIRST_CLICK) {}
67a0795c6fSMarcus Overhagen 
QuitRequested()68a0795c6fSMarcus Overhagen 	bool QuitRequested() {
69a0795c6fSMarcus Overhagen 		be_app->PostMessage(B_QUIT_REQUESTED);
70a0795c6fSMarcus Overhagen 		return true;
71a0795c6fSMarcus Overhagen 	}
72a0795c6fSMarcus Overhagen };
73a0795c6fSMarcus Overhagen 
~MediaNodeControlApp()74a0795c6fSMarcus Overhagen MediaNodeControlApp::~MediaNodeControlApp() {
75a0795c6fSMarcus Overhagen 	BMediaRoster* r = BMediaRoster::Roster();
76a0795c6fSMarcus Overhagen 	r->ReleaseNode(m_node);
77a0795c6fSMarcus Overhagen }
78a0795c6fSMarcus Overhagen 
MediaNodeControlApp(const char * pAppSignature,media_node_id nodeID)79a0795c6fSMarcus Overhagen MediaNodeControlApp::MediaNodeControlApp(
80a0795c6fSMarcus Overhagen 	const char* pAppSignature,
81a0795c6fSMarcus Overhagen 	media_node_id nodeID) :
82a0795c6fSMarcus Overhagen 	BApplication(pAppSignature) {
83a0795c6fSMarcus Overhagen 
84a0795c6fSMarcus Overhagen 	BMediaRoster* r = BMediaRoster::Roster();
85a0795c6fSMarcus Overhagen 
86a0795c6fSMarcus Overhagen 	// get the node
87a0795c6fSMarcus Overhagen 	status_t err = r->GetNodeFor(nodeID, &m_node);
88a0795c6fSMarcus Overhagen 	if(err < B_OK) {
89a0795c6fSMarcus Overhagen 		char buffer[512];
90a0795c6fSMarcus Overhagen 		sprintf(buffer,
91*2cba2d56SDancsó Róbert 			B_TRANSLATE("MediaNodeControlApp: couldn't find node (%"
92*2cba2d56SDancsó Róbert 				B_PRId32 "):\n%s\n"),
93a0795c6fSMarcus Overhagen 			nodeID, strerror(err));
94*2cba2d56SDancsó Róbert 		BAlert* alert = new BAlert("error", buffer, B_TRANSLATE("OK"));
95aed35104SHumdinger 		alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
96aed35104SHumdinger 		alert->Go();
97a0795c6fSMarcus Overhagen 		return;
98a0795c6fSMarcus Overhagen 	}
99a0795c6fSMarcus Overhagen 
100a0795c6fSMarcus Overhagen 	// fetch info (name)
101a0795c6fSMarcus Overhagen 	live_node_info nInfo;
102a0795c6fSMarcus Overhagen 	err = r->GetLiveNodeInfo(m_node, &nInfo);
103a0795c6fSMarcus Overhagen 	if(err < B_OK) {
104a0795c6fSMarcus Overhagen 		char buffer[512];
105a0795c6fSMarcus Overhagen 		sprintf(buffer,
106*2cba2d56SDancsó Róbert 			B_TRANSLATE("MediaNodeControlApp: couldn't get node info (%"
107*2cba2d56SDancsó Róbert 				B_PRId32 "):\n%s\n"), nodeID, strerror(err));
108*2cba2d56SDancsó Róbert 		BAlert* alert = new BAlert("error", buffer, B_TRANSLATE("OK"));
109aed35104SHumdinger 		alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
110aed35104SHumdinger 		alert->Go();
111a0795c6fSMarcus Overhagen 		return;
112a0795c6fSMarcus Overhagen 	}
113a0795c6fSMarcus Overhagen 
114a0795c6fSMarcus Overhagen 	BString windowTitle;
115*2cba2d56SDancsó Róbert 	windowTitle << nInfo.name << '(' << nodeID << ") "
116*2cba2d56SDancsó Róbert 		<< B_TRANSLATE("controls");
117a0795c6fSMarcus Overhagen 
118a0795c6fSMarcus Overhagen 	// get parameter web
119a0795c6fSMarcus Overhagen 	BParameterWeb* pWeb;
120a0795c6fSMarcus Overhagen 	err = r->GetParameterWebFor(m_node, &pWeb);
121a0795c6fSMarcus Overhagen 	if(err < B_OK) {
122a0795c6fSMarcus Overhagen 		char buffer[512];
123a0795c6fSMarcus Overhagen 		sprintf(buffer,
124*2cba2d56SDancsó Róbert 			B_TRANSLATE("MediaNodeControlApp: no parameters for node (%"
125*2cba2d56SDancsó Róbert 				B_PRId32 "):\n%s\n"), nodeID, strerror(err));
126*2cba2d56SDancsó Róbert 		BAlert* alert = new BAlert("error", buffer, B_TRANSLATE("OK"));
127aed35104SHumdinger 		alert->SetFlags(alert->Flags() | B_CLOSE_ON_ESCAPE);
128aed35104SHumdinger 		alert->Go();
129a0795c6fSMarcus Overhagen 		return;
130a0795c6fSMarcus Overhagen 	}
131a0795c6fSMarcus Overhagen 
132a0795c6fSMarcus Overhagen 	// build & show control window
133a0795c6fSMarcus Overhagen 	BView* pView = BMediaTheme::ViewFor(pWeb);
134a0795c6fSMarcus Overhagen 	BWindow* pWnd = new PanelWindow();
135a0795c6fSMarcus Overhagen 	pWnd->AddChild(pView);
136a0795c6fSMarcus Overhagen 	pWnd->ResizeTo(pView->Bounds().Width(), pView->Bounds().Height());
137a0795c6fSMarcus Overhagen 	pWnd->SetTitle(windowTitle.String());
138a0795c6fSMarcus Overhagen 	pWnd->Show();
139a0795c6fSMarcus Overhagen 
140a0795c6fSMarcus Overhagen 	// release the node
141a0795c6fSMarcus Overhagen 	//r->ReleaseNode(m_node);
142a0795c6fSMarcus Overhagen }
143a0795c6fSMarcus Overhagen 
144a0795c6fSMarcus Overhagen // END -- MediaNodeControlApp.cpp --
145