Be Book Application Kit Application Kit Indeks

BPropertyInfo

Pochodzi od: BFlattenable
Zadeklarowany w:  be/app/PropertyInfo.h
Biblioteka: libbe.so
Podsumowanie:  więcej...

 

BPropertyInfo jest prostą klasą która zarządza skryptami (scripting). Program zapisujący swój interfejs skryptowy do obiektu BPropertyInfo poprzez tablicę struktur property_info, z każdą pozycją opisującą kawałek zestawu skryptowego. Definicja struktury:

struct property_info {
char *name;
uint32 commands[10];
uint32 specifiers[10];
char *usage;
uint32 extra_data;
};

Egzemplarz BPropertyInfo jest tworzony przez przekazanie tablicy property_info zakończonej zerem do jego konstruktora. Typowa inicjalizacja BPropertyInfo wyglada tak jak ta:

static property_info prop_list[] = {
{ "duck", {B_GET_PROPERTY, B_SET_PROPERTY, 0},
{B_DIRECT_SPECIFIER, B_INDEX_SPECIFIER, 0}, "get or set duck"},
{ "head", {B_GET_PROPERTY, 0}, {B_DIRECT_SPECIFIER, 0}, "get head"},
{ "head", {B_SET_PROPERTY, 0}, {B_DIRECT_SPECIFIER, 0}, "set head"},
{ "feet", {0}, {0}, "can do anything with his orange feet"},
0 // terminate list
};

BPropertyInfo prop_info(prop_list);

Ponieważ BPropertyInfo przechowuje tylko wskaźnik do tablicy, to ważne jest, żeby okres istnienia tablicy był co najmniej tak długi jak obiektu BPropertyInfo.

Zauważ, że BPropertyInfo nie narzuca konkretnej struktury na tablicę, w szczegółności, nie wszystkie polecenia i specyfikatory dla danej właściwości potrzebują być umieszczonej w pojedynczej komórce tablicy. Masz pełną dowolność aby zorganizować swój zestw skryptowy w jakikolwiejk najdogodniejszy dla siebie sposób dla swojego konkretnego obiektu.

BPropertyInfo jest potomkiem BFlattenable i dlatego może być użyty do przechowywania opisu obiektu wspieranego zestawem skryptowym. Jest to szczególnie użyteczne gdy przedefiniowujesz GetSupportedSuites():

status_t MyHandler::GetSupportedSuites(BMessage *msg)
{
msg->AddString("suites", "suite/vnd.Me-my_handler");
BPropertyInfo prop_info(prop_list);
msg->AddFlat("messages", &prop_info);
return baseClass::GetSupportedSuites(msg);
}

Naturalnie, BPropertyInfo jest równie użyteczny w interpretrowaniu wyników otrzymanych z zapytania o obiekt dla jego wspieranych zestawów.

BPropertyInfo definiuje metodę FindMatch() przeznaczoną do uproszczenia implementacji ResolveSpecifier(). Zwraca ona indeks właściwości informacyjnej, porównujący z nią dany opis lub -1 jeśli nie pasują one do siebie. Redukuje to ResolveSpecifier() w najprostszych przypadkach do:

BHandler *MyHandler::ResolveSpecifier(BMessage *msg, int32 index,
BMessage *spec, int32 form, const char *prop)
{
BPropertyInfo prop_info(prop_list);
if (prop_info.FindMatch(msg, index, spec, form, prop) >= 0)
return this;
return baseClass::ResolveSpecifier(msg, index, spec, form, prop);
}

Oczywiście, dla bardziej skomplikowanych obiektów, ResolveSpecifier() może potrzebować ustawienia adresata handler do obiektu innego niż on sam, więc możeby być wymagane więcej instrukcji przetwarzania. W tych przypadkch, obiekt może użyć indeks zwrócony przez FindMatch() aby pomóc mu określić adresata komunikatu skryptowego.


Konstruktor i Destruktor


BPropertyInfo()

BPropertyInfo(property_info *p = NULL, bool free_on_delete = false)

Inicjalizuje obiekt z określoną tablicą property_info p zakończoną zerem. Przekazuje true w free_on_delete instruując obiekt aby zwolnił pamięć przypisaną do property_info gdy obiekt jest niszczony. BPropertyInfo nie kopiuje tablicy, więc jest ważne aby tablica nie była usunięta albo zniszczona gdy BPropertyInfo jest w użyciu.


~BPropertyInfo()

~BPropertyInfo()

Jeśli free_on_delete jest ustawiony na true w konstruktorze, destruktor zwalnia całą pamięć przypisaną do property_info. W przeciwnym wypadku nic nie robi.


Funkcje Członkowskie


AllowsTypeCode()

Szczegół implementacji. Patrz do BFlattenable::AllowsTypeCode().


FindMatch()

int32 FindMatch(BMessage *msg, int32 index, BMessage *spec, int32 form,
      const char *prop, void *data = NULL) const

Przekazuje nazwę właściwości w parametrze prop, specyfikator w form a polecenie w msg->what, przeszukuje tablicę property_info array dla elementu wspierającego określone żądanie skryptowe. Jeśli indeks index jest niezerowy, wtedy FindMatch() szuka tylko tych struktur property_info z poleceniem globalnym (wildcard) (pierwszy element tablicy poleceń jest równy 0). W przeciwnym wypadku, przeszukjuje ona do dopasowania wszystkie dostępne struktury. Jeśli dopsaowanie jest znalezione, wypełnia ona pamięć w parametrze data z zawartością pasującego pola extra_data i zwraca pasujący indeks w tablicy. W przeciwnym wypadku zwraca ona B_ERROR.


Flatten

Szczegół implementacji. Patrz do BFlattenable::Flatten().


FlattenedSize()

Szczegół implementacji. Patrz do BFlattenable::FlattenedSize().


IsFixedSize()

Szczegół implementacji. Patrz do BFlattenable::IsFixedSize().


TypeCode()

Szczegół implementacji. Patrz do BFlattenable::TypeCode().


PrintToStream()

void PrintToStream(void) const

Drukuje informację o BPropertyInfo na standardowym wyjściu.


PropertyInfo()

const property_info *PropertyInfo(void) const

Zwraca listę property_info przypisaną do obiektu.


Unflatten()

Szczegół implementacji. Patrz do BFlattenable::Unflatten()


Be Book Application Kit Application Kit Indeks

Be Book,
...w ślicznym HTML...
dla BeOS wydanie 5

Copyright © 2000 Be, Inc. Wszelkie prawa zastrzeżone.