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