From f2252033a4ed766406c7290502f0d6c224ab159c Mon Sep 17 00:00:00 2001 From: Aleksei Kanash Date: Mon, 27 Aug 2012 11:24:00 +0300 Subject: [PATCH 1/3] Mouse events handlers works for UB types and for some Qt types. Mouse events for other items hanlded by QGraphicsView. It solves some troubles with items selections and fixes Sankore-721. --- src/board/UBBoardView.cpp | 37 ++++++++++++++++++++++--------------- src/core/UB.h | 3 ++- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/board/UBBoardView.cpp b/src/board/UBBoardView.cpp index dc782e66..c2701f10 100644 --- a/src/board/UBBoardView.cpp +++ b/src/board/UBBoardView.cpp @@ -446,27 +446,32 @@ void UBBoardView::handleItemsSelection(QGraphicsItem *item) return; // delegate buttons shouldn't selected - if (DelegateButton::Type == movingItem->type()) + if (DelegateButton::Type == item->type()) return; // click on svg items (images on Frame) shouldn't change selection. - if (QGraphicsSvgItem::Type == movingItem->type()) + if (QGraphicsSvgItem::Type == item->type()) return; // Delegate frame shouldn't selected - if (UBGraphicsDelegateFrame::Type == movingItem->type()) + if (UBGraphicsDelegateFrame::Type == item->type()) return; // if we need to uwe multiple selection - we shouldn't deselect other items. if (!mMultipleSelectionIsEnabled) { - // if Item can be selected at mouse press - then we need to deselect all other items. - foreach(QGraphicsItem *iter_item, scene()->selectedItems()) + // here we need to determine what item is pressed. We should work + // only with UB items. + if ((UBGraphicsItemType::UserTypesCount > item->type()) && (item->type() > QGraphicsItem::UserType)) { - if (iter_item != item) + // if Item can be selected at mouse press - then we need to deselect all other items. + foreach(QGraphicsItem *iter_item, scene()->selectedItems()) { - iter_item->setSelected(false); + if (iter_item != item) + { + iter_item->setSelected(false); + } } } } @@ -495,6 +500,10 @@ Here we determines cases when items should to get mouse press event at pressing switch(item->type()) { + case UBGraphicsDelegateFrame::Type: + case QGraphicsSvgItem::Type: + return true; + case DelegateButton::Type: case UBGraphicsMediaItem::Type: return false; @@ -521,6 +530,7 @@ Here we determines cases when items should to get mouse press event at pressing return true; break; + case QGraphicsWebView::Type: case UBGraphicsWidgetItem::Type: if (currentTool == UBStylusTool::Selector && item->parentItem() && item->parentItem()->isSelected()) return true; @@ -529,9 +539,6 @@ Here we determines cases when items should to get mouse press event at pressing if (currentTool == UBStylusTool::Play) return true; break; - - default: - return true; } return false; @@ -561,12 +568,12 @@ bool UBBoardView::itemShouldReceiveSuspendedMousePressEvent(QGraphicsItem *item) case DelegateButton::Type: case UBGraphicsMediaItem::Type: return true; - - default: - return false; } - return false; + if (!dynamic_cast(item)) + return true; + else + return false; } bool UBBoardView::itemShouldBeMoved(QGraphicsItem *item) @@ -1066,7 +1073,7 @@ UBBoardView::mouseReleaseEvent (QMouseEvent *event) else if (movingItem) { - if (suspendedMousePressEvent && !movingItem->data(UBGraphicsItemData::ItemLocked).toBool()) + if (suspendedMousePressEvent) { QGraphicsView::mousePressEvent(suspendedMousePressEvent); // suspendedMousePressEvent is deleted by old Qt event loop movingItem = NULL; diff --git a/src/core/UB.h b/src/core/UB.h index bc3bd890..716df59c 100644 --- a/src/core/UB.h +++ b/src/core/UB.h @@ -147,7 +147,8 @@ struct UBGraphicsItemType cacheItemType, groupContainerType, ToolWidgetItemType, - GraphicsWidgetItemType + GraphicsWidgetItemType, + UserTypesCount // this line must be the last line in this enum because it is types counter. }; }; From 54c2243f8975afdfd21f8d115ca66025095cab1c Mon Sep 17 00:00:00 2001 From: shibakaneki Date: Mon, 27 Aug 2012 11:32:32 +0200 Subject: [PATCH 2/3] Fixed issue 1032 --- src/customWidgets/UBMediaWidget.cpp | 30 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/customWidgets/UBMediaWidget.cpp b/src/customWidgets/UBMediaWidget.cpp index 865bc29e..f06f89d9 100644 --- a/src/customWidgets/UBMediaWidget.cpp +++ b/src/customWidgets/UBMediaWidget.cpp @@ -114,17 +114,21 @@ eMediaType UBMediaWidget::mediaType() void UBMediaWidget::showEvent(QShowEvent* event) { - if(!mpVideoWidget){ - mpVideoWidget = new Phonon::VideoWidget(this); - mMediaLayout->addStretch(1); - mMediaLayout->addWidget(mpVideoWidget); - mMediaLayout->addStretch(1); - Phonon::createPath(mpMediaObject, mpVideoWidget); - adaptSizeToVideo(); - mpMediaObject->play(); - mpMediaObject->stop(); - } - QWidget::showEvent(event); + if(mType == eMediaType_Audio){ + return; + }else{ + if(!mpVideoWidget){ + mpVideoWidget = new Phonon::VideoWidget(this); + mMediaLayout->addStretch(1); + mMediaLayout->addWidget(mpVideoWidget); + mMediaLayout->addStretch(1); + Phonon::createPath(mpMediaObject, mpVideoWidget); + adaptSizeToVideo(); + mpMediaObject->play(); + mpMediaObject->stop(); + } + QWidget::showEvent(event); + } } void UBMediaWidget::hideEvent(QHideEvent* event) @@ -159,11 +163,11 @@ void UBMediaWidget::createMediaPlayer() }else if(eMediaType_Audio == mType){ mMediaLayout->setContentsMargins(10, 10, 10, 10); mpCover = new QLabel(mpMediaContainer); - mpMediaContainer->setStyleSheet(QString("background: none;")); + //mpMediaContainer->setStyleSheet(QString("background: none;")); setAudioCover(":images/libpalette/soundIcon.svg"); mpCover->setScaledContents(true); mMediaLayout->addStretch(1); - mMediaLayout->addWidget(mpCover, 0); + mMediaLayout->addWidget(mpCover); mMediaLayout->addStretch(1); mpAudioOutput = new Phonon::AudioOutput(Phonon::MusicCategory, this); Phonon::createPath(mpMediaObject, mpAudioOutput); From 75bced4117d7abd701fa882d0afeef0c88ceaf21 Mon Sep 17 00:00:00 2001 From: Ilia Ryabokon Date: Mon, 27 Aug 2012 13:04:53 +0300 Subject: [PATCH 3/3] Sankore 851 access to web instances --- src/web/UBWebController.cpp | 38 +++++++++++++++++++++++++------------ src/web/UBWebController.h | 2 +- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/web/UBWebController.cpp b/src/web/UBWebController.cpp index b126f9a6..ee69e3d3 100644 --- a/src/web/UBWebController.cpp +++ b/src/web/UBWebController.cpp @@ -64,6 +64,11 @@ UBWebController::UBWebController(UBMainWindow* mainWindow) { connect(mMainWindow->actionWebTools, SIGNAL(toggled(bool)), this, SLOT(toggleWebToolsPalette(bool))); + mStackedWidget = new QStackedWidget(); + mStackedWidget->addWidget(new QWidget(mStackedWidget)); + mStackedWidget->addWidget(new QWidget(mStackedWidget)); + mStackedWidget->addWidget(new QWidget(mStackedWidget)); + mMainWindow->addWebWidget(mStackedWidget); for (int i = 0; i < TotalNumberOfWebInstances; i += 1){ @@ -76,13 +81,15 @@ UBWebController::UBWebController(UBMainWindow* mainWindow) // TODO : Comment the next line to continue the Youtube button bugfix initialiazemOEmbedProviders(); - } UBWebController::~UBWebController() { // NOOP + if (mStackedWidget) { + delete mStackedWidget; + } } void UBWebController::initialiazemOEmbedProviders() @@ -119,6 +126,7 @@ void UBWebController::webBrowserInstance() mCurrentWebBrowser = &mWebBrowserList[WebBrowser]; mToolsCurrentPalette = &mToolsPaletteList[WebBrowser]; mToolsPalettePositionned = mToolsPalettePositionnedList[WebBrowser]; + if (!(*mCurrentWebBrowser)) { (*mCurrentWebBrowser) = new WBBrowserWindow(mMainWindow->centralWidget(), mMainWindow); @@ -134,6 +142,10 @@ void UBWebController::webBrowserInstance() mMainWindow->actionBookmarks->setVisible(showAddBookmarkButtons); mMainWindow->actionAddBookmark->setVisible(showAddBookmarkButtons); + mStackedWidget->setCurrentIndex(WebBrowser); + if (mStackedWidget->currentWidget()) { + mStackedWidget->removeWidget(mStackedWidget->currentWidget()); + } mStackedWidget->insertWidget(WebBrowser, (*mCurrentWebBrowser)); showTabAtTop(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool()); @@ -150,9 +162,8 @@ void UBWebController::webBrowserInstance() (*mCurrentWebBrowser)->tabWidget()->lineEdits()->show(); } - UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget()); - mStackedWidget->setCurrentIndex(WebBrowser); + UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget()); mMainWindow->switchToWebWidget(); setupPalettes(); @@ -165,7 +176,6 @@ void UBWebController::webBrowserInstance() if (mDownloadViewIsVisible) WBBrowserWindow::downloadManager()->show(); - } void UBWebController::tutorialWebInstance() @@ -191,13 +201,17 @@ void UBWebController::tutorialWebInstance() { mCurrentWebBrowser = &mWebBrowserList[Tutorial]; mToolsPalettePositionned = &mToolsPalettePositionnedList[Tutorial]; + if (!(*mCurrentWebBrowser)) { (*mCurrentWebBrowser) = new WBBrowserWindow(mMainWindow->centralWidget(), mMainWindow, true); connect((*mCurrentWebBrowser), SIGNAL(activeViewChange(QWidget*)), this, SLOT(setSourceWidget(QWidget*))); + mStackedWidget->setCurrentIndex(Tutorial); + if (mStackedWidget->currentWidget()) { + mStackedWidget->removeWidget(mStackedWidget->currentWidget()); + } mStackedWidget->insertWidget(Tutorial, (*mCurrentWebBrowser)); - adaptToolBar(); mTrapFlashController = new UBTrapFlashController((*mCurrentWebBrowser)); @@ -212,12 +226,9 @@ void UBWebController::tutorialWebInstance() else (*mCurrentWebBrowser)->loadUrl(currentUrl); - UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget()); - - mStackedWidget->setCurrentIndex(Tutorial); + UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget()); mMainWindow->switchToWebWidget(); - screenLayoutChanged(); bool mirroring = UBSettings::settings()->webShowPageImmediatelyOnMirroredScreen->get().toBool(); @@ -246,6 +257,7 @@ void UBWebController::paraschoolWebInstance() if (UBSettings::settings()->webUseExternalBrowser->get().toBool()){ QDesktopServices::openUrl(currentUrl); } + else { mCurrentWebBrowser = &mWebBrowserList[Paraschool]; mToolsCurrentPalette = &mToolsPaletteList[Paraschool]; @@ -254,6 +266,10 @@ void UBWebController::paraschoolWebInstance() (*mCurrentWebBrowser) = new WBBrowserWindow(mMainWindow->centralWidget(), mMainWindow, true); connect((*mCurrentWebBrowser), SIGNAL(activeViewChange(QWidget*)), this, SLOT(setSourceWidget(QWidget*))); + mStackedWidget->setCurrentIndex(Paraschool); + if (mStackedWidget->currentWidget()) { + mStackedWidget->removeWidget(mStackedWidget->currentWidget()); + } mStackedWidget->insertWidget(Paraschool, (*mCurrentWebBrowser)); adaptToolBar(); @@ -267,11 +283,9 @@ void UBWebController::paraschoolWebInstance() } - UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget()); - mStackedWidget->setCurrentIndex(Paraschool); + UBApplication::applicationController->setMirrorSourceWidget((*mCurrentWebBrowser)->paintWidget()); mMainWindow->switchToWebWidget(); - screenLayoutChanged(); bool mirroring = UBSettings::settings()->webShowPageImmediatelyOnMirroredScreen->get().toBool(); diff --git a/src/web/UBWebController.h b/src/web/UBWebController.h index 78950431..c0c9f6eb 100644 --- a/src/web/UBWebController.h +++ b/src/web/UBWebController.h @@ -104,7 +104,7 @@ class UBWebController : public QObject void lookForEmbedContent(QString* pHtml, QString tag, QString attribute, QList* pList); void checkForOEmbed(QString* pHtml); - QStackedWidget mStackedWidget[TotalNumberOfWebInstances]; + QStackedWidget *mStackedWidget; UBMainWindow *mMainWindow;