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