xref: /aoo42x/main/sfx2/source/dialog/mgetempl.cxx (revision d119d52d)
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_sfx2.hxx"
26 
27 // include ---------------------------------------------------------------
28 
29 #ifndef _MSGBOX_HXX //autogen
30 #include <vcl/msgbox.hxx>
31 #endif
32 #include <vcl/field.hxx>
33 #include <svl/eitem.hxx>
34 #include <svl/intitem.hxx>
35 #include <svl/style.hxx>
36 #ifndef GCC
37 #endif
38 
39 #include <sfx2/styfitem.hxx>
40 #include <sfx2/styledlg.hxx>
41 #include <sfx2/app.hxx>
42 #include <sfx2/mgetempl.hxx>
43 #include <sfx2/objsh.hxx>
44 #include "sfxtypes.hxx"
45 #include "sfx2/sfxresid.hxx"
46 #include <sfx2/module.hxx>
47 
48 #include <sfx2/sfx.hrc>
49 #include "dialog.hrc"
50 #include "mgetempl.hrc"
51 
52 #ifndef _SFX_STYLE_HRC
53 #include <svl/style.hrc>
54 #endif
55 
56 // SfxManageStyleSheetPage -----------------------------------------------
57 
58 SfxManageStyleSheetPage::SfxManageStyleSheetPage( Window* pParent, const SfxItemSet& rAttrSet ) :
59 
60 	SfxTabPage( pParent, SfxResId( TP_MANAGE_STYLES ), rAttrSet ),
61 
62 	aNameFt		( this, SfxResId( FT_NAME ) ),
63 	aNameEd		( this, SfxResId( ED_NAME ) ),
64 	aNameMLE	( this, SfxResId( MLE_NAME ) ),
65 	aAutoCB     ( this, SfxResId( CB_AUTO ) ),
66 
67 	aFollowFt	( this, SfxResId( FT_NEXT ) ),
68 	aFollowLb	( this, SfxResId( LB_NEXT ) ),
69 
70 	aBaseFt		( this, SfxResId( FT_BASE ) ),
71 	aBaseLb		( this, SfxResId( LB_BASE ) ),
72 
73 	aFilterFt	( this, SfxResId( FT_REGION ) ),
74 	aFilterLb	( this, SfxResId( LB_REGION ) ),
75 
76     aDescGb		( this, SfxResId( GB_DESC ) ),
77 	aDescFt		( this, SfxResId( FT_DESC ) ),
78 	aDescED		( this, SfxResId( ED_DESC ) ),
79 
80 	pStyle( &( (SfxStyleDialog*)pParent->GetParent() )->GetStyleSheet() ),
81 
82 	pItem		( 0 ),
83 	bModified	( sal_False ),
84 	aName		( pStyle->GetName() ),
85 	aFollow		( pStyle->GetFollow() ),
86 	aParent		( pStyle->GetParent() ),
87 	nFlags		( pStyle->GetMask() )
88 
89 /*  [Beschreibung]
90 
91 	Konstruktor; initialisiert die ListBoxen mit den Vorlagen
92 
93 */
94 
95 {
96 	FreeResource();
97 
98 	if ( IsBackground() )
99 		aDescED.SetBackground( GetBackground() );
100 	FixedInfo* pInfo = new FixedInfo( this );
101 	aDescED.SetFont( pInfo->GetFont() );
102 	delete pInfo;
103 
104 	aDescED.Hide();
105 	aDescFt.Show();
106 
107 	// diese Page braucht ExchangeSupport
108 	SetExchangeSupport();
109 
110     ResMgr* pResMgr = SFX_APP()->GetModule_Impl()->GetResMgr();
111 	DBG_ASSERT( pResMgr, "kein ResMgr am Modul" );
112 	pFamilies = new SfxStyleFamilies( ResId( DLG_STYLE_DESIGNER, *pResMgr ) );
113 
114 	SfxStyleSheetBasePool* pPool = 0;
115 	SfxObjectShell* pDocShell = SfxObjectShell::Current();
116 
117 	if ( pDocShell )
118 		pPool = pDocShell->GetStyleSheetPool();
119 	DBG_ASSERT( pPool, "kein Pool oder keine DocShell" );
120 
121 	if ( pPool )
122 	{
123 		pPool->SetSearchMask( pStyle->GetFamily() );
124 		pPool->First();     // fuer SW - interne Liste updaten
125 	}
126 
127 	if ( !pStyle->GetName().Len() && pPool )
128 	{
129 		// NullString als Name -> Name generieren
130 		String aNoName( SfxResId( STR_NONAME ) );
131 		sal_uInt16 nNo = 1;
132 		String aNo( aNoName );
133 		aNoName += String::CreateFromInt32( nNo );
134 		while ( pPool->Find( aNoName ) )
135 		{
136 			++nNo;
137 			aNoName = aNo;
138 			aNoName += String::CreateFromInt32( nNo );
139 		}
140 		pStyle->SetName( aNoName );
141 		aName = aNoName;
142 		aFollow = pStyle->GetFollow();
143 		aParent = pStyle->GetParent();
144 	}
145 	aNameEd.SetText(pStyle->GetName());
146 
147 	// Set the field read-only if it is NOT an user-defined style
148 	// but allow selecting and copying
149 	if ( !pStyle->IsUserDefined() ) {
150 		aNameEd.SetReadOnly();
151 		aNameEd.Hide();
152 
153     	aNameMLE.SetControlBackground( GetSettings().GetStyleSettings().GetDialogColor() );
154 		aNameMLE.SetText( pStyle->GetName() );
155 		aNameMLE.EnableCursor( sal_False );
156 		aNameMLE.Show();
157 	}
158 
159 	if ( pStyle->HasFollowSupport() && pPool )
160 	{
161 		SfxStyleSheetBase* pPoolStyle = pPool->First();
162 
163 		while ( pPoolStyle )
164 		{
165 			aFollowLb.InsertEntry( pPoolStyle->GetName() );
166 			pPoolStyle = pPool->Next();
167 		}
168 
169 		// eine neue Vorlage ist noch nicht im Pool
170 		if ( LISTBOX_ENTRY_NOTFOUND == aFollowLb.GetEntryPos( pStyle->GetName() ) )
171 			aFollowLb.InsertEntry( pStyle->GetName() );
172 	}
173 	else
174 	{
175 		aFollowFt.Hide();
176 		aFollowLb.Hide();
177 
178 		aFilterFt.SetPosPixel( aBaseFt.GetPosPixel() );
179 		aFilterLb.SetPosPixel( aBaseLb.GetPosPixel() );
180 
181 		aBaseFt.SetPosPixel( aFollowFt.GetPosPixel() );
182 		aBaseLb.SetPosPixel( aFollowLb.GetPosPixel() );
183 	}
184 
185 	if ( pStyle->HasParentSupport() && pPool )
186 	{
187 		if ( pStyle->HasClearParentSupport() )
188 			// die Basisvorlage darf auf NULL gesetzt werden
189 			aBaseLb.InsertEntry( String( SfxResId( STR_NONE ) ) );
190 
191 		SfxStyleSheetBase* pPoolStyle = pPool->First();
192 
193 		while ( pPoolStyle )
194 		{
195 			const String aStr( pPoolStyle->GetName() );
196 			// eigener Namen nicht als Basisvorlage
197 			if ( aStr != aName )
198 				aBaseLb.InsertEntry( aStr );
199 			pPoolStyle = pPool->Next();
200 		}
201 	}
202 	else
203 	{
204 		aBaseFt.Disable();
205 		aBaseLb.Disable();
206 	}
207 	sal_uInt16 nCount = pFamilies->Count();
208 
209 	sal_uInt16 i;
210 	for ( i = 0; i < nCount; ++i )
211 	{
212 		pItem = pFamilies->GetObject(i);
213 
214 		if ( pItem->GetFamily() == pStyle->GetFamily() )
215 			break;
216 	}
217 
218 	sal_uInt16 nStyleFilterIdx = 0xffff;
219 
220 	if ( i < nCount )
221 	{
222 		// Filterflags
223 		const SfxStyleFilter& rList = pItem->GetFilterList();
224 		nCount = (sal_uInt16)rList.Count();
225 		sal_uInt16 nIdx = 0;
226 		sal_uInt16 nMask = pStyle->GetMask() & ~SFXSTYLEBIT_USERDEF;
227 
228 		if ( !nMask )	// Benutzervorlage?
229 			nMask = pStyle->GetMask();
230 
231 		for ( i = 0; i < nCount; ++i )
232 		{
233 			SfxFilterTupel* pTupel = rList.GetObject(i);
234 
235 			if ( pTupel->nFlags != SFXSTYLEBIT_AUTO 	&&
236 				 pTupel->nFlags != SFXSTYLEBIT_USED		&&
237 //				 pTupel->nFlags != SFXSTYLEBIT_USERDEF	&&
238 				 pTupel->nFlags != SFXSTYLEBIT_ALL )
239 			{
240 				aFilterLb.InsertEntry( pTupel->aName, nIdx );
241 				aFilterLb.SetEntryData(nIdx, (void*)(long)i);
242 
243 				if ( ( pTupel->nFlags & nMask ) == nMask )
244 					nStyleFilterIdx = nIdx;
245 				++nIdx;
246 			}
247 		}
248 
249 		if ( nStyleFilterIdx != 0xFFFF )
250 			aFilterLb.SelectEntryPos( nStyleFilterIdx );
251 	}
252 
253 	if ( !aFilterLb.GetEntryCount() || !pStyle->IsUserDefined() )
254 	{
255 		pItem = 0;
256 		aFilterFt.Disable();
257 		aFilterLb.Disable();
258 	}
259 	else
260 		aFilterLb.SaveValue();
261 	SetDescriptionText_Impl();
262 
263 	if ( aFollowLb.IsEnabled() || aBaseLb.IsEnabled() )
264 	{
265 		aNameEd.SetGetFocusHdl(
266 			LINK( this, SfxManageStyleSheetPage, GetFocusHdl ) );
267 		aNameEd.SetLoseFocusHdl(
268 			LINK( this, SfxManageStyleSheetPage, LoseFocusHdl ) );
269 	}
270 	// ist es ein Style mit automatischem Update? (nur SW)
271 	if(SFX_ITEM_SET == rAttrSet.GetItemState(SID_ATTR_AUTO_STYLE_UPDATE))
272 	{
273 		Size aSize = aNameEd.GetSizePixel();
274 		aSize.Width() /= 2;
275 		aNameEd.SetSizePixel(aSize);
276 		aAutoCB.Show();
277 	}
278 }
279 
280 //-------------------------------------------------------------------------
281 
282 SfxManageStyleSheetPage::~SfxManageStyleSheetPage()
283 
284 /*  [Beschreibung]
285 
286 	Destruktor; Freigabe der Daten
287 
288 */
289 
290 {
291     aNameEd.SetGetFocusHdl( Link() );
292     aNameEd.SetLoseFocusHdl( Link() );
293 	delete pFamilies;
294 	pItem = 0;
295 	pStyle = 0;
296 
297 }
298 
299 //-------------------------------------------------------------------------
300 
301 void SfxManageStyleSheetPage::UpdateName_Impl( ListBox* pBox,
302 											   const String& rNew )
303 
304 /*  [Beschreibung]
305 
306 	Nach der "Anderung eines Vorlagennamens die ListBox pBox
307 	aktualisieren
308 
309 	[Parameter]
310 
311 	ListBox* pBox			ListBox, deren Eintr"age aktualisiert
312 							werden sollen
313 	const String& rNew		der neue Name
314 
315 */
316 
317 {
318 	if ( pBox->IsEnabled() )
319 	{
320 		// ist der aktuelle Eintrag, dessen Namen modifizieren wurde
321 		const sal_Bool bSelect = pBox->GetSelectEntry() == aBuf;
322 		pBox->RemoveEntry( aBuf );
323 		pBox->InsertEntry( rNew );
324 
325 		if ( bSelect )
326 			pBox->SelectEntry( rNew );
327 	}
328 }
329 
330 //-------------------------------------------------------------------------
331 
332 void SfxManageStyleSheetPage::SetDescriptionText_Impl()
333 
334 /*  [Beschreibung]
335 
336 	Attributbeschreibung setzen. daf"ur die eingestellte Metrik besorgen.
337 */
338 
339 {
340 	SfxMapUnit eUnit = SFX_MAPUNIT_CM;
341 //    FieldUnit eFieldUnit = pSfxApp->GetOptions().GetMetric();
342     FieldUnit eFieldUnit( FUNIT_CM );
343     SfxModule* pModule = SfxModule::GetActiveModule();
344 	if ( pModule )
345 	{
346 		const SfxPoolItem* pPoolItem = pModule->GetItem( SID_ATTR_METRIC );
347 		if ( pPoolItem )
348 			eFieldUnit = (FieldUnit)( (SfxUInt16Item*)pPoolItem )->GetValue();
349 	}
350 
351 	switch ( eFieldUnit )
352 	{
353 		case FUNIT_MM:		eUnit = SFX_MAPUNIT_MM; break;
354 
355 		case FUNIT_CM:
356 		case FUNIT_M:
357 		case FUNIT_KM:		eUnit = SFX_MAPUNIT_CM; break;
358 
359 		case FUNIT_POINT:
360 		case FUNIT_PICA:	eUnit = SFX_MAPUNIT_POINT; break;
361 
362 		case FUNIT_INCH:
363 		case FUNIT_FOOT:
364 		case FUNIT_MILE:	eUnit = SFX_MAPUNIT_INCH; break;
365 
366 		default:
367 			DBG_ERRORFILE( "not supported fieldunit" );
368 	}
369 	aDescFt.SetText( pStyle->GetDescription( eUnit ) );
370 }
371 
372 //-------------------------------------------------------------------------
373 
374 IMPL_LINK_INLINE_START( SfxManageStyleSheetPage, GetFocusHdl, Edit *, pEdit )
375 
376 /*  [Beschreibung]
377 
378 	StarView Handler; GetFocus-Handler des Edits mit dem Vorlagennamen.
379 
380 */
381 
382 {
383 	aBuf = pEdit->GetText().EraseLeadingChars();
384 	return 0;
385 }
386 IMPL_LINK_INLINE_END( SfxManageStyleSheetPage, GetFocusHdl, Edit *, pEdit )
387 
388 //-------------------------------------------------------------------------
389 
390 IMPL_LINK_INLINE_START( SfxManageStyleSheetPage, LoseFocusHdl, Edit *, pEdit )
391 
392 /*  [Beschreibung]
393 
394 	StarView Handler; LoseFocus-Handler des Edits mit dem Vorlagennamen.
395 	Dieser aktualisiert ggf. die Listbox mit den Folgevorlagen.
396 	In der Listbox mit den Basisvorlagen ist die aktuelle Vorlage
397 	selbst nicht enthalten.
398 
399 */
400 
401 {
402 	const String aStr( pEdit->GetText().EraseLeadingChars() );
403 	pEdit->SetText( aStr );
404 	// ggf. Listbox der Basisvorlagen aktualisieren
405 	if ( aStr != aBuf )
406 		UpdateName_Impl( &aFollowLb, aStr );
407 	return 0;
408 }
409 IMPL_LINK_INLINE_END( SfxManageStyleSheetPage, LoseFocusHdl, Edit *, pEdit )
410 
411 //-------------------------------------------------------------------------
412 
413 sal_Bool SfxManageStyleSheetPage::FillItemSet( SfxItemSet& rSet )
414 
415 /*  [Beschreibung]
416 
417 
418 	Handler f"ur das Setzen der (modifizierten) Daten. Wird aus
419 	dem Ok des SfxTabDialog gerufen.
420 
421 	[Parameter]
422 
423 	SfxItemSet &rAttrSet		das Set, das die Daten entgegennimmt.
424 
425 
426 	[R"uckgabewert]
427 
428 	sal_Bool						sal_True:  es hat eine "Anderung der Daten
429 									   stattgefunden
430 								    sal_False: es hat keine "Anderung der Daten
431 									   stattgefunden
432 
433 	[Querverweise]
434 
435 	<class SfxTabDialog>
436 
437 */
438 
439 {
440 	const sal_uInt16 nFilterIdx = aFilterLb.GetSelectEntryPos();
441 
442 	// Filter setzen
443 
444 	if ( LISTBOX_ENTRY_NOTFOUND  != nFilterIdx 		&&
445 		 nFilterIdx != aFilterLb.GetSavedValue() 	&&
446 		 aFilterLb.IsEnabled() )
447 	{
448 		bModified = sal_True;
449 		DBG_ASSERT( pItem, "kein Item" );
450 		// geht nur bei Benutzervorlagen
451 #if OSL_DEBUG_LEVEL > 1
452 		sal_uInt16 nIdx = (sal_uInt16)(long)aFilterLb.GetEntryData( nFilterIdx );
453 		SfxFilterTupel* p;
454         p = pItem->GetFilterList().GetObject( nIdx );
455 #endif
456 		sal_uInt16 nMask = pItem->GetFilterList().GetObject(
457 			(sal_uInt16)(long)aFilterLb.GetEntryData( nFilterIdx ) )->nFlags |
458 			SFXSTYLEBIT_USERDEF;
459 		pStyle->SetMask( nMask );
460 	}
461 	if(aAutoCB.IsVisible() &&
462 		aAutoCB.IsChecked() != aAutoCB.GetSavedValue())
463 	{
464 		rSet.Put(SfxBoolItem(SID_ATTR_AUTO_STYLE_UPDATE, aAutoCB.IsChecked()));
465 	}
466 
467 	return bModified;
468 }
469 
470 //-------------------------------------------------------------------------
471 
472 void SfxManageStyleSheetPage::Reset( const SfxItemSet& /*rAttrSet*/ )
473 
474 /*  [Beschreibung]
475 
476 
477 	Handler f"ur das Initialisieren der Seite mit den initialen Daten.
478 
479 	[Parameter]
480 
481 	const SfxItemSet &rAttrSet		das Set mit den Daten
482 
483 
484 	[Querverweise]
485 
486 	<class SfxTabDialog>
487 
488 */
489 
490 {
491 	bModified = sal_False;
492 	String sCmp( pStyle->GetName() );
493 
494 	if ( sCmp != aName )
495 		pStyle->SetName( aName );
496 	aNameEd.SetText( aName );
497 
498 	if ( aFollowLb.IsEnabled() )
499 	{
500 		sCmp = pStyle->GetFollow();
501 
502 		if ( sCmp != aFollow )
503 			pStyle->SetFollow( aFollow );
504 
505 		if ( !aFollow.Len() )
506 			aFollowLb.SelectEntry( aName );
507 		else
508 			aFollowLb.SelectEntry( aFollow );
509 	}
510 
511 	if ( aBaseLb.IsEnabled() )
512 	{
513 		sCmp = pStyle->GetParent();
514 
515 		if ( sCmp != aParent )
516 			pStyle->SetParent( aParent );
517 
518 		if ( !aParent.Len() )
519 			aBaseLb.SelectEntry( String( SfxResId( STR_NONE ) ) );
520 		else
521 			aBaseLb.SelectEntry( aParent );
522 
523 		if ( String( SfxResId( STR_STANDARD ) ) == aName )
524 		{
525 			// die Standardvorlage kann nicht verkn"upft werden
526 			aBaseFt.Disable();
527 			aBaseLb.Disable();
528 		}
529 	}
530 
531 	if ( aFilterLb.IsEnabled() )
532 	{
533 		sal_uInt16 nCmp = pStyle->GetMask();
534 
535 		if ( nCmp != nFlags )
536 			pStyle->SetMask( nFlags );
537 		aFilterLb.SelectEntryPos( aFilterLb.GetSavedValue() );
538 	}
539 }
540 
541 //-------------------------------------------------------------------------
542 
543 SfxTabPage* SfxManageStyleSheetPage::Create( Window* pParent,
544 											 const SfxItemSet &rAttrSet )
545 
546 /*  [Beschreibung]
547 
548 
549 	Factory f"ur das Erzeugen der Seite
550 
551 	[Querverweise]
552 
553 	<class SfxTabDialog>
554 
555 */
556 
557 {
558 	return new SfxManageStyleSheetPage( pParent, rAttrSet );
559 }
560 
561 //-------------------------------------------------------------------------
562 
563 void SfxManageStyleSheetPage::ActivatePage( const SfxItemSet& rSet)
564 
565 /*  [Beschreibung]
566 
567 	ActivatePage- Handler des SfxTabDialog; wird f"ur die Aktualisierung
568 	des beschreibenden Textes verwendet, da sich dieser durch "Anderungen
569 	der Daten anderer Seiten ge"andert haben kann.
570 
571 	[Parameter]
572 
573 	const SfxItemSet&		das Set f"ur den Datenaustausch; wird
574 							hier nicht verwendet.
575 
576 	[Querverweise]
577 
578 	<SfxTabDialog::ActivatePage(const SfxItemSet &)>
579 
580 */
581 
582 {
583 	SetDescriptionText_Impl();
584 
585 	// ist es ein Style mit automatischem Update? (nur SW)
586 	const SfxPoolItem* pPoolItem;
587 
588 	if ( SFX_ITEM_SET ==
589 		 rSet.GetItemState( SID_ATTR_AUTO_STYLE_UPDATE, sal_False, &pPoolItem ) )
590 		aAutoCB.Check( ( (const SfxBoolItem*)pPoolItem )->GetValue() );
591 	aAutoCB.SaveValue();
592 }
593 
594 //-------------------------------------------------------------------------
595 
596 int SfxManageStyleSheetPage::DeactivatePage( SfxItemSet* pItemSet )
597 
598 /*  [Beschreibung]
599 
600 	DeactivatePage- Handler des SfxTabDialog; die Daten werden
601 	an der Vorlage eingestellt, damit die richtige Vererbung
602 	f"ur die anderen Seiten des Dialoges vorliegt.
603 	Im Fehlerfall wird das Verlassen der Seite unterbunden.
604 
605 	[Parameter]
606 
607 	SfxItemSet*			das Set f"ur den Datenaustausch; wird hier nicht verwendet.
608 
609 	[Querverweise]
610 
611 	<SfxTabDialog::DeactivatePage(SfxItemSet*)>
612 
613 */
614 
615 {
616 	int nRet = SfxTabPage::LEAVE_PAGE;
617 
618 	if ( aNameEd.IsModified() )
619 	{
620 		// bei <Enter> wird kein LoseFocus() durch StarView ausgel"ost
621 		if ( aNameEd.HasFocus() )
622 			LoseFocusHdl( &aNameEd );
623 
624 		if ( !pStyle->SetName( aNameEd.GetText().EraseLeadingChars() ) )
625 		{
626 			InfoBox aBox( this, SfxResId( MSG_TABPAGE_INVALIDNAME ) );
627 			aBox.Execute();
628 			aNameEd.GrabFocus();
629 			aNameEd.SetSelection( Selection( SELECTION_MIN, SELECTION_MAX ) );
630 			return SfxTabPage::KEEP_PAGE;
631 		}
632 		bModified = sal_True;
633 	}
634 
635 	if ( pStyle->HasFollowSupport() && aFollowLb.IsEnabled() )
636 	{
637 		const String aFollowEntry( aFollowLb.GetSelectEntry() );
638 
639 		if ( pStyle->GetFollow() != aFollowEntry )
640 		{
641 			if ( !pStyle->SetFollow( aFollowEntry ) )
642 			{
643 				InfoBox aBox( this, SfxResId( MSG_TABPAGE_INVALIDSTYLE ) );
644 				aBox.Execute();
645 				aFollowLb.GrabFocus();
646 				return SfxTabPage::KEEP_PAGE;
647 			}
648 			bModified = sal_True;
649 		}
650 	}
651 
652 	if ( aBaseLb.IsEnabled() )
653 	{
654 		String aParentEntry( aBaseLb.GetSelectEntry() );
655 
656 		if ( String( SfxResId( STR_NONE ) ) == aParentEntry || aParentEntry == pStyle->GetName() )
657 			aParentEntry.Erase();
658 
659 		if ( pStyle->GetParent() != aParentEntry )
660 		{
661 			if ( !pStyle->SetParent( aParentEntry ) )
662 			{
663 				InfoBox aBox( this, SfxResId( MSG_TABPAGE_INVALIDPARENT ) );
664 				aBox.Execute();
665 				aBaseLb.GrabFocus();
666 				return SfxTabPage::KEEP_PAGE;
667 			}
668 			bModified = sal_True;
669 			nRet |= (int)SfxTabPage::REFRESH_SET;
670 		}
671 	}
672 
673 	if ( pItemSet )
674 		FillItemSet( *pItemSet );
675 
676 	return nRet;
677 }
678 
679