xref: /AOO41X/main/sd/source/ui/func/futempl.cxx (revision 79aad27f7f29270c03e208e3d687e8e3850af11d)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sd.hxx"
26 
27 
28 #include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
29 #include <com/sun/star/beans/XPropertySet.hpp>
30 #include <com/sun/star/container/XNameAccess.hpp>
31 
32 #include "futempl.hxx"
33 
34 #include <editeng/editdata.hxx>
35 #include <editeng/bulitem.hxx>
36 #include <svx/svxids.hrc>   // fuer SID_OBJECT_SELECT
37 #include <sfx2/bindings.hxx>
38 #include <svl/aeitem.hxx>
39 #include <sfx2/dispatch.hxx>
40 #include <vcl/msgbox.hxx>
41 #include <editeng/eeitem.hxx>
42 #include <sfx2/request.hxx>
43 #include <editeng/numitem.hxx>
44 #include <editeng/editeng.hxx>
45 #include <editeng/lrspitem.hxx>
46 #include <svx/svdopage.hxx>
47 #include <svx/svditer.hxx>
48 #include <svx/sdr/properties/properties.hxx>
49 
50 #include <sfx2/viewfrm.hxx>
51 #include <svx/xlndsit.hxx>
52 #include <svx/xlnstit.hxx>
53 #include <svx/xlnedit.hxx>
54 #include "app.hrc"
55 #include "stlsheet.hxx"
56 #include "sdpage.hxx"
57 #include "stlpool.hxx"
58 #include "app.hxx"
59 #include "View.hxx"
60 #ifndef SD_WINDOW_SHELL_HXX
61 #include "Window.hxx"
62 #endif
63 #include "drawview.hxx"
64 #include "drawdoc.hxx"
65 #include "DrawDocShell.hxx"
66 #include "DrawViewShell.hxx"
67 #include "ViewShell.hxx"
68 #include "res_bmp.hrc"
69 #include "glob.hrc"
70 #include "prlayout.hxx"         // enum PresentationObjects
71 #include "prltempl.hrc"         // TAB_PRES_LAYOUT_TEMPLATE_x
72 #include <svx/tabarea.hxx>
73 #include "sdresid.hxx"
74 #include "OutlineViewShell.hxx"
75 #include "strings.hrc"
76 #include "helpids.h"
77 #include "sdabstdlg.hxx"
78 
79 using rtl::OUString;
80 using namespace com::sun::star::uno;
81 using namespace com::sun::star::container;
82 using namespace com::sun::star::beans;
83 using namespace com::sun::star::style;
84 
85 namespace sd
86 {
87 
88 TYPEINIT1( FuTemplate, FuPoor );
89 
90 /*************************************************************************
91 |*
92 |* Konstruktor
93 |*
94 \************************************************************************/
95 
FuTemplate(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)96 FuTemplate::FuTemplate (
97     ViewShell* pViewSh,
98     ::sd::Window* pWin,
99     ::sd::View* pView,
100     SdDrawDocument* pDoc,
101     SfxRequest& rReq )
102     : FuPoor( pViewSh, pWin, pView, pDoc, rReq )
103 {
104 }
105 
Create(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)106 FunctionReference FuTemplate::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq )
107 {
108     FunctionReference xFunc( new FuTemplate( pViewSh, pWin, pView, pDoc, rReq ) );
109     xFunc->DoExecute(rReq);
110     return xFunc;
111 }
112 
DoExecute(SfxRequest & rReq)113 void FuTemplate::DoExecute( SfxRequest& rReq )
114 {
115     const SfxItemSet* pArgs = rReq.GetArgs();
116     sal_uInt16 nSId = rReq.GetSlot();
117 
118     // StyleSheet-Parameter holen
119     SfxStyleSheetBasePool* pSSPool = mpDoc->GetDocSh()->GetStyleSheetPool();
120     SfxStyleSheetBase* pStyleSheet = NULL;
121 
122     const SfxPoolItem* pItem;
123     sal_uInt16 nFamily = USHRT_MAX;
124     if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILY,
125         sal_False, &pItem ))
126     {
127         nFamily = ( (const SfxUInt16Item &) pArgs->Get( SID_STYLE_FAMILY ) ).GetValue();
128     }
129     else
130     if( pArgs && SFX_ITEM_SET == pArgs->GetItemState( SID_STYLE_FAMILYNAME,
131         sal_False, &pItem ))
132     {
133         String sFamily = ( (const SfxStringItem &) pArgs->Get( SID_STYLE_FAMILYNAME ) ).GetValue();
134         if (sFamily.CompareToAscii("graphics") == COMPARE_EQUAL)
135             nFamily = SD_STYLE_FAMILY_GRAPHICS;
136         else
137             nFamily = SD_STYLE_FAMILY_PSEUDO;
138     }
139 
140     String aStyleName;
141     sal_uInt16 nRetMask = 0xffff;
142 
143     switch( nSId )
144     {
145         case SID_STYLE_APPLY:
146         case SID_STYLE_EDIT:
147         case SID_STYLE_DELETE:
148         case SID_STYLE_FAMILY:
149         case SID_STYLE_NEW_BY_EXAMPLE:
150         {
151             SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_APPLY_STYLE, sal_False );
152             SFX_REQUEST_ARG( rReq, pFamilyItem, SfxStringItem, SID_STYLE_FAMILYNAME, sal_False );
153             if ( pFamilyItem && pNameItem )
154             {
155                 try
156                 {
157                     Reference< XStyleFamiliesSupplier > xModel(mpDoc->GetDocSh()->GetModel(), UNO_QUERY_THROW );
158                     Reference< XNameAccess > xCont( xModel->getStyleFamilies() );
159                     Reference< XNameAccess > xStyles( xCont->getByName(pFamilyItem->GetValue()), UNO_QUERY_THROW );
160                     Reference< XPropertySet > xInfo( xStyles->getByName( pNameItem->GetValue() ), UNO_QUERY_THROW );
161 
162                     OUString aUIName;
163                     xInfo->getPropertyValue( ::rtl::OUString::createFromAscii("DisplayName") ) >>= aUIName;
164                     if ( aUIName.getLength() )
165                         rReq.AppendItem( SfxStringItem( nSId, aUIName ) );
166                 }
167                 catch( Exception& )
168                 {
169                 }
170             }
171 
172             if (pArgs->GetItemState(nSId) == SFX_ITEM_SET)
173                 aStyleName = ( ( (const SfxStringItem &) pArgs->Get( nSId ) ).GetValue() );
174         }
175     }
176 
177     switch( nSId )
178     {
179         case SID_STYLE_NEW:
180         {
181             SfxStyleSheetBase *p = pSSPool->Find(aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_ALL );
182             if(p)
183             {
184                 pSSPool->Remove(p);
185                 p = 0;
186             }
187             pStyleSheet = &pSSPool->Make( aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_USERDEF );
188 
189             if (pArgs->GetItemState(SID_STYLE_REFERENCE) == SFX_ITEM_ON)
190             {
191                 String aParentName(((const SfxStringItem&) pArgs->Get(SID_STYLE_REFERENCE)).GetValue());
192                 pStyleSheet->SetParent(aParentName);
193             }
194             else
195             {
196                 pStyleSheet->SetParent(String(SdResId(STR_STANDARD_STYLESHEET_NAME)));
197             }
198         }
199         break;
200 
201         case SID_STYLE_NEW_BY_EXAMPLE:
202         {
203             // Z.Z. geht immer noch der Dialog auf, um den Namen
204             // der Vorlage einzugeben.
205             if( mpView->AreObjectsMarked() || sal_True )
206             {
207                 SfxStyleSheetBase *p = pSSPool->Find(aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_ALL );
208                 if(p)
209                 {
210                     pSSPool->Remove(p);
211                     p = 0;
212                 }
213                 pStyleSheet = &pSSPool->Make( aStyleName, (SfxStyleFamily) nFamily, SFXSTYLEBIT_USERDEF );
214                 pStyleSheet->SetParent(String(SdResId(STR_STANDARD_STYLESHEET_NAME)));
215             }
216         }
217         break;
218 
219         case SID_STYLE_EDIT:
220             pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily);
221         break;
222 
223         case SID_STYLE_DELETE:
224             pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily);
225             if( pStyleSheet )
226             {
227                 pSSPool->Remove( pStyleSheet );
228                 nRetMask = sal_True;
229                 mpDoc->SetChanged(sal_True);
230             }
231             else
232             {
233                 nRetMask = sal_False;
234             }
235         break;
236 
237         case SID_STYLE_APPLY:
238             // Anwenden der Vorlage auf das Dokument
239             pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily);
240 
241             // do not set presentation styles, they will be set implicit
242             if ( pStyleSheet && pStyleSheet->GetFamily() != SD_STYLE_FAMILY_PSEUDO )
243             {
244                 SfxStyleSheet* pOldStyleSheet = mpView->GetStyleSheet();
245                 String aStr;
246 
247                 if( // if the object had no style sheet, allow all
248                     !pOldStyleSheet ||
249 
250                     // allow if old and new style sheet has same family
251                     pStyleSheet->GetFamily() == pOldStyleSheet->GetFamily() ||
252 
253                     // allow if old was background objects and new is graphics
254                     pStyleSheet->GetFamily() == (SD_STYLE_FAMILY_GRAPHICS && pOldStyleSheet->GetHelpId( aStr ) == HID_PSEUDOSHEET_BACKGROUNDOBJECTS) ||
255 
256                     // allow if old was presentation and we are a drawing document
257                     (pOldStyleSheet->GetFamily() == SD_STYLE_FAMILY_MASTERPAGE && mpDoc->GetDocumentType() == DOCUMENT_TYPE_DRAW) )
258                 {
259                     mpView->SetStyleSheet( (SfxStyleSheet*) pStyleSheet);
260                     mpDoc->SetChanged(sal_True);
261                     mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_FAMILY2 );
262                 }
263             }
264 /* #96983# GrabFocus moved to stylist
265             pWin->GrabFocus();
266 */
267         break;
268 
269         case SID_STYLE_WATERCAN:
270         {
271             if( !SD_MOD()->GetWaterCan() )
272             {
273                 if( pArgs->GetItemState( nSId ) == SFX_ITEM_SET )
274                 {
275                     aStyleName = ( ( (const SfxStringItem &) pArgs->Get( nSId ) ).GetValue() );
276                     SD_MOD()->SetWaterCan( sal_True );
277                     pStyleSheet = pSSPool->Find( aStyleName, (SfxStyleFamily) nFamily);
278                 }
279                 // keine Praesentationsobjektvorlagen, die werden nur
280                 // implizit zugewiesen
281                 if( pStyleSheet && pStyleSheet->GetFamily() != SD_STYLE_FAMILY_PSEUDO )
282                 {
283                     ( (SdStyleSheetPool*) pSSPool )->SetActualStyleSheet( pStyleSheet );
284 
285                     // Es wird explizit in den Selektionsmodus geschaltet
286                     mpViewShell->GetViewFrame()->GetDispatcher()->Execute( SID_OBJECT_SELECT,
287                                         SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
288 
289                 }
290                 else
291                     SD_MOD()->SetWaterCan( sal_False );
292             }
293             else
294             {
295                 SD_MOD()->SetWaterCan( sal_False );
296                 // Werkzeugleiste muss wieder enabled werden
297                 mpViewShell->Invalidate();
298             }
299         }
300         break;
301 
302         default:
303         break;
304     }
305 
306     switch( nSId )
307     {
308         case SID_STYLE_NEW:
309         case SID_STYLE_EDIT:
310         {
311             PresentationObjects ePO = PO_OUTLINE_1;
312 
313             if( pStyleSheet )
314             {
315                 SfxAbstractTabDialog*  pStdDlg  = NULL;
316                 SfxAbstractTabDialog*  pPresDlg = NULL;
317                 SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
318                 sal_Bool bOldDocInOtherLanguage = sal_False;
319                 SfxItemSet aOriSet( pStyleSheet->GetItemSet() );
320 
321                 SfxStyleFamily eFamily = pStyleSheet->GetFamily();
322 
323                 if (eFamily == SD_STYLE_FAMILY_GRAPHICS)
324                 {
325                     pStdDlg = pFact ? pFact->CreateSdTabTemplateDlg( 0, mpDoc->GetDocSh(), *pStyleSheet, mpDoc, mpView ) : 0;
326                 }
327                 else if (eFamily == SD_STYLE_FAMILY_PSEUDO)
328                 {
329                     String aName(pStyleSheet->GetName());
330                     sal_uInt16 nDlgId = 0;
331 
332                     if (aName == String(SdResId(STR_PSEUDOSHEET_TITLE)))
333                     {
334                         nDlgId = TAB_PRES_LAYOUT_TEMPLATE;
335                         ePO    = PO_TITLE;
336                     }
337                     else if (aName == String(SdResId(STR_PSEUDOSHEET_SUBTITLE)))
338                     {
339                         nDlgId = TAB_PRES_LAYOUT_TEMPLATE;
340                         ePO    = PO_SUBTITLE;
341                     }
342                     else if (aName ==
343                              String(SdResId(STR_PSEUDOSHEET_BACKGROUND)))
344                     {
345                         nDlgId = TAB_PRES_LAYOUT_TEMPLATE_BACKGROUND;
346                         ePO    = PO_BACKGROUND;
347                     }
348                     else if (aName ==
349                              String(SdResId(STR_PSEUDOSHEET_BACKGROUNDOBJECTS)))
350                     {
351                         nDlgId = TAB_PRES_LAYOUT_TEMPLATE;
352                         ePO    = PO_BACKGROUNDOBJECTS;
353                     }
354                     else if (aName ==
355                              String(SdResId(STR_PSEUDOSHEET_NOTES)))
356                     {
357                         nDlgId = TAB_PRES_LAYOUT_TEMPLATE;
358                         ePO    = PO_NOTES;
359                     }
360                     else if(aName.Search(String(SdResId(STR_PSEUDOSHEET_OUTLINE))) !=
361                             STRING_NOTFOUND)
362                     {
363                         nDlgId = TAB_PRES_LAYOUT_TEMPLATE;
364 
365                         String aOutlineStr((SdResId(STR_PSEUDOSHEET_OUTLINE)));
366                         // die Nummer ermitteln; ein Leerzeichen zwischen
367                         // Name und Nummer beachten
368                         String aNumStr(aName.Copy(aOutlineStr.Len() + 1));
369                         sal_uInt16 nLevel = (sal_uInt16)aNumStr.ToInt32();
370                         switch (nLevel)
371                         {
372                             case 1: ePO = PO_OUTLINE_1; break;
373                             case 2: ePO = PO_OUTLINE_2; break;
374                             case 3: ePO = PO_OUTLINE_3; break;
375                             case 4: ePO = PO_OUTLINE_4; break;
376                             case 5: ePO = PO_OUTLINE_5; break;
377                             case 6: ePO = PO_OUTLINE_6; break;
378                             case 7: ePO = PO_OUTLINE_7; break;
379                             case 8: ePO = PO_OUTLINE_8; break;
380                             case 9: ePO = PO_OUTLINE_9; break;
381                         }
382                     }
383                     else
384                     {
385                         DBG_ERROR("Vorlage aus aelterer anderssprachiger Version");
386                         bOldDocInOtherLanguage = sal_True;
387                     }
388 
389                     if( !bOldDocInOtherLanguage )
390                     {
391                         pPresDlg = pFact ? pFact->CreateSdPresLayoutTemplateDlg( mpDocSh, NULL, SdResId(nDlgId), *pStyleSheet, ePO, pSSPool ) : 0;
392                     }
393                 }
394                 else if (eFamily == SD_STYLE_FAMILY_CELL)
395                 {
396                 }
397 
398                 sal_uInt16 nResult = RET_CANCEL;
399                 const SfxItemSet* pOutSet = NULL;
400                 if (pStdDlg)
401                 {
402                     nResult = pStdDlg->Execute();
403                     pOutSet = pStdDlg->GetOutputItemSet();
404                 }
405                 else if( pPresDlg )
406                 {
407                     nResult = pPresDlg->Execute();
408                     pOutSet = pPresDlg->GetOutputItemSet();
409                 }
410 
411                 switch( nResult )
412                 {
413                     case RET_OK:
414                     {
415                         nRetMask = pStyleSheet->GetMask();
416 
417                         if (eFamily == SD_STYLE_FAMILY_PSEUDO)
418                         {
419                             SfxItemSet aTempSet(*pOutSet);
420                             ((SdStyleSheet*)pStyleSheet)->AdjustToFontHeight(aTempSet);
421 
422                             // Sonderbehandlung: die INVALIDS auf NULL-Pointer
423                             // zurueckgesetzen (sonst landen INVALIDs oder
424                             // Pointer auf die DefaultItems in der Vorlage;
425                             // beides wuerde die Attribut-Vererbung unterbinden)
426                             aTempSet.ClearInvalidItems();
427 
428                             // EE_PARA_NUMBULLET item is only valid in first outline template
429                             if( (ePO >= PO_OUTLINE_2) && (ePO <= PO_OUTLINE_9) )
430                             {
431                                 if (aTempSet.GetItemState(EE_PARA_NUMBULLET) == SFX_ITEM_SET)
432                                 {
433                                     SvxNumRule aRule(*((SvxNumBulletItem*)aTempSet.GetItem(EE_PARA_NUMBULLET))->GetNumRule());
434 
435                                     String sStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE)));
436                                     sStyleName.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " 1" ) );
437                                     SfxStyleSheetBase* pFirstStyleSheet = pSSPool->Find( sStyleName, SD_STYLE_FAMILY_PSEUDO);
438 
439                                     if(pFirstStyleSheet)
440                                     {
441                                         pFirstStyleSheet->GetItemSet().Put( SvxNumBulletItem( aRule, EE_PARA_NUMBULLET ));
442                                         SdStyleSheet* pRealSheet = ((SdStyleSheet*)pFirstStyleSheet)->GetRealStyleSheet();
443                                         pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
444                                     }
445 
446                                     aTempSet.ClearItem( EE_PARA_NUMBULLET );
447                                 }
448                             }
449 
450                             String sStyleName((SdResId(STR_PSEUDOSHEET_OUTLINE)));
451                             sStyleName.Append( sal_Unicode( ' ' ));
452 
453                             pStyleSheet->GetItemSet().Put(aTempSet);
454 
455                             SdStyleSheet* pRealSheet =((SdStyleSheet*)pStyleSheet)->GetRealStyleSheet();
456                             pRealSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
457 
458                             if( (ePO >= PO_OUTLINE_1) && (ePO <= PO_OUTLINE_8) )
459                             {
460                                 for( sal_uInt16 n = (sal_uInt16)(ePO - PO_OUTLINE_1 + 2); n < 10; n++ )
461                                 {
462                                     String aName( sStyleName );
463                                     aName.Append( String::CreateFromInt32( (sal_Int32) n ));
464 
465                                     SfxStyleSheetBase* pSheet = pSSPool->Find( aName, SD_STYLE_FAMILY_PSEUDO);
466 
467                                     if(pSheet)
468                                     {
469                                         SdStyleSheet* pRealStyleSheet = ((SdStyleSheet*)pSheet)->GetRealStyleSheet();
470                                         pRealStyleSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
471                                     }
472                                 }
473                             }
474                         }
475 
476                         SfxItemSet& rAttr = pStyleSheet->GetItemSet();
477 
478                         sdr::properties::CleanupFillProperties( rAttr );
479 
480                         // check for unique names of named items for xml
481                         if( rAttr.GetItemState( XATTR_FILLBITMAP ) == SFX_ITEM_SET )
482                         {
483                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLBITMAP );
484                             SfxPoolItem* pNewItem = ((XFillBitmapItem*)pOldItem)->checkForUniqueItem( mpDoc );
485                             if( pOldItem != pNewItem )
486                             {
487                                 rAttr.Put( *pNewItem );
488                                 delete pNewItem;
489                             }
490                         }
491                         if( rAttr.GetItemState( XATTR_LINEDASH ) == SFX_ITEM_SET )
492                         {
493                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_LINEDASH );
494                             SfxPoolItem* pNewItem = ((XLineDashItem*)pOldItem)->checkForUniqueItem( mpDoc );
495                             if( pOldItem != pNewItem )
496                             {
497                                 rAttr.Put( *pNewItem );
498                                 delete pNewItem;
499                             }
500                         }
501                         if( rAttr.GetItemState( XATTR_LINESTART ) == SFX_ITEM_SET )
502                         {
503                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_LINESTART );
504                             SfxPoolItem* pNewItem = ((XLineStartItem*)pOldItem)->checkForUniqueItem( mpDoc );
505                             if( pOldItem != pNewItem )
506                             {
507                                 rAttr.Put( *pNewItem );
508                                 delete pNewItem;
509                             }
510                         }
511                         if( rAttr.GetItemState( XATTR_LINEEND ) == SFX_ITEM_SET )
512                         {
513                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_LINEEND );
514                             SfxPoolItem* pNewItem = ((XLineEndItem*)pOldItem)->checkForUniqueItem( mpDoc );
515                             if( pOldItem != pNewItem )
516                             {
517                                 rAttr.Put( *pNewItem );
518                                 delete pNewItem;
519                             }
520                         }
521                         if( rAttr.GetItemState( XATTR_FILLGRADIENT ) == SFX_ITEM_SET )
522                         {
523                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLGRADIENT );
524                             SfxPoolItem* pNewItem = ((XFillGradientItem*)pOldItem)->checkForUniqueItem( mpDoc );
525                             if( pOldItem != pNewItem )
526                             {
527                                 rAttr.Put( *pNewItem );
528                                 delete pNewItem;
529                             }
530                         }
531                         if( rAttr.GetItemState( XATTR_FILLFLOATTRANSPARENCE ) == SFX_ITEM_SET )
532                         {
533                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLFLOATTRANSPARENCE );
534                             SfxPoolItem* pNewItem = ((XFillFloatTransparenceItem*)pOldItem)->checkForUniqueItem( mpDoc );
535                             if( pOldItem != pNewItem )
536                             {
537                                 rAttr.Put( *pNewItem );
538                                 delete pNewItem;
539                             }
540                         }
541                         if( rAttr.GetItemState( XATTR_FILLHATCH ) == SFX_ITEM_SET )
542                         {
543                             const SfxPoolItem* pOldItem = rAttr.GetItem( XATTR_FILLHATCH );
544                             SfxPoolItem* pNewItem = ((XFillHatchItem*)pOldItem)->checkForUniqueItem( mpDoc );
545                             if( pOldItem != pNewItem )
546                             {
547                                 rAttr.Put( *pNewItem );
548                                 delete pNewItem;
549                             }
550                         }
551 
552                         ( (SfxStyleSheet*) pStyleSheet )->Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) );
553 
554                         DrawViewShell* pDrawViewShell = dynamic_cast< DrawViewShell* >( mpViewShell );
555                         if( pDrawViewShell )
556                         {
557                             PageKind ePageKind = pDrawViewShell->GetPageKind();
558                             if( ePageKind == PK_NOTES || ePageKind == PK_HANDOUT )
559                             {
560                                 SdPage* pPage = mpViewShell->GetActualPage();
561 
562                                 if(pDrawViewShell->GetEditMode() == EM_MASTERPAGE)
563                                 {
564                                     pPage = static_cast<SdPage*>((&(pPage->TRG_GetMasterPage())));
565                                 }
566 
567                                 if( pPage )
568                                 {
569                                     SdrObjListIter aIter( *pPage );
570                                     while( aIter.IsMore() )
571                                     {
572                                         SdrObject* pObj = aIter.Next();
573                                         if( pObj->ISA(SdrPageObj) )
574                                         {
575                                             // repaint only
576                                             pObj->ActionChanged();
577                                             // pObj->SendRepaintBroadcast();
578                                         }
579                                     }
580                                 }
581                             }
582                         }
583 
584                         if( mpDoc->GetOnlineSpell() )
585                         {
586                             const SfxPoolItem* pTempItem;
587                             if( SFX_ITEM_SET == rAttr.GetItemState(EE_CHAR_LANGUAGE, sal_False, &pTempItem ) ||
588                                 SFX_ITEM_SET == rAttr.GetItemState(EE_CHAR_LANGUAGE_CJK, sal_False, &pTempItem ) ||
589                                 SFX_ITEM_SET == rAttr.GetItemState(EE_CHAR_LANGUAGE_CTL, sal_False, &pTempItem ) )
590                             {
591                                 mpDoc->StopOnlineSpelling();
592                                 mpDoc->StartOnlineSpelling();
593                             }
594                         }
595 
596                         mpDoc->SetChanged(sal_True);
597                     }
598                     break;
599 
600                     default:
601                     {
602                         if( nSId == SID_STYLE_NEW )
603                             pSSPool->Remove( pStyleSheet );
604                         delete pStdDlg;
605                         delete pPresDlg;
606                     }
607                     return; // Abbruch
608                 }
609                 delete pStdDlg;
610                 delete pPresDlg;
611             }
612         }
613         break;
614 
615         case SID_STYLE_NEW_BY_EXAMPLE:
616         {
617             if( pStyleSheet )
618             {
619                 nRetMask = pStyleSheet->GetMask();
620                 SfxItemSet aCoreSet( mpDoc->GetPool() );
621                 mpView->GetAttributes( aCoreSet, sal_True );
622 
623                 // wenn das Objekt eine Vorlage hatte, wird diese Parent
624                 // der neuen Vorlage
625                 SfxStyleSheet* pOldStyle = mpView->GetStyleSheet();
626 
627                 // Wenn pOldStyle == pStyleSheet -> Rekursion
628                 if( pOldStyle != pStyleSheet )
629                 {
630                     if (pOldStyle)
631                     {
632                         pStyleSheet->SetParent(pOldStyle->GetName());
633                     }
634 
635                     SfxItemSet* pStyleSet = &pStyleSheet->GetItemSet();
636                     pStyleSet->Put(aCoreSet);
637 
638                     // Vorlage anwenden (Aber nicht, wenn gerade ein Text
639                     // editiert wird, denn dazu muesste die Edit Engine
640                     // Vorlagen auf Zeichenebene beherrschen.)
641                     if (!mpView->GetTextEditObject())
642                     {
643                         mpView->SetStyleSheet( (SfxStyleSheet*) pStyleSheet);
644                     }
645 
646                     ( (SfxStyleSheet*) pStyleSheet )->Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) );
647                     mpDoc->SetChanged(sal_True);
648 
649                     mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_FAMILY2 );
650                 }
651             }
652         }
653         break;
654 
655         case SID_STYLE_UPDATE_BY_EXAMPLE:
656         {
657             if ((mpView->AreObjectsMarked() && mpView->GetMarkedObjectList().GetMarkCount() == 1) ||
658                  mpView->ISA(OutlineView))
659             {
660                 pStyleSheet = mpView->GetStyleSheet();
661 
662                 if( pStyleSheet )
663                 {
664                     nRetMask = pStyleSheet->GetMask();
665                     SfxItemSet aCoreSet( mpDoc->GetPool() );
666                     mpView->GetAttributes( aCoreSet );
667 
668                     SfxItemSet* pStyleSet = &pStyleSheet->GetItemSet();
669                     pStyleSet->Put( aCoreSet );
670 
671                     mpView->SetStyleSheet( (SfxStyleSheet*) pStyleSheet);
672 
673                     ( (SfxStyleSheet*) pStyleSheet )->Broadcast( SfxSimpleHint( SFX_HINT_DATACHANGED ) );
674                     mpDoc->SetChanged(sal_True);
675                     mpViewShell->GetViewFrame()->GetBindings().Invalidate( SID_STYLE_FAMILY2 );
676                 }
677             }
678         }
679         break;
680 
681     }
682     if( nRetMask != 0xffff )
683         rReq.SetReturnValue( SfxUInt16Item( nSId, nRetMask ) );
684 }
685 
Activate()686 void FuTemplate::Activate()
687 {
688 }
689 
Deactivate()690 void FuTemplate::Deactivate()
691 {
692 }
693 
694 } // end of namespace sd
695