summaryrefslogtreecommitdiff
path: root/bf_sc/source/ui/docshell/sc_docsh6.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bf_sc/source/ui/docshell/sc_docsh6.cxx')
-rw-r--r--bf_sc/source/ui/docshell/sc_docsh6.cxx310
1 files changed, 310 insertions, 0 deletions
diff --git a/bf_sc/source/ui/docshell/sc_docsh6.cxx b/bf_sc/source/ui/docshell/sc_docsh6.cxx
new file mode 100644
index 000000000..2fdb9240a
--- /dev/null
+++ b/bf_sc/source/ui/docshell/sc_docsh6.cxx
@@ -0,0 +1,310 @@
+/* -*- 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.
+ *
+ ************************************************************************/
+
+#define _BIGINT_HXX
+#define _CACHESTR_HXX
+#define _CONFIG_HXX
+#define _CURSOR_HXX
+#define _DIALOGS_HXX
+#define _DLGCFG_HXX
+#define _DYNARR_HXX
+#define _EXTATTR_HXX
+#define _FILDLG_HXX
+#define _FONTDLG_HXX
+#define _FRM3D_HXX
+#define _INTRO_HXX
+#define _ISETBWR_HXX
+#define _NO_SVRTF_PARSER_HXX
+#define _MACRODLG_HXX
+#define _MODALDLG_HXX
+#define _MOREBUTTON_HXX
+#define _OUTLINER_HXX
+#define _PASSWD_HXX
+#define _POLY_HXX
+#define _PVRWIN_HXX
+#define _QUEUE_HXX
+#define _RULER_HXX
+#define _SCRWIN_HXX
+#define _SETBRW_HXX
+#define _STACK_HXX
+#define _STDMENU_HXX
+#define _TABBAR_HXX
+#define _VCBRW_HXX
+#define _VCTRLS_HXX
+#define _VCSBX_HXX
+#define _VCONT_HXX
+#define _VDRWOBJ_HXX
+
+
+#define _SFX_PRNMON_HXX
+#define _SFX_RESMGR_HXX
+#define _SFX_TEMPLDLG_HXX
+#define _SFXBASIC_HXX
+#define _SFXDISPATCH_HXX
+#define _SFXFILEDLG_HXX
+#define _SFXIMGMGR_HXX
+#define _SFXMNUMGR_HXX
+#define _SFXMSGDESCR_HXX
+#define _SFXMSGPOOL_HXX
+#define _SFXSTBITEM_HXX
+#define _SFXSTBMGR_HXX
+#define _SFXTBXCTRL_HXX
+#define _SFXTBXMGR_HXX
+#define _SFX_TEMPLDLG_HXX
+
+#define _SI_DLL_HXX
+#define _SIDLL_HXX
+#define _SI_NOITEMS
+#define _SI_NOOTHERFORMS
+#define _SI_NOSBXCONTROLS
+#define _SINOSBXCONTROLS
+#define _SI_NODRW
+#define _SI_NOCONTROL
+
+#define _SV_NOXSOUND
+#define _SVDATTR_HXX
+#define _SVDETC_HXX
+#define _SVDIO_HXX
+#define _SVDRAG_HXX
+#define _SVDLAYER_HXX
+#define _SVDXOUT_HXX
+
+#define _SVX_DAILDLL_HXX
+#define _SVX_HYPHEN_HXX
+#define _SVX_IMPGRF_HXX
+#define _SVX_OPTITEMS_HXX
+#define _SVX_OPTGERL_HXX
+#define _SVX_OPTSAVE_HXX
+#define _SVX_OPTSPELL_HXX
+#define _SVX_OPTPATH_HXX
+#define _SVX_OPTLINGU_HXX
+#define _SVX_RULER_HXX
+#define _SVX_RULRITEM_HXX
+#define _SVX_SPLWRAP_HXX
+#define _SVX_SPLDLG_HXX
+#define _SVX_THESDLG_HXX
+
+
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+#include <bf_so3/ipenv.hxx>
+#include <bf_svx/linkmgr.hxx>
+
+#include "docsh.hxx"
+
+#include "stlpool.hxx"
+#include "tablink.hxx"
+#include "collect.hxx"
+
+#include <bf_svtools/itemset.hxx>
+
+namespace binfilter {
+
+/*N*/ struct ScStylePair
+/*N*/ {
+/*N*/ SfxStyleSheetBase *pSource;
+/*N*/ SfxStyleSheetBase *pDest;
+/*N*/ };
+
+
+
+
+/*N*/ void ScDocShell::SetVisArea( const Rectangle & rVisArea )
+/*N*/ {
+/*N*/ // with the SnapVisArea call in SetVisAreaOrSize, it's safe to always
+/*N*/ // use both the size and position of the VisArea
+/*N*/ SetVisAreaOrSize( rVisArea, TRUE );
+/*N*/ }
+
+/*N*/ void ScDocShell::SetVisAreaOrSize( const Rectangle& rVisArea, BOOL bModifyStart )
+/*N*/ {
+/*N*/ Rectangle aArea = rVisArea;
+/*N*/ if (bModifyStart)
+/*N*/ {
+/*N*/ if ( aArea.Left() < 0 || aArea.Top() < 0 )
+/*N*/ {
+/*?*/ // VisArea start position can't be negative.
+/*?*/ // Move the VisArea, otherwise only the upper left position would
+/*?*/ // be changed in SnapVisArea, and the size would be wrong.
+/*?*/
+/*?*/ Point aNewPos( Max( aArea.Left(), (long) 0 ),
+/*?*/ Max( aArea.Top(), (long) 0 ) );
+/*?*/ aArea.SetPos( aNewPos );
+/*N*/ }
+/*N*/ }
+/*N*/ else
+/*?*/ aArea.SetPos( SfxInPlaceObject::GetVisArea().TopLeft() );
+/*N*/
+/*N*/ // hier Position anpassen!
+/*N*/
+/*N*/ // #92248# when loading an ole object, the VisArea is set from the document's
+/*N*/ // view settings and must be used as-is (document content may not be complete yet).
+/*N*/ if ( !aDocument.IsImportingXML() )
+/*N*/ aDocument.SnapVisArea( aArea );
+/*N*/
+/*N*/ SvInPlaceObject::SetVisArea( aArea );
+/*N*/
+/*N*/ }
+
+//
+// Style-Krempel fuer Organizer etc.
+//
+
+/*N*/ SfxStyleSheetBasePool* ScDocShell::GetStyleSheetPool()
+/*N*/ {
+/*N*/ return (SfxStyleSheetBasePool*)aDocument.GetStyleSheetPool();
+/*N*/ }
+
+
+// nach dem Laden von Vorlagen aus einem anderen Dokment (LoadStyles, Insert)
+// muessen die SetItems (ATTR_PAGE_HEADERSET, ATTR_PAGE_FOOTERSET) auf den richtigen
+// Pool umgesetzt werden, bevor der Quell-Pool geloescht wird.
+
+/*N*/ void ScDocShell::LoadStylesArgs( ScDocShell& rSource, BOOL bReplace, BOOL bCellStyles, BOOL bPageStyles )
+/*N*/ {
+/*N*/ // similar to LoadStyles, but with selectable behavior for XStyleLoader::loadStylesFromURL call
+/*N*/
+/*N*/ if ( !bCellStyles && !bPageStyles ) // nothing to do
+/*N*/ return;
+/*N*/
+/*N*/ ScStyleSheetPool* pSourcePool = rSource.GetDocument()->GetStyleSheetPool();
+/*N*/ ScStyleSheetPool* pDestPool = aDocument.GetStyleSheetPool();
+/*N*/
+/*N*/ SfxStyleFamily eFamily = bCellStyles ?
+/*N*/ ( bPageStyles ? SFX_STYLE_FAMILY_ALL : SFX_STYLE_FAMILY_PARA ) :
+/*N*/ SFX_STYLE_FAMILY_PAGE;
+/*N*/ SfxStyleSheetIterator aIter( pSourcePool, eFamily );
+/*N*/ USHORT nSourceCount = aIter.Count();
+/*N*/ if ( nSourceCount == 0 )
+/*N*/ return; // no source styles
+/*N*/
+/*N*/ ScStylePair* pStyles = new ScStylePair[ nSourceCount ];
+/*N*/ USHORT nFound = 0;
+/*N*/
+/*N*/ // first create all new styles
+/*N*/
+/*N*/ SfxStyleSheetBase* pSourceStyle = aIter.First();
+/*N*/ while (pSourceStyle)
+/*N*/ {
+/*N*/ String aLclName = pSourceStyle->GetName();
+/*N*/ SfxStyleSheetBase* pDestStyle = pDestPool->Find( pSourceStyle->GetName(), pSourceStyle->GetFamily() );
+/*N*/ if ( pDestStyle )
+/*N*/ {
+/*N*/ // touch existing styles only if replace flag is set
+/*N*/ if ( bReplace )
+/*N*/ {
+/*N*/ pStyles[nFound].pSource = pSourceStyle;
+/*N*/ pStyles[nFound].pDest = pDestStyle;
+/*N*/ ++nFound;
+/*N*/ }
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ pStyles[nFound].pSource = pSourceStyle;
+/*N*/ pStyles[nFound].pDest = &pDestPool->Make( aLclName, pSourceStyle->GetFamily(), pSourceStyle->GetMask() );
+/*N*/ ++nFound;
+/*N*/ }
+/*N*/
+/*N*/ pSourceStyle = aIter.Next();
+/*N*/ }
+/*N*/
+/*N*/ // then copy contents (after inserting all styles, for parent etc.)
+/*N*/
+/*N*/ for ( USHORT i = 0; i < nFound; ++i )
+/*N*/ {
+/*N*/ pStyles[i].pDest->GetItemSet().PutExtended(
+/*N*/ pStyles[i].pSource->GetItemSet(), SFX_ITEM_DONTCARE, SFX_ITEM_DEFAULT);
+/*N*/ if(pStyles[i].pSource->HasParentSupport())
+/*N*/ pStyles[i].pDest->SetParent(pStyles[i].pSource->GetParent());
+/*N*/ // follow is never used
+/*N*/ }
+/*N*/
+/*N*/ UpdateAllRowHeights();
+/*N*/ PostPaint( 0,0,0, MAXCOL,MAXROW,MAXTAB, PAINT_GRID | PAINT_LEFT ); // Paint
+/*N*/
+/*N*/ delete[] pStyles;
+/*N*/ }
+
+
+
+/*N*/ void ScDocShell::UpdateLinks()
+/*N*/ {
+/*N*/ SvxLinkManager* pLinkManager = aDocument.GetLinkManager();
+/*N*/ USHORT nCount;
+/*N*/ USHORT i;
+/*N*/ StrCollection aNames;
+/*N*/
+/*N*/ // nicht mehr benutzte Links raus
+/*N*/
+/*N*/ nCount = pLinkManager->GetLinks().Count();
+/*N*/
+/*N*/ // neue Links eintragen
+/*N*/
+/*N*/ nCount = aDocument.GetTableCount();
+/*N*/ for (i=0; i<nCount; i++)
+/*N*/ if (aDocument.IsLinked(i))
+/*N*/ {
+/*N*/ String aLclDocName = aDocument.GetLinkDoc(i);
+/*N*/ String aFltName = aDocument.GetLinkFlt(i);
+/*N*/ String aOptions = aDocument.GetLinkOpt(i);
+/*N*/ ULONG nRefresh = aDocument.GetLinkRefreshDelay(i);
+/*N*/ BOOL bThere = FALSE;
+/*N*/ for (USHORT j=0; j<i && !bThere; j++) // im Dokument mehrfach?
+/*N*/ if (aDocument.IsLinked(j)
+/*N*/ && aDocument.GetLinkDoc(j) == aLclDocName
+/*N*/ && aDocument.GetLinkFlt(j) == aFltName
+/*N*/ && aDocument.GetLinkOpt(j) == aOptions)
+/*N*/ // Ignore refresh delay in compare, it should be the
+/*N*/ // same for identical links and we don't want dupes
+/*N*/ // if it ain't.
+/*N*/ bThere = TRUE;
+/*N*/
+/*N*/ if (!bThere) // schon als Filter eingetragen?
+/*N*/ {
+/*N*/ StrData* pData = new StrData(aLclDocName);
+/*N*/ if (!aNames.Insert(pData))
+/*N*/ {
+/*?*/ delete pData;
+/*?*/ bThere = TRUE;
+/*N*/ }
+/*N*/ }
+/*N*/ if (!bThere)
+/*N*/ {
+/*N*/ ScTableLink* pLink = new ScTableLink( this, aLclDocName, aFltName, aOptions, nRefresh );
+/*N*/ pLink->SetInCreate( TRUE );
+/*N*/ pLinkManager->InsertFileLink( *pLink, OBJECT_CLIENT_FILE, aLclDocName, &aFltName );
+/*N*/ pLink->Update();
+/*N*/ pLink->SetInCreate( FALSE );
+/*N*/ }
+/*N*/ }
+/*N*/ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */