summaryrefslogtreecommitdiff
path: root/sc/source/core/tool/refdata.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/tool/refdata.cxx')
-rw-r--r--sc/source/core/tool/refdata.cxx271
1 files changed, 0 insertions, 271 deletions
diff --git a/sc/source/core/tool/refdata.cxx b/sc/source/core/tool/refdata.cxx
deleted file mode 100644
index 5924678a3..000000000
--- a/sc/source/core/tool/refdata.cxx
+++ /dev/null
@@ -1,271 +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 "refdata.hxx"
-
-
-void ScSingleRefData::CalcRelFromAbs( const ScAddress& rPos )
-{
- nRelCol = nCol - rPos.Col();
- nRelRow = nRow - rPos.Row();
- nRelTab = nTab - rPos.Tab();
-}
-
-
-void ScSingleRefData::SmartRelAbs( const ScAddress& rPos )
-{
- if ( Flags.bColRel )
- nCol = nRelCol + rPos.Col();
- else
- nRelCol = nCol - rPos.Col();
-
- if ( Flags.bRowRel )
- nRow = nRelRow + rPos.Row();
- else
- nRelRow = nRow - rPos.Row();
-
- if ( Flags.bTabRel )
- nTab = nRelTab + rPos.Tab();
- else
- nRelTab = nTab - rPos.Tab();
-}
-
-
-void ScSingleRefData::CalcAbsIfRel( const ScAddress& rPos )
-{
- if ( Flags.bColRel )
- {
- nCol = nRelCol + rPos.Col();
- if ( !VALIDCOL( nCol ) )
- Flags.bColDeleted = sal_True;
- }
- if ( Flags.bRowRel )
- {
- nRow = nRelRow + rPos.Row();
- if ( !VALIDROW( nRow ) )
- Flags.bRowDeleted = sal_True;
- }
- if ( Flags.bTabRel )
- {
- nTab = nRelTab + rPos.Tab();
- if ( !VALIDTAB( nTab ) )
- Flags.bTabDeleted = sal_True;
- }
-}
-
-
-
-sal_Bool ScSingleRefData::operator==( const ScSingleRefData& r ) const
-{
- return bFlags == r.bFlags &&
- (Flags.bColRel ? nRelCol == r.nRelCol : nCol == r.nCol) &&
- (Flags.bRowRel ? nRelRow == r.nRelRow : nRow == r.nRow) &&
- (Flags.bTabRel ? nRelTab == r.nRelTab : nTab == r.nTab);
-}
-
-bool ScSingleRefData::operator!=( const ScSingleRefData& r ) const
-{
- return !operator==(r);
-}
-
-static void lcl_putInOrder( ScSingleRefData & rRef1, ScSingleRefData & rRef2 )
-{
- SCCOL nCol1, nCol2;
- SCROW nRow1, nRow2;
- SCTAB nTab1, nTab2;
- sal_Bool bTmp;
- sal_uInt8 nRelState1, nRelState2;
- if ( rRef1.Flags.bRelName )
- nRelState1 =
- ((rRef1.Flags.bTabRel & 0x01) << 2)
- | ((rRef1.Flags.bRowRel & 0x01) << 1)
- | ((rRef1.Flags.bColRel & 0x01));
- else
- nRelState1 = 0;
- if ( rRef2.Flags.bRelName )
- nRelState2 =
- ((rRef2.Flags.bTabRel & 0x01) << 2)
- | ((rRef2.Flags.bRowRel & 0x01) << 1)
- | ((rRef2.Flags.bColRel & 0x01));
- else
- nRelState2 = 0;
- if ( (nCol1 = rRef1.nCol) > (nCol2 = rRef2.nCol) )
- {
- rRef1.nCol = nCol2;
- rRef2.nCol = nCol1;
- nCol1 = rRef1.nRelCol;
- rRef1.nRelCol = rRef2.nRelCol;
- rRef2.nRelCol = nCol1;
- if ( rRef1.Flags.bRelName && rRef1.Flags.bColRel )
- nRelState2 |= 1;
- else
- nRelState2 &= ~1;
- if ( rRef2.Flags.bRelName && rRef2.Flags.bColRel )
- nRelState1 |= 1;
- else
- nRelState1 &= ~1;
- bTmp = rRef1.Flags.bColRel;
- rRef1.Flags.bColRel = rRef2.Flags.bColRel;
- rRef2.Flags.bColRel = bTmp;
- bTmp = rRef1.Flags.bColDeleted;
- rRef1.Flags.bColDeleted = rRef2.Flags.bColDeleted;
- rRef2.Flags.bColDeleted = bTmp;
- }
- if ( (nRow1 = rRef1.nRow) > (nRow2 = rRef2.nRow) )
- {
- rRef1.nRow = nRow2;
- rRef2.nRow = nRow1;
- nRow1 = rRef1.nRelRow;
- rRef1.nRelRow = rRef2.nRelRow;
- rRef2.nRelRow = nRow1;
- if ( rRef1.Flags.bRelName && rRef1.Flags.bRowRel )
- nRelState2 |= 2;
- else
- nRelState2 &= ~2;
- if ( rRef2.Flags.bRelName && rRef2.Flags.bRowRel )
- nRelState1 |= 2;
- else
- nRelState1 &= ~2;
- bTmp = rRef1.Flags.bRowRel;
- rRef1.Flags.bRowRel = rRef2.Flags.bRowRel;
- rRef2.Flags.bRowRel = bTmp;
- bTmp = rRef1.Flags.bRowDeleted;
- rRef1.Flags.bRowDeleted = rRef2.Flags.bRowDeleted;
- rRef2.Flags.bRowDeleted = bTmp;
- }
- if ( (nTab1 = rRef1.nTab) > (nTab2 = rRef2.nTab) )
- {
- rRef1.nTab = nTab2;
- rRef2.nTab = nTab1;
- nTab1 = rRef1.nRelTab;
- rRef1.nRelTab = rRef2.nRelTab;
- rRef2.nRelTab = nTab1;
- if ( rRef1.Flags.bRelName && rRef1.Flags.bTabRel )
- nRelState2 |= 4;
- else
- nRelState2 &= ~4;
- if ( rRef2.Flags.bRelName && rRef2.Flags.bTabRel )
- nRelState1 |= 4;
- else
- nRelState1 &= ~4;
- bTmp = rRef1.Flags.bTabRel;
- rRef1.Flags.bTabRel = rRef2.Flags.bTabRel;
- rRef2.Flags.bTabRel = bTmp;
- bTmp = rRef1.Flags.bTabDeleted;
- rRef1.Flags.bTabDeleted = rRef2.Flags.bTabDeleted;
- rRef2.Flags.bTabDeleted = bTmp;
- }
- rRef1.Flags.bRelName = ( nRelState1 ? sal_True : false );
- rRef2.Flags.bRelName = ( nRelState2 ? sal_True : false );
-}
-
-
-void ScComplexRefData::PutInOrder()
-{
- lcl_putInOrder( Ref1, Ref2);
-}
-
-
-static void lcl_adjustInOrder( ScSingleRefData & rRef1, ScSingleRefData & rRef2, bool bFirstLeader )
-{
- // a1:a2:a3, bFirstLeader: rRef1==a1==r1, rRef2==a3==r2
- // else: rRef1==a3==r2, rRef2==a2==r1
- ScSingleRefData& r1 = (bFirstLeader ? rRef1 : rRef2);
- ScSingleRefData& r2 = (bFirstLeader ? rRef2 : rRef1);
- if (r1.Flags.bFlag3D && !r2.Flags.bFlag3D)
- {
- // [$]Sheet1.A5:A6 on Sheet2 do still refer only Sheet1.
- r2.nTab = r1.nTab;
- r2.nRelTab = r1.nRelTab;
- r2.Flags.bTabRel = r1.Flags.bTabRel;
- }
- lcl_putInOrder( rRef1, rRef2);
-}
-
-
-ScComplexRefData& ScComplexRefData::Extend( const ScSingleRefData & rRef, const ScAddress & rPos )
-{
- CalcAbsIfRel( rPos);
- ScSingleRefData aRef = rRef;
- aRef.CalcAbsIfRel( rPos);
- bool bInherit3D = Ref1.IsFlag3D() && !Ref2.IsFlag3D();
- bool bInherit3Dtemp = bInherit3D && !rRef.IsFlag3D();
- if (aRef.nCol < Ref1.nCol || aRef.nRow < Ref1.nRow || aRef.nTab < Ref1.nTab)
- {
- lcl_adjustInOrder( Ref1, aRef, true);
- aRef = rRef;
- aRef.CalcAbsIfRel( rPos);
- }
- if (aRef.nCol > Ref2.nCol || aRef.nRow > Ref2.nRow || aRef.nTab > Ref2.nTab)
- {
- if (bInherit3D)
- Ref2.SetFlag3D( true);
- lcl_adjustInOrder( aRef, Ref2, false);
- if (bInherit3Dtemp)
- Ref2.SetFlag3D( false);
- aRef = rRef;
- aRef.CalcAbsIfRel( rPos);
- }
- // In Ref2 use absolute/relative addressing from non-extended parts if
- // equal and therefor not adjusted.
- // A$5:A5 => A$5:A$5:A5 => A$5:A5, and not A$5:A$5
- // A$6:$A5 => A$6:A$6:$A5 => A5:$A$6
- if (Ref2.nCol == aRef.nCol)
- Ref2.SetColRel( aRef.IsColRel());
- if (Ref2.nRow == aRef.nRow)
- Ref2.SetRowRel( aRef.IsRowRel());
- // $Sheet1.$A$5:$A$6 => $Sheet1.$A$5:$A$5:$A$6 => $Sheet1.$A$5:$A$6, and
- // not $Sheet1.$A$5:Sheet1.$A$6 (with invisible second 3D, but relative).
- if (Ref2.nTab == aRef.nTab)
- Ref2.SetTabRel( bInherit3Dtemp ? Ref1.IsTabRel() : aRef.IsTabRel());
- Ref2.CalcRelFromAbs( rPos);
- // Force 3D if necessary. References to other sheets always.
- if (Ref1.nTab != rPos.Tab())
- Ref1.SetFlag3D( true);
- // In the second part only if different sheet thus not inherited.
- if (Ref2.nTab != Ref1.nTab)
- Ref2.SetFlag3D( true);
- // Merge Flag3D to Ref2 in case there was nothing to inherit and/or range
- // wasn't extended as in A5:A5:Sheet1.A5 if on Sheet1.
- if (rRef.IsFlag3D())
- Ref2.SetFlag3D( true);
- return *this;
-}
-
-
-ScComplexRefData& ScComplexRefData::Extend( const ScComplexRefData & rRef, const ScAddress & rPos )
-{
- return Extend( rRef.Ref1, rPos).Extend( rRef.Ref2, rPos);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */