diff options
Diffstat (limited to 'sd/source/ui/func/futempl.cxx')
-rw-r--r-- | sd/source/ui/func/futempl.cxx | 733 |
1 files changed, 733 insertions, 0 deletions
diff --git a/sd/source/ui/func/futempl.cxx b/sd/source/ui/func/futempl.cxx new file mode 100644 index 000000000000..43572c2af8a4 --- /dev/null +++ b/sd/source/ui/func/futempl.cxx @@ -0,0 +1,733 @@ +/************************************************************************* + * + * 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_sd.hxx" + + +#include <com/sun/star/style/XStyleFamiliesSupplier.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/container/XNameAccess.hpp> + +#include "futempl.hxx" + +#include <editeng/editdata.hxx> +#include <editeng/bulitem.hxx> +#include <svx/svxids.hrc> // fuer SID_OBJECT_SELECT +#include <sfx2/bindings.hxx> +#include <svl/aeitem.hxx> +#include <sfx2/dispatch.hxx> +#include <vcl/msgbox.hxx> +#include <editeng/eeitem.hxx> +#include <sfx2/request.hxx> +#include <editeng/numitem.hxx> +#include <editeng/editeng.hxx> +#include <editeng/lrspitem.hxx> +#include <svx/svdopage.hxx> +#include <svx/svditer.hxx> + +#include <sfx2/viewfrm.hxx> +#include <svx/xlndsit.hxx> +#include <svx/xlnstit.hxx> +#include <svx/xlnedit.hxx> + +#include "stlsheet.hxx" +#include "sdpage.hxx" +#include "stlpool.hxx" +#include "app.hxx" +#include "View.hxx" +#ifndef SD_WINDOW_SHELL_HXX +#include "Window.hxx" +#endif +#include "drawview.hxx" +#include "drawdoc.hxx" +#include "DrawDocShell.hxx" +#include "DrawViewShell.hxx" +#include "ViewShell.hxx" +#include "res_bmp.hrc" +#include "glob.hrc" +#include "prlayout.hxx" // enum PresentationObjects +#include "prltempl.hrc" // TAB_PRES_LAYOUT_TEMPLATE_x +#include <svx/tabarea.hxx> +#include "sdresid.hxx" +#include "OutlineViewShell.hxx" +#include "strings.hrc" +#include "helpids.h" +#include "sdabstdlg.hxx" + +using rtl::OUString; +using namespace com::sun::star::uno; +using namespace com::sun::star::container; +using namespace com::sun::star::beans; +using namespace com::sun::star::style; + +namespace sd +{ + +TYPEINIT1( FuTemplate, FuPoor ); + +/************************************************************************* +|* +|* Konstruktor +|* +\************************************************************************/ + +FuTemplate::FuTemplate ( + ViewShell* pViewSh, + ::sd::Window* pWin, + ::sd::View* pView, + SdDrawDocument* pDoc, + SfxRequest& rReq ) + : FuPoor( pViewSh, pWin, pView, pDoc, rReq ) +{ +} + +FunctionReference FuTemplate::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) +{ + FunctionReference xFunc( new FuTemplate( pViewSh, pWin, pView, pDoc, rReq ) ); + xFunc->DoExecute(rReq); + return xFunc; +} + +void FuTemplate::DoExecute( SfxRequest& rReq ) +{ + const SfxItemSet* pArgs = rReq.GetArgs(); + USHORT nSId = rReq.GetSlot(); + + // StyleSheet-Parameter holen + SfxStyleSheetBasePool* pSSPool = mpDoc->GetDocSh()->GetStyleSheetPool(); + SfxStyleSheetBase* pStyleSheet = NULL; + + const SfxPoolItem* pItem; + USHORT nFamily = USHRT_MAX; + if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILY, + FALSE, &pItem )) + { + nFamily = ( (const SfxUInt16Item &) pArgs->Get( SID_STYLE_FAMILY ) ).GetValue(); + } + else + if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILYNAME, + FALSE, &pItem )) + { + String sFamily = ( (const SfxStringItem &) pArgs->Get( SID_STYLE_FAMILYNAME ) ).GetValue(); + if (sFamily.CompareToAscii("graphics") == COMPARE_EQUAL) + nFamily = SD_STYLE_FAMILY_GRAPHICS; + else + nFamily = SD_STYLE_FAMILY_PSEUDO; + } + + String aStyleName; + USHORT nRetMask = 0xffff; + + switch( nSId ) + { + case SID_STYLE_APPLY: + case SID_STYLE_EDIT: + case SID_STYLE_DELETE: + case SID_STYLE_FAMILY: + case SID_STYLE_NEW_BY_EXAMPLE: + { + SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_APPLY_STYLE, sal_False ); + SFX_REQUEST_ARG( rReq, pFamilyItem, SfxStringItem, SID_STYLE_FAMILYNAME, sal_False ); + if ( pFamilyItem && pNameItem ) + { + try + { + Reference< XStyleFamiliesSupplier > xModel(mpDoc->GetDocSh()->GetModel(), UNO_QUERY_THROW ); + Reference< XNameAccess > xCont( xModel->getStyleFamilies() ); + Reference< XNameAccess > xStyles( xCont->getByName(pFamilyItem->GetValue()), UNO_QUERY_THROW ); + Reference< XPropertySet > xInfo( xStyles->getByName( pNameItem->GetValue() ), UNO_QUERY_THROW ); + + OUString aUIName; + xInfo->getPropertyValue( ::rtl::OUString::createFromAscii("DisplayName") ) >>= aUIName; + if ( aUIName.getLength() ) + rReq.AppendItem( SfxStringItem( nSId, aUIName ) ); + } + catch( Exception& ) + { + } + } + + if (pArgs->GetItemState(nSId) == SFX_ITEM_SET) + aStyleName = ( ( (const SfxStringItem &) pArgs->Get( nSId ) ).GetValue() ); + } + } + + switch( nSId ) + { + case SID_STYLE_NEW: + { + SfxStyleSheetBase *p = pSSPool->Find(aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_ALL ); + if(p) + { + pSSPool->Remove(p); + p = 0; + } + pStyleSheet = &pSSPool->Make( aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_USERDEF ); + + if (pArgs->GetItemState(SID_STYLE_REFERENCE) == SFX_ITEM_ON) + { + String aParentName(((const SfxStringItem&) pArgs->Get(SID_STYLE_REFERENCE)).GetValue()); + pStyleSheet->SetParent(aParentName); + } + else + { + pStyleSheet->SetParent(String(SdResId(STR_STANDARD_STYLESHEET_NAME))); + } + } + break; + + case SID_STYLE_NEW_BY_EXAMPLE: + { + // Z.Z. geht immer noch der Dialog auf, um den Namen + // der Vorlage einzugeben. + if( mpView->AreObjectsMarked() || TRUE ) + { + SfxStyleSheetBase *p = pSSPool->Find(aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_ALL ); + if(p) + { + pSSPool->Remove(p); + p = 0; + } + pStyleSheet = &pSSPool->Make( aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_USERDEF ); + pStyleSheet->SetParent(String(SdResId(STR_STANDARD_STYLESHEET_NAME))); + } + } + break; + + case SID_STYLE_EDIT: + pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily); + break; + + case SID_STYLE_DELETE: + pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily); + if( pStyleSheet ) + { + pSSPool->Remove( pStyleSheet ); + nRetMask = TRUE; + mpDoc->SetChanged(TRUE); + } + else + { + nRetMask = FALSE; + } + break; + + case SID_STYLE_APPLY: + // Anwenden der Vorlage auf das Dokument + pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily); + + // do not set presentation styles, they will be set implicit + if ( pStyleSheet && pStyleSheet->GetFamily() != SD_STYLE_FAMILY_PSEUDO ) + { + SfxStyleSheet* pOldStyleSheet = mpView->GetStyleSheet(); + String aStr; + + if( // if the object had no style sheet, allow all + !pOldStyleSheet || + + // allow if old and new style sheet has same family + pStyleSheet->GetFamily() == pOldStyleSheet->GetFamily() || + + // allow if old was background objects and new is graphics + pStyleSheet->GetFamily() == (SD_STYLE_FAMILY_GRAPHICS && pOldStyleSheet->GetHelpId( aStr ) == HID_PSEUDOSHEET_BACKGROUNDOBJECTS) || + + // allow if old was presentation and we are a drawing document + (pOldStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE && mpDoc->GetDocumentType() == DOCUMENT_TYPE_DRAW) ) + { + mpView->SetStyleSheet( (SfxStyleSheet*) pStyleSheet); + mpDoc->SetChanged(TRUE); + mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_FAMILY2 ); + } + } +/* #96983# GrabFocus moved to stylist + pWin->GrabFocus(); +*/ + break; + + case SID_STYLE_WATERCAN: + { + if( !SD_MOD()->GetWaterCan() ) + { + if( pArgs->GetItemState( nSId ) == SFX_ITEM_SET ) + { + aStyleName = ( ( (const SfxStringItem &) pArgs->Get( nSId ) ).GetValue() ); + SD_MOD()->SetWaterCan( TRUE ); + pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily); + } + // keine Praesentationsobjektvorlagen, die werden nur + // implizit zugewiesen + if( pStyleSheet && pStyleSheet->GetFamily() != SD_STYLE_FAMILY_PSEUDO ) + { + ( (SdStyleSheetPool*) pSSPool )->SetActualStyleSheet( pStyleSheet ); + + // Es wird explizit in den Selektionsmodus geschaltet + mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_OBJECT_SELECT, + SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD ); + + } + else + SD_MOD()->SetWaterCan( FALSE ); + } + else + { + SD_MOD()->SetWaterCan( FALSE ); + // Werkzeugleiste muss wieder enabled werden + mpViewShell->Invalidate(); + } + } + break; + + default: + break; + } + + switch( nSId ) + { + case SID_STYLE_NEW: + case SID_STYLE_EDIT: + { + PresentationObjects ePO = PO_OUTLINE_1; + + if( pStyleSheet ) + { + SfxAbstractTabDialog* pStdDlg = NULL; + SfxAbstractTabDialog* pPresDlg = NULL; + SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create(); + BOOL bOldDocInOtherLanguage = FALSE; + SfxItemSet aOriSet( pStyleSheet->GetItemSet() ); + + SfxStyleFamily eFamily = pStyleSheet->GetFamily(); + + if (eFamily == SD_STYLE_FAMILY_GRAPHICS) + { + pStdDlg = pFact ? pFact->CreateSdTabTemplateDlg( 0, mpDoc->GetDocSh(), *pStyleSheet, mpDoc, mpView ) : 0; + } + else if (eFamily == SD_STYLE_FAMILY_PSEUDO) + { + String aName(pStyleSheet->GetName()); + USHORT nDlgId = 0; + + if (aName == String(SdResId(STR_PSEUDOSHEET_TITLE))) + { + nDlgId = TAB_PRES_LAYOUT_TEMPLATE; + ePO = PO_TITLE; + } + else if (aName == String(SdResId(STR_PSEUDOSHEET_SUBTITLE))) + { + nDlgId = TAB_PRES_LAYOUT_TEMPLATE; + ePO = PO_SUBTITLE; + } + else if (aName == + String(SdResId(STR_PSEUDOSHEET_BACKGROUND))) + { + nDlgId = TAB_PRES_LAYOUT_TEMPLATE_BACKGROUND; + ePO = PO_BACKGROUND; + } + else if (aName == + String(SdResId(STR_PSEUDOSHEET_BACKGROUNDOBJECTS))) + { + nDlgId = TAB_PRES_LAYOUT_TEMPLATE; + ePO = PO_BACKGROUNDOBJECTS; + } + else if (aName == + String(SdResId(STR_PSEUDOSHEET_NOTES))) + { + nDlgId = TAB_PRES_LAYOUT_TEMPLATE; + ePO = PO_NOTES; + } + else if(aName.Search(String(SdResId(STR_PSEUDOSHEET_OUTLINE))) != + STRING_NOTFOUND) + { + nDlgId = TAB_PRES_LAYOUT_TEMPLATE; + + String aOutlineStr((SdResId(STR_PSEUDOSHEET_OUTLINE))); + // die Nummer ermitteln; ein Leerzeichen zwischen + // Name und Nummer beachten + String aNumStr(aName.Copy(aOutlineStr.Len() + 1)); + USHORT nLevel = (USHORT)aNumStr.ToInt32(); + switch (nLevel) + { + case 1: ePO = PO_OUTLINE_1; break; + case 2: ePO = PO_OUTLINE_2; break; + case 3: ePO = PO_OUTLINE_3; break; + case 4: ePO = PO_OUTLINE_4; break; + case 5: ePO = PO_OUTLINE_5; break; + case 6: ePO = PO_OUTLINE_6; break; + case 7: ePO = PO_OUTLINE_7; break; + case 8: ePO = PO_OUTLINE_8; break; + case 9: ePO = PO_OUTLINE_9; break; + } + } + else + { + DBG_ERROR("Vorlage aus aelterer anderssprachiger Version"); + bOldDocInOtherLanguage = TRUE; + } + + if( !bOldDocInOtherLanguage ) + { + pPresDlg = pFact ? pFact->CreateSdPresLayoutTemplateDlg( mpDocSh, NULL, SdResId(nDlgId), *pStyleSheet, ePO, pSSPool ) : 0; + } + } + else if (eFamily == SD_STYLE_FAMILY_CELL) + { + } + + USHORT nResult = RET_CANCEL; + const SfxItemSet* pOutSet = NULL; + if (pStdDlg) + { + nResult = pStdDlg->Execute(); + pOutSet = pStdDlg->GetOutputItemSet(); + } + else if( pPresDlg ) + { + nResult = pPresDlg->Execute(); + pOutSet = pPresDlg->GetOutputItemSet(); + } + + switch( nResult ) + { + case RET_OK: + { + nRetMask = pStyleSheet->GetMask(); + + if (eFamily == SD_STYLE_FAMILY_PSEUDO) + { + SfxItemSet aTempSet(*pOutSet); + ((SdStyleSheet*)pStyleSheet)->AdjustToFontHeight(aTempSet); + + // Sonderbehandlung: die INVALIDS auf NULL-Pointer + // zurueckgesetzen (sonst landen INVALIDs oder + // Pointer auf die DefaultItems in der Vorlage; + // beides wuerde die Attribut-Vererbung unterbinden) + aTempSet.ClearInvalidItems(); + + // EE_PARA_NUMBULLET item is only valid in first outline template + if( (ePO >= PO_OUTLINE_2) && (ePO <= PO_OUTLINE_9) ) + { + if (aTempSet.GetItemState(EE_PARA_NUMBULLET) == SFX_ITEM_SET) + { + SvxNumRule aRule(*((SvxNumBulletItem*)aTempSet.GetItem(EE_PARA_NUMBULLET))->GetNumRule()); + + String sStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE))); + sStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) ); + SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( sStyleName, SD_STYLE_FAMILY_PSEUDO); + + if(pFirstStyleSheet) + { + pFirstStyleSheet->GetItemSet().Put( SvxNumBulletItem( aRule, EE_PARA_NUMBULLET )); + SdStyleSheet* pRealSheet = ((SdStyleSheet*)pFirstStyleSheet)->GetRealStyleSheet(); + pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); + } + + aTempSet.ClearItem( EE_PARA_NUMBULLET ); + } + } + + String sStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE))); + sStyleName.Append( sal_Unicode( ' ' )); + + pStyleSheet->GetItemSet().Put(aTempSet); + SdStyleSheet* pRealSheet =((SdStyleSheet*)pStyleSheet)->GetRealStyleSheet(); + pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); + + if( (ePO >= PO_OUTLINE_1) && (ePO <= PO_OUTLINE_8) ) + { + for( USHORT n = (USHORT)(ePO - PO_OUTLINE_1 + 2); n < 10; n++ ) + { + String aName( sStyleName ); + aName.Append( String::CreateFromInt32( (sal_Int32) n )); + + SfxStyleSheetBase* pSheet = pSSPool->Find( aName, SD_STYLE_FAMILY_PSEUDO); + + if(pSheet) + { + SdStyleSheet* pRealStyleSheet = ((SdStyleSheet*)pSheet)->GetRealStyleSheet(); + pRealStyleSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); + } + } + } + } + + SfxItemSet& rAttr = pStyleSheet->GetItemSet(); + +/* #i35937# + if ( rAttr.GetItemState( EE_PARA_LRSPACE ) == SFX_ITEM_ON ) + { + // SvxLRSpaceItem hart gesetzt: NumBulletItem anpassen + if ( aOriSet.GetItemState( EE_PARA_LRSPACE ) != SFX_ITEM_ON || + (const SvxLRSpaceItem&) aOriSet.Get( EE_PARA_LRSPACE ) != + (const SvxLRSpaceItem&) rAttr.Get( EE_PARA_LRSPACE ) ) + { + SvxNumBulletItem aNumBullet( (const SvxNumBulletItem&) rAttr.Get(EE_PARA_NUMBULLET) ); + + sal_uInt16 nLevel = 0; + if( (ePO >= PO_OUTLINE_2) && (ePO <= PO_OUTLINE_9) ) + nLevel = (sal_uInt16)(ePO - PO_OUTLINE_1 + 1); + + EditEngine::ImportBulletItem( aNumBullet, nLevel, NULL, + &(const SvxLRSpaceItem&) rAttr.Get( EE_PARA_LRSPACE ) ); + + // the numbering bullet item is not valid in styles Outline 2 to Outline 9 + if( nLevel != 0 ) + { + // so put it into Outline 1 then.. + String sStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE))); + sStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) ); + SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( sStyleName, SD_STYLE_FAMILY_PSEUDO); + + if(pFirstStyleSheet) + { + pFirstStyleSheet->GetItemSet().Put( aNumBullet); + SdStyleSheet* pRealSheet = ((SdStyleSheet*)pFirstStyleSheet)->GetRealStyleSheet(); + pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED)); + } + } + else + { + ( (SfxItemSet&) rAttr).Put( aNumBullet ); + } + } + } +*/ + // check for unique names of named items for xml + if( rAttr.GetItemState( XATTR_FILLBITMAP ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLBITMAP ); + SfxPoolItem* pNewItem = ((XFillBitmapItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + if( rAttr.GetItemState( XATTR_LINEDASH ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_LINEDASH ); + SfxPoolItem* pNewItem = ((XLineDashItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + if( rAttr.GetItemState( XATTR_LINESTART ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_LINESTART ); + SfxPoolItem* pNewItem = ((XLineStartItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + if( rAttr.GetItemState( XATTR_LINEEND ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_LINEEND ); + SfxPoolItem* pNewItem = ((XLineEndItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + if( rAttr.GetItemState( XATTR_FILLGRADIENT ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLGRADIENT ); + SfxPoolItem* pNewItem = ((XFillGradientItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + if( rAttr.GetItemState( XATTR_FILLFLOATTRANSPARENCE ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLFLOATTRANSPARENCE ); + SfxPoolItem* pNewItem = ((XFillFloatTransparenceItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + if( rAttr.GetItemState( XATTR_FILLHATCH ) == SFX_ITEM_SET ) + { + const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLHATCH ); + SfxPoolItem* pNewItem = ((XFillHatchItem*)pOldItem)->checkForUniqueItem( mpDoc ); + if( pOldItem != pNewItem ) + { + rAttr.Put( *pNewItem ); + delete pNewItem; + } + } + + ( (SfxStyleSheet*) pStyleSheet )->Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) ); + + DrawViewShell* pDrawViewShell = dynamic_cast< DrawViewShell* >( mpViewShell ); + if( pDrawViewShell ) + { + PageKind ePageKind = pDrawViewShell->GetPageKind(); + if( ePageKind == PK_NOTES || ePageKind == PK_HANDOUT ) + { + SdPage* pPage = mpViewShell->GetActualPage(); + + if(pDrawViewShell->GetEditMode() == EM_MASTERPAGE) + { + pPage = static_cast<SdPage*>((&(pPage->TRG_GetMasterPage()))); + } + + if( pPage ) + { + SdrObjListIter aIter( *pPage ); + while( aIter.IsMore() ) + { + SdrObject* pObj = aIter.Next(); + if( pObj->ISA(SdrPageObj) ) + { + // repaint only + pObj->ActionChanged(); + // pObj->SendRepaintBroadcast(); + } + } + } + } + } + + if( mpDoc->GetOnlineSpell() ) + { + const SfxPoolItem* pTempItem; + if( SFX_ITEM_SET == rAttr.GetItemState(EE_CHAR_LANGUAGE, FALSE, &pTempItem ) || + SFX_ITEM_SET == rAttr.GetItemState(EE_CHAR_LANGUAGE_CJK, FALSE, &pTempItem ) || + SFX_ITEM_SET == rAttr.GetItemState(EE_CHAR_LANGUAGE_CTL, FALSE, &pTempItem ) ) + { + mpDoc->StopOnlineSpelling(); + mpDoc->StartOnlineSpelling(); + } + } + + mpDoc->SetChanged(TRUE); + } + break; + + default: + { + if( nSId == SID_STYLE_NEW ) + pSSPool->Remove( pStyleSheet ); + delete pStdDlg; + delete pPresDlg; + } + return; // Abbruch + } + delete pStdDlg; + delete pPresDlg; + } + } + break; + + case SID_STYLE_NEW_BY_EXAMPLE: + { + if( pStyleSheet ) + { + nRetMask = pStyleSheet->GetMask(); + SfxItemSet aCoreSet( mpDoc->GetPool() ); + mpView->GetAttributes( aCoreSet, TRUE ); + + // wenn das Objekt eine Vorlage hatte, wird diese Parent + // der neuen Vorlage + SfxStyleSheet* pOldStyle = mpView->GetStyleSheet(); + + // Wenn pOldStyle == pStyleSheet -> Rekursion + if( pOldStyle != pStyleSheet ) + { + if (pOldStyle) + { + pStyleSheet->SetParent(pOldStyle->GetName()); + } + + SfxItemSet* pStyleSet = &pStyleSheet->GetItemSet(); + pStyleSet->Put(aCoreSet); + + // Vorlage anwenden (Aber nicht, wenn gerade ein Text + // editiert wird, denn dazu muesste die Edit Engine + // Vorlagen auf Zeichenebene beherrschen.) + if (!mpView->GetTextEditObject()) + { + mpView->SetStyleSheet( (SfxStyleSheet*) pStyleSheet); + } + + ( (SfxStyleSheet*) pStyleSheet )->Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) ); + mpDoc->SetChanged(TRUE); + + mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_FAMILY2 ); + } + } + } + break; + + case SID_STYLE_UPDATE_BY_EXAMPLE: + { + if ((mpView->AreObjectsMarked() && mpView->GetMarkedObjectList().GetMarkCount() == 1) || + mpView->ISA(OutlineView)) + { + pStyleSheet = mpView->GetStyleSheet(); + + if( pStyleSheet ) + { + nRetMask = pStyleSheet->GetMask(); + SfxItemSet aCoreSet( mpDoc->GetPool() ); + mpView->GetAttributes( aCoreSet ); + + SfxItemSet* pStyleSet = &pStyleSheet->GetItemSet(); + pStyleSet->Put( aCoreSet ); + + mpView->SetStyleSheet( (SfxStyleSheet*) pStyleSheet); + + ( (SfxStyleSheet*) pStyleSheet )->Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) ); + mpDoc->SetChanged(TRUE); + mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_FAMILY2 ); + } + } + } + break; + + } + if( nRetMask != 0xffff ) + rReq.SetReturnValue( SfxUInt16Item( nSId, nRetMask ) ); +} + +void FuTemplate::Activate() +{ +} + +void FuTemplate::Deactivate() +{ +} + +} // end of namespace sd |