mirror of https://github.com/axmolengine/axmol.git
146 lines
3.3 KiB
C++
146 lines
3.3 KiB
C++
#include "UIObjectFactory.h"
|
|
#include "GButton.h"
|
|
#include "GComboBox.h"
|
|
#include "GComponent.h"
|
|
#include "GGraph.h"
|
|
#include "GGroup.h"
|
|
#include "GImage.h"
|
|
#include "GLabel.h"
|
|
#include "GList.h"
|
|
#include "GLoader.h"
|
|
#include "GMovieClip.h"
|
|
#include "GProgressBar.h"
|
|
#include "GRichTextField.h"
|
|
#include "GScrollBar.h"
|
|
#include "GSlider.h"
|
|
#include "GTextField.h"
|
|
#include "GTextInput.h"
|
|
#include "GTree.h"
|
|
#include "GLoader3D.h"
|
|
#include "UIPackage.h"
|
|
#include "utils/ToolSet.h"
|
|
|
|
NS_FGUI_BEGIN
|
|
|
|
using namespace std;
|
|
|
|
unordered_map<string, UIObjectFactory::GComponentCreator> UIObjectFactory::_packageItemExtensions;
|
|
UIObjectFactory::GLoaderCreator UIObjectFactory::_loaderCreator;
|
|
|
|
void UIObjectFactory::setPackageItemExtension(const string& url, GComponentCreator creator)
|
|
{
|
|
if (url.size() == 0)
|
|
{
|
|
AXLOG("Invaild url: %s", url.c_str());
|
|
return;
|
|
}
|
|
PackageItem* pi = UIPackage::getItemByURL(url);
|
|
if (pi)
|
|
pi->extensionCreator = creator;
|
|
|
|
_packageItemExtensions[url] = creator;
|
|
}
|
|
|
|
GObject* UIObjectFactory::newObject(PackageItem* pi)
|
|
{
|
|
GObject* obj;
|
|
if (pi->extensionCreator != nullptr)
|
|
obj = pi->extensionCreator();
|
|
else
|
|
obj = newObject(pi->objectType);
|
|
if (obj != nullptr)
|
|
obj->_packageItem = pi;
|
|
|
|
return obj;
|
|
}
|
|
|
|
GObject* UIObjectFactory::newObject(ObjectType type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case ObjectType::IMAGE:
|
|
return GImage::create();
|
|
|
|
case ObjectType::MOVIECLIP:
|
|
return GMovieClip::create();
|
|
|
|
case ObjectType::COMPONENT:
|
|
return GComponent::create();
|
|
|
|
case ObjectType::TEXT:
|
|
return GBasicTextField::create();
|
|
|
|
case ObjectType::RICHTEXT:
|
|
return GRichTextField::create();
|
|
|
|
case ObjectType::INPUTTEXT:
|
|
return GTextInput::create();
|
|
|
|
case ObjectType::GROUP:
|
|
return GGroup::create();
|
|
|
|
case ObjectType::LIST:
|
|
return GList::create();
|
|
|
|
case ObjectType::GRAPH:
|
|
return GGraph::create();
|
|
|
|
case ObjectType::LOADER:
|
|
if (_loaderCreator != nullptr)
|
|
return _loaderCreator();
|
|
else
|
|
return GLoader::create();
|
|
|
|
case ObjectType::BUTTON:
|
|
return GButton::create();
|
|
|
|
case ObjectType::LABEL:
|
|
return GLabel::create();
|
|
|
|
case ObjectType::PROGRESSBAR:
|
|
return GProgressBar::create();
|
|
|
|
case ObjectType::SLIDER:
|
|
return GSlider::create();
|
|
|
|
case ObjectType::SCROLLBAR:
|
|
return GScrollBar::create();
|
|
|
|
case ObjectType::COMBOBOX:
|
|
return GComboBox::create();
|
|
|
|
case ObjectType::TREE:
|
|
return GTree::create();
|
|
|
|
case ObjectType::LOADER3D:
|
|
return GLoader3D::create();
|
|
|
|
default:
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
void UIObjectFactory::setLoaderExtension(GLoaderCreator creator)
|
|
{
|
|
_loaderCreator = creator;
|
|
}
|
|
|
|
void UIObjectFactory::resolvePackageItemExtension(PackageItem* pi)
|
|
{
|
|
auto it = _packageItemExtensions.find(UIPackage::URL_PREFIX + pi->owner->getId() + pi->id);
|
|
if (it != _packageItemExtensions.end())
|
|
{
|
|
pi->extensionCreator = it->second;
|
|
return;
|
|
}
|
|
it = _packageItemExtensions.find(UIPackage::URL_PREFIX + pi->owner->getName() + "/" + pi->name);
|
|
if (it != _packageItemExtensions.end())
|
|
{
|
|
pi->extensionCreator = it->second;
|
|
return;
|
|
}
|
|
pi->extensionCreator = nullptr;
|
|
}
|
|
|
|
NS_FGUI_END
|