From f145ebd28807d973cb56c5cca7d66bae5885e8e6 Mon Sep 17 00:00:00 2001 From: Anatoly Mihalchenko Date: Thu, 20 Oct 2011 17:29:06 +0300 Subject: [PATCH] SANKORE-329 implement correct widget processing mechanism --- src/board/UBBoardPaletteManager.cpp | 117 ++++++++++++++++++++++----- src/board/UBBoardPaletteManager.h | 10 ++- src/core/UBApplication.cpp | 9 +++ src/core/UBApplicationController.cpp | 15 ---- src/gui/UBCachePropertiesWidget.cpp | 75 ++++++++++------- src/gui/UBDockPalette.cpp | 61 +++++++------- src/gui/UBDockPalette.h | 8 +- src/gui/UBDockPaletteWidget.h | 7 +- 8 files changed, 201 insertions(+), 101 deletions(-) diff --git a/src/board/UBBoardPaletteManager.cpp b/src/board/UBBoardPaletteManager.cpp index 145e4035..ff8f0c71 100755 --- a/src/board/UBBoardPaletteManager.cpp +++ b/src/board/UBBoardPaletteManager.cpp @@ -19,6 +19,7 @@ #include "frameworks/UBFileSystemUtils.h" #include "core/UBApplication.h" +#include "core/UBApplicationController.h" #include "core/UBSettings.h" #include "core/UBSetting.h" #include "core/UBDisplayManager.h" @@ -162,20 +163,20 @@ void UBBoardPaletteManager::setupDockPaletteWidgets() mpPageNavigWidget = new UBPageNavigationWidget(); mpPageNavigWidget->registerMode(eUBDockPaletteWidget_BOARD); - connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpPageNavigWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpPageNavigWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); mpLibWidget = new UBLibWidget(); mpLibWidget ->registerMode(eUBDockPaletteWidget_BOARD); mpLibWidget ->registerMode(eUBDockPaletteWidget_DESKTOP); - connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpLibWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpLibWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); -// mpCachePropWidget = new UBCachePropertiesWidget(); -// mpCachePropWidget->registerMode(eUBDockPaletteWidget_BOARD); -// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpCachePropWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); + mpCachePropWidget = new UBCachePropertiesWidget(); + mpCachePropWidget->registerMode(eUBDockPaletteWidget_BOARD); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpCachePropWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); -// mpTeacherBarWidget = new UBTeacherBarWidget(); -// mpTeacherBarWidget->registerMode(eUBDockPaletteWidget_BOARD); -// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpTeacherBarWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); + mpTeacherBarWidget = new UBTeacherBarWidget(); + mpTeacherBarWidget->registerMode(eUBDockPaletteWidget_BOARD); +// connect(this, SIGNAL(signal_changeMode(eUBDockPaletteWidgetMode)), mpTeacherBarWidget, SLOT(slot_changeMode(eUBDockPaletteWidgetMode))); //------------------------------------------------// // Add the dock palettes @@ -183,7 +184,7 @@ void UBBoardPaletteManager::setupDockPaletteWidgets() // LEFT palette widgets mLeftPalette->registerWidget(mpPageNavigWidget); - mLeftPalette->addTabWidget(mpPageNavigWidget); + mLeftPalette->addTab(mpPageNavigWidget); mLeftPalette->connectSignals(); @@ -193,24 +194,62 @@ void UBBoardPaletteManager::setupDockPaletteWidgets() // RIGHT palette widgets mRightPalette->registerWidget(mpLibWidget); - mRightPalette->addTabWidget(mpLibWidget); + mRightPalette->addTab(mpLibWidget); -// // ??? -// mRightPalette->registerWidget(mpCachePropWidget); -// mRightPalette->addTabWidget(mpCachePropWidget); + // ??? + mRightPalette->registerWidget(mpCachePropWidget); +// mRightPalette->addTab(mpCachePropWidget); -// // ??? -// mRightPalette->registerWidget(mpTeacherBarWidget); -// mRightPalette->addTabWidget(mpTeacherBarWidget); + // ??? + mRightPalette->registerWidget(mpTeacherBarWidget); + mRightPalette->addTab(mpTeacherBarWidget); mRightPalette->connectSignals(); //------------------------------------------------// - mLeftPalette->showTabWidget(0); - mRightPalette->showTabWidget(0); + changeMode(eUBDockPaletteWidget_BOARD, true); //------------------------------------------------// + +// mLeftPalette->showTabWidget(0); +// mRightPalette->showTabWidget(0); +// +// //------------------------------------------------// +} + +void UBBoardPaletteManager::slot_changeMainMode(UBApplicationController::MainMode mainMode) +{ + switch( mainMode ) + { + case UBApplicationController::Board: + // call changeMode only when switch NOT from desktop mode + if(!UBApplication::applicationController->isShowingDesktop()) + changeMode(eUBDockPaletteWidget_BOARD); + break; + + default: + 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() @@ -605,8 +644,39 @@ void UBBoardPaletteManager::addItem(const QUrl& pUrl) } -void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode) +void UBBoardPaletteManager::processPalettersWidget(UBDockPalette *paletter, eUBDockPaletteWidgetMode mode) { + //-------------------------------// + // get full right palette widgets list, parse it, show all widgets for BOARD mode, and hide all other + QVector widgetsList = paletter->GetWidgetsList(); + for(int i = 0; i < widgetsList.size(); i++) + { + UBDockPaletteWidget* pNextWidget = widgetsList.at(i); + if( pNextWidget != NULL ) + { + if( pNextWidget->GetRegisteredModes().contains(mode) ) + { + paletter->addTab(pNextWidget); + } + else + { + paletter->removeTab(pNextWidget->name()); + } + } + } + //-------------------------------// + + if(widgetsList.size() > 0) + paletter->showTabWidget(0); + + paletter->update(); +} + +void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode, bool isInit) +{ + processPalettersWidget(mRightPalette, newMode); + processPalettersWidget(mLeftPalette, newMode); + switch( newMode ) { case eUBDockPaletteWidget_BOARD: @@ -617,7 +687,8 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode) mLeftPalette->setVisible(true); mRightPalette->setVisible(true); - containerResized(); + if( !isInit ) + containerResized(); } break; @@ -629,7 +700,8 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode) mLeftPalette->setVisible(false); mRightPalette->setVisible(true); - UBApplication::applicationController->uninotesController()->TransparentWidgetResized(); + if( !isInit ) + UBApplication::applicationController->uninotesController()->TransparentWidgetResized(); } break; @@ -643,6 +715,9 @@ void UBBoardPaletteManager::changeMode(eUBDockPaletteWidgetMode newMode) break; } + if( !isInit ) + UBApplication::boardController->notifyPageChanged(); + emit signal_changeMode(newMode); } diff --git a/src/board/UBBoardPaletteManager.h b/src/board/UBBoardPaletteManager.h index 5fab9c5c..c95f61c4 100644 --- a/src/board/UBBoardPaletteManager.h +++ b/src/board/UBBoardPaletteManager.h @@ -27,6 +27,9 @@ #include "gui/UBCachePropertiesWidget.h" #include "gui/UBTeacherBarWidget.h" +#include "core/UBApplicationController.h" + + class UBStylusPalette; class UBClockPalette; class UBPageNumberPalette; @@ -37,6 +40,7 @@ class UBFloatingPalette; class UBServerXMLHttpRequest; class UBKeyboardPalette; class UBMainWindow; +class UBApplicationController; class UBBoardPaletteManager : public QObject { @@ -56,7 +60,9 @@ class UBBoardPaletteManager : public QObject UBKeyboardPalette *mKeyboardPalette; // UBRightPalette* createDesktopRightPalette(QWidget* parent); - void changeMode(eUBDockPaletteWidgetMode newMode); + void processPalettersWidget(UBDockPalette *paletter, eUBDockPaletteWidgetMode mode); + void changeMode(eUBDockPaletteWidgetMode newMode, bool isInit = false); + signals: void connectToDocController(); @@ -70,6 +76,8 @@ class UBBoardPaletteManager : public QObject void addItem(const QPixmap& pPixmap, const QPointF& p = QPointF(0.0, 0.0), qreal scale = 1.0, const QUrl& sourceUrl = QUrl()); // void slot_changeMode(eUBDockPaletteWidgetMode newMode); + void slot_changeMainMode(UBApplicationController::MainMode); + void slot_changeDesktopMode(bool); private: diff --git a/src/core/UBApplication.cpp b/src/core/UBApplication.cpp index 381e52dc..be570848 100644 --- a/src/core/UBApplication.cpp +++ b/src/core/UBApplication.cpp @@ -244,6 +244,15 @@ int UBApplication::exec(const QString& pFileToImport) applicationController = new UBApplicationController(boardController->controlView(), boardController->displayView(), mainWindow, staticMemoryCleaner); + + connect(applicationController, SIGNAL(mainModeChanged(UBApplicationController::MainMode)), + boardController->paletteManager(), SLOT(slot_changeMainMode(UBApplicationController::MainMode))); + + connect(applicationController, SIGNAL(desktopMode(bool)), + boardController->paletteManager(), SLOT(slot_changeDesktopMode(bool))); + + + connect(mainWindow->actionDesktop, SIGNAL(triggered(bool)), applicationController, SLOT(showDesktop(bool))); #ifndef Q_WS_MAC connect(mainWindow->actionHideApplication, SIGNAL(triggered()), mainWindow, SLOT(showMinimized())); diff --git a/src/core/UBApplicationController.cpp b/src/core/UBApplicationController.cpp index f6b002ee..b3560186 100644 --- a/src/core/UBApplicationController.cpp +++ b/src/core/UBApplicationController.cpp @@ -336,7 +336,6 @@ void UBApplicationController::showBoard() mMainWindow->boardToolBar->show(); mMainMode = Board; - UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_BOARD); adaptToolBar(); @@ -353,8 +352,6 @@ void UBApplicationController::showBoard() mUninoteController->hideWindow(); mMainWindow->show(); -// UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_BOARD); - emit mainModeChanged(Board); } @@ -368,8 +365,6 @@ void UBApplicationController::showInternet() UBApplication::boardController->hide(); } - UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_WEB); - if (UBSettings::settings()->webUseExternalBrowser->get().toBool()) { showDesktop(true); @@ -390,8 +385,6 @@ void UBApplicationController::showInternet() emit mainModeChanged(Internet); } -// UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_WEB); - UBApplication::webController->show(UBWebController::WebBrowser); } @@ -404,7 +397,6 @@ void UBApplicationController::showDocument() mMainWindow->documentToolBar->show(); mMainMode = Document; - UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_DOCUMENT); adaptToolBar(); @@ -426,8 +418,6 @@ void UBApplicationController::showDocument() mUninoteController->hideWindow(); -// UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_DOCUMENT); - emit mainModeChanged(Document); } @@ -439,8 +429,6 @@ void UBApplicationController::showDesktop(bool dontSwitchFrontProcess) UBApplication::boardController->hide(); mMainWindow->hide(); - UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_DESKTOP); - mUninoteController->showWindow(); if (mMirror) @@ -456,8 +444,6 @@ void UBApplicationController::showDesktop(bool dontSwitchFrontProcess) UBPlatformUtils::bringPreviousProcessToFront(); } -// UBApplication::boardController->paletteManager()->changeMode(eUBDockPaletteWidget_DESKTOP); - UBDrawingController::drawingController()->setStylusTool(UBStylusTool::Selector); } @@ -627,7 +613,6 @@ void UBApplicationController::hideDesktop() emit desktopMode(false); } - void UBApplicationController::setMirrorSourceWidget(QWidget* pWidget) { if (mMirror) diff --git a/src/gui/UBCachePropertiesWidget.cpp b/src/gui/UBCachePropertiesWidget.cpp index 65975628..0d415674 100644 --- a/src/gui/UBCachePropertiesWidget.cpp +++ b/src/gui/UBCachePropertiesWidget.cpp @@ -6,6 +6,7 @@ #include "UBCachePropertiesWidget.h" #include "core/UBApplication.h" +#include "core/UBApplicationController.h" #include "board/UBBoardController.h" #include "domain/UBGraphicsScene.h" @@ -269,40 +270,59 @@ void UBCachePropertiesWidget::updateShapeButtons() void UBCachePropertiesWidget::updateCurrentCache() { - // Get the current page cache - QList items = UBApplication::boardController->activeScene()->items(); - foreach(QGraphicsItem* it, items) + bool isBoardMode = false; + // this widget can work only on Board mode + if( UBApplication::applicationController != NULL ) { - if("Cache" == it->data(Qt::UserRole).toString()) - { - setEnabled(true); - emit showTab(name()); - mpCurrentCache = dynamic_cast(it); - if((NULL != mpCurrentCache) && (!mCaches.contains(mpCurrentCache))) - { - mCaches.append(mpCurrentCache); - } + // if app controller is available, and current mode is Board, and no show desktop, than all ok, just process + if( UBApplication::applicationController->displayMode() == UBApplicationController::Board && + !UBApplication::applicationController->isShowingDesktop()) + isBoardMode = true; + } + // if app controller == null, than we do not know what mode now, so just process + else + isBoardMode = true; - // Update the values of the cache properties - mpSizeSlider->setValue(mpCurrentCache->shapeWidth()); - updateCacheColor(mpCurrentCache->maskColor()); - switch(mpCurrentCache->maskshape()) + if(isBoardMode) + { + // Get the current page cache + QList items = UBApplication::boardController->activeScene()->items(); + foreach(QGraphicsItem* it, items) + { + if("Cache" == it->data(Qt::UserRole).toString()) { - case eMaskShape_Circle: - mpCircleButton->setChecked(true); - mpSquareButton->setChecked(false); - break; - case eMaskShap_Rectangle: - mpCircleButton->setChecked(false); - mpSquareButton->setChecked(true); - break; + setEnabled(true); + emit showTab(name()); + mpCurrentCache = dynamic_cast(it); + if((NULL != mpCurrentCache) && (!mCaches.contains(mpCurrentCache))) + { + mCaches.append(mpCurrentCache); + } + + // Update the values of the cache properties + mpSizeSlider->setValue(mpCurrentCache->shapeWidth()); + updateCacheColor(mpCurrentCache->maskColor()); + switch(mpCurrentCache->maskshape()) + { + case eMaskShape_Circle: + mpCircleButton->setChecked(true); + mpSquareButton->setChecked(false); + break; + case eMaskShap_Rectangle: + mpCircleButton->setChecked(false); + mpSquareButton->setChecked(true); + break; + } + + return; } - - return; } } - // If we fall here, that means that this page has no cache + // If we fall here, that means: + // 1 - that this page has no cache + // 2 - we do not on Board page + // 3 - we in board mode, but show desktop (as really - desktop mode) emit hideTab(name()); mpCurrentCache = NULL; setDisabled(true); @@ -320,3 +340,4 @@ void UBCachePropertiesWidget::onCacheEnabled() { emit showTab(name()); } + \ No newline at end of file diff --git a/src/gui/UBDockPalette.cpp b/src/gui/UBDockPalette.cpp index 0882b611..b7b7a6f6 100644 --- a/src/gui/UBDockPalette.cpp +++ b/src/gui/UBDockPalette.cpp @@ -57,15 +57,15 @@ UBDockPalette::UBDockPalette(QWidget *parent, const char *name) if (parent) { - setAttribute(Qt::WA_NoMousePropagation); - setAttribute(Qt::WA_TranslucentBackground); + setAttribute(Qt::WA_NoMousePropagation); + setAttribute(Qt::WA_TranslucentBackground); } else { - // standalone window - setAttribute(Qt::WA_TranslucentBackground); + // standalone window + setAttribute(Qt::WA_TranslucentBackground); - // !!!! Should be included into Windows after QT recompilation + // !!!! Should be included into Windows after QT recompilation #ifdef Q_WS_MAC //setAttribute(Qt::WA_MacNoShadow); #endif @@ -540,36 +540,35 @@ int UBDockPalette::customMargin() * \brief Add the given tab widget * @param widget as the given widget */ -void UBDockPalette::addTabWidget(UBDockPaletteWidget *widget) -{ - if(!mTabWidgets.contains(widget)) - { - widget->setVisible(true); - mTabWidgets.append(widget); - mpStackWidget->addWidget(widget); - mpStackWidget->setCurrentWidget(widget); - update(); - } +void UBDockPalette::addTab(UBDockPaletteWidget *widget) +{ + if(!mTabWidgets.contains(widget)) + { + widget->setVisible(true); + mTabWidgets.append(widget); + mpStackWidget->addWidget(widget); + mpStackWidget->setCurrentWidget(widget); + update(); + } } - /** * \brief Remove the given tab * @param widgetName as the tab widget name */ -void UBDockPalette::removeTab(const QString &widgetName) -{ - for(int i = 0; i < mTabWidgets.size(); i++) - { - UBDockPaletteWidget* pCrntWidget = mTabWidgets.at(i); - if(NULL != pCrntWidget && (pCrntWidget->name() == widgetName)) - { - mpStackWidget->removeWidget(pCrntWidget); - mTabWidgets.remove(i); - pCrntWidget->hide(); - update(); - break; - } - } +void UBDockPalette::removeTab(const QString &widgetName) +{ + for(int i = 0; i < mTabWidgets.size(); i++) + { + UBDockPaletteWidget* pCrntWidget = mTabWidgets.at(i); + if(NULL != pCrntWidget && (pCrntWidget->name() == widgetName)) + { + mpStackWidget->removeWidget(pCrntWidget); + mTabWidgets.remove(i); + pCrntWidget->hide(); + update(); + break; + } + } } /** @@ -601,7 +600,7 @@ void UBDockPalette::onShowTabWidget(const QString &widgetName) UBDockPaletteWidget* pCrntWidget = mRegisteredWidgets.at(i); if(NULL != pCrntWidget && (pCrntWidget->name() == widgetName)) { - addTabWidget(pCrntWidget); + addTab(pCrntWidget); break; } } diff --git a/src/gui/UBDockPalette.h b/src/gui/UBDockPalette.h index b69d0653..7380dcb5 100644 --- a/src/gui/UBDockPalette.h +++ b/src/gui/UBDockPalette.h @@ -72,10 +72,13 @@ public: void setBackgroundBrush(const QBrush& brush); void registerWidget(UBDockPaletteWidget* widget); - void addTabWidget(UBDockPaletteWidget* widget); + void addTab(UBDockPaletteWidget* widget); void removeTab(const QString& widgetName); + void connectSignals(); + QVector GetWidgetsList() { return mRegisteredWidgets; }; + public slots: void onShowTabWidget(const QString& widgetName); void onHideTabWidget(const QString& widgetName); @@ -90,7 +93,7 @@ protected: /** The current dock orientation */ eUBDockOrientation mOrientation; - /** The current baclground brush */ + /** The current background brush */ QBrush mBackgroundBrush; /** The preferred width */ int mPreferredWidth; @@ -123,7 +126,6 @@ protected: /** The current widget */ QVector mRegisteredWidgets; -// QVector mVisibleWidgets; // ??? private slots: void onToolbarPosUpdated(); diff --git a/src/gui/UBDockPaletteWidget.h b/src/gui/UBDockPaletteWidget.h index aa97a029..5c37cfff 100644 --- a/src/gui/UBDockPaletteWidget.h +++ b/src/gui/UBDockPaletteWidget.h @@ -27,9 +27,7 @@ public: void registerMode(eUBDockPaletteWidgetMode mode); - /* The current widget available mode list */ - QVector mRegisteredModes; - + QVector GetRegisteredModes() { return mRegisteredModes; }; signals: @@ -45,6 +43,9 @@ protected: QPixmap mIconToLeft; // arrow like this: < QString mName; + /* The current widget available mode list */ + QVector mRegisteredModes; + }; #endif // UBDOCKPALETTEWIDGET_H