Beispiel #1
0
int LWF::AddMovieEventHandler(
	string instanceName, const MovieEventHandlerDictionary &h)
{
	if (h.empty())
		return -1;

	int instId = SearchInstanceId(GetStringId(instanceName));
	if (instId >= 0)
		return AddMovieEventHandler(instId, h);

	if (instanceName.find('.') == string::npos)
		return -1;

	MovieEventHandlersDictionary::iterator it =
		m_movieEventHandlersByFullName.find(instanceName);
	if (it == m_movieEventHandlersByFullName.end()) {
		m_movieEventHandlersByFullName[instanceName] = MovieEventHandlers();
		it = m_movieEventHandlersByFullName.find(instanceName);
	}
	int id = GetEventOffset();
	it->second.Add(id, h);

	Movie *m = SearchMovieInstance(instId);
	if (m)
		m->AddHandlers(&it->second);

	return id;
}
Beispiel #2
0
void LWF::SetMoviePostLoadCommand(string instanceName, MovieEventHandler handler)
{
	Movie *movie = SearchMovieInstance(instanceName);
	if (movie) {
		handler(movie);
	} else {
		LoadHandlerWrapper h(instanceName, handler);
		MovieEventHandlerDictionary d;
		d["postLoad"] = h;
		h.handlerId = AddMovieEventHandler(instanceName, d);
	}
}
Beispiel #3
0
Movie *Movie::SearchMovieInstance(string instanceName, bool recursive) const
{
	int stringId = lwf->GetStringId(instanceName);
	if (stringId != -1)
		return SearchMovieInstance(lwf->GetStringId(instanceName), recursive);

	if (!m_attachedMovies.empty()) {
		AttachedMovieList::const_iterator it(m_attachedMovieList.begin()),
			itend(m_attachedMovieList.end());
		for (; it != itend; ++it) {
			if (it->second) {
				if (it->second->attachName == instanceName) {
					return it->second.get();
				} else if (recursive) {
					Movie *movie = it->second->SearchMovieInstance(
						instanceName, recursive);
					if (movie)
						return movie;
				}
			}
		}
	}

	if (!m_attachedLWFs.empty()) {
		AttachedLWFList::const_iterator
			it(m_attachedLWFList.begin()), itend(m_attachedLWFList.end());
		for (; it != itend; ++it) {
			if (it->second) {
				LWF *child = it->second->child.get();
				if (child->attachName == instanceName) {
					return child->rootMovie.get();
				} else if (recursive) {
					Movie *movie = child->rootMovie->SearchMovieInstance(
						instanceName, recursive);
					if (movie)
						return movie;
				}
			}
		}
	}

	return 0;
}
Beispiel #4
0
Movie *LWF::SearchMovieInstance(string instanceName) const
{
	size_t pos = instanceName.find(".");
	if (pos != string::npos) {
		vector<string> names = Utility::Split(instanceName, '.');
		if (names[0] != data->strings[m_rootMovieStringId])
			return 0;

		Movie *m = rootMovie.get();
		for (size_t i = 1; i < names.size(); ++i) {
			m = m->SearchMovieInstance(names[i], false);
			if (!m)
				return 0;
		}

		return m;
	}

	int stringId = GetStringId(instanceName);
	if (stringId == -1)
		return rootMovie->SearchMovieInstance(instanceName, true);

	return SearchMovieInstance(stringId);
}
Beispiel #5
0
Movie *LWF::operator[](string instanceName) const
{
	return SearchMovieInstance(instanceName);
}
Beispiel #6
0
Movie *Movie::operator[](string instanceName) const
{
	return SearchMovieInstance(instanceName, false);
}