[openbeos] Translation Kit woes

  • From: "Brian Matzon" <brian@xxxxxxxxx>
  • To: openbeos@xxxxxxxxxxxxx
  • Date: Mon, 22 Apr 2002 17:29:03 PDT (-0700)

Noone from the Translation Kit team could figure this one out, so I 
thought that I would take my question to the "main" list.

I simply cannon instantiate a BTranslatorRoster.

Ordinarily BArchivable extended classes, may be archived using the
Archive(BMessage* message) method and instantiated using the
Instantiate(BMessage* message) method.

Thus the following should work fine (it does not!)
BTranslatorRoster* translator_roster = NULL;
BMessage translator_message;

translator_roster = new BTranslatorRoster();
translator_roster->AddTranslators("/boot/home/config/add-ons/
Translators/");
.
//verify that translators are actually loaded
.

//archive the sucker
translator_roster->Archive(&translator_message);

//delete old translator_roster and reinstantiate
delete translator_roster;
translator_roster = (BTranslatorRoster*) 
BTranslatorRoster::Instantiate(&translator_message);

translator_roster is now NULL - how come????

Ok, so I tested an alternative, reading the docs 
BTranslatorRoster::Instantiate says:
Returns a new BTranslatorRoster object, allocated by new and created 
with the version of the constructor that takes a BMessage archive. 
However, if the archive doesn't contain data for a BTranslatorRoster 
object, Instantiate() returns NULL

If this is the case - then the following should work:

translator_message.AddString("be:translator_path", "/boot/home/config/
add-ons/Translators/");
translator_roster = (BTranslatorRoster*) 
BTranslatorRoster::Instantiate(&translator_message);

but it doesn't *ponder!*

the actual instantiate test is available from CVS (openbeos/sources/os/
kits/translation/tests/)
 - the method in question is:
status_t TranslatorRosterTest::InstantiateTest()
however this only contains the latter of the tests. So for 
completeness, this is the first test:
-- 8< --
translator_roster = new BTranslatorRoster();
translator_roster->AddTranslators("/boot/home/config/add-ons/
Translators/");
        
        //write it to output
        if(translator_roster != NULL) {
                int32 num_translators;
                translator_id* translators;
                translator_roster->GetAllTranslators(&translators, &
num_translators);
                if(num_translators <= 0) {
                        Debug("Unable to load translators, or no translators 
installed\n");
                        return B_ERROR;
                } else {
                        printf("%ld translator(s) loaded\n", num_translators);
                }
                delete [] translators;  
        } else {
                printf("Unable to instantiate translator roster\n");
        }       
        translator_roster->Archive(&translator_message);
        
        delete translator_roster;
        
        //instantiate
        translator_roster = (BTranslatorRoster*) 
BTranslatorRoster::Instantiate(&translator_message);    
if(translator_roster != NULL) {
                int32 num_translators;
                translator_id* translators;
                translator_roster->GetAllTranslators(&translators, &
num_translators);
                if(num_translators <= 0) {
                        Debug("Unable to load translators, or no translators 
installed\n");
                        return B_ERROR;
                } else {
                        printf("%ld loaded\n", num_translators);
                }
                delete [] translators;  
        } else {
                printf("Unable to instantiate translator roster\n");
        }
-- 8< --


Other related posts: