//----------------------------------------------------------------------------- void UIViewFactory::collectRegisteredViewNames (std::list<const std::string*>& viewNames, IdStringPtr baseClassNameFilter) const { ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.begin (); while (iter != registry.end ()) { if (baseClassNameFilter) { bool found = false; ViewCreatorRegistry::const_iterator iter2 (iter); while (iter2 != registry.end () && (*iter2).second->getBaseViewName ()) { if ((*iter2).first == baseClassNameFilter) { found = true; break; } iter2 = registry.find ((*iter2).second->getBaseViewName ()); } if (!found) { iter++; continue; } } // if ((*iter).first != "CControl") viewNames.push_back (&(*iter).first); iter++; } }
//----------------------------------------------------------------------------- void UIViewFactory::collectRegisteredViewNames (StringPtrList& viewNames, IdStringPtr _baseClassNameFilter) const { UTF8StringView baseClassNameFilter (_baseClassNameFilter); ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.begin (); while (iter != registry.end ()) { if (baseClassNameFilter) { bool found = false; ViewCreatorRegistry::const_iterator iter2 (iter); while (iter2 != registry.end () && (*iter2).second->getBaseViewName ()) { if (baseClassNameFilter == (*iter2).second->getViewName () || baseClassNameFilter == (*iter2).second->getBaseViewName ()) { found = true; break; } iter2 = registry.find ((*iter2).second->getBaseViewName ()); } if (!found) { iter++; continue; } } viewNames.push_back (&(*iter).first); iter++; } viewNames.sort (viewNamesSortFunc); }
//----------------------------------------------------------------------------- CView* UIViewFactory::createViewByName (const std::string* className, const UIAttributes& attributes, IUIDescription* description) { ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (className->c_str ()); if (iter != registry.end ()) { CView* view = (*iter).second->create (attributes, description); if (view) { IdStringPtr viewName = (*iter).second->getViewName (); view->setAttribute ('cvcr', sizeof (IdStringPtr), &viewName); while (iter != registry.end () && (*iter).second->apply (view, attributes, description)) { if ((*iter).second->getBaseViewName () == 0) break; iter = registry.find ((*iter).second->getBaseViewName ()); } return view; } } else { #if DEBUG DebugPrint ("UIViewFactory::createView(..): Could not find view of class: %s\n", className->c_str ()); #endif } return 0; }
//----------------------------------------------------------------------------- bool UIViewFactory::getPossibleAttributeListValues (CView* view, const std::string& attributeName, StringPtrList& values) const { ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (getViewName (view)); while (iter != registry.end () && (*iter).second->getPossibleListValues (attributeName, values) == false && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return !values.empty (); }
//----------------------------------------------------------------------------- bool UIViewFactory::getAttributeValueRange (CView* view, const std::string& attributeName, double& minValue, double& maxValue) const { minValue = maxValue = -1.; ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (getViewName (view)); while (iter != registry.end () && (*iter).second->getAttributeValueRange (attributeName, minValue, maxValue) == false && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return minValue != maxValue && minValue != -1.; }
//----------------------------------------------------------------------------- IViewCreator::AttrType UIViewFactory::getAttributeType (CView* view, const std::string& attributeName) const { ViewCreatorRegistry& registry = getCreatorRegistry (); IViewCreator::AttrType type = IViewCreator::kUnknownType; ViewCreatorRegistry::const_iterator iter = registry.find (getViewName (view)); while (iter != registry.end () && (type = (*iter).second->getAttributeType (attributeName)) == IViewCreator::kUnknownType && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return type; }
//----------------------------------------------------------------------------- bool UIViewFactory::getAttributeNamesForView (CView* view, StringList& attributeNames) const { bool result = false; ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (getViewName (view)); while (iter != registry.end () && (result = (*iter).second->getAttributeNames (attributeNames)) && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return result; }
//----------------------------------------------------------------------------- void UIViewFactory::registerViewCreator (const IViewCreator& viewCreator) { ViewCreatorRegistry& registry = getCreatorRegistry (); #if DEBUG if (registry.find (viewCreator.getViewName ()) != registry.end ()) { DebugPrint ("ViewCreateFunction for '%s' already registered\n", viewCreator.getViewName ()); } #endif registry.insert (std::make_pair (viewCreator.getViewName (), &viewCreator)); }
//----------------------------------------------------------------------------- bool UIViewFactory::getAttributeValue (CView* view, const std::string& attributeName, std::string& stringValue, IUIDescription* desc) const { bool result = false; ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (getViewName (view)); while (iter != registry.end () && !(result = (*iter).second->getAttributeValue (view, attributeName, stringValue, desc)) && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return result; }
//----------------------------------------------------------------------------- bool UIViewFactory::applyAttributeValues (CView* view, const UIAttributes& attributes, IUIDescription* desc) const { bool result = false; ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (getViewName (view)); while (iter != registry.end () && (result = (*iter).second->apply (view, attributes, desc)) && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return result; }
//----------------------------------------------------------------------------- bool UIViewFactory::applyCustomViewAttributeValues (CView* customView, IdStringPtr baseViewName, const UIAttributes& attributes, IUIDescription* desc) const { bool result = false; ViewCreatorRegistry& registry = getCreatorRegistry (); ViewCreatorRegistry::const_iterator iter = registry.find (baseViewName); if (iter != registry.end ()) { IdStringPtr viewName = (*iter).second->getViewName (); customView->setAttribute ('cvcr', sizeof (IdStringPtr), &viewName); } while (iter != registry.end () && (result = (*iter).second->apply (customView, attributes, desc)) && (*iter).second->getBaseViewName ()) { iter = registry.find ((*iter).second->getBaseViewName ()); } return result; }
//----------------------------------------------------------------------------- void UIViewFactory::unregisterViewCreator (const IViewCreator& viewCreator) { ViewCreatorRegistry& registry = getCreatorRegistry (); registry.remove (&viewCreator); }
//----------------------------------------------------------------------------- void UIViewFactory::registerViewCreator (const IViewCreator& viewCreator) { ViewCreatorRegistry& registry = getCreatorRegistry (); registry.add (viewCreator.getViewName (), &viewCreator); }