diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 54fe2a33..2025076a 100644 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -1,996 +1,1019 @@ -/* - * 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 3 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 "UBBoardPaletteManager.h" - -#include "frameworks/UBPlatformUtils.h" -#include "frameworks/UBFileSystemUtils.h" - -#include "core/UBApplication.h" -#include "core/UBApplicationController.h" -#include "core/UBSettings.h" -#include "core/UBSetting.h" -#include "core/UBDisplayManager.h" - -#include "gui/UBMainWindow.h" -#include "gui/UBStylusPalette.h" -#include "gui/UBKeyboardPalette.h" -#include "gui/UBToolWidget.h" -#include "gui/UBZoomPalette.h" -#include "gui/UBActionPalette.h" -#include "gui/UBFavoriteToolPalette.h" - - -#include "web/UBWebPage.h" -#include "web/UBWebController.h" -#include "web/browser/WBBrowserWindow.h" -#include "web/browser/WBTabWidget.h" -#include "web/browser/WBWebView.h" - -#include "desktop/UBDesktopAnnotationController.h" - - -#include "network/UBNetworkAccessManager.h" -#include "network/UBServerXMLHttpRequest.h" - -#include "domain/UBGraphicsScene.h" -#include "domain/UBAbstractWidget.h" -#include "domain/UBGraphicsPixmapItem.h" - -#include "document/UBDocumentProxy.h" -#include "podcast/UBPodcastController.h" -#include "board/UBDrawingController.h" - -#include "tools/UBToolsManager.h" - -#include "UBBoardController.h" - -#include "core/memcheck.h" - -UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardController* pBoardController) - : QObject(container) - , mKeyboardPalette(0) - , mContainer(container) - , mBoardControler(pBoardController) - , mStylusPalette(0) - , mZoomPalette(0) - , mLeftPalette(NULL) - , mRightPalette(NULL) - , mBackgroundsPalette(0) - , mToolsPalette(0) - , mAddItemPalette(0) - , mErasePalette(NULL) - , mPagePalette(NULL) - , mPendingPageButtonPressed(false) - , mPendingZoomButtonPressed(false) - , mPendingPanButtonPressed(false) - , mPendingEraseButtonPressed(false) - , mpPageNavigWidget(NULL) - , mpLibWidget(NULL) - , mpCachePropWidget(NULL) - , mpTeacherBarWidget(NULL) - , mpDownloadWidget(NULL) - , mpDesktopLibWidget(NULL) - , mDownloadInProgress(false) -{ - setupPalettes(); - connectPalettes(); -} - - -UBBoardPaletteManager::~UBBoardPaletteManager() -{ - delete mAddItemPalette; - - - if(NULL != mStylusPalette) - { - delete mStylusPalette; - mStylusPalette = NULL; - } - - if(NULL != mpDesktopLibWidget) - { - delete mpDesktopLibWidget; - mpDesktopLibWidget = NULL; - } -// if(NULL != mDesktopRightPalette) -// { -// delete mDesktopRightPalette; -// mDesktopRightPalette = NULL; -// } -} - -void UBBoardPaletteManager::initPalettesPosAtStartup() -{ - mStylusPalette->initPosition(); -} - -void UBBoardPaletteManager::setupLayout() -{ - -} - -/** - * \brief Set up the dock palette widgets - */ -void UBBoardPaletteManager::setupDockPaletteWidgets() -{ - - //------------------------------------------------// - // Create the widgets for the dock palettes - - mpPageNavigWidget = new UBPageNavigationWidget(); -// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpPageNavigWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); - - mpLibWidget = new UBLibWidget(); -// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpLibWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); - - mpCachePropWidget = new UBCachePropertiesWidget(); -// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpCachePropWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); - - mpTeacherBarWidget = new UBTeacherBarWidget(); -// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpTeacherBarWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); - - mpDownloadWidget = new UBDockDownloadWidget(); - - // Add the dock palettes - mLeftPalette = new UBLeftPalette(mContainer); - - // LEFT palette widgets - mLeftPalette->registerWidget(mpPageNavigWidget); - mLeftPalette->addTab(mpPageNavigWidget); - - // The teacher bar widget will always be there - mLeftPalette->registerWidget(mpTeacherBarWidget); - mLeftPalette->addTab(mpTeacherBarWidget); - - mLeftPalette->connectSignals(); - - mRightPalette = new UBRightPalette(mContainer); - // RIGHT palette widgets - mRightPalette->registerWidget(mpLibWidget); - mRightPalette->addTab(mpLibWidget); - // The cache widget will be visible only if a cache is put on the page - mRightPalette->registerWidget(mpCachePropWidget); - - // The download widget will be part of the right palette but - // will become visible only when the first download starts - mRightPalette->registerWidget(mpDownloadWidget); - mRightPalette->connectSignals(); - changeMode(eUBDockPaletteWidget_BOARD, true); - - // Hide the tabs that must be hidden - mRightPalette->removeTab(mpDownloadWidget); - mRightPalette->removeTab(mpCachePropWidget); - -// mLeftPalette->showTabWidget(0); -// mRightPalette->showTabWidget(0); -// -// //------------------------------------------------// -} - -void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMode mainMode) -{ -// Board = 0, Internet, Document, Tutorial, ParaschoolEditor, WebDocument - - switch( mainMode ) - { - case UBApplicationController::Board: - { - // call changeMode only when switch NOT from desktop mode - if(!UBApplication::applicationController->isShowingDesktop()) - changeMode(eUBDockPaletteWidget_BOARD); - } - break; - - case UBApplicationController::Tutorial: - { - if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) - mKeyboardPalette->hide(); - } - break; - - case UBApplicationController::Internet: - changeMode(eUBDockPaletteWidget_WEB); - break; - - case UBApplicationController::Document: - changeMode(eUBDockPaletteWidget_DOCUMENT); - break; - - default: - { - if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) - mKeyboardPalette->hide(); - } - break; - } -} - -void UBBoardPaletteManager::slot_changeDesktopMode(bool isDesktop) -{ - UBApplicationController::MainMode currMode = UBApplication::applicationController->displayMode(); - if(!isDesktop) - { - switch( currMode ) - { - case UBApplicationController::Board: - changeMode(eUBDockPaletteWidget_BOARD); - break; - - default: - break; - } - } - else - changeMode(eUBDockPaletteWidget_DESKTOP); -} - -void UBBoardPaletteManager::setupPalettes() -{ - - if (UBPlatformUtils::hasVirtualKeyboard()) - { - mKeyboardPalette = new UBKeyboardPalette(0); -#ifndef Q_WS_WIN - connect(mKeyboardPalette, SIGNAL(closed()), mKeyboardPalette, SLOT(onDeactivated())); -#endif -#ifndef Q_WS_MAC - // mKeyboardPalette->setParent(mContainer); -#endif - } - - setupDockPaletteWidgets(); - - - // Add the other palettes - mStylusPalette = new UBStylusPalette(mContainer, UBSettings::settings()->appToolBarOrientationVertical->get().toBool() ? Qt::Vertical : Qt::Horizontal); - connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int))); - mStylusPalette->show(); // always show stylus palette at startup - - mZoomPalette = new UBZoomPalette(mContainer); - - QList backgroundsActions; - - backgroundsActions << UBApplication::mainWindow->actionPlainLightBackground; - backgroundsActions << UBApplication::mainWindow->actionCrossedLightBackground; - backgroundsActions << UBApplication::mainWindow->actionPlainDarkBackground; - backgroundsActions << UBApplication::mainWindow->actionCrossedDarkBackground; - - mBackgroundsPalette = new UBActionPalette(backgroundsActions, Qt::Horizontal , mContainer); - mBackgroundsPalette->setButtonIconSize(QSize(128, 128)); - mBackgroundsPalette->groupActions(); - mBackgroundsPalette->setClosable(true); - mBackgroundsPalette->setAutoClose(true); - mBackgroundsPalette->adjustSizeAndPosition(); - mBackgroundsPalette->hide(); - - QList addItemActions; - - addItemActions << UBApplication::mainWindow->actionAddItemToCurrentPage; - addItemActions << UBApplication::mainWindow->actionAddItemToNewPage; - addItemActions << UBApplication::mainWindow->actionAddItemToLibrary; - - mAddItemPalette = new UBActionPalette(addItemActions, Qt::Horizontal, 0); - mAddItemPalette->setButtonIconSize(QSize(128, 128)); - mAddItemPalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - mAddItemPalette->groupActions(); - mAddItemPalette->setClosable(true); - mAddItemPalette->adjustSizeAndPosition(); - mAddItemPalette->hide(); - - QList eraseActions; - - eraseActions << UBApplication::mainWindow->actionEraseAnnotations; - eraseActions << UBApplication::mainWindow->actionEraseItems; - eraseActions << UBApplication::mainWindow->actionClearPage; - - mErasePalette = new UBActionPalette(eraseActions, Qt::Horizontal , mContainer); - mErasePalette->setButtonIconSize(QSize(128, 128)); - mErasePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - mErasePalette->groupActions(); - mErasePalette->setClosable(true); - mErasePalette->adjustSizeAndPosition(); - mErasePalette->hide(); - - QList pageActions; - - pageActions << UBApplication::mainWindow->actionNewPage; - pageActions << UBApplication::mainWindow->actionDuplicatePage; - pageActions << UBApplication::mainWindow->actionImportPage; - - mPagePalette = new UBActionPalette(pageActions, Qt::Horizontal , mContainer); - mPagePalette->setButtonIconSize(QSize(128, 128)); - mPagePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); - mPagePalette->groupActions(); - mPagePalette->setClosable(true); - mPagePalette->adjustSizeAndPosition(); - mPagePalette->hide(); - - connect(UBSettings::settings()->appToolBarOrientationVertical, SIGNAL(changed(QVariant)), this, SLOT(changeStylusPaletteOrientation(QVariant))); -} - -void UBBoardPaletteManager::pagePaletteButtonPressed() -{ - mPageButtonPressedTime = QTime::currentTime(); - - mPendingPageButtonPressed = true; - QTimer::singleShot(1000, this, SLOT(pagePaletteButtonReleased())); -} - - -void UBBoardPaletteManager::pagePaletteButtonReleased() -{ - if (mPendingPageButtonPressed) - { - if( mPageButtonPressedTime.msecsTo(QTime::currentTime()) > 900) - { - togglePagePalette(true); - } - else - { - UBApplication::mainWindow->actionNewPage->trigger(); - } - - mPendingPageButtonPressed = false; - } -} - -void UBBoardPaletteManager::erasePaletteButtonPressed() -{ - mEraseButtonPressedTime = QTime::currentTime(); - - mPendingEraseButtonPressed = true; - QTimer::singleShot(1000, this, SLOT(erasePaletteButtonReleased())); -} - - -void UBBoardPaletteManager::erasePaletteButtonReleased() -{ - if (mPendingEraseButtonPressed) - { - if( mEraseButtonPressedTime.msecsTo(QTime::currentTime()) > 900) - { - toggleErasePalette(true); - } - else - { - UBApplication::mainWindow->actionClearPage->trigger(); - } - - mPendingEraseButtonPressed = false; - } -} - - - -void UBBoardPaletteManager::linkClicked(const QUrl& url) -{ - UBApplication::applicationController->showInternet(); - UBApplication::webController->loadUrl(url); -} - - -void UBBoardPaletteManager::purchaseLinkActivated(const QString& link) -{ - UBApplication::applicationController->showInternet(); - UBApplication::webController->loadUrl(QUrl(link)); -} - -void UBBoardPaletteManager::connectPalettes() -{ - connect(UBApplication::mainWindow->actionStylus, SIGNAL(toggled(bool)), this, SLOT(toggleStylusPalette(bool))); - - foreach(QWidget *widget, UBApplication::mainWindow->actionZoomIn->associatedWidgets()) - { - QAbstractButton *button = qobject_cast(widget); - if (button) - { - connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed())); - connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased())); - } - } - - foreach(QWidget *widget, UBApplication::mainWindow->actionZoomOut->associatedWidgets()) - { - QAbstractButton *button = qobject_cast(widget); - if (button) - { - connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed())); - connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased())); - } - } - - foreach(QWidget *widget, UBApplication::mainWindow->actionHand->associatedWidgets()) - { - QAbstractButton *button = qobject_cast(widget); - if (button) - { - connect(button, SIGNAL(pressed()), this, SLOT(panButtonPressed())); - connect(button, SIGNAL(released()), this, SLOT(panButtonReleased())); - } - } - - connect(UBApplication::mainWindow->actionBackgrounds, SIGNAL(toggled(bool)), this, SLOT(toggleBackgroundPalette(bool))); - connect(mBackgroundsPalette, SIGNAL(closed()), this, SLOT(backgroundPaletteClosed())); - - connect(UBApplication::mainWindow->actionPlainLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); - connect(UBApplication::mainWindow->actionCrossedLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); - connect(UBApplication::mainWindow->actionPlainDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); - connect(UBApplication::mainWindow->actionCrossedDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); - connect(UBApplication::mainWindow->actionPodcast, SIGNAL(triggered(bool)), this, SLOT(tooglePodcastPalette(bool))); - - connect(UBApplication::mainWindow->actionAddItemToCurrentPage, SIGNAL(triggered()), this, SLOT(addItemToCurrentPage())); - connect(UBApplication::mainWindow->actionAddItemToNewPage, SIGNAL(triggered()), this, SLOT(addItemToNewPage())); - connect(UBApplication::mainWindow->actionAddItemToLibrary, SIGNAL(triggered()), this, SLOT(addItemToLibrary())); - - connect(UBApplication::mainWindow->actionEraseItems, SIGNAL(triggered()), mErasePalette, SLOT(close())); - connect(UBApplication::mainWindow->actionEraseAnnotations, SIGNAL(triggered()), mErasePalette, SLOT(close())); - connect(UBApplication::mainWindow->actionClearPage, SIGNAL(triggered()), mErasePalette, SLOT(close())); - connect(mErasePalette, SIGNAL(closed()), this, SLOT(erasePaletteClosed())); - - foreach(QWidget *widget, UBApplication::mainWindow->actionErase->associatedWidgets()) - { - QAbstractButton *button = qobject_cast(widget); - if (button) - { - connect(button, SIGNAL(pressed()), this, SLOT(erasePaletteButtonPressed())); - connect(button, SIGNAL(released()), this, SLOT(erasePaletteButtonReleased())); - } - } - - connect(UBApplication::mainWindow->actionNewPage, SIGNAL(triggered()), mPagePalette, SLOT(close())); - connect(UBApplication::mainWindow->actionDuplicatePage, SIGNAL(triggered()), mPagePalette, SLOT(close())); - connect(UBApplication::mainWindow->actionImportPage, SIGNAL(triggered()), mPagePalette, SLOT(close())); - connect(mPagePalette, SIGNAL(closed()), this, SLOT(pagePaletteClosed())); - - foreach(QWidget *widget, UBApplication::mainWindow->actionPages->associatedWidgets()) - { - QAbstractButton *button = qobject_cast(widget); - if (button) - { - connect(button, SIGNAL(pressed()), this, SLOT(pagePaletteButtonPressed())); - connect(button, SIGNAL(released()), this, SLOT(pagePaletteButtonReleased())); - } - } - -} - - -bool isFirstResized = true; -void UBBoardPaletteManager::containerResized() -{ - int innerMargin = UBSettings::boardMargin; - - int userLeft = innerMargin; - int userWidth = mContainer->width() - (2 * innerMargin); - int userTop = innerMargin; - int userHeight = mContainer->height() - (2 * innerMargin); - - if(mStylusPalette) - { - mStylusPalette->move(userLeft, userTop); - mStylusPalette->adjustSizeAndPosition(); - mStylusPalette->initPosition(); - } - - if(mZoomPalette) - { - mZoomPalette->move(userLeft + userWidth - mZoomPalette->width() - , userTop + userHeight /*- mPageNumberPalette->height()*/ - innerMargin - mZoomPalette->height()); - mZoomPalette->adjustSizeAndPosition(); - } - - if (isFirstResized && mKeyboardPalette && mKeyboardPalette->parent() == UBApplication::boardController->controlContainer()) - { - isFirstResized = false; - mKeyboardPalette->move(userLeft + (userWidth - mKeyboardPalette->width())/2, - userTop + (userHeight - mKeyboardPalette->height())/2); - mKeyboardPalette->adjustSizeAndPosition(); - } - - if(mLeftPalette) - { - mLeftPalette->resize(mLeftPalette->width()-1, mContainer->height()); - mLeftPalette->resize(mLeftPalette->width(), mContainer->height()); - } - - if(mRightPalette) - { - mRightPalette->resize(mRightPalette->width()-1, mContainer->height()); - mRightPalette->resize(mRightPalette->width(), mContainer->height()); - } -} - - -void UBBoardPaletteManager::changeBackground() -{ - if (UBApplication::mainWindow->actionCrossedLightBackground->isChecked()) - UBApplication::boardController->changeBackground(false, true); - else if (UBApplication::mainWindow->actionPlainDarkBackground->isChecked()) - UBApplication::boardController->changeBackground(true, false); - else if (UBApplication::mainWindow->actionCrossedDarkBackground->isChecked()) - UBApplication::boardController->changeBackground(true, true); - else - UBApplication::boardController->changeBackground(false, false); - - UBApplication::mainWindow->actionBackgrounds->setChecked(false); -} - - -void UBBoardPaletteManager::activeSceneChanged() -{ - UBGraphicsScene *activeScene = UBApplication::boardController->activeScene(); - int pageIndex = UBApplication::boardController->activeSceneIndex(); - - if (mStylusPalette) - connect(mStylusPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser())); - - if (mpPageNavigWidget) - { - mpPageNavigWidget->setPageNumber(pageIndex + 1, activeScene->document()->pageCount()); - } - - if (mZoomPalette) - connect(mZoomPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser())); - - if (mBackgroundsPalette) - connect(mBackgroundsPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser())); -} - - -void UBBoardPaletteManager::toggleBackgroundPalette(bool checked) -{ - mBackgroundsPalette->setVisible(checked); - - if (checked) - { - UBApplication::mainWindow->actionErase->setChecked(false); - UBApplication::mainWindow->actionNewPage->setChecked(false); - - mBackgroundsPalette->adjustSizeAndPosition(); - mBackgroundsPalette->move((mContainer->width() - mBackgroundsPalette->width()) / 2, - (mContainer->height() - mBackgroundsPalette->height()) / 5); - } -} - - -void UBBoardPaletteManager::backgroundPaletteClosed() -{ - UBApplication::mainWindow->actionBackgrounds->setChecked(false); -} - - -void UBBoardPaletteManager::toggleStylusPalette(bool checked) -{ - mStylusPalette->setVisible(checked); -} - - -void UBBoardPaletteManager::toggleErasePalette(bool checked) -{ - mErasePalette->setVisible(checked); - if (checked) - { - UBApplication::mainWindow->actionBackgrounds->setChecked(false); - UBApplication::mainWindow->actionNewPage->setChecked(false); - - mErasePalette->adjustSizeAndPosition(); - mErasePalette->move((mContainer->width() - mErasePalette->width()) / 2, - (mContainer->height() - mErasePalette->height()) / 5); - } -} - - -void UBBoardPaletteManager::erasePaletteClosed() -{ - UBApplication::mainWindow->actionErase->setChecked(false); -} - - -void UBBoardPaletteManager::togglePagePalette(bool checked) -{ - mPagePalette->setVisible(checked); - if (checked) - { - UBApplication::mainWindow->actionBackgrounds->setChecked(false); - UBApplication::mainWindow->actionErase->setChecked(false); - - mPagePalette->adjustSizeAndPosition(); - mPagePalette->move((mContainer->width() - mPagePalette->width()) / 2, - (mContainer->height() - mPagePalette->height()) / 5); - } -} - - -void UBBoardPaletteManager::pagePaletteClosed() -{ - UBApplication::mainWindow->actionPages->setChecked(false); -} - - -void UBBoardPaletteManager::tooglePodcastPalette(bool checked) -{ - UBPodcastController::instance()->toggleRecordingPalette(checked); -} - - -void UBBoardPaletteManager::addItem(const QUrl& pUrl) -{ - mItemUrl = pUrl; - mPixmap = QPixmap(); - mPos = QPointF(0, 0); - mScaleFactor = 1.; - - mAddItemPalette->show(); - mAddItemPalette->adjustSizeAndPosition(); - - QRect controlGeo = UBApplication::applicationController->displayManager()->controlGeometry(); - - mAddItemPalette->move(controlGeo.x() + ((controlGeo.width() - mAddItemPalette->geometry().width()) / 2), - (controlGeo.y() + (controlGeo.height() - mAddItemPalette->geometry().height()) / 5)); - -} - -void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool isInit) -{ - bool rightPaletteVisible = mRightPalette->switchMode(newMode); - bool leftPaletteVisible = mLeftPalette->switchMode(newMode); - - switch( newMode ) - { - case eUBDockPaletteWidget_BOARD: - { - mLeftPalette->assignParent(UBApplication::boardController->controlContainer()); - mRightPalette->assignParent(UBApplication::boardController->controlContainer()); - if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) - { - - if(mKeyboardPalette->m_isVisible) - { - mKeyboardPalette->hide(); - mKeyboardPalette->setParent(UBApplication::boardController->controlContainer()); - mKeyboardPalette->show(); - } - else - mKeyboardPalette->setParent(UBApplication::boardController->controlContainer()); - } - - mLeftPalette->setVisible(leftPaletteVisible); - mRightPalette->setVisible(rightPaletteVisible); -#ifdef Q_WS_WIN - if (rightPaletteVisible) - mRightPalette->setAdditionalVOffset(0); -#endif - - if( !isInit ) - containerResized(); - } - break; - - case eUBDockPaletteWidget_DESKTOP: - { - mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); - mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); - if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) - { - - if(mKeyboardPalette->m_isVisible) - { - mKeyboardPalette->hide(); -#ifndef Q_WS_X11 - mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); -#else - mKeyboardPalette->setParent(0); -#endif - mKeyboardPalette->show(); - } - else - mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); - } - - mLeftPalette->setVisible(leftPaletteVisible); - mRightPalette->setVisible(rightPaletteVisible); -#ifdef Q_WS_WIN - if (rightPaletteVisible) - mRightPalette->setAdditionalVOffset(30); -#endif - - if( !isInit ) - UBApplication::applicationController->uninotesController()->TransparentWidgetResized(); - } - break; - - case eUBDockPaletteWidget_WEB: - { - if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) - { - WBBrowserWindow* brWnd = UBApplication::webController->GetCurrentWebBrowser(); - - if(mKeyboardPalette->m_isVisible) - { - mKeyboardPalette->hide(); - mKeyboardPalette->setParent(brWnd); - mKeyboardPalette->show(); - } - else - mKeyboardPalette->setParent(brWnd); - } - - } - break; - - default: - { - mLeftPalette->setVisible(leftPaletteVisible); - mRightPalette->setVisible(rightPaletteVisible); - mLeftPalette->assignParent(0); - mRightPalette->assignParent(0); - if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) - { - - if(mKeyboardPalette->m_isVisible) - { - mKeyboardPalette->hide(); - mKeyboardPalette->setParent(0); - mKeyboardPalette->show(); - } - else - mKeyboardPalette->setParent(0); - } - } - break; - } - - if( !isInit ) - UBApplication::boardController->notifyPageChanged(); - - emit signal_changeMode(newMode); -} - -/* -void UBBoardPaletteManager::slot_changeMode(eUBDockPaletteWidgetMode newMode) -{ - emit signal_changeMode(newMode); -} -*/ - -void UBBoardPaletteManager::addItem(const QPixmap& pPixmap, const QPointF& pos, qreal scaleFactor, const QUrl& sourceUrl) -{ - mItemUrl = sourceUrl; - mPixmap = pPixmap; - mPos = pos; - mScaleFactor = scaleFactor; - - QRect controlGeo = UBApplication::applicationController->displayManager()->controlGeometry(); - - mAddItemPalette->show(); - mAddItemPalette->adjustSizeAndPosition(); - - mAddItemPalette->move(controlGeo.x() + ((controlGeo.width() - mAddItemPalette->geometry().width()) / 2), - (controlGeo.y() + (controlGeo.height() - mAddItemPalette->geometry().height()) / 5)); -} - - -void UBBoardPaletteManager::addItemToCurrentPage() -{ - UBApplication::applicationController->showBoard(); - mAddItemPalette->hide(); - if(mPixmap.isNull()) - UBApplication::boardController->downloadURL(mItemUrl); - else - { - UBGraphicsPixmapItem* item = UBApplication::boardController->activeScene()->addPixmap(mPixmap, mPos, mScaleFactor); - - item->setSourceUrl(mItemUrl); - item->setSelected(true); - - UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); - } -} - - -void UBBoardPaletteManager::addItemToNewPage() -{ - UBApplication::boardController->addScene(); - addItemToCurrentPage(); -} - - -void UBBoardPaletteManager::addItemToLibrary() -{ - if(mPixmap.isNull()) - { - mPixmap = QPixmap(mItemUrl.toLocalFile()); - } - - if(!mPixmap.isNull()) - { - QString imageDir = UBSettings::settings()->defaultUserImagesDirectory(); - - if(mScaleFactor != 1.) - { - mPixmap = mPixmap.scaled(mScaleFactor * mPixmap.width(), mScaleFactor* mPixmap.height() - , Qt::KeepAspectRatio, Qt::SmoothTransformation); - } - QImage image = mPixmap.toImage(); - - if(NULL != mpLibWidget) - { - mpLibWidget->libNavigator()->libraryWidget()->libraryController()->importImageOnLibrary(image); - } - } - else - { - UBApplication::showMessage(tr("Error Adding Image to Library")); - } - - mAddItemPalette->hide(); -} - -void UBBoardPaletteManager::zoomButtonPressed() -{ - mZoomButtonPressedTime = QTime::currentTime(); - - mPendingZoomButtonPressed = true; - QTimer::singleShot(1000, this, SLOT(zoomButtonReleased())); -} - - -void UBBoardPaletteManager::zoomButtonReleased() -{ - if (mPendingZoomButtonPressed) - { - if(mZoomButtonPressedTime.msecsTo(QTime::currentTime()) > 900) - { - mBoardControler->zoomRestore(); - } - - mPendingZoomButtonPressed = false; - } -} - -void UBBoardPaletteManager::panButtonPressed() -{ - mPanButtonPressedTime = QTime::currentTime(); - - mPendingPanButtonPressed = true; - QTimer::singleShot(1000, this, SLOT(panButtonReleased())); -} - - -void UBBoardPaletteManager::panButtonReleased() -{ - if (mPendingPanButtonPressed) - { - if(mPanButtonPressedTime.msecsTo(QTime::currentTime()) > 900) - { - mBoardControler->centerRestore(); - } - - mPendingPanButtonPressed = false; - } -} - -void UBBoardPaletteManager::showVirtualKeyboard(bool show) -{ - if (mKeyboardPalette) - mKeyboardPalette->setVisible(show); -} - -void UBBoardPaletteManager::changeStylusPaletteOrientation(QVariant var) -{ - bool bVertical = var.toBool(); - bool bVisible = mStylusPalette->isVisible(); - - // Clean the old palette - if(NULL != mStylusPalette) - { - // TODO : check why this line creates a crash in the application. - delete mStylusPalette; - } - - // Create the new palette - if(bVertical) - { - mStylusPalette = new UBStylusPalette(mContainer, Qt::Vertical); - } - else - { - mStylusPalette = new UBStylusPalette(mContainer, Qt::Horizontal); - } - - connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int))); - mStylusPalette->setVisible(bVisible); // always show stylus palette at startup -} - -/* -UBRightPalette* UBBoardPaletteManager::createDesktopRightPalette(QWidget* parent) -{ - mpDesktopLibWidget = new UBLibWidget(); - mDesktopRightPalette = new UBRightPalette(parent); - mDesktopRightPalette->registerWidget(mpDesktopLibWidget); - mDesktopRightPalette->addTabWidget(mpDesktopLibWidget); - mDesktopRightPalette->connectSignals(); - - return mDesktopRightPalette; -} -*/ - -void UBBoardPaletteManager::connectToDocumentController() -{ - emit connectToDocController(); -} - -void UBBoardPaletteManager::refreshPalettes() -{ - mRightPalette->update(); - mLeftPalette->update(); -} - -void UBBoardPaletteManager::startDownloads() -{ - if(!mDownloadInProgress) - { - mDownloadInProgress = true; - mpDownloadWidget->setVisibleState(true); - mRightPalette->addTab(mpDownloadWidget); - } -} - -void UBBoardPaletteManager::stopDownloads() -{ - if(mDownloadInProgress) - { - mDownloadInProgress = false; - mpDownloadWidget->setVisibleState(false); - mRightPalette->removeTab(mpDownloadWidget); - } -} - -QRect UBBoardPaletteManager::GetFreeRectGlobalCoords() const -{ - QPoint topLeft, bottomRight; - if (mLeftPalette) { - int x = mLeftPalette->getTabPaletteRect().topRight().x(); - int y = 0; - if (x || y) { - topLeft.setX(x); - topLeft.setY(y); - topLeft = mContainer->mapToGlobal(topLeft); - } - } - if (mRightPalette) { - int x = mRightPalette->getTabPaletteRect().topLeft().x(); - int y = mRightPalette->height(); - if (x || y) { - bottomRight.setX(x); - bottomRight.setY(y); - bottomRight = mContainer->mapToGlobal(bottomRight); - } - } - return QRect(topLeft, bottomRight); -} - -void UBBoardPaletteManager::ForceTeacherBarToSaveData() -{ - mpTeacherBarWidget->saveContent(); -} - -void UBBoardPaletteManager::ForceTeacherBarToLoadData() -{ - mpTeacherBarWidget->loadContent(); -} +/* + * 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 3 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 "UBBoardPaletteManager.h" + +#include "frameworks/UBPlatformUtils.h" +#include "frameworks/UBFileSystemUtils.h" + +#include "core/UBApplication.h" +#include "core/UBApplicationController.h" +#include "core/UBSettings.h" +#include "core/UBSetting.h" +#include "core/UBDisplayManager.h" + +#include "gui/UBMainWindow.h" +#include "gui/UBStylusPalette.h" +#include "gui/UBKeyboardPalette.h" +#include "gui/UBToolWidget.h" +#include "gui/UBZoomPalette.h" +#include "gui/UBActionPalette.h" +#include "gui/UBFavoriteToolPalette.h" + + +#include "web/UBWebPage.h" +#include "web/UBWebController.h" +#include "web/browser/WBBrowserWindow.h" +#include "web/browser/WBTabWidget.h" +#include "web/browser/WBWebView.h" + +#include "desktop/UBDesktopAnnotationController.h" + + +#include "network/UBNetworkAccessManager.h" +#include "network/UBServerXMLHttpRequest.h" + +#include "domain/UBGraphicsScene.h" +#include "domain/UBAbstractWidget.h" +#include "domain/UBGraphicsPixmapItem.h" + +#include "document/UBDocumentProxy.h" +#include "podcast/UBPodcastController.h" +#include "board/UBDrawingController.h" + +#include "tools/UBToolsManager.h" + +#include "UBBoardController.h" + +#include "core/memcheck.h" + +#include "document/UBDocumentController.h" + +UBBoardPaletteManager::UBBoardPaletteManager(QWidget* container, UBBoardController* pBoardController) + : QObject(container) + , mKeyboardPalette(0) + , mContainer(container) + , mBoardControler(pBoardController) + , mStylusPalette(0) + , mZoomPalette(0) + , mLeftPalette(NULL) + , mRightPalette(NULL) + , mBackgroundsPalette(0) + , mToolsPalette(0) + , mAddItemPalette(0) + , mErasePalette(NULL) + , mPagePalette(NULL) + , mPendingPageButtonPressed(false) + , mPendingZoomButtonPressed(false) + , mPendingPanButtonPressed(false) + , mPendingEraseButtonPressed(false) + , mpPageNavigWidget(NULL) + , mpLibWidget(NULL) + , mpCachePropWidget(NULL) + , mpTeacherBarWidget(NULL) + , mpDownloadWidget(NULL) + , mpDesktopLibWidget(NULL) + , mDownloadInProgress(false) +{ + setupPalettes(); + connectPalettes(); +} + + +UBBoardPaletteManager::~UBBoardPaletteManager() +{ + delete mAddItemPalette; + + + if(NULL != mStylusPalette) + { + delete mStylusPalette; + mStylusPalette = NULL; + } + + if(NULL != mpDesktopLibWidget) + { + delete mpDesktopLibWidget; + mpDesktopLibWidget = NULL; + } +// if(NULL != mDesktopRightPalette) +// { +// delete mDesktopRightPalette; +// mDesktopRightPalette = NULL; +// } +} + +void UBBoardPaletteManager::initPalettesPosAtStartup() +{ + mStylusPalette->initPosition(); +} + +void UBBoardPaletteManager::setupLayout() +{ + +} + +/** + * \brief Set up the dock palette widgets + */ +void UBBoardPaletteManager::setupDockPaletteWidgets() +{ + + //------------------------------------------------// + // Create the widgets for the dock palettes + + mpPageNavigWidget = new UBPageNavigationWidget(); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpPageNavigWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); + + mpLibWidget = new UBLibWidget(); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpLibWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); + + mpCachePropWidget = new UBCachePropertiesWidget(); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpCachePropWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); + + mpTeacherBarWidget = new UBTeacherBarWidget(); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpTeacherBarWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); + + mpDownloadWidget = new UBDockDownloadWidget(); + + // Add the dock palettes + mLeftPalette = new UBLeftPalette(mContainer); + + // LEFT palette widgets + mLeftPalette->registerWidget(mpPageNavigWidget); + mLeftPalette->addTab(mpPageNavigWidget); + + // The teacher bar widget will always be there + mLeftPalette->registerWidget(mpTeacherBarWidget); + mLeftPalette->addTab(mpTeacherBarWidget); + + mLeftPalette->connectSignals(); + + mRightPalette = new UBRightPalette(mContainer); + // RIGHT palette widgets + mRightPalette->registerWidget(mpLibWidget); + mRightPalette->addTab(mpLibWidget); + // The cache widget will be visible only if a cache is put on the page + mRightPalette->registerWidget(mpCachePropWidget); + + // The download widget will be part of the right palette but + // will become visible only when the first download starts + mRightPalette->registerWidget(mpDownloadWidget); + mRightPalette->connectSignals(); + changeMode(eUBDockPaletteWidget_BOARD, true); + + // Hide the tabs that must be hidden + mRightPalette->removeTab(mpDownloadWidget); + mRightPalette->removeTab(mpCachePropWidget); + +// mLeftPalette->showTabWidget(0); +// mRightPalette->showTabWidget(0); +// +// //------------------------------------------------// +} + +void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMode mainMode) +{ +// Board = 0, Internet, Document, Tutorial, ParaschoolEditor, WebDocument + + switch( mainMode ) + { + case UBApplicationController::Board: + { + // call changeMode only when switch NOT from desktop mode + if(!UBApplication::applicationController->isShowingDesktop()) + changeMode(eUBDockPaletteWidget_BOARD); + } + break; + + case UBApplicationController::Tutorial: + { + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + mKeyboardPalette->hide(); + } + break; + + case UBApplicationController::Internet: + changeMode(eUBDockPaletteWidget_WEB); + break; + + case UBApplicationController::Document: + changeMode(eUBDockPaletteWidget_DOCUMENT); + break; + + default: + { + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + mKeyboardPalette->hide(); + } + break; + } +} + +void UBBoardPaletteManager::slot_changeDesktopMode(bool isDesktop) +{ + UBApplicationController::MainMode currMode = UBApplication::applicationController->displayMode(); + if(!isDesktop) + { + switch( currMode ) + { + case UBApplicationController::Board: + changeMode(eUBDockPaletteWidget_BOARD); + break; + + default: + break; + } + } + else + changeMode(eUBDockPaletteWidget_DESKTOP); +} + +void UBBoardPaletteManager::setupPalettes() +{ + + if (UBPlatformUtils::hasVirtualKeyboard()) + { + mKeyboardPalette = new UBKeyboardPalette(0); +#ifndef Q_WS_WIN + connect(mKeyboardPalette, SIGNAL(closed()), mKeyboardPalette, SLOT(onDeactivated())); +#endif +#ifndef Q_WS_MAC + // mKeyboardPalette->setParent(mContainer); +#endif + } + + setupDockPaletteWidgets(); + + + // Add the other palettes + mStylusPalette = new UBStylusPalette(mContainer, UBSettings::settings()->appToolBarOrientationVertical->get().toBool() ? Qt::Vertical : Qt::Horizontal); + connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int))); + mStylusPalette->show(); // always show stylus palette at startup + + mZoomPalette = new UBZoomPalette(mContainer); + + QList backgroundsActions; + + backgroundsActions << UBApplication::mainWindow->actionPlainLightBackground; + backgroundsActions << UBApplication::mainWindow->actionCrossedLightBackground; + backgroundsActions << UBApplication::mainWindow->actionPlainDarkBackground; + backgroundsActions << UBApplication::mainWindow->actionCrossedDarkBackground; + + mBackgroundsPalette = new UBActionPalette(backgroundsActions, Qt::Horizontal , mContainer); + mBackgroundsPalette->setButtonIconSize(QSize(128, 128)); + mBackgroundsPalette->groupActions(); + mBackgroundsPalette->setClosable(true); + mBackgroundsPalette->setAutoClose(true); + mBackgroundsPalette->adjustSizeAndPosition(); + mBackgroundsPalette->hide(); + + QList addItemActions; + + addItemActions << UBApplication::mainWindow->actionAddItemToCurrentPage; + addItemActions << UBApplication::mainWindow->actionAddItemToNewPage; + addItemActions << UBApplication::mainWindow->actionAddItemToLibrary; + + mAddItemPalette = new UBActionPalette(addItemActions, Qt::Horizontal, 0); + mAddItemPalette->setButtonIconSize(QSize(128, 128)); + mAddItemPalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + mAddItemPalette->groupActions(); + mAddItemPalette->setClosable(true); + mAddItemPalette->adjustSizeAndPosition(); + mAddItemPalette->hide(); + + QList eraseActions; + + eraseActions << UBApplication::mainWindow->actionEraseAnnotations; + eraseActions << UBApplication::mainWindow->actionEraseItems; + eraseActions << UBApplication::mainWindow->actionClearPage; + + mErasePalette = new UBActionPalette(eraseActions, Qt::Horizontal , mContainer); + mErasePalette->setButtonIconSize(QSize(128, 128)); + mErasePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + mErasePalette->groupActions(); + mErasePalette->setClosable(true); + mErasePalette->adjustSizeAndPosition(); + mErasePalette->hide(); + + QList pageActions; + + pageActions << UBApplication::mainWindow->actionNewPage; + pageActions << UBApplication::mainWindow->actionDuplicatePage; + pageActions << UBApplication::mainWindow->actionImportPage; + + mPagePalette = new UBActionPalette(pageActions, Qt::Horizontal , mContainer); + mPagePalette->setButtonIconSize(QSize(128, 128)); + mPagePalette->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); + mPagePalette->groupActions(); + mPagePalette->setClosable(true); + mPagePalette->adjustSizeAndPosition(); + mPagePalette->hide(); + + connect(UBSettings::settings()->appToolBarOrientationVertical, SIGNAL(changed(QVariant)), this, SLOT(changeStylusPaletteOrientation(QVariant))); +} + +void UBBoardPaletteManager::pagePaletteButtonPressed() +{ + mPageButtonPressedTime = QTime::currentTime(); + + mPendingPageButtonPressed = true; + QTimer::singleShot(1000, this, SLOT(pagePaletteButtonReleased())); +} + + +void UBBoardPaletteManager::pagePaletteButtonReleased() +{ + if (mPendingPageButtonPressed) + { + if( mPageButtonPressedTime.msecsTo(QTime::currentTime()) > 900) + { + togglePagePalette(true); + } + else + { + UBApplication::mainWindow->actionNewPage->trigger(); + } + + mPendingPageButtonPressed = false; + } +} + +void UBBoardPaletteManager::erasePaletteButtonPressed() +{ + mEraseButtonPressedTime = QTime::currentTime(); + + mPendingEraseButtonPressed = true; + QTimer::singleShot(1000, this, SLOT(erasePaletteButtonReleased())); +} + + +void UBBoardPaletteManager::erasePaletteButtonReleased() +{ + if (mPendingEraseButtonPressed) + { + if( mEraseButtonPressedTime.msecsTo(QTime::currentTime()) > 900) + { + toggleErasePalette(true); + } + else + { + UBApplication::mainWindow->actionClearPage->trigger(); + } + + mPendingEraseButtonPressed = false; + } +} + + + +void UBBoardPaletteManager::linkClicked(const QUrl& url) +{ + UBApplication::applicationController->showInternet(); + UBApplication::webController->loadUrl(url); +} + + +void UBBoardPaletteManager::purchaseLinkActivated(const QString& link) +{ + UBApplication::applicationController->showInternet(); + UBApplication::webController->loadUrl(QUrl(link)); +} + +void UBBoardPaletteManager::connectPalettes() +{ + connect(UBApplication::mainWindow->actionStylus, SIGNAL(toggled(bool)), this, SLOT(toggleStylusPalette(bool))); + + foreach(QWidget *widget, UBApplication::mainWindow->actionZoomIn->associatedWidgets()) + { + QAbstractButton *button = qobject_cast(widget); + if (button) + { + connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed())); + connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased())); + } + } + + foreach(QWidget *widget, UBApplication::mainWindow->actionZoomOut->associatedWidgets()) + { + QAbstractButton *button = qobject_cast(widget); + if (button) + { + connect(button, SIGNAL(pressed()), this, SLOT(zoomButtonPressed())); + connect(button, SIGNAL(released()), this, SLOT(zoomButtonReleased())); + } + } + + foreach(QWidget *widget, UBApplication::mainWindow->actionHand->associatedWidgets()) + { + QAbstractButton *button = qobject_cast(widget); + if (button) + { + connect(button, SIGNAL(pressed()), this, SLOT(panButtonPressed())); + connect(button, SIGNAL(released()), this, SLOT(panButtonReleased())); + } + } + + connect(UBApplication::mainWindow->actionBackgrounds, SIGNAL(toggled(bool)), this, SLOT(toggleBackgroundPalette(bool))); + connect(mBackgroundsPalette, SIGNAL(closed()), this, SLOT(backgroundPaletteClosed())); + + connect(UBApplication::mainWindow->actionPlainLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); + connect(UBApplication::mainWindow->actionCrossedLightBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); + connect(UBApplication::mainWindow->actionPlainDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); + connect(UBApplication::mainWindow->actionCrossedDarkBackground, SIGNAL(triggered()), this, SLOT(changeBackground())); + connect(UBApplication::mainWindow->actionPodcast, SIGNAL(triggered(bool)), this, SLOT(tooglePodcastPalette(bool))); + + connect(UBApplication::mainWindow->actionAddItemToCurrentPage, SIGNAL(triggered()), this, SLOT(addItemToCurrentPage())); + connect(UBApplication::mainWindow->actionAddItemToNewPage, SIGNAL(triggered()), this, SLOT(addItemToNewPage())); + connect(UBApplication::mainWindow->actionAddItemToLibrary, SIGNAL(triggered()), this, SLOT(addItemToLibrary())); + + connect(UBApplication::mainWindow->actionEraseItems, SIGNAL(triggered()), mErasePalette, SLOT(close())); + connect(UBApplication::mainWindow->actionEraseAnnotations, SIGNAL(triggered()), mErasePalette, SLOT(close())); + connect(UBApplication::mainWindow->actionClearPage, SIGNAL(triggered()), mErasePalette, SLOT(close())); + connect(mErasePalette, SIGNAL(closed()), this, SLOT(erasePaletteClosed())); + + foreach(QWidget *widget, UBApplication::mainWindow->actionErase->associatedWidgets()) + { + QAbstractButton *button = qobject_cast(widget); + if (button) + { + connect(button, SIGNAL(pressed()), this, SLOT(erasePaletteButtonPressed())); + connect(button, SIGNAL(released()), this, SLOT(erasePaletteButtonReleased())); + } + } + + connect(UBApplication::mainWindow->actionNewPage, SIGNAL(triggered()), mPagePalette, SLOT(close())); + connect(UBApplication::mainWindow->actionDuplicatePage, SIGNAL(triggered()), mPagePalette, SLOT(close())); + connect(UBApplication::mainWindow->actionImportPage, SIGNAL(triggered()), mPagePalette, SLOT(close())); + connect(mPagePalette, SIGNAL(closed()), this, SLOT(pagePaletteClosed())); + + foreach(QWidget *widget, UBApplication::mainWindow->actionPages->associatedWidgets()) + { + QAbstractButton *button = qobject_cast(widget); + if (button) + { + connect(button, SIGNAL(pressed()), this, SLOT(pagePaletteButtonPressed())); + connect(button, SIGNAL(released()), this, SLOT(pagePaletteButtonReleased())); + } + } + +} + + +bool isFirstResized = true; +void UBBoardPaletteManager::containerResized() +{ + int innerMargin = UBSettings::boardMargin; + + int userLeft = innerMargin; + int userWidth = mContainer->width() - (2 * innerMargin); + int userTop = innerMargin; + int userHeight = mContainer->height() - (2 * innerMargin); + + if(mStylusPalette) + { + mStylusPalette->move(userLeft, userTop); + mStylusPalette->adjustSizeAndPosition(); + mStylusPalette->initPosition(); + } + + if(mZoomPalette) + { + mZoomPalette->move(userLeft + userWidth - mZoomPalette->width() + , userTop + userHeight /*- mPageNumberPalette->height()*/ - innerMargin - mZoomPalette->height()); + mZoomPalette->adjustSizeAndPosition(); + } + + if (isFirstResized && mKeyboardPalette && mKeyboardPalette->parent() == UBApplication::boardController->controlContainer()) + { + isFirstResized = false; + mKeyboardPalette->move(userLeft + (userWidth - mKeyboardPalette->width())/2, + userTop + (userHeight - mKeyboardPalette->height())/2); + mKeyboardPalette->adjustSizeAndPosition(); + } + + if(mLeftPalette) + { + mLeftPalette->resize(mLeftPalette->width()-1, mContainer->height()); + mLeftPalette->resize(mLeftPalette->width(), mContainer->height()); + } + + if(mRightPalette) + { + mRightPalette->resize(mRightPalette->width()-1, mContainer->height()); + mRightPalette->resize(mRightPalette->width(), mContainer->height()); + } +} + + +void UBBoardPaletteManager::changeBackground() +{ + if (UBApplication::mainWindow->actionCrossedLightBackground->isChecked()) + UBApplication::boardController->changeBackground(false, true); + else if (UBApplication::mainWindow->actionPlainDarkBackground->isChecked()) + UBApplication::boardController->changeBackground(true, false); + else if (UBApplication::mainWindow->actionCrossedDarkBackground->isChecked()) + UBApplication::boardController->changeBackground(true, true); + else + UBApplication::boardController->changeBackground(false, false); + + UBApplication::mainWindow->actionBackgrounds->setChecked(false); +} + + +void UBBoardPaletteManager::activeSceneChanged() +{ + UBGraphicsScene *activeScene = UBApplication::boardController->activeScene(); + int pageIndex = UBApplication::boardController->activeSceneIndex(); + + if (mStylusPalette) + connect(mStylusPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser())); + + if (mpPageNavigWidget) + { + mpPageNavigWidget->setPageNumber(pageIndex + 1, activeScene->document()->pageCount()); + } + + if (mZoomPalette) + connect(mZoomPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser())); + + if (mBackgroundsPalette) + connect(mBackgroundsPalette, SIGNAL(mouseEntered()), activeScene, SLOT(hideEraser())); +} + + +void UBBoardPaletteManager::toggleBackgroundPalette(bool checked) +{ + mBackgroundsPalette->setVisible(checked); + + if (checked) + { + UBApplication::mainWindow->actionErase->setChecked(false); + UBApplication::mainWindow->actionNewPage->setChecked(false); + + mBackgroundsPalette->adjustSizeAndPosition(); + mBackgroundsPalette->move((mContainer->width() - mBackgroundsPalette->width()) / 2, + (mContainer->height() - mBackgroundsPalette->height()) / 5); + } +} + + +void UBBoardPaletteManager::backgroundPaletteClosed() +{ + UBApplication::mainWindow->actionBackgrounds->setChecked(false); +} + + +void UBBoardPaletteManager::toggleStylusPalette(bool checked) +{ + mStylusPalette->setVisible(checked); +} + + +void UBBoardPaletteManager::toggleErasePalette(bool checked) +{ + mErasePalette->setVisible(checked); + if (checked) + { + UBApplication::mainWindow->actionBackgrounds->setChecked(false); + UBApplication::mainWindow->actionNewPage->setChecked(false); + + mErasePalette->adjustSizeAndPosition(); + mErasePalette->move((mContainer->width() - mErasePalette->width()) / 2, + (mContainer->height() - mErasePalette->height()) / 5); + } +} + + +void UBBoardPaletteManager::erasePaletteClosed() +{ + UBApplication::mainWindow->actionErase->setChecked(false); +} + + +void UBBoardPaletteManager::togglePagePalette(bool checked) +{ + mPagePalette->setVisible(checked); + if (checked) + { + UBApplication::mainWindow->actionBackgrounds->setChecked(false); + UBApplication::mainWindow->actionErase->setChecked(false); + + mPagePalette->adjustSizeAndPosition(); + mPagePalette->move((mContainer->width() - mPagePalette->width()) / 2, + (mContainer->height() - mPagePalette->height()) / 5); + } +} + + +void UBBoardPaletteManager::pagePaletteClosed() +{ + UBApplication::mainWindow->actionPages->setChecked(false); +} + + +void UBBoardPaletteManager::tooglePodcastPalette(bool checked) +{ + UBPodcastController::instance()->toggleRecordingPalette(checked); +} + + +void UBBoardPaletteManager::addItem(const QUrl& pUrl) +{ + mItemUrl = pUrl; + mPixmap = QPixmap(); + mPos = QPointF(0, 0); + mScaleFactor = 1.; + + mAddItemPalette->show(); + mAddItemPalette->adjustSizeAndPosition(); + + QRect controlGeo = UBApplication::applicationController->displayManager()->controlGeometry(); + + mAddItemPalette->move(controlGeo.x() + ((controlGeo.width() - mAddItemPalette->geometry().width()) / 2), + (controlGeo.y() + (controlGeo.height() - mAddItemPalette->geometry().height()) / 5)); + +} + +void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool isInit) +{ + bool rightPaletteVisible = mRightPalette->switchMode(newMode); + bool leftPaletteVisible = mLeftPalette->switchMode(newMode); + + switch( newMode ) + { + case eUBDockPaletteWidget_BOARD: + { + mLeftPalette->assignParent(UBApplication::boardController->controlContainer()); + mRightPalette->assignParent(UBApplication::boardController->controlContainer()); + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + { + + if(mKeyboardPalette->m_isVisible) + { + mKeyboardPalette->hide(); + mKeyboardPalette->setParent(UBApplication::boardController->controlContainer()); + mKeyboardPalette->show(); + } + else + mKeyboardPalette->setParent(UBApplication::boardController->controlContainer()); + } + + mLeftPalette->setVisible(leftPaletteVisible); + mRightPalette->setVisible(rightPaletteVisible); +#ifdef Q_WS_WIN + if (rightPaletteVisible) + mRightPalette->setAdditionalVOffset(0); +#endif + + if( !isInit ) + containerResized(); + } + break; + + case eUBDockPaletteWidget_DESKTOP: + { + mLeftPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); + mRightPalette->assignParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + { + + if(mKeyboardPalette->m_isVisible) + { + mKeyboardPalette->hide(); +#ifndef Q_WS_X11 + mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); +#else + mKeyboardPalette->setParent(0); +#endif + mKeyboardPalette->show(); + } + else + mKeyboardPalette->setParent((QWidget*)UBApplication::applicationController->uninotesController()->drawingView()); + } + + mLeftPalette->setVisible(leftPaletteVisible); + mRightPalette->setVisible(rightPaletteVisible); +#ifdef Q_WS_WIN + if (rightPaletteVisible) + mRightPalette->setAdditionalVOffset(30); +#endif + + if( !isInit ) + UBApplication::applicationController->uninotesController()->TransparentWidgetResized(); + } + break; + + case eUBDockPaletteWidget_WEB: + { + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + { + WBBrowserWindow* brWnd = UBApplication::webController->GetCurrentWebBrowser(); + + if(mKeyboardPalette->m_isVisible) + { + mKeyboardPalette->hide(); + mKeyboardPalette->setParent(brWnd); + mKeyboardPalette->show(); + } + else + mKeyboardPalette->setParent(brWnd); + } + + } + break; + + case eUBDockPaletteWidget_DOCUMENT: + { + mLeftPalette->setVisible(leftPaletteVisible); + mRightPalette->setVisible(rightPaletteVisible); + mLeftPalette->assignParent(UBApplication::documentController->controlView()); + mRightPalette->assignParent(UBApplication::documentController->controlView()); + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + { + + if(mKeyboardPalette->m_isVisible) + { + mKeyboardPalette->hide(); + mKeyboardPalette->setParent(UBApplication::documentController->controlView()); + mKeyboardPalette->show(); + } + else + mKeyboardPalette->setParent(UBApplication::documentController->controlView()); + } + } + break; + + default: + { + mLeftPalette->setVisible(leftPaletteVisible); + mRightPalette->setVisible(rightPaletteVisible); + mLeftPalette->assignParent(0); + mRightPalette->assignParent(0); + if (UBPlatformUtils::hasVirtualKeyboard() && mKeyboardPalette != NULL) + { + + if(mKeyboardPalette->m_isVisible) + { + mKeyboardPalette->hide(); + mKeyboardPalette->setParent(0); + mKeyboardPalette->show(); + } + else + mKeyboardPalette->setParent(0); + } + } + break; + } + + if( !isInit ) + UBApplication::boardController->notifyPageChanged(); + + emit signal_changeMode(newMode); +} + +/* +void UBBoardPaletteManager::slot_changeMode(eUBDockPaletteWidgetMode newMode) +{ + emit signal_changeMode(newMode); +} +*/ + +void UBBoardPaletteManager::addItem(const QPixmap& pPixmap, const QPointF& pos, qreal scaleFactor, const QUrl& sourceUrl) +{ + mItemUrl = sourceUrl; + mPixmap = pPixmap; + mPos = pos; + mScaleFactor = scaleFactor; + + QRect controlGeo = UBApplication::applicationController->displayManager()->controlGeometry(); + + mAddItemPalette->show(); + mAddItemPalette->adjustSizeAndPosition(); + + mAddItemPalette->move(controlGeo.x() + ((controlGeo.width() - mAddItemPalette->geometry().width()) / 2), + (controlGeo.y() + (controlGeo.height() - mAddItemPalette->geometry().height()) / 5)); +} + + +void UBBoardPaletteManager::addItemToCurrentPage() +{ + UBApplication::applicationController->showBoard(); + mAddItemPalette->hide(); + if(mPixmap.isNull()) + UBApplication::boardController->downloadURL(mItemUrl); + else + { + UBGraphicsPixmapItem* item = UBApplication::boardController->activeScene()->addPixmap(mPixmap, mPos, mScaleFactor); + + item->setSourceUrl(mItemUrl); + item->setSelected(true); + + UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); + } +} + + +void UBBoardPaletteManager::addItemToNewPage() +{ + UBApplication::boardController->addScene(); + addItemToCurrentPage(); +} + + +void UBBoardPaletteManager::addItemToLibrary() +{ + if(mPixmap.isNull()) + { + mPixmap = QPixmap(mItemUrl.toLocalFile()); + } + + if(!mPixmap.isNull()) + { + QString imageDir = UBSettings::settings()->defaultUserImagesDirectory(); + + if(mScaleFactor != 1.) + { + mPixmap = mPixmap.scaled(mScaleFactor * mPixmap.width(), mScaleFactor* mPixmap.height() + , Qt::KeepAspectRatio, Qt::SmoothTransformation); + } + QImage image = mPixmap.toImage(); + + if(NULL != mpLibWidget) + { + mpLibWidget->libNavigator()->libraryWidget()->libraryController()->importImageOnLibrary(image); + } + } + else + { + UBApplication::showMessage(tr("Error Adding Image to Library")); + } + + mAddItemPalette->hide(); +} + +void UBBoardPaletteManager::zoomButtonPressed() +{ + mZoomButtonPressedTime = QTime::currentTime(); + + mPendingZoomButtonPressed = true; + QTimer::singleShot(1000, this, SLOT(zoomButtonReleased())); +} + + +void UBBoardPaletteManager::zoomButtonReleased() +{ + if (mPendingZoomButtonPressed) + { + if(mZoomButtonPressedTime.msecsTo(QTime::currentTime()) > 900) + { + mBoardControler->zoomRestore(); + } + + mPendingZoomButtonPressed = false; + } +} + +void UBBoardPaletteManager::panButtonPressed() +{ + mPanButtonPressedTime = QTime::currentTime(); + + mPendingPanButtonPressed = true; + QTimer::singleShot(1000, this, SLOT(panButtonReleased())); +} + + +void UBBoardPaletteManager::panButtonReleased() +{ + if (mPendingPanButtonPressed) + { + if(mPanButtonPressedTime.msecsTo(QTime::currentTime()) > 900) + { + mBoardControler->centerRestore(); + } + + mPendingPanButtonPressed = false; + } +} + +void UBBoardPaletteManager::showVirtualKeyboard(bool show) +{ + if (mKeyboardPalette) + mKeyboardPalette->setVisible(show); +} + +void UBBoardPaletteManager::changeStylusPaletteOrientation(QVariant var) +{ + bool bVertical = var.toBool(); + bool bVisible = mStylusPalette->isVisible(); + + // Clean the old palette + if(NULL != mStylusPalette) + { + // TODO : check why this line creates a crash in the application. + delete mStylusPalette; + } + + // Create the new palette + if(bVertical) + { + mStylusPalette = new UBStylusPalette(mContainer, Qt::Vertical); + } + else + { + mStylusPalette = new UBStylusPalette(mContainer, Qt::Horizontal); + } + + connect(mStylusPalette, SIGNAL(stylusToolDoubleClicked(int)), UBApplication::boardController, SLOT(stylusToolDoubleClicked(int))); + mStylusPalette->setVisible(bVisible); // always show stylus palette at startup +} + +/* +UBRightPalette* UBBoardPaletteManager::createDesktopRightPalette(QWidget* parent) +{ + mpDesktopLibWidget = new UBLibWidget(); + mDesktopRightPalette = new UBRightPalette(parent); + mDesktopRightPalette->registerWidget(mpDesktopLibWidget); + mDesktopRightPalette->addTabWidget(mpDesktopLibWidget); + mDesktopRightPalette->connectSignals(); + + return mDesktopRightPalette; +} +*/ + +void UBBoardPaletteManager::connectToDocumentController() +{ + emit connectToDocController(); +} + +void UBBoardPaletteManager::refreshPalettes() +{ + mRightPalette->update(); + mLeftPalette->update(); +} + +void UBBoardPaletteManager::startDownloads() +{ + if(!mDownloadInProgress) + { + mDownloadInProgress = true; + mpDownloadWidget->setVisibleState(true); + mRightPalette->addTab(mpDownloadWidget); + } +} + +void UBBoardPaletteManager::stopDownloads() +{ + if(mDownloadInProgress) + { + mDownloadInProgress = false; + mpDownloadWidget->setVisibleState(false); + mRightPalette->removeTab(mpDownloadWidget); + } +} + +QRect UBBoardPaletteManager::GetFreeRectGlobalCoords() const +{ + QPoint topLeft, bottomRight; + if (mLeftPalette) { + int x = mLeftPalette->getTabPaletteRect().topRight().x(); + int y = 0; + if (x || y) { + topLeft.setX(x); + topLeft.setY(y); + topLeft = mContainer->mapToGlobal(topLeft); + } + } + if (mRightPalette) { + int x = mRightPalette->getTabPaletteRect().topLeft().x(); + int y = mRightPalette->height(); + if (x || y) { + bottomRight.setX(x); + bottomRight.setY(y); + bottomRight = mContainer->mapToGlobal(bottomRight); + } + } + return QRect(topLeft, bottomRight); +} + +void UBBoardPaletteManager::ForceTeacherBarToSaveData() +{ + mpTeacherBarWidget->saveContent(); +} + +void UBBoardPaletteManager::ForceTeacherBarToLoadData() +{ + mpTeacherBarWidget->loadContent(); +}