bool AbstractContent::fromXml(QDomElement & pe) { // restore content properties QDomElement domElement; // Load image size saved in the rect node domElement = pe.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 = pe.firstChildElement("pos"); x = domElement.firstChildElement("x").text().toDouble(); y = domElement.firstChildElement("y").text().toDouble(); setPos(x, y); int zvalue = pe.firstChildElement("zvalue").text().toDouble(); setZValue(zvalue); bool visible = pe.firstChildElement("visible").text().toInt(); setVisible(visible); bool hasText = pe.firstChildElement("frame-text-enabled").text().toInt(); setFrameTextEnabled(hasText); if (hasText) { QString text = pe.firstChildElement("frame-text").text(); setFrameText(text); } quint32 frameClass = pe.firstChildElement("frame-class").text().toInt(); setFrame(frameClass ? FrameFactory::createFrame(frameClass) : 0); // restore transformation QDomElement te = pe.firstChildElement("transformation"); if (!te.isNull()) { m_xRotationAngle = te.attribute("xRot").toDouble(); m_yRotationAngle = te.attribute("yRot").toDouble(); m_zRotationAngle = te.attribute("zRot").toDouble(); applyRotations(); } domElement = pe.firstChildElement("mirror"); setMirrorEnabled(domElement.attribute("state").toInt()); return true; }
void AbstractContent::dispose() { // stick this item setFlags((GraphicsItemFlags)0x00); // fade out mirror too setMirrorEnabled(false); // little rotate animation #if 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(); }
AbstractContent::AbstractContent(QGraphicsScene * scene, QGraphicsItem * parent, bool noRescale) : AbstractDisposeable(parent, true) , m_contentsRect(-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) , m_xRotationAngle(0) , m_yRotationAngle(0) , m_zRotationAngle(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 // TODO: check this setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); setAcceptHoverEvents(true); setAcceptDrops(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(slotPerspective(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->setSelectesParent(false); bDelete->setToolTip(tr("Remove")); connect(bDelete, SIGNAL(clicked()), this, SIGNAL(deleteItem())); 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 setMirrorEnabled(RenderOpts::LastMirrorEnabled); }