1b3f79822SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3b3f79822SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4b3f79822SAndrew Rist * or more contributor license agreements. See the NOTICE file
5b3f79822SAndrew Rist * distributed with this work for additional information
6b3f79822SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7b3f79822SAndrew Rist * to you under the Apache License, Version 2.0 (the
8b3f79822SAndrew Rist * "License"); you may not use this file except in compliance
9b3f79822SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11b3f79822SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13b3f79822SAndrew Rist * Unless required by applicable law or agreed to in writing,
14b3f79822SAndrew Rist * software distributed under the License is distributed on an
15b3f79822SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16b3f79822SAndrew Rist * KIND, either express or implied. See the License for the
17b3f79822SAndrew Rist * specific language governing permissions and limitations
18b3f79822SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20b3f79822SAndrew Rist *************************************************************/
21b3f79822SAndrew Rist
22b3f79822SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sc.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir // INCLUDE ---------------------------------------------------------------
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include "scitems.hxx"
30cdf0e10cSrcweir #include <editeng/eeitem.hxx>
31cdf0e10cSrcweir
32cdf0e10cSrcweir #include <sot/exchange.hxx>
33cdf0e10cSrcweir #include <editeng/akrnitem.hxx>
34cdf0e10cSrcweir #include <editeng/fontitem.hxx>
35cdf0e10cSrcweir #include <editeng/forbiddencharacterstable.hxx>
36cdf0e10cSrcweir #include <editeng/langitem.hxx>
37cdf0e10cSrcweir #include <svx/svdetc.hxx>
38cdf0e10cSrcweir #include <svx/svditer.hxx>
39cdf0e10cSrcweir #include <svx/svdocapt.hxx>
40cdf0e10cSrcweir #include <svx/svdograf.hxx>
41cdf0e10cSrcweir #include <svx/svdoole2.hxx>
42cdf0e10cSrcweir #include <svx/svdouno.hxx>
43cdf0e10cSrcweir #include <svx/svdpage.hxx>
44cdf0e10cSrcweir #include <svx/svdundo.hxx>
45cdf0e10cSrcweir #include <svx/xtable.hxx>
46cdf0e10cSrcweir #include <sfx2/objsh.hxx>
47cdf0e10cSrcweir #include <sfx2/printer.hxx>
48cdf0e10cSrcweir #include <unotools/saveopt.hxx>
49cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
50cdf0e10cSrcweir
51cdf0e10cSrcweir #include "document.hxx"
52cdf0e10cSrcweir #include "docoptio.hxx"
53cdf0e10cSrcweir #include "table.hxx"
54cdf0e10cSrcweir #include "drwlayer.hxx"
55cdf0e10cSrcweir #include "markdata.hxx"
56cdf0e10cSrcweir #include "patattr.hxx"
57cdf0e10cSrcweir #include "rechead.hxx"
58cdf0e10cSrcweir #include "poolhelp.hxx"
59cdf0e10cSrcweir #include "docpool.hxx"
60cdf0e10cSrcweir #include "detfunc.hxx" // for UpdateAllComments
61cdf0e10cSrcweir #include "editutil.hxx"
62cdf0e10cSrcweir #include "postit.hxx"
63cdf0e10cSrcweir #include "charthelper.hxx"
64cdf0e10cSrcweir
65cdf0e10cSrcweir using namespace ::com::sun::star;
66cdf0e10cSrcweir #include <stdio.h>
67cdf0e10cSrcweir // -----------------------------------------------------------------------
68cdf0e10cSrcweir
69cdf0e10cSrcweir
GetDrawBroadcaster()70cdf0e10cSrcweir SfxBroadcaster* ScDocument::GetDrawBroadcaster()
71cdf0e10cSrcweir {
72cdf0e10cSrcweir return pDrawLayer;
73cdf0e10cSrcweir }
74cdf0e10cSrcweir
BeginDrawUndo()75cdf0e10cSrcweir void ScDocument::BeginDrawUndo()
76cdf0e10cSrcweir {
77cdf0e10cSrcweir if (pDrawLayer)
78a840a559SArmin Le Grand pDrawLayer->BeginCalcUndo(false);
79cdf0e10cSrcweir }
80cdf0e10cSrcweir
IsDrawRecording() const81ee342afcSWang Lei sal_Bool ScDocument::IsDrawRecording() const
82ee342afcSWang Lei {
83ee342afcSWang Lei return pDrawLayer ? pDrawLayer->IsRecording() : sal_False;
84ee342afcSWang Lei }
85ee342afcSWang Lei
EndDrawUndo()86ee342afcSWang Lei void ScDocument::EndDrawUndo()
87ee342afcSWang Lei {
88ee342afcSWang Lei if( pDrawLayer )
89ee342afcSWang Lei delete pDrawLayer->GetCalcUndo();
90ee342afcSWang Lei }
91ee342afcSWang Lei
GetColorTable()92c7be74b1SArmin Le Grand XColorListSharedPtr ScDocument::GetColorTable()
93cdf0e10cSrcweir {
94cdf0e10cSrcweir if (pDrawLayer)
95c7be74b1SArmin Le Grand return pDrawLayer->GetColorTableFromSdrModel();
96cdf0e10cSrcweir else
97cdf0e10cSrcweir {
98c7be74b1SArmin Le Grand if (!maColorTable.get())
99cdf0e10cSrcweir {
100cdf0e10cSrcweir SvtPathOptions aPathOpt;
101c7be74b1SArmin Le Grand maColorTable = XPropertyListFactory::CreateSharedXColorList(aPathOpt.GetPalettePath());
102cdf0e10cSrcweir }
103cdf0e10cSrcweir
104c7be74b1SArmin Le Grand return maColorTable;
105cdf0e10cSrcweir }
106cdf0e10cSrcweir }
107cdf0e10cSrcweir
TransferDrawPage(ScDocument * pSrcDoc,SCTAB nSrcPos,SCTAB nDestPos)108cdf0e10cSrcweir void ScDocument::TransferDrawPage(ScDocument* pSrcDoc, SCTAB nSrcPos, SCTAB nDestPos)
109cdf0e10cSrcweir {
110cdf0e10cSrcweir if (pDrawLayer && pSrcDoc->pDrawLayer)
111cdf0e10cSrcweir {
112cdf0e10cSrcweir SdrPage* pOldPage = pSrcDoc->pDrawLayer->GetPage(static_cast<sal_uInt16>(nSrcPos));
113cdf0e10cSrcweir SdrPage* pNewPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nDestPos));
114cdf0e10cSrcweir
115cdf0e10cSrcweir if (pOldPage && pNewPage)
116cdf0e10cSrcweir {
117cdf0e10cSrcweir SdrObjListIter aIter( *pOldPage, IM_FLAT );
118cdf0e10cSrcweir SdrObject* pOldObject = aIter.Next();
119cdf0e10cSrcweir while (pOldObject)
120cdf0e10cSrcweir {
121cdf0e10cSrcweir // #i112034# do not copy internal objects (detective) and note captions
122cdf0e10cSrcweir if ( pOldObject->GetLayer() != SC_LAYER_INTERN && !ScDrawLayer::IsNoteCaption( pOldObject ) )
123cdf0e10cSrcweir {
124cdf0e10cSrcweir // #116235#
125cdf0e10cSrcweir SdrObject* pNewObject = pOldObject->Clone();
126cdf0e10cSrcweir // SdrObject* pNewObject = pOldObject->Clone( pNewPage, pDrawLayer );
127cdf0e10cSrcweir pNewObject->SetModel(pDrawLayer);
128cdf0e10cSrcweir pNewObject->SetPage(pNewPage);
129cdf0e10cSrcweir
130cdf0e10cSrcweir pNewObject->NbcMove(Size(0,0));
131cdf0e10cSrcweir pNewPage->InsertObject( pNewObject );
132cdf0e10cSrcweir
133cdf0e10cSrcweir if (pDrawLayer->IsRecording())
134577c0052SWang Lei pDrawLayer->AddCalcUndo< SdrUndoInsertObj >( *pNewObject );
135cdf0e10cSrcweir }
136cdf0e10cSrcweir
137cdf0e10cSrcweir pOldObject = aIter.Next();
138cdf0e10cSrcweir }
139cdf0e10cSrcweir }
140cdf0e10cSrcweir }
141cdf0e10cSrcweir
142cdf0e10cSrcweir // #71726# make sure the data references of charts are adapted
143cdf0e10cSrcweir // (this must be after InsertObject!)
144cdf0e10cSrcweir ScChartHelper::AdjustRangesOfChartsOnDestinationPage( pSrcDoc, this, nSrcPos, nDestPos );
14517e36312SWang Lei ScChartHelper::UpdateChartsOnDestinationPage(this, nDestPos);
146cdf0e10cSrcweir }
147cdf0e10cSrcweir
InitDrawLayer(SfxObjectShell * pDocShell)148cdf0e10cSrcweir void ScDocument::InitDrawLayer( SfxObjectShell* pDocShell )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir if (pDocShell && !pShell)
151cdf0e10cSrcweir pShell = pDocShell;
152cdf0e10cSrcweir
153cdf0e10cSrcweir // DBG_ASSERT(pShell,"InitDrawLayer ohne Shell");
154cdf0e10cSrcweir
155cdf0e10cSrcweir if (!pDrawLayer)
156cdf0e10cSrcweir {
157cdf0e10cSrcweir String aName;
158cdf0e10cSrcweir if ( pShell && !pShell->IsLoading() ) // #88438# don't call GetTitle while loading
159cdf0e10cSrcweir aName = pShell->GetTitle();
160cdf0e10cSrcweir pDrawLayer = new ScDrawLayer( this, aName );
161cdf0e10cSrcweir if (GetLinkManager())
162cdf0e10cSrcweir pDrawLayer->SetLinkManager( pLinkManager );
163cdf0e10cSrcweir
164*56b35d86SArmin Le Grand //UUUU set DrawingLayer's SfxItemPool at Calc's SfxItemPool as
165*56b35d86SArmin Le Grand // secondary pool to support DrawingLayer FillStyle ranges (and similar)
166*56b35d86SArmin Le Grand // in SfxItemSets using the Calc SfxItemPool. This is e.g. needed when
167*56b35d86SArmin Le Grand // the PageStyle using SvxBrushItem is visualized and will be potentially
168*56b35d86SArmin Le Grand // used more intense in the future
169*56b35d86SArmin Le Grand if(xPoolHelper.isValid())
170*56b35d86SArmin Le Grand {
171*56b35d86SArmin Le Grand ScDocumentPool* pLocalPool = xPoolHelper->GetDocPool();
172*56b35d86SArmin Le Grand
173*56b35d86SArmin Le Grand if(pLocalPool)
174*56b35d86SArmin Le Grand {
175*56b35d86SArmin Le Grand OSL_ENSURE(!pLocalPool->GetSecondaryPool(), "OOps, already a secondary pool set where the DrawingLayer ItemPool is to be placed (!)");
176*56b35d86SArmin Le Grand pLocalPool->SetSecondaryPool(&pDrawLayer->GetItemPool());
177*56b35d86SArmin Le Grand }
178*56b35d86SArmin Le Grand }
179*56b35d86SArmin Le Grand
180cdf0e10cSrcweir // Drawing pages are accessed by table number, so they must also be present
181cdf0e10cSrcweir // for preceding table numbers, even if the tables aren't allocated
182cdf0e10cSrcweir // (important for clipboard documents).
183cdf0e10cSrcweir
184cdf0e10cSrcweir SCTAB nDrawPages = 0;
185cdf0e10cSrcweir SCTAB nTab;
186cdf0e10cSrcweir for (nTab=0; nTab<=MAXTAB; nTab++)
187cdf0e10cSrcweir if (pTab[nTab])
188cdf0e10cSrcweir nDrawPages = nTab + 1; // needed number of pages
189cdf0e10cSrcweir
190cdf0e10cSrcweir for (nTab=0; nTab<nDrawPages; nTab++)
191cdf0e10cSrcweir {
192cdf0e10cSrcweir pDrawLayer->ScAddPage( nTab ); // always add page, with or without the table
193cdf0e10cSrcweir if (pTab[nTab])
194cdf0e10cSrcweir {
195cdf0e10cSrcweir String aTabName;
196cdf0e10cSrcweir pTab[nTab]->GetName(aTabName);
197cdf0e10cSrcweir pDrawLayer->ScRenamePage( nTab, aTabName );
198cdf0e10cSrcweir
199cdf0e10cSrcweir pTab[nTab]->SetDrawPageSize(false,false); // #54782# set the right size immediately
200cdf0e10cSrcweir #if 0
201cdf0e10cSrcweir sal_uLong nx = (sal_uLong) ((double) (MAXCOL+1) * STD_COL_WIDTH * HMM_PER_TWIPS );
202cdf0e10cSrcweir sal_uLong ny = (sal_uLong) ((double) (MAXROW+1) * ScGlobal::nStdRowHeight * HMM_PER_TWIPS );
203cdf0e10cSrcweir pDrawLayer->SetPageSize( nTab, Size( nx, ny ) );
204cdf0e10cSrcweir #endif
205cdf0e10cSrcweir }
206cdf0e10cSrcweir }
207cdf0e10cSrcweir
208cdf0e10cSrcweir pDrawLayer->SetDefaultTabulator( GetDocOptions().GetTabDistance() );
209cdf0e10cSrcweir
210cdf0e10cSrcweir UpdateDrawPrinter();
2111396af09SArmin Le Grand
2121396af09SArmin Le Grand // set draw defaults directly
2131396af09SArmin Le Grand SfxItemPool& rDrawPool = pDrawLayer->GetItemPool();
2141396af09SArmin Le Grand rDrawPool.SetPoolDefaultItem( SvxAutoKernItem( sal_True, EE_CHAR_PAIRKERNING ) );
2151396af09SArmin Le Grand
216cdf0e10cSrcweir UpdateDrawLanguages();
217cdf0e10cSrcweir if (bImportingXML)
218cdf0e10cSrcweir pDrawLayer->EnableAdjust(sal_False);
219cdf0e10cSrcweir
220577c0052SWang Lei if( IsImportingMSXML( ) )
221577c0052SWang Lei pDrawLayer->SetUndoAllowed( false );
222577c0052SWang Lei
223cdf0e10cSrcweir pDrawLayer->SetForbiddenCharsTable( xForbiddenCharacters );
224cdf0e10cSrcweir pDrawLayer->SetCharCompressType( GetAsianCompression() );
225cdf0e10cSrcweir pDrawLayer->SetKernAsianPunctuation( GetAsianKerning() );
226cdf0e10cSrcweir }
227cdf0e10cSrcweir }
228cdf0e10cSrcweir
UpdateDrawLanguages()229cdf0e10cSrcweir void ScDocument::UpdateDrawLanguages()
230cdf0e10cSrcweir {
231cdf0e10cSrcweir if (pDrawLayer)
232cdf0e10cSrcweir {
233cdf0e10cSrcweir SfxItemPool& rDrawPool = pDrawLayer->GetItemPool();
234cdf0e10cSrcweir rDrawPool.SetPoolDefaultItem( SvxLanguageItem( eLanguage, EE_CHAR_LANGUAGE ) );
235cdf0e10cSrcweir rDrawPool.SetPoolDefaultItem( SvxLanguageItem( eCjkLanguage, EE_CHAR_LANGUAGE_CJK ) );
236cdf0e10cSrcweir rDrawPool.SetPoolDefaultItem( SvxLanguageItem( eCtlLanguage, EE_CHAR_LANGUAGE_CTL ) );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
UpdateDrawPrinter()240cdf0e10cSrcweir void ScDocument::UpdateDrawPrinter()
241cdf0e10cSrcweir {
242cdf0e10cSrcweir if (pDrawLayer)
243cdf0e10cSrcweir {
244cdf0e10cSrcweir // use the printer even if IsValid is false
245cdf0e10cSrcweir // Application::GetDefaultDevice causes trouble with changing MapModes
246cdf0e10cSrcweir
247cdf0e10cSrcweir // OutputDevice* pRefDev = GetPrinter();
248cdf0e10cSrcweir // pRefDev->SetMapMode( MAP_100TH_MM );
249cdf0e10cSrcweir pDrawLayer->SetRefDevice(GetRefDevice());
250cdf0e10cSrcweir }
251cdf0e10cSrcweir }
252cdf0e10cSrcweir
IsChart(const SdrObject * pObject)253cdf0e10cSrcweir sal_Bool ScDocument::IsChart( const SdrObject* pObject )
254cdf0e10cSrcweir {
255cdf0e10cSrcweir // #109985#
256cdf0e10cSrcweir // IsChart() implementation moved to svx drawinglayer
257cdf0e10cSrcweir if(pObject && OBJ_OLE2 == pObject->GetObjIdentifier())
258cdf0e10cSrcweir {
259cdf0e10cSrcweir return ((SdrOle2Obj*)pObject)->IsChart();
260cdf0e10cSrcweir }
261cdf0e10cSrcweir
262cdf0e10cSrcweir return sal_False;
263cdf0e10cSrcweir }
264cdf0e10cSrcweir
IMPL_LINK_INLINE_START(ScDocument,GetUserDefinedColor,sal_uInt16 *,pColorIndex)265cdf0e10cSrcweir IMPL_LINK_INLINE_START( ScDocument, GetUserDefinedColor, sal_uInt16 *, pColorIndex )
266cdf0e10cSrcweir {
267cdf0e10cSrcweir return (long) &((GetColorTable()->GetColor(*pColorIndex))->GetColor());
268cdf0e10cSrcweir }
IMPL_LINK_INLINE_END(ScDocument,GetUserDefinedColor,sal_uInt16 *,pColorIndex)269cdf0e10cSrcweir IMPL_LINK_INLINE_END( ScDocument, GetUserDefinedColor, sal_uInt16 *, pColorIndex )
270cdf0e10cSrcweir
271cdf0e10cSrcweir void ScDocument::DeleteDrawLayer()
272cdf0e10cSrcweir {
273*56b35d86SArmin Le Grand //UUUU remove DrawingLayer's SfxItemPool from Calc's SfxItemPool where
274*56b35d86SArmin Le Grand // it is registered as secondary pool
275*56b35d86SArmin Le Grand if(xPoolHelper.isValid())
276*56b35d86SArmin Le Grand {
277*56b35d86SArmin Le Grand ScDocumentPool* pLocalPool = xPoolHelper->GetDocPool();
278*56b35d86SArmin Le Grand
279*56b35d86SArmin Le Grand if(pLocalPool && pLocalPool->GetSecondaryPool())
280*56b35d86SArmin Le Grand {
281*56b35d86SArmin Le Grand pLocalPool->SetSecondaryPool(0);
282*56b35d86SArmin Le Grand }
283*56b35d86SArmin Le Grand }
284*56b35d86SArmin Le Grand
285cdf0e10cSrcweir delete pDrawLayer;
286*56b35d86SArmin Le Grand pDrawLayer = 0;
287cdf0e10cSrcweir }
288cdf0e10cSrcweir
DrawGetPrintArea(ScRange & rRange,sal_Bool bSetHor,sal_Bool bSetVer) const289cdf0e10cSrcweir sal_Bool ScDocument::DrawGetPrintArea( ScRange& rRange, sal_Bool bSetHor, sal_Bool bSetVer ) const
290cdf0e10cSrcweir {
291cdf0e10cSrcweir return pDrawLayer->GetPrintArea( rRange, bSetHor, bSetVer );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir
DrawMovePage(sal_uInt16 nOldPos,sal_uInt16 nNewPos)294cdf0e10cSrcweir void ScDocument::DrawMovePage( sal_uInt16 nOldPos, sal_uInt16 nNewPos )
295cdf0e10cSrcweir {
296cdf0e10cSrcweir pDrawLayer->ScMovePage(nOldPos,nNewPos);
297cdf0e10cSrcweir }
298cdf0e10cSrcweir
DrawCopyPage(sal_uInt16 nOldPos,sal_uInt16 nNewPos)299cdf0e10cSrcweir void ScDocument::DrawCopyPage( sal_uInt16 nOldPos, sal_uInt16 nNewPos )
300cdf0e10cSrcweir {
301cdf0e10cSrcweir // angelegt wird die Page schon im ScTable ctor
302cdf0e10cSrcweir pDrawLayer->ScCopyPage( nOldPos, nNewPos, sal_False );
303cdf0e10cSrcweir }
304cdf0e10cSrcweir
DeleteObjectsInArea(SCCOL nCol1,SCROW nRow1,SCCOL nCol2,SCROW nRow2,const ScMarkData & rMark)305cdf0e10cSrcweir void ScDocument::DeleteObjectsInArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2,
306cdf0e10cSrcweir const ScMarkData& rMark )
307cdf0e10cSrcweir {
308cdf0e10cSrcweir if (!pDrawLayer)
309cdf0e10cSrcweir return;
310cdf0e10cSrcweir
311cdf0e10cSrcweir SCTAB nTabCount = GetTableCount();
312cdf0e10cSrcweir for (SCTAB nTab=0; nTab<=nTabCount; nTab++)
313cdf0e10cSrcweir if (pTab[nTab] && rMark.GetTableSelect(nTab))
314cdf0e10cSrcweir pDrawLayer->DeleteObjectsInArea( nTab, nCol1, nRow1, nCol2, nRow2 );
315cdf0e10cSrcweir }
316cdf0e10cSrcweir
DeleteObjectsInSelection(const ScMarkData & rMark)317cdf0e10cSrcweir void ScDocument::DeleteObjectsInSelection( const ScMarkData& rMark )
318cdf0e10cSrcweir {
319cdf0e10cSrcweir if (!pDrawLayer)
320cdf0e10cSrcweir return;
321cdf0e10cSrcweir
322cdf0e10cSrcweir pDrawLayer->DeleteObjectsInSelection( rMark );
323cdf0e10cSrcweir }
324cdf0e10cSrcweir
HasOLEObjectsInArea(const ScRange & rRange,const ScMarkData * pTabMark)325cdf0e10cSrcweir sal_Bool ScDocument::HasOLEObjectsInArea( const ScRange& rRange, const ScMarkData* pTabMark )
326cdf0e10cSrcweir {
327cdf0e10cSrcweir // pTabMark is used only for selected tables. If pTabMark is 0, all tables of rRange are used.
328cdf0e10cSrcweir
329cdf0e10cSrcweir if (!pDrawLayer)
330cdf0e10cSrcweir return sal_False;
331cdf0e10cSrcweir
332cdf0e10cSrcweir SCTAB nStartTab = 0;
333cdf0e10cSrcweir SCTAB nEndTab = MAXTAB;
334cdf0e10cSrcweir if ( !pTabMark )
335cdf0e10cSrcweir {
336cdf0e10cSrcweir nStartTab = rRange.aStart.Tab();
337cdf0e10cSrcweir nEndTab = rRange.aEnd.Tab();
338cdf0e10cSrcweir }
339cdf0e10cSrcweir
340cdf0e10cSrcweir for (SCTAB nTab = nStartTab; nTab <= nEndTab; nTab++)
341cdf0e10cSrcweir {
342cdf0e10cSrcweir if ( !pTabMark || pTabMark->GetTableSelect(nTab) )
343cdf0e10cSrcweir {
344cdf0e10cSrcweir Rectangle aMMRect = GetMMRect( rRange.aStart.Col(), rRange.aStart.Row(),
345cdf0e10cSrcweir rRange.aEnd.Col(), rRange.aEnd.Row(), nTab );
346cdf0e10cSrcweir
347cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
348cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
349cdf0e10cSrcweir if (pPage)
350cdf0e10cSrcweir {
351cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_FLAT );
352cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
353cdf0e10cSrcweir while (pObject)
354cdf0e10cSrcweir {
355cdf0e10cSrcweir if ( pObject->GetObjIdentifier() == OBJ_OLE2 &&
356cdf0e10cSrcweir aMMRect.IsInside( pObject->GetCurrentBoundRect() ) )
357cdf0e10cSrcweir return sal_True;
358cdf0e10cSrcweir
359cdf0e10cSrcweir pObject = aIter.Next();
360cdf0e10cSrcweir }
361cdf0e10cSrcweir }
362cdf0e10cSrcweir }
363cdf0e10cSrcweir }
364cdf0e10cSrcweir
365cdf0e10cSrcweir return sal_False;
366cdf0e10cSrcweir }
367cdf0e10cSrcweir
368cdf0e10cSrcweir
StartAnimations(SCTAB nTab,Window * pWin)369cdf0e10cSrcweir void ScDocument::StartAnimations( SCTAB nTab, Window* pWin )
370cdf0e10cSrcweir {
371cdf0e10cSrcweir if (!pDrawLayer)
372cdf0e10cSrcweir return;
373cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
374cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
375cdf0e10cSrcweir if (!pPage)
376cdf0e10cSrcweir return;
377cdf0e10cSrcweir
378cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_FLAT );
379cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
380cdf0e10cSrcweir while (pObject)
381cdf0e10cSrcweir {
382cdf0e10cSrcweir if (pObject->ISA(SdrGrafObj))
383cdf0e10cSrcweir {
384cdf0e10cSrcweir SdrGrafObj* pGrafObj = (SdrGrafObj*)pObject;
385cdf0e10cSrcweir if ( pGrafObj->IsAnimated() )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir const Rectangle& rRect = pGrafObj->GetCurrentBoundRect();
388cdf0e10cSrcweir pGrafObj->StartAnimation( pWin, rRect.TopLeft(), rRect.GetSize() );
389cdf0e10cSrcweir }
390cdf0e10cSrcweir }
391cdf0e10cSrcweir pObject = aIter.Next();
392cdf0e10cSrcweir }
393cdf0e10cSrcweir }
394cdf0e10cSrcweir
395cdf0e10cSrcweir //UNUSED2008-05 void ScDocument::RefreshNoteFlags()
396cdf0e10cSrcweir //UNUSED2008-05 {
397cdf0e10cSrcweir //UNUSED2008-05 if (!pDrawLayer)
398cdf0e10cSrcweir //UNUSED2008-05 return;
399cdf0e10cSrcweir //UNUSED2008-05
400cdf0e10cSrcweir //UNUSED2008-05 sal_Bool bAnyIntObj = sal_False;
401cdf0e10cSrcweir //UNUSED2008-05 SCTAB nTab;
402cdf0e10cSrcweir //UNUSED2008-05 ScPostIt aNote(this);
403cdf0e10cSrcweir //UNUSED2008-05 for (nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++)
404cdf0e10cSrcweir //UNUSED2008-05 {
405cdf0e10cSrcweir //UNUSED2008-05 SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
406cdf0e10cSrcweir //UNUSED2008-05 DBG_ASSERT(pPage,"Page ?");
407cdf0e10cSrcweir //UNUSED2008-05 if (pPage)
408cdf0e10cSrcweir //UNUSED2008-05 {
409cdf0e10cSrcweir //UNUSED2008-05 SdrObjListIter aIter( *pPage, IM_FLAT );
410cdf0e10cSrcweir //UNUSED2008-05 SdrObject* pObject = aIter.Next();
411cdf0e10cSrcweir //UNUSED2008-05 while (pObject)
412cdf0e10cSrcweir //UNUSED2008-05 {
413cdf0e10cSrcweir //UNUSED2008-05 if ( pObject->GetLayer() == SC_LAYER_INTERN )
414cdf0e10cSrcweir //UNUSED2008-05 {
415cdf0e10cSrcweir //UNUSED2008-05 bAnyIntObj = sal_True; // for all internal objects, including detective
416cdf0e10cSrcweir //UNUSED2008-05
417cdf0e10cSrcweir //UNUSED2008-05 if ( pObject->ISA( SdrCaptionObj ) )
418cdf0e10cSrcweir //UNUSED2008-05 {
419cdf0e10cSrcweir //UNUSED2008-05 ScDrawObjData* pData = ScDrawLayer::GetObjData( pObject );
420cdf0e10cSrcweir //UNUSED2008-05 if ( pData )
421cdf0e10cSrcweir //UNUSED2008-05 {
422cdf0e10cSrcweir //UNUSED2008-05 if ( GetNote( pData->aStt.Col(), pData->aStt.Row(), nTab, aNote))
423cdf0e10cSrcweir //UNUSED2008-05 if ( !aNote.IsShown() )
424cdf0e10cSrcweir //UNUSED2008-05 {
425cdf0e10cSrcweir //UNUSED2008-05 aNote.SetShown(sal_True);
426cdf0e10cSrcweir //UNUSED2008-05 SetNote( pData->aStt.Col(), pData->aStt.Row(), nTab, aNote);
427cdf0e10cSrcweir //UNUSED2008-05 }
428cdf0e10cSrcweir //UNUSED2008-05 }
429cdf0e10cSrcweir //UNUSED2008-05 }
430cdf0e10cSrcweir //UNUSED2008-05 }
431cdf0e10cSrcweir //UNUSED2008-05 pObject = aIter.Next();
432cdf0e10cSrcweir //UNUSED2008-05 }
433cdf0e10cSrcweir //UNUSED2008-05 }
434cdf0e10cSrcweir //UNUSED2008-05 }
435cdf0e10cSrcweir //UNUSED2008-05
436cdf0e10cSrcweir //UNUSED2008-05 if (bAnyIntObj)
437cdf0e10cSrcweir //UNUSED2008-05 {
438cdf0e10cSrcweir //UNUSED2008-05 // update attributes for all note objects and the colors of detective objects
439cdf0e10cSrcweir //UNUSED2008-05 // (we don't know with which settings the file was created)
440cdf0e10cSrcweir //UNUSED2008-05
441cdf0e10cSrcweir //UNUSED2008-05 ScDetectiveFunc aFunc( this, 0 );
442cdf0e10cSrcweir //UNUSED2008-05 aFunc.UpdateAllComments();
443cdf0e10cSrcweir //UNUSED2008-05 aFunc.UpdateAllArrowColors();
444cdf0e10cSrcweir //UNUSED2008-05 }
445cdf0e10cSrcweir //UNUSED2008-05 }
446cdf0e10cSrcweir
HasBackgroundDraw(SCTAB nTab,const Rectangle & rMMRect)447cdf0e10cSrcweir sal_Bool ScDocument::HasBackgroundDraw( SCTAB nTab, const Rectangle& rMMRect )
448cdf0e10cSrcweir {
449cdf0e10cSrcweir // Gibt es Objekte auf dem Hintergrund-Layer, die (teilweise) von rMMRect
450cdf0e10cSrcweir // betroffen sind?
451cdf0e10cSrcweir // (fuer Drawing-Optimierung, vor dem Hintergrund braucht dann nicht geloescht
452cdf0e10cSrcweir // zu werden)
453cdf0e10cSrcweir
454cdf0e10cSrcweir if (!pDrawLayer)
455cdf0e10cSrcweir return sal_False;
456cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
457cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
458cdf0e10cSrcweir if (!pPage)
459cdf0e10cSrcweir return sal_False;
460cdf0e10cSrcweir
461cdf0e10cSrcweir sal_Bool bFound = sal_False;
462cdf0e10cSrcweir
463cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_FLAT );
464cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
465cdf0e10cSrcweir while (pObject && !bFound)
466cdf0e10cSrcweir {
467cdf0e10cSrcweir if ( pObject->GetLayer() == SC_LAYER_BACK && pObject->GetCurrentBoundRect().IsOver( rMMRect ) )
468cdf0e10cSrcweir bFound = sal_True;
469cdf0e10cSrcweir pObject = aIter.Next();
470cdf0e10cSrcweir }
471cdf0e10cSrcweir
472cdf0e10cSrcweir return bFound;
473cdf0e10cSrcweir }
474cdf0e10cSrcweir
HasAnyDraw(SCTAB nTab,const Rectangle & rMMRect)475cdf0e10cSrcweir sal_Bool ScDocument::HasAnyDraw( SCTAB nTab, const Rectangle& rMMRect )
476cdf0e10cSrcweir {
477cdf0e10cSrcweir // Gibt es ueberhaupt Objekte, die (teilweise) von rMMRect
478cdf0e10cSrcweir // betroffen sind?
479cdf0e10cSrcweir // (um leere Seiten beim Drucken zu erkennen)
480cdf0e10cSrcweir
481cdf0e10cSrcweir if (!pDrawLayer)
482cdf0e10cSrcweir return sal_False;
483cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
484cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
485cdf0e10cSrcweir if (!pPage)
486cdf0e10cSrcweir return sal_False;
487cdf0e10cSrcweir
488cdf0e10cSrcweir sal_Bool bFound = sal_False;
489cdf0e10cSrcweir
490cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_FLAT );
491cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
492cdf0e10cSrcweir while (pObject && !bFound)
493cdf0e10cSrcweir {
494cdf0e10cSrcweir if ( pObject->GetCurrentBoundRect().IsOver( rMMRect ) )
495cdf0e10cSrcweir bFound = sal_True;
496cdf0e10cSrcweir pObject = aIter.Next();
497cdf0e10cSrcweir }
498cdf0e10cSrcweir
499cdf0e10cSrcweir return bFound;
500cdf0e10cSrcweir }
501cdf0e10cSrcweir
EnsureGraphicNames()502cdf0e10cSrcweir void ScDocument::EnsureGraphicNames()
503cdf0e10cSrcweir {
504cdf0e10cSrcweir if (pDrawLayer)
505cdf0e10cSrcweir pDrawLayer->EnsureGraphicNames();
506cdf0e10cSrcweir }
507cdf0e10cSrcweir
GetObjectAtPoint(SCTAB nTab,const Point & rPos)508cdf0e10cSrcweir SdrObject* ScDocument::GetObjectAtPoint( SCTAB nTab, const Point& rPos )
509cdf0e10cSrcweir {
510cdf0e10cSrcweir // fuer Drag&Drop auf Zeichenobjekt
511cdf0e10cSrcweir
512cdf0e10cSrcweir SdrObject* pFound = NULL;
513cdf0e10cSrcweir if (pDrawLayer && pTab[nTab])
514cdf0e10cSrcweir {
515cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
516cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
517cdf0e10cSrcweir if (pPage)
518cdf0e10cSrcweir {
519cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_FLAT );
520cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
521cdf0e10cSrcweir while (pObject)
522cdf0e10cSrcweir {
523cdf0e10cSrcweir if ( pObject->GetCurrentBoundRect().IsInside(rPos) )
524cdf0e10cSrcweir {
525cdf0e10cSrcweir // Intern interessiert gar nicht
526cdf0e10cSrcweir // Objekt vom Back-Layer nur, wenn kein Objekt von anderem Layer getroffen
527cdf0e10cSrcweir
528cdf0e10cSrcweir SdrLayerID nLayer = pObject->GetLayer();
529cdf0e10cSrcweir if ( (nLayer != SC_LAYER_INTERN) && (nLayer != SC_LAYER_HIDDEN) )
530cdf0e10cSrcweir {
531cdf0e10cSrcweir if ( nLayer != SC_LAYER_BACK ||
532cdf0e10cSrcweir !pFound || pFound->GetLayer() == SC_LAYER_BACK )
533cdf0e10cSrcweir {
534cdf0e10cSrcweir pFound = pObject;
535cdf0e10cSrcweir }
536cdf0e10cSrcweir }
537cdf0e10cSrcweir }
538cdf0e10cSrcweir // weitersuchen -> letztes (oberstes) getroffenes Objekt nehmen
539cdf0e10cSrcweir
540cdf0e10cSrcweir pObject = aIter.Next();
541cdf0e10cSrcweir }
542cdf0e10cSrcweir }
543cdf0e10cSrcweir }
544cdf0e10cSrcweir return pFound;
545cdf0e10cSrcweir }
546cdf0e10cSrcweir
IsPrintEmpty(SCTAB nTab,SCCOL nStartCol,SCROW nStartRow,SCCOL nEndCol,SCROW nEndRow,sal_Bool bLeftIsEmpty,ScRange * pLastRange,Rectangle * pLastMM) const547cdf0e10cSrcweir sal_Bool ScDocument::IsPrintEmpty( SCTAB nTab, SCCOL nStartCol, SCROW nStartRow,
548cdf0e10cSrcweir SCCOL nEndCol, SCROW nEndRow, sal_Bool bLeftIsEmpty,
549cdf0e10cSrcweir ScRange* pLastRange, Rectangle* pLastMM ) const
550cdf0e10cSrcweir {
551cdf0e10cSrcweir if (!IsBlockEmpty( nTab, nStartCol, nStartRow, nEndCol, nEndRow ))
552cdf0e10cSrcweir return sal_False;
553cdf0e10cSrcweir
554cdf0e10cSrcweir ScDocument* pThis = (ScDocument*)this; //! GetMMRect / HasAnyDraw etc. const !!!
555cdf0e10cSrcweir
556cdf0e10cSrcweir Rectangle aMMRect;
557cdf0e10cSrcweir if ( pLastRange && pLastMM && nTab == pLastRange->aStart.Tab() &&
558cdf0e10cSrcweir nStartRow == pLastRange->aStart.Row() && nEndRow == pLastRange->aEnd.Row() )
559cdf0e10cSrcweir {
560cdf0e10cSrcweir // keep vertical part of aMMRect, only update horizontal position
561cdf0e10cSrcweir aMMRect = *pLastMM;
562cdf0e10cSrcweir
563cdf0e10cSrcweir long nLeft = 0;
564cdf0e10cSrcweir SCCOL i;
565cdf0e10cSrcweir for (i=0; i<nStartCol; i++)
566cdf0e10cSrcweir nLeft += GetColWidth(i,nTab);
567cdf0e10cSrcweir long nRight = nLeft;
568cdf0e10cSrcweir for (i=nStartCol; i<=nEndCol; i++)
569cdf0e10cSrcweir nRight += GetColWidth(i,nTab);
570cdf0e10cSrcweir
571cdf0e10cSrcweir aMMRect.Left() = (long)(nLeft * HMM_PER_TWIPS);
572cdf0e10cSrcweir aMMRect.Right() = (long)(nRight * HMM_PER_TWIPS);
573cdf0e10cSrcweir }
574cdf0e10cSrcweir else
575cdf0e10cSrcweir aMMRect = pThis->GetMMRect( nStartCol, nStartRow, nEndCol, nEndRow, nTab );
576cdf0e10cSrcweir
577cdf0e10cSrcweir if ( pLastRange && pLastMM )
578cdf0e10cSrcweir {
579cdf0e10cSrcweir *pLastRange = ScRange( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab );
580cdf0e10cSrcweir *pLastMM = aMMRect;
581cdf0e10cSrcweir }
582cdf0e10cSrcweir
583cdf0e10cSrcweir if ( pThis->HasAnyDraw( nTab, aMMRect ))
584cdf0e10cSrcweir return sal_False;
585cdf0e10cSrcweir
586cdf0e10cSrcweir if ( nStartCol > 0 && !bLeftIsEmpty )
587cdf0e10cSrcweir {
588cdf0e10cSrcweir // aehnlich wie in ScPrintFunc::AdjustPrintArea
589cdf0e10cSrcweir //! ExtendPrintArea erst ab Start-Spalte des Druckbereichs
590cdf0e10cSrcweir
591cdf0e10cSrcweir SCCOL nExtendCol = nStartCol - 1;
592cdf0e10cSrcweir SCROW nTmpRow = nEndRow;
593cdf0e10cSrcweir
594cdf0e10cSrcweir pThis->ExtendMerge( 0,nStartRow, nExtendCol,nTmpRow, nTab,
595cdf0e10cSrcweir sal_False, sal_True ); // kein Refresh, incl. Attrs
596cdf0e10cSrcweir
597cdf0e10cSrcweir OutputDevice* pDev = pThis->GetPrinter();
598cdf0e10cSrcweir pDev->SetMapMode( MAP_PIXEL ); // wichtig fuer GetNeededSize
599cdf0e10cSrcweir pThis->ExtendPrintArea( pDev, nTab, 0, nStartRow, nExtendCol, nEndRow );
600cdf0e10cSrcweir if ( nExtendCol >= nStartCol )
601cdf0e10cSrcweir return sal_False;
602cdf0e10cSrcweir }
603cdf0e10cSrcweir
604cdf0e10cSrcweir return sal_True;
605cdf0e10cSrcweir }
606cdf0e10cSrcweir
Clear(sal_Bool bFromDestructor)607cdf0e10cSrcweir void ScDocument::Clear( sal_Bool bFromDestructor )
608cdf0e10cSrcweir {
609cdf0e10cSrcweir for (SCTAB i=0; i<=MAXTAB; i++)
610cdf0e10cSrcweir if (pTab[i])
611cdf0e10cSrcweir {
612cdf0e10cSrcweir delete pTab[i];
613cdf0e10cSrcweir pTab[i]=NULL;
614cdf0e10cSrcweir }
615cdf0e10cSrcweir delete pSelectionAttr;
616cdf0e10cSrcweir pSelectionAttr = NULL;
617cdf0e10cSrcweir
618cdf0e10cSrcweir if (pDrawLayer)
619cdf0e10cSrcweir {
620cdf0e10cSrcweir // #116168#
621cdf0e10cSrcweir //pDrawLayer->Clear();
622cdf0e10cSrcweir pDrawLayer->ClearModel( bFromDestructor );
623cdf0e10cSrcweir }
624cdf0e10cSrcweir }
625cdf0e10cSrcweir
HasControl(SCTAB nTab,const Rectangle & rMMRect)626cdf0e10cSrcweir sal_Bool ScDocument::HasControl( SCTAB nTab, const Rectangle& rMMRect )
627cdf0e10cSrcweir {
628cdf0e10cSrcweir sal_Bool bFound = sal_False;
629cdf0e10cSrcweir
630cdf0e10cSrcweir if (pDrawLayer)
631cdf0e10cSrcweir {
632cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
633cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
634cdf0e10cSrcweir if (pPage)
635cdf0e10cSrcweir {
636cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
637cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
638cdf0e10cSrcweir while (pObject && !bFound)
639cdf0e10cSrcweir {
640cdf0e10cSrcweir if (pObject->ISA(SdrUnoObj))
641cdf0e10cSrcweir {
642cdf0e10cSrcweir Rectangle aObjRect = pObject->GetLogicRect();
643cdf0e10cSrcweir if ( aObjRect.IsOver( rMMRect ) )
644cdf0e10cSrcweir bFound = sal_True;
645cdf0e10cSrcweir }
646cdf0e10cSrcweir
647cdf0e10cSrcweir pObject = aIter.Next();
648cdf0e10cSrcweir }
649cdf0e10cSrcweir }
650cdf0e10cSrcweir }
651cdf0e10cSrcweir
652cdf0e10cSrcweir return bFound;
653cdf0e10cSrcweir }
654cdf0e10cSrcweir
InvalidateControls(Window * pWin,SCTAB nTab,const Rectangle & rMMRect)655cdf0e10cSrcweir void ScDocument::InvalidateControls( Window* pWin, SCTAB nTab, const Rectangle& rMMRect )
656cdf0e10cSrcweir {
657cdf0e10cSrcweir if (pDrawLayer)
658cdf0e10cSrcweir {
659cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
660cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
661cdf0e10cSrcweir if (pPage)
662cdf0e10cSrcweir {
663cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
664cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
665cdf0e10cSrcweir while (pObject)
666cdf0e10cSrcweir {
667cdf0e10cSrcweir if (pObject->ISA(SdrUnoObj))
668cdf0e10cSrcweir {
669cdf0e10cSrcweir Rectangle aObjRect = pObject->GetLogicRect();
670cdf0e10cSrcweir if ( aObjRect.IsOver( rMMRect ) )
671cdf0e10cSrcweir {
672cdf0e10cSrcweir // Uno-Controls zeichnen sich immer komplett, ohne Ruecksicht
673cdf0e10cSrcweir // auf ClippingRegions. Darum muss das ganze Objekt neu gepainted
674cdf0e10cSrcweir // werden, damit die Selektion auf der Tabelle nicht uebermalt wird.
675cdf0e10cSrcweir
676cdf0e10cSrcweir //pWin->Invalidate( aObjRect.GetIntersection( rMMRect ) );
677cdf0e10cSrcweir pWin->Invalidate( aObjRect );
678cdf0e10cSrcweir }
679cdf0e10cSrcweir }
680cdf0e10cSrcweir
681cdf0e10cSrcweir pObject = aIter.Next();
682cdf0e10cSrcweir }
683cdf0e10cSrcweir }
684cdf0e10cSrcweir }
685cdf0e10cSrcweir }
686cdf0e10cSrcweir
HasDetectiveObjects(SCTAB nTab) const687cdf0e10cSrcweir sal_Bool ScDocument::HasDetectiveObjects(SCTAB nTab) const
688cdf0e10cSrcweir {
689cdf0e10cSrcweir // looks for detective objects, annotations don't count
690cdf0e10cSrcweir // (used to adjust scale so detective objects hit their cells better)
691cdf0e10cSrcweir
692cdf0e10cSrcweir sal_Bool bFound = sal_False;
693cdf0e10cSrcweir
694cdf0e10cSrcweir if (pDrawLayer)
695cdf0e10cSrcweir {
696cdf0e10cSrcweir SdrPage* pPage = pDrawLayer->GetPage(static_cast<sal_uInt16>(nTab));
697cdf0e10cSrcweir DBG_ASSERT(pPage,"Page ?");
698cdf0e10cSrcweir if (pPage)
699cdf0e10cSrcweir {
700cdf0e10cSrcweir SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
701cdf0e10cSrcweir SdrObject* pObject = aIter.Next();
702cdf0e10cSrcweir while (pObject && !bFound)
703cdf0e10cSrcweir {
704cdf0e10cSrcweir // anything on the internal layer except captions (annotations)
705cdf0e10cSrcweir if ( (pObject->GetLayer() == SC_LAYER_INTERN) && !ScDrawLayer::IsNoteCaption( pObject ) )
706cdf0e10cSrcweir bFound = sal_True;
707cdf0e10cSrcweir
708cdf0e10cSrcweir pObject = aIter.Next();
709cdf0e10cSrcweir }
710cdf0e10cSrcweir }
711cdf0e10cSrcweir }
712cdf0e10cSrcweir
713cdf0e10cSrcweir return bFound;
714cdf0e10cSrcweir }
715cdf0e10cSrcweir
UpdateFontCharSet()716cdf0e10cSrcweir void ScDocument::UpdateFontCharSet()
717cdf0e10cSrcweir {
718cdf0e10cSrcweir // In alten Versionen (bis incl. 4.0 ohne SP) wurden beim Austausch zwischen
719cdf0e10cSrcweir // Systemen die CharSets in den Font-Attributen nicht angepasst.
720cdf0e10cSrcweir // Das muss fuer Dokumente bis incl SP2 nun nachgeholt werden:
721cdf0e10cSrcweir // Alles, was nicht SYMBOL ist, wird auf den System-CharSet umgesetzt.
722cdf0e10cSrcweir // Bei neuen Dokumenten (Version SC_FONTCHARSET) sollte der CharSet stimmen.
723cdf0e10cSrcweir
724cdf0e10cSrcweir sal_Bool bUpdateOld = ( nSrcVer < SC_FONTCHARSET );
725cdf0e10cSrcweir
726cdf0e10cSrcweir CharSet eSysSet = gsl_getSystemTextEncoding();
727cdf0e10cSrcweir if ( eSrcSet != eSysSet || bUpdateOld )
728cdf0e10cSrcweir {
729cdf0e10cSrcweir sal_uInt32 nCount,i;
730cdf0e10cSrcweir SvxFontItem* pItem;
731cdf0e10cSrcweir
732cdf0e10cSrcweir ScDocumentPool* pPool = xPoolHelper->GetDocPool();
733cdf0e10cSrcweir nCount = pPool->GetItemCount2(ATTR_FONT);
734cdf0e10cSrcweir for (i=0; i<nCount; i++)
735cdf0e10cSrcweir {
736cdf0e10cSrcweir pItem = (SvxFontItem*)pPool->GetItem2(ATTR_FONT, i);
737cdf0e10cSrcweir if ( pItem && ( pItem->GetCharSet() == eSrcSet ||
738cdf0e10cSrcweir ( bUpdateOld && pItem->GetCharSet() != RTL_TEXTENCODING_SYMBOL ) ) )
739cdf0e10cSrcweir pItem->SetCharSet(eSysSet);
740cdf0e10cSrcweir }
741cdf0e10cSrcweir
742cdf0e10cSrcweir if ( pDrawLayer )
743cdf0e10cSrcweir {
744cdf0e10cSrcweir SfxItemPool& rDrawPool = pDrawLayer->GetItemPool();
745cdf0e10cSrcweir nCount = rDrawPool.GetItemCount2(EE_CHAR_FONTINFO);
746cdf0e10cSrcweir for (i=0; i<nCount; i++)
747cdf0e10cSrcweir {
748cdf0e10cSrcweir pItem = (SvxFontItem*)rDrawPool.GetItem2(EE_CHAR_FONTINFO, i);
749cdf0e10cSrcweir if ( pItem && ( pItem->GetCharSet() == eSrcSet ||
750cdf0e10cSrcweir ( bUpdateOld && pItem->GetCharSet() != RTL_TEXTENCODING_SYMBOL ) ) )
751cdf0e10cSrcweir pItem->SetCharSet( eSysSet );
752cdf0e10cSrcweir }
753cdf0e10cSrcweir }
754cdf0e10cSrcweir }
755cdf0e10cSrcweir }
756cdf0e10cSrcweir
SetLoadingMedium(bool bVal)757cdf0e10cSrcweir void ScDocument::SetLoadingMedium( bool bVal )
758cdf0e10cSrcweir {
759cdf0e10cSrcweir bLoadingMedium = bVal;
760cdf0e10cSrcweir for (SCTAB nTab = 0; nTab <= MAXTAB; ++nTab)
761cdf0e10cSrcweir {
762cdf0e10cSrcweir if (!pTab[nTab])
763cdf0e10cSrcweir return;
764cdf0e10cSrcweir
765cdf0e10cSrcweir pTab[nTab]->SetLoadingMedium(bVal);
766cdf0e10cSrcweir }
767cdf0e10cSrcweir }
768cdf0e10cSrcweir
SetImportingXML(bool bVal)769cdf0e10cSrcweir void ScDocument::SetImportingXML( bool bVal )
770cdf0e10cSrcweir {
771cdf0e10cSrcweir bImportingXML = bVal;
772cdf0e10cSrcweir if (pDrawLayer)
773cdf0e10cSrcweir pDrawLayer->EnableAdjust(!bImportingXML);
774cdf0e10cSrcweir
775cdf0e10cSrcweir if ( !bVal )
776cdf0e10cSrcweir {
777cdf0e10cSrcweir // #i57869# after loading, do the real RTL mirroring for the sheets that have the LoadingRTL flag set
778cdf0e10cSrcweir
779cdf0e10cSrcweir for ( SCTAB nTab=0; nTab<=MAXTAB && pTab[nTab]; nTab++ )
780cdf0e10cSrcweir if ( pTab[nTab]->IsLoadingRTL() )
781cdf0e10cSrcweir {
782cdf0e10cSrcweir pTab[nTab]->SetLoadingRTL( sal_False );
783cdf0e10cSrcweir SetLayoutRTL( nTab, sal_True ); // includes mirroring; bImportingXML must be cleared first
784cdf0e10cSrcweir }
785cdf0e10cSrcweir }
786cdf0e10cSrcweir
787cdf0e10cSrcweir SetLoadingMedium(bVal);
788cdf0e10cSrcweir }
789cdf0e10cSrcweir
SetImportingMSXML(bool bVal)790577c0052SWang Lei void ScDocument::SetImportingMSXML( bool bVal )
791577c0052SWang Lei {
792577c0052SWang Lei mbImportingMSXML = bVal;
793577c0052SWang Lei
794577c0052SWang Lei if (pDrawLayer)
795577c0052SWang Lei pDrawLayer->SetUndoAllowed( !mbImportingMSXML );
796577c0052SWang Lei }
797577c0052SWang Lei
SetXMLFromWrapper(sal_Bool bVal)798cdf0e10cSrcweir void ScDocument::SetXMLFromWrapper( sal_Bool bVal )
799cdf0e10cSrcweir {
800cdf0e10cSrcweir bXMLFromWrapper = bVal;
801cdf0e10cSrcweir }
802cdf0e10cSrcweir
GetForbiddenCharacters()803cdf0e10cSrcweir vos::ORef<SvxForbiddenCharactersTable> ScDocument::GetForbiddenCharacters()
804cdf0e10cSrcweir {
805cdf0e10cSrcweir return xForbiddenCharacters;
806cdf0e10cSrcweir }
807cdf0e10cSrcweir
SetForbiddenCharacters(const vos::ORef<SvxForbiddenCharactersTable> xNew)808cdf0e10cSrcweir void ScDocument::SetForbiddenCharacters( const vos::ORef<SvxForbiddenCharactersTable> xNew )
809cdf0e10cSrcweir {
810cdf0e10cSrcweir xForbiddenCharacters = xNew;
811cdf0e10cSrcweir if ( pEditEngine )
812cdf0e10cSrcweir pEditEngine->SetForbiddenCharsTable( xForbiddenCharacters );
813cdf0e10cSrcweir if ( pDrawLayer )
814cdf0e10cSrcweir pDrawLayer->SetForbiddenCharsTable( xForbiddenCharacters );
815cdf0e10cSrcweir }
816cdf0e10cSrcweir
IsValidAsianCompression() const817cdf0e10cSrcweir sal_Bool ScDocument::IsValidAsianCompression() const
818cdf0e10cSrcweir {
819cdf0e10cSrcweir return ( nAsianCompression != SC_ASIANCOMPRESSION_INVALID );
820cdf0e10cSrcweir }
821cdf0e10cSrcweir
GetAsianCompression() const822cdf0e10cSrcweir sal_uInt8 ScDocument::GetAsianCompression() const
823cdf0e10cSrcweir {
824cdf0e10cSrcweir if ( nAsianCompression == SC_ASIANCOMPRESSION_INVALID )
825cdf0e10cSrcweir return 0;
826cdf0e10cSrcweir else
827cdf0e10cSrcweir return nAsianCompression;
828cdf0e10cSrcweir }
829cdf0e10cSrcweir
SetAsianCompression(sal_uInt8 nNew)830cdf0e10cSrcweir void ScDocument::SetAsianCompression(sal_uInt8 nNew)
831cdf0e10cSrcweir {
832cdf0e10cSrcweir nAsianCompression = nNew;
833cdf0e10cSrcweir if ( pEditEngine )
834cdf0e10cSrcweir pEditEngine->SetAsianCompressionMode( nAsianCompression );
835cdf0e10cSrcweir if ( pDrawLayer )
836cdf0e10cSrcweir pDrawLayer->SetCharCompressType( nAsianCompression );
837cdf0e10cSrcweir }
838cdf0e10cSrcweir
IsValidAsianKerning() const839cdf0e10cSrcweir sal_Bool ScDocument::IsValidAsianKerning() const
840cdf0e10cSrcweir {
841cdf0e10cSrcweir return ( nAsianKerning != SC_ASIANKERNING_INVALID );
842cdf0e10cSrcweir }
843cdf0e10cSrcweir
GetAsianKerning() const844cdf0e10cSrcweir sal_Bool ScDocument::GetAsianKerning() const
845cdf0e10cSrcweir {
846cdf0e10cSrcweir if ( nAsianKerning == SC_ASIANKERNING_INVALID )
847cdf0e10cSrcweir return sal_False;
848cdf0e10cSrcweir else
849cdf0e10cSrcweir return (sal_Bool)nAsianKerning;
850cdf0e10cSrcweir }
851cdf0e10cSrcweir
SetAsianKerning(sal_Bool bNew)852cdf0e10cSrcweir void ScDocument::SetAsianKerning(sal_Bool bNew)
853cdf0e10cSrcweir {
854cdf0e10cSrcweir nAsianKerning = (sal_uInt8)bNew;
855cdf0e10cSrcweir if ( pEditEngine )
856cdf0e10cSrcweir pEditEngine->SetKernAsianPunctuation( (sal_Bool)nAsianKerning );
857cdf0e10cSrcweir if ( pDrawLayer )
858cdf0e10cSrcweir pDrawLayer->SetKernAsianPunctuation( (sal_Bool)nAsianKerning );
859cdf0e10cSrcweir }
860cdf0e10cSrcweir
ApplyAsianEditSettings(ScEditEngineDefaulter & rEngine)861cdf0e10cSrcweir void ScDocument::ApplyAsianEditSettings( ScEditEngineDefaulter& rEngine )
862cdf0e10cSrcweir {
863cdf0e10cSrcweir rEngine.SetForbiddenCharsTable( xForbiddenCharacters );
864cdf0e10cSrcweir rEngine.SetAsianCompressionMode( GetAsianCompression() );
865cdf0e10cSrcweir rEngine.SetKernAsianPunctuation( GetAsianKerning() );
866cdf0e10cSrcweir }
867