ae9154
ae9154
ae9154
#include <tmetaimage.h></tmetaimage.h>
ae9154
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaObject::TMetaObject(const TStringId &typeName):
ae9154
  m_handler(),
ae9154
  m_data(*this)
ae9154
    { setType(typeName); }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaObject::TMetaObject(const std::string &typeName):
ae9154
  m_handler(),
ae9154
  m_data(*this)
ae9154
    { setType(typeName); }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaObject::~TMetaObject()
ae9154
  { resetType(); }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
void
ae9154
TMetaObject::setType(const TStringId &name) {
ae9154
  if (m_type != name) {
ae9154
    if (m_handler) delete m_handler;
ae9154
    m_type = name;
ae9154
    Registry::const_iterator i = registry().find(m_type);
249386
    m_handler = i == registry().end() ? NULL : i->second(*this);
ae9154
    onVariantChanged(m_data);
ae9154
  }
ae9154
}
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
void
ae9154
TMetaObject::onVariantChanged(const TVariant &value)
9cf8be
  { if (m_handler) m_handler->dataChanged(value); }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaObject::Registry&
ae9154
TMetaObject::registry() {
ae9154
  static Registry registry;
ae9154
  return registry;
ae9154
}
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
void
ae9154
TMetaObject::registerType(const TStringId &typeName, Fabric fabric) {
ae9154
  if (registry().count(typeName))
ae9154
    std::cerr << "warning: type of TMetaObject are already registered: " << typeName.str() << std::endl;
ae9154
  registry()[typeName] = fabric;
ae9154
}
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
void
ae9154
TMetaObject::unregisterType(const TStringId &typeName) {
ae9154
  if (!registry().count(typeName))
ae9154
    std::cerr << "warning: trying to unregister non-registered type of TMetaObject: " << typeName.str() << std::endl;
ae9154
  registry().erase(typeName);
ae9154
}
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaImage::TMetaImage()
ae9154
  { }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaImage::TMetaImage(const TMetaImage &other):
ae9154
  m_objects(*Reader(other))
ae9154
  { }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TMetaImage::~TMetaImage()
ae9154
  { }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TImage*
ae9154
TMetaImage::cloneImage() const
ae9154
  { return new TMetaImage(*this); }
ae9154
ae9154
//---------------------------------------------------------
ae9154
ae9154
TRectD
ae9154
TMetaImage::getBBox() const
ae9154
  { return TRectD(); }
ae9154
ae9154
//---------------------------------------------------------