1*b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*b3f79822SAndrew Rist * distributed with this work for additional information
6*b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*b3f79822SAndrew Rist * "License"); you may not use this file except in compliance
9*b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at
10*b3f79822SAndrew Rist *
11*b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*b3f79822SAndrew Rist *
13*b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*b3f79822SAndrew Rist * software distributed under the License is distributed on an
15*b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b3f79822SAndrew Rist * KIND, either express or implied. See the License for the
17*b3f79822SAndrew Rist * specific language governing permissions and limitations
18*b3f79822SAndrew Rist * under the License.
19*b3f79822SAndrew Rist *
20*b3f79822SAndrew Rist *************************************************************/
21*b3f79822SAndrew Rist
22*b3f79822SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir
28cdf0e10cSrcweir
29cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <unotools/transliterationwrapper.hxx>
32cdf0e10cSrcweir
33cdf0e10cSrcweir #include "autonamecache.hxx"
34cdf0e10cSrcweir #include "dociter.hxx"
35cdf0e10cSrcweir #include "cell.hxx"
36cdf0e10cSrcweir #include "queryparam.hxx"
37cdf0e10cSrcweir
38cdf0e10cSrcweir // -----------------------------------------------------------------------
39cdf0e10cSrcweir
ScAutoNameCache(ScDocument * pD)40cdf0e10cSrcweir ScAutoNameCache::ScAutoNameCache( ScDocument* pD ) :
41cdf0e10cSrcweir pDoc( pD ),
42cdf0e10cSrcweir nCurrentTab( 0 ) // doesn't matter - aNames is empty
43cdf0e10cSrcweir {
44cdf0e10cSrcweir }
45cdf0e10cSrcweir
~ScAutoNameCache()46cdf0e10cSrcweir ScAutoNameCache::~ScAutoNameCache()
47cdf0e10cSrcweir {
48cdf0e10cSrcweir }
49cdf0e10cSrcweir
GetNameOccurences(const String & rName,SCTAB nTab)50cdf0e10cSrcweir const ScAutoNameAddresses& ScAutoNameCache::GetNameOccurences( const String& rName, SCTAB nTab )
51cdf0e10cSrcweir {
52cdf0e10cSrcweir if ( nTab != nCurrentTab )
53cdf0e10cSrcweir {
54cdf0e10cSrcweir // the lists are valid only for one sheet, so they are cleared when another sheet is used
55cdf0e10cSrcweir aNames.clear();
56cdf0e10cSrcweir nCurrentTab = nTab;
57cdf0e10cSrcweir }
58cdf0e10cSrcweir
59cdf0e10cSrcweir ScAutoNameHashMap::const_iterator aFound = aNames.find( rName );
60cdf0e10cSrcweir if ( aFound != aNames.end() )
61cdf0e10cSrcweir return aFound->second; // already initialized
62cdf0e10cSrcweir
63cdf0e10cSrcweir ScAutoNameAddresses& rAddresses = aNames[rName];
64cdf0e10cSrcweir
65cdf0e10cSrcweir ScCellIterator aIter( pDoc, ScRange( 0, 0, nCurrentTab, MAXCOL, MAXROW, nCurrentTab ) );
66cdf0e10cSrcweir for ( ScBaseCell* pCell = aIter.GetFirst(); pCell; pCell = aIter.GetNext() )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir // don't check code length here, always use the stored result
69cdf0e10cSrcweir // (AutoCalc is disabled during CompileXML)
70cdf0e10cSrcweir
71cdf0e10cSrcweir if ( pCell->HasStringData() )
72cdf0e10cSrcweir {
73cdf0e10cSrcweir String aStr;
74cdf0e10cSrcweir CellType eType = pCell->GetCellType();
75cdf0e10cSrcweir switch ( eType )
76cdf0e10cSrcweir {
77cdf0e10cSrcweir case CELLTYPE_STRING:
78cdf0e10cSrcweir ((ScStringCell*)pCell)->GetString( aStr );
79cdf0e10cSrcweir break;
80cdf0e10cSrcweir case CELLTYPE_FORMULA:
81cdf0e10cSrcweir ((ScFormulaCell*)pCell)->GetString( aStr );
82cdf0e10cSrcweir break;
83cdf0e10cSrcweir case CELLTYPE_EDIT:
84cdf0e10cSrcweir ((ScEditCell*)pCell)->GetString( aStr );
85cdf0e10cSrcweir break;
86cdf0e10cSrcweir case CELLTYPE_NONE:
87cdf0e10cSrcweir case CELLTYPE_VALUE:
88cdf0e10cSrcweir case CELLTYPE_NOTE:
89cdf0e10cSrcweir case CELLTYPE_SYMBOLS:
90cdf0e10cSrcweir #ifdef DBG_UTIL
91cdf0e10cSrcweir case CELLTYPE_DESTROYED:
92cdf0e10cSrcweir #endif
93cdf0e10cSrcweir ; // nothing, prevent compiler warning
94cdf0e10cSrcweir break;
95cdf0e10cSrcweir }
96cdf0e10cSrcweir if ( ScGlobal::GetpTransliteration()->isEqual( aStr, rName ) )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir rAddresses.push_back( ScAddress( aIter.GetCol(), aIter.GetRow(), aIter.GetTab() ) );
99cdf0e10cSrcweir }
100cdf0e10cSrcweir }
101cdf0e10cSrcweir }
102cdf0e10cSrcweir
103cdf0e10cSrcweir return rAddresses;
104cdf0e10cSrcweir }
105cdf0e10cSrcweir
106