/************************************************************************* * * 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 * * for a copy of the LGPLv3 License. * ************************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" // System - Includes ----------------------------------------------------- // INCLUDE --------------------------------------------------------------- #include "undoutil.hxx" #include "docsh.hxx" #include "tabvwsh.hxx" #include "document.hxx" #include "dbcolect.hxx" #include "globstr.hrc" #include "global.hxx" void ScUndoUtil::MarkSimpleBlock( ScDocShell* pDocShell, SCCOL nStartX, SCROW nStartY, SCTAB nStartZ, SCCOL nEndX, SCROW nEndY, SCTAB nEndZ ) { if ( pDocShell->IsPaintLocked() ) return; ScTabViewShell* pViewShell = ScTabViewShell::GetActiveViewShell(); if (pViewShell) { SCTAB nViewTab = pViewShell->GetViewData()->GetTabNo(); if ( nViewTab < nStartZ || nViewTab > nEndZ ) pViewShell->SetTabNo( nStartZ ); pViewShell->DoneBlockMode(); pViewShell->MoveCursorAbs( nStartX, nStartY, SC_FOLLOW_JUMP, sal_False, sal_False ); pViewShell->InitOwnBlockMode(); pViewShell->GetViewData()->GetMarkData(). SetMarkArea( ScRange( nStartX, nStartY, nStartZ, nEndX, nEndY, nEndZ ) ); pViewShell->MarkDataChanged(); } } void ScUndoUtil::MarkSimpleBlock( ScDocShell* pDocShell, const ScAddress& rBlockStart, const ScAddress& rBlockEnd ) { MarkSimpleBlock( pDocShell, rBlockStart.Col(), rBlockStart.Row(), rBlockStart.Tab(), rBlockEnd.Col(), rBlockEnd.Row(), rBlockEnd.Tab() ); } void ScUndoUtil::MarkSimpleBlock( ScDocShell* pDocShell, const ScRange& rRange ) { MarkSimpleBlock( pDocShell, rRange.aStart.Col(), rRange.aStart.Row(), rRange.aStart.Tab(), rRange.aEnd.Col(), rRange.aEnd.Row(), rRange.aEnd.Tab() ); } ScDBData* ScUndoUtil::GetOldDBData( ScDBData* pUndoData, ScDocument* pDoc, SCTAB nTab, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ) { ScDBData* pRet = pDoc->GetDBAtArea( nTab, nCol1, nRow1, nCol2, nRow2 ); if (!pRet) { sal_Bool bWasTemp = sal_False; if ( pUndoData ) { String aName; pUndoData->GetName( aName ); if ( aName == ScGlobal::GetRscString( STR_DB_NONAME ) ) bWasTemp = sal_True; } DBG_ASSERT(bWasTemp, "Undo: didn't find database range"); sal_uInt16 nIndex; ScDBCollection* pColl = pDoc->GetDBCollection(); if (pColl->SearchName( ScGlobal::GetRscString( STR_DB_NONAME ), nIndex )) pRet = (*pColl)[nIndex]; else { pRet = new ScDBData( ScGlobal::GetRscString( STR_DB_NONAME ), nTab, nCol1,nRow1, nCol2,nRow2, sal_True, pDoc->HasColHeader( nCol1,nRow1,nCol2,nRow2,nTab ) ); pColl->Insert( pRet ); } } return pRet; } void ScUndoUtil::PaintMore( ScDocShell* pDocShell, const ScRange& rRange ) { SCCOL nCol1 = rRange.aStart.Col(); SCROW nRow1 = rRange.aStart.Row(); SCCOL nCol2 = rRange.aEnd.Col(); SCROW nRow2 = rRange.aEnd.Row(); if (nCol1 > 0) --nCol1; if (nRow1 > 0) --nRow1; if (nCol2PostPaint( nCol1,nRow1,rRange.aStart.Tab(), nCol2,nRow2,rRange.aEnd.Tab(), PAINT_GRID ); }