bool TupProject::insertSymbolIntoFrame(TupProject::Mode spaceMode, const QString &name, int sceneIndex, int layerIndex, int frameIndex) { #ifdef K_DEBUG #ifdef Q_OS_WIN qDebug() << "[TupProject::insertSymbolIntoFrame()]"; #else T_FUNCINFO; #endif #endif TupFrame *frame = 0; TupScene *scene = this->sceneAt(sceneIndex); if (scene) { if (spaceMode == TupProject::FRAMES_EDITION) { TupLayer *layer = scene->layerAt(layerIndex); if (layer) frame = layer->frameAt(frameIndex); else return false; } else if (spaceMode == TupProject::STATIC_BACKGROUND_EDITION) { TupBackground *bg = scene->background(); if (bg) frame = bg->staticFrame(); else return false; } else if (spaceMode == TupProject::DYNAMIC_BACKGROUND_EDITION) { TupBackground *bg = scene->background(); if (bg) frame = bg->dynamicFrame(); else return false; } else { #ifdef K_DEBUG QString msg = "TupProject::insertSymbolIntoFrame() - Fatal Error: invalid spaceMode!"; #ifdef Q_OS_WIN qDebug() << msg; #else tError() << msg; #endif #endif return false; } if (frame) { TupLibraryObject *object = k->library->getObject(name); if (object) { switch (object->type()) { case TupLibraryObject::Item: { TupGraphicLibraryItem *libraryItem = new TupGraphicLibraryItem(object); int zLevel = frame->getTopZLevel(); libraryItem->setZValue(zLevel); frame->addLibraryItem(name, libraryItem); } break; case TupLibraryObject::Image: { TupGraphicLibraryItem *libraryItem = new TupGraphicLibraryItem(object); int imageW = libraryItem->boundingRect().width(); int imageH = libraryItem->boundingRect().height(); if (k->dimension.width() > imageW && k->dimension.height() > imageH) libraryItem->moveBy((k->dimension.width() - imageW)/2, (k->dimension.height() - imageH)/2); else libraryItem->moveBy(0, 0); int zLevel = frame->getTopZLevel(); libraryItem->setZValue(zLevel); frame->addItem(name, libraryItem); } break; case TupLibraryObject::Svg: { QString path(object->dataPath()); TupSvgItem *svgItem = new TupSvgItem(path, frame); svgItem->setSymbolName(name); int svgW = svgItem->boundingRect().width(); int svgH = svgItem->boundingRect().height(); if (k->dimension.width() > svgW && k->dimension.height() > svgH) { svgItem->moveBy((k->dimension.width() - svgW)/2, (k->dimension.height() - svgH)/2); } else { qreal factorW = ((qreal)k->dimension.width())/((qreal)svgW); qreal factorH = ((qreal)k->dimension.height())/((qreal)svgH); if (factorW < factorH) svgItem->setScale(factorW); else svgItem->setScale(factorH); svgItem->moveBy(0, 0); } int zLevel = frame->getTopZLevel(); svgItem->setZValue(zLevel); frame->addSvgItem(name, svgItem); } break; case TupLibraryObject::Text: { // SQA: Just out of curiosity, check if this case really happens! // tFatal() << "TupProject::insertSymbolIntoFrame() - Just tracing text!"; TupGraphicLibraryItem *libraryItem = new TupGraphicLibraryItem(object); int zLevel = frame->getTopZLevel(); libraryItem->setZValue(zLevel); frame->addItem(name, libraryItem); } break; case TupLibraryObject::Sound: { TupSoundLayer *sound = scene->createSoundLayer(scene->soundLayers().count()); sound->fromSymbol(object->symbolName()); } break; default: #ifdef K_DEBUG QString msg = "TupProject::insertSymbolIntoFrame() -> Unknown Object Type"; #ifdef Q_OS_WIN qDebug() << msg; #else tFatal() << msg; #endif #endif break; } return true; } else { #ifdef K_DEBUG QString msg = "TupProject::insertSymbolIntoFrame() - Object NOT found at library! " + name; #ifdef Q_OS_WIN qDebug() << msg; #else tError() << msg; #endif #endif return false; } } else { #ifdef K_DEBUG QString msg = "TupProject::insertSymbolIntoFrame() - Invalid frame!"; #ifdef Q_OS_WIN qDebug() << msg; #else tError() << msg; #endif #endif } } else { #ifdef K_DEBUG QString msg = "TupProject::insertSymbolIntoFrame() - Invalid scene!"; #ifdef Q_OS_WIN qDebug() << msg; #else tError() << msg; #endif #endif } return false; }