bool UMLClipboard::pasteChildren(UMLListViewItem *parent, IDChangeLog *chgLog) { if (!parent) { kWarning() << "Paste Children Error, parent missing" << endl; return false; } UMLDoc *doc = UMLApp::app()->getDocument(); UMLListView *listView = UMLApp::app()->getListView(); UMLListViewItem *childItem = static_cast<UMLListViewItem*>(parent->firstChild()); while (childItem) { Uml::IDType oldID = childItem->getID(); Uml::IDType newID = chgLog->findNewID(oldID); UMLListViewItem *shouldNotExist = listView->findItem(newID); if (shouldNotExist) { kError() << "UMLClipboard::pasteChildren: new list view item " << ID2STR(newID) << " already exists (internal error)" << endl; childItem = static_cast<UMLListViewItem*>(childItem->nextSibling()); continue; } UMLObject *newObj = doc->findObjectById(newID); if (newObj) { kDebug() << "UMLClipboard::pasteChildren: adjusting lvitem(" << ID2STR(oldID) << ") to new UMLObject(" << ID2STR(newID) << ")" << endl; childItem->setUMLObject(newObj); childItem->setText(newObj->getName()); } else { kDebug() << "UMLClipboard::pasteChildren: no UMLObject found for lvitem " << ID2STR(newID) << endl; } childItem = static_cast<UMLListViewItem*>(childItem->nextSibling()); } return true; }
void UMLClipboard::checkItemForCopyType(UMLListViewItem* Item, bool & WithDiagrams, bool &WithObjects, bool &OnlyAttsOps) { if(!Item) { return; } UMLDoc *doc = UMLApp::app()->getDocument(); OnlyAttsOps = true; UMLView * view = 0; UMLListViewItem * child = 0; Uml::ListView_Type type = Item->getType(); if ( Model_Utils::typeIsCanvasWidget(type) ) { WithObjects = true; OnlyAttsOps = false; } else if ( Model_Utils::typeIsDiagram(type) ) { WithDiagrams = true; OnlyAttsOps = false; view = doc->findView( Item->getID() ); m_ViewList.append( view ); } else if ( Model_Utils::typeIsFolder(type) ) { OnlyAttsOps = false; if(Item->childCount()) { child = (UMLListViewItem*)Item->firstChild(); while(child) { checkItemForCopyType(child, WithDiagrams, WithObjects, OnlyAttsOps); child = (UMLListViewItem*)child->nextSibling(); } } } }
bool UMLClipboard::insertItemChildren( UMLListViewItem * item ) { if( item -> childCount() ) { UMLListViewItem * child =dynamic_cast<UMLListViewItem *>( item -> firstChild() ); while( child ) { m_ItemList.append( child ); insertItemChildren( child ); child = dynamic_cast<UMLListViewItem *>( child->nextSibling() ); } } return true; }
/** Adds the children of a UMLListViewItem to m_ItemList */ bool UMLClipboard::insertItemChildren(UMLListViewItem * Item, UMLListViewItemList& SelectedItems) { if(Item->childCount()) { UMLListViewItem * child = (UMLListViewItem*)Item->firstChild(); int type; while(child) { m_ItemList.append(child); type = child->getType(); if(type == Uml::lvt_Actor || type == Uml::lvt_UseCase || type == Uml::lvt_Class) { m_ObjectList.append(child->getUMLObject()); } // If the child is selected, remove it from the list of selected items // otherwise it will be inserted twice in m_ObjectList. if(child->isSelected()) { SelectedItems.remove(SelectedItems.find(child) ); } insertItemChildren(child, SelectedItems); child = (UMLListViewItem*)child->nextSibling(); } } return true; }