示例#1
0
void CChatChannel::WhoIs(LPCTSTR pszBy, LPCTSTR pszMember)
{
	ADDTOCALLSTACK("CChatChannel::WhoIs");
	CChatMember *pMemberBy = FindMember(pszBy);
	CChatMember *pMemberTarg = FindMember(pszMember);
	CChar *pCharTarg = (pMemberTarg && pMemberTarg->GetClient()) ? pMemberTarg->GetClient()->GetChar() : NULL;

	if ( !pCharTarg )
		pMemberBy->SendChatMsg(CHATMSG_NoPlayer, pszMember);
	else if ( pMemberTarg->m_bAllowWhoIs )
		pMemberBy->SendChatMsg(CHATMSG_PlayerKnownAs, pszMember, pCharTarg->GetName());
	else
		pMemberBy->SendChatMsg(CHATMSG_PlayerIsAnonymous, pszMember);
}
示例#2
0
void CChatChannel::Broadcast(CHATMSG_TYPE iType, LPCTSTR pszName, LPCTSTR pszText, CLanguageID lang, bool fOverride )
{
	ADDTOCALLSTACK("CChatChannel::Broadcast");
	CGString sName;
	CChatChanMember *pSendingMember = FindMember(pszName);

	if (iType >= CHATMSG_PlayerTalk && iType <= CHATMSG_PlayerPrivate) // Only chat, emote, and privates get a color status number
		g_Serv.m_Chats.DecorateName(sName, pSendingMember, fOverride);
	else
		sName = pszName;

	for (size_t i = 0; i < m_Members.GetCount(); i++)
	{
		// Check to see if the recipient is ignoring messages from the sender
		// Just pass over it if it's a regular talk message
		if (!m_Members[i]->IsIgnoring(pszName))
		{
			m_Members[i]->SendChatMsg(iType, sName, pszText, lang );
		}

		// If it's a private message, then tell the sender the recipient is ignoring them
		else if (iType == CHATMSG_PlayerPrivate)
		{
			pSendingMember->SendChatMsg(CHATMSG_PlayerIsIgnoring, m_Members[i]->GetChatName());
		}
	}
}
示例#3
0
void CChatChannel::RemoveModerator(CChatMember *pByMember, LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::RemoveModerator");

	LPCTSTR pszByName = pByMember->GetChatName();
	if ( !IsModerator(pszByName) )
	{
		pByMember->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}

	CChatMember *pMember = FindMember(pszName);
	if ( !pMember )
	{
		pByMember->SendChatMsg(CHATMSG_NoPlayer, pszName);
		return;
	}
	pszName = pMember->GetChatName();	// fix case-sensitive mismatch
	if ( !IsModerator(pszName) )
		return;

	SetModerator(pszName, true);
	SendMember(pMember);	// update name color
	Broadcast(CHATMSG_PlayerNoLongerModerator, pszName);
	pMember->SendChatMsg(CHATMSG_RemovedListModerators, pszByName);
}
示例#4
0
void CChatChannel::PrivateMessage(CChatMember *pFrom, LPCTSTR pszTo, LPCTSTR pszMsg, CLanguageID lang)
{
	ADDTOCALLSTACK("CChatChannel::PrivateMessage");
	CChatMember *pTo = FindMember(pszTo);
	if ( !pTo )
	{
		pFrom->SendChatMsg(CHATMSG_NoPlayer, pszTo);
		return;
	}
	if ( !pTo->m_bReceiving )
	{
		pFrom->SendChatMsg(CHATMSG_PlayerNotReceivingPrivateMessages, pszTo);
		return;
	}

	// Members without voice can't send private messages on channel, but they still allowed to send private messages to moderators
	if ( !HasVoice(pFrom->GetChatName()) && !IsModerator(pszTo) )
	{
		pFrom->SendChatMsg(CHATMSG_RevokedSpeaking);
		return;
	}

	if ( pTo->IsIgnoring(pFrom->GetChatName()) )
	{
		pFrom->SendChatMsg(CHATMSG_PlayerIsIgnoring, pszTo);
		return;
	}

	CGString sName;
	g_Serv.m_Chats.FormatName(sName, pFrom);
	pFrom->SendChatMsg(CHATMSG_PlayerPrivateMessage, sName, pszMsg, lang);
	if ( pTo != pFrom )
		pTo->SendChatMsg(CHATMSG_PlayerPrivateMessage, sName, pszMsg, lang);
}
示例#5
0
void CChatChannel::RemoveVoice(CChatMember *pByMember, LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::RemoveVoice");

	LPCTSTR pszByName = pByMember->GetChatName();
	if ( !IsModerator(pszByName) )
	{
		pByMember->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}

	CChatMember *pMember = FindMember(pszName);
	if ( !pMember )
	{
		pByMember->SendChatMsg(CHATMSG_NoPlayer, pszName);
		return;
	}
	pszName = pMember->GetChatName();	// fix case-sensitive mismatch
	if ( !HasVoice(pszName) )
		return;

	SetVoice(pszName, true);
	SendMember(pMember);	// update name color
	pMember->SendChatMsg(CHATMSG_ModeratorHasRemovedSpeakPriv, pszByName);
	Broadcast(CHATMSG_PlayerNoSpeaking, pszName);
}
示例#6
0
Group::Group()
	: Node()
{
	Member *name = FindMember(wxT("Name"));
	DeleteMember(name);
	DESTROY(name);
}
示例#7
0
void UIViewController::InitFromStory(XIBObject *obj)
{
    ObjectConverterSwapper::InitFromStory(obj);
    _view = (UIView *) obj->FindMember("view");

    if ( _connections ) {
        for ( int i = 0; i < _connections->count(); i ++ ) {
            XIBObject *curObj = _connections->objectAtIndex(i);
            if ( strcmp(curObj->_className, "segue") == 0 ) {
                const char *pDest = curObj->getAttrib("destination");
                const char *pKind = curObj->getAttrib("kind");

                XIBObject *newController = findReference(pDest);

                if ( newController && strcmp(pKind, "relationship") == 0 ) {
                    ((UIViewController *) newController)->_parentViewController = this;
                    _childViewControllers->AddMember(NULL, newController);
                    _viewControllers->AddMember(NULL, newController);
                }
            }
        }
    }

    _tabBarItem = (UITabBarItem *) FindMember("tabBarItem");
    _navigationItem = (UINavigationItem *) obj->FindMember("navigationItem");

    _outputClassName = "UIViewController";
}
示例#8
0
void CChatChannel::Emote(LPCTSTR pszBy, LPCTSTR pszMsg, CLanguageID lang )
{
	ADDTOCALLSTACK("CChatChannel::Emote");
	if (HasVoice(pszBy))
		Broadcast(CHATMSG_PlayerEmote, pszBy, pszMsg, lang );
	else
		FindMember(pszBy)->SendChatMsg(CHATMSG_RevokedSpeaking);
}
示例#9
0
void plNetTalkList::AddMember(plNetTransportMember* e) 
{ 
    if (FindMember(e)==-1)
    {
        plStatusLog::AddLineS("voice.log", "Adding %s to talk list", e->AsString().c_str());
        fMembers.push_back(e);
    }
    fFlags |= kDirty;   
}
示例#10
0
void plNetTalkList::RemoveMember(plNetTransportMember* e) 
{ 
    int idx=FindMember(e);
    if (idx!=-1)
    {
        plStatusLog::AddLineS("voice.log", "Removing %s from talklist", e->AsString().c_str());
        fMembers.erase(fMembers.begin()+idx);
    }
    fFlags |= kDirty; 
}
示例#11
0
void CChatChannel::WhoIs(LPCTSTR pszBy, LPCTSTR pszMember)
{
	ADDTOCALLSTACK("CChatChannel::WhoIs");
	CChatChanMember * pBy = FindMember(pszBy);
	CChatChanMember * pMember = FindMember(pszMember);
	CChar * pChar = pMember? pMember->GetClient()->GetChar() : NULL;
	if (!pMember||!pChar)
	{
		pBy->SendChatMsg(CHATMSG_NoPlayer, pszMember);
	}
	else if (pMember->GetWhoIs())
	{
		pBy->SendChatMsg(CHATMSG_PlayerKnownAs, pszMember, pChar->GetName());
	}
	else
	{
		pBy->SendChatMsg(CHATMSG_PlayerIsAnonymous, pszMember);
	}
}
示例#12
0
bool CChatChannel::RemoveMember(LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::RemoveMember(2)");

	CChatMember *pMember = FindMember(pszName);
	if ( !pMember )
		return false;
	RemoveMember(pMember);
	return true;
}
示例#13
0
void CChatChannel::ToggleDefaultVoice(LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::ToggleDefaultVoice");
	if ( !IsModerator(pszName) )
	{
		FindMember(pszName)->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}
	m_bDefaultVoice = !m_bDefaultVoice;
	Broadcast(m_bDefaultVoice ? CHATMSG_EveryoneSpeakingPrivByDefault : CHATMSG_ModeratorSpeakingPrivByDefault);
}
示例#14
0
AnimationMaster AnimationMaster::Unserialize(Renderer* renderer,
		rapidjson::Value* value) {

	PASSERT( value->IsObject(), "AnimationMaster cannot unserialize because passed is not an object (Note: This may indicate parsing failure)");
	PASSERT(value->FindMember("animations")->value.IsArray(), "AnimationMaster cannot unserialize because animations field is not an array");
	PASSERT(value->FindMember("default")->value.IsString(), "AnimationMaster default should be string");

	std::map<PBase::String, AnimationSetEntry> anims;

	rapidjson::Value* animations = &value->FindMember("animations")->value;

	for (auto it = animations->Begin(); it != animations->End(); it++) {
		PASSERT(it->IsObject(), "AnimationMaster animation entry should be an object");
		PASSERT(it->FindMember("name")->value.IsString(), "AnimationMaster animation entry name should be string");
		PASSERT(it->FindMember("animation_file")->value.IsString(), "AnimationMaster animation file path should be string");

		String after;

		if (it->HasMember("after")) {
			PASSERT(it->FindMember("after")->value.IsString(), "after should be a string animation identifier");
			after = it->FindMember("after")->value.GetString();
		}

		anims[it->FindMember("name")->value.GetString()] = AnimationSetEntry(
			renderer->LoadAnimationSet(it->FindMember("animation_file")->value.GetString()),
			after);
	}

	return AnimationMaster(value->FindMember("default")->value.GetString(), anims);
}
//
// add a member to the master list if not already there
//
int plNetTransport::AddMember(plNetTransportMember* mbr)
{
    if (FindMember(mbr)==-1)
    {
        fMembers.push_back(mbr);
        hsLogEntry( plNetClientMgr::GetInstance()->DebugMsg("Adding member %s", mbr->AsString().c_str()) );
        plNetClientMgr::GetInstance()->GetListenList()->AddMember(mbr);
        plNetClientMgr::GetInstance()->GetTalkList()->AddMember(mbr);
        DumpState();
        return fMembers.size()-1;
    }
    return -1;
}
示例#16
0
void CChatChannel::ToggleVoiceDefault(LPCTSTR  pszBy)
{
	ADDTOCALLSTACK("CChatChannel::ToggleVoiceDefault");
	if (!IsModerator(pszBy))
	{
		FindMember(pszBy)->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}
	if (GetVoiceDefault())
		Broadcast(CHATMSG_ModeratorsSpeakDefault, "", "");
	else
		Broadcast(CHATMSG_SpeakingByDefault, "", "");
	SetVoiceDefault(!GetVoiceDefault());
}
示例#17
0
void UILabel::InitFromXIB(XIBObject *obj)
{
    UIView::InitFromXIB(obj);

    _shadowOffset = obj->GetSize("IBUIShadowOffset", 0, -1.0f);
    _text = obj->GetString("IBUIText", NULL);
    _textColor = (UIColor *) obj->FindMember("IBUITextColor");
    if ( _textColor && _textColor->isNil() ) _textColor = NULL;
    _highlightedColor = (UIColor *) obj->FindMember("IBUIHighlightedColor");
    if ( _highlightedColor && _highlightedColor->isNil() ) _highlightedColor = NULL;

    _baselineAdjustment = obj->GetInt("IBUIBaselineAdjustment", 0);

    _textAlignment = obj->GetInt("IBUITextAlignment", 0);
    _numberOfLines = obj->GetInt("IBUINumberOfLines", 1);
    _font = (UIFont *) obj->FindMember("IBUIFontDescription");
    if ( !_font ) _font = (UIFont *) obj->FindMember("IBUIFont");

    if ( FindMember("IBUIMinimumFontSize") ) {
        _minimumFontSize = FindMember("IBUIMinimumFontSize")->floatValue();
        _adjustsFontSizeToFit = true;
    }
    obj->_outputClassName = "UILabel";
}
std::shared_ptr<TileData> TopoJsonSource::parse(const TileTask& _task,
                                                const MapProjection& _projection) const {

    auto& task = static_cast<const DownloadTileTask&>(_task);

    std::shared_ptr<TileData> tileData = std::make_shared<TileData>();

    // Parse data into a JSON document
    const char* error;
    size_t offset;
    auto document = JsonParseBytes(task.rawTileData->data(), task.rawTileData->size(), &error, &offset);

    if (error) {
        LOGE("Json parsing failed on tile [%s]: %s (%u)", task.tileId().toString().c_str(), error, offset);
        return tileData;
    }

    // Transform JSON data into a TileData using TopoJson functions
    BoundingBox tileBounds(_projection.TileBounds(task.tileId()));
    glm::dvec2 tileOrigin = {tileBounds.min.x, tileBounds.max.y*-1.0};
    double tileInverseScale = 1.0 / tileBounds.width();

    const auto projFn = [&](glm::dvec2 _lonLat){
        glm::dvec2 tmp = _projection.LonLatToMeters(_lonLat);
        return Point {
            (tmp.x - tileOrigin.x) * tileInverseScale,
            (tmp.y - tileOrigin.y) * tileInverseScale,
             0
        };
    };

    // Parse topology and transform
    auto topology = TopoJson::getTopology(document, projFn);

    // Parse each TopoJson object as a data layer
    auto objectsIt = document.FindMember("objects");
    if (objectsIt == document.MemberEnd()) { return tileData; }
    auto& objects = objectsIt->value;
    for (auto layer = objects.MemberBegin(); layer != objects.MemberEnd(); ++layer) {
        tileData->layers.push_back(TopoJson::getLayer(layer, topology, m_id));
    }

    // Discard JSON object and return TileData
    return tileData;

}
示例#19
0
Group::Group(List<Shape *> *nodes)
	: Node()
{
	for (List<Shape *>::Iterator i = nodes->Iterate(); !i; i++)
	{
		if (dynamic_cast<Node *>(*i) != NULL)
		{
			m_children.Add(*i);
		}
	}
	AddPorts();
	Member *name = FindMember(wxT("Name"));
	DeleteMember(name);
	DESTROY(name);
	AddProperty(NEW(TextProperty, (this, wxT("Name"))));
	SetPosition(GetTopLeft(nodes));
	EvalSize();
}
示例#20
0
BOOL CParty::DeleteMember( u_long uPlayerId )
{
	int Findid = FindMember( uPlayerId );
	if( Findid >= 0)
	{
		for( int i = Findid ; i < m_nSizeofMember-1 ; i++ )
		{
			memcpy( &m_aMember[i], &m_aMember[i+1], sizeof(PartyMember) );
		}
		m_nSizeofMember--;
#ifdef __WORLDSERVER
#if __VER >= 14 // __INSTANCE_DUNGEON
		CInstanceDungeonParty::GetInstance()->SetPartyLeaveTime( uPlayerId );
#endif // __INSTANCE_DUNGEON
#endif // __WORLDSERVER
		return TRUE;
	}
	return FALSE;
}
示例#21
0
void plNetListenList::RemoveMember(plNetTransportMember* e)
{
    int idx=FindMember(e);
    if (idx!=-1)
    {
        fMembers.erase(fMembers.begin()+idx);
        plStatusLog::AddLineS("voice.log", "Removing %s from listen list", e->AsString().c_str());
#if 0
        // call the new member's win audible and set talk icon parameters

        plSoundMsg* pMsg = new plSoundMsg;
        plArmatureMod* pMod = plArmatureMod::ConvertNoRef(e->GetAvatarKey()->GetObjectPtr());
        if (pMod)
            pMsg->AddReceiver(pMod->GetTarget(0)->GetKey());
        pMsg->SetCmd(plSoundMsg::kClearTalkIcon);
        plgDispatch::MsgSend(pMsg);
#endif  
    }
}
示例#22
0
void CChatChannel::RevokeModerator(CChatChanMember * pByMember, LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::RevokeModerator");
	if (!IsModerator(pByMember->GetChatName()))
	{
		pByMember->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}
	CChatChanMember * pMember = FindMember(pszName);
	if (!pMember)
	{
		pByMember->SendChatMsg(CHATMSG_NoPlayer, pszName);
		return;
	}
	if (!IsModerator(pMember->GetChatName()))
		return;
	SetModerator(pszName, false);
	SendThisMember(pMember); // Update the color
	Broadcast(CHATMSG_PlayerNoLongerModerator, pMember->GetChatName(), "", "");
	pMember->SendChatMsg(CHATMSG_RemovedListModerators, pByMember->GetChatName());
}
示例#23
0
void CChatChannel::GrantModerator(CChatChanMember * pByMember, LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::GrantModerator");
	if (!IsModerator(pByMember->GetChatName()))
	{
		pByMember->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}
	CChatChanMember * pMember = FindMember(pszName);
	if (!pMember)
	{
		pByMember->SendChatMsg(CHATMSG_NoPlayer, pszName);
		return;
	}
	if (IsModerator(pMember->GetChatName()))
		return;
	SetModerator(pszName, true);
	SendThisMember(pMember); // Update the color
	Broadcast(CHATMSG_PlayerIsAModerator, pMember->GetChatName(), "", "");
	pMember->SendChatMsg(CHATMSG_YouAreAModerator, pByMember->GetChatName());
}
示例#24
0
void CChatChannel::RevokeVoice(CChatChanMember * pByMember, LPCTSTR pszName)
{
	ADDTOCALLSTACK("CChatChannel::RevokeVoice");
	if (!IsModerator(pByMember->GetChatName()))
	{
		pByMember->SendChatMsg(CHATMSG_MustHaveOps);
		return;
	}
	CChatChanMember * pMember = FindMember(pszName);
	if (!pMember)
	{
		pByMember->SendChatMsg(CHATMSG_NoPlayer, pszName);
		return;
	}
	if (!HasVoice(pszName))
		return;
	SetVoice(pszName, false);
	SendThisMember(pMember); // Update the color
	pMember->SendChatMsg(CHATMSG_ModeratorRemovedSpeaking, pByMember->GetChatName());
	Broadcast(CHATMSG_PlayerNoSpeaking, pszName, "", "");
}
示例#25
0
void plNetListenList::AddMember(plNetTransportMember* e)
{
    if (FindMember(e)==-1)
    {
        plStatusLog::AddLineS("voice.log", "Adding %s to listen list ", e->AsString().c_str());
        fMembers.push_back(e);
    
#if 0   
        // call the new member's win audible and set talk icon parameters

        plSoundMsg* pMsg = new plSoundMsg;
        plArmatureMod* pMod = plArmatureMod::ConvertNoRef(e->GetAvatarKey()->GetObjectPtr());
        if (pMod)
            pMsg->AddReceiver(pMod->GetTarget(0)->GetKey());
        pMsg->SetCmd(plSoundMsg::kSetTalkIcon);
        pMsg->fIndex = GetNumMembers();
        pMsg->fNameStr = (uint32_t)e->GetName();
        plgDispatch::MsgSend(pMsg);
#endif  
    }
}
示例#26
0
void CChatChannel::Broadcast(CHATMSG_TYPE iType, LPCTSTR pszName, LPCTSTR pszText, CLanguageID lang, bool bOverride)
{
	ADDTOCALLSTACK("CChatChannel::Broadcast");

	CChatMember *pSendingMember = FindMember(pszName);
	CGString sName;
	if ( (iType >= CHATMSG_PlayerMessage) && (iType <= CHATMSG_PlayerPrivateMessage) )
		g_Serv.m_Chats.FormatName(sName, pSendingMember, bOverride);
	else
		sName = pszName;

	for ( size_t i = 0; i < m_Members.GetCount(); i++ )
	{
		if ( m_Members[i]->IsIgnoring(pszName) )	// don't receive messages from players being ignored
		{
			if ( pSendingMember && (iType == CHATMSG_PlayerPrivateMessage) )	// if it's a private message, tell the sender that he's being ignored
				pSendingMember->SendChatMsg(CHATMSG_PlayerIsIgnoring, m_Members[i]->GetChatName());
			continue;
		}
		m_Members[i]->SendChatMsg(iType, sName, pszText, lang);
	}
}
示例#27
0
//! 添加一个联系人
void LinkmanGroup::AddMember(tagLinkman &Linkman, BOOL bSend2Client)
{
	assert(!FindMember(Linkman.guid));
	assert(NULL_GUID != Linkman.guid);

	if (m_mapAddMe.find(Linkman.guid) != m_mapAddMe.end())
	{
		Linkman.bMutual = TRUE;
	}

	m_mapMeAdd[Linkman.guid] = Linkman;

	//! 通知玩家
	if(bSend2Client)
	{
		CMessage msgClient(MSG_S2C_LINKMAN_ADD);
		msgClient.Add((LONG)TRUE);
		msgClient.Add(m_pSetup->m_uID);
		msgClient.AddEx(&Linkman, sizeof(tagLinkman));
		msgClient.SendToPlayer(m_OwnerGuid);
	}

	
}
示例#28
0
void CChatChannel::SendPrivateMessage(CChatChanMember * pFrom, LPCTSTR pszTo, LPCTSTR pszMsg)
{
	ADDTOCALLSTACK("CChatChannel::SendPrivateMessage");
	CChatChanMember * pTo = FindMember(pszTo);
	if (!pTo)
	{
		pFrom->SendChatMsg(CHATMSG_NoPlayer, pszTo);
		return;
	}
	if (!pTo->IsReceivingAllowed())
	{
		pFrom->SendChatMsg(CHATMSG_PlayerNotReceivingPrivate, pszTo);
		return;
	}
	// Can always send private messages to moderators (but only if they are receiving)
	bool fHasVoice = HasVoice(pFrom->GetChatName());
	if ( !fHasVoice && !IsModerator(pszTo))
	{
		pFrom->SendChatMsg(CHATMSG_RevokedSpeaking);
		return;
	}

	if (pTo->IsIgnoring(pFrom->GetChatName())) // See if ignoring you
	{
		pFrom->SendChatMsg(CHATMSG_PlayerIsIgnoring, pszTo);
		return;
	}

	CGString sName;
	g_Serv.m_Chats.DecorateName(sName, pFrom);
	// Echo to the sending client so they know the message went out
	pFrom->SendChatMsg(CHATMSG_PlayerPrivate, sName, pszMsg);
	// If the sending and receiving are different send it out to the receiver
	if (pTo != pFrom)
		pTo->SendChatMsg(CHATMSG_PlayerPrivate, sName, pszMsg);
}
示例#29
0
void UIView::InitFromXIB(XIBObject *obj)
{
    ObjectConverterSwapper::InitFromXIB(obj);
    _subviews = (XIBArray *) obj->FindMember("NSSubviews");
    if ( !_subviews ) _subviews = new XIBArray();
    if ( FindMember("NSFrame") != NULL ) {
        const char *pszFramePos = GetString("NSFrame", NULL);
        _bounds.x = 0;
        _bounds.y = 0;
        _bounds.width = 0;
        _bounds.height = 0;
        _center.x = 0;
        _center.y = 0;
        sscanf(pszFramePos, "{{%f, %f}, {%f, %f}}", &_center.x, &_center.y, &_bounds.width, &_bounds.height);
        _center.x += _bounds.width / 2.0f;
        _center.y += _bounds.height / 2.0f;
    } else {
        const char *pszFramePos = GetString("NSFrameSize", NULL);
        _bounds.x = 0;
        _bounds.y = 0;
        _bounds.width = 0;
        _bounds.height = 0;
        sscanf(pszFramePos, "{%f, %f}", &_bounds.width, &_bounds.height);
        _center.x = _bounds.width / 2.0f;
        _center.y = _bounds.height / 2.0f;
    }

    if ( FindMember("NSSuperview") == NULL ) {
        _center.x = _bounds.width / 2.0f;
        _center.y = _bounds.height / 2.0f;
    }

    _autoresizeSubviews = true;
    _autoresizingMask = 0;
    _hidden = false;
    _opaque = GetBool("IBUIOpaque", true);
    _clipsToBounds = GetBool("IBUIClipsSubviews", false);
    _userInteractionDisabled = !GetBool("IBUIUserInteractionEnabled", true);
    _contentMode = GetInt("IBUIContentMode", 0);
    _clearsContextBeforeDrawing = GetBool("IBUIClearsContextBeforeDrawing", true);

    if ( FindMember("NSvFlags") != NULL ) {
        int flags = FindMember("NSvFlags")->intValue();

        if ( flags & 0x100 ) {
            _autoresizeSubviews = true;
        }
        _autoresizingMask = flags & 0x3F;
        if ( flags & 0x80000000 ) {
            _hidden = true;
        }
    }
    _autoresizeSubviews = GetBool("IBUIAutoresizesSubviews", true);

    _enabled = GetBool("IBUIEnabled", true);
    _multipleTouchEnabled = GetBool("IBUIMultipleTouchEnabled", false);
    _backgroundColor = (UIColor *) FindMember("IBUIBackgroundColor");

    // Constraints for XIB are handled in NSLayoutConstraint.cpp

    _outputClassName = "UIView";
}
示例#30
0
void UIView::InitFromStory(XIBObject *obj)
{
    ObjectConverterSwapper::InitFromStory(obj);

    _subviews = (XIBArray *) obj->FindMemberClass("subviews");
    if ( !_subviews ) _subviews = new XIBArray();

    _constraints = (XIBArray *)obj->FindMemberClass("constraints");
    if (!_constraints) _constraints = new XIBArray();

    if ( getAttrib("opaque") ) {
        const char *pVal = getAttrib("opaque");
        if ( strcmp(pVal, "NO") == 0 ) _opaque = false;
    }
    if ( getAttrib("multipleTouchEnabled") ) {
        if ( strcmp(getAttrib("multipleTouchEnabled"), "YES") == 0 ) _multipleTouchEnabled = true;
    }
    if ( getAttrib("clipsSubviews") ) {
        if ( strcmp(getAttrib("clipsSubviews"), "YES") == 0 ) _clipsToBounds = true;
    }
    if ( getAttrib("userInteractionEnabled") ) {
        if ( strcmp(getAttrib("userInteractionEnabled"), "NO") == 0 ) _userInteractionDisabled = true;
    }
    if ( getAttrib("clearsContextBeforeDrawing") ) {
        if ( strcmp(getAttrib("clearsContextBeforeDrawing"), "NO") == 0 ) _clearsContextBeforeDrawing = false;
    }
    if ( getAttrib("contentMode") ) {
        const char *mode = getAttrib("contentMode");
        if ( strcmp(mode, "left") == 0 ) {
            _contentMode = UIViewContentModeLeft;
        } else if ( strcmp(mode, "scaleToFill") == 0 ) {
            _contentMode = UIViewContentModeScaleToFill;
        } else if ( strcmp(mode, "center") == 0 ) {
            _contentMode = UIViewContentModeCenter;
        } else if ( strcmp(mode, "redraw") == 0 ) {
            _contentMode = UIViewContentModeRedraw;
        } else if ( strcmp(mode, "scaleAspectFill") == 0 ) {
            _contentMode = UIViewContentModeScaleAspectFill;
        } else if ( strcmp(mode, "scaleAspectFit") == 0 ) {
            _contentMode = UIViewContentModeScaleAspectFit;
        } else {
            assert(0);
        }
    }
    if ( getAttrib("hidden") ) {
        if ( strcmp(getAttrib("hidden"), "YES") == 0 ) _hidden = true;
    }
    XIBObject *frameRect = FindMember("frame");
    if ( frameRect ) {
        _bounds.x = 0;
        _bounds.y = 0;
        _bounds.width = strtod(frameRect->getAttrib("width"), NULL);
        _bounds.height = strtod(frameRect->getAttrib("height"), NULL);

        _center.x = strtod(frameRect->getAttrib("x"), NULL);
        _center.y = strtod(frameRect->getAttrib("y"), NULL);

        _center.x += _bounds.width / 2.0f;
        _center.y += _bounds.height / 2.0f;
    }

    XIBObject *resizeMask = FindMember("autoresizingMask");
    if ( resizeMask ) {
        if ( resizeMask->getAttrib("widthSizable") ) _autoresizingMask |= (int) UIViewAutoresizingFlexibleWidth;
        if ( resizeMask->getAttrib("heightSizable") ) _autoresizingMask |= (int) UIViewAutoresizingFlexibleHeight;
        if ( resizeMask->getAttrib("flexibleMinX") ) _autoresizingMask |= (int) UIViewAutoresizingFlexibleLeftMargin;
        if ( resizeMask->getAttrib("flexibleMaxX") ) _autoresizingMask |= (int) UIViewAutoresizingFlexibleRightMargin;
        if ( resizeMask->getAttrib("flexibleMinY") ) _autoresizingMask |= (int) UIViewAutoresizingFlexibleTopMargin;
        if ( resizeMask->getAttrib("flexibleMaxY") ) _autoresizingMask |= (int) UIViewAutoresizingFlexibleBottomMargin;
    }
    _backgroundColor = (UIColor *) FindMember("backgroundColor");

    if (getAttrib("translatesAutoresizingMaskIntoConstraints")) {
        if (strcmp(getAttrib("translatesAutoresizingMaskIntoConstraints"), "NO") == 0) _translatesAutoresizeToConstraints = false;
    }

    _outputClassName = "UIView";
}