#include <QGraphicsTextItem>
#include <QGraphicsPixmapItem>
#include <QGraphicsRectItem>
+#include <QDomElement>
#include <KDebug>
+#include <kdeversion.h>
+
+#if KDE_IS_VERSION(4,7,0)
+#include <KMessageWidget>
+#endif
#include "ui_dvdwizardmenu_ui.h"
{
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;
{
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;
}
int type() const {
// Enable the use of qgraphicsitem_cast with this item.
- return Type;
+ return UserType + 1;
}
void setBackMenu(bool back) {
m_backToMenu = back;
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value) {
if (change == ItemPositionChange && scene()) {
-
- /* QList<QGraphicsItem *> 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<QGraphicsItem*> 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);
}
virtual ~DvdWizardMenu();
virtual bool isComplete() const;
bool createMenu() const;
- void createBackgroundImage(const QString &img1);
+ void createBackgroundImage(const QString &overlayMenu, const QString &img1);
void createButtonImages(const QString &img1, const QString &img2, const QString &img3);
void setTargets(QStringList list, QStringList targetlist);
QMap <QString, QRect> buttonsInfo();
+ bool loopMovie() const;
bool menuMovie() const;
QString menuMoviePath() const;
bool isPalMenu() const;
void changeProfile(bool isPal);
+ QDomElement toXml() const;
+ void loadXml(QDomElement xml);
private:
Ui::DvdWizardMenu_UI m_view;
QGraphicsRectItem *m_safeRect;
int m_width;
int m_height;
+#if KDE_IS_VERSION(4,7,0)
+ KMessageWidget *m_menuMessage;
+#endif
private slots:
void buildButton();
void updateColor();
void updateColor(QColor c);
void setBackToMenu(bool backToMenu);
+ void slotZoom();
+ void slotUnZoom();
};
#endif