From 3be48374dc7864e0c5349ee29d9591178ff7db7d Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Wed, 17 Apr 2013 12:02:13 +0200 Subject: [PATCH] instanciate frame on demand --- src/adaptors/UBSvgSubsetAdaptor.cpp | 16 ++- src/domain/UBGraphicsItemDelegate.cpp | 142 +++++++++++++++++--------- src/domain/UBGraphicsItemDelegate.h | 3 +- 3 files changed, 112 insertions(+), 49 deletions(-) diff --git a/src/adaptors/UBSvgSubsetAdaptor.cpp b/src/adaptors/UBSvgSubsetAdaptor.cpp index def7c8d1..62e6cc18 100644 --- a/src/adaptors/UBSvgSubsetAdaptor.cpp +++ b/src/adaptors/UBSvgSubsetAdaptor.cpp @@ -384,6 +384,8 @@ UBSvgSubsetAdaptor::UBSvgSubsetReader::UBSvgSubsetReader(UBDocumentProxy* pProxy UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene() { qDebug() << "loadScene() : starting reading..."; + QTime time; + time.start(); mScene = 0; UBGraphicsWidgetItem *currentWidget = 0; @@ -992,6 +994,7 @@ UBGraphicsScene* UBSvgSubsetAdaptor::UBSvgSubsetReader::loadScene() mScene->enableUndoRedoStack(); qDebug() << "loadScene() : created scene and read file"; + qDebug() << "spent milliseconds: " << time.elapsed(); return mScene; } @@ -1003,7 +1006,6 @@ UBGraphicsGroupContainerItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::readGroup() QString id = mXmlReader.attributes().value(aId).toString(); id = id.mid(1,id.length()-2); - qDebug() << id; bool shouldSkipSubElements = false; if(mStrokesList.contains(id)) shouldSkipSubElements = true; @@ -1667,6 +1669,18 @@ UBGraphicsPolygonItem* UBSvgSubsetAdaptor::UBSvgSubsetReader::polygonItemFromPol if (!svgPoints.isNull()) { +// int lenght = strlen(svgPoints.toUtf8().constData()) + 1; +// char pippo[lenght]; +// memcpy(pippo,svgPoints.toUtf8().constData(),lenght); +// char* localPosition = (char*) &pippo[0]; +// do{ +// float x = atof(localPosition); +// localPosition = strchr(localPosition,',') + 1; +// float y = atof(localPosition); +// localPosition = strchrnul(localPosition,' '); +// polygon << QPointF(x,y); +// }while(localPosition - pippo > lenght - 5); + QStringList ts = svgPoints.toString().split(QLatin1Char(' '), QString::SkipEmptyParts); diff --git a/src/domain/UBGraphicsItemDelegate.cpp b/src/domain/UBGraphicsItemDelegate.cpp index da4e6110..425dfd7e 100644 --- a/src/domain/UBGraphicsItemDelegate.cpp +++ b/src/domain/UBGraphicsItemDelegate.cpp @@ -179,67 +179,114 @@ UBGraphicsItemDelegate::UBGraphicsItemDelegate(QGraphicsItem* pDelegated, QObjec void UBGraphicsItemDelegate::init() { +// if (mToolBarUsed) +// mToolBarItem = new UBGraphicsToolBarItem(mDelegated); + +// mFrame = new UBGraphicsDelegateFrame(this, QRectF(0, 0, 0, 0), mFrameWidth, mRespectRatio); +// mFrame->hide(); +// mFrame->setFlag(QGraphicsItem::ItemIsSelectable, true); + +// mDeleteButton = new DelegateButton(":/images/close.svg", mDelegated, mFrame, Qt::TopLeftSection); +// mButtons << mDeleteButton; +// connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(remove())); +// if (canDuplicate()){ +// mDuplicateButton = new DelegateButton(":/images/duplicate.svg", mDelegated, mFrame, Qt::TopLeftSection); +// connect(mDuplicateButton, SIGNAL(clicked(bool)), this, SLOT(duplicate())); +// mButtons << mDuplicateButton; +// } +// mMenuButton = new DelegateButton(":/images/menu.svg", mDelegated, mFrame, Qt::TopLeftSection); +// connect(mMenuButton, SIGNAL(clicked()), this, SLOT(showMenu())); +// mButtons << mMenuButton; + +// mZOrderUpButton = new DelegateButton(":/images/z_layer_up.svg", mDelegated, mFrame, Qt::BottomLeftSection); +// mZOrderUpButton->setShowProgressIndicator(true); +// connect(mZOrderUpButton, SIGNAL(clicked()), this, SLOT(increaseZLevelUp())); +// connect(mZOrderUpButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelTop())); +// mButtons << mZOrderUpButton; + +// mZOrderDownButton = new DelegateButton(":/images/z_layer_down.svg", mDelegated, mFrame, Qt::BottomLeftSection); +// mZOrderDownButton->setShowProgressIndicator(true); +// connect(mZOrderDownButton, SIGNAL(clicked()), this, SLOT(increaseZLevelDown())); +// connect(mZOrderDownButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelBottom())); +// mButtons << mZOrderDownButton; + +// buildButtons(); + +// foreach(DelegateButton* button, mButtons) +// { +// if (button->getSection() != Qt::TitleBarArea) +// { +// button->hide(); +// button->setFlag(QGraphicsItem::ItemIsSelectable, true); +// } +// } + +// //Wrapper function. Use it to set correct data() to QGraphicsItem as well +// setFlippable(false); +// setRotatable(false); +} + + +UBGraphicsItemDelegate::~UBGraphicsItemDelegate() +{ + if (UBApplication::boardController) + disconnect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged())); + // do not release mMimeData. + // the mMimeData is owned by QDrag since the setMimeData call as specified in the documentation +} + + +void UBGraphicsItemDelegate::decorate() +{ + if (mToolBarUsed) mToolBarItem = new UBGraphicsToolBarItem(mDelegated); - mFrame = new UBGraphicsDelegateFrame(this, QRectF(0, 0, 0, 0), mFrameWidth, mRespectRatio); - mFrame->hide(); - mFrame->setFlag(QGraphicsItem::ItemIsSelectable, true); - - mDeleteButton = new DelegateButton(":/images/close.svg", mDelegated, mFrame, Qt::TopLeftSection); - mButtons << mDeleteButton; - connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(remove())); - if (canDuplicate()){ - mDuplicateButton = new DelegateButton(":/images/duplicate.svg", mDelegated, mFrame, Qt::TopLeftSection); - connect(mDuplicateButton, SIGNAL(clicked(bool)), this, SLOT(duplicate())); - mButtons << mDuplicateButton; - } - mMenuButton = new DelegateButton(":/images/menu.svg", mDelegated, mFrame, Qt::TopLeftSection); - connect(mMenuButton, SIGNAL(clicked()), this, SLOT(showMenu())); - mButtons << mMenuButton; + if(!mFrame){ + mFrame = new UBGraphicsDelegateFrame(this, QRectF(0, 0, 0, 0), mFrameWidth, mRespectRatio); + mFrame->hide(); + mFrame->setFlag(QGraphicsItem::ItemIsSelectable, true); + + mDeleteButton = new DelegateButton(":/images/close.svg", mDelegated, mFrame, Qt::TopLeftSection); + mButtons << mDeleteButton; + connect(mDeleteButton, SIGNAL(clicked()), this, SLOT(remove())); + if (canDuplicate()){ + mDuplicateButton = new DelegateButton(":/images/duplicate.svg", mDelegated, mFrame, Qt::TopLeftSection); + connect(mDuplicateButton, SIGNAL(clicked(bool)), this, SLOT(duplicate())); + mButtons << mDuplicateButton; + } + mMenuButton = new DelegateButton(":/images/menu.svg", mDelegated, mFrame, Qt::TopLeftSection); + connect(mMenuButton, SIGNAL(clicked()), this, SLOT(showMenu())); + mButtons << mMenuButton; - mZOrderUpButton = new DelegateButton(":/images/z_layer_up.svg", mDelegated, mFrame, Qt::BottomLeftSection); - mZOrderUpButton->setShowProgressIndicator(true); - connect(mZOrderUpButton, SIGNAL(clicked()), this, SLOT(increaseZLevelUp())); - connect(mZOrderUpButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelTop())); - mButtons << mZOrderUpButton; + mZOrderUpButton = new DelegateButton(":/images/z_layer_up.svg", mDelegated, mFrame, Qt::BottomLeftSection); + mZOrderUpButton->setShowProgressIndicator(true); + connect(mZOrderUpButton, SIGNAL(clicked()), this, SLOT(increaseZLevelUp())); + connect(mZOrderUpButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelTop())); + mButtons << mZOrderUpButton; - mZOrderDownButton = new DelegateButton(":/images/z_layer_down.svg", mDelegated, mFrame, Qt::BottomLeftSection); - mZOrderDownButton->setShowProgressIndicator(true); - connect(mZOrderDownButton, SIGNAL(clicked()), this, SLOT(increaseZLevelDown())); - connect(mZOrderDownButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelBottom())); - mButtons << mZOrderDownButton; + mZOrderDownButton = new DelegateButton(":/images/z_layer_down.svg", mDelegated, mFrame, Qt::BottomLeftSection); + mZOrderDownButton->setShowProgressIndicator(true); + connect(mZOrderDownButton, SIGNAL(clicked()), this, SLOT(increaseZLevelDown())); + connect(mZOrderDownButton, SIGNAL(longClicked()), this, SLOT(increaseZlevelBottom())); + mButtons << mZOrderDownButton; - buildButtons(); + buildButtons(); - foreach(DelegateButton* button, mButtons) - { - if (button->getSection() != Qt::TitleBarArea) + foreach(DelegateButton* button, mButtons) { - button->hide(); - button->setFlag(QGraphicsItem::ItemIsSelectable, true); + if (button->getSection() != Qt::TitleBarArea) + { + button->hide(); + button->setFlag(QGraphicsItem::ItemIsSelectable, true); + } } } - - //Wrapper function. Use it to set correct data() to QGraphicsItem as well - setFlippable(false); - setRotatable(false); -} - - -UBGraphicsItemDelegate::~UBGraphicsItemDelegate() -{ - if (UBApplication::boardController) - disconnect(UBApplication::boardController, SIGNAL(zoomChanged(qreal)), this, SLOT(onZoomChanged())); - // do not release mMimeData. - // the mMimeData is owned by QDrag since the setMimeData call as specified in the documentation } QVariant UBGraphicsItemDelegate::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) { - if(change == QGraphicsItem::ItemChildAddedChange){ - - }else if (change == QGraphicsItem::ItemSelectedHasChanged) { + if (change == QGraphicsItem::ItemSelectedHasChanged) { bool ok; bool selected = value.toUInt(&ok); if (ok) { @@ -687,6 +734,7 @@ bool UBGraphicsItemDelegate::isFlippable() void UBGraphicsItemDelegate::updateFrame() { + decorate(); if (mFrame && !mFrame->scene() && mDelegated->scene()) { mDelegated->scene()->addItem(mFrame); diff --git a/src/domain/UBGraphicsItemDelegate.h b/src/domain/UBGraphicsItemDelegate.h index abe83f4e..616fb89f 100644 --- a/src/domain/UBGraphicsItemDelegate.h +++ b/src/domain/UBGraphicsItemDelegate.h @@ -189,7 +189,7 @@ class UBGraphicsToolBarItem : public QGraphicsRectItem, public QObject bool isVisibleOnBoard() const { return mVisible; } void setVisibleOnBoard(bool visible) { mVisible = visible; } bool isShifting() const { return mShifting; } - void setShifting(bool shifting) { mShifting = shifting; } + void setShifting(bool shifting) { mShifting = shifting; } QList itemsOnToolBar() const { return mItemsOnToolBar; } void setItemsOnToolBar(QList itemsOnToolBar) { mItemsOnToolBar = itemsOnToolBar;} int minWidth() { return mMinWidth; } @@ -319,6 +319,7 @@ protected slots: virtual void gotoContentSource(); private: + void decorate(); void updateFrame(); void updateButtons(bool showUpdated = false); inline void showHideRecurs(const QVariant &pShow, QGraphicsItem *pItem);