update dev300-m58
[ooovba.git] / svx / source / form / fmexpl.cxx
blob8ac29428db07f84ef9e69475e5a0c20c28601f34
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: fmexpl.cxx,v $
10 * $Revision: 1.38 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svx.hxx"
34 #ifndef _SVX_FMRESIDS_HRC
35 #include "fmresids.hrc"
36 #endif
37 #ifndef _SVX_FMEXPL_HRC
38 #include "fmexpl.hrc"
39 #endif
40 #include "fmexpl.hxx"
42 #ifndef _SVX_FMHELP_HRC
43 #include "fmhelp.hrc"
44 #endif
45 #include <svx/fmglob.hxx>
46 #include "fmservs.hxx"
47 #include <svx/fmmodel.hxx>
48 #include "fmexch.hxx"
49 #include "fmundo.hxx"
50 #include "fmpgeimp.hxx"
52 #ifndef _SVX_SVXIDS_HRC
53 #include <svx/svxids.hrc>
54 #endif
56 #ifndef _SVX_FMPROP_HRC
57 #include "fmprop.hrc"
58 #endif
59 #include <svx/dialmgr.hxx>
60 #include "svditer.hxx"
61 #include <svx/svdouno.hxx>
62 #include <fmundo.hxx>
63 #include <svx/svdobj.hxx>
64 #include <vcl/msgbox.hxx>
65 #include <sfx2/dispatch.hxx>
66 #include <sfx2/objsh.hxx>
67 #include <sfx2/viewsh.hxx>
68 #include <sfx2/viewfrm.hxx>
69 #include <com/sun/star/lang/XServiceInfo.hpp>
70 #include <com/sun/star/form/FormComponentType.hpp>
71 #include <com/sun/star/awt/XTabControllerModel.hpp>
72 #include <vcl/menu.hxx>
73 #include <sfx2/objitem.hxx>
74 #include <sfx2/request.hxx>
75 #include <tools/shl.hxx>
77 #ifndef _WRKWIN_HXX //autogen
78 #include <vcl/wrkwin.hxx>
79 #endif
80 #include <vcl/sound.hxx>
81 #include <svx/fmshell.hxx>
82 #include "fmshimp.hxx"
83 #include <svx/fmpage.hxx>
84 #include <com/sun/star/io/XPersistObject.hpp>
85 #include <com/sun/star/script/XEventAttacherManager.hpp>
86 #include <com/sun/star/sdb/CommandType.hpp>
87 #include <com/sun/star/beans/PropertyAttribute.hpp>
88 #include <comphelper/property.hxx>
89 #include <comphelper/processfactory.hxx>
90 #include <osl/diagnose.h>
91 #include <rtl/logfile.hxx>
93 using namespace ::svxform;
94 using namespace ::com::sun::star::uno;
95 using namespace ::com::sun::star::sdbc;
96 using namespace ::com::sun::star::sdb;
97 using namespace ::com::sun::star::form;
98 using namespace ::com::sun::star::beans;
99 using namespace ::com::sun::star::lang;
100 using namespace ::com::sun::star::container;
102 //========================================================================
104 SV_IMPL_PTRARR_SORT( FmEntryDataArray, FmEntryDataPtr )
105 SV_IMPL_PTRARR_SORT( SvLBoxEntrySortedArray, SvLBoxEntryPtr )
107 //========================================================================
108 // class FmNavInsertedHint
109 //========================================================================
110 TYPEINIT1( FmNavInsertedHint, SfxHint );
111 DBG_NAME(FmNavInsertedHint);
112 //------------------------------------------------------------------------
113 FmNavInsertedHint::FmNavInsertedHint( FmEntryData* pInsertedEntryData, sal_uInt32 nRelPos )
114 :pEntryData( pInsertedEntryData )
115 ,nPos( nRelPos )
118 DBG_CTOR(FmNavInsertedHint,NULL);
121 //------------------------------------------------------------------------
122 FmNavInsertedHint::~FmNavInsertedHint()
124 DBG_DTOR(FmNavInsertedHint,NULL);
128 //========================================================================
129 // class FmNavInsertedHint
130 //========================================================================
131 TYPEINIT1( FmNavModelReplacedHint, SfxHint );
132 DBG_NAME(FmNavModelReplacedHint);
133 //------------------------------------------------------------------------
134 FmNavModelReplacedHint::FmNavModelReplacedHint( FmEntryData* pAffectedEntryData )
135 :pEntryData( pAffectedEntryData )
137 DBG_CTOR(FmNavModelReplacedHint,NULL);
140 //------------------------------------------------------------------------
141 FmNavModelReplacedHint::~FmNavModelReplacedHint()
143 DBG_DTOR(FmNavModelReplacedHint,NULL);
146 //========================================================================
147 // class FmNavRemovedHint
148 //========================================================================
149 TYPEINIT1( FmNavRemovedHint, SfxHint );
150 DBG_NAME(FmNavRemovedHint);
151 //------------------------------------------------------------------------
152 FmNavRemovedHint::FmNavRemovedHint( FmEntryData* pRemovedEntryData )
153 :pEntryData( pRemovedEntryData )
155 DBG_CTOR(FmNavRemovedHint,NULL);
158 //------------------------------------------------------------------------
159 FmNavRemovedHint::~FmNavRemovedHint()
161 DBG_DTOR(FmNavRemovedHint,NULL);
165 //========================================================================
166 // class FmNavNameChangedHint
167 //========================================================================
168 TYPEINIT1( FmNavNameChangedHint, SfxHint );
169 DBG_NAME(FmNavNameChangedHint);
170 //------------------------------------------------------------------------
171 FmNavNameChangedHint::FmNavNameChangedHint( FmEntryData* pData, const ::rtl::OUString& rNewName )
172 :pEntryData( pData )
173 ,aNewName( rNewName )
175 DBG_CTOR(FmNavNameChangedHint,NULL);
178 //------------------------------------------------------------------------
179 FmNavNameChangedHint::~FmNavNameChangedHint()
181 DBG_DTOR(FmNavNameChangedHint,NULL);
184 //========================================================================
185 // class FmNavClearedHint
186 //========================================================================
187 TYPEINIT1( FmNavClearedHint, SfxHint );
188 DBG_NAME(FmNavClearedHint);
189 //------------------------------------------------------------------------
190 FmNavClearedHint::FmNavClearedHint()
192 DBG_CTOR(FmNavClearedHint,NULL);
195 //------------------------------------------------------------------------
196 FmNavClearedHint::~FmNavClearedHint()
198 DBG_DTOR(FmNavClearedHint,NULL);
201 //========================================================================
202 // class FmNavRequestSelectHint
203 //========================================================================
204 TYPEINIT1(FmNavRequestSelectHint, SfxHint);
206 //========================================================================
207 // class FmNavViewMarksChanged
208 //========================================================================
209 TYPEINIT1(FmNavViewMarksChanged, SfxHint);
211 //========================================================================
212 // class FmEntryDataList
213 //========================================================================
214 DBG_NAME(FmEntryDataList);
215 //------------------------------------------------------------------------
216 FmEntryDataList::FmEntryDataList()
218 DBG_CTOR(FmEntryDataList,NULL);
221 //------------------------------------------------------------------------
222 FmEntryDataList::~FmEntryDataList()
224 DBG_DTOR(FmEntryDataList,NULL);
228 //========================================================================
229 // class FmEntryData
230 //========================================================================
231 TYPEINIT0( FmEntryData );
232 DBG_NAME(FmEntryData);
233 //------------------------------------------------------------------------
234 FmEntryData::FmEntryData( FmEntryData* pParentData, const Reference< XInterface >& _rxIFace )
235 :pParent( pParentData )
237 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmEntryData::FmEntryData" );
238 DBG_CTOR(FmEntryData,NULL);
239 pChildList = new FmEntryDataList();
241 newObject( _rxIFace );
244 //------------------------------------------------------------------------
245 FmEntryData::~FmEntryData()
247 Clear();
248 delete pChildList;
249 DBG_DTOR(FmEntryData,NULL);
252 //------------------------------------------------------------------------
253 void FmEntryData::newObject( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIFace )
255 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmEntryData::newObject" );
256 // do not just copy, normalize it
257 m_xNormalizedIFace = Reference< XInterface >( _rxIFace, UNO_QUERY );
258 m_xProperties = m_xProperties.query( m_xNormalizedIFace );
259 m_xChild = m_xChild.query( m_xNormalizedIFace );
262 //------------------------------------------------------------------------
263 FmEntryData::FmEntryData( const FmEntryData& rEntryData )
265 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmEntryData::FmEntryData" );
266 pChildList = new FmEntryDataList();
267 aText = rEntryData.GetText();
268 m_aNormalImage = rEntryData.GetNormalImage();
269 m_aHCImage = rEntryData.GetHCImage();
270 pParent = rEntryData.GetParent();
272 FmEntryData* pChildData;
273 sal_uInt32 nEntryCount = rEntryData.GetChildList()->Count();
274 for( sal_uInt32 i=0; i<nEntryCount; i++ )
276 pChildData = rEntryData.GetChildList()->GetObject(i);
277 FmEntryData* pNewChildData = pChildData->Clone();
278 pChildList->Insert( pNewChildData, LIST_APPEND );
281 m_xNormalizedIFace = rEntryData.m_xNormalizedIFace;
282 m_xProperties = rEntryData.m_xProperties;
283 m_xChild = rEntryData.m_xChild;
286 //------------------------------------------------------------------------
287 void FmEntryData::Clear()
289 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmEntryData::Clear" );
290 for (;;)
292 FmEntryData* pEntryData = GetChildList()->Remove(ULONG(0));
293 if (pEntryData == NULL)
294 break;
295 delete pEntryData;
299 //------------------------------------------------------------------------
300 sal_Bool FmEntryData::IsEqualWithoutChilds( FmEntryData* pEntryData )
302 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmEntryData::IsEqualWithoutChilds" );
303 if(this == pEntryData)
304 return sal_True;
306 if( !pEntryData )
307 return sal_False;
309 if( !aText.equals(pEntryData->GetText()))
310 return sal_False;
312 if( !pEntryData->GetParent() && pParent )
313 return sal_False;
315 if( pEntryData->GetParent() && !pParent )
316 return sal_False;
318 if( !pEntryData->GetParent() && !pParent )
319 return sal_True;
321 if( !pParent->IsEqualWithoutChilds(pEntryData->GetParent()) )
322 return sal_False;
324 return sal_True;
328 //========================================================================
329 // class FmFormData
330 //========================================================================
331 TYPEINIT1( FmFormData, FmEntryData );
332 DBG_NAME(FmFormData);
333 //------------------------------------------------------------------------
334 FmFormData::FmFormData( const Reference< XForm >& _rxForm, const ImageList& _rNormalImages, const ImageList& _rHCImages, FmFormData* _pParent )
335 :FmEntryData( _pParent, _rxForm )
336 ,m_xForm( _rxForm )
338 DBG_CTOR(FmEntryData,NULL);
339 //////////////////////////////////////////////////////////////////////
340 // Images setzen
342 m_aNormalImage = _rNormalImages.GetImage( RID_SVXIMG_FORM );
343 m_aHCImage = _rHCImages.GetImage( RID_SVXIMG_FORM );
345 //////////////////////////////////////////////////////////////////////
346 // Titel setzen
347 if (m_xForm.is())
349 Reference< XPropertySet > xSet(m_xForm, UNO_QUERY);
350 if (xSet.is())
352 ::rtl::OUString aEntryName(::comphelper::getString(xSet->getPropertyValue( FM_PROP_NAME )));
353 SetText(aEntryName);
356 else
357 SetText( ::rtl::OUString() );
360 //------------------------------------------------------------------------
361 FmFormData::~FmFormData()
363 DBG_DTOR(FmEntryData,NULL);
366 //------------------------------------------------------------------------
367 FmFormData::FmFormData( const FmFormData& rFormData )
368 :FmEntryData( rFormData )
370 DBG_CTOR(FmEntryData,NULL);
371 m_xForm = rFormData.GetFormIface();
374 //------------------------------------------------------------------------
375 FmEntryData* FmFormData::Clone()
377 return new FmFormData( *this );
380 //------------------------------------------------------------------------
381 sal_Bool FmFormData::IsEqualWithoutChilds( FmEntryData* pEntryData )
383 if(this == pEntryData)
384 return sal_True;
385 if( !pEntryData->ISA(FmFormData) )
386 return sal_False;
387 FmFormData* pFormData = (FmFormData*)pEntryData;
388 if( (XForm*)m_xForm.get() != (XForm*)pFormData->GetFormIface().get() )
389 return sal_False;
391 return FmEntryData::IsEqualWithoutChilds( pFormData );
395 //========================================================================
396 // class FmControlData
397 //========================================================================
398 TYPEINIT1( FmControlData, FmEntryData );
399 DBG_NAME(FmControlData);
400 //------------------------------------------------------------------------
401 FmControlData::FmControlData( const Reference< XFormComponent >& _rxComponent, const ImageList& _rNormalImages, const ImageList& _rHCImages, FmFormData* _pParent )
402 :FmEntryData( _pParent, _rxComponent )
403 ,m_xFormComponent( _rxComponent )
405 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmControlData::FmControlData" );
406 DBG_CTOR(FmControlData,NULL);
407 //////////////////////////////////////////////////////////////////////
408 // Images setzen
409 m_aNormalImage = GetImage( _rNormalImages );
410 m_aHCImage = GetImage( _rHCImages );
412 //////////////////////////////////////////////////////////////////////
413 // Titel setzen
414 Reference< XPropertySet > xSet(m_xFormComponent, UNO_QUERY);
415 if( xSet.is() )
417 #ifdef DBG_UTIL
418 ::rtl::OUString aEntryName = ::comphelper::getString(xSet->getPropertyValue( FM_PROP_NAME ));
419 #endif
420 SetText( ::comphelper::getString(xSet->getPropertyValue( FM_PROP_NAME )));
424 //------------------------------------------------------------------------
425 FmControlData::~FmControlData()
427 DBG_DTOR(FmControlData,NULL);
430 //------------------------------------------------------------------------
431 FmControlData::FmControlData( const FmControlData& rControlData )
432 :FmEntryData( rControlData )
434 DBG_CTOR(FmControlData,NULL);
435 m_xFormComponent = rControlData.GetFormComponent();
438 //------------------------------------------------------------------------
439 FmEntryData* FmControlData::Clone()
441 return new FmControlData( *this );
444 //------------------------------------------------------------------------
445 Image FmControlData::GetImage(const ImageList& ilNavigatorImages) const
447 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmControlData::FmControlData" );
448 //////////////////////////////////////////////////////////////////////
449 // Default-Image
450 Image aImage = ilNavigatorImages.GetImage( RID_SVXIMG_CONTROL );
452 Reference< XServiceInfo > xInfo( m_xFormComponent, UNO_QUERY );
453 if (!m_xFormComponent.is())
454 return aImage;
456 //////////////////////////////////////////////////////////////////////
457 // Spezielle Control-Images
458 sal_Int16 nObjectType = getControlTypeByObject(xInfo);
459 switch (nObjectType)
461 case OBJ_FM_BUTTON:
462 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_BUTTON );
463 break;
465 case OBJ_FM_FIXEDTEXT:
466 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_FIXEDTEXT );
467 break;
469 case OBJ_FM_EDIT:
470 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_EDIT );
471 break;
473 case OBJ_FM_RADIOBUTTON:
474 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_RADIOBUTTON );
475 break;
477 case OBJ_FM_CHECKBOX:
478 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_CHECKBOX );
479 break;
481 case OBJ_FM_LISTBOX:
482 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_LISTBOX );
483 break;
485 case OBJ_FM_COMBOBOX:
486 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_COMBOBOX );
487 break;
489 case OBJ_FM_NAVIGATIONBAR:
490 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_NAVIGATIONBAR );
491 break;
493 case OBJ_FM_GROUPBOX:
494 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_GROUPBOX );
495 break;
497 case OBJ_FM_IMAGEBUTTON:
498 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_IMAGEBUTTON );
499 break;
501 case OBJ_FM_FILECONTROL:
502 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_FILECONTROL );
503 break;
505 case OBJ_FM_HIDDEN:
506 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_HIDDEN );
507 break;
509 case OBJ_FM_DATEFIELD:
510 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_DATEFIELD );
511 break;
513 case OBJ_FM_TIMEFIELD:
514 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_TIMEFIELD );
515 break;
517 case OBJ_FM_NUMERICFIELD:
518 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_NUMERICFIELD );
519 break;
521 case OBJ_FM_CURRENCYFIELD:
522 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_CURRENCYFIELD );
523 break;
525 case OBJ_FM_PATTERNFIELD:
526 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_PATTERNFIELD );
527 break;
529 case OBJ_FM_IMAGECONTROL:
530 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_IMAGECONTROL );
531 break;
533 case OBJ_FM_FORMATTEDFIELD:
534 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_FORMATTEDFIELD );
535 break;
537 case OBJ_FM_GRID:
538 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_GRID );
539 break;
541 case OBJ_FM_SCROLLBAR:
542 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_SCROLLBAR );
543 break;
545 case OBJ_FM_SPINBUTTON:
546 aImage = ilNavigatorImages.GetImage( RID_SVXIMG_SPINBUTTON);
547 break;
550 return aImage;
553 //------------------------------------------------------------------------
554 sal_Bool FmControlData::IsEqualWithoutChilds( FmEntryData* pEntryData )
556 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmControlData::IsEqualWithoutChilds" );
557 if(this == pEntryData)
558 return sal_True;
560 if( !pEntryData->ISA(FmControlData) )
561 return sal_False;
562 FmControlData* pControlData = (FmControlData*)pEntryData;
564 if( (XFormComponent*)m_xFormComponent.get() != (XFormComponent*)pControlData->GetFormComponent().get() )
565 return sal_False;
567 return FmEntryData::IsEqualWithoutChilds( pControlData );
570 //------------------------------------------------------------------------
571 void FmControlData::ModelReplaced( const Reference< XFormComponent >& _rxNew, const ImageList& _rNormalImages, const ImageList& _rHCImages )
573 RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "FmControlData::ModelReplaced" );
574 m_xFormComponent = _rxNew;
575 newObject( m_xFormComponent );
577 // Images neu setzen
578 m_aNormalImage = GetImage( _rNormalImages );
579 m_aHCImage = GetImage( _rHCImages );
582 //............................................................................
583 namespace svxform
585 //............................................................................
587 //========================================================================
588 // class NavigatorFrame
589 //========================================================================
590 DBG_NAME(NavigatorFrame)
591 //------------------------------------------------------------------------
592 NavigatorFrame::NavigatorFrame( SfxBindings* _pBindings, SfxChildWindow* _pMgr,
593 Window* _pParent )
594 :SfxDockingWindow( _pBindings, _pMgr, _pParent, WinBits(WB_STDMODELESS|WB_SIZEABLE|WB_ROLLABLE|WB_3DLOOK|WB_DOCKABLE) )
595 ,SfxControllerItem( SID_FM_FMEXPLORER_CONTROL, *_pBindings )
597 DBG_CTOR(NavigatorFrame,NULL);
598 SetHelpId( HID_FORM_NAVIGATOR_WIN );
600 m_pNavigatorTree = new NavigatorTree(comphelper::getProcessServiceFactory(), this );
601 m_pNavigatorTree->Show();
602 SetText( SVX_RES(RID_STR_FMEXPLORER) );
603 SfxDockingWindow::SetFloatingSize( Size(200,200) );
606 //------------------------------------------------------------------------
607 NavigatorFrame::~NavigatorFrame()
609 delete m_pNavigatorTree;
610 DBG_DTOR(NavigatorFrame,NULL);
613 //-----------------------------------------------------------------------
614 void NavigatorFrame::UpdateContent( FmFormShell* pFormShell )
616 m_pNavigatorTree->UpdateContent( pFormShell );
619 //-----------------------------------------------------------------------
620 void NavigatorFrame::StateChanged( sal_uInt16 nSID, SfxItemState eState, const SfxPoolItem* pState )
622 if( !pState || SID_FM_FMEXPLORER_CONTROL != nSID )
623 return;
625 if( eState >= SFX_ITEM_AVAILABLE )
627 FmFormShell* pShell = PTR_CAST( FmFormShell,((SfxObjectItem*)pState)->GetShell() );
628 UpdateContent( pShell );
630 else
631 UpdateContent( NULL );
634 //-----------------------------------------------------------------------
635 void NavigatorFrame::GetFocus()
637 if ( m_pNavigatorTree )
638 m_pNavigatorTree->GrabFocus();
639 else
640 SfxDockingWindow::GetFocus();
643 //-----------------------------------------------------------------------
644 sal_Bool NavigatorFrame::Close()
646 UpdateContent( NULL );
647 return SfxDockingWindow::Close();
650 //-----------------------------------------------------------------------
651 void NavigatorFrame::FillInfo( SfxChildWinInfo& rInfo ) const
653 SfxDockingWindow::FillInfo( rInfo );
654 rInfo.bVisible = sal_False;
657 //-----------------------------------------------------------------------
658 Size NavigatorFrame::CalcDockingSize( SfxChildAlignment eAlign )
660 if ( ( eAlign == SFX_ALIGN_TOP ) || ( eAlign == SFX_ALIGN_BOTTOM ) )
661 return Size();
663 return SfxDockingWindow::CalcDockingSize( eAlign );
666 //-----------------------------------------------------------------------
667 SfxChildAlignment NavigatorFrame::CheckAlignment( SfxChildAlignment _eActAlign, SfxChildAlignment _eAlign )
669 if ( ( _eAlign == SFX_ALIGN_LEFT ) || ( _eAlign == SFX_ALIGN_RIGHT ) || ( _eAlign == SFX_ALIGN_NOALIGNMENT ) )
670 return _eAlign;
671 return _eActAlign;
674 //------------------------------------------------------------------------
675 void NavigatorFrame::Resize()
677 SfxDockingWindow::Resize();
679 Size aLogOutputSize = PixelToLogic( GetOutputSizePixel(), MAP_APPFONT );
680 Size aLogExplSize = aLogOutputSize;
681 aLogExplSize.Width() -= 6;
682 aLogExplSize.Height() -= 6;
684 Point aExplPos = LogicToPixel( Point(3,3), MAP_APPFONT );
685 Size aExplSize = LogicToPixel( aLogExplSize, MAP_APPFONT );
687 m_pNavigatorTree->SetPosSizePixel( aExplPos, aExplSize );
691 //========================================================================
692 // class NavigatorFrameManager
693 //========================================================================
695 //-----------------------------------------------------------------------
696 SFX_IMPL_DOCKINGWINDOW( NavigatorFrameManager, SID_FM_SHOW_FMEXPLORER )
698 //-----------------------------------------------------------------------
699 NavigatorFrameManager::NavigatorFrameManager( Window* _pParent, sal_uInt16 _nId,
700 SfxBindings* _pBindings, SfxChildWinInfo* _pInfo )
701 :SfxChildWindow( _pParent, _nId )
703 pWindow = new NavigatorFrame( _pBindings, this, _pParent );
704 eChildAlignment = SFX_ALIGN_NOALIGNMENT;
705 ((SfxDockingWindow*)pWindow)->Initialize( _pInfo );
708 //............................................................................
709 } // namespace svxform
710 //............................................................................