Exemple #1
0
void TableSettings::GetConstraints(SerializableList& keys, const wxString& localcol)
{
    for( SerializableList::iterator it = m_lstKeys.begin();
         it != m_lstKeys.end(); ++it ) {

        Constraint *c = wxDynamicCast( *it, Constraint );
        if( c && ( c->GetLocalColumn() == localcol ) ) keys.Append( *it );
    }
}
Exemple #2
0
void xsSerializable::GetChildren(wxClassInfo *type, SerializableList& list)
{
    xsSerializable *pChild;

    SerializableList::compatibility_iterator node = m_lstChildItems.GetFirst();
    while(node)
    {
        pChild = node->GetData();

        if( !type || pChild->IsKindOf(type) ) list.Append(pChild);

        node = node->GetNext();
    }
}
Exemple #3
0
void xsSerializable::GetChildrenRecursively(wxClassInfo *type, SerializableList& list, SEARCHMODE mode)
{
    xsSerializable *pChild;

    SerializableList::compatibility_iterator node = m_lstChildItems.GetFirst();
    while(node)
    {
        pChild = node->GetData();
        if( !type || pChild->IsKindOf(type) ) list.Append(pChild);
		if( mode == searchDFS ) pChild->GetChildrenRecursively(type, list);

        node = node->GetNext();
    }
	
	if( mode == searchBFS )
	{
		node = m_lstChildItems.GetFirst();
		while(node)
		{
			node->GetData()->GetChildrenRecursively(type, list);
			node = node->GetNext();
		}
	}
}
Exemple #4
0
void wxSFDiagramManager::_DeserializeObjects(xsSerializable* parent, wxXmlNode* node)
{
	wxSFShapeBase *pShape;
	
	wxXS::IntArray arrNewIDs;
	SerializableList lstForUpdate;

	wxXmlNode* shapeNode = node->GetChildren();
	while(shapeNode)
	{
		if(shapeNode->GetName() == wxT("object"))
		{
#if wxVERSION_NUMBER < 2900
			pShape = AddShape((wxSFShapeBase*)wxCreateDynamicObject(shapeNode->GetPropVal(wxT("type"), wxT(""))), parent, wxPoint(0, 0), true, sfDONT_SAVE_STATE);
#else
			pShape = AddShape((wxSFShapeBase*)wxCreateDynamicObject(shapeNode->GetAttribute(wxT("type"), wxT(""))), parent, wxPoint(0, 0), true, sfDONT_SAVE_STATE);
#endif
			if(pShape)
			{
				// store new assigned ID
				lstForUpdate.Append( pShape );
				pShape->GetChildrenRecursively( NULL, lstForUpdate );
				
				for( SerializableList::iterator it = lstForUpdate.begin(); it != lstForUpdate.end(); ++it )
				{
					arrNewIDs.Add( (*it)->GetId() );
				}
				
				// deserialize stored content
				pShape->DeserializeObject(shapeNode);

				// update handle in line shapes
				if( pShape->IsKindOf( CLASSINFO(wxSFLineShape) ) )
				{
					pShape->CreateHandles();
					m_lstLinesForUpdate.Append(pShape);
				}
				else if( pShape->IsKindOf( CLASSINFO(wxSFGridShape) ) )
				{
					m_lstGridsForUpdate.Append(pShape);
				}

				// store information about IDs' changes and re-assign shapes' IDs
				int newId, i = 0;
				for( SerializableList::iterator it = lstForUpdate.begin(); it != lstForUpdate.end(); ++it )
				{
					newId = arrNewIDs[i++];
					if( newId != (*it)->GetId() )
					{
						m_lstIDPairs.Append( new IDPair((*it)->GetId(), newId) );
						(*it)->SetId( newId );
					}
				}

				// deserialize child objects
				_DeserializeObjects(pShape, shapeNode);
				
				arrNewIDs.Clear();
				lstForUpdate.Clear();
			}
			else
			{
				// there are some unsupported shapes so the diagrams must be cleared because of possible damage
				RemoveAll();
				m_lstLinesForUpdate.Clear();
				m_lstGridsForUpdate.Clear();
				
				wxMessageBox( wxT("Deserialization couldn't be completed because not of all shapes are accepted."), wxT("wxShapeFramework"), wxOK | wxICON_WARNING );
				return;
			}
		}
		else if(shapeNode->GetName() == m_sRootName + wxT("_properties"))
		{
		    m_pRoot->DeserializeObject(shapeNode->GetChildren());
		}
		shapeNode = shapeNode->GetNext();
	}
}