bool AbstractContent::fromXml(QDomElement & contentElement, const QDir & /*baseDir*/) { // restore content properties QDomElement domElement; // Load image size saved in the rect node domElement = contentElement.firstChildElement("rect"); qreal x, y, w, h; x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); w = domElement.firstChildElement("w").text().toDouble(); h = domElement.firstChildElement("h").text().toDouble(); resizeContents(QRect(x, y, w, h)); // Load position coordinates domElement = contentElement.firstChildElement("pos"); x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); setPos(x, y); qreal zvalue = contentElement.firstChildElement("zvalue").text().toDouble(); setZValue(zvalue); bool visible = contentElement.firstChildElement("visible").text().toInt(); setVisible(visible); qreal opacity = contentElement.firstChildElement("opacity").text().toDouble(); if (opacity > 0.0 && opacity < 1.0) setContentOpacity(opacity); int fxIdx = contentElement.firstChildElement("fxindex").text().toInt(); if (fxIdx > 0) setFxIndex(fxIdx); bool hasText = contentElement.firstChildElement("frame-text-enabled").text().toInt(); setFrameTextEnabled(hasText); if (hasText) { QString text = contentElement.firstChildElement("frame-text").text(); setFrameText(text); } quint32 frameClass = contentElement.firstChildElement("frame-class").text().toInt(); setFrame(frameClass ? FrameFactory::createFrame(frameClass) : 0); // restore transformation QDomElement te = contentElement.firstChildElement("transformation"); if (!te.isNull()) { m_perspectiveAngles = QPointF(te.attribute("xRot").toDouble(), te.attribute("yRot").toDouble()); #if QT_VERSION < 0x040600 m_rotationAngle = te.attribute("zRot").toDouble(); #else setRotation(te.attribute("zRot").toDouble()); #endif applyTransforms(); } domElement = contentElement.firstChildElement("mirror"); setMirrored(domElement.attribute("state").toInt()); return true; }
void AbstractContent::dispose() { // stick this item setFlags((GraphicsItemFlags)0x00); // fade out mirror too setMirrored(false); // unselect if selected setSelected(false); // pre-remove controls qDeleteAll(m_cornerItems); m_cornerItems.clear(); qDeleteAll(m_controlItems); m_controlItems.clear(); m_controlsVisible = false; // little rotate animation #if !defined(MOBILE_UI) && QT_VERSION >= 0x040600 QPropertyAnimation * ani = new QPropertyAnimation(this, "rotation"); ani->setEasingCurve(QEasingCurve::InQuad); ani->setDuration(300); ani->setEndValue(-30.0); ani->start(QPropertyAnimation::DeleteWhenStopped); #endif // standard disposition AbstractDisposeable::dispose(); }
// moves the position and rotation data of one body part to another key frame position void Animation::moveKeyFrame(int jointNumber,int from,int to,bool copy) { qDebug("Animation::moveKeyFrame(): jointNumber: %d",jointNumber); // make sure we don't drag a trail of mirror keys behind setMirrored(false); // set frame pointer to source frame position setFrame(from); // get the joint structure BVHNode* joint=getNode(jointNumber); const FrameData& frameData=joint->frameData(from); // frameData.dump(); // block all further signals to avoid flickering blockSignals(true); // silently (true) delete key frame if not copy mode // we do copy mode here to avoid code duplication if(!copy) deleteKeyFrame(joint,from,true); setFrame(to); // move rotation or position of the body part if(joint->type==BVH_POS) { Position pos=frameData.position(); setPosition(pos.x,pos.y,pos.z); } else { Rotation rot=frameData.rotation(); setRotation(joint,rot.x,rot.y,rot.z); } // only now set ease in/out, because setRotation/setPosition sets to default when the // target position has no keyframe yet joint->setEaseIn(to,frameData.easeIn()); joint->setEaseOut(to,frameData.easeOut()); // now re-enable signals so we get updates on screen blockSignals(false); // tell timeline where we are now emit currentFrame(frame); }
AbstractContent::AbstractContent(QGraphicsScene *scene, bool fadeIn, bool noRescale, QGraphicsItem * parent) : AbstractDisposeable(fadeIn, parent) , m_contentRect(-100, -75, 200, 150) , m_frame(0) , m_frameTextItem(0) , m_controlsVisible(false) , m_dirtyTransforming(false) , m_transformRefreshTimer(0) , m_gfxChangeTimer(0) , m_mirrorItem(0) #if QT_VERSION < 0x040600 , m_rotationAngle(0) #endif , m_fxIndex(0) { // the buffered graphics changes timer m_gfxChangeTimer = new QTimer(this); m_gfxChangeTimer->setInterval(0); m_gfxChangeTimer->setSingleShot(true); // customize item's behavior setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemIsSelectable); #if QT_VERSION >= 0x040600 setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); #endif // allow some items (eg. the shape controls for text) to be shown setFlag(QGraphicsItem::ItemClipsChildrenToShape, false); setAcceptHoverEvents(true); // create child controls createCorner(Qt::TopLeftCorner, noRescale); createCorner(Qt::TopRightCorner, noRescale); createCorner(Qt::BottomLeftCorner, noRescale); createCorner(Qt::BottomRightCorner, noRescale); //ButtonItem * bFront = new ButtonItem(ButtonItem::Control, Qt::blue, QIcon(":/data/action-order-front.png"), this); //bFront->setToolTip(tr("Raise")); //connect(bFront, SIGNAL(clicked()), this, SLOT(slotStackRaise())); //addButtonItem(bFront); ButtonItem * bConf = new ButtonItem(ButtonItem::Control, Qt::green, QIcon(":/data/action-configure.png"), this); bConf->setToolTip(tr("Change properties...")); connect(bConf, SIGNAL(clicked()), this, SLOT(slotConfigure())); addButtonItem(bConf); ButtonItem * bPersp = new ButtonItem(ButtonItem::Control, Qt::red, QIcon(":/data/action-perspective.png"), this); bPersp->setToolTip(tr("Drag around to change the perspective.\nHold SHIFT to move faster.\nUse CTRL to cancel the transformations.")); connect(bPersp, SIGNAL(dragging(const QPointF&,Qt::KeyboardModifiers)), this, SLOT(slotSetPerspective(const QPointF&,Qt::KeyboardModifiers))); connect(bPersp, SIGNAL(doubleClicked()), this, SLOT(slotClearPerspective())); addButtonItem(bPersp); ButtonItem * bDelete = new ButtonItem(ButtonItem::Control, Qt::red, QIcon(":/data/action-delete.png"), this); bDelete->setSelectsParent(false); bDelete->setToolTip(tr("Remove")); connect(bDelete, SIGNAL(clicked()), this, SIGNAL(requestRemoval())); addButtonItem(bDelete); // create default frame Frame * frame = FrameFactory::defaultPictureFrame(); setFrame(frame); // hide and layoutChildren buttons layoutChildren(); // add to the scene scene->addItem(this); // display mirror #if QT_VERSION >= 0x040600 // WORKAROUND with Qt 4.6-tp1 there are crashes activating a mirror before setting the scene // need to rethink this anyway setMirrored(false); #else setMirrored(RenderOpts::LastMirrored); #endif }