本文整理汇总了C++中BTranslatorRoster类的典型用法代码示例。如果您正苦于以下问题:C++ BTranslatorRoster类的具体用法?C++ BTranslatorRoster怎么用?C++ BTranslatorRoster使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了BTranslatorRoster类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
BTranslatorRoster*
BTranslatorRoster::Default()
{
static int32 lock = 0;
if (sDefaultRoster != NULL)
return sDefaultRoster;
if (atomic_add(&lock, 1) != 0) {
// Just wait for the default translator to be instantiated
while (sDefaultRoster == NULL)
snooze(10000);
atomic_add(&lock, -1);
return sDefaultRoster;
}
// If the default translators have not been loaded,
// create a new BTranslatorRoster for them, and load them.
if (sDefaultRoster == NULL) {
BTranslatorRoster* roster = new BTranslatorRoster();
roster->AddTranslators(NULL);
sDefaultRoster = roster;
// this will unlock any other threads waiting for
// the default roster to become available
}
atomic_add(&lock, -1);
return sDefaultRoster;
}
示例2: file
// Function taken from Haiku ShowImage,
// function originally written by Michael Pfeiffer
bool
SlideShowSaver::IsImage(const entry_ref *pref)
{
if (!pref)
return false;
if (ent_is_dir(pref) != B_OK)
// if ref is erroneous or a directory, return false
return false;
BFile file(pref, B_READ_ONLY);
if (file.InitCheck() != B_OK)
return false;
BTranslatorRoster *proster = BTranslatorRoster::Default();
if (!proster)
return false;
BMessage ioExtension;
if (ioExtension.AddInt32("/documentIndex", 1) != B_OK)
return false;
translator_info info;
memset(&info, 0, sizeof(translator_info));
if (proster->Identify(&file, &ioExtension, &info, 0, NULL,
B_TRANSLATOR_BITMAP) != B_OK)
return false;
return true;
}
示例3: strcmp
// ---------------------------------------------------------------
// GetDefaultSettings
//
// Attempts to find the translator settings for
// the translator named kTranslatorName with a version of
// translatorVersion.
//
// Preconditions:
//
// Parameters: kTranslatorName, the name of the translator
// the settings are for
// translatorVersion, the version of the translator
// to retrieve
//
// Postconditions:
//
// Returns: NULL, if anything went wrong
// BMessage * of configuration data for kTranslatorName
// ---------------------------------------------------------------
BMessage *
BTranslationUtils::GetDefaultSettings(const char *kTranslatorName,
int32 translatorVersion)
{
BTranslatorRoster *roster = BTranslatorRoster::Default();
translator_id *translators = NULL;
int32 numTranslators = 0;
if (roster == NULL
|| roster->GetAllTranslators(&translators, &numTranslators) != B_OK)
return NULL;
// Cycle through all of the default translators
// looking for a translator that matches the name and version
// that I was given
BMessage *pMessage = NULL;
const char *currentTranName = NULL, *currentTranInfo = NULL;
int32 currentTranVersion = 0;
for (int i = 0; i < numTranslators; i++) {
if (roster->GetTranslatorInfo(translators[i], ¤tTranName,
¤tTranInfo, ¤tTranVersion) == B_OK) {
if (currentTranVersion == translatorVersion
&& strcmp(currentTranName, kTranslatorName) == 0) {
pMessage = GetDefaultSettings(translators[i], roster);
break;
}
}
}
delete[] translators;
return pMessage;
}
示例4: D_METHOD
void MediaRoutingView::_changeBackground(
entry_ref *ref)
{
D_METHOD(("MediaRoutingView::_changeBackground()\n"));
status_t error;
BBitmap *background = 0;
BFile file(ref, B_READ_ONLY);
error = file.InitCheck();
if (!error)
{
BTranslatorRoster *roster = BTranslatorRoster::Default();
BBitmapStream stream;
error = roster->Translate(&file, NULL, NULL, &stream, B_TRANSLATOR_BITMAP);
if (!error)
{
stream.DetachBitmap(&background);
setBackgroundBitmap(background);
Invalidate();
// [e.moon 1dec99] persistence, yay
m_backgroundBitmapEntry.SetTo(ref);
}
}
delete background;
}
示例5: rect
status_t
DataTranslationsWindow::_ShowConfigView(int32 id)
{
// Shows the config panel for the translator with the given id
if (id < 0)
return B_BAD_VALUE;
BTranslatorRoster* roster = BTranslatorRoster::Default();
if (fConfigView) {
fRightBox->RemoveChild(fConfigView);
delete fConfigView;
fConfigView = NULL;
}
BMessage emptyMsg;
BRect rect(0, 0, 200, 233);
status_t ret = roster->MakeConfigurationView(id, &emptyMsg,
&fConfigView, &rect);
if (ret != B_OK)
return ret;
fConfigView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
// force config views to all have the same color
fRightBox->AddChild(fConfigView);
return B_OK;
}
示例6:
const char*
Utility::_GetMimeString(uint32 imageType) const
{
const char *dummy = "";
translator_id* translators = NULL;
int32 numTranslators = 0;
BTranslatorRoster* roster = BTranslatorRoster::Default();
status_t status = roster->GetAllTranslators(&translators, &numTranslators);
if (status != B_OK)
return dummy;
for (int32 x = 0; x < numTranslators; x++) {
const translation_format* formats = NULL;
int32 numFormats;
if (roster->GetOutputFormats(x, &formats, &numFormats) == B_OK) {
for (int32 i = 0; i < numFormats; ++i) {
if (formats[i].type == imageType) {
delete [] translators;
return formats[i].MIME;
}
}
}
}
delete [] translators;
return dummy;
}
示例7: TranslatorItem
// Reads the installed translators and adds them to our BListView
status_t
DataTranslationsWindow::_PopulateListView()
{
BTranslatorRoster* roster = BTranslatorRoster::Default();
// Get all Translators on the system. Gives us the number of translators
// installed in num_translators and a reference to the first one
int32 numTranslators;
translator_id* translators = NULL;
roster->GetAllTranslators(&translators, &numTranslators);
float maxWidth = 0;
for (int32 i = 0; i < numTranslators; i++) {
// Getting the first three Infos: Name, Info & Version
int32 version;
const char* name;
const char* info;
roster->GetTranslatorInfo(translators[i], &name, &info, &version);
fTranslatorListView->AddItem(new TranslatorItem(translators[i], name));
maxWidth = std::max(maxWidth, fTranslatorListView->StringWidth(name));
}
fTranslatorListView->SortItems();
fTranslatorListView->SetExplicitSize(BSize(maxWidth + 20, B_SIZE_UNSET));
delete[] translators;
return B_OK;
}
示例8: stream
void
ImageView::SaveImageAtDropLocation(BMessage *pmsg)
{
// Find the location and name of the drop and
// write the image file there
BBitmapStream stream(fpbitmap);
StatusCheck chk;
// throw an exception if this is assigned
// anything other than B_OK
try {
entry_ref dirref;
chk = pmsg->FindRef("directory", &dirref);
const char *filename;
chk = pmsg->FindString("name", &filename);
BDirectory dir(&dirref);
BFile file(&dir, filename, B_WRITE_ONLY | B_CREATE_FILE);
chk = file.InitCheck();
BTranslatorRoster *proster = BTranslatorRoster::Default();
chk = proster->Translate(&stream, NULL, NULL, &file, B_TGA_FORMAT);
} catch (StatusNotOKException) {
BAlert *palert = new BAlert(NULL,
B_TRANSLATE("Sorry, unable to write the image file."),
B_TRANSLATE("OK"));
palert->Go();
}
stream.DetachBitmap(&fpbitmap);
}
示例9: ThemeLocation
status_t
ThemeManager::SetThemeScreenShot(int32 id, BBitmap *bitmap)
{
FENTRY;
status_t err;
BMessage msg;
BString name;
BString themepath;
BMessage *theme;
if (id < 0)
return EINVAL;
theme = (BMessage *)fThemeList.ItemAt(id);
if (!theme)
return EINVAL;
// TODO
err = theme->FindMessage(Z_THEME_INFO_MESSAGE, &msg);
if (err) {
msg.MakeEmpty();
theme->AddMessage(Z_THEME_INFO_MESSAGE, &msg);
}
err = ThemeLocation(id, themepath);
if (err)
return err;
err = msg.FindString(Z_THEME_SCREENSHOT_FILENAME, &name);
if (!err) {
BPath spath(themepath.String());
spath.Append(name.String());
BEntry ent(spath.Path());
if (ent.InitCheck() == B_OK)
ent.Remove();
}
name = "screenshot.png";
err = msg.ReplaceString(Z_THEME_SCREENSHOT_FILENAME, name);
if (err)
err = msg.AddString(Z_THEME_SCREENSHOT_FILENAME, name);
if (err)
return err;
// save the BBitmap to a png
BPath spath(themepath.String());
spath.Append(name.String());
BFile shotfile(spath.Path(), B_WRITE_ONLY|B_CREATE_FILE);
if (shotfile.InitCheck() != B_OK)
return shotfile.InitCheck();
BTranslatorRoster *troster = BTranslatorRoster::Default();
BBitmapStream bmstream(bitmap);
err = troster->Translate(&bmstream, NULL, NULL, &shotfile, 'PNG '/* XXX: hack, should find by mime type */);
if (err)
return err;
err = theme->ReplaceMessage(Z_THEME_INFO_MESSAGE, &msg);
msg.PrintToStream();
return err;
}
示例10: _CopyPicture
void
PictureView::_BeginDrag(BPoint sourcePoint)
{
BBitmap* bitmap = _CopyPicture(128);
if (bitmap == NULL)
return;
// fill the drag message
BMessage drag(B_SIMPLE_DATA);
drag.AddInt32("be:actions", B_COPY_TARGET);
drag.AddInt32("be:actions", B_TRASH_TARGET);
// name the clip after person name, if any
BString name = B_TRANSLATE("%name% picture");
name.ReplaceFirst("%name%", Window() ? Window()->Title() :
B_TRANSLATE("Unnamed person"));
drag.AddString("be:clip_name", name.String());
BTranslatorRoster* roster = BTranslatorRoster::Default();
if (roster == NULL) {
delete bitmap;
return;
}
int32 infoCount;
translator_info* info;
BBitmapStream stream(bitmap);
if (roster->GetTranslators(&stream, NULL, &info, &infoCount) == B_OK) {
for (int32 i = 0; i < infoCount; i++) {
const translation_format* formats;
int32 count;
roster->GetOutputFormats(info[i].translator, &formats, &count);
for (int32 j = 0; j < count; j++) {
if (strcmp(formats[j].MIME, "image/x-be-bitmap") != 0) {
// needed to send data in message
drag.AddString("be:types", formats[j].MIME);
// needed to pass data via file
drag.AddString("be:filetypes", formats[j].MIME);
drag.AddString("be:type_descriptions", formats[j].name);
}
}
}
}
stream.DetachBitmap(&bitmap);
// we also support "Passing Data via File" protocol
drag.AddString("be:types", B_FILE_MIME_TYPE);
sourcePoint -= fPictureRect.LeftTop();
SetMouseEventMask(B_POINTER_EVENTS);
DragMessage(&drag, bitmap, B_OP_ALPHA, sourcePoint);
bitmap = NULL;
}
示例11: dir
void
ShowImageWindow::_SaveToFile(BMessage* message)
{
// Read in where the file should be saved
entry_ref dirRef;
if (message->FindRef("directory", &dirRef) != B_OK)
return;
const char* filename;
if (message->FindString("name", &filename) != B_OK)
return;
// Read in the translator and type to be used
// to save the output image
translator_id outTranslator;
uint32 outType;
if (message->FindInt32(kTranslatorField,
reinterpret_cast<int32 *>(&outTranslator)) != B_OK
|| message->FindInt32(kTypeField,
reinterpret_cast<int32 *>(&outType)) != B_OK)
return;
// Find the translator_format information needed to
// write a MIME attribute for the image file
BTranslatorRoster* roster = BTranslatorRoster::Default();
const translation_format* outFormat = NULL;
int32 outCount = 0;
if (roster->GetOutputFormats(outTranslator, &outFormat, &outCount) != B_OK
|| outCount < 1)
return;
int32 i;
for (i = 0; i < outCount; i++) {
if (outFormat[i].group == B_TRANSLATOR_BITMAP && outFormat[i].type
== outType)
break;
}
if (i == outCount)
return;
// Write out the image file
BDirectory dir(&dirRef);
fImageView->SaveToFile(&dir, filename, NULL, &outFormat[i]);
// Store Save directory in settings;
ShowImageSettings* settings = my_app->Settings();
if (settings->Lock()) {
BPath path(&dirRef);
settings->SetString("SaveDirectory", path.Path());
settings->Unlock();
}
}
示例12: path
BBitmap * RBitmapLoader::TranslateBitmap(const char *name)
{
BPath path(&mAppDir, name);
BFile file(path.Path(), B_READ_ONLY);
BTranslatorRoster *roster;
BBitmapStream stream;
BBitmap *result = NULL;
roster = BTranslatorRoster::Default();
if (roster->Translate(&file, NULL, NULL, &stream, B_TRANSLATOR_BITMAP) < B_OK)
result = NULL;
else stream.DetachBitmap(&result);
return result;
}
示例13: file
void
ResView::AddResource(const entry_ref &ref)
{
BFile file(&ref, B_READ_ONLY);
if (file.InitCheck() != B_OK)
return;
BString mime;
file.ReadAttrString("BEOS:TYPE", &mime);
if (mime == "application/x-be-resource") {
BMessage msg(B_REFS_RECEIVED);
msg.AddRef("refs", &ref);
be_app->PostMessage(&msg);
return;
}
type_code fileType = 0;
BTranslatorRoster *roster = BTranslatorRoster::Default();
translator_info info;
if (roster->Identify(&file, NULL, &info, 0, mime.String()) == B_OK)
fileType = info.type;
else
fileType = B_RAW_TYPE;
int32 lastID = -1;
for (int32 i = 0; i < fDataList.CountItems(); i++) {
ResourceData *resData = (ResourceData*)fDataList.ItemAt(i);
if (resData->GetType() == fileType && resData->GetID() > lastID)
lastID = resData->GetID();
}
off_t fileSize;
file.GetSize(&fileSize);
if (fileSize < 1)
return;
char *fileData = (char *)malloc(fileSize);
file.Read(fileData, fileSize);
ResourceData *resData = new ResourceData(fileType, lastID + 1, ref.name,
fileData, fileSize);
fDataList.AddItem(resData);
ResDataRow *row = new ResDataRow(resData);
fListView->AddRow(row);
SetSaveStatus(FILE_DIRTY);
}
示例14: file
/*=============================================================================================*\
| FetchBitmap |
+-----------------------------------------------------------------------------------------------+
| Effet: Converie une image en un BBitmap. La couleur de transparence est celle du pixel dans |
| le coin superieur gauche. |
| Entree: |
| char *pzFileName: Le path du fichier image a convertir. |
| bool bTran: True si on utilise la transparence, false sinon. |
| Sortie: |
| BBitmap *: Le pointeur le bitmap de l'image. NULL si la conversion a echouer. |
\*=============================================================================================*/
BBitmap*
BitmapCatalog::FetchBitmap(char* pzFileName, bool bTrans)
{
BFile file(pzFileName, B_READ_ONLY);
BTranslatorRoster *roster = BTranslatorRoster::Default();
BBitmapStream stream;
BBitmap *result = NULL;
if (roster->Translate(&file, NULL, NULL, &stream, B_TRANSLATOR_BITMAP) < B_OK)
return NULL;
stream.DetachBitmap(&result);
// OliverESP: 7 x 1 so -> #include <TranslationUtils.h> //OliverESP:
// less code and works
//BBitmap *result = BTranslationUtils::GetBitmapFile(pzFileName);
if (result == NULL)
return NULL;
if(!bTrans)
return result;
int32 iLenght = result->BitsLength() / 4;
int32 i;
int32 * cBit = (int32*)result->Bits();
int32 backColor = cBit[result->Bounds().IntegerWidth() - 1];
int32 iTrans = 0;
//Determine le mode de definition de couleur
switch(result->ColorSpace())
{
case B_RGB32: iTrans = B_TRANSPARENT_MAGIC_RGBA32; break;
case B_RGB32_BIG: iTrans = B_TRANSPARENT_MAGIC_RGBA32_BIG; break;
default: break; //TODO: Major screwup here!
}
if (iTrans)
{
for(i = 0; i < iLenght; i++)
{
if(cBit[i] == backColor)
cBit[i] = iTrans;
}
}
return result;
}
示例15: rect
status_t
DataTranslationsWindow::_ShowConfigView(int32 id)
{
// Shows the config panel for the translator with the given id
if (id < 0)
return B_BAD_VALUE;
BTranslatorRoster *roster = BTranslatorRoster::Default();
// fConfigView is NULL the first time this function
// is called, prevent a segment fault
if (fConfigView)
fRightBox->RemoveChild(fConfigView);
BMessage emptyMsg;
BRect rect(0, 0, 200, 233);
status_t ret = roster->MakeConfigurationView(id, &emptyMsg, &fConfigView, &rect);
if (ret != B_OK) {
fRightBox->RemoveChild(fConfigView);
return ret;
}
BRect configRect(fRightBox->Bounds());
configRect.InsetBy(3, 3);
configRect.bottom -= 45;
float width = 0, height = 0;
if ((fConfigView->Flags() & B_SUPPORTS_LAYOUT) != 0) {
BSize configSize = fConfigView->ExplicitPreferredSize();
width = configSize.Width();
height = configSize.Height();
} else {
fConfigView->GetPreferredSize(&width, &height);
}
float widen = max_c(0, width - configRect.Width());
float heighten = max_c(0, height - configRect.Height());
if (widen > 0 || heighten > 0) {
ResizeBy(widen, heighten);
configRect.right += widen;
configRect.bottom += heighten;
}
fConfigView->MoveTo(configRect.left, configRect.top);
fConfigView->ResizeTo(configRect.Width(), configRect.Height());
fConfigView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
// force config views to all have the same color
fRightBox->AddChild(fConfigView);
return B_OK;
}