Commit d822dc73 authored by Anatoly Mihalchenko's avatar Anatoly Mihalchenko

Merge branch 'Sankore-1.40' of github.com:Sankore/Sankore-3.1 into Sankore-1.40

parents 0180df1b 51467d47
......@@ -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", "");
......
......@@ -316,7 +316,9 @@ class UBSettings : public QObject
UBSetting* navigPaletteWidth;
UBSetting* rightLibPaletteWidth;
UBSetting* rightLibPaletteIsCollapsed;
UBSetting* leftLibPaletteWidth;
UBSetting* leftLibPaletteIsCollapsed;
UBSetting* communityUser;
UBSetting* communityPsw;
......
......@@ -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<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex)))){
mCrntTabWidget = dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex))->name();
}
// Update the current tab index
if(NULL != (dynamic_cast<UBDockPaletteWidget*>(mpStackWidget->widget(tabIndex)))){
mCrntTabWidget = dynamic_cast<UBDockPaletteWidget*>(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; i<mTabWidgets.size(); i++){
UBDockPaletteWidget* pW = mTabWidgets.at(i);
if(NULL != pW && mCrntTabWidget == pW->name()){
mpStackWidget->setCurrentWidget(pW);
}
}
for(int i=0; i<mTabWidgets.size(); i++){
UBDockPaletteWidget* pW = mTabWidgets.at(i);
if(NULL != pW && mCrntTabWidget == pW->name()){
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;
}
......@@ -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);
}
......@@ -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;
......
......@@ -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();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment