From 8f1f0d9cbb942493e2555ab9218708bae6a7693b Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Thu, 6 Sep 2012 13:07:49 +0300 Subject: [PATCH 1/2] SANKORE-1026 Navigation palette: thumbnails isn't refeshed after application added to the page --- src/api/UBWidgetMessageAPI.cpp | 2 - src/domain/UBGraphicsItemDelegate.cpp | 2 +- src/domain/UBGraphicsMediaItem.cpp | 1 + src/domain/UBGraphicsMediaItem.h | 1 - src/domain/UBGraphicsPDFItem.cpp | 2 + src/domain/UBGraphicsPDFItem.h | 1 - src/domain/UBGraphicsScene.cpp | 4 +- src/domain/UBGraphicsWebView.cpp | 152 -------------------------- src/domain/UBGraphicsWebView.h | 61 ----------- src/domain/UBGraphicsWidgetItem.cpp | 143 +++++++++++++++--------- src/domain/UBGraphicsWidgetItem.h | 20 ++-- src/domain/domain.pri | 2 - 12 files changed, 108 insertions(+), 283 deletions(-) delete mode 100644 src/domain/UBGraphicsWebView.cpp delete mode 100644 src/domain/UBGraphicsWebView.h diff --git a/src/api/UBWidgetMessageAPI.cpp b/src/api/UBWidgetMessageAPI.cpp index 306f2702..f145fba3 100644 --- a/src/api/UBWidgetMessageAPI.cpp +++ b/src/api/UBWidgetMessageAPI.cpp @@ -17,8 +17,6 @@ #include "core/UBApplication.h" -#include "domain/UBGraphicsWebView.h" - #include "core/memcheck.h" UBWidgetMessageAPI::UBWidgetMessageAPI(UBGraphicsWidgetItem *graphicsWidgetItem, QObject *parent) diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index d5620d12..45b626ef 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -406,7 +406,7 @@ void UBGraphicsItemDelegate::remove(bool canUndo) scene->removeItem(mFrame); /* this is performed because when removing delegated from scene while it contains flash content, segfault happens because of QGraphicsScene::removeItem() */ - UBGraphicsWebView *mDelegated_casted = dynamic_cast(mDelegated); + UBGraphicsWidgetItem *mDelegated_casted = dynamic_cast(mDelegated); if (mDelegated_casted) mDelegated_casted->setHtml(QString()); diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index 76bbbd53..d1e97583 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -351,3 +351,4 @@ void UBGraphicsMediaItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) event->accept(); } + diff --git a/src/domain/UBGraphicsMediaItem.h b/src/domain/UBGraphicsMediaItem.h index 308fbea9..b52c0ab6 100644 --- a/src/domain/UBGraphicsMediaItem.h +++ b/src/domain/UBGraphicsMediaItem.h @@ -112,7 +112,6 @@ protected: virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - virtual void clearSource(); Phonon::MediaObject *mMediaObject; diff --git a/src/domain/UBGraphicsPDFItem.cpp b/src/domain/UBGraphicsPDFItem.cpp index f918b3d2..425ab749 100644 --- a/src/domain/UBGraphicsPDFItem.cpp +++ b/src/domain/UBGraphicsPDFItem.cpp @@ -155,3 +155,5 @@ UBGraphicsPixmapItem* UBGraphicsPDFItem::toPixmapItem() const return pixmapItem; } + + diff --git a/src/domain/UBGraphicsPDFItem.h b/src/domain/UBGraphicsPDFItem.h index ac55190e..b41b15ec 100644 --- a/src/domain/UBGraphicsPDFItem.h +++ b/src/domain/UBGraphicsPDFItem.h @@ -63,7 +63,6 @@ class UBGraphicsPDFItem: public GraphicsPDFItem, public UBItem, public UBGraphic virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); -// UBGraphicsItemDelegate* mDelegate; }; #endif /* UBGRAPHICSPDFITEM_H_ */ diff --git a/src/domain/UBGraphicsScene.cpp b/src/domain/UBGraphicsScene.cpp index 0cdb2ae6..f244bae8 100644 --- a/src/domain/UBGraphicsScene.cpp +++ b/src/domain/UBGraphicsScene.cpp @@ -2041,8 +2041,8 @@ void UBGraphicsScene::drawItems (QPainter * painter, int numItems, { if (!mTools.contains(rootItem(items[i]))) { - UBGraphicsPDFItem *pdfItem = qgraphicsitem_cast (items[i]); - if(!pdfItem || mRenderingContext == NonScreen) + bool isPdfItem = qgraphicsitem_cast (items[i]) != NULL; + if(!isPdfItem || mRenderingContext == NonScreen) { itemsFiltered[count] = items[i]; optionsFiltered[count] = options[i]; diff --git a/src/domain/UBGraphicsWebView.cpp b/src/domain/UBGraphicsWebView.cpp deleted file mode 100644 index cfc92dc3..00000000 --- a/src/domain/UBGraphicsWebView.cpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include - -#include "UBGraphicsWebView.h" -#include "UBGraphicsScene.h" -#include "UBGraphicsItemDelegate.h" -#include "UBGraphicsDelegateFrame.h" - -#include "core/memcheck.h" - -UBGraphicsWebView::UBGraphicsWebView(QGraphicsItem* parent) - : QGraphicsWebView(parent) -{ - setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - - mDelegate = new UBGraphicsItemDelegate(this, 0, true); - mDelegate->init(); - - setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); - - QGraphicsWebView::setAcceptHoverEvents(true); -} - - -UBGraphicsWebView::~UBGraphicsWebView() -{ - if (mDelegate) - delete mDelegate; -} - - -QVariant UBGraphicsWebView::itemChange(GraphicsItemChange change, const QVariant &value) -{ - if ((change == QGraphicsItem::ItemSelectedHasChanged) && scene()) { - if (isSelected()) - scene()->setActiveWindow(this); - else - if(scene()->activeWindow() == this) - scene()->setActiveWindow(0); - } - - QVariant newValue = mDelegate->itemChange(change, value); - return QGraphicsWebView::itemChange(change, newValue); -} - -void UBGraphicsWebView::setUuid(const QUuid &pUuid) -{ - UBItem::setUuid(pUuid); - setData(UBGraphicsItemData::ItemUuid, QVariant(pUuid)); //store item uuid inside the QGraphicsItem to fast operations with Items on the scene -} - -void UBGraphicsWebView::mousePressEvent(QGraphicsSceneMouseEvent *event) -{ - if (!mDelegate->mousePressEvent(event)) - setSelected(true); /* forcing selection */ - - QGraphicsWebView::mousePressEvent(event); -} - - -void UBGraphicsWebView::mouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ - if (!mDelegate->mouseMoveEvent(event)) - QGraphicsWebView::mouseMoveEvent(event); -} - - -void UBGraphicsWebView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - mDelegate->mouseReleaseEvent(event); - QGraphicsWebView::mouseReleaseEvent(event); -} - -void UBGraphicsWebView::wheelEvent(QGraphicsSceneWheelEvent *event) -{ - if (mDelegate->weelEvent(event)) - { - QGraphicsWebView::wheelEvent(event); - event->accept(); - } -} - -void UBGraphicsWebView::hoverEnterEvent(QGraphicsSceneHoverEvent *event) -{ - Q_UNUSED(event) - /* NOOP */ -} -void UBGraphicsWebView::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) -{ - Q_UNUSED(event) - /* NOOP */ -} - -void UBGraphicsWebView::setDelegate(UBGraphicsItemDelegate* pDelegate) -{ - if (mDelegate) - delete mDelegate; - - mDelegate = pDelegate; -} - - -void UBGraphicsWebView::resize(qreal w, qreal h) -{ - UBGraphicsWebView::resize(QSizeF(w, h)); -} - - -void UBGraphicsWebView::resize(const QSizeF & pSize) -{ - if (pSize != size()) { - QGraphicsWebView::setMaximumSize(pSize.width(), pSize.height()); - QGraphicsWebView::resize(pSize.width(), pSize.height()); - if (mDelegate) - mDelegate->positionHandles(); - if (scene()) - scene()->setModified(true); - } -} - -QSizeF UBGraphicsWebView::size() const -{ - return QGraphicsWebView::size(); -} - - -UBGraphicsScene* UBGraphicsWebView::scene() -{ - return static_cast(QGraphicsItem::scene()); -} - - -void UBGraphicsWebView::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} diff --git a/src/domain/UBGraphicsWebView.h b/src/domain/UBGraphicsWebView.h deleted file mode 100644 index 45a2db7a..00000000 --- a/src/domain/UBGraphicsWebView.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef UBGRAPHICSWEBVIEW_H_ -#define UBGRAPHICSWEBVIEW_H_ - -#include -#include - -#include "UBItem.h" -#include "UBResizableGraphicsItem.h" - -class UBGraphicsItemDelegate; - -class UBGraphicsWebView: public QGraphicsWebView, public UBItem, public UBResizableGraphicsItem, public UBGraphicsItem -{ - public: - UBGraphicsWebView(QGraphicsItem* parent = 0); - virtual ~UBGraphicsWebView(); - - virtual void resize(qreal w, qreal h); - virtual void resize(const QSizeF & size); - - virtual QSizeF size() const; - - void setDelegate(UBGraphicsItemDelegate* pDelegate); - - virtual UBGraphicsScene* scene(); - - virtual void remove(); - - virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;} - - virtual void clearSource(){;} - virtual void setUuid(const QUuid &pUuid); - - protected: - - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - virtual void wheelEvent(QGraphicsSceneWheelEvent *event); - virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); - -}; - -#endif /* UBGRAPHICSWEBVIEW_H_ */ diff --git a/src/domain/UBGraphicsWidgetItem.cpp b/src/domain/UBGraphicsWidgetItem.cpp index 35bb32ad..c3aed833 100644 --- a/src/domain/UBGraphicsWidgetItem.cpp +++ b/src/domain/UBGraphicsWidgetItem.cpp @@ -45,7 +45,7 @@ bool UBGraphicsWidgetItem::sInlineJavaScriptLoaded = false; QStringList UBGraphicsWidgetItem::sInlineJavaScripts; UBGraphicsWidgetItem::UBGraphicsWidgetItem(const QUrl &pWidgetUrl, QGraphicsItem *parent) - : UBGraphicsWebView(parent) + : QGraphicsWebView(parent) , mInitialLoadDone(false) , mIsFreezable(true) , mIsResizable(false) @@ -58,7 +58,7 @@ UBGraphicsWidgetItem::UBGraphicsWidgetItem(const QUrl &pWidgetUrl, QGraphicsItem , mShouldMoveWidget(false) , mUniboardAPI(0) { - setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly + setData(UBGraphicsItemData::ItemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly QGraphicsWebView::setPage(new UBWebPage(this)); QGraphicsWebView::settings()->setAttribute(QWebSettings::JavaEnabled, true); @@ -84,9 +84,11 @@ UBGraphicsWidgetItem::UBGraphicsWidgetItem(const QUrl &pWidgetUrl, QGraphicsItem viewPalette.setBrush(QPalette::Window, QBrush(Qt::transparent)); setPalette(viewPalette); - UBGraphicsWidgetItemDelegate* delegate = new UBGraphicsWidgetItemDelegate(this); - delegate->init(); - setDelegate(delegate); + mDelegate = new UBGraphicsWidgetItemDelegate(this); + mDelegate->init(); + + setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); + QGraphicsWebView::setAcceptHoverEvents(true); } @@ -97,7 +99,7 @@ UBGraphicsWidgetItem::~UBGraphicsWidgetItem() void UBGraphicsWidgetItem::initialize() { - UBGraphicsWebView::setMinimumSize(nominalSize()); + setMinimumSize(nominalSize()); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); // Necessary to set if we want z value to be assigned correctly if (mDelegate && mDelegate->frame() && resizable()) @@ -260,11 +262,6 @@ void UBGraphicsWidgetItem::removeAllDatastoreEntries() mDatastore.clear(); } -UBGraphicsItemDelegate* UBGraphicsWidgetItem::Delegate() const -{ - return mDelegate; -} - void UBGraphicsWidgetItem::remove() { if (mDelegate) @@ -360,6 +357,8 @@ QPixmap UBGraphicsWidgetItem::takeSnapshot() mIsTakingSnapshot = false; + mSnapshot = pixmap; + return pixmap; } @@ -502,7 +501,7 @@ bool UBGraphicsWidgetItem::event(QEvent *event) else if (event->type() == QEvent::ShortcutOverride) event->accept(); - return UBGraphicsWebView::event(event); + return QGraphicsWebView::event(event); } void UBGraphicsWidgetItem::dropEvent(QGraphicsSceneDragDropEvent *event) @@ -513,7 +512,10 @@ void UBGraphicsWidgetItem::dropEvent(QGraphicsSceneDragDropEvent *event) void UBGraphicsWidgetItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - UBGraphicsWebView::mousePressEvent(event); + if (!mDelegate->mousePressEvent(event)) + setSelected(true); /* forcing selection */ + + QGraphicsWebView::mousePressEvent(event); // did webkit consume the mouse press ? mShouldMoveWidget = !event->isAccepted() && (event->buttons() & Qt::LeftButton); @@ -527,24 +529,19 @@ void UBGraphicsWidgetItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { mShouldMoveWidget = false; - UBGraphicsWebView::mouseReleaseEvent(event); + mDelegate->mouseReleaseEvent(event); + QGraphicsWebView::mouseReleaseEvent(event); } void UBGraphicsWidgetItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { sendJSEnterEvent(); mDelegate->hoverEnterEvent(event); - UBGraphicsWebView::hoverEnterEvent(event); } void UBGraphicsWidgetItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { sendJSLeaveEvent(); mDelegate->hoverLeaveEvent(event); - UBGraphicsWebView::hoverLeaveEvent(event); -} -void UBGraphicsWidgetItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) -{ - UBGraphicsWebView::hoverMoveEvent(event); } void UBGraphicsWidgetItem::sendJSEnterEvent() @@ -572,33 +569,40 @@ void UBGraphicsWidgetItem::injectInlineJavaScript() void UBGraphicsWidgetItem::paint( QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - if (mIsFrozen) - painter->drawPixmap(0, 0, mSnapshot); + if (scene()->renderingContext() != UBGraphicsScene::Screen) + { + painter->drawPixmap(0, 0, snapshot()); + } else - UBGraphicsWebView::paint(painter, option, widget); - if (!mInitialLoadDone || mLoadIsErronous) { - QString message; + { + if (!mInitialLoadDone || mLoadIsErronous) + { + QString message; - if (mInitialLoadDone && mLoadIsErronous) - message = tr("Cannot load content"); - else - message = tr("Loading ..."); + if (mInitialLoadDone && mLoadIsErronous) + message = tr("Cannot load content"); + else + message = tr("Loading ..."); - painter->setFont(QFont("Arial", 12)); + painter->setFont(QFont("Arial", 12)); - QFontMetrics fm = painter->fontMetrics(); - QRect txtBoundingRect = fm.boundingRect(message); + QFontMetrics fm = painter->fontMetrics(); + QRect txtBoundingRect = fm.boundingRect(message); - txtBoundingRect.moveCenter(rect().center().toPoint()); - txtBoundingRect.adjust(-10, -5, 10, 5); + txtBoundingRect.moveCenter(rect().center().toPoint()); + txtBoundingRect.adjust(-10, -5, 10, 5); - painter->setPen(Qt::NoPen); - painter->setBrush(UBSettings::paletteColor); - painter->drawRoundedRect(txtBoundingRect, 3, 3); + painter->setPen(Qt::NoPen); + painter->setBrush(UBSettings::paletteColor); + painter->drawRoundedRect(txtBoundingRect, 3, 3); - painter->setPen(Qt::white); - painter->drawText(rect(), Qt::AlignCenter, message); + painter->setPen(Qt::white); + painter->drawText(rect(), Qt::AlignCenter, message); + } + else + QGraphicsWebView::paint(painter, option, widget); } + } void UBGraphicsWidgetItem::geometryChangeRequested(const QRect& geom) @@ -624,6 +628,52 @@ void UBGraphicsWidgetItem::mainFrameLoadFinished (bool ok) update(boundingRect()); } +void UBGraphicsWidgetItem::wheelEvent(QGraphicsSceneWheelEvent *event) +{ + if (mDelegate->weelEvent(event)) + { + QGraphicsWebView::wheelEvent(event); + event->accept(); + } +} + +QVariant UBGraphicsWidgetItem::itemChange(GraphicsItemChange change, const QVariant &value) +{ + if ((change == QGraphicsItem::ItemSelectedHasChanged) && scene()) { + if (isSelected()) + scene()->setActiveWindow(this); + else + if(scene()->activeWindow() == this) + scene()->setActiveWindow(0); + } + + QVariant newValue = mDelegate->itemChange(change, value); + return QGraphicsWebView::itemChange(change, newValue); +} + +void UBGraphicsWidgetItem::resize(qreal w, qreal h) +{ + UBGraphicsWidgetItem::resize(QSizeF(w, h)); +} + + +void UBGraphicsWidgetItem::resize(const QSizeF & pSize) +{ + if (pSize != size()) { + QGraphicsWebView::setMaximumSize(pSize.width(), pSize.height()); + QGraphicsWebView::resize(pSize.width(), pSize.height()); + if (mDelegate) + mDelegate->positionHandles(); + if (scene()) + scene()->setModified(true); + } +} + +QSizeF UBGraphicsWidgetItem::size() const +{ + return QGraphicsWebView::size(); +} + UBGraphicsAppleWidgetItem::UBGraphicsAppleWidgetItem(const QUrl& pWidgetUrl, QGraphicsItem *parent) @@ -881,21 +931,6 @@ UBItem* UBGraphicsW3CWidgetItem::deepCopy() const return copy; } -void UBGraphicsW3CWidgetItem::paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget) -{ - UBGraphicsScene::RenderingContext rc = UBGraphicsScene::Screen; - - if (scene()) - rc = scene()->renderingContext(); - - if (rc == UBGraphicsScene::NonScreen || rc == UBGraphicsScene::PdfExport) { - if (!snapshot().isNull()) - painter->drawPixmap(0, 0, snapshot()); - } - else - UBGraphicsWidgetItem::paint(painter, option, widget); -} - QMap UBGraphicsW3CWidgetItem::preferences() { return mPreferences; diff --git a/src/domain/UBGraphicsWidgetItem.h b/src/domain/UBGraphicsWidgetItem.h index c7074e2a..ed11a3c8 100644 --- a/src/domain/UBGraphicsWidgetItem.h +++ b/src/domain/UBGraphicsWidgetItem.h @@ -19,10 +19,11 @@ #include #include -#include "UBGraphicsWebView.h" - #include "core/UB.h" +#include "UBItem.h" +#include "UBResizableGraphicsItem.h" + class UBWidgetUniboardAPI; class UBGraphicsScene; class UBW3CWidgetAPI; @@ -38,7 +39,7 @@ struct UBWidgetType }; }; -class UBGraphicsWidgetItem : public UBGraphicsWebView +class UBGraphicsWidgetItem : public QGraphicsWebView, public UBItem, public UBResizableGraphicsItem, public UBGraphicsItem { Q_OBJECT @@ -52,6 +53,12 @@ class UBGraphicsWidgetItem : public UBGraphicsWebView virtual void initialize(); + virtual void resize(qreal w, qreal h); + virtual void resize(const QSizeF & size); + virtual QSizeF size() const; + + virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;} + QUrl mainHtml(); void loadMainHtml(); QUrl widgetUrl(); @@ -75,8 +82,6 @@ class UBGraphicsWidgetItem : public UBGraphicsWebView void removeDatastoreEntry(const QString& key); void removeAllDatastoreEntries(); - virtual UBGraphicsItemDelegate* Delegate() const; - virtual void remove(); void removeScript(); @@ -140,16 +145,18 @@ class UBGraphicsWidgetItem : public UBGraphicsWebView QMap mDatastore; QMap mPreferences; + virtual bool event(QEvent *event); virtual void dropEvent(QGraphicsSceneDragDropEvent *event); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event); virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event); virtual void sendJSEnterEvent(); virtual void sendJSLeaveEvent(); virtual void injectInlineJavaScript(); + virtual void wheelEvent(QGraphicsSceneWheelEvent *event); + virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); protected slots: @@ -230,7 +237,6 @@ class UBGraphicsW3CWidgetItem : public UBGraphicsWidgetItem virtual void setUuid(const QUuid &pUuid); virtual UBItem* deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; - virtual void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget ); QMap preferences(); Metadata metadatas() const; diff --git a/src/domain/domain.pri b/src/domain/domain.pri index 1111106f..a7dbb78d 100644 --- a/src/domain/domain.pri +++ b/src/domain/domain.pri @@ -6,7 +6,6 @@ HEADERS += src/domain/UBGraphicsScene.h \ src/domain/UBDocumentUndoCommand.h \ src/domain/UBPageSizeUndoCommand.h \ src/domain/UBGraphicsProxyWidget.h \ - src/domain/UBGraphicsWebView.h \ src/domain/UBGraphicsSvgItem.h \ src/domain/UBGraphicsPolygonItem.h \ src/domain/UBItem.h \ @@ -35,7 +34,6 @@ SOURCES += src/domain/UBGraphicsScene.cpp \ src/domain/UBDocumentUndoCommand.cpp \ src/domain/UBPageSizeUndoCommand.cpp \ src/domain/UBGraphicsProxyWidget.cpp \ - src/domain/UBGraphicsWebView.cpp \ src/domain/UBGraphicsSvgItem.cpp \ src/domain/UBGraphicsPolygonItem.cpp \ src/domain/UBItem.cpp \ From db5c7ce7324033cb1fefb0ec6ea9f7cc85ff075d Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Thu, 6 Sep 2012 16:21:18 +0300 Subject: [PATCH 2/2] Correct deletion of delegate instance (error with Vido on MAC OS) --- src/domain/UBGraphicsGroupContainerItem.cpp | 30 +++++-------- src/domain/UBGraphicsGroupContainerItem.h | 3 -- src/domain/UBGraphicsMediaItem.cpp | 22 ++++----- src/domain/UBGraphicsPDFItem.cpp | 22 +++------ src/domain/UBGraphicsPDFItem.h | 3 -- src/domain/UBGraphicsPixmapItem.cpp | 29 +++++------- src/domain/UBGraphicsPixmapItem.h | 3 -- src/domain/UBGraphicsProxyWidget.cpp | 37 +++++----------- src/domain/UBGraphicsProxyWidget.h | 8 +--- src/domain/UBGraphicsStrokesGroup.cpp | 29 +++++------- src/domain/UBGraphicsStrokesGroup.h | 2 - src/domain/UBGraphicsSvgItem.cpp | 25 ++++------- src/domain/UBGraphicsSvgItem.h | 3 -- src/domain/UBGraphicsTextItem.cpp | 49 +++++++++------------ src/domain/UBGraphicsTextItem.h | 3 -- src/domain/UBGraphicsWidgetItem.cpp | 30 +++++-------- src/domain/UBGraphicsWidgetItem.h | 3 -- src/domain/UBItem.cpp | 19 ++++++++ src/domain/UBItem.h | 22 ++++----- src/tools/UBGraphicsCurtainItem.cpp | 23 ++++------ src/tools/UBGraphicsCurtainItem.h | 3 -- src/tools/UBGraphicsCurtainItemDelegate.h | 5 +-- 22 files changed, 142 insertions(+), 231 deletions(-) diff --git a/src/domain/UBGraphicsGroupContainerItem.cpp b/src/domain/UBGraphicsGroupContainerItem.cpp index 818eb88e..5f0e85c0 100644 --- a/src/domain/UBGraphicsGroupContainerItem.cpp +++ b/src/domain/UBGraphicsGroupContainerItem.cpp @@ -16,8 +16,8 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - mDelegate = new UBGraphicsGroupContainerItemDelegate(this, 0); - mDelegate->init(); + setDelegate(new UBGraphicsGroupContainerItemDelegate(this, 0)); + Delegate()->init(); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); setFlag(QGraphicsItem::ItemIsSelectable, true); @@ -32,8 +32,6 @@ UBGraphicsGroupContainerItem::UBGraphicsGroupContainerItem(QGraphicsItem *parent UBGraphicsGroupContainerItem::~UBGraphicsGroupContainerItem() { - if (mDelegate) - delete mDelegate; } void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) @@ -50,14 +48,14 @@ void UBGraphicsGroupContainerItem::addToGroup(QGraphicsItem *item) //Check if group is allready rotatable or flippable if (childItems().count()) { if (UBGraphicsItem::isFlippable(this) && !UBGraphicsItem::isFlippable(item)) { - mDelegate->setFlippable(false); + Delegate()->setFlippable(false); } if (UBGraphicsItem::isRotatable(this) && !UBGraphicsItem::isRotatable(item)) { - mDelegate->setRotatable(false); + Delegate()->setRotatable(false); } } else { - mDelegate->setFlippable(UBGraphicsItem::isFlippable(item)); - mDelegate->setRotatable(UBGraphicsItem::isRotatable(item)); + Delegate()->setFlippable(UBGraphicsItem::isFlippable(item)); + Delegate()->setRotatable(UBGraphicsItem::isRotatable(item)); } // COMBINE @@ -207,12 +205,6 @@ void UBGraphicsGroupContainerItem::copyItemParameters(UBItem *copy) const } } -void UBGraphicsGroupContainerItem::remove() -{ - if (mDelegate) - mDelegate->remove(); -} - void UBGraphicsGroupContainerItem::setUuid(const QUuid &pUuid) { UBItem::setUuid(pUuid); @@ -244,7 +236,7 @@ void UBGraphicsGroupContainerItem::clearSource() void UBGraphicsGroupContainerItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mousePressEvent(event)) { + if (Delegate()->mousePressEvent(event)) { //NOOP } else { @@ -257,7 +249,7 @@ void UBGraphicsGroupContainerItem::mousePressEvent(QGraphicsSceneMouseEvent *eve void UBGraphicsGroupContainerItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) { + if (Delegate()->mouseMoveEvent(event)) { // NOOP; } else { QGraphicsItem::mouseMoveEvent(event); @@ -273,7 +265,7 @@ void UBGraphicsGroupContainerItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *e QVariant UBGraphicsGroupContainerItem::itemChange(GraphicsItemChange change, const QVariant &value) { - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); foreach(QGraphicsItem *child, children()) { @@ -317,8 +309,8 @@ void UBGraphicsGroupContainerItem::pRemoveFromGroup(QGraphicsItem *item) break; } } - mDelegate->setFlippable(flippableNow); - mDelegate->setRotatable(rotatableNow); + Delegate()->setFlippable(flippableNow); + Delegate()->setRotatable(rotatableNow); } } diff --git a/src/domain/UBGraphicsGroupContainerItem.h b/src/domain/UBGraphicsGroupContainerItem.h index e8fa77eb..6f14204a 100644 --- a/src/domain/UBGraphicsGroupContainerItem.h +++ b/src/domain/UBGraphicsGroupContainerItem.h @@ -22,13 +22,10 @@ public: QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); - virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;} - virtual UBCoreGraphicsScene *corescene(); virtual UBGraphicsGroupContainerItem *deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; - virtual void remove(); enum { Type = UBGraphicsItemType::groupContainerType }; virtual int type() const diff --git a/src/domain/UBGraphicsMediaItem.cpp b/src/domain/UBGraphicsMediaItem.cpp index d1e97583..d96ab915 100644 --- a/src/domain/UBGraphicsMediaItem.cpp +++ b/src/domain/UBGraphicsMediaItem.cpp @@ -72,6 +72,10 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte update(); mMediaObject = new Phonon::MediaObject(this); + + setDelegate(new UBGraphicsMediaItemDelegate(this, mMediaObject)); + Delegate()->init(); + if (pMediaFileUrl.toLocalFile().contains("videos")) { mMediaType = mediaType_Video; @@ -116,18 +120,14 @@ UBGraphicsMediaItem::UBGraphicsMediaItem(const QUrl& pMediaFileUrl, QGraphicsIte mSource = Phonon::MediaSource(pMediaFileUrl); mMediaObject->setCurrentSource(mSource); - UBGraphicsMediaItemDelegate* itemDelegate = new UBGraphicsMediaItemDelegate(this, mMediaObject); - itemDelegate->init(); - setDelegate(itemDelegate); - if (mediaType_Audio == mMediaType) - mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::ResizingHorizontally); + Delegate()->frame()->setOperationMode(UBGraphicsDelegateFrame::ResizingHorizontally); else - mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); + Delegate()->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); //Necessary to set if we want z value to be assigned correctly - connect(mDelegate, SIGNAL(showOnDisplayChanged(bool)), this, SLOT(showOnDisplayChanged(bool))); + connect(Delegate(), SIGNAL(showOnDisplayChanged(bool)), this, SLOT(showOnDisplayChanged(bool))); connect(mMediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasMediaChanged(bool))); } @@ -220,7 +220,7 @@ void UBGraphicsMediaItem::hasMediaChanged(bool hasMedia) { Q_UNUSED(hasMedia); mMediaObject->seek(mInitialPos); - UBGraphicsMediaItemDelegate *med = dynamic_cast(mDelegate); + UBGraphicsMediaItemDelegate *med = dynamic_cast(Delegate()); if (med) med->updateTicker(initialPos()); } @@ -289,9 +289,9 @@ void UBGraphicsMediaItem::copyItemParameters(UBItem *copy) const void UBGraphicsMediaItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate) + if (Delegate()) { - mDelegate->mousePressEvent(event); + Delegate()->mousePressEvent(event); if (parentItem() && UBGraphicsGroupContainerItem::Type == parentItem()->type()) { UBGraphicsGroupContainerItem *group = qgraphicsitem_cast(parentItem()); @@ -304,7 +304,7 @@ void UBGraphicsMediaItem::mousePressEvent(QGraphicsSceneMouseEvent *event) } group->setCurrentItem(this); this->setSelected(true); - mDelegate->positionHandles(); + Delegate()->positionHandles(); } } diff --git a/src/domain/UBGraphicsPDFItem.cpp b/src/domain/UBGraphicsPDFItem.cpp index 425ab749..3bcb09f6 100644 --- a/src/domain/UBGraphicsPDFItem.cpp +++ b/src/domain/UBGraphicsPDFItem.cpp @@ -28,21 +28,20 @@ UBGraphicsPDFItem::UBGraphicsPDFItem(PDFRenderer *renderer, int pageNumber, QGra { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); //deprecated setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::BackgroundItem)); //Necessary to set if we want z value to be assigned correctly - mDelegate = new UBGraphicsItemDelegate(this,0, true, false, false); - mDelegate->init(); + + setDelegate(new UBGraphicsItemDelegate(this,0, true, false, false)); + Delegate()->init(); } UBGraphicsPDFItem::~UBGraphicsPDFItem() { - if (mDelegate) - delete mDelegate; } QVariant UBGraphicsPDFItem::itemChange(GraphicsItemChange change, const QVariant &value) { - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); return GraphicsPDFItem::itemChange(change, newValue); } @@ -54,7 +53,7 @@ void UBGraphicsPDFItem::setUuid(const QUuid &pUuid) void UBGraphicsPDFItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mousePressEvent(event)) + if (Delegate()->mousePressEvent(event)) { // NOOP } @@ -67,7 +66,7 @@ void UBGraphicsPDFItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsPDFItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) + if (Delegate()->mouseMoveEvent(event)) { // NOOP } @@ -80,7 +79,7 @@ void UBGraphicsPDFItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsPDFItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); GraphicsPDFItem::mouseReleaseEvent(event); } @@ -131,13 +130,6 @@ UBGraphicsScene* UBGraphicsPDFItem::scene() } -void UBGraphicsPDFItem::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} - - UBGraphicsPixmapItem* UBGraphicsPDFItem::toPixmapItem() const { QPixmap pixmap(mRenderer->pageSizeF(mPageNumber).toSize()); diff --git a/src/domain/UBGraphicsPDFItem.h b/src/domain/UBGraphicsPDFItem.h index b41b15ec..9107ea85 100644 --- a/src/domain/UBGraphicsPDFItem.h +++ b/src/domain/UBGraphicsPDFItem.h @@ -47,10 +47,7 @@ class UBGraphicsPDFItem: public GraphicsPDFItem, public UBItem, public UBGraphic virtual UBGraphicsScene* scene(); - virtual void remove(); - virtual UBGraphicsPixmapItem* toPixmapItem() const; - virtual UBGraphicsItemDelegate *Delegate() const {return mDelegate;} virtual void clearSource(){;} virtual void setUuid(const QUuid &pUuid); diff --git a/src/domain/UBGraphicsPixmapItem.cpp b/src/domain/UBGraphicsPixmapItem.cpp index 4e346256..f771032d 100644 --- a/src/domain/UBGraphicsPixmapItem.cpp +++ b/src/domain/UBGraphicsPixmapItem.cpp @@ -28,10 +28,10 @@ UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent) : QGraphicsPixmapItem(parent) { - mDelegate = new UBGraphicsItemDelegate(this, 0, true); - mDelegate->init(); - mDelegate->setFlippable(true); - mDelegate->setRotatable(true); + setDelegate(new UBGraphicsItemDelegate(this, 0, true)); + Delegate()->init(); + Delegate()->setFlippable(true); + Delegate()->setRotatable(true); setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); setTransformationMode(Qt::SmoothTransformation); @@ -44,13 +44,11 @@ UBGraphicsPixmapItem::UBGraphicsPixmapItem(QGraphicsItem* parent) UBGraphicsPixmapItem::~UBGraphicsPixmapItem() { - if (mDelegate) - delete mDelegate; } QVariant UBGraphicsPixmapItem::itemChange(GraphicsItemChange change, const QVariant &value) { - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); return QGraphicsPixmapItem::itemChange(change, newValue); } @@ -64,14 +62,14 @@ void UBGraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { QMimeData* pMime = new QMimeData(); pMime->setImageData(pixmap().toImage()); - mDelegate->setMimeData(pMime); + Delegate()->setMimeData(pMime); qreal k = (qreal)pixmap().width() / 100.0; QSize newSize((int)(pixmap().width() / k), (int)(pixmap().height() / k)); - mDelegate->setDragPixmap(pixmap().scaled(newSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + Delegate()->setDragPixmap(pixmap().scaled(newSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - if (mDelegate->mousePressEvent(event)) + if (Delegate()->mousePressEvent(event)) { //NOOP } @@ -83,7 +81,7 @@ void UBGraphicsPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) + if (Delegate()->mouseMoveEvent(event)) { // NOOP; } @@ -95,7 +93,7 @@ void UBGraphicsPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); QGraphicsPixmapItem::mouseReleaseEvent(event); } @@ -145,13 +143,6 @@ UBGraphicsScene* UBGraphicsPixmapItem::scene() } -void UBGraphicsPixmapItem::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} - - void UBGraphicsPixmapItem::setOpacity(qreal op) { QGraphicsPixmapItem::setOpacity(op); diff --git a/src/domain/UBGraphicsPixmapItem.h b/src/domain/UBGraphicsPixmapItem.h index 787f28eb..2a43e4eb 100644 --- a/src/domain/UBGraphicsPixmapItem.h +++ b/src/domain/UBGraphicsPixmapItem.h @@ -44,14 +44,11 @@ class UBGraphicsPixmapItem : public QObject, public QGraphicsPixmapItem, public virtual UBGraphicsScene* scene(); - virtual void remove(); - Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity) void setOpacity(qreal op); qreal opacity() const; - virtual UBGraphicsItemDelegate* Delegate() const {return mDelegate;} virtual void clearSource(){;} virtual void setUuid(const QUuid &pUuid); diff --git a/src/domain/UBGraphicsProxyWidget.cpp b/src/domain/UBGraphicsProxyWidget.cpp index 25617250..ed2f6797 100644 --- a/src/domain/UBGraphicsProxyWidget.cpp +++ b/src/domain/UBGraphicsProxyWidget.cpp @@ -29,8 +29,9 @@ UBGraphicsProxyWidget::UBGraphicsProxyWidget(QGraphicsItem* parent) { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - mDelegate = new UBGraphicsItemDelegate(this,0, true, false, false); - mDelegate->init(); + //UBGraphicsItemDelegate* delegate = new UBGraphicsItemDelegate(this,0, true, false, false); + //delegate->init(); + //setDelegate(delegate); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); @@ -40,8 +41,6 @@ UBGraphicsProxyWidget::UBGraphicsProxyWidget(QGraphicsItem* parent) UBGraphicsProxyWidget::~UBGraphicsProxyWidget() { - if (mDelegate) - delete mDelegate; } @@ -67,7 +66,7 @@ QVariant UBGraphicsProxyWidget::itemChange(GraphicsItemChange change, const QVar } } - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); return QGraphicsProxyWidget::itemChange(change, newValue); } @@ -79,7 +78,7 @@ void UBGraphicsProxyWidget::setUuid(const QUuid &pUuid) void UBGraphicsProxyWidget::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mousePressEvent(event)) + if (Delegate()->mousePressEvent(event)) { //NOOP } @@ -95,7 +94,7 @@ void UBGraphicsProxyWidget::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsProxyWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) + if (Delegate()->mouseMoveEvent(event)) { // NOOP; } @@ -108,13 +107,13 @@ void UBGraphicsProxyWidget::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsProxyWidget::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); QGraphicsProxyWidget::mouseReleaseEvent(event); } void UBGraphicsProxyWidget::wheelEvent(QGraphicsSceneWheelEvent *event) { - if( mDelegate->weelEvent(event) ) + if( Delegate()->weelEvent(event) ) { QGraphicsProxyWidget::wheelEvent(event); event->accept(); @@ -132,17 +131,6 @@ void UBGraphicsProxyWidget::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) // NOOP } -void UBGraphicsProxyWidget::setDelegate(UBGraphicsItemDelegate* pDelegate) -{ - if (mDelegate) - { - delete mDelegate; - } - - mDelegate = pDelegate; -} - - void UBGraphicsProxyWidget::resize(qreal w, qreal h) { UBGraphicsProxyWidget::resize(QSizeF(w, h)); @@ -177,8 +165,8 @@ void UBGraphicsProxyWidget::resize(const QSizeF & pSize) QGraphicsProxyWidget::resize(size.width(), size.height()); if (widget()) widget()->resize(size.width(), size.height()); - if (mDelegate) - mDelegate->positionHandles(); + if (Delegate()) + Delegate()->positionHandles(); if (scene()) scene()->setModified(true); } @@ -197,8 +185,3 @@ UBGraphicsScene* UBGraphicsProxyWidget::scene() } -void UBGraphicsProxyWidget::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} diff --git a/src/domain/UBGraphicsProxyWidget.h b/src/domain/UBGraphicsProxyWidget.h index d9280fb7..d663f441 100644 --- a/src/domain/UBGraphicsProxyWidget.h +++ b/src/domain/UBGraphicsProxyWidget.h @@ -27,7 +27,6 @@ class UBGraphicsItemDelegate; class UBGraphicsProxyWidget: public QGraphicsProxyWidget, public UBItem, public UBResizableGraphicsItem, public UBGraphicsItem { public: - UBGraphicsProxyWidget(QGraphicsItem* parent = 0); virtual ~UBGraphicsProxyWidget(); virtual void resize(qreal w, qreal h); @@ -35,18 +34,13 @@ class UBGraphicsProxyWidget: public QGraphicsProxyWidget, public UBItem, public virtual QSizeF size() const; - void setDelegate(UBGraphicsItemDelegate* pDelegate); - virtual UBGraphicsScene* scene(); - virtual void remove(); - - virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;} - virtual void clearSource(){;} virtual void setUuid(const QUuid &pUuid); protected: + UBGraphicsProxyWidget(QGraphicsItem* parent = 0); virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event); diff --git a/src/domain/UBGraphicsStrokesGroup.cpp b/src/domain/UBGraphicsStrokesGroup.cpp index e9993375..490f6bd4 100644 --- a/src/domain/UBGraphicsStrokesGroup.cpp +++ b/src/domain/UBGraphicsStrokesGroup.cpp @@ -4,12 +4,14 @@ #include "core/memcheck.h" -UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsItemGroup(parent) +UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent) + :UBGraphicsItem(), QGraphicsItemGroup(parent) { - mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); - mDelegate->init(); - mDelegate->setFlippable(true); - mDelegate->setRotatable(true); + setDelegate(new UBGraphicsItemDelegate(this, 0, true, true, false)); + Delegate()->init(); + Delegate()->setFlippable(true); + Delegate()->setRotatable(true); + setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); @@ -22,9 +24,6 @@ UBGraphicsStrokesGroup::UBGraphicsStrokesGroup(QGraphicsItem *parent):QGraphicsI UBGraphicsStrokesGroup::~UBGraphicsStrokesGroup() { - if(mDelegate){ - delete mDelegate; - } } void UBGraphicsStrokesGroup::setUuid(const QUuid &pUuid) @@ -83,7 +82,7 @@ QColor UBGraphicsStrokesGroup::color(colorType pColorType) const void UBGraphicsStrokesGroup::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mousePressEvent(event)) + if (Delegate()->mousePressEvent(event)) { //NOOP } @@ -95,7 +94,7 @@ void UBGraphicsStrokesGroup::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsStrokesGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) + if (Delegate()->mouseMoveEvent(event)) { // NOOP; } @@ -107,7 +106,7 @@ void UBGraphicsStrokesGroup::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsStrokesGroup::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); QGraphicsItemGroup::mouseReleaseEvent(event); } @@ -144,12 +143,6 @@ void UBGraphicsStrokesGroup::copyItemParameters(UBItem *copy) const } } -void UBGraphicsStrokesGroup::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} - void UBGraphicsStrokesGroup::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { // Never draw the rubber band, we draw our custom selection with the DelegateFrame @@ -161,7 +154,7 @@ void UBGraphicsStrokesGroup::paint(QPainter *painter, const QStyleOptionGraphics QVariant UBGraphicsStrokesGroup::itemChange(GraphicsItemChange change, const QVariant &value) { - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); return QGraphicsItemGroup::itemChange(change, newValue); } diff --git a/src/domain/UBGraphicsStrokesGroup.h b/src/domain/UBGraphicsStrokesGroup.h index 2c286d11..9b3aa79e 100644 --- a/src/domain/UBGraphicsStrokesGroup.h +++ b/src/domain/UBGraphicsStrokesGroup.h @@ -21,8 +21,6 @@ public: ~UBGraphicsStrokesGroup(); virtual UBItem* deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; - virtual void remove(); - virtual UBGraphicsItemDelegate* Delegate() const {return mDelegate;} enum { Type = UBGraphicsItemType::StrokeItemType }; virtual int type() const { diff --git a/src/domain/UBGraphicsSvgItem.cpp b/src/domain/UBGraphicsSvgItem.cpp index e393ef23..dfa402c9 100644 --- a/src/domain/UBGraphicsSvgItem.cpp +++ b/src/domain/UBGraphicsSvgItem.cpp @@ -53,10 +53,11 @@ void UBGraphicsSvgItem::init() { setData(UBGraphicsItemData::ItemLayerType, UBItemLayerType::Object); - mDelegate = new UBGraphicsItemDelegate(this, 0, true, true, false); - mDelegate->init(); - mDelegate->setFlippable(true); - mDelegate->setRotatable(true); + setDelegate(new UBGraphicsItemDelegate(this, 0, true, true, false)); + Delegate()->init(); + Delegate()->setFlippable(true); + Delegate()->setRotatable(true); + setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); @@ -71,8 +72,6 @@ void UBGraphicsSvgItem::init() UBGraphicsSvgItem::~UBGraphicsSvgItem() { - if (mDelegate) - delete mDelegate; } @@ -84,14 +83,14 @@ QByteArray UBGraphicsSvgItem::fileData() const QVariant UBGraphicsSvgItem::itemChange(GraphicsItemChange change, const QVariant &value) { - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); return QGraphicsSvgItem::itemChange(change, newValue); } void UBGraphicsSvgItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mousePressEvent(event)) + if (Delegate()->mousePressEvent(event)) { //NOOP } @@ -104,7 +103,7 @@ void UBGraphicsSvgItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsSvgItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) + if (Delegate()->mouseMoveEvent(event)) { // NOOP; } @@ -117,7 +116,7 @@ void UBGraphicsSvgItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsSvgItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); QGraphicsSvgItem::mouseReleaseEvent(event); } @@ -182,12 +181,6 @@ UBGraphicsScene* UBGraphicsSvgItem::scene() } -void UBGraphicsSvgItem::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} - UBGraphicsPixmapItem* UBGraphicsSvgItem::toPixmapItem() const { diff --git a/src/domain/UBGraphicsSvgItem.h b/src/domain/UBGraphicsSvgItem.h index 95b9d536..1c2351d0 100644 --- a/src/domain/UBGraphicsSvgItem.h +++ b/src/domain/UBGraphicsSvgItem.h @@ -58,10 +58,7 @@ class UBGraphicsSvgItem: public QGraphicsSvgItem, public UBItem, public UBGraphi virtual UBGraphicsScene* scene(); - virtual void remove(); - virtual UBGraphicsPixmapItem* toPixmapItem() const; - virtual UBGraphicsItemDelegate *Delegate() const {return mDelegate;} virtual void setUuid(const QUuid &pUuid); diff --git a/src/domain/UBGraphicsTextItem.cpp b/src/domain/UBGraphicsTextItem.cpp index 20adf243..f7812e29 100644 --- a/src/domain/UBGraphicsTextItem.cpp +++ b/src/domain/UBGraphicsTextItem.cpp @@ -31,16 +31,17 @@ QColor UBGraphicsTextItem::lastUsedTextColor; UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent) - : QGraphicsTextItem(parent) + : UBGraphicsItem() + , QGraphicsTextItem(parent) , mMultiClickState(0) , mLastMousePressTime(QTime::currentTime()) { - mDelegate = new UBGraphicsTextItemDelegate(this, 0); - mDelegate->init(); + setDelegate(new UBGraphicsTextItemDelegate(this, 0)); + Delegate()->init(); - mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); - mDelegate->setFlippable(false); - mDelegate->setRotatable(true); + Delegate()->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); + Delegate()->setFlippable(false); + Delegate()->setRotatable(true); mTypeTextHereLabel = tr(""); @@ -58,7 +59,7 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent) setUuid(QUuid::createUuid()); - connect(document(), SIGNAL(contentsChanged()), mDelegate, SLOT(contentsChanged())); + connect(document(), SIGNAL(contentsChanged()), Delegate(), SLOT(contentsChanged())); connect(document(), SIGNAL(undoCommandAdded()), this, SLOT(undoCommandAdded())); connect(document()->documentLayout(), SIGNAL(documentSizeChanged(const QSizeF &)), @@ -68,18 +69,14 @@ UBGraphicsTextItem::UBGraphicsTextItem(QGraphicsItem * parent) UBGraphicsTextItem::~UBGraphicsTextItem() { - if (mDelegate) - { - delete mDelegate; - } } QVariant UBGraphicsTextItem::itemChange(GraphicsItemChange change, const QVariant &value) { QVariant newValue = value; - if(mDelegate) - newValue = mDelegate->itemChange(change, value); + if(Delegate()) + newValue = Delegate()->itemChange(change, value); return QGraphicsTextItem::itemChange(change, newValue); } @@ -95,10 +92,10 @@ void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) return; } - if (mDelegate) + if (Delegate()) { - mDelegate->mousePressEvent(event); - if (mDelegate && parentItem() && UBGraphicsGroupContainerItem::Type == parentItem()->type()) + Delegate()->mousePressEvent(event); + if (Delegate() && parentItem() && UBGraphicsGroupContainerItem::Type == parentItem()->type()) { UBGraphicsGroupContainerItem *group = qgraphicsitem_cast(parentItem()); if (group) @@ -110,13 +107,13 @@ void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) } group->setCurrentItem(this); this->setSelected(true); - mDelegate->positionHandles(); + Delegate()->positionHandles(); } } else { - mDelegate->getToolBarItem()->show(); + Delegate()->getToolBarItem()->show(); } } @@ -165,7 +162,7 @@ void UBGraphicsTextItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsTextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (!mDelegate || !mDelegate->mouseMoveEvent(event)) + if (!Delegate() || !Delegate()->mouseMoveEvent(event)) { QGraphicsTextItem::mouseMoveEvent(event); } @@ -184,8 +181,8 @@ void UBGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) if (mMultiClickState == 1) { - if (mDelegate) - mDelegate->mouseReleaseEvent(event); + if (Delegate()) + Delegate()->mouseReleaseEvent(event); QGraphicsTextItem::mouseReleaseEvent(event); } @@ -324,8 +321,8 @@ void UBGraphicsTextItem::resize(qreal w, qreal h) setTextWidth(w); setTextHeight(h); - if (mDelegate) - mDelegate->positionHandles(); + if (Delegate()) + Delegate()->positionHandles(); } @@ -347,12 +344,6 @@ void UBGraphicsTextItem::undoCommandAdded() } -void UBGraphicsTextItem::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} - void UBGraphicsTextItem::documentSizeChanged(const QSizeF & newSize) { resize(newSize.width(), newSize.height()); diff --git a/src/domain/UBGraphicsTextItem.h b/src/domain/UBGraphicsTextItem.h index c7dc5c95..61fdb8b1 100644 --- a/src/domain/UBGraphicsTextItem.h +++ b/src/domain/UBGraphicsTextItem.h @@ -58,8 +58,6 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes virtual QSizeF size() const; - virtual void remove(); - static QColor lastUsedTextColor; QColor colorOnDarkBackground() const @@ -81,7 +79,6 @@ class UBGraphicsTextItem : public QGraphicsTextItem, public UBItem, public UBRes { mColorOnLightBackground = pColorOnLightBackground; } - virtual UBGraphicsItemDelegate *Delegate() const {return mDelegate;} virtual void clearSource(){;} virtual void setUuid(const QUuid &pUuid); diff --git a/src/domain/UBGraphicsWidgetItem.cpp b/src/domain/UBGraphicsWidgetItem.cpp index c3aed833..5bd2b725 100644 --- a/src/domain/UBGraphicsWidgetItem.cpp +++ b/src/domain/UBGraphicsWidgetItem.cpp @@ -84,8 +84,8 @@ UBGraphicsWidgetItem::UBGraphicsWidgetItem(const QUrl &pWidgetUrl, QGraphicsItem viewPalette.setBrush(QPalette::Window, QBrush(Qt::transparent)); setPalette(viewPalette); - mDelegate = new UBGraphicsWidgetItemDelegate(this); - mDelegate->init(); + setDelegate(new UBGraphicsWidgetItemDelegate(this)); + Delegate()->init(); setFlag(QGraphicsItem::ItemSendsGeometryChanges, true); QGraphicsWebView::setAcceptHoverEvents(true); @@ -102,8 +102,8 @@ void UBGraphicsWidgetItem::initialize() setMinimumSize(nominalSize()); setData(UBGraphicsItemData::itemLayerType, QVariant(itemLayerType::ObjectItem)); // Necessary to set if we want z value to be assigned correctly - if (mDelegate && mDelegate->frame() && resizable()) - mDelegate->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); + if (Delegate() && Delegate()->frame() && resizable()) + Delegate()->frame()->setOperationMode(UBGraphicsDelegateFrame::Resizing); QPalette palette = page()->palette(); palette.setBrush(QPalette::Base, QBrush(Qt::transparent)); @@ -262,12 +262,6 @@ void UBGraphicsWidgetItem::removeAllDatastoreEntries() mDatastore.clear(); } -void UBGraphicsWidgetItem::remove() -{ - if (mDelegate) - mDelegate->remove(); -} - void UBGraphicsWidgetItem::removeScript() { if (page() && page()->mainFrame()) @@ -512,7 +506,7 @@ void UBGraphicsWidgetItem::dropEvent(QGraphicsSceneDragDropEvent *event) void UBGraphicsWidgetItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (!mDelegate->mousePressEvent(event)) + if (!Delegate()->mousePressEvent(event)) setSelected(true); /* forcing selection */ QGraphicsWebView::mousePressEvent(event); @@ -529,19 +523,19 @@ void UBGraphicsWidgetItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { mShouldMoveWidget = false; - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); QGraphicsWebView::mouseReleaseEvent(event); } void UBGraphicsWidgetItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { sendJSEnterEvent(); - mDelegate->hoverEnterEvent(event); + Delegate()->hoverEnterEvent(event); } void UBGraphicsWidgetItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { sendJSLeaveEvent(); - mDelegate->hoverLeaveEvent(event); + Delegate()->hoverLeaveEvent(event); } void UBGraphicsWidgetItem::sendJSEnterEvent() @@ -630,7 +624,7 @@ void UBGraphicsWidgetItem::mainFrameLoadFinished (bool ok) void UBGraphicsWidgetItem::wheelEvent(QGraphicsSceneWheelEvent *event) { - if (mDelegate->weelEvent(event)) + if (Delegate()->weelEvent(event)) { QGraphicsWebView::wheelEvent(event); event->accept(); @@ -647,7 +641,7 @@ QVariant UBGraphicsWidgetItem::itemChange(GraphicsItemChange change, const QVari scene()->setActiveWindow(0); } - QVariant newValue = mDelegate->itemChange(change, value); + QVariant newValue = Delegate()->itemChange(change, value); return QGraphicsWebView::itemChange(change, newValue); } @@ -662,8 +656,8 @@ void UBGraphicsWidgetItem::resize(const QSizeF & pSize) if (pSize != size()) { QGraphicsWebView::setMaximumSize(pSize.width(), pSize.height()); QGraphicsWebView::resize(pSize.width(), pSize.height()); - if (mDelegate) - mDelegate->positionHandles(); + if (Delegate()) + Delegate()->positionHandles(); if (scene()) scene()->setModified(true); } diff --git a/src/domain/UBGraphicsWidgetItem.h b/src/domain/UBGraphicsWidgetItem.h index ed11a3c8..10aeb2b7 100644 --- a/src/domain/UBGraphicsWidgetItem.h +++ b/src/domain/UBGraphicsWidgetItem.h @@ -57,8 +57,6 @@ class UBGraphicsWidgetItem : public QGraphicsWebView, public UBItem, public UBRe virtual void resize(const QSizeF & size); virtual QSizeF size() const; - virtual UBGraphicsItemDelegate* Delegate() const { return mDelegate;} - QUrl mainHtml(); void loadMainHtml(); QUrl widgetUrl(); @@ -82,7 +80,6 @@ class UBGraphicsWidgetItem : public QGraphicsWebView, public UBItem, public UBRe void removeDatastoreEntry(const QString& key); void removeAllDatastoreEntries(); - virtual void remove(); void removeScript(); void processDropEvent(QGraphicsSceneDragDropEvent *event); diff --git a/src/domain/UBItem.cpp b/src/domain/UBItem.cpp index 10d3d6ce..c9392e2f 100644 --- a/src/domain/UBItem.cpp +++ b/src/domain/UBItem.cpp @@ -38,6 +38,18 @@ UBItem::~UBItem() // NOOP } +UBGraphicsItem::~UBGraphicsItem() +{ + if (mDelegate!=NULL) + delete mDelegate; +} + +void UBGraphicsItem::setDelegate(UBGraphicsItemDelegate* delegate) +{ + Q_ASSERT(mDelegate==NULL); + mDelegate = delegate; +} + void UBGraphicsItem::assignZValue(QGraphicsItem *item, qreal value) { item->setZValue(value); @@ -54,6 +66,13 @@ bool UBGraphicsItem::isRotatable(QGraphicsItem *item) return item->data(UBGraphicsItemData::ItemRotatable).toBool(); } +void UBGraphicsItem::remove() +{ + if (Delegate()) + Delegate()->remove(this); +} + + UBGraphicsItemDelegate *UBGraphicsItem::Delegate(QGraphicsItem *pItem) { UBGraphicsItemDelegate *result = 0; diff --git a/src/domain/UBItem.h b/src/domain/UBItem.h index ca8a0f3b..99644f77 100644 --- a/src/domain/UBItem.h +++ b/src/domain/UBItem.h @@ -90,30 +90,30 @@ class UBItem class UBGraphicsItem { protected: - - UBGraphicsItem() : mDelegate(0) - { - // NOOP - } - UBGraphicsItemDelegate* mDelegate; - - virtual ~UBGraphicsItem() + UBGraphicsItem() : mDelegate(NULL) { // NOOP } + virtual ~UBGraphicsItem(); + void setDelegate(UBGraphicsItemDelegate* mDelegate); public: + inline UBGraphicsItemDelegate *Delegate() const { return mDelegate; } + static void assignZValue(QGraphicsItem*, qreal value); static bool isRotatable(QGraphicsItem *item); static bool isFlippable(QGraphicsItem *item); static UBGraphicsItemDelegate *Delegate(QGraphicsItem *pItem); - virtual UBGraphicsItemDelegate *Delegate() const = 0; + - virtual void remove() = 0; + void remove(); - virtual void clearSource(){;} + virtual void clearSource(){} + +private: + UBGraphicsItemDelegate* mDelegate; }; #endif // UBITEM_H diff --git a/src/tools/UBGraphicsCurtainItem.cpp b/src/tools/UBGraphicsCurtainItem.cpp index a84d0234..bdb06614 100644 --- a/src/tools/UBGraphicsCurtainItem.cpp +++ b/src/tools/UBGraphicsCurtainItem.cpp @@ -37,8 +37,9 @@ const QColor UBGraphicsCurtainItem::sDarkBackgroundOpaqueControlColor = QColor(6 UBGraphicsCurtainItem::UBGraphicsCurtainItem(QGraphicsItem* parent) : QGraphicsRectItem(parent) { - mDelegate = new UBGraphicsCurtainItemDelegate(this, 0); - mDelegate->init(); + UBGraphicsCurtainItemDelegate* delegate = new UBGraphicsCurtainItemDelegate(this, 0); + delegate->init(); + setDelegate(delegate); setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); @@ -56,7 +57,6 @@ UBGraphicsCurtainItem::UBGraphicsCurtainItem(QGraphicsItem* parent) UBGraphicsCurtainItem::~UBGraphicsCurtainItem() { - delete mDelegate; } QVariant UBGraphicsCurtainItem::itemChange(GraphicsItemChange change, const QVariant &value) @@ -64,9 +64,9 @@ QVariant UBGraphicsCurtainItem::itemChange(GraphicsItemChange change, const QVar QVariant newValue = value; - if (mDelegate) + if (Delegate()) { - newValue = mDelegate->itemChange(change, value); + newValue = Delegate()->itemChange(change, value); } return QGraphicsRectItem::itemChange(change, newValue); @@ -80,7 +80,7 @@ void UBGraphicsCurtainItem::setUuid(const QUuid &pUuid) void UBGraphicsCurtainItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mousePressEvent(event)) + if (Delegate()->mousePressEvent(event)) { //NOOP } @@ -92,7 +92,7 @@ void UBGraphicsCurtainItem::mousePressEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsCurtainItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (mDelegate->mouseMoveEvent(event)) + if (Delegate()->mouseMoveEvent(event)) { // NOOP; } @@ -104,7 +104,7 @@ void UBGraphicsCurtainItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) void UBGraphicsCurtainItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - mDelegate->mouseReleaseEvent(event); + Delegate()->mouseReleaseEvent(event); QGraphicsRectItem::mouseReleaseEvent(event); } @@ -171,13 +171,6 @@ QColor UBGraphicsCurtainItem::opaqueControlColor() const } -void UBGraphicsCurtainItem::remove() -{ - if (mDelegate) - mDelegate->remove(true); -} - - void UBGraphicsCurtainItem::triggerRemovedSignal() { emit removed(); diff --git a/src/tools/UBGraphicsCurtainItem.h b/src/tools/UBGraphicsCurtainItem.h index afef3960..9f5d36d4 100644 --- a/src/tools/UBGraphicsCurtainItem.h +++ b/src/tools/UBGraphicsCurtainItem.h @@ -44,11 +44,8 @@ class UBGraphicsCurtainItem : public QObject, public QGraphicsRectItem, public U virtual UBItem* deepCopy() const; virtual void copyItemParameters(UBItem *copy) const; - virtual void remove(); - //TODO UB 4.x not nice ... void triggerRemovedSignal(); - virtual UBGraphicsItemDelegate* Delegate() const {return mDelegate;} virtual void clearSource(){;} virtual void setUuid(const QUuid &pUuid); diff --git a/src/tools/UBGraphicsCurtainItemDelegate.h b/src/tools/UBGraphicsCurtainItemDelegate.h index e1435170..18523fd7 100644 --- a/src/tools/UBGraphicsCurtainItemDelegate.h +++ b/src/tools/UBGraphicsCurtainItemDelegate.h @@ -40,13 +40,12 @@ class UBGraphicsCurtainItemDelegate : public UBGraphicsItemDelegate virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value); virtual void positionHandles(); + virtual void init(); + public slots: virtual void remove(bool checked, bool canUndo = true); - protected: - virtual void init(); - }; #endif /* UBGRAPHICSCURTAINITEMDELEGATE_H_ */