From d4b4b8ea6c2a41556d8b5daf83856907f451d66a Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Wed, 23 May 2012 11:27:45 +0200 Subject: [PATCH] fixed issue 617 --- src/core/UBSettings.cpp | 2 + src/core/UBSettings.h | 2 + src/gui/UBDockPalette.cpp | 924 ++++++++++++++++----------------- src/gui/UBLeftPalette.cpp | 10 +- src/gui/UBNavigatorPalette.cpp | 2 - src/gui/UBRightPalette.cpp | 13 +- 6 files changed, 477 insertions(+), 476 deletions(-) diff --git a/src/core/UBSettings.cpp b/src/core/UBSettings.cpp index afd08aa9..78d3fd54 100644 --- a/src/core/UBSettings.cpp +++ b/src/core/UBSettings.cpp @@ -206,7 +206,9 @@ void UBSettings::init() appToolBarOrientationVertical = new UBSetting(this, "App", "ToolBarOrientationVertical", false); navigPaletteWidth = new UBSetting(this, "Board", "NavigPaletteWidth", 270); rightLibPaletteWidth = new UBSetting(this, "Board", "RightLibPaletteWidth", 270); + rightLibPaletteIsCollapsed = new UBSetting(this,"Board", "RightLibPaletteIsCollapsed",false); leftLibPaletteWidth = new UBSetting(this, "Board", "LeftLibPaletteWidth",270); + leftLibPaletteIsCollapsed = new UBSetting(this,"Board","LeftLibPaletteIsCollapsed",false); appIsInSoftwareUpdateProcess = new UBSetting(this, "App", "IsInSoftwareUpdateProcess", false); appLastSessionDocumentUUID = new UBSetting(this, "App", "LastSessionDocumentUUID", ""); diff --git a/src/core/UBSettings.h b/src/core/UBSettings.h index 4e8c9666..acb4b28a 100644 --- a/src/core/UBSettings.h +++ b/src/core/UBSettings.h @@ -316,7 +316,9 @@ class UBSettings : public QObject UBSetting* navigPaletteWidth; UBSetting* rightLibPaletteWidth; + UBSetting* rightLibPaletteIsCollapsed; UBSetting* leftLibPaletteWidth; + UBSetting* leftLibPaletteIsCollapsed; UBSetting* communityUser; UBSetting* communityPsw; diff --git a/src/gui/UBDockPalette.cpp b/src/gui/UBDockPalette.cpp index d62c0c7b..935f8549 100644 --- a/src/gui/UBDockPalette.cpp +++ b/src/gui/UBDockPalette.cpp @@ -29,55 +29,55 @@ * \brief The constructor */ UBDockPalette::UBDockPalette(eUBDockPaletteType paletteType, QWidget *parent, const char *name) - :QWidget(parent, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) - , mOrientation(eUBDockOrientation_Left) - , mPreferredWidth(100) - , mPreferredHeight(100) - , mCanResize(false) - , mResized(false) - , mCollapseWidth(150) - , mLastWidth(-1) - , mHTab(0) - , mpStackWidget(NULL) - , mpLayout(NULL) - , mCurrentTab(0) - , mPaletteType(paletteType) - , mTabPalette(new UBTabDockPalette(this, parent)) -{ - setObjectName(name); - - mpLayout = new QVBoxLayout(); - setLayout(mpLayout); - - mpStackWidget = new QStackedWidget(this); - mpLayout->addWidget(mpStackWidget); - - // clear the tab widgets - mTabWidgets.clear(); - - // We let 2 pixels in order to keep a small border for the resizing - setMinimumWidth(0); - - if (parent) - { - setAttribute(Qt::WA_NoMousePropagation); - setAttribute(Qt::WA_TranslucentBackground); - } - else - { - // standalone window - setAttribute(Qt::WA_TranslucentBackground); - } - - mBackgroundBrush = QBrush(UBSettings::paletteColor); - - // This is the only way to set the background as transparent! - setStyleSheet("QWidget {background-color: transparent}"); - - // Set the position of the tab - onToolbarPosUpdated(); - connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated())); - connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished())); +:QWidget(parent, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) +, mOrientation(eUBDockOrientation_Left) +, mPreferredWidth(100) +, mPreferredHeight(100) +, mCanResize(false) +, mResized(false) +, mCollapseWidth(150) +, mLastWidth(-1) +, mHTab(0) +, mpStackWidget(NULL) +, mpLayout(NULL) +, mCurrentTab(0) +, mPaletteType(paletteType) +, mTabPalette(new UBTabDockPalette(this, parent)) +{ + setObjectName(name); + + mpLayout = new QVBoxLayout(); + setLayout(mpLayout); + + mpStackWidget = new QStackedWidget(this); + mpLayout->addWidget(mpStackWidget); + + // clear the tab widgets + mTabWidgets.clear(); + + // We let 2 pixels in order to keep a small border for the resizing + setMinimumWidth(0); + + if (parent) + { + setAttribute(Qt::WA_NoMousePropagation); + setAttribute(Qt::WA_TranslucentBackground); + } + else + { + // standalone window + setAttribute(Qt::WA_TranslucentBackground); + } + + mBackgroundBrush = QBrush(UBSettings::paletteColor); + + // This is the only way to set the background as transparent! + setStyleSheet("QWidget {background-color: transparent}"); + + // Set the position of the tab + onToolbarPosUpdated(); + connect(UBSettings::settings()->appToolBarPositionedAtTop, SIGNAL(changed(QVariant)), this, SLOT(onToolbarPosUpdated())); + connect(UBDownloadManager::downloadManager(), SIGNAL(allDownloadsFinished()), this, SLOT(onAllDownloadsFinished())); } /** @@ -85,20 +85,20 @@ UBDockPalette::UBDockPalette(eUBDockPaletteType paletteType, QWidget *parent, co */ UBDockPalette::~UBDockPalette() { - if(NULL != mpStackWidget) - { - delete mpStackWidget; - mpStackWidget = NULL; - } - if(NULL != mpLayout) - { - delete mpLayout; - mpLayout = NULL; - } - if (NULL != mTabPalette) { - delete mTabPalette; - mTabPalette = NULL; - } + if(NULL != mpStackWidget) + { + delete mpStackWidget; + mpStackWidget = NULL; + } + if(NULL != mpLayout) + { + delete mpLayout; + mpLayout = NULL; + } + if (NULL != mTabPalette) { + delete mTabPalette; + mTabPalette = NULL; + } } /** @@ -107,7 +107,7 @@ UBDockPalette::~UBDockPalette() */ eUBDockOrientation UBDockPalette::orientation() { - return mOrientation; + return mOrientation; } /** @@ -116,19 +116,19 @@ eUBDockOrientation UBDockPalette::orientation() */ void UBDockPalette::setOrientation(eUBDockOrientation orientation) { - // Set the size - mOrientation = orientation; + // Set the size + mOrientation = orientation; - if(orientation == eUBDockOrientation_Left || orientation == eUBDockOrientation_Right) - { - setMaximumHeight(parentWidget()->height()); - setMinimumHeight(maximumHeight()); - } - else if(orientation == eUBDockOrientation_Top || orientation == eUBDockOrientation_Bottom) - { - setMaximumWidth(parentWidget()->width()); - setMinimumWidth(maximumWidth()); - } + if(orientation == eUBDockOrientation_Left || orientation == eUBDockOrientation_Right) + { + setMaximumHeight(parentWidget()->height()); + setMinimumHeight(maximumHeight()); + } + else if(orientation == eUBDockOrientation_Top || orientation == eUBDockOrientation_Bottom) + { + setMaximumWidth(parentWidget()->width()); + setMinimumWidth(maximumWidth()); + } } /** @@ -137,32 +137,32 @@ void UBDockPalette::setOrientation(eUBDockOrientation orientation) */ void UBDockPalette::resizeEvent(QResizeEvent *event) { - Q_UNUSED(event); - updateMaxWidth(); - if(parentWidget()) - { - setMinimumHeight(parentWidget()->height()); - } + Q_UNUSED(event); + updateMaxWidth(); + if(parentWidget()) + { + setMinimumHeight(parentWidget()->height()); + } // Set the position - QPoint origin; - switch(mOrientation) - { - case eUBDockOrientation_Right: + QPoint origin; + switch(mOrientation) + { + case eUBDockOrientation_Right: origin.setX(parentWidget()->width() - this->width()); origin.setY(0); - break; - case eUBDockOrientation_Bottom: - // Not supported yet - case eUBDockOrientation_Top: - // Not supported yet - case eUBDockOrientation_Left: - default: - origin.setX(0); - origin.setY(0); - break; - } - move(origin.x(), origin.y()); - moveTabs(); + break; + case eUBDockOrientation_Bottom: + // Not supported yet + case eUBDockOrientation_Top: + // Not supported yet + case eUBDockOrientation_Left: + default: + origin.setX(0); + origin.setY(0); + break; + } + move(origin.x(), origin.y()); + moveTabs(); } /** @@ -171,9 +171,9 @@ void UBDockPalette::resizeEvent(QResizeEvent *event) */ void UBDockPalette::enterEvent(QEvent *event) { - Q_UNUSED(event); - // We want to set the cursor as an arrow everytime it enters the palette - setCursor(Qt::ArrowCursor); + Q_UNUSED(event); + // We want to set the cursor as an arrow everytime it enters the palette + setCursor(Qt::ArrowCursor); } /** @@ -182,9 +182,9 @@ void UBDockPalette::enterEvent(QEvent *event) */ void UBDockPalette::leaveEvent(QEvent *event) { - Q_UNUSED(event); - // Restore the cursor to its previous shape - unsetCursor(); + Q_UNUSED(event); + // Restore the cursor to its previous shape + unsetCursor(); } /** @@ -193,38 +193,38 @@ void UBDockPalette::leaveEvent(QEvent *event) */ void UBDockPalette::paintEvent(QPaintEvent *event) { - Q_UNUSED(event); - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - painter.setPen(Qt::NoPen); - painter.setBrush(mBackgroundBrush); - QPainterPath path; - path.setFillRule(Qt::WindingFill); - - int nbTabs = mTabWidgets.size(); - if(0 < nbTabs) - { - // First draw the BIG RECTANGLE (I write it big because the rectangle is big...) - if(mOrientation == eUBDockOrientation_Left) - { - path.addRect(0.0, 0.0, width(), height()); - } - else if(mOrientation == eUBDockOrientation_Right) - { - path.addRect(0.0, 0.0, width(), height()); - } - - // THEN DRAW THE small tabs (yes, the tabs are small...) - if(eUBDockTabOrientation_Up == mTabsOrientation) - { - mHTab = border(); - } - else - { - mHTab = height() - border() - nbTabs*TABSIZE - (nbTabs-1)*tabSpacing(); - } - painter.drawPath(path); - } + Q_UNUSED(event); + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.setPen(Qt::NoPen); + painter.setBrush(mBackgroundBrush); + QPainterPath path; + path.setFillRule(Qt::WindingFill); + + int nbTabs = mTabWidgets.size(); + if(0 < nbTabs) + { + // First draw the BIG RECTANGLE (I write it big because the rectangle is big...) + if(mOrientation == eUBDockOrientation_Left) + { + path.addRect(0.0, 0.0, width(), height()); + } + else if(mOrientation == eUBDockOrientation_Right) + { + path.addRect(0.0, 0.0, width(), height()); + } + + // THEN DRAW THE small tabs (yes, the tabs are small...) + if(eUBDockTabOrientation_Up == mTabsOrientation) + { + mHTab = border(); + } + else + { + mHTab = height() - border() - nbTabs*TABSIZE - (nbTabs-1)*tabSpacing(); + } + painter.drawPath(path); + } } /** @@ -233,11 +233,11 @@ void UBDockPalette::paintEvent(QPaintEvent *event) */ void UBDockPalette::setBackgroundBrush(const QBrush &brush) { - if (mBackgroundBrush != brush) - { - mBackgroundBrush = brush; - update(); - } + if (mBackgroundBrush != brush) + { + mBackgroundBrush = brush; + update(); + } } /** @@ -246,7 +246,7 @@ void UBDockPalette::setBackgroundBrush(const QBrush &brush) */ int UBDockPalette::border() { - return 15; + return 15; } /** @@ -255,7 +255,7 @@ int UBDockPalette::border() */ int UBDockPalette::radius() { - return 5; + return 5; } /** @@ -263,7 +263,7 @@ int UBDockPalette::radius() */ void UBDockPalette::updateMaxWidth() { - // Only the inherited class will overload this method + // Only the inherited class will overload this method } /** @@ -272,7 +272,7 @@ void UBDockPalette::updateMaxWidth() */ int UBDockPalette::collapseWidth() { - return mCollapseWidth; + return mCollapseWidth; } /** @@ -280,17 +280,17 @@ int UBDockPalette::collapseWidth() */ void UBDockPalette::tabClicked(int tabIndex) { - // If the current tab is not the clicked one, show its content - if(mCurrentTab != tabIndex) - { - showTabWidget(tabIndex); - } - // else collapse the palette - else - { - toggleCollapseExpand(); - } - mTabPalette->update(); + // If the current tab is not the clicked one, show its content + if(mCurrentTab != tabIndex) + { + showTabWidget(tabIndex); + } + // else collapse the palette + else + { + toggleCollapseExpand(); + } + mTabPalette->update(); } /** @@ -299,19 +299,13 @@ void UBDockPalette::tabClicked(int tabIndex) */ void UBDockPalette::showTabWidget(int tabIndex) { - mpStackWidget->setCurrentIndex(tabIndex); - mCurrentTab = tabIndex; + mpStackWidget->setCurrentIndex(tabIndex); + mCurrentTab = tabIndex; - // Expand it if collapsed - if(mLastWidth != -1) - { - toggleCollapseExpand(); - } - - // Update the current tab index - if(NULL != (dynamic_cast(mpStackWidget->widget(tabIndex)))){ - mCrntTabWidget = dynamic_cast(mpStackWidget->widget(tabIndex))->name(); - } + // Update the current tab index + if(NULL != (dynamic_cast(mpStackWidget->widget(tabIndex)))){ + mCrntTabWidget = dynamic_cast(mpStackWidget->widget(tabIndex))->name(); + } } @@ -320,18 +314,12 @@ void UBDockPalette::showTabWidget(int tabIndex) */ void UBDockPalette::toggleCollapseExpand() { - if(mLastWidth == -1) - { - // The palette must be collapsed - mLastWidth = width(); - resize(0, height()); - } - else - { - // The palette will be expanded - resize(mLastWidth, height()); - mLastWidth = -1; - } + if(width() < mCollapseWidth) + resize(mLastWidth,height()); + else{ + mLastWidth = width(); + resize(0,height()); + } } /** @@ -340,7 +328,7 @@ void UBDockPalette::toggleCollapseExpand() */ void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation) { - mTabsOrientation = orientation; + mTabsOrientation = orientation; } /** @@ -348,17 +336,17 @@ void UBDockPalette::setTabsOrientation(eUBDockTabOrientation orientation) */ void UBDockPalette::onToolbarPosUpdated() { - // Get the position of the tab - if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool()) - { - setTabsOrientation(eUBDockTabOrientation_Up); - } - else - { - setTabsOrientation(eUBDockTabOrientation_Down); - } - moveTabs(); - update(); + // Get the position of the tab + if(UBSettings::settings()->appToolBarPositionedAtTop->get().toBool()) + { + setTabsOrientation(eUBDockTabOrientation_Up); + } + else + { + setTabsOrientation(eUBDockTabOrientation_Down); + } + moveTabs(); + update(); } /** @@ -367,7 +355,7 @@ void UBDockPalette::onToolbarPosUpdated() */ int UBDockPalette::customMargin() { - return 5; + return 5; } /** @@ -376,15 +364,15 @@ int UBDockPalette::customMargin() */ void UBDockPalette::addTab(UBDockPaletteWidget *widget) { - if(!mTabWidgets.contains(widget) && widget->visibleState()) - { - widget->setVisible(true); - mTabWidgets.append(widget); - mpStackWidget->addWidget(widget); - mpStackWidget->setCurrentWidget(widget); - resizeTabs(); - update(); - } + if(!mTabWidgets.contains(widget) && widget->visibleState()) + { + widget->setVisible(true); + mTabWidgets.append(widget); + mpStackWidget->addWidget(widget); + mpStackWidget->setCurrentWidget(widget); + resizeTabs(); + update(); + } } /** * \brief Remove the given tab @@ -392,16 +380,16 @@ void UBDockPalette::addTab(UBDockPaletteWidget *widget) */ void UBDockPalette::removeTab(UBDockPaletteWidget* widget) { - int nWidget = mTabWidgets.indexOf(widget); - if( nWidget >= 0 ) - { - mpStackWidget->removeWidget(widget); - mTabWidgets.remove(nWidget); - widget->hide(); - update(); - } - resizeTabs(); - mCurrentTab = qMax(mCurrentTab - 1, 0); + int nWidget = mTabWidgets.indexOf(widget); + if( nWidget >= 0 ) + { + mpStackWidget->removeWidget(widget); + mTabWidgets.remove(nWidget); + widget->hide(); + update(); + } + resizeTabs(); + mCurrentTab = qMax(mCurrentTab - 1, 0); } /** @@ -410,7 +398,7 @@ void UBDockPalette::removeTab(UBDockPaletteWidget* widget) */ void UBDockPalette::onResizeRequest(QResizeEvent *event) { - resizeEvent(event); + resizeEvent(event); } /** @@ -419,7 +407,7 @@ void UBDockPalette::onResizeRequest(QResizeEvent *event) */ int UBDockPalette::tabSpacing() { - return 2; + return 2; } /** @@ -428,11 +416,11 @@ int UBDockPalette::tabSpacing() */ void UBDockPalette::onShowTabWidget(UBDockPaletteWidget* widget) { - if (mRegisteredWidgets.contains(widget)) - { - widget->setVisibleState(true); - addTab(widget); - } + if (mRegisteredWidgets.contains(widget)) + { + widget->setVisibleState(true); + addTab(widget); + } } /** @@ -441,11 +429,11 @@ void UBDockPalette::onShowTabWidget(UBDockPaletteWidget* widget) */ void UBDockPalette::onHideTabWidget(UBDockPaletteWidget* widget) { - if (mRegisteredWidgets.contains(widget)) - { - widget->setVisibleState(false); - removeTab(widget); - } + if (mRegisteredWidgets.contains(widget)) + { + widget->setVisibleState(false); + removeTab(widget); + } } /** @@ -453,11 +441,11 @@ void UBDockPalette::onHideTabWidget(UBDockPaletteWidget* widget) */ void UBDockPalette::connectSignals() { - for(int i=0; i < mRegisteredWidgets.size(); i++) - { - connect(mRegisteredWidgets.at(i), SIGNAL(showTab(UBDockPaletteWidget*)), this, SLOT(onShowTabWidget(UBDockPaletteWidget*))); - connect(mRegisteredWidgets.at(i), SIGNAL(hideTab(UBDockPaletteWidget*)), this, SLOT(onHideTabWidget(UBDockPaletteWidget*))); - } + for(int i=0; i < mRegisteredWidgets.size(); i++) + { + connect(mRegisteredWidgets.at(i), SIGNAL(showTab(UBDockPaletteWidget*)), this, SLOT(onShowTabWidget(UBDockPaletteWidget*))); + connect(mRegisteredWidgets.at(i), SIGNAL(hideTab(UBDockPaletteWidget*)), this, SLOT(onHideTabWidget(UBDockPaletteWidget*))); + } } /** @@ -466,194 +454,194 @@ void UBDockPalette::connectSignals() */ void UBDockPalette::registerWidget(UBDockPaletteWidget *widget) { - if(!mRegisteredWidgets.contains(widget)) - { - // Update the parent of this widget - widget->setParent(this); - mRegisteredWidgets.append(widget); + if(!mRegisteredWidgets.contains(widget)) + { + // Update the parent of this widget + widget->setParent(this); + mRegisteredWidgets.append(widget); - // By default, the widget is hidden - widget->hide(); - } + // By default, the widget is hidden + widget->hide(); + } } /** - * \brief Handles the 'all download finished' notification - */ + * \brief Handles the 'all download finished' notification + */ void UBDockPalette::onAllDownloadsFinished() { - for(int i=0; iname()){ - mpStackWidget->setCurrentWidget(pW); - } - } + for(int i=0; iname()){ + mpStackWidget->setCurrentWidget(pW); + } + } } void UBDockPalette::moveTabs() { - // if (!mHTab) { - if(eUBDockTabOrientation_Up == mTabsOrientation) { - mHTab = border(); - } else { - mHTab = height() - border() - mTabWidgets.size() * TABSIZE - (mTabWidgets.size() - 1) * tabSpacing(); - } -// } - - QPoint origin(width(), mHTab + mTabPalette->mVerticalOffset); - - switch (mOrientation) { - case eUBDockOrientation_Left: - origin.setX(width()); - break; - case eUBDockOrientation_Right: - if (parentWidget()) { - origin.setX(parentWidget()->width() - width() - border() * 2); - } - break; - case eUBDockOrientation_Top: ; - case eUBDockOrientation_Bottom: ; - } - - mTabPalette->move(origin.x(), origin.y()); + // if (!mHTab) { + if(eUBDockTabOrientation_Up == mTabsOrientation) { + mHTab = border(); + } else { + mHTab = height() - border() - mTabWidgets.size() * TABSIZE - (mTabWidgets.size() - 1) * tabSpacing(); + } + // } + + QPoint origin(width(), mHTab + mTabPalette->mVerticalOffset); + + switch (mOrientation) { + case eUBDockOrientation_Left: + origin.setX(width()); + break; + case eUBDockOrientation_Right: + if (parentWidget()) { + origin.setX(parentWidget()->width() - width() - border() * 2); + } + break; + case eUBDockOrientation_Top: ; + case eUBDockOrientation_Bottom: ; + } + + mTabPalette->move(origin.x(), origin.y()); } void UBDockPalette::resizeTabs() { - int numTabs = mTabWidgets.size(); - mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing()); + int numTabs = mTabWidgets.size(); + mTabPalette->setFixedSize(2 * border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * tabSpacing()); } QRect UBDockPalette::getTabPaletteRect() { - QRect tabsRect = mTabPalette->rect(); - QPoint topLeft = mTabPalette->mapToParent(tabsRect.topLeft()); - QPoint bottomRight = mTabPalette->mapToParent(tabsRect.bottomRight()); + QRect tabsRect = mTabPalette->rect(); + QPoint topLeft = mTabPalette->mapToParent(tabsRect.topLeft()); + QPoint bottomRight = mTabPalette->mapToParent(tabsRect.bottomRight()); - return QRect(topLeft, bottomRight); + return QRect(topLeft, bottomRight); } void UBDockPalette::assignParent(QWidget *widget) { - setParent(widget); - mTabPalette->setParent(widget); + setParent(widget); + mTabPalette->setParent(widget); } void UBDockPalette::setVisible(bool visible) { - QWidget::setVisible(visible); - mTabPalette->setVisible(visible); + QWidget::setVisible(visible); + mTabPalette->setVisible(visible); } bool UBDockPalette::switchMode(eUBDockPaletteWidgetMode mode) { - bool hasVisibleElements = false; - //-------------------------------// - // get full right palette widgets list, parse it, show all widgets for BOARD mode, and hide all other - for(int i = 0; i < mRegisteredWidgets.size(); i++) - { - UBDockPaletteWidget* pNextWidget = mRegisteredWidgets.at(i); - if( pNextWidget != NULL ) - { - if( pNextWidget->visibleInMode(mode) ) - { - addTab(pNextWidget); - hasVisibleElements = true; - } - else - { - removeTab(pNextWidget); - } - } - } - //-------------------------------// - - if(mRegisteredWidgets.size() > 0) - showTabWidget(0); - - update(); - - return hasVisibleElements; + bool hasVisibleElements = false; + //-------------------------------// + // get full right palette widgets list, parse it, show all widgets for BOARD mode, and hide all other + for(int i = 0; i < mRegisteredWidgets.size(); i++) + { + UBDockPaletteWidget* pNextWidget = mRegisteredWidgets.at(i); + if( pNextWidget != NULL ) + { + if( pNextWidget->visibleInMode(mode) ) + { + addTab(pNextWidget); + hasVisibleElements = true; + } + else + { + removeTab(pNextWidget); + } + } + } + //-------------------------------// + + if(mRegisteredWidgets.size() > 0) + showTabWidget(0); + + update(); + + return hasVisibleElements; } UBTabDockPalette::UBTabDockPalette(UBDockPalette *dockPalette, QWidget *parent) : - QWidget(parent) - , dock(dockPalette) - , mVerticalOffset(0) - , mFlotable(false) + QWidget(parent) +, dock(dockPalette) +, mVerticalOffset(0) +, mFlotable(false) { - int numTabs = dock->mTabWidgets.size(); - resize(2 * dock->border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * dock->tabSpacing()); + int numTabs = dock->mTabWidgets.size(); + resize(2 * dock->border(), (numTabs * TABSIZE) + qMax(numTabs - 1, 0) * dock->tabSpacing()); - setAttribute(Qt::WA_TranslucentBackground); + setAttribute(Qt::WA_TranslucentBackground); } void UBTabDockPalette::paintEvent(QPaintEvent *) { - int nTabs = dock->mTabWidgets.size(); - if (nTabs <= 0) { - qDebug() << "not enough tabs"; - return; - } - - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - painter.setPen(Qt::NoPen); - painter.setBrush(dock->mBackgroundBrush); - - int yFrom = 0; - for (int i = 0; i < nTabs; i++) { - UBDockPaletteWidget* pCrntWidget = dock->mTabWidgets.at(i); - QPainterPath path; - path.setFillRule(Qt::WindingFill); - QPixmap iconPixmap; - - switch (dock->mOrientation) { - case eUBDockOrientation_Left: - path.addRect(0, yFrom, width() / 2, TABSIZE); - path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius()); - if (pCrntWidget) { - if(dock->mCollapseWidth >= dock->width()) { - // Get the collapsed icon - iconPixmap = pCrntWidget->iconToRight(); - } else { - // Get the expanded icon - iconPixmap = pCrntWidget->iconToLeft(); - } - - } - break; - - case eUBDockOrientation_Right: - path.addRect(width() /2, yFrom, width() / 2, TABSIZE); - path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius()); - if (pCrntWidget) { - if(dock->mCollapseWidth >= dock->width()) { - // Get the collapsed icon - iconPixmap = pCrntWidget->iconToLeft(); - } else { - // Get the expanded icon - iconPixmap = pCrntWidget->iconToRight(); - } - } - break; - - case eUBDockOrientation_Top: ; - case eUBDockOrientation_Bottom: ; - default: - break; - } - - painter.save(); - QPixmap transparencyPix(":/images/tab_mask.png"); - if (dock->mCurrentTab != i) { - iconPixmap.setAlphaChannel(transparencyPix); - QColor color(0x7F, 0x7F, 0x7F, 0x3F); - painter.setBrush(QBrush(color)); - } - - painter.drawPath(path); - painter.drawPixmap(2, yFrom + 2, width() - 4, TABSIZE - 4, iconPixmap); - yFrom += (TABSIZE + dock->tabSpacing()); - painter.restore(); - } + int nTabs = dock->mTabWidgets.size(); + if (nTabs <= 0) { + qDebug() << "not enough tabs"; + return; + } + + QPainter painter(this); + painter.setRenderHint(QPainter::Antialiasing); + painter.setPen(Qt::NoPen); + painter.setBrush(dock->mBackgroundBrush); + + int yFrom = 0; + for (int i = 0; i < nTabs; i++) { + UBDockPaletteWidget* pCrntWidget = dock->mTabWidgets.at(i); + QPainterPath path; + path.setFillRule(Qt::WindingFill); + QPixmap iconPixmap; + + switch (dock->mOrientation) { + case eUBDockOrientation_Left: + path.addRect(0, yFrom, width() / 2, TABSIZE); + path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius()); + if (pCrntWidget) { + if(dock->mCollapseWidth >= dock->width()) { + // Get the collapsed icon + iconPixmap = pCrntWidget->iconToRight(); + } else { + // Get the expanded icon + iconPixmap = pCrntWidget->iconToLeft(); + } + + } + break; + + case eUBDockOrientation_Right: + path.addRect(width() /2, yFrom, width() / 2, TABSIZE); + path.addRoundedRect(0, yFrom, width(), TABSIZE, dock->radius(), dock->radius()); + if (pCrntWidget) { + if(dock->mCollapseWidth >= dock->width()) { + // Get the collapsed icon + iconPixmap = pCrntWidget->iconToLeft(); + } else { + // Get the expanded icon + iconPixmap = pCrntWidget->iconToRight(); + } + } + break; + + case eUBDockOrientation_Top: ; + case eUBDockOrientation_Bottom: ; + default: + break; + } + + painter.save(); + QPixmap transparencyPix(":/images/tab_mask.png"); + if (dock->mCurrentTab != i) { + iconPixmap.setAlphaChannel(transparencyPix); + QColor color(0x7F, 0x7F, 0x7F, 0x3F); + painter.setBrush(QBrush(color)); + } + + painter.drawPath(path); + painter.drawPixmap(2, yFrom + 2, width() - 4, TABSIZE - 4, iconPixmap); + yFrom += (TABSIZE + dock->tabSpacing()); + painter.restore(); + } } UBTabDockPalette::~UBTabDockPalette() { @@ -661,97 +649,97 @@ UBTabDockPalette::~UBTabDockPalette() void UBTabDockPalette::mousePressEvent(QMouseEvent *event) { - dock->mClickTime = QTime::currentTime(); - // The goal here is to verify if the user can resize the widget. - // It is only possible to resize it if the border is selected - QPoint p = event->pos(); - dock->mMousePressPos = p; - dock->mResized = false; - - switch(dock->mOrientation) { - case eUBDockOrientation_Left: - dock->mCanResize = true; - break; - case eUBDockOrientation_Right: - dock->mCanResize = true; - break; - case eUBDockOrientation_Top: - // Not supported yet - break; - case eUBDockOrientation_Bottom: - // Not supported yet - break; - default: - break; - } + dock->mClickTime = QTime::currentTime(); + // The goal here is to verify if the user can resize the widget. + // It is only possible to resize it if the border is selected + QPoint p = event->pos(); + dock->mMousePressPos = p; + dock->mResized = false; + + switch(dock->mOrientation) { + case eUBDockOrientation_Left: + dock->mCanResize = true; + break; + case eUBDockOrientation_Right: + dock->mCanResize = true; + break; + case eUBDockOrientation_Top: + // Not supported yet + break; + case eUBDockOrientation_Bottom: + // Not supported yet + break; + default: + break; + } } void UBTabDockPalette::mouseMoveEvent(QMouseEvent *event) { - QPoint p = event->pos(); - - if(dock->mCanResize && ((dock->mMousePressPos - p).manhattanLength() > QApplication::startDragDistance())) - { - if (qAbs(dock->mMousePressPos.y() - p.y()) > 10 && mFlotable) { - qDebug() << "y differences" << dock->mMousePressPos.y() << p.y(); - mVerticalOffset += p.y() - dock->mMousePressPos.y(); - move(this->pos().x(), p.y()); - } - - switch(dock->mOrientation) { - - case eUBDockOrientation_Left: - p.setX(p.x() + dock->width()); - if(p.x() < dock->collapseWidth() && p.x() >= dock->minimumWidth()) { - dock->resize(0, dock->height()); - dock->mLastWidth = dock->collapseWidth() + 1; - dock->mResized = true; - } else if (p.x() <= dock->maximumWidth() && p.x() >= dock->minimumWidth()) { - dock->resize(p.x(), dock->height()); - dock->mResized = true; - } - break; - - case eUBDockOrientation_Right: - p.setX(p.x() - 2 * dock->border()); - if((dock->x() + p.x() > dock->parentWidget()->width() - dock->collapseWidth()) && (dock->x() + p.x() < dock->parentWidget()->width())) { - dock->resize(0, dock->height()); - dock->mLastWidth = dock->collapseWidth() + 1; - dock->mResized = true; - } else if((dock->x() + p.x() >= dock->parentWidget()->width() - dock->maximumWidth()) && (dock->x() + p.x() <= dock->parentWidget()->width() - dock->minimumWidth())) { - dock->resize(dock->parentWidget()->width() - (dock->x() + p.x()), dock->height()); - dock->mResized = true; - } - break; - - case eUBDockOrientation_Top: - case eUBDockOrientation_Bottom: - if(p.y() <= dock->maximumHeight()) { - dock->resize(width(), p.y()); - dock->mResized = true; - } - break; - - default: - break; - } - } + QPoint p = event->pos(); + + if(dock->mCanResize && ((dock->mMousePressPos - p).manhattanLength() > QApplication::startDragDistance())) + { + if (qAbs(dock->mMousePressPos.y() - p.y()) > 10 && mFlotable) { + qDebug() << "y differences" << dock->mMousePressPos.y() << p.y(); + mVerticalOffset += p.y() - dock->mMousePressPos.y(); + move(this->pos().x(), p.y()); + } + + switch(dock->mOrientation) { + + case eUBDockOrientation_Left: + p.setX(p.x() + dock->width()); + if(p.x() < dock->collapseWidth() && p.x() >= dock->minimumWidth()) { + dock->resize(0, dock->height()); + //dock->mLastWidth = dock->collapseWidth() + 1; + dock->mResized = true; + } else if (p.x() <= dock->maximumWidth() && p.x() >= dock->minimumWidth()) { + dock->resize(p.x(), dock->height()); + dock->mResized = true; + } + break; + + case eUBDockOrientation_Right: + p.setX(p.x() - 2 * dock->border()); + if((dock->x() + p.x() > dock->parentWidget()->width() - dock->collapseWidth()) && (dock->x() + p.x() < dock->parentWidget()->width())) { + dock->resize(0, dock->height()); + //dock->mLastWidth = dock->collapseWidth() + 1; + dock->mResized = true; + } else if((dock->x() + p.x() >= dock->parentWidget()->width() - dock->maximumWidth()) && (dock->x() + p.x() <= dock->parentWidget()->width() - dock->minimumWidth())) { + dock->resize(dock->parentWidget()->width() - (dock->x() + p.x()), dock->height()); + dock->mResized = true; + } + break; + + case eUBDockOrientation_Top: + case eUBDockOrientation_Bottom: + if(p.y() <= dock->maximumHeight()) { + dock->resize(width(), p.y()); + dock->mResized = true; + } + break; + + default: + break; + } + } } void UBTabDockPalette::mouseReleaseEvent(QMouseEvent *event) { - Q_UNUSED(event); - if(!dock->mResized && dock->mClickTime.elapsed() < CLICKTIME) { - int nbTabs = dock->mTabWidgets.size(); - int clickedTab = 0; - // If the clicked position is in the tab, perform the related action - - if(dock->mMousePressPos.x() >= 0 && - dock->mMousePressPos.x() <= width() && - dock->mMousePressPos.y() >= 0 && - dock->mMousePressPos.y() <= nbTabs * TABSIZE + (nbTabs -1)*dock->tabSpacing()) { - - clickedTab = (dock->mMousePressPos.y()) / (TABSIZE + dock->tabSpacing()); - dock->tabClicked(clickedTab); - } - } - dock->mCanResize = false; + Q_UNUSED(event); + if(!dock->mResized && dock->mClickTime.elapsed() < CLICKTIME) { + int nbTabs = dock->mTabWidgets.size(); + int clickedTab = 0; + // If the clicked position is in the tab, perform the related action + + if(dock->mMousePressPos.x() >= 0 && + dock->mMousePressPos.x() <= width() && + dock->mMousePressPos.y() >= 0 && + dock->mMousePressPos.y() <= nbTabs * TABSIZE + (nbTabs -1)*dock->tabSpacing()) { + + clickedTab = (dock->mMousePressPos.y()) / (TABSIZE + dock->tabSpacing()); + dock->tabClicked(clickedTab); + } + } + dock->mCanResize = false; } diff --git a/src/gui/UBLeftPalette.cpp b/src/gui/UBLeftPalette.cpp index 00e0a4d9..21b3521b 100644 --- a/src/gui/UBLeftPalette.cpp +++ b/src/gui/UBLeftPalette.cpp @@ -29,7 +29,10 @@ UBLeftPalette::UBLeftPalette(QWidget *parent, const char *name): mLastWidth = UBSettings::settings()->leftLibPaletteWidth->get().toInt(); mCollapseWidth = 150; - resize(mLastWidth, parentWidget()->height()); + if(UBSettings::settings()->leftLibPaletteIsCollapsed->get().toBool()) + resize(0,parentWidget()->height()); + else + resize(mLastWidth, parentWidget()->height()); } /** @@ -54,6 +57,9 @@ void UBLeftPalette::updateMaxWidth() */ void UBLeftPalette::resizeEvent(QResizeEvent *event) { - UBSettings::settings()->leftLibPaletteWidth->set(width()); + int newWidth = width(); + if(newWidth > mCollapseWidth) + UBSettings::settings()->leftLibPaletteWidth->set(newWidth); + UBSettings::settings()->leftLibPaletteIsCollapsed->set(newWidth == 0); UBDockPalette::resizeEvent(event); } diff --git a/src/gui/UBNavigatorPalette.cpp b/src/gui/UBNavigatorPalette.cpp index ed5c7aa8..a389e3c3 100644 --- a/src/gui/UBNavigatorPalette.cpp +++ b/src/gui/UBNavigatorPalette.cpp @@ -33,8 +33,6 @@ UBNavigatorPalette::UBNavigatorPalette(QWidget *parent, const char *name): { setOrientation(eUBDockOrientation_Left); setMaximumWidth(300); - //mCollapsedIcon = QPixmap(":images/pages_open.png"); - //mIcon = QPixmap(":images/pages_close.png"); resize(UBSettings::settings()->navigPaletteWidth->get().toInt(), height()); mLastWidth = 300; diff --git a/src/gui/UBRightPalette.cpp b/src/gui/UBRightPalette.cpp index 26923eac..9762b5e8 100644 --- a/src/gui/UBRightPalette.cpp +++ b/src/gui/UBRightPalette.cpp @@ -27,11 +27,13 @@ UBRightPalette::UBRightPalette(QWidget *parent, const char *name): { setObjectName(name); setOrientation(eUBDockOrientation_Right); - - mLastWidth = UBSettings::settings()->rightLibPaletteWidth->get().toInt(); mCollapseWidth = 150; - resize(mLastWidth, parentWidget()->height()); + mLastWidth = UBSettings::settings()->rightLibPaletteWidth->get().toInt(); + if(UBSettings::settings()->rightLibPaletteIsCollapsed->get().toBool()) + resize(0,parentWidget()->height()); + else + resize(mLastWidth, parentWidget()->height()); } /** @@ -59,8 +61,11 @@ void UBRightPalette::mouseMoveEvent(QMouseEvent *event) */ void UBRightPalette::resizeEvent(QResizeEvent *event) { + int newWidth = width(); + if(newWidth > mCollapseWidth) + UBSettings::settings()->rightLibPaletteWidth->set(newWidth); + UBSettings::settings()->rightLibPaletteIsCollapsed->set(newWidth == 0); UBDockPalette::resizeEvent(event); - UBSettings::settings()->rightLibPaletteWidth->set(width()); emit resized(); }