Button *LWF::SearchButtonInstance(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) { if (i == names.size() - 1) { return m->SearchButtonInstance(names[i], false); } else { m = m->SearchMovieInstance(names[i], false); if (!m) return 0; } } return 0; } int stringId = GetStringId(instanceName); if (stringId == -1) return rootMovie->SearchButtonInstance(instanceName, true); return SearchButtonInstance(stringId); }
int LWF::AddButtonEventHandler(string instanceName, const ButtonEventHandlerDictionary &h, ButtonKeyPressHandler kh) { if (h.empty()) return -1; int instId = SearchInstanceId(GetStringId(instanceName)); if (instId >= 0) return AddButtonEventHandler(instId, h, kh); if (instanceName.find('.') == string::npos) return -1; SetInteractive(); ButtonEventHandlersDictionary::iterator it = m_buttonEventHandlersByFullName.find(instanceName); if (it == m_buttonEventHandlersByFullName.end()) { m_buttonEventHandlersByFullName[instanceName] = ButtonEventHandlers(); it = m_buttonEventHandlersByFullName.find(instanceName); } int id = GetEventOffset(); it->second.Add(id, h, kh); Button *b = SearchButtonInstance(instId); if (b) b->AddHandlers(&it->second); return id; }
Button *Movie::SearchButtonInstance(string instanceName, bool recursive) const { int stringId = lwf->GetStringId(instanceName); if (stringId != -1) return SearchButtonInstance(lwf->GetStringId(instanceName), recursive); if (!m_attachedMovies.empty() && recursive) { AttachedMovieList::const_iterator it(m_attachedMovieList.begin()), itend(m_attachedMovieList.end()); for (; it != itend; ++it) { if (it->second) { Button *button = it->second->SearchButtonInstance(instanceName, recursive); if (button) return button; } } } 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(); Button *button = child->rootMovie->SearchButtonInstance( instanceName, recursive); if (button) return button; } } } return 0; }