xref: /haiku/docs/user/translation/TranslatorRoster.dox (revision 70dc2e27e998e93c980065c0b92956a5dce3e83c)
1*70dc2e27SMarkus Himmel/*
2*70dc2e27SMarkus Himmel * Copyright 2014-2015 Markus Himmel. All rights reserved.
3*70dc2e27SMarkus Himmel * Distributed under the terms of the MIT License.
4*70dc2e27SMarkus Himmel *
5*70dc2e27SMarkus Himmel * Authors:
6*70dc2e27SMarkus Himmel *		Markus Himmel, markus@himmel-villmar.de
7*70dc2e27SMarkus Himmel *
8*70dc2e27SMarkus Himmel * Corresponds to:
9*70dc2e27SMarkus Himmel *		headers/os/translation/TranslatorRoster.h	hrev48588
10*70dc2e27SMarkus Himmel *		src/kits/translation/TranslatorRoster.cpp	hrev48588
11*70dc2e27SMarkus Himmel */
12*70dc2e27SMarkus Himmel
13*70dc2e27SMarkus Himmel/*!
14*70dc2e27SMarkus Himmel	\file TranslatorRoster.h
15*70dc2e27SMarkus Himmel	\ingroup translation
16*70dc2e27SMarkus Himmel	\ingroup libtranslation
17*70dc2e27SMarkus Himmel	\brief BTranslatorRoster class definition
18*70dc2e27SMarkus Himmel*/
19*70dc2e27SMarkus Himmel
20*70dc2e27SMarkus Himmel/*!
21*70dc2e27SMarkus Himmel	\class BTranslatorRoster
22*70dc2e27SMarkus Himmel	\ingroup translation
23*70dc2e27SMarkus Himmel	\ingroup libtranslation
24*70dc2e27SMarkus Himmel	\brief Class that serves as an interface between applications and
25*70dc2e27SMarkus Himmel		translators.
26*70dc2e27SMarkus Himmel
27*70dc2e27SMarkus Himmel	BTranslatorRoster gives applications access to the translation kit.
28*70dc2e27SMarkus Himmel	Applications can request translations and BTranslatorRoster will
29*70dc2e27SMarkus Himmel	automatically search for a matching translator and have it perfrom the
30*70dc2e27SMarkus Himmel	translation.
31*70dc2e27SMarkus Himmel
32*70dc2e27SMarkus Himmel	\warning BTranslatorRoster does not perform chaining of any sort. Only
33*70dc2e27SMarkus Himmel		translations that can be made by invoking a single translator are
34*70dc2e27SMarkus Himmel		supported.
35*70dc2e27SMarkus Himmel
36*70dc2e27SMarkus Himmel	\note BTranslationUtils provides some helper methods that perform the
37*70dc2e27SMarkus Himmel		interaction with BTranslatorRoster for you.
38*70dc2e27SMarkus Himmel
39*70dc2e27SMarkus Himmel	BTranslationRoster acts as a container. While in most cases the default
40*70dc2e27SMarkus Himmel	roster is used, it is possible to create a roster that interacts with a
41*70dc2e27SMarkus Himmel	custom set of translators.
42*70dc2e27SMarkus Himmel*/
43*70dc2e27SMarkus Himmel
44*70dc2e27SMarkus Himmel/*!
45*70dc2e27SMarkus Himmel	\name Constructors and Destructor
46*70dc2e27SMarkus Himmel*/
47*70dc2e27SMarkus Himmel
48*70dc2e27SMarkus Himmel//! @{
49*70dc2e27SMarkus Himmel
50*70dc2e27SMarkus Himmel/*!
51*70dc2e27SMarkus Himmel	\fn BTranslatorRoster::BTranslatorRoster()
52*70dc2e27SMarkus Himmel	\brief Constructs an empty BTranslatorRoster.
53*70dc2e27SMarkus Himmel
54*70dc2e27SMarkus Himmel	\warning Only call the contructor if you want to use a custom collection of
55*70dc2e27SMarkus Himmel		translators. Use Default() if you don't.
56*70dc2e27SMarkus Himmel*/
57*70dc2e27SMarkus Himmel
58*70dc2e27SMarkus Himmel/*!
59*70dc2e27SMarkus Himmel	\fn BTranslatorRoster::BTranslatorRoster(BMessage* model);
60*70dc2e27SMarkus Himmel	\brief Constructs a BTranslatorRoster and fills it.
61*70dc2e27SMarkus Himmel
62*70dc2e27SMarkus Himmel	\param model A message that contains information about a
63*70dc2e27SMarkus Himmel		BTranslatorRoster.
64*70dc2e27SMarkus Himmel
65*70dc2e27SMarkus Himmel	After initialization, \a model is searched for strings with the name
66*70dc2e27SMarkus Himmel	\c "be:translator_path". The translators that are located at each path
67*70dc2e27SMarkus Himmel	are added to the roster. If multiple paths point to translators with the
68*70dc2e27SMarkus Himmel	same name, the translator at the path with the lowest index within the
69*70dc2e27SMarkus Himmel	message will be kept.
70*70dc2e27SMarkus Himmel
71*70dc2e27SMarkus Himmel	\warning Use Instantiate() instead of this constructor if \a model was
72*70dc2e27SMarkus Himmel		created using Archive().
73*70dc2e27SMarkus Himmel*/
74*70dc2e27SMarkus Himmel
75*70dc2e27SMarkus Himmel/*!
76*70dc2e27SMarkus Himmel	\fn BTranslatorRoster::~BTranslatorRoster();
77*70dc2e27SMarkus Himmel	\brief Deletes this BTranslatorRoster.
78*70dc2e27SMarkus Himmel
79*70dc2e27SMarkus Himmel	If the BTranslatorRoster that is deleted is the default roster, a new
80*70dc2e27SMarkus Himmel	default roster will be created when BTranslatorRoster::Default() is called
81*70dc2e27SMarkus Himmel	for the next time.
82*70dc2e27SMarkus Himmel
83*70dc2e27SMarkus Himmel	Release() is called on all translators in the roster.
84*70dc2e27SMarkus Himmel*/
85*70dc2e27SMarkus Himmel
86*70dc2e27SMarkus Himmel/*!
87*70dc2e27SMarkus Himmel	\fn static BTranslatorRoster* BTranslatorRoster::Default();
88*70dc2e27SMarkus Himmel	\brief Gets the default BTranslatorRoster.
89*70dc2e27SMarkus Himmel
90*70dc2e27SMarkus Himmel	There is only one default translator. It is created when it is first
91*70dc2e27SMarkus Himmel	requested. It is poplated according to the following rules:
92*70dc2e27SMarkus Himmel
93*70dc2e27SMarkus Himmel	If the environment variable \c TRANSLATORS is set, it will be populated
94*70dc2e27SMarkus Himmel	with all translators that are present in the directories denoted by
95*70dc2e27SMarkus Himmel	\c TRANSLATORS. The paths are separated by a colon (<tt>:</tt>). If
96*70dc2e27SMarkus Himmel	multiple paths contain a translator with the same name, the translator
97*70dc2e27SMarkus Himmel	that is located in the path that appears earliest in \c TRANSLATORS will
98*70dc2e27SMarkus Himmel	be kept.
99*70dc2e27SMarkus Himmel
100*70dc2e27SMarkus Himmel	If \c TRANSLATORS is unset, the user non-packaged add-ons directory, the
101*70dc2e27SMarkus Himmel	user add-ons directory, the system non-packaged add-ons directory and the
102*70dc2e27SMarkus Himmel	system add-ons directory will be used. If those directories do not contain
103*70dc2e27SMarkus Himmel	a subdirectory \c Translators, it will be created. The subdirectories are
104*70dc2e27SMarkus Himmel	then added in the above order. If multiple directories contain a translator
105*70dc2e27SMarkus Himmel	with the same name, the translator that is located in the path that appears
106*70dc2e27SMarkus Himmel	earliest in the above list will be kept.
107*70dc2e27SMarkus Himmel*/
108*70dc2e27SMarkus Himmel
109*70dc2e27SMarkus Himmel//! @}
110*70dc2e27SMarkus Himmel
111*70dc2e27SMarkus Himmel/*!
112*70dc2e27SMarkus Himmel	\name Archiving
113*70dc2e27SMarkus Himmel*/
114*70dc2e27SMarkus Himmel
115*70dc2e27SMarkus Himmel//! @{
116*70dc2e27SMarkus Himmel
117*70dc2e27SMarkus Himmel/*!
118*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::Archive(BMessage* into, bool deep\
119*70dc2e27SMarkus Himmel		= true) const;
120*70dc2e27SMarkus Himmel	\brief Archive this BTranslatorRoster into a BMessage.
121*70dc2e27SMarkus Himmel
122*70dc2e27SMarkus Himmel	\param into Where the BTranslatorRoster will be stored.
123*70dc2e27SMarkus Himmel	\param deep Unused.
124*70dc2e27SMarkus Himmel
125*70dc2e27SMarkus Himmel	\retval B_OK The operation was successful.
126*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a into was NULL.
127*70dc2e27SMarkus Himmel	\retval B_ERROR The operation failed.
128*70dc2e27SMarkus Himmel*/
129*70dc2e27SMarkus Himmel
130*70dc2e27SMarkus Himmel/*!
131*70dc2e27SMarkus Himmel	\fn static BArchivable* BTranslatorRoster::Instantiate(BMessage* from);
132*70dc2e27SMarkus Himmel	\brief Creates a new BTranslatorRoster from a message.
133*70dc2e27SMarkus Himmel
134*70dc2e27SMarkus Himmel	\param from The message that contains information about a
135*70dc2e27SMarkus Himmel		BTranslatorRoster.
136*70dc2e27SMarkus Himmel
137*70dc2e27SMarkus Himmel	\returns \c NULL if \a from was \c NULL, contained invalid archive data or
138*70dc2e27SMarkus Himmel		archive data of a class that is not BTranslatorRoster. A pointer to a
139*70dc2e27SMarkus Himmel		new BTranslatorRoster containing the information from \a from
140*70dc2e27SMarkus Himmel		otherwise.
141*70dc2e27SMarkus Himmel*/
142*70dc2e27SMarkus Himmel
143*70dc2e27SMarkus Himmel//! @}
144*70dc2e27SMarkus Himmel
145*70dc2e27SMarkus Himmel/*!
146*70dc2e27SMarkus Himmel	\name Roster Management
147*70dc2e27SMarkus Himmel*/
148*70dc2e27SMarkus Himmel
149*70dc2e27SMarkus Himmel//! @{
150*70dc2e27SMarkus Himmel
151*70dc2e27SMarkus Himmel/*!
152*70dc2e27SMarkus Himmel	\fn status_t BTranslatorRoster::AddTranslators(const char* loadPath =\
153*70dc2e27SMarkus Himmel		NULL);
154*70dc2e27SMarkus Himmel	\brief Adds translators from a directory to the roster.
155*70dc2e27SMarkus Himmel
156*70dc2e27SMarkus Himmel	\param loadPath A colon-separated list of directories to search for
157*70dc2e27SMarkus Himmel		translators in.
158*70dc2e27SMarkus Himmel
159*70dc2e27SMarkus Himmel	The following method is used to determine which translators to add:
160*70dc2e27SMarkus Himmel
161*70dc2e27SMarkus Himmel	If \a loadPath is not \c NULL, the roster will be populated with all
162*70dc2e27SMarkus Himmel	translators that are present in the directores denoted by \a loadPath. The
163*70dc2e27SMarkus Himmel	paths are separated by a colon (<tt>:</tt>). If multiple paths contain a
164*70dc2e27SMarkus Himmel	translator with the same name, the translator that is located in the path
165*70dc2e27SMarkus Himmel	that appears earliest in \a loadPath will be kept.
166*70dc2e27SMarkus Himmel
167*70dc2e27SMarkus Himmel	If \a loadPath is \c NULL and the environment variable \c TRANSLATORS is
168*70dc2e27SMarkus Himmel	set, it will be populated with all translators that are present in the
169*70dc2e27SMarkus Himmel	directories denoted by \c TRANSLATORS. The paths are separated by a colon
170*70dc2e27SMarkus Himmel	(<tt>:</tt>). If multiple paths contain a translator with the same name,
171*70dc2e27SMarkus Himmel	the translator that is located in the path that appears earliest in
172*70dc2e27SMarkus Himmel	\c TRANSLATORS will be kept.
173*70dc2e27SMarkus Himmel
174*70dc2e27SMarkus Himmel	If \a loadPath is \c NULL and \c TRANSLATORS is unset, the user
175*70dc2e27SMarkus Himmel	non-packaged add-ons directory, the user add-ons directory, the system
176*70dc2e27SMarkus Himmel	non-packaged add-ons directory and the system add-ons directory will be
177*70dc2e27SMarkus Himmel	used. If those directories do not contain a subdirectory \c Translators, it
178*70dc2e27SMarkus Himmel	will be created. The subdirectories are then added in the above order. If
179*70dc2e27SMarkus Himmel	multiple directories contain a translator with the same name, the
180*70dc2e27SMarkus Himmel	translator that is located in the path that appears earliest in the above
181*70dc2e27SMarkus Himmel	list will be kept.
182*70dc2e27SMarkus Himmel
183*70dc2e27SMarkus Himmel	\returns \c B_OK if everything went well, an error code specific to the
184*70dc2e27SMarkus Himmel		operation that failed otherwise.
185*70dc2e27SMarkus Himmel*/
186*70dc2e27SMarkus Himmel
187*70dc2e27SMarkus Himmel/*!
188*70dc2e27SMarkus Himmel	\fn status_t BTranslatorRoster::AddTranslator(BTranslator* translator);
189*70dc2e27SMarkus Himmel	\brief Adds a single BTranslator to the roster.
190*70dc2e27SMarkus Himmel
191*70dc2e27SMarkus Himmel	\param translator The translator that should be added.
192*70dc2e27SMarkus Himmel
193*70dc2e27SMarkus Himmel	\remark AddTranslator() calls Acquire() on the translator, so it is safe
194*70dc2e27SMarkus Himmel		to release it if you had acquired it before.
195*70dc2e27SMarkus Himmel
196*70dc2e27SMarkus Himmel	\retval B_OK The translator was successfully added to the roster.
197*70dc2e27SMarkus Himmel	\retval B_NO_MEMORY There was no memory to enlarge the roster.
198*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a translator was \c NULL.
199*70dc2e27SMarkus Himmel*/
200*70dc2e27SMarkus Himmel
201*70dc2e27SMarkus Himmel//! @}
202*70dc2e27SMarkus Himmel
203*70dc2e27SMarkus Himmel/*!
204*70dc2e27SMarkus Himmel	\name Translator Access
205*70dc2e27SMarkus Himmel*/
206*70dc2e27SMarkus Himmel
207*70dc2e27SMarkus Himmel//! @{
208*70dc2e27SMarkus Himmel
209*70dc2e27SMarkus Himmel/*!
210*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::GetTranslators(BPositionIO*\
211*70dc2e27SMarkus Himmel		source, BMessage* ioExtension, translator_info** _info, int32*\
212*70dc2e27SMarkus Himmel		_numInfo, uint32 hintType = 0, const char* hintMIME = NULL, uint32\
213*70dc2e27SMarkus Himmel		wantType = 0);
214*70dc2e27SMarkus Himmel	\brief Collects information about all translators that are able to perform
215*70dc2e27SMarkus Himmel		a certain conversion in an array.
216*70dc2e27SMarkus Himmel
217*70dc2e27SMarkus Himmel	\param source Read and seek interface to the data to be examinded.
218*70dc2e27SMarkus Himmel	\param ioExtension A message containing configuration information for the
219*70dc2e27SMarkus Himmel		translators.
220*70dc2e27SMarkus Himmel	\param _info Where the resulting array will be stored.
221*70dc2e27SMarkus Himmel	\param _numInfo Where the number of elements in the resulting array will
222*70dc2e27SMarkus Himmel		be stored.
223*70dc2e27SMarkus Himmel	\param hintType A hint about the data format in \a source. \c 0 represents
224*70dc2e27SMarkus Himmel		an unknown type.
225*70dc2e27SMarkus Himmel	\param hintMIME A hint about the MIME type of \a source. \c NULL represents
226*70dc2e27SMarkus Himmel		an unknown type.
227*70dc2e27SMarkus Himmel	\param wantType The format that \a source needs to be translated into. \c 0
228*70dc2e27SMarkus Himmel		permits any output type.
229*70dc2e27SMarkus Himmel
230*70dc2e27SMarkus Himmel	If this function returns \c B_OK the caller has to call \c delete[] when
231*70dc2e27SMarkus Himmel	they are done using \a _info.
232*70dc2e27SMarkus Himmel
233*70dc2e27SMarkus Himmel	\retval B_OK \a _info and \a _numInfo were successfully populated.
234*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR No suitable translator was found.
235*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a source, \a _info or \a _numInfo was \c NULL.
236*70dc2e27SMarkus Himmel	\retval B_IO_ERROR There was an error interacting with \a source.
237*70dc2e27SMarkus Himmel	\retval B_NO_MEMORY Could not allocate enough memory for the array.
238*70dc2e27SMarkus Himmel*/
239*70dc2e27SMarkus Himmel
240*70dc2e27SMarkus Himmel/*!
241*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::GetAllTranslators(translator_id**\
242*70dc2e27SMarkus Himmel		_list, int32* _count);
243*70dc2e27SMarkus Himmel	\brief Collects the IDs of all translators in the roster in an array.
244*70dc2e27SMarkus Himmel
245*70dc2e27SMarkus Himmel	\param _list Where the resulting array will be stored.
246*70dc2e27SMarkus Himmel	\param _count Where the number of elements in the resulting array will be
247*70dc2e27SMarkus Himmel		stored.
248*70dc2e27SMarkus Himmel
249*70dc2e27SMarkus Himmel	If this function returns \c B_OK the caller has to call \c delete[] when
250*70dc2e27SMarkus Himmel	they are done using \a _info.
251*70dc2e27SMarkus Himmel
252*70dc2e27SMarkus Himmel	\retval B_OK \a _list and \a _count were populated successfully.
253*70dc2e27SMarkus Himmel	\retval B_NO_MEMORY Could not allocate the memory for the array.
254*70dc2e27SMarkus Himmel*/
255*70dc2e27SMarkus Himmel
256*70dc2e27SMarkus Himmel/*!
257*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::GetTranslatorInfo(translator_id\
258*70dc2e27SMarkus Himmel		translatorID, const char** _name, const char** _info, int32* _version);
259*70dc2e27SMarkus Himmel	\brief Looks up general information of the translator with a given ID.
260*70dc2e27SMarkus Himmel
261*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator whose information is
262*70dc2e27SMarkus Himmel		requested.
263*70dc2e27SMarkus Himmel	\param _name Where the name of the translator will be stored.
264*70dc2e27SMarkus Himmel	\param _info Where the description of the translator will be stored.
265*70dc2e27SMarkus Himmel	\param _version Where the version of the translator will be stored.
266*70dc2e27SMarkus Himmel
267*70dc2e27SMarkus Himmel	Do not free any returned data. If any of \a _name, \a _info and \a _version
268*70dc2e27SMarkus Himmel	are \c NULL, the non-null pointers will still be written to.
269*70dc2e27SMarkus Himmel
270*70dc2e27SMarkus Himmel	\retval B_OK All non-null pointers were written to successfully.
271*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE All three pointers were \c NULL.
272*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The roster does not contain any translator with the
273*70dc2e27SMarkus Himmel		ID \a translatorID.
274*70dc2e27SMarkus Himmel*/
275*70dc2e27SMarkus Himmel
276*70dc2e27SMarkus Himmel/*!
277*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::GetInputFormats(translator_id\
278*70dc2e27SMarkus Himmel		translatorID, const translation_format** _formats, int32* _numFormats);
279*70dc2e27SMarkus Himmel	\brief Looks up the input formats of the translator with a given ID.
280*70dc2e27SMarkus Himmel
281*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator whose input formats are
282*70dc2e27SMarkus Himmel		requested.
283*70dc2e27SMarkus Himmel	\param _formats Where the array of input formats will be stored.
284*70dc2e27SMarkus Himmel	\param _numFormats Where the number of elements in the array of input
285*70dc2e27SMarkus Himmel		formats will be stored.
286*70dc2e27SMarkus Himmel
287*70dc2e27SMarkus Himmel	Do not free any of the returned data.
288*70dc2e27SMarkus Himmel
289*70dc2e27SMarkus Himmel	\retval B_OK \a _formats and \a _numFormats were successfully set.
290*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a _formats or \a _numFormats was \c NULL.
291*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The roster does not contain any translator with the
292*70dc2e27SMarkus Himmel		ID \a translatorID.
293*70dc2e27SMarkus Himmel*/
294*70dc2e27SMarkus Himmel
295*70dc2e27SMarkus Himmel/*!
296*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::GetOutputFormats(translator_id\
297*70dc2e27SMarkus Himmel		translatorID, const translation_format** _formats, int32* _numFormats);
298*70dc2e27SMarkus Himmel	\brief Looks up the output formats of the translator with a given ID.
299*70dc2e27SMarkus Himmel
300*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator whose output formats are
301*70dc2e27SMarkus Himmel		requested.
302*70dc2e27SMarkus Himmel	\param _formats Where the array of output formats will be stored.
303*70dc2e27SMarkus Himmel	\param _numFormats Where the number of elements in the array of output
304*70dc2e27SMarkus Himmel		formats will be stored.
305*70dc2e27SMarkus Himmel
306*70dc2e27SMarkus Himmel	Do not free any of the returned data.
307*70dc2e27SMarkus Himmel
308*70dc2e27SMarkus Himmel	\retval B_OK \a _formats and \a _numFormats were successfully set.
309*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a _formats or \a _numFormats was \c NULL.
310*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The roster does not contain any translator with the
311*70dc2e27SMarkus Himmel		ID \a translatorID.
312*70dc2e27SMarkus Himmel*/
313*70dc2e27SMarkus Himmel
314*70dc2e27SMarkus Himmel/*!
315*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::MakeConfigurationView(\
316*70dc2e27SMarkus Himmel		translator_id translatorID, BMessage* ioExtension, BView** _view,\
317*70dc2e27SMarkus Himmel		BRect* _extent);
318*70dc2e27SMarkus Himmel	\brief Creates the configuration view of a specified translator from the
319*70dc2e27SMarkus Himmel		roster.
320*70dc2e27SMarkus Himmel
321*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator whose configuration view
322*70dc2e27SMarkus Himmel		should be created.
323*70dc2e27SMarkus Himmel	\param ioExtension A message containing configuration information for the
324*70dc2e27SMarkus Himmel		translator.
325*70dc2e27SMarkus Himmel	\param _view Where a pointer to the newly created configuration view will
326*70dc2e27SMarkus Himmel		be stored.
327*70dc2e27SMarkus Himmel	\param _extent Where the size of of the newly created configuration view
328*70dc2e27SMarkus Himmel		will be stored.
329*70dc2e27SMarkus Himmel
330*70dc2e27SMarkus Himmel	\retval B_OK Everything went well.
331*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a _view or \a _extent were \c NULL or \a ioExtension
332*70dc2e27SMarkus Himmel		was \c NULL or contained bad data.
333*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The roster does not contain any translator with the
334*70dc2e27SMarkus Himmel		ID \a translatorID.
335*70dc2e27SMarkus Himmel	\retval B_ERROR An error occurred or the translator chose not to supply
336*70dc2e27SMarkus Himmel		a configuration view.
337*70dc2e27SMarkus Himmel*/
338*70dc2e27SMarkus Himmel
339*70dc2e27SMarkus Himmel/*!
340*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::GetConfigurationMessage(\
341*70dc2e27SMarkus Himmel		translator_id translatorID, BMessage* ioExtension)
342*70dc2e27SMarkus Himmel	\brief Populates a BMessage with the settings of the specified translator.
343*70dc2e27SMarkus Himmel
344*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator whose settings \a ioExtension
345*70dc2e27SMarkus Himmel		should be populated with.
346*70dc2e27SMarkus Himmel	\param ioExtension The message that should be populated.
347*70dc2e27SMarkus Himmel
348*70dc2e27SMarkus Himmel	\retval B_OK \a ioExtension was populated successfully.
349*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The roster does not contain any translator with the
350*70dc2e27SMarkus Himmel		ID \a translatorID.
351*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a ioExtension was \c NULL.
352*70dc2e27SMarkus Himmel	\retval B_ERROR An error occurred or the translator chose not to provide
353*70dc2e27SMarkus Himmel		this functionality.
354*70dc2e27SMarkus Himmel*/
355*70dc2e27SMarkus Himmel
356*70dc2e27SMarkus Himmel/*!
357*70dc2e27SMarkus Himmel	\fn status_t BTranslatorRoster::GetRefFor(translator_id translatorID,\
358*70dc2e27SMarkus Himmel		entry_ref* ref);
359*70dc2e27SMarkus Himmel	\brief Returns the entry_ref of the specified translator.
360*70dc2e27SMarkus Himmel
361*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator whose entry_ref is to be
362*70dc2e27SMarkus Himmel		found.
363*70dc2e27SMarkus Himmel	\param ref Where the entry_ref will be written.
364*70dc2e27SMarkus Himmel
365*70dc2e27SMarkus Himmel	\retval B_OK Everything went well.
366*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a ref was \c NULL.
367*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The roster does not contain any translator with the
368*70dc2e27SMarkus Himmel		ID \a translatorID.
369*70dc2e27SMarkus Himmel	\retval B_ERROR An error occurred.
370*70dc2e27SMarkus Himmel*/
371*70dc2e27SMarkus Himmel
372*70dc2e27SMarkus Himmel//! @}
373*70dc2e27SMarkus Himmel
374*70dc2e27SMarkus Himmel/*!
375*70dc2e27SMarkus Himmel	\name Core Methods
376*70dc2e27SMarkus Himmel*/
377*70dc2e27SMarkus Himmel
378*70dc2e27SMarkus Himmel//! @{
379*70dc2e27SMarkus Himmel
380*70dc2e27SMarkus Himmel/*!
381*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::Identify(BPositionIO* source,\
382*70dc2e27SMarkus Himmel		BMessage* ioExtension, translator_info* _info, uint32 hintType = 0,\
383*70dc2e27SMarkus Himmel		const char* hintMIME = NULL, uint32 wantType = 0);
384*70dc2e27SMarkus Himmel	\brief Determines the best translator in the roster to perform a certain
385*70dc2e27SMarkus Himmel		conversion.
386*70dc2e27SMarkus Himmel
387*70dc2e27SMarkus Himmel	\param source Read and seek interface to the data to be examined.
388*70dc2e27SMarkus Himmel	\param ioExtension A message containing configuration infortmation for the
389*70dc2e27SMarkus Himmel		translators.
390*70dc2e27SMarkus Himmel	\param _info Where information about the best translator will be written.
391*70dc2e27SMarkus Himmel	\param hintType A hint about the data format in \a source. \c 0 represents
392*70dc2e27SMarkus Himmel		an unknown type.
393*70dc2e27SMarkus Himmel	\param hintMIME A hint about the MIME type of \a source. \c NULL represents
394*70dc2e27SMarkus Himmel		an unknown type.
395*70dc2e27SMarkus Himmel	\param wantType The format that \a source needs to be translated into. \c 0
396*70dc2e27SMarkus Himmel		permits any output type.
397*70dc2e27SMarkus Himmel
398*70dc2e27SMarkus Himmel	To determine the best translator, for all translators that report that
399*70dc2e27SMarkus Himmel	they are able to perform the translation, the values they return for
400*70dc2e27SMarkus Himmel	quality and capability are multiplied. The translator with the highest
401*70dc2e27SMarkus Himmel	value gets returned. Note that quality and capability for the output
402*70dc2e27SMarkus Himmel	format are not taken into consideration.
403*70dc2e27SMarkus Himmel
404*70dc2e27SMarkus Himmel	\retval B_OK Identification was successful. Information about the chosen
405*70dc2e27SMarkus Himmel		translator was written to \a _info.
406*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR No suitable translator was found.
407*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a source or \a _info was \c NULL.
408*70dc2e27SMarkus Himmel	\retval B_IO_ERROR There was an error interacting with \a source.
409*70dc2e27SMarkus Himmel*/
410*70dc2e27SMarkus Himmel
411*70dc2e27SMarkus Himmel/*!
412*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::Translate(BPositionIO* source,\
413*70dc2e27SMarkus Himmel		const translator_info* info, BMessage* ioExtension, BPositionIO*\
414*70dc2e27SMarkus Himmel		destination, uint32 wantOutType, uint32 hintType = 0, const char*\
415*70dc2e27SMarkus Himmel		hintMIME = NULL);
416*70dc2e27SMarkus Himmel	\brief Finds and invokes the best translator for a conversion.
417*70dc2e27SMarkus Himmel
418*70dc2e27SMarkus Himmel	\param source Read and seek interface to the input data.
419*70dc2e27SMarkus Himmel	\param info Information about wich translator should be used. If
420*70dc2e27SMarkus Himmel		\a info is \c NULL, Identify() will be used to find a suitable
421*70dc2e27SMarkus Himmel		translator.
422*70dc2e27SMarkus Himmel	\param ioExtension A message containing configuration information for the
423*70dc2e27SMarkus Himmel		translator.
424*70dc2e27SMarkus Himmel	\param destination Write interface to the output location.
425*70dc2e27SMarkus Himmel	\param wantOutType The desired output format. If this is \c 0, any type
426*70dc2e27SMarkus Himmel		is permitted.
427*70dc2e27SMarkus Himmel	\param hintType A hint about the type of the data in \a source.
428*70dc2e27SMarkus Himmel	\param hintMIME A hint about the MIME type of the data in \a source.
429*70dc2e27SMarkus Himmel
430*70dc2e27SMarkus Himmel	\retval B_OK The translated data was successfully written to
431*70dc2e27SMarkus Himmel		\a destination.
432*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR \a info was non-null but did not match to any
433*70dc2e27SMarkus Himmel		translator in the roster.
434*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR \a info was \c NULL and no suitable translator was
435*70dc2e27SMarkus Himmel		found.
436*70dc2e27SMarkus Himmel	\retval B_ERROR An error occurred.
437*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a source or \a destination was \c NULL or
438*70dc2e27SMarkus Himmel		\a ioExtension was \c NULL or contained bad data.
439*70dc2e27SMarkus Himmel	\retval B_IO_ERROR An error occurred accessing \a source or \a destination.
440*70dc2e27SMarkus Himmel*/
441*70dc2e27SMarkus Himmel
442*70dc2e27SMarkus Himmel/*!
443*70dc2e27SMarkus Himmel	\fn virtual status_t BTranslatorRoster::Translate(translator_id\
444*70dc2e27SMarkus Himmel		translatorID, BPositionIO* source, BMessage* ioExtension, BPositionIO*\
445*70dc2e27SMarkus Himmel		destination, uint32 wantOutType);
446*70dc2e27SMarkus Himmel	\brief Uses a specified translator from the roster to perform a conversion.
447*70dc2e27SMarkus Himmel
448*70dc2e27SMarkus Himmel	\param translatorID The ID of the translator that should be used.
449*70dc2e27SMarkus Himmel	\param source Read and seek interface to the input data.
450*70dc2e27SMarkus Himmel	\param ioExtension A message containing configuration information for the
451*70dc2e27SMarkus Himmel		translator.
452*70dc2e27SMarkus Himmel	\param destination Write interface to the output location.
453*70dc2e27SMarkus Himmel	\param wantOutType The desired output format. If this is \c 0, any type is
454*70dc2e27SMarkus Himmel		permitted.
455*70dc2e27SMarkus Himmel
456*70dc2e27SMarkus Himmel	\retval B_OK The translated data was successfully written to
457*70dc2e27SMarkus Himmel		\a destination.
458*70dc2e27SMarkus Himmel	\retval B_NO_TRANSLATOR The specified translator cannot handle the data in
459*70dc2e27SMarkus Himmel		\a source.
460*70dc2e27SMarkus Himmel	\retval B_ERROR An error occurred.
461*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a source or \a destination was \c NULL or
462*70dc2e27SMarkus Himmel		\a ioExtension was \c NULL or contained bad data.
463*70dc2e27SMarkus Himmel	\retval B_IO_ERROR An error occurred accessing \a source or \a destination.
464*70dc2e27SMarkus Himmel*/
465*70dc2e27SMarkus Himmel
466*70dc2e27SMarkus Himmel//! @}
467*70dc2e27SMarkus Himmel
468*70dc2e27SMarkus Himmel/*!
469*70dc2e27SMarkus Himmel	\name Miscellaneous
470*70dc2e27SMarkus Himmel*/
471*70dc2e27SMarkus Himmel
472*70dc2e27SMarkus Himmel//! @{
473*70dc2e27SMarkus Himmel
474*70dc2e27SMarkus Himmel/*!
475*70dc2e27SMarkus Himmel	\fn bool BTranslatorRoster::IsTranslator(entry_ref* ref);
476*70dc2e27SMarkus Himmel	\brief Determines whether the specified add-on contains at least one
477*70dc2e27SMarkus Himmel		translator.
478*70dc2e27SMarkus Himmel
479*70dc2e27SMarkus Himmel	\param ref The entry_ref to be tested.
480*70dc2e27SMarkus Himmel
481*70dc2e27SMarkus Himmel	\retval true The add-on exposes translators.
482*70dc2e27SMarkus Himmel	\retval false The add-on exposes no translators or an error occurred.
483*70dc2e27SMarkus Himmel*/
484*70dc2e27SMarkus Himmel
485*70dc2e27SMarkus Himmel//! @}
486*70dc2e27SMarkus Himmel
487*70dc2e27SMarkus Himmel/*!
488*70dc2e27SMarkus Himmel	\name Notifications
489*70dc2e27SMarkus Himmel*/
490*70dc2e27SMarkus Himmel
491*70dc2e27SMarkus Himmel//! @{
492*70dc2e27SMarkus Himmel
493*70dc2e27SMarkus Himmel/*!
494*70dc2e27SMarkus Himmel	\fn status_t BTranslatorRoster::StartWatching(BMessenger target);
495*70dc2e27SMarkus Himmel	\brief Register a messenger to be notified when the roster changes.
496*70dc2e27SMarkus Himmel
497*70dc2e27SMarkus Himmel	\param target The BMessenger to be registered.
498*70dc2e27SMarkus Himmel
499*70dc2e27SMarkus Himmel	Whenever a translator is added to or removed from the roster, all
500*70dc2e27SMarkus Himmel	messengers that were registered through this method are sent a message.
501*70dc2e27SMarkus Himmel	\c message->what will be \c B_TRANSLATOR_ADDED or \c B_TRANSLATOR_REMOVED
502*70dc2e27SMarkus Himmel	(as defined in AppDefs.h) respectively.
503*70dc2e27SMarkus Himmel
504*70dc2e27SMarkus Himmel	\retval B_OK \a target was successfully registered.
505*70dc2e27SMarkus Himmel	\retval B_NO_MEMORY Unable to allocate more memory for the list of targets.
506*70dc2e27SMarkus Himmel*/
507*70dc2e27SMarkus Himmel
508*70dc2e27SMarkus Himmel/*!
509*70dc2e27SMarkus Himmel	\fn status_t BTranslatorRoster::StopWatching(BMessenger target);
510*70dc2e27SMarkus Himmel	\brief Unregister a messenger from the notification list.
511*70dc2e27SMarkus Himmel
512*70dc2e27SMarkus Himmel	\param target The BMessenger to be removed.
513*70dc2e27SMarkus Himmel
514*70dc2e27SMarkus Himmel	\retval B_OK \a target was successfully unsubscribed.
515*70dc2e27SMarkus Himmel	\retval B_BAD_VALUE \a target could not be found on the notification list.
516*70dc2e27SMarkus Himmel
517*70dc2e27SMarkus Himmel	\sa StartWatching(BMessenger target)
518*70dc2e27SMarkus Himmel*/
519*70dc2e27SMarkus Himmel
520*70dc2e27SMarkus Himmel//! @}
521