Making widget as toll procedure was changed.

1st we remove original widget, then we disable undo stack, create a copy of widget and make it a tool. Then undo stack enables back. That widget has tool as parent, so we not need to manage him by scene.
preferencesAboutTextFull
Aleksei Kanash 12 years ago
parent c916c06668
commit a1e9772cb5
  1. 32
      src/board/UBBoardController.cpp
  2. 3
      src/board/UBBoardController.h
  3. 3
      src/domain/UBGraphicsScene.h
  4. 2
      src/domain/UBItem.h
  5. 11
      src/gui/UBToolWidget.cpp

@ -533,10 +533,12 @@ void UBBoardController::duplicateScene()
duplicateScene(mActiveSceneIndex); duplicateScene(mActiveSceneIndex);
} }
void UBBoardController::duplicateItem(UBItem *item) UBGraphicsItem *UBBoardController::duplicateItem(UBItem *item)
{ {
if (!item) if (!item)
return; return NULL;
UBGraphicsItem *retItem = NULL;
mLastCreatedItem = NULL; mLastCreatedItem = NULL;
@ -610,6 +612,7 @@ void UBBoardController::duplicateItem(UBItem *item)
case UBMimeType::Group: case UBMimeType::Group:
{ {
UBGraphicsGroupContainerItem* groupItem = dynamic_cast<UBGraphicsGroupContainerItem*>(item); UBGraphicsGroupContainerItem* groupItem = dynamic_cast<UBGraphicsGroupContainerItem*>(item);
UBGraphicsGroupContainerItem* duplicatedGroup = NULL;
if(groupItem){ if(groupItem){
QTransform groupTransform = groupItem->transform(); QTransform groupTransform = groupItem->transform();
groupItem->resetTransform(); groupItem->resetTransform();
@ -628,13 +631,13 @@ void UBBoardController::duplicateItem(UBItem *item)
if(!selItems.empty()){ if(!selItems.empty()){
// I don't like this solution but for now this is the only way I found. // I don't like this solution but for now this is the only way I found.
// Normally, at this state, only the duplicated group should be selected // Normally, at this state, only the duplicated group should be selected
UBGraphicsGroupContainerItem* duplicatedGroup = dynamic_cast<UBGraphicsGroupContainerItem*>(selItems.at(0)); duplicatedGroup = dynamic_cast<UBGraphicsGroupContainerItem*>(selItems.at(0));
if(NULL != duplicatedGroup){ if(NULL != duplicatedGroup){
duplicatedGroup->setTransform(groupTransform); duplicatedGroup->setTransform(groupTransform);
} }
} }
} }
return; retItem = dynamic_cast<UBGraphicsItem *>(duplicatedGroup);
break; break;
} }
@ -648,10 +651,13 @@ void UBBoardController::duplicateItem(UBItem *item)
mLastCreatedItem = gitem; mLastCreatedItem = gitem;
gitem->setSelected(true); gitem->setSelected(true);
} }
return; retItem = dynamic_cast<UBGraphicsItem *>(gitem);
}break; }break;
} }
if (retItem)
return retItem;
UBItem *createdItem = downloadFinished(true, sourceUrl, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false); UBItem *createdItem = downloadFinished(true, sourceUrl, contentTypeHeader, pData, itemPos, QSize(itemSize.width(), itemSize.height()), false);
if (createdItem) if (createdItem)
{ {
@ -663,7 +669,10 @@ void UBBoardController::duplicateItem(UBItem *item)
createdGitem->setPos(itemPos); createdGitem->setPos(itemPos);
mLastCreatedItem = dynamic_cast<QGraphicsItem*>(createdItem); mLastCreatedItem = dynamic_cast<QGraphicsItem*>(createdItem);
mLastCreatedItem->setSelected(true); mLastCreatedItem->setSelected(true);
retItem = dynamic_cast<UBGraphicsItem *>(createdItem);
} }
return retItem;
} }
void UBBoardController::deleteScene(int nIndex) void UBBoardController::deleteScene(int nIndex)
@ -2080,7 +2089,7 @@ UBGraphicsWidgetItem *UBBoardController::addW3cWidget(const QUrl &pUrl, const QP
QString snapshotPath = selectedDocument()->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + struuid + ".png"; QString snapshotPath = selectedDocument()->persistencePath() + "/" + UBPersistenceManager::widgetDirectory + "/" + struuid + ".png";
w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath)); w3cWidgetItem->setSnapshotPath(QUrl::fromLocalFile(snapshotPath));
UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem); UBGraphicsWidgetItem *tmpItem = dynamic_cast<UBGraphicsWidgetItem*>(w3cWidgetItem);
if (tmpItem) if (tmpItem && tmpItem->scene())
tmpItem->takeSnapshot().save(snapshotPath, "PNG"); tmpItem->takeSnapshot().save(snapshotPath, "PNG");
} }
@ -2293,17 +2302,24 @@ void UBBoardController::togglePodcast(bool checked)
UBPodcastController::instance()->toggleRecordingPalette(checked); UBPodcastController::instance()->toggleRecordingPalette(checked);
} }
void UBBoardController::moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicsWidget) void UBBoardController::moveGraphicsWidgetToControlView(UBGraphicsWidgetItem* graphicsWidget)
{ {
graphicsWidget->remove(); graphicsWidget->remove();
UBToolWidget *toolWidget = new UBToolWidget(graphicsWidget); mActiveScene->setURStackEnable(false);
UBGraphicsItem *toolW3C = duplicateItem(dynamic_cast<UBItem *>(graphicsWidget));
UBGraphicsWidgetItem *copyedGraphicsWidget = NULL;
if (UBGraphicsWidgetItem::Type == toolW3C->type())
copyedGraphicsWidget = static_cast<UBGraphicsWidgetItem *>(toolW3C);
UBToolWidget *toolWidget = new UBToolWidget(copyedGraphicsWidget);
mActiveScene->addItem(toolWidget); mActiveScene->addItem(toolWidget);
qreal ssf = 1 / UBApplication::boardController->systemScaleFactor(); qreal ssf = 1 / UBApplication::boardController->systemScaleFactor();
toolWidget->setScale(ssf); toolWidget->setScale(ssf);
toolWidget->setPos(graphicsWidget->scenePos()); toolWidget->setPos(graphicsWidget->scenePos());
mActiveScene->setURStackEnable(true);
} }

@ -40,6 +40,7 @@ class UBGraphicsAudioItem;
class UBGraphicsWidgetItem; class UBGraphicsWidgetItem;
class UBBoardPaletteManager; class UBBoardPaletteManager;
class UBItem; class UBItem;
class UBGraphicsItem;
class UBBoardController : public UBDocumentContainer class UBBoardController : public UBDocumentContainer
@ -158,7 +159,7 @@ class UBBoardController : public UBDocumentContainer
void moveSceneToIndex(int source, int target); void moveSceneToIndex(int source, int target);
void duplicateScene(int index); void duplicateScene(int index);
void duplicateItem(UBItem *item); UBGraphicsItem *duplicateItem(UBItem *item);
void deleteScene(int index); void deleteScene(int index);
bool cacheIsVisible() {return mCacheWidgetIsEnabled;} bool cacheIsVisible() {return mCacheWidgetIsEnabled;}

@ -109,8 +109,9 @@ class UBGraphicsScene: public UBCoreGraphicsScene, public UBItem
}; };
// tmp stub for divide addings scene objects from undo mechanism implementation // tmp stub for divide addings scene objects from undo mechanism implementation
bool isURStackIsEnabled(){ return mUndoRedoStackEnabled;}
void enableUndoRedoStack(){mUndoRedoStackEnabled = true;} void enableUndoRedoStack(){mUndoRedoStackEnabled = true;}
void setURStackEnable(bool enable){mUndoRedoStackEnabled = enable;}
bool isURStackIsEnabled(){return mUndoRedoStackEnabled;}
UBGraphicsScene(UBDocumentProxy *parent, bool enableUndoRedoStack = true); UBGraphicsScene(UBDocumentProxy *parent, bool enableUndoRedoStack = true);
virtual ~UBGraphicsScene(); virtual ~UBGraphicsScene();

@ -99,6 +99,8 @@ protected:
public: public:
virtual int type() const = 0;
inline UBGraphicsItemDelegate *Delegate() const { return mDelegate; } inline UBGraphicsItemDelegate *Delegate() const { return mDelegate; }
static void assignZValue(QGraphicsItem*, qreal value); static void assignZValue(QGraphicsItem*, qreal value);

@ -76,6 +76,15 @@ void UBToolWidget::initialize()
if(!sUnpinPixmap) if(!sUnpinPixmap)
sUnpinPixmap = new QPixmap(":/images/unpin.svg"); sUnpinPixmap = new QPixmap(":/images/unpin.svg");
UBGraphicsScene *wscene = dynamic_cast<UBGraphicsScene *>(mGraphicsWidgetItem->scene());
if (wscene)
{
wscene->removeItemFromDeletion(mGraphicsWidgetItem);
wscene->removeItem(mGraphicsWidgetItem);
}
mGraphicsWidgetItem->setParent(this);
QGraphicsLinearLayout *graphicsLayout = new QGraphicsLinearLayout(Qt::Vertical, this); QGraphicsLinearLayout *graphicsLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
mFrameWidth = UBSettings::settings()->objectFrameWidth; mFrameWidth = UBSettings::settings()->objectFrameWidth;
@ -83,7 +92,7 @@ void UBToolWidget::initialize()
graphicsLayout->setContentsMargins(mContentMargin, mContentMargin, mContentMargin, mContentMargin); graphicsLayout->setContentsMargins(mContentMargin, mContentMargin, mContentMargin, mContentMargin);
setPreferredSize(mGraphicsWidgetItem->preferredWidth() + mContentMargin * 2, mGraphicsWidgetItem->preferredHeight() + mContentMargin * 2); setPreferredSize(mGraphicsWidgetItem->preferredWidth() + mContentMargin * 2, mGraphicsWidgetItem->preferredHeight() + mContentMargin * 2);
mGraphicsWebView = new QGraphicsWebView(); mGraphicsWebView = new QGraphicsWebView(this);
connect(mGraphicsWebView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared())); connect(mGraphicsWebView->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(javaScriptWindowObjectCleared()));
mGraphicsWebView->load(mGraphicsWidgetItem->mainHtml()); mGraphicsWebView->load(mGraphicsWidgetItem->mainHtml());
graphicsLayout->addItem(mGraphicsWebView); graphicsLayout->addItem(mGraphicsWebView);

Loading…
Cancel
Save