diff options
Diffstat (limited to 'sc/source/filter/ftools/fprogressbar.cxx')
-rw-r--r-- | sc/source/filter/ftools/fprogressbar.cxx | 253 |
1 files changed, 0 insertions, 253 deletions
diff --git a/sc/source/filter/ftools/fprogressbar.cxx b/sc/source/filter/ftools/fprogressbar.cxx deleted file mode 100644 index 403591b13..000000000 --- a/sc/source/filter/ftools/fprogressbar.cxx +++ /dev/null @@ -1,253 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sc.hxx" -#include "fprogressbar.hxx" -#include "global.hxx" -#include "progress.hxx" - -// ============================================================================ - -ScfProgressBar::ScfProgressSegment::ScfProgressSegment( sal_Size nSize ) : - mxProgress( 0 ), - mnSize( nSize ), - mnPos( 0 ) -{ -} - -ScfProgressBar::ScfProgressSegment::~ScfProgressSegment() -{ -} - -// ============================================================================ - -ScfProgressBar::ScfProgressBar( SfxObjectShell* pDocShell, const String& rText ) : - maText( rText ) -{ - Init( pDocShell ); -} - -ScfProgressBar::ScfProgressBar( SfxObjectShell* pDocShell, sal_uInt16 nResId ) : - maText( ScGlobal::GetRscString( nResId ) ) -{ - Init( pDocShell ); -} - -ScfProgressBar::ScfProgressBar( ScfProgressBar& rParProgress, ScfProgressSegment* pParSegment ) -{ - Init( rParProgress.mpDocShell ); - mpParentProgress = &rParProgress; - mpParentSegment = pParSegment; -} - -ScfProgressBar::~ScfProgressBar() -{ -} - -void ScfProgressBar::Init( SfxObjectShell* pDocShell ) -{ - mpDocShell = pDocShell; - mpParentProgress = 0; - mpParentSegment = mpCurrSegment = 0; - mnTotalSize = mnTotalPos = mnUnitSize = mnNextUnitPos = 0; - mnSysProgressScale = 1; // used to workaround the ULONG_MAX/100 limit - mbInProgress = false; -} - -ScfProgressBar::ScfProgressSegment* ScfProgressBar::GetSegment( sal_Int32 nSegment ) -{ - if( nSegment < 0 ) - return 0; - return &(maSegments.at( nSegment )); -} - -void ScfProgressBar::SetCurrSegment( ScfProgressSegment* pSegment ) -{ - if( mpCurrSegment != pSegment ) - { - mpCurrSegment = pSegment; - - if( mpParentProgress && mpParentSegment ) - { - mpParentProgress->SetCurrSegment( mpParentSegment ); - } - else if( !mxSysProgress.get() && (mnTotalSize > 0) ) - { - // System progress has an internal limit of ULONG_MAX/100. - mnSysProgressScale = 1; - sal_uLong nSysTotalSize = static_cast< sal_uLong >( mnTotalSize ); - while( nSysTotalSize >= ULONG_MAX / 100 ) - { - nSysTotalSize /= 2; - mnSysProgressScale *= 2; - } - mxSysProgress.reset( new ScProgress( mpDocShell, maText, nSysTotalSize ) ); - } - - if( !mbInProgress && mpCurrSegment && (mnTotalSize > 0) ) - { - mnUnitSize = mnTotalSize / 256 + 1; // at most 256 calls of system progress - mnNextUnitPos = 0; - mbInProgress = true; - } - } -} - -void ScfProgressBar::IncreaseProgressBar( sal_Size nDelta ) -{ - sal_Size nNewPos = mnTotalPos + nDelta; - - // call back to parent progress bar - if( mpParentProgress && mpParentSegment ) - { - // calculate new position of parent progress bar - sal_Size nParentPos = static_cast< sal_Size >( - static_cast< double >( nNewPos ) * mpParentSegment->mnSize / mnTotalSize ); - mpParentProgress->ProgressAbs( nParentPos ); - } - // modify system progress bar - else if( mxSysProgress.get() ) - { - if( nNewPos >= mnNextUnitPos ) - { - mnNextUnitPos = nNewPos + mnUnitSize; - mxSysProgress->SetState( static_cast< sal_uLong >( nNewPos / mnSysProgressScale ) ); - } - } - else - { - OSL_FAIL( "ScfProgressBar::IncreaseProgressBar - no progress bar found" ); - } - - mnTotalPos = nNewPos; -} - -sal_Int32 ScfProgressBar::AddSegment( sal_Size nSize ) -{ - OSL_ENSURE( !mbInProgress, "ScfProgressBar::AddSegment - already in progress mode" ); - if( nSize == 0 ) - return SCF_INV_SEGMENT; - - maSegments.push_back( new ScfProgressSegment( nSize ) ); - mnTotalSize += nSize; - return static_cast< sal_Int32 >( maSegments.size() - 1 ); -} - -ScfProgressBar& ScfProgressBar::GetSegmentProgressBar( sal_Int32 nSegment ) -{ - ScfProgressSegment* pSegment = GetSegment( nSegment ); - OSL_ENSURE( !pSegment || (pSegment->mnPos == 0), "ScfProgressBar::GetSegmentProgressBar - segment already started" ); - if( pSegment && (pSegment->mnPos == 0) ) - { - if( !pSegment->mxProgress.get() ) - pSegment->mxProgress.reset( new ScfProgressBar( *this, pSegment ) ); - return *pSegment->mxProgress; - } - return *this; -} - -bool ScfProgressBar::IsFull() const -{ - OSL_ENSURE( mbInProgress && mpCurrSegment, "ScfProgressBar::IsFull - no segment started" ); - return mpCurrSegment && (mpCurrSegment->mnPos >= mpCurrSegment->mnSize); -} - -void ScfProgressBar::ActivateSegment( sal_Int32 nSegment ) -{ - OSL_ENSURE( mnTotalSize > 0, "ScfProgressBar::ActivateSegment - progress range is zero" ); - if( mnTotalSize > 0 ) - SetCurrSegment( GetSegment( nSegment ) ); -} - -void ScfProgressBar::ProgressAbs( sal_Size nPos ) -{ - OSL_ENSURE( mbInProgress && mpCurrSegment, "ScfProgressBar::ProgressAbs - no segment started" ); - if( mpCurrSegment ) - { - OSL_ENSURE( mpCurrSegment->mnPos <= nPos, "ScfProgressBar::ProgressAbs - delta pos < 0" ); - OSL_ENSURE( nPos <= mpCurrSegment->mnSize, "ScfProgressBar::ProgressAbs - segment overflow" ); - if( (mpCurrSegment->mnPos < nPos) && (nPos <= mpCurrSegment->mnSize) ) - { - IncreaseProgressBar( nPos - mpCurrSegment->mnPos ); - mpCurrSegment->mnPos = nPos; - } - } -} - -void ScfProgressBar::Progress( sal_Size nDelta ) -{ - ProgressAbs( mpCurrSegment ? (mpCurrSegment->mnPos + nDelta) : 0 ); -} - -// ============================================================================ - -ScfSimpleProgressBar::ScfSimpleProgressBar( sal_Size nSize, SfxObjectShell* pDocShell, const String& rText ) : - maProgress( pDocShell, rText ) -{ - Init( nSize ); -} - -ScfSimpleProgressBar::ScfSimpleProgressBar( sal_Size nSize, SfxObjectShell* pDocShell, sal_uInt16 nResId ) : - maProgress( pDocShell, nResId ) -{ - Init( nSize ); -} - -void ScfSimpleProgressBar::Init( sal_Size nSize ) -{ - sal_Int32 nSegment = maProgress.AddSegment( nSize ); - if( nSegment >= 0 ) - maProgress.ActivateSegment( nSegment ); -} - -ScfStreamProgressBar::ScfStreamProgressBar( SvStream& rStrm, SfxObjectShell* pDocShell, sal_uInt16 nResId ) : - mrStrm( rStrm ) -{ - Init( pDocShell, ScGlobal::GetRscString( nResId ) ); -} - -void ScfStreamProgressBar::Progress() -{ - mxProgress->ProgressAbs( mrStrm.Tell() ); -} - -void ScfStreamProgressBar::Init( SfxObjectShell* pDocShell, const String& rText ) -{ - sal_Size nPos = mrStrm.Tell(); - mrStrm.Seek( STREAM_SEEK_TO_END ); - sal_Size nSize = mrStrm.Tell(); - mrStrm.Seek( nPos ); - - mxProgress.reset( new ScfSimpleProgressBar( nSize, pDocShell, rText ) ); - Progress(); -} - -// ============================================================================ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |