Beispiel #1
0
plSetListenerMsg::plSetListenerMsg( uint8_t type, const plKey &srcKey, bool binding ) : plMessage( nil, nil, nil ) 
{
    plUoid uoid( kListenerMod_KEY );
    plKey pLKey = hsgResMgr::ResMgr()->FindKey( uoid );
    AddReceiver( pLKey );
    Set( srcKey, type, binding );
}
Beispiel #2
0
void plRegistryPageNode::AddKey(plKeyImp* key)
{
    uint16_t classType = key->GetUoid().GetClassType();
    plRegistryKeyList* keys = fKeyLists[classType];
    if (keys == nil)
    {
        keys = new plRegistryKeyList(classType);
        fKeyLists[classType] = keys;
    }

    // Error check
    if (keys->FindKey(key->GetUoid().GetObjectName()) != nil)
    {
        //char str[512], tempStr[128];
        //sprintf(str, "Attempting to add a key with a duplicate name. Not allowed."
        //          "\n\n(Key name: %s, Class: %s, Loc: %s)", key->GetUoid().GetObjectName(), 
        //          plFactory::GetNameOfClass(classType), key->GetUoid().GetLocation().StringIze(tempStr));
        //hsStatusMessage(str);
        bool recovered = false;

        // Attempt recovery
        for (int i = 0; i < 500; i++)
        {
            plString tempName = plString::Format("%s%d", key->GetUoid().GetObjectName().c_str(), i);
            if (keys->FindKey(tempName) == nil)
            {
                plUoid uoid(key->GetUoid().GetLocation(), key->GetUoid().GetClassType(), tempName, key->GetUoid().GetLoadMask());
                key->SetUoid(uoid);
                recovered = true;
                break;
            }
        }

        if (!recovered)
        {
            hsAssert(0, "Couldn't allocate a unique key");
            return;
        }
    }

    plRegistryKeyList::LoadStatus loadStatusChange;
    keys->AddKey(key, loadStatusChange);

    if (loadStatusChange == plRegistryKeyList::kDynLoaded)
        fDynLoadedTypes++;
}
void hsKeyedObject::UnRegisterAs(plFixedKeyId fixedKey)
{
    plUoid uoid(fixedKey);
    UnRegisterAsManual(uoid);
}