X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdvdwizardmenu.h;h=4f6b732415d4ebfa2f007d1770eacb0a03da2381;hb=f41ee253ade9dfda45752f232ea0ff35e26dce95;hp=d1ac8371707eb38cf2b3d85709d0c19ddb584545;hpb=98b9fcdb9c5a4e84489b37d253a7491d6a4d17ef;p=kdenlive diff --git a/src/dvdwizardmenu.h b/src/dvdwizardmenu.h index d1ac8371..4f6b7324 100644 --- a/src/dvdwizardmenu.h +++ b/src/dvdwizardmenu.h @@ -29,6 +29,11 @@ #include #include +#include + +#if KDE_IS_VERSION(4,7,0) +#include +#endif #include "ui_dvdwizardmenu_ui.h" @@ -36,7 +41,9 @@ class DvdScene : public QGraphicsScene { public: - DvdScene(QObject * parent = 0): QGraphicsScene(parent) {} + DvdScene(QObject * parent = 0): QGraphicsScene(parent) { + m_width = 0; m_height = 0; + } void setProfile(int width, int height) { m_width = width; m_height = height; @@ -57,8 +64,12 @@ class DvdButton : public QGraphicsTextItem { public: - DvdButton(const QString & text): QGraphicsTextItem(text), m_target(0), m_command(QString("jump title 1")), m_backToMenu(false) {} - enum { Type = UserType + 1 }; + DvdButton(const QString & text): QGraphicsTextItem(text), m_target(0), m_command(QString("jump title 1")), m_backToMenu(false) { + setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable); +#if QT_VERSION >= 0x040600 + setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); +#endif + } void setTarget(int t, QString c) { m_target = t; m_command = c; @@ -74,7 +85,7 @@ public: } int type() const { // Enable the use of qgraphicsitem_cast with this item. - return Type; + return UserType + 1; } void setBackMenu(bool back) { m_backToMenu = back; @@ -89,23 +100,23 @@ protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) { if (change == ItemPositionChange && scene()) { - - /* QList list = collidingItems(); - if (!list.isEmpty()) { - for (int i = 0; i < list.count(); i++) { - if (list.at(i)->type() == Type) return pos(); - } - } - */ - DvdScene *sc = static_cast < DvdScene * >(scene()); - QRectF rect = QRectF(0, 0, sc->width(), sc->height()); QPointF newPos = value.toPointF(); - if (!rect.contains(newPos)) { - // Keep the item inside the scene rect. - newPos.setX(qMin(rect.right(), qMax(newPos.x(), rect.left()))); - newPos.setY(qMin(rect.bottom(), qMax(newPos.y(), rect.top()))); - return newPos; + QRectF sceneShape = sceneBoundingRect(); + DvdScene *sc = static_cast < DvdScene * >(scene()); + newPos.setX(qMax(newPos.x(), (qreal)0)); + newPos.setY(qMax(newPos.y(), (qreal)0)); + if (newPos.x() + sceneShape.width() > sc->width()) newPos.setX(sc->width() - sceneShape.width()); + if (newPos.y() + sceneShape.height() > sc->height()) newPos.setY(sc->height() - sceneShape.height()); + + sceneShape.translate(newPos - pos()); + QList list = scene()->items(sceneShape, Qt::IntersectsItemShape); + list.removeAll(this); + if (!list.isEmpty()) { + for (int i = 0; i < list.count(); i++) { + if (list.at(i)->type() == Type) return pos(); + } } + return newPos; } return QGraphicsItem::itemChange(change, value); } @@ -126,6 +137,7 @@ public: void createButtonImages(const QString &img1, const QString &img2, const QString &img3); void setTargets(QStringList list, QStringList targetlist); QMap buttonsInfo(); + bool loopMovie() const; bool menuMovie() const; QString menuMoviePath() const; bool isPalMenu() const; @@ -142,6 +154,9 @@ private: QGraphicsRectItem *m_safeRect; int m_width; int m_height; +#if KDE_IS_VERSION(4,7,0) + KMessageWidget *m_menuMessage; +#endif private slots: void buildButton(); @@ -157,6 +172,8 @@ private slots: void updateColor(); void updateColor(QColor c); void setBackToMenu(bool backToMenu); + void slotZoom(); + void slotUnZoom(); }; #endif