xref: /haiku/src/apps/cortex/InfoView/DormantNodeInfoView.cpp (revision 4a850ca730d8282b5b924e49e09b4ba4d6db7f54)
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 // DormantNodeInfoView.cpp
33 
34 #include "DormantNodeInfoView.h"
35 // InfoView
36 #include "InfoWindowManager.h"
37 // Support
38 #include "MediaIcon.h"
39 #include "MediaString.h"
40 
41 // Locale Kit
42 #undef B_CATALOG
43 #define B_CATALOG (&sCatalog)
44 #include <Catalog.h>
45 // Media Kit
46 #include <MediaAddOn.h>
47 #include <MediaRoster.h>
48 
49 #undef B_TRANSLATION_CONTEXT
50 #define B_TRANSLATION_CONTEXT "DormantNodeInfoView"
51 
52 __USE_CORTEX_NAMESPACE
53 
54 #include <Debug.h>
55 #define D_METHOD(x) //PRINT (x)
56 
57 static BCatalog sCatalog("x-vnd.Cortex.InfoView");
58 
59 // -------------------------------------------------------- //
60 // *** ctor/dtor (public)
61 // -------------------------------------------------------- //
62 
63 DormantNodeInfoView::DormantNodeInfoView(
64 	const dormant_node_info &info)
65 	: InfoView(info.name, B_TRANSLATE("Dormant media node"),
66 			   new MediaIcon(info, B_LARGE_ICON)),
67 	  m_addOnID(info.addon),
68 	  m_flavorID(info.flavor_id)
69 {
70 	D_METHOD(("DormantNodeInfoView::DormantNodeInfoView()\n"));
71 
72 	// adjust view properties
73 	setSideBarWidth(be_plain_font->StringWidth(B_TRANSLATE("Output formats"))
74 		+ 2 * InfoView::M_H_MARGIN);
75 
76 	BString s;
77 
78 	// add the "AddOn ID" field
79 	s = "";
80 	s << info.addon;
81 	addField(B_TRANSLATE("AddOn ID"), s);
82 
83 	// add the "Flavor ID" field
84 	s = "";
85 	s << info.flavor_id;
86 	addField(B_TRANSLATE("Flavor ID"), s);
87 
88 	// add separator field
89 	addField("", "");
90 
91 	dormant_flavor_info flavorInfo;
92 	BMediaRoster *roster = BMediaRoster::Roster();
93 	if (roster && (roster->GetDormantFlavorInfoFor(info, &flavorInfo) == B_OK))
94 	{
95 		// add the "Description" field
96 		s = flavorInfo.info;
97 		addField(B_TRANSLATE("Description"), s);
98 
99 		// add "Kinds" field
100 		addField(B_TRANSLATE("Kinds"), MediaString::getStringFor(
101 			static_cast<node_kind>(flavorInfo.kinds)));
102 
103 		// add "Flavor Flags" field
104 		addField(B_TRANSLATE("Flavor flags"), "?");
105 
106 		// add "Max. instances" field
107 		if (flavorInfo.possible_count > 0)
108 		{
109 			s = "";
110 			s << flavorInfo.possible_count;
111 		}
112 		else
113 		{
114 			s = B_TRANSLATE_COMMENT("Any number", "For 'Max. instances' field");
115 		}
116 		addField(B_TRANSLATE("Max. instances"), s);
117 
118 		// add "Input Formats" field
119 		if (flavorInfo.in_format_count > 0)
120 		{
121 			if (flavorInfo.in_format_count == 1)
122 			{
123 				addField(B_TRANSLATE("Input format"),
124 					MediaString::getStringFor(flavorInfo.in_formats[0], false));
125 			}
126 			else
127 			{
128 				addField(B_TRANSLATE("Input formats"), "");
129 				for (int32 i = 0; i < flavorInfo.in_format_count; i++)
130 				{
131 					s = "";
132 					s << "(" << i + 1 << ")";
133 					addField(s, MediaString::getStringFor(flavorInfo.in_formats[i], false));
134 				}
135 			}
136 		}
137 
138 		// add "Output Formats" field
139 		if (flavorInfo.out_format_count > 0)
140 		{
141 			if (flavorInfo.out_format_count == 1)
142 			{
143 				addField(B_TRANSLATE("Output format"),
144 					MediaString::getStringFor(
145 						flavorInfo.out_formats[0], false));
146 			}
147 			else
148 			{
149 				addField(B_TRANSLATE("Output formats"), "");
150 				for (int32 i = 0; i < flavorInfo.out_format_count; i++)
151 				{
152 					s = "";
153 					s << "(" << i + 1 << ")";
154 					addField(s, MediaString::getStringFor(flavorInfo.out_formats[i], false));
155 				}
156 			}
157 		}
158 	}
159 }
160 
161 DormantNodeInfoView::~DormantNodeInfoView()
162 {
163 	D_METHOD(("DormantNodeInfoView::~DormantNodeInfoView()\n"));
164 }
165 
166 // -------------------------------------------------------- //
167 // *** BView implementation (public)
168 // -------------------------------------------------------- //
169 
170 void DormantNodeInfoView::DetachedFromWindow() {
171 	D_METHOD(("DormantNodeInfoView::DetachedFromWindow()\n"));
172 
173 	InfoWindowManager *manager = InfoWindowManager::Instance();
174 	if (manager) {
175 		BMessage message(InfoWindowManager::M_DORMANT_NODE_WINDOW_CLOSED);
176 		message.AddInt32("addOnID", m_addOnID);
177 		message.AddInt32("flavorID", m_flavorID);
178 		manager->PostMessage(&message);
179 	}
180 }
181 
182 // END -- DormantNodeInfoView.cpp --
183