framework/source/layoutmanager/toolbarlayoutmanager.cxx | 235 +++++++--------- framework/source/layoutmanager/toolbarlayoutmanager.hxx | 1 instsetoo_native/util/openoffice.lst | 8 3 files changed, 118 insertions(+), 126 deletions(-)
New commits: commit 69dbe9b758a4b095d878e76d58300ee3ec4f9584 Author: Oliver-Rainer Wittmann <o...@apache.org> Date: Mon Mar 10 09:45:00 2014 +0000 provide intermediate UpdateURL for current trunk diff --git a/instsetoo_native/util/openoffice.lst b/instsetoo_native/util/openoffice.lst old mode 100644 new mode 100755 index 2017ef0..e2e8401 --- a/instsetoo_native/util/openoffice.lst +++ b/instsetoo_native/util/openoffice.lst @@ -70,7 +70,7 @@ Apache_OpenOffice ABOUTBOXPRODUCTVERSION 4.1.0 BASEPRODUCTVERSION 4.1 PCPFILENAME openoffice.pcp - UPDATEURL https://ooo-updates.apache.org/aoo410/check.Update + UPDATEURL https://ooo-updates.apache.org/aoonext/check.Update ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,userland.txt,version.lst REMOVE_UPGRADE_CODE_FILE upgradecode_remove_ooo.txt ADDSYSTEMINTEGRATION 1 @@ -129,7 +129,7 @@ Apache_OpenOffice_wJRE USERDIRPRODUCTVERSION 4 ABOUTBOXPRODUCTVERSION 4.1.0 BASEPRODUCTVERSION 4.1 - UPDATEURL https://ooo-updates.apache.org/aoo410/check.Update + UPDATEURL https://ooo-updates.apache.org/aoonext/check.Update ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,javaversion2.dat,userland.txt,version.lst REMOVE_UPGRADE_CODE_FILE upgradecode_remove_ooo.txt ADDSYSTEMINTEGRATION 1 @@ -196,7 +196,7 @@ Apache_OpenOffice_Dev UREPACKAGEPREFIX aoodev SOLSUREPACKAGEPREFIX aoodev REGISTRYLAYERNAME LayerDev - UPDATEURL https://ooo-updates.apache.org/aoo410/check.Update + UPDATEURL https://ooo-updates.apache.org/aoonextdev/check.Update ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,javaversion2.dat,userland.txt,version.lst EVAL PACKAGEVERSION 4.1.0 @@ -409,7 +409,7 @@ Apache_OpenOffice_Beta USERDIRPRODUCTVERSION 4 ABOUTBOXPRODUCTVERSION 4.1.0 BASEPRODUCTVERSION 4.1 - UPDATEURL https://ooo-updates.apache.org/aoo410/check.Update + UPDATEURL https://ooo-updates.apache.org/aoonextbeta/check.Update ADD_INCLUDE_FILES cliureversion.mk,clioootypesversion.mk,userland.txt,version.lst REMOVE_UPGRADE_CODE_FILE upgradecode_remove_ooo.txt ADDSYSTEMINTEGRATION 0 commit bf8d8d38c88ca16e7156c81c9ec4fce4adb791e0 Author: Oliver-Rainer Wittmann <o...@apache.org> Date: Mon Mar 10 09:37:02 2014 +0000 124355: Toolbarmanager: correct show/hide of toolbars; correct calculation of docking area sizes diff --git a/framework/source/layoutmanager/toolbarlayoutmanager.cxx b/framework/source/layoutmanager/toolbarlayoutmanager.cxx index 2e25588..f267684 100644 --- a/framework/source/layoutmanager/toolbarlayoutmanager.cxx +++ b/framework/source/layoutmanager/toolbarlayoutmanager.cxx @@ -266,103 +266,100 @@ bool ToolbarLayoutManager::implts_isParentWindowVisible() const return bVisible; } -Rectangle ToolbarLayoutManager::implts_calcDockingArea() +namespace { - ReadGuard aReadLock( m_aLock ); - UIElementVector aWindowVector( m_aUIElements ); - aReadLock.unlock(); + void insertDockingAreaSize( + const UIElement& rUIElement, + const awt::Rectangle& rUIElementPosSize, + std::vector< sal_Int32 >& rDockingAreaData ) + { + sal_Int32 nAreaPos = 0; + sal_Int32 nSize = 0; + if ( isHorizontalDockingArea( rUIElement.m_aDockedData.m_nDockedArea ) ) + { + nAreaPos = rUIElement.m_aDockedData.m_aPos.Y(); + nSize = rUIElementPosSize.Height; + } + else + { + nAreaPos = rUIElement.m_aDockedData.m_aPos.X(); + nSize = rUIElementPosSize.Width; + } - Rectangle aBorderSpace; - sal_Int32 nCurrRowColumn( 0 ); - sal_Int32 nCurrPos( 0 ); - sal_Int32 nCurrDockingArea( ui::DockingArea_DOCKINGAREA_TOP ); - std::vector< sal_Int32 > aRowColumnSizes[DOCKINGAREAS_COUNT]; - UIElementVector::const_iterator pConstIter; + const sal_uInt32 nIndexPos = nAreaPos >= 0 ? static_cast< sal_uInt32 >(nAreaPos) : 0; + if ( rDockingAreaData.size() < nIndexPos + 1 ) + { + rDockingAreaData.resize( nIndexPos + 1, 0 ); + } - // initialize rectangle with zero values! - aBorderSpace.setWidth(0); - aBorderSpace.setHeight(0); + if ( rDockingAreaData[nIndexPos] < nSize ) + { + rDockingAreaData[nIndexPos] = nSize; + } + } - aRowColumnSizes[nCurrDockingArea].clear(); - aRowColumnSizes[nCurrDockingArea].push_back( 0 ); - for ( pConstIter = aWindowVector.begin(); pConstIter != aWindowVector.end(); pConstIter++ ) + sal_Int32 calcDockingAreaSize( const std::vector< sal_Int32 >& rDockingAreaData ) { - uno::Reference< ui::XUIElement > xUIElement( pConstIter->m_xUIElement, uno::UNO_QUERY ); - if ( xUIElement.is() ) + sal_Int32 nDockingAreaSize = 0; + + std::vector< sal_Int32 >::const_iterator iDockingAreaDataEnd = rDockingAreaData.end(); + for ( std::vector< sal_Int32 >::const_iterator iDockingAreaData = rDockingAreaData.begin(); + iDockingAreaData != iDockingAreaDataEnd; + ++iDockingAreaData ) { - uno::Reference< awt::XWindow > xWindow( xUIElement->getRealInterface(), uno::UNO_QUERY ); - uno::Reference< awt::XDockableWindow > xDockWindow( xWindow, uno::UNO_QUERY ); - if ( xWindow.is() && xDockWindow.is() ) - { - vos::OGuard aGuard( Application::GetSolarMutex() ); + nDockingAreaSize += *(iDockingAreaData); + } - Window* pWindow = VCLUnoHelper::GetWindow( xWindow ); - if ( pWindow && !xDockWindow->isFloating() && pConstIter->m_bVisible ) - { - awt::Rectangle aPosSize = xWindow->getPosSize(); - if ( pConstIter->m_aDockedData.m_nDockedArea != nCurrDockingArea ) - { - nCurrDockingArea = pConstIter->m_aDockedData.m_nDockedArea; - nCurrRowColumn = 0; - nCurrPos = 0; - aRowColumnSizes[nCurrDockingArea].clear(); - aRowColumnSizes[nCurrDockingArea].push_back( 0 ); - } + return nDockingAreaSize; + } +} - if ( pConstIter->m_aDockedData.m_nDockedArea == nCurrDockingArea ) - { - if ( isHorizontalDockingArea( pConstIter->m_aDockedData.m_nDockedArea )) - { - if ( pConstIter->m_aDockedData.m_aPos.Y() > nCurrPos ) - { - ++nCurrRowColumn; - nCurrPos = pConstIter->m_aDockedData.m_aPos.Y(); - aRowColumnSizes[nCurrDockingArea].push_back( 0 ); - } - if ( aPosSize.Height > aRowColumnSizes[nCurrDockingArea][nCurrRowColumn] ) - aRowColumnSizes[nCurrDockingArea][nCurrRowColumn] = aPosSize.Height; - } - else - { - if ( pConstIter->m_aDockedData.m_aPos.X() > nCurrPos ) - { - ++nCurrRowColumn; - nCurrPos = pConstIter->m_aDockedData.m_aPos.X(); - aRowColumnSizes[nCurrDockingArea].push_back( 0 ); - } +Rectangle ToolbarLayoutManager::implts_calcDockingArea() +{ + Rectangle aBorderSpace( 0, 0, 0, 0 ); - if ( aPosSize.Width > aRowColumnSizes[nCurrDockingArea][nCurrRowColumn] ) - aRowColumnSizes[nCurrDockingArea][nCurrRowColumn] = aPosSize.Width; - } + // For each docking area one container of UIElement sizes. + std::vector< std::vector< sal_Int32 > >aDockingAreaSizeDatas( DOCKINGAREAS_COUNT ); + + { + ReadGuard aReadLock( m_aLock ); + vos::OGuard aGuard( Application::GetSolarMutex() ); + + // Iterate over the UIElements and collect corresponding docking area data + // for non-floating and visible ones separated for the each docking area. + // Note: For each docking area row resp. column only the size of largest UIElement is collected. + for ( UIElementVector::const_iterator pConstIter = m_aUIElements.begin(); pConstIter != m_aUIElements.end(); ++pConstIter ) + { + uno::Reference< ui::XUIElement > xUIElement( pConstIter->m_xUIElement, uno::UNO_QUERY ); + if ( xUIElement.is() ) + { + uno::Reference< awt::XWindow > xWindow( xUIElement->getRealInterface(), uno::UNO_QUERY ); + uno::Reference< awt::XDockableWindow > xDockWindow( xWindow, uno::UNO_QUERY ); + if ( xWindow.is() && xDockWindow.is() ) + { + Window* pWindow = VCLUnoHelper::GetWindow( xWindow ); + if ( pWindow && !xDockWindow->isFloating() && pConstIter->m_bVisible ) + { + const awt::Rectangle aPosSize = xWindow->getPosSize(); + insertDockingAreaSize( + *(pConstIter), + aPosSize, + aDockingAreaSizeDatas[pConstIter->m_aDockedData.m_nDockedArea] ); } } } } - } - // Sum up max heights from every row/column - if ( !aWindowVector.empty() ) - { - for ( sal_Int32 i = 0; i <= ui::DockingArea_DOCKINGAREA_RIGHT; i++ ) - { - sal_Int32 nSize( 0 ); - const sal_uInt32 nCount = aRowColumnSizes[i].size(); - for ( sal_uInt32 j = 0; j < nCount; j++ ) - nSize += aRowColumnSizes[i][j]; - - if ( i == ui::DockingArea_DOCKINGAREA_TOP ) - aBorderSpace.Top() = nSize; - else if ( i == ui::DockingArea_DOCKINGAREA_BOTTOM ) - aBorderSpace.Bottom() = nSize; - else if ( i == ui::DockingArea_DOCKINGAREA_LEFT ) - aBorderSpace.Left() = nSize; - else - aBorderSpace.Right() = nSize; - } + aReadLock.unlock(); } + aBorderSpace.Top() = calcDockingAreaSize( aDockingAreaSizeDatas[ui::DockingArea_DOCKINGAREA_TOP] ); + aBorderSpace.Bottom() = calcDockingAreaSize( aDockingAreaSizeDatas[ui::DockingArea_DOCKINGAREA_BOTTOM] ); + aBorderSpace.Left() = calcDockingAreaSize( aDockingAreaSizeDatas[ui::DockingArea_DOCKINGAREA_LEFT] ); + aBorderSpace.Right() = calcDockingAreaSize( aDockingAreaSizeDatas[ui::DockingArea_DOCKINGAREA_RIGHT] ); + return aBorderSpace; } @@ -553,60 +550,65 @@ void ToolbarLayoutManager::destroyToolbars() } } -bool ToolbarLayoutManager::showToolbar( const ::rtl::OUString& rResourceURL ) +bool ToolbarLayoutManager::implts_setToolbarVisibility( + bool bVisible, + UIElement aUIElement ) { - UIElement aUIElement = implts_findToolbar( rResourceURL ); + bool bRet = false; vos::OGuard aGuard( Application::GetSolarMutex() ); Window* pWindow = getWindowFromXUIElement( aUIElement.m_xUIElement ); if ( pWindow ) { + if ( bVisible ) + { + pWindow->Show( sal_True, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE ); + } + else + { + pWindow->Show( sal_False ); + } if ( !aUIElement.m_bFloating ) + { implts_setLayoutDirty(); - else - pWindow->Show( sal_True, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE ); - - aUIElement.m_bVisible = true; + } + aUIElement.m_bVisible = bVisible; implts_writeWindowStateData( aUIElement ); implts_setToolbar( aUIElement ); - return true; + + bRet = true; } - return false; + return bRet; } -bool ToolbarLayoutManager::hideToolbar( const ::rtl::OUString& rResourceURL ) +bool ToolbarLayoutManager::showToolbar( const ::rtl::OUString& rResourceURL ) { UIElement aUIElement = implts_findToolbar( rResourceURL ); + const bool bRet = implts_setToolbarVisibility( true, aUIElement ); + implts_sortUIElements(); + return bRet; +} - vos::OGuard aGuard( Application::GetSolarMutex() ); - Window* pWindow = getWindowFromXUIElement( aUIElement.m_xUIElement ); - if ( pWindow ) - { - pWindow->Show( sal_False ); - if ( !aUIElement.m_bFloating ) - implts_setLayoutDirty(); - - aUIElement.m_bVisible = false; - implts_writeWindowStateData( aUIElement ); - implts_setToolbar( aUIElement ); - return true; - } - - return false; +bool ToolbarLayoutManager::hideToolbar( const ::rtl::OUString& rResourceURL ) +{ + UIElement aUIElement = implts_findToolbar( rResourceURL ); + const bool bRet = implts_setToolbarVisibility( false, aUIElement ); + implts_sortUIElements(); + return bRet; } void ToolbarLayoutManager::refreshToolbarsVisibility( bool bAutomaticToolbars ) { - UIElementVector aUIElementVector; + if ( !bAutomaticToolbars ) + return; ReadGuard aReadLock( m_aLock ); - bool bVisible( m_bVisible ); - aReadLock.unlock(); - - if ( !bVisible || !bAutomaticToolbars ) + if ( !m_bVisible ) return; + aReadLock.unlock(); + UIElementVector aUIElementVector; implts_getUIElementVectorCopy( aUIElementVector ); UIElement aUIElement; @@ -661,22 +663,11 @@ void ToolbarLayoutManager::setVisible( bool bVisible ) for ( pIter = aUIElementVector.begin(); pIter != aUIElementVector.end(); pIter++ ) { pIter->m_bMasterHide = !bVisible; - Window* pWindow = getWindowFromXUIElement( pIter->m_xUIElement ); - if ( pWindow ) - { - bool bSetVisible( pIter->m_bVisible & bVisible ); - if ( !bSetVisible ) - pWindow->Hide(); - else - { - if ( pIter->m_bFloating ) - pWindow->Show(true, SHOW_NOFOCUSCHANGE | SHOW_NOACTIVATE ); - else - implts_setLayoutDirty(); - } - } + implts_setToolbarVisibility( bVisible, *pIter ); } + implts_sortUIElements(); + if ( !bVisible ) resetDockingArea(); } diff --git a/framework/source/layoutmanager/toolbarlayoutmanager.hxx b/framework/source/layoutmanager/toolbarlayoutmanager.hxx index 3dd0770..7621e56 100755 --- a/framework/source/layoutmanager/toolbarlayoutmanager.hxx +++ b/framework/source/layoutmanager/toolbarlayoutmanager.hxx @@ -219,6 +219,7 @@ class ToolbarLayoutManager : public ::cppu::WeakImplHelper3< ::com::sun::star::a rtl::OUString implts_generateGenericAddonToolbarTitle( sal_Int32 nNumber ) const; void implts_setElementData( UIElement& rUIElement, const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XDockableWindow >& rDockWindow ); void implts_destroyDockingAreaWindows(); + bool implts_setToolbarVisibility( bool bVisible, UIElement aUIElement ); //--------------------------------------------------------------------------------------------------------- // layout methods _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits