Fixed duplication of groups.

preferencesAboutTextFull
Aleksei Kanash 12 years ago
commit b9c26504ea
  1. 70
      src/board/UBBoardController.cpp
  2. 2
      src/board/UBBoardController.h

@ -537,7 +537,7 @@ void UBBoardController::duplicateScene()
duplicateScene(mActiveSceneIndex); duplicateScene(mActiveSceneIndex);
} }
UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item) UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item, bool bAsync)
{ {
if (!item) if (!item)
return NULL; return NULL;
@ -568,7 +568,10 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
if (srcFile.isEmpty()) if (srcFile.isEmpty())
srcFile = item->sourceUrl().toString(); srcFile = item->sourceUrl().toString();
QString contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile); QString contentTypeHeader;
if (!srcFile.isEmpty())
contentTypeHeader = UBFileSystemUtils::mimeTypeFromFileName(srcFile);
if(NULL != qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(commonItem)) if(NULL != qgraphicsitem_cast<UBGraphicsGroupContainerItem*>(commonItem))
itemMimeType = UBMimeType::Group; itemMimeType = UBMimeType::Group;
else else
@ -593,9 +596,13 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
if (mitem) if (mitem)
{ {
sourceUrl = mitem->mediaFileUrl(); sourceUrl = mitem->mediaFileUrl();
downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false); if (bAsync)
{
downloadURL(sourceUrl, srcFile, itemPos, QSize(itemSize.width(), itemSize.height()), false, false);
return NULL; // async operation
}
} }
}return NULL; // async operation }break;
case UBMimeType::VectorImage: case UBMimeType::VectorImage:
{ {
@ -621,35 +628,32 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
case UBMimeType::Group: case UBMimeType::Group:
{ {
UBGraphicsGroupContainerItem* groupItem = dynamic_cast<UBGraphicsGroupContainerItem*>(item); UBGraphicsGroupContainerItem* groupItem = dynamic_cast<UBGraphicsGroupContainerItem*>(item);
UBGraphicsGroupContainerItem* duplicatedGroup = NULL; UBGraphicsGroupContainerItem* duplicatedGroup = NULL;
if(groupItem){
QTransform groupTransform = groupItem->transform(); QList<QGraphicsItem*> duplicatedItems;
groupItem->resetTransform(); QList<QGraphicsItem*> children = groupItem->childItems();
foreach(QGraphicsItem* pIt, children){
QList<QGraphicsItem*> children = groupItem->childItems(); UBItem* pItem = dynamic_cast<UBItem*>(pIt);
foreach(QGraphicsItem* pIt, children){ if(pItem){ // we diong sync duplication of all childs.
UBItem* pItem = dynamic_cast<UBItem*>(pIt); QGraphicsItem * itemToGroup = dynamic_cast<QGraphicsItem *>(duplicateItem(pItem, false));
if(NULL != pItem){ if (itemToGroup)
duplicateItem(pItem); duplicatedItems.append(itemToGroup);
} }
} }
groupItem->setTransform(groupTransform); duplicatedGroup = mActiveScene->createGroup(duplicatedItems);
groupItem->setSelected(false); duplicatedGroup->setTransform(groupItem->transform());
UBApplication::mainWindow->actionGroupItems->trigger(); groupItem->setSelected(false);
QList<QGraphicsItem*> selItems = mActiveScene->selectedItems();
if(!selItems.empty()){ retItem = dynamic_cast<UBGraphicsItem *>(duplicatedGroup);
// I don't like this solution but for now this is the only way I found.
// Normally, at this state, only the duplicated group should be selected QGraphicsItem * itemToAdd = dynamic_cast<QGraphicsItem *>(retItem);
duplicatedGroup = dynamic_cast<UBGraphicsGroupContainerItem*>(selItems.at(0)); if (itemToAdd)
if(NULL != duplicatedGroup){ {
duplicatedGroup->setTransform(groupTransform); mActiveScene->addItem(itemToAdd);
} itemToAdd->setSelected(true);
} }
} }break;
retItem = dynamic_cast<UBGraphicsItem *>(duplicatedGroup);
break;
}
case UBMimeType::UNKNOWN: case UBMimeType::UNKNOWN:
{ {
@ -668,7 +672,7 @@ UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
if (retItem) if (retItem)
return retItem; return retItem;
UBItem *createdItem = downloadFinished(true, sourceUrl, sourceUrl, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); UBItem *createdItem = downloadFinished(true, sourceUrl, srcFile, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false);
if (createdItem) if (createdItem)
{ {
createdItem->setSourceUrl(item->sourceUrl()); createdItem->setSourceUrl(item->sourceUrl());

@ -159,7 +159,7 @@ class UBBoardController : public UBDocumentContainer
void moveSceneToIndex(int source, int target); void moveSceneToIndex(int source, int target);
void duplicateScene(int index); void duplicateScene(int index);
UBGraphicsItem *duplicateItem(UBItem *item); UBGraphicsItem *duplicateItem(UBItem *item, bool bAsync = true);
void deleteScene(int index); void deleteScene(int index);
bool cacheIsVisible() {return mCacheWidgetIsEnabled;} bool cacheIsVisible() {return mCacheWidgetIsEnabled;}

Loading…
Cancel
Save