/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sc.hxx" #include #include #include "scitems.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // INCLUDE --------------------------------------------------------------- /* #include #include #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 __EXPORT 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(); #if 0 uno::Any aGlobs; uno::Sequence< uno::Any > aArgs(1); aArgs[ 0 ] <<= GetModel(); aGlobs <<= ::comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.excel.Globals" ) ), aArgs ); GetBasicManager()->SetGlobalUNOConstant( "VBAGlobals", aGlobs ); // Fake ThisComponent being setup by Activate ( which is a view // related thing ), // a) if another document is opened then in theory ThisComponent // will be reset as before, // b) when this document is 'really' Activated then ThisComponent // again will be set as before // The only wrinkle seems if this document is loaded 'InVisible' // but.. I don't see that this is possible from the vba API // I could be wrong though // There may be implications setting the current component // too early :-/ so I will just manually set the Basic Variables BasicManager* pAppMgr = SFX_APP()->GetBasicManager(); if ( pAppMgr ) pAppMgr->SetGlobalUNOConstant( "ThisExcelDoc", aArgs[ 0 ] ); #endif 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: // if ( pImpl->pFontList ) // delete pImpl->pFontList; // Druck-Optionen werden beim Drucken und evtl. in GetPrinter gesetzt // pImpl->pFontList = new FontList( GetPrinter(), Application::GetDefaultDevice() ); //PutItem( SvxFontListItem( pImpl->pFontList, SID_ATTR_CHAR_FONTLIST ) ); 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 ) ); //if (SfxObjectShell::HasSbxObject()) 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().isValid() || !aDocument.IsValidAsianCompression() || !aDocument.IsValidAsianKerning() ) { // get settings from SvxAsianConfig SvxAsianConfig aAsian( sal_False ); if ( !aDocument.GetForbiddenCharacters().isValid() ) { // set forbidden characters if necessary uno::Sequence aLocales = aAsian.GetStartEndCharLocales(); if (aLocales.getLength()) { vos::ORef 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]); //pDoc->SetForbiddenCharacters( eLang, aForbidden ); 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( 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 __EXPORT ScDocShell::Activate() { } void __EXPORT 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(sal_True); } return pDrawLayer; }