diff options
Diffstat (limited to 'sc/source/ui/docshell/docsh2.cxx')
-rw-r--r-- | sc/source/ui/docshell/docsh2.cxx | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/sc/source/ui/docshell/docsh2.cxx b/sc/source/ui/docshell/docsh2.cxx new file mode 100644 index 000000000000..52d99479f27d --- /dev/null +++ b/sc/source/ui/docshell/docsh2.cxx @@ -0,0 +1,233 @@ +/* -*- 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 <svx/svdpage.hxx> + + +#include <svx/xtable.hxx> + +#include "scitems.hxx" +#include <tools/gen.hxx> +#include <svtools/ctrltool.hxx> +#include <editeng/flstitem.hxx> +#include <svx/drawitem.hxx> +#include <sfx2/printer.hxx> +#include <svl/smplhint.hxx> +#include <svx/svditer.hxx> +#include <svx/svdobj.hxx> +#include <svx/svdoole2.hxx> +#include <vcl/svapp.hxx> +#include <svl/asiancfg.hxx> +#include <editeng/forbiddencharacterstable.hxx> +#include <editeng/unolingu.hxx> +#include <rtl/logfile.hxx> + +#include <comphelper/processfactory.hxx> +#include <basic/sbstar.hxx> +#include <basic/basmgr.hxx> +#include <sfx2/app.hxx> + +// INCLUDE --------------------------------------------------------------- +#include "drwlayer.hxx" +#include "stlpool.hxx" +#include "docsh.hxx" +#include "docshimp.hxx" +#include "docfunc.hxx" +#include "sc.hrc" + +using namespace com::sun::star; + +//------------------------------------------------------------------ + +sal_Bool ScDocShell::InitNew( const uno::Reference < embed::XStorage >& xStor ) +{ + RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::InitNew" ); + + sal_Bool bRet = SfxObjectShell::InitNew( xStor ); + + aDocument.MakeTable(0); + // zusaetzliche Tabellen werden von der ersten View angelegt, + // wenn bIsEmpty dann noch sal_True ist + + if( bRet ) + { + Size aSize( (long) ( STD_COL_WIDTH * HMM_PER_TWIPS * OLE_STD_CELLS_X ), + (long) ( ScGlobal::nStdRowHeight * HMM_PER_TWIPS * OLE_STD_CELLS_Y ) ); + // hier muss auch der Start angepasst werden + SetVisAreaOrSize( Rectangle( Point(), aSize ), sal_True ); + } + + aDocument.SetDrawDefaults(); // drawing layer defaults that are set only in InitNew + + // InitOptions sets the document languages, must be called before CreateStandardStyles + InitOptions(false); + + aDocument.GetStyleSheetPool()->CreateStandardStyles(); + aDocument.UpdStlShtPtrsFrmNms(); + + // SetDocumentModified ist in Load/InitNew nicht mehr erlaubt! + + InitItems(); + CalcOutputFactor(); + + return bRet; +} + +//------------------------------------------------------------------ + +sal_Bool ScDocShell::IsEmpty() const +{ + return bIsEmpty; +} + + +void ScDocShell::SetEmpty(sal_Bool bSet) +{ + bIsEmpty = bSet; +} + +//------------------------------------------------------------------ + +void ScDocShell::InitItems() +{ + // AllItemSet fuer Controller mit benoetigten Items fuellen: + + // Druck-Optionen werden beim Drucken und evtl. in GetPrinter gesetzt + + UpdateFontList(); + + ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); + if (pDrawLayer) + { + PutItem( SvxColorTableItem ( pDrawLayer->GetColorTable(), SID_COLOR_TABLE ) ); + PutItem( SvxGradientListItem( pDrawLayer->GetGradientList(), SID_GRADIENT_LIST ) ); + PutItem( SvxHatchListItem ( pDrawLayer->GetHatchList(), SID_HATCH_LIST ) ); + PutItem( SvxBitmapListItem ( pDrawLayer->GetBitmapList(), SID_BITMAP_LIST ) ); + PutItem( SvxDashListItem ( pDrawLayer->GetDashList(), SID_DASH_LIST ) ); + PutItem( SvxLineEndListItem ( pDrawLayer->GetLineEndList(), SID_LINEEND_LIST ) ); + + // andere Anpassungen nach dem Anlegen des DrawLayers + + pDrawLayer->SetNotifyUndoActionHdl( LINK( pDocFunc, ScDocFunc, NotifyDrawUndo ) ); + + pDrawLayer->UpdateBasic(); // DocShell-Basic in DrawPages setzen + } + else + { + // always use global color table instead of local copy + PutItem( SvxColorTableItem( XColorTable::GetStdColorTable(), SID_COLOR_TABLE ) ); + } + + if ( !aDocument.GetForbiddenCharacters().is() || + !aDocument.IsValidAsianCompression() || !aDocument.IsValidAsianKerning() ) + { + // get settings from SvxAsianConfig + SvxAsianConfig aAsian( false ); + + if ( !aDocument.GetForbiddenCharacters().is() ) + { + // set forbidden characters if necessary + uno::Sequence<lang::Locale> aLocales = aAsian.GetStartEndCharLocales(); + if (aLocales.getLength()) + { + rtl::Reference<SvxForbiddenCharactersTable> xForbiddenTable = + new SvxForbiddenCharactersTable( aDocument.GetServiceManager() ); + + const lang::Locale* pLocales = aLocales.getConstArray(); + for (sal_Int32 i = 0; i < aLocales.getLength(); i++) + { + i18n::ForbiddenCharacters aForbidden; + aAsian.GetStartEndChars( pLocales[i], aForbidden.beginLine, aForbidden.endLine ); + LanguageType eLang = SvxLocaleToLanguage(pLocales[i]); + + xForbiddenTable->SetForbiddenCharacters( eLang, aForbidden ); + } + + aDocument.SetForbiddenCharacters( xForbiddenTable ); + } + } + + if ( !aDocument.IsValidAsianCompression() ) + { + // set compression mode from configuration if not already set (e.g. XML import) + aDocument.SetAsianCompression( sal::static_int_cast<sal_uInt8>( aAsian.GetCharDistanceCompression() ) ); + } + + if ( !aDocument.IsValidAsianKerning() ) + { + // set asian punctuation kerning from configuration if not already set (e.g. XML import) + aDocument.SetAsianKerning( !aAsian.IsKerningWesternTextOnly() ); // reversed + } + } +} + +//------------------------------------------------------------------ + +void ScDocShell::ResetDrawObjectShell() +{ + ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); + if (pDrawLayer) + pDrawLayer->SetObjectShell( NULL ); +} + +//------------------------------------------------------------------ + +void ScDocShell::Activate() +{ +} + + +void ScDocShell::Deactivate() +{ +} + +//------------------------------------------------------------------ + + +ScDrawLayer* ScDocShell::MakeDrawLayer() +{ + ScDrawLayer* pDrawLayer = aDocument.GetDrawLayer(); + if (!pDrawLayer) + { + RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScDocShell::MakeDrawLayer" ); + + aDocument.InitDrawLayer(this); + pDrawLayer = aDocument.GetDrawLayer(); + InitItems(); // incl. Undo und Basic + Broadcast( SfxSimpleHint( SC_HINT_DRWLAYER_NEW ) ); + if (nDocumentLock) + pDrawLayer->setLock(true); + } + return pDrawLayer; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |