@ -1567,57 +1567,64 @@ void UBBoardController::moveSceneToIndex(int source, int target)
void UBBoardController : : ClearUndoStack ( )
void UBBoardController : : ClearUndoStack ( )
{
{
QSet < QGraphicsItem * > uniqueItems ;
// The code has been removed because it leads to a strange error and because the final goal has never been
// go through all stack command
// reached on tests and sound a little bit strange.
for ( int i = 0 ; i < UBApplication : : undoStack - > count ( ) ; i + + )
// Strange error: item->scene() crashes the application because item doesn't implement scene() method. I'm
{
// not able to give all the steps to reproduce this error sistematically but is quite frequent (~ twice per utilisation hours)
// strange goal: if item is on the undocommand, the item->scene() is null and the item is not on the deleted scene item list then
UBAbstractUndoCommand * abstractCmd = ( UBAbstractUndoCommand * ) UBApplication : : undoStack - > command ( i ) ;
// then it's deleted.
if ( abstractCmd - > getType ( ) ! = UBAbstractUndoCommand : : undotype_GRAPHICITEM )
continue ;
// QSet<QGraphicsItem*> uniqueItems;
// // go through all stack command
UBGraphicsItemUndoCommand * cmd = ( UBGraphicsItemUndoCommand * ) UBApplication : : undoStack - > command ( i ) ;
// for(int i = 0; i < UBApplication::undoStack->count(); i++)
// {
// go through all added and removed objects, for create list of unique objects
// grouped items will be deleted by groups, so we don't need do delete that items.
// UBAbstractUndoCommand *abstractCmd = (UBAbstractUndoCommand*)UBApplication::undoStack->command(i);
QSetIterator < QGraphicsItem * > itAdded ( cmd - > GetAddedList ( ) ) ;
// if(abstractCmd->getType() != UBAbstractUndoCommand::undotype_GRAPHICITEM)
while ( itAdded . hasNext ( ) )
// continue;
{
QGraphicsItem * item = itAdded . next ( ) ;
// UBGraphicsItemUndoCommand *cmd = (UBGraphicsItemUndoCommand*)UBApplication::undoStack->command(i);
if ( ! uniqueItems . contains ( item ) & & ! ( item - > parentItem ( ) & & UBGraphicsGroupContainerItem : : Type = = item - > parentItem ( ) - > type ( ) ) )
uniqueItems . insert ( item ) ;
// // go through all added and removed objects, for create list of unique objects
}
// // grouped items will be deleted by groups, so we don't need do delete that items.
// QSetIterator<QGraphicsItem*> itAdded(cmd->GetAddedList());
QSetIterator < QGraphicsItem * > itRemoved ( cmd - > GetRemovedList ( ) ) ;
// while (itAdded.hasNext())
while ( itRemoved . hasNext ( ) )
// {
{
// QGraphicsItem* item = itAdded.next();
QGraphicsItem * item = itRemoved . next ( ) ;
// if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
if ( ! uniqueItems . contains ( item ) & & ! ( item - > parentItem ( ) & & UBGraphicsGroupContainerItem : : Type = = item - > parentItem ( ) - > type ( ) ) )
// uniqueItems.insert(item);
uniqueItems . insert ( item ) ;
// }
}
}
// QSetIterator<QGraphicsItem*> itRemoved(cmd->GetRemovedList());
// while (itRemoved.hasNext())
// {
// QGraphicsItem* item = itRemoved.next();
// if( !uniqueItems.contains(item) && !(item->parentItem() && UBGraphicsGroupContainerItem::Type == item->parentItem()->type()))
// uniqueItems.insert(item);
// }
// }
// // go through all unique items, and check, ot on scene, or not.
// // if not on scene, than item can be deleted
// QSetIterator<QGraphicsItem*> itUniq(uniqueItems);
// while (itUniq.hasNext())
// {
// QGraphicsItem* item = itUniq.next();
// UBGraphicsScene *scene = NULL;
// if (item->scene()) {
// scene = dynamic_cast<UBGraphicsScene*>(item->scene());
// }
// if(!scene)
// {
// if (!mActiveScene->deleteItem(item))
// delete item;
// }
// }
// clear stack, and command list
// clear stack, and command list
UBApplication : : undoStack - > clear ( ) ;
UBApplication : : undoStack - > clear ( ) ;
// go through all unique items, and check, ot on scene, or not.
// if not on scene, than item can be deleted
QSetIterator < QGraphicsItem * > itUniq ( uniqueItems ) ;
while ( itUniq . hasNext ( ) )
{
QGraphicsItem * item = itUniq . next ( ) ;
UBGraphicsScene * scene = NULL ;
if ( item - > scene ( ) ) {
scene = dynamic_cast < UBGraphicsScene * > ( item - > scene ( ) ) ;
}
if ( ! scene )
{
if ( ! mActiveScene - > deleteItem ( item ) )
delete item ;
}
}
}
}
void UBBoardController : : adjustDisplayViews ( )
void UBBoardController : : adjustDisplayViews ( )