1*f6e50924SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f6e50924SAndrew Rist * distributed with this work for additional information 6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance 9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at 10*f6e50924SAndrew Rist * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*f6e50924SAndrew Rist * 13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f6e50924SAndrew Rist * software distributed under the License is distributed on an 15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the 17*f6e50924SAndrew Rist * specific language governing permissions and limitations 18*f6e50924SAndrew Rist * under the License. 19*f6e50924SAndrew Rist * 20*f6e50924SAndrew Rist *************************************************************/ 21*f6e50924SAndrew Rist 22*f6e50924SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svx.hxx" 26cdf0e10cSrcweir #include <svx/dialmgr.hxx> 27cdf0e10cSrcweir #include <svx/fmshell.hxx> 28cdf0e10cSrcweir #include <svx/fmmodel.hxx> 29cdf0e10cSrcweir #include <svx/fmpage.hxx> 30cdf0e10cSrcweir #include <svx/fmglob.hxx> 31cdf0e10cSrcweir #include "svx/svditer.hxx" 32cdf0e10cSrcweir #include <svx/svdogrp.hxx> 33cdf0e10cSrcweir #include <svx/svdpagv.hxx> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include "fmprop.hrc" 36cdf0e10cSrcweir 37cdf0e10cSrcweir #include "fmundo.hxx" 38cdf0e10cSrcweir #include "fmhelp.hrc" 39cdf0e10cSrcweir #include "fmexpl.hrc" 40cdf0e10cSrcweir #include "fmexpl.hxx" 41cdf0e10cSrcweir #include "svx/fmresids.hrc" 42cdf0e10cSrcweir #include "fmshimp.hxx" 43cdf0e10cSrcweir #include "fmobj.hxx" 44cdf0e10cSrcweir #include <sfx2/objsh.hxx> 45cdf0e10cSrcweir #include <tools/diagnose_ex.h> 46cdf0e10cSrcweir #include <rtl/logfile.hxx> 47cdf0e10cSrcweir #include <com/sun/star/container/XContainer.hpp> 48cdf0e10cSrcweir 49cdf0e10cSrcweir //............................................................................ 50cdf0e10cSrcweir namespace svxform 51cdf0e10cSrcweir { 52cdf0e10cSrcweir //............................................................................ 53cdf0e10cSrcweir 54cdf0e10cSrcweir using namespace ::com::sun::star::uno; 55cdf0e10cSrcweir using namespace ::com::sun::star::lang; 56cdf0e10cSrcweir using namespace ::com::sun::star::beans; 57cdf0e10cSrcweir using namespace ::com::sun::star::form; 58cdf0e10cSrcweir using namespace ::com::sun::star::awt; 59cdf0e10cSrcweir using namespace ::com::sun::star::container; 60cdf0e10cSrcweir using namespace ::com::sun::star::script; 61cdf0e10cSrcweir using namespace ::com::sun::star::sdb; 62cdf0e10cSrcweir 63cdf0e10cSrcweir //======================================================================== 64cdf0e10cSrcweir // class OFormComponentObserver 65cdf0e10cSrcweir //======================================================================== 66cdf0e10cSrcweir //------------------------------------------------------------------------ OFormComponentObserver(NavigatorTreeModel * _pModel)67cdf0e10cSrcweir OFormComponentObserver::OFormComponentObserver(NavigatorTreeModel* _pModel) 68cdf0e10cSrcweir :m_pNavModel(_pModel) 69cdf0e10cSrcweir ,m_nLocks(0) 70cdf0e10cSrcweir ,m_bCanUndo(sal_True) 71cdf0e10cSrcweir { 72cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::OFormComponentObserver" ); 73cdf0e10cSrcweir } 74cdf0e10cSrcweir 75cdf0e10cSrcweir // XPropertyChangeListener 76cdf0e10cSrcweir //------------------------------------------------------------------------ disposing(const EventObject & Source)77cdf0e10cSrcweir void SAL_CALL OFormComponentObserver::disposing(const EventObject& Source) throw( RuntimeException ) 78cdf0e10cSrcweir { 79cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::disposing" ); 80cdf0e10cSrcweir Remove( Source.Source ); 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir //------------------------------------------------------------------------ propertyChange(const PropertyChangeEvent & evt)84cdf0e10cSrcweir void SAL_CALL OFormComponentObserver::propertyChange(const PropertyChangeEvent& evt) throw(RuntimeException) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::propertyChange" ); 87cdf0e10cSrcweir if( !m_pNavModel ) return; 88cdf0e10cSrcweir if( evt.PropertyName != FM_PROP_NAME ) return; 89cdf0e10cSrcweir 90cdf0e10cSrcweir Reference< XFormComponent > xFormComponent(evt.Source, UNO_QUERY); 91cdf0e10cSrcweir Reference< XForm > xForm(evt.Source, UNO_QUERY); 92cdf0e10cSrcweir 93cdf0e10cSrcweir FmEntryData* pEntryData( NULL ); 94cdf0e10cSrcweir if( xForm.is() ) 95cdf0e10cSrcweir pEntryData = m_pNavModel->FindData( xForm, m_pNavModel->GetRootList() ); 96cdf0e10cSrcweir else if( xFormComponent.is() ) 97cdf0e10cSrcweir pEntryData = m_pNavModel->FindData( xFormComponent, m_pNavModel->GetRootList() ); 98cdf0e10cSrcweir 99cdf0e10cSrcweir if( pEntryData ) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir ::rtl::OUString aNewName = ::comphelper::getString(evt.NewValue); 102cdf0e10cSrcweir pEntryData->SetText( aNewName ); 103cdf0e10cSrcweir FmNavNameChangedHint aNameChangedHint( pEntryData, aNewName ); 104cdf0e10cSrcweir m_pNavModel->Broadcast( aNameChangedHint ); 105cdf0e10cSrcweir } 106cdf0e10cSrcweir } 107cdf0e10cSrcweir 108cdf0e10cSrcweir // XContainerListener 109cdf0e10cSrcweir //------------------------------------------------------------------------------ elementInserted(const ContainerEvent & evt)110cdf0e10cSrcweir void SAL_CALL OFormComponentObserver::elementInserted(const ContainerEvent& evt) throw(RuntimeException) 111cdf0e10cSrcweir { 112cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::elementInserted" ); 113cdf0e10cSrcweir if (IsLocked() || !m_pNavModel) 114cdf0e10cSrcweir return; 115cdf0e10cSrcweir 116cdf0e10cSrcweir // keine Undoaction einfuegen 117cdf0e10cSrcweir m_bCanUndo = sal_False; 118cdf0e10cSrcweir 119cdf0e10cSrcweir Reference< XInterface > xTemp; 120cdf0e10cSrcweir evt.Element >>= xTemp; 121cdf0e10cSrcweir Insert(xTemp, ::comphelper::getINT32(evt.Accessor)); 122cdf0e10cSrcweir 123cdf0e10cSrcweir m_bCanUndo = sal_True; 124cdf0e10cSrcweir } 125cdf0e10cSrcweir 126cdf0e10cSrcweir //------------------------------------------------------------------------------ Insert(const Reference<XInterface> & xIface,sal_Int32 nIndex)127cdf0e10cSrcweir void OFormComponentObserver::Insert(const Reference< XInterface > & xIface, sal_Int32 nIndex) 128cdf0e10cSrcweir { 129cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::Insert" ); 130cdf0e10cSrcweir Reference< XForm > xForm(xIface, UNO_QUERY); 131cdf0e10cSrcweir if (xForm.is()) 132cdf0e10cSrcweir { 133cdf0e10cSrcweir m_pNavModel->InsertForm(xForm, sal_uInt32(nIndex)); 134cdf0e10cSrcweir Reference< XIndexContainer > xContainer(xForm, UNO_QUERY); 135cdf0e10cSrcweir Reference< XInterface > xTemp; 136cdf0e10cSrcweir for (sal_Int32 i = 0; i < xContainer->getCount(); i++) 137cdf0e10cSrcweir { 138cdf0e10cSrcweir xContainer->getByIndex(i) >>= xTemp; 139cdf0e10cSrcweir Insert(xTemp, i); 140cdf0e10cSrcweir } 141cdf0e10cSrcweir } 142cdf0e10cSrcweir else 143cdf0e10cSrcweir { 144cdf0e10cSrcweir Reference< XFormComponent > xFormComp(xIface, UNO_QUERY); 145cdf0e10cSrcweir if (xFormComp.is()) 146cdf0e10cSrcweir m_pNavModel->InsertFormComponent(xFormComp, sal_uInt32(nIndex)); 147cdf0e10cSrcweir } 148cdf0e10cSrcweir } 149cdf0e10cSrcweir 150cdf0e10cSrcweir //------------------------------------------------------------------------------ elementReplaced(const ContainerEvent & evt)151cdf0e10cSrcweir void SAL_CALL OFormComponentObserver::elementReplaced(const ContainerEvent& evt) throw(RuntimeException) 152cdf0e10cSrcweir { 153cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::elementReplaced" ); 154cdf0e10cSrcweir if (IsLocked() || !m_pNavModel) 155cdf0e10cSrcweir return; 156cdf0e10cSrcweir 157cdf0e10cSrcweir m_bCanUndo = sal_False; 158cdf0e10cSrcweir 159cdf0e10cSrcweir // EntryData loeschen 160cdf0e10cSrcweir Reference< XFormComponent > xReplaced; 161cdf0e10cSrcweir evt.ReplacedElement >>= xReplaced; 162cdf0e10cSrcweir FmEntryData* pEntryData = m_pNavModel->FindData(xReplaced, m_pNavModel->GetRootList(), sal_True); 163cdf0e10cSrcweir if (pEntryData) 164cdf0e10cSrcweir { 165cdf0e10cSrcweir if (pEntryData->ISA(FmControlData)) 166cdf0e10cSrcweir { 167cdf0e10cSrcweir Reference< XFormComponent > xComp; 168cdf0e10cSrcweir evt.Element >>= xComp; 169cdf0e10cSrcweir DBG_ASSERT(xComp.is(), "OFormComponentObserver::elementReplaced : invalid argument !"); 170cdf0e10cSrcweir // an einer FmControlData sollte eine XFormComponent haengen 171cdf0e10cSrcweir m_pNavModel->ReplaceFormComponent(xReplaced, xComp); 172cdf0e10cSrcweir } 173cdf0e10cSrcweir else if (pEntryData->ISA(FmFormData)) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir DBG_ERROR("replacing forms not implemented yet !"); 176cdf0e10cSrcweir } 177cdf0e10cSrcweir } 178cdf0e10cSrcweir 179cdf0e10cSrcweir m_bCanUndo = sal_True; 180cdf0e10cSrcweir } 181cdf0e10cSrcweir 182cdf0e10cSrcweir //------------------------------------------------------------------------------ Remove(const::com::sun::star::uno::Reference<::com::sun::star::uno::XInterface> & _rxElement)183cdf0e10cSrcweir void OFormComponentObserver::Remove( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxElement ) 184cdf0e10cSrcweir { 185cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::Remove" ); 186cdf0e10cSrcweir if (IsLocked() || !m_pNavModel) 187cdf0e10cSrcweir return; 188cdf0e10cSrcweir 189cdf0e10cSrcweir m_bCanUndo = sal_False; 190cdf0e10cSrcweir 191cdf0e10cSrcweir ////////////////////////////////////////////////////////// 192cdf0e10cSrcweir // EntryData loeschen 193cdf0e10cSrcweir FmEntryData* pEntryData = m_pNavModel->FindData( _rxElement, m_pNavModel->GetRootList(), sal_True ); 194cdf0e10cSrcweir if (pEntryData) 195cdf0e10cSrcweir m_pNavModel->Remove(pEntryData); 196cdf0e10cSrcweir 197cdf0e10cSrcweir m_bCanUndo = sal_True; 198cdf0e10cSrcweir } 199cdf0e10cSrcweir 200cdf0e10cSrcweir //------------------------------------------------------------------------------ elementRemoved(const ContainerEvent & evt)201cdf0e10cSrcweir void SAL_CALL OFormComponentObserver::elementRemoved(const ContainerEvent& evt) throw(RuntimeException) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "OFormComponentObserver::elementRemoved" ); 204cdf0e10cSrcweir Reference< XInterface > xElement; 205cdf0e10cSrcweir evt.Element >>= xElement; 206cdf0e10cSrcweir Remove( xElement ); 207cdf0e10cSrcweir } 208cdf0e10cSrcweir 209cdf0e10cSrcweir //======================================================================== 210cdf0e10cSrcweir // class NavigatorTreeModel 211cdf0e10cSrcweir //======================================================================== 212cdf0e10cSrcweir 213cdf0e10cSrcweir //------------------------------------------------------------------------ NavigatorTreeModel(const ImageList & _rNormalImages,const ImageList & _rHCImages)214cdf0e10cSrcweir NavigatorTreeModel::NavigatorTreeModel( const ImageList& _rNormalImages, const ImageList& _rHCImages ) 215cdf0e10cSrcweir :m_pFormShell(NULL) 216cdf0e10cSrcweir ,m_pFormPage(NULL) 217cdf0e10cSrcweir ,m_pFormModel(NULL) 218cdf0e10cSrcweir ,m_aNormalImages( _rNormalImages ) 219cdf0e10cSrcweir ,m_aHCImages( _rHCImages ) 220cdf0e10cSrcweir { 221cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::NavigatorTreeModel" ); 222cdf0e10cSrcweir m_pPropChangeList = new OFormComponentObserver(this); 223cdf0e10cSrcweir m_pPropChangeList->acquire(); 224cdf0e10cSrcweir m_pRootList = new FmEntryDataList(); 225cdf0e10cSrcweir } 226cdf0e10cSrcweir 227cdf0e10cSrcweir //------------------------------------------------------------------------ ~NavigatorTreeModel()228cdf0e10cSrcweir NavigatorTreeModel::~NavigatorTreeModel() 229cdf0e10cSrcweir { 230cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 231cdf0e10cSrcweir // Als Listener abmelden 232cdf0e10cSrcweir if( m_pFormShell) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir FmFormModel* pFormModel = m_pFormShell->GetFormModel(); 235cdf0e10cSrcweir if( pFormModel && IsListening(*pFormModel)) 236cdf0e10cSrcweir EndListening( *pFormModel ); 237cdf0e10cSrcweir 238cdf0e10cSrcweir if (IsListening(*m_pFormShell)) 239cdf0e10cSrcweir EndListening(*m_pFormShell); 240cdf0e10cSrcweir } 241cdf0e10cSrcweir 242cdf0e10cSrcweir Clear(); 243cdf0e10cSrcweir delete m_pRootList; 244cdf0e10cSrcweir m_pPropChangeList->ReleaseModel(); 245cdf0e10cSrcweir m_pPropChangeList->release(); 246cdf0e10cSrcweir } 247cdf0e10cSrcweir 248cdf0e10cSrcweir 249cdf0e10cSrcweir //------------------------------------------------------------------------ SetModified(sal_Bool bMod)250cdf0e10cSrcweir void NavigatorTreeModel::SetModified( sal_Bool bMod ) 251cdf0e10cSrcweir { 252cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::SetModified" ); 253cdf0e10cSrcweir if( !m_pFormShell ) return; 254cdf0e10cSrcweir SfxObjectShell* pObjShell = m_pFormShell->GetFormModel()->GetObjectShell(); 255cdf0e10cSrcweir if( !pObjShell ) return; 256cdf0e10cSrcweir pObjShell->SetModified( bMod ); 257cdf0e10cSrcweir } 258cdf0e10cSrcweir 259cdf0e10cSrcweir //------------------------------------------------------------------------ Clear()260cdf0e10cSrcweir void NavigatorTreeModel::Clear() 261cdf0e10cSrcweir { 262cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::Clear" ); 263cdf0e10cSrcweir Reference< XNameContainer > xForms( GetForms()); 264cdf0e10cSrcweir Reference< XContainer > xContainer(xForms, UNO_QUERY); 265cdf0e10cSrcweir if (xContainer.is()) 266cdf0e10cSrcweir xContainer->removeContainerListener((XContainerListener*)m_pPropChangeList); 267cdf0e10cSrcweir 268cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 269cdf0e10cSrcweir // RootList loeschen 270cdf0e10cSrcweir FmEntryData* pChildData; 271cdf0e10cSrcweir FmEntryDataList* pRootList = GetRootList(); 272cdf0e10cSrcweir 273cdf0e10cSrcweir for( sal_uInt32 i=pRootList->Count(); i>0; i-- ) 274cdf0e10cSrcweir { 275cdf0e10cSrcweir pChildData = pRootList->GetObject(i-1); 276cdf0e10cSrcweir pRootList->Remove( pChildData ); 277cdf0e10cSrcweir delete pChildData; 278cdf0e10cSrcweir } 279cdf0e10cSrcweir 280cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 281cdf0e10cSrcweir // UI benachrichtigen 282cdf0e10cSrcweir FmNavClearedHint aClearedHint; 283cdf0e10cSrcweir Broadcast( aClearedHint ); 284cdf0e10cSrcweir } 285cdf0e10cSrcweir 286cdf0e10cSrcweir //------------------------------------------------------------------------ GetForms() const287cdf0e10cSrcweir Reference< XNameContainer > NavigatorTreeModel::GetForms() const 288cdf0e10cSrcweir { 289cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::GetForms" ); 290cdf0e10cSrcweir if( !m_pFormShell || !m_pFormShell->GetCurPage()) 291cdf0e10cSrcweir return NULL; 292cdf0e10cSrcweir else 293cdf0e10cSrcweir return m_pFormShell->GetCurPage()->GetForms(); 294cdf0e10cSrcweir } 295cdf0e10cSrcweir 296cdf0e10cSrcweir //------------------------------------------------------------------------ Insert(FmEntryData * pEntry,sal_uLong nRelPos,sal_Bool bAlterModel)297cdf0e10cSrcweir void NavigatorTreeModel::Insert(FmEntryData* pEntry, sal_uLong nRelPos, sal_Bool bAlterModel) 298cdf0e10cSrcweir { 299cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::Insert" ); 300cdf0e10cSrcweir if (IsListening(*m_pFormModel)) 301cdf0e10cSrcweir EndListening(*m_pFormModel); 302cdf0e10cSrcweir 303cdf0e10cSrcweir m_pPropChangeList->Lock(); 304cdf0e10cSrcweir FmFormData* pFolder = (FmFormData*) pEntry->GetParent(); 305cdf0e10cSrcweir Reference< XChild > xElement( pEntry->GetChildIFace() ); 306cdf0e10cSrcweir if (bAlterModel) 307cdf0e10cSrcweir { 308cdf0e10cSrcweir XubString aStr; 309cdf0e10cSrcweir if (pEntry->ISA(FmFormData)) 310cdf0e10cSrcweir aStr = SVX_RES(RID_STR_FORM); 311cdf0e10cSrcweir else 312cdf0e10cSrcweir aStr = SVX_RES(RID_STR_CONTROL); 313cdf0e10cSrcweir 314cdf0e10cSrcweir Reference< XIndexContainer > xContainer; 315cdf0e10cSrcweir if (pFolder) 316cdf0e10cSrcweir xContainer = Reference< XIndexContainer > (pFolder->GetFormIface(), UNO_QUERY); 317cdf0e10cSrcweir else 318cdf0e10cSrcweir xContainer = Reference< XIndexContainer > (GetForms(), UNO_QUERY); 319cdf0e10cSrcweir 320cdf0e10cSrcweir bool bUndo = m_pFormModel->IsUndoEnabled(); 321cdf0e10cSrcweir 322cdf0e10cSrcweir if( bUndo ) 323cdf0e10cSrcweir { 324cdf0e10cSrcweir XubString aUndoStr(SVX_RES(RID_STR_UNDO_CONTAINER_INSERT)); 325cdf0e10cSrcweir aUndoStr.SearchAndReplace('#', aStr); 326cdf0e10cSrcweir m_pFormModel->BegUndo(aUndoStr); 327cdf0e10cSrcweir } 328cdf0e10cSrcweir 329cdf0e10cSrcweir if (nRelPos >= (sal_uInt32)xContainer->getCount()) 330cdf0e10cSrcweir nRelPos = (sal_uInt32)xContainer->getCount(); 331cdf0e10cSrcweir 332cdf0e10cSrcweir // UndoAction 333cdf0e10cSrcweir if ( bUndo && m_pPropChangeList->CanUndo()) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir m_pFormModel->AddUndo(new FmUndoContainerAction(*m_pFormModel, 336cdf0e10cSrcweir FmUndoContainerAction::Inserted, 337cdf0e10cSrcweir xContainer, 338cdf0e10cSrcweir xElement, 339cdf0e10cSrcweir nRelPos)); 340cdf0e10cSrcweir } 341cdf0e10cSrcweir 342cdf0e10cSrcweir // das Element muss den Typ haben, den der Container erwartet 343cdf0e10cSrcweir if (xContainer->getElementType() == 344cdf0e10cSrcweir ::getCppuType((const Reference< XForm>*)0)) 345cdf0e10cSrcweir 346cdf0e10cSrcweir { 347cdf0e10cSrcweir Reference< XForm > xElementAsForm(xElement, UNO_QUERY); 348cdf0e10cSrcweir xContainer->insertByIndex(nRelPos, makeAny(xElementAsForm)); 349cdf0e10cSrcweir } 350cdf0e10cSrcweir else if (xContainer->getElementType() == 351cdf0e10cSrcweir ::getCppuType((const Reference< XFormComponent>*)0)) 352cdf0e10cSrcweir 353cdf0e10cSrcweir { 354cdf0e10cSrcweir Reference< XFormComponent > xElementAsComponent(xElement, UNO_QUERY); 355cdf0e10cSrcweir xContainer->insertByIndex(nRelPos, makeAny(xElementAsComponent)); 356cdf0e10cSrcweir } 357cdf0e10cSrcweir else 358cdf0e10cSrcweir { 359cdf0e10cSrcweir DBG_ERROR("NavigatorTreeModel::Insert : the parent container needs an elementtype I don't know !"); 360cdf0e10cSrcweir } 361cdf0e10cSrcweir 362cdf0e10cSrcweir if( bUndo ) 363cdf0e10cSrcweir m_pFormModel->EndUndo(); 364cdf0e10cSrcweir } 365cdf0e10cSrcweir 366cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 367cdf0e10cSrcweir // Als PropertyChangeListener anmelden 368cdf0e10cSrcweir Reference< XPropertySet > xSet(xElement, UNO_QUERY); 369cdf0e10cSrcweir if( xSet.is() ) 370cdf0e10cSrcweir xSet->addPropertyChangeListener( FM_PROP_NAME, m_pPropChangeList ); 371cdf0e10cSrcweir 372cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 373cdf0e10cSrcweir // Daten aus Model entfernen 374cdf0e10cSrcweir if (pEntry->ISA(FmFormData)) 375cdf0e10cSrcweir { 376cdf0e10cSrcweir Reference< XContainer > xContainer(xElement, UNO_QUERY); 377cdf0e10cSrcweir if (xContainer.is()) 378cdf0e10cSrcweir xContainer->addContainerListener((XContainerListener*)m_pPropChangeList); 379cdf0e10cSrcweir } 380cdf0e10cSrcweir 381cdf0e10cSrcweir if (pFolder) 382cdf0e10cSrcweir pFolder->GetChildList()->Insert( pEntry, nRelPos ); 383cdf0e10cSrcweir else 384cdf0e10cSrcweir GetRootList()->Insert( pEntry, nRelPos ); 385cdf0e10cSrcweir 386cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 387cdf0e10cSrcweir // UI benachrichtigen 388cdf0e10cSrcweir FmNavInsertedHint aInsertedHint( pEntry, nRelPos ); 389cdf0e10cSrcweir Broadcast( aInsertedHint ); 390cdf0e10cSrcweir 391cdf0e10cSrcweir m_pPropChangeList->UnLock(); 392cdf0e10cSrcweir if (IsListening(*m_pFormModel)) 393cdf0e10cSrcweir StartListening(*m_pFormModel); 394cdf0e10cSrcweir } 395cdf0e10cSrcweir 396cdf0e10cSrcweir //------------------------------------------------------------------------ Remove(FmEntryData * pEntry,sal_Bool bAlterModel)397cdf0e10cSrcweir void NavigatorTreeModel::Remove(FmEntryData* pEntry, sal_Bool bAlterModel) 398cdf0e10cSrcweir { 399cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::Remove" ); 400cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 401cdf0e10cSrcweir // Form und Parent holen 402cdf0e10cSrcweir if (!pEntry || !m_pFormModel) 403cdf0e10cSrcweir return; 404cdf0e10cSrcweir 405cdf0e10cSrcweir if (IsListening(*m_pFormModel)) 406cdf0e10cSrcweir EndListening(*m_pFormModel); 407cdf0e10cSrcweir 408cdf0e10cSrcweir const bool bUndo = m_pFormModel->IsUndoEnabled(); 409cdf0e10cSrcweir 410cdf0e10cSrcweir m_pPropChangeList->Lock(); 411cdf0e10cSrcweir FmFormData* pFolder = (FmFormData*) pEntry->GetParent(); 412cdf0e10cSrcweir Reference< XChild > xElement ( pEntry->GetChildIFace() ); 413cdf0e10cSrcweir if (bAlterModel) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir XubString aStr; 416cdf0e10cSrcweir if (pEntry->ISA(FmFormData)) 417cdf0e10cSrcweir aStr = SVX_RES(RID_STR_FORM); 418cdf0e10cSrcweir else 419cdf0e10cSrcweir aStr = SVX_RES(RID_STR_CONTROL); 420cdf0e10cSrcweir 421cdf0e10cSrcweir if( bUndo ) 422cdf0e10cSrcweir { 423cdf0e10cSrcweir XubString aUndoStr(SVX_RES(RID_STR_UNDO_CONTAINER_REMOVE)); 424cdf0e10cSrcweir aUndoStr.SearchAndReplace('#', aStr); 425cdf0e10cSrcweir m_pFormModel->BegUndo(aUndoStr); 426cdf0e10cSrcweir } 427cdf0e10cSrcweir } 428cdf0e10cSrcweir 429cdf0e10cSrcweir // jetzt die eigentliche Entfernung der Daten aus dem Model 430cdf0e10cSrcweir if (pEntry->ISA(FmFormData)) 431cdf0e10cSrcweir RemoveForm((FmFormData*)pEntry); 432cdf0e10cSrcweir else 433cdf0e10cSrcweir RemoveFormComponent((FmControlData*)pEntry); 434cdf0e10cSrcweir 435cdf0e10cSrcweir 436cdf0e10cSrcweir if (bAlterModel) 437cdf0e10cSrcweir { 438cdf0e10cSrcweir Reference< XIndexContainer > xContainer(xElement->getParent(), UNO_QUERY); 439cdf0e10cSrcweir // aus dem Container entfernen 440cdf0e10cSrcweir sal_Int32 nContainerIndex = getElementPos(xContainer.get(), xElement); 441cdf0e10cSrcweir // UndoAction 442cdf0e10cSrcweir if (nContainerIndex >= 0) 443cdf0e10cSrcweir { 444cdf0e10cSrcweir if ( bUndo && m_pPropChangeList->CanUndo()) 445cdf0e10cSrcweir { 446cdf0e10cSrcweir m_pFormModel->AddUndo(new FmUndoContainerAction(*m_pFormModel, 447cdf0e10cSrcweir FmUndoContainerAction::Removed, 448cdf0e10cSrcweir xContainer, 449cdf0e10cSrcweir xElement, nContainerIndex )); 450cdf0e10cSrcweir } 451cdf0e10cSrcweir else if( !m_pPropChangeList->CanUndo() ) 452cdf0e10cSrcweir { 453cdf0e10cSrcweir FmUndoContainerAction::DisposeElement( xElement ); 454cdf0e10cSrcweir } 455cdf0e10cSrcweir 456cdf0e10cSrcweir xContainer->removeByIndex(nContainerIndex ); 457cdf0e10cSrcweir } 458cdf0e10cSrcweir 459cdf0e10cSrcweir if( bUndo ) 460cdf0e10cSrcweir m_pFormModel->EndUndo(); 461cdf0e10cSrcweir } 462cdf0e10cSrcweir 463cdf0e10cSrcweir // beim Vater austragen 464cdf0e10cSrcweir if (pFolder) 465cdf0e10cSrcweir pFolder->GetChildList()->Remove(pEntry); 466cdf0e10cSrcweir else 467cdf0e10cSrcweir { 468cdf0e10cSrcweir GetRootList()->Remove(pEntry); 469cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 470cdf0e10cSrcweir // Wenn keine Form mehr in der Root, an der Shell CurForm zuruecksetzen 471cdf0e10cSrcweir if (!GetRootList()->Count()) 472cdf0e10cSrcweir m_pFormShell->GetImpl()->forgetCurrentForm(); 473cdf0e10cSrcweir } 474cdf0e10cSrcweir 475cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 476cdf0e10cSrcweir // UI benachrichtigen 477cdf0e10cSrcweir FmNavRemovedHint aRemovedHint( pEntry ); 478cdf0e10cSrcweir Broadcast( aRemovedHint ); 479cdf0e10cSrcweir 480cdf0e10cSrcweir // Eintrag loeschen 481cdf0e10cSrcweir delete pEntry; 482cdf0e10cSrcweir 483cdf0e10cSrcweir m_pPropChangeList->UnLock(); 484cdf0e10cSrcweir StartListening(*m_pFormModel); 485cdf0e10cSrcweir } 486cdf0e10cSrcweir 487cdf0e10cSrcweir //------------------------------------------------------------------------ RemoveForm(FmFormData * pFormData)488cdf0e10cSrcweir void NavigatorTreeModel::RemoveForm(FmFormData* pFormData) 489cdf0e10cSrcweir { 490cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::RemoveForm" ); 491cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 492cdf0e10cSrcweir // Form und Parent holen 493cdf0e10cSrcweir if (!pFormData || !m_pFormModel) 494cdf0e10cSrcweir return; 495cdf0e10cSrcweir 496cdf0e10cSrcweir FmEntryDataList* pChildList = pFormData->GetChildList(); 497cdf0e10cSrcweir sal_uInt32 nCount = pChildList->Count(); 498cdf0e10cSrcweir for (sal_uInt32 i = nCount; i > 0; i--) 499cdf0e10cSrcweir { 500cdf0e10cSrcweir FmEntryData* pEntryData = pChildList->GetObject(i - 1); 501cdf0e10cSrcweir 502cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 503cdf0e10cSrcweir // Child ist Form -> rekursiver Aufruf 504cdf0e10cSrcweir if( pEntryData->ISA(FmFormData) ) 505cdf0e10cSrcweir RemoveForm( (FmFormData*)pEntryData); 506cdf0e10cSrcweir else if( pEntryData->ISA(FmControlData) ) 507cdf0e10cSrcweir RemoveFormComponent((FmControlData*) pEntryData); 508cdf0e10cSrcweir } 509cdf0e10cSrcweir 510cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 511cdf0e10cSrcweir // Als PropertyChangeListener abmelden 512cdf0e10cSrcweir Reference< XPropertySet > xSet( pFormData->GetPropertySet() ); 513cdf0e10cSrcweir if ( xSet.is() ) 514cdf0e10cSrcweir xSet->removePropertyChangeListener( FM_PROP_NAME, m_pPropChangeList ); 515cdf0e10cSrcweir 516cdf0e10cSrcweir Reference< XContainer > xContainer( pFormData->GetContainer() ); 517cdf0e10cSrcweir if (xContainer.is()) 518cdf0e10cSrcweir xContainer->removeContainerListener((XContainerListener*)m_pPropChangeList); 519cdf0e10cSrcweir } 520cdf0e10cSrcweir 521cdf0e10cSrcweir //------------------------------------------------------------------------ RemoveFormComponent(FmControlData * pControlData)522cdf0e10cSrcweir void NavigatorTreeModel::RemoveFormComponent(FmControlData* pControlData) 523cdf0e10cSrcweir { 524cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::RemoveFormComponent" ); 525cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 526cdf0e10cSrcweir // Control und Parent holen 527cdf0e10cSrcweir if (!pControlData) 528cdf0e10cSrcweir return; 529cdf0e10cSrcweir 530cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 531cdf0e10cSrcweir // Als PropertyChangeListener abmelden 532cdf0e10cSrcweir Reference< XPropertySet > xSet( pControlData->GetPropertySet() ); 533cdf0e10cSrcweir if (xSet.is()) 534cdf0e10cSrcweir xSet->removePropertyChangeListener( FM_PROP_NAME, m_pPropChangeList); 535cdf0e10cSrcweir } 536cdf0e10cSrcweir 537cdf0e10cSrcweir //------------------------------------------------------------------------ ClearBranch(FmFormData * pParentData)538cdf0e10cSrcweir void NavigatorTreeModel::ClearBranch( FmFormData* pParentData ) 539cdf0e10cSrcweir { 540cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::ClearBranch" ); 541cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 542cdf0e10cSrcweir // Alle Eintraege dieses Zweiges loeschen 543cdf0e10cSrcweir FmEntryDataList* pChildList = pParentData->GetChildList(); 544cdf0e10cSrcweir FmEntryData* pChildData; 545cdf0e10cSrcweir 546cdf0e10cSrcweir for( sal_uInt32 i=pChildList->Count(); i>0; i-- ) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir pChildData = pChildList->GetObject(i-1); 549cdf0e10cSrcweir if( pChildData->ISA(FmFormData) ) 550cdf0e10cSrcweir ClearBranch( (FmFormData*)pChildData ); 551cdf0e10cSrcweir 552cdf0e10cSrcweir pChildList->Remove( pChildData ); 553cdf0e10cSrcweir } 554cdf0e10cSrcweir } 555cdf0e10cSrcweir 556cdf0e10cSrcweir //------------------------------------------------------------------------ FillBranch(FmFormData * pFormData)557cdf0e10cSrcweir void NavigatorTreeModel::FillBranch( FmFormData* pFormData ) 558cdf0e10cSrcweir { 559cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::FillBranch" ); 560cdf0e10cSrcweir ////////////////////////////////////////////////////////////// 561cdf0e10cSrcweir // Forms aus der Root einfuegen 562cdf0e10cSrcweir if( pFormData == NULL ) 563cdf0e10cSrcweir { 564cdf0e10cSrcweir Reference< XIndexContainer > xForms(GetForms(), UNO_QUERY); 565cdf0e10cSrcweir if (!xForms.is()) 566cdf0e10cSrcweir return; 567cdf0e10cSrcweir 568cdf0e10cSrcweir Reference< XForm > xSubForm; 569cdf0e10cSrcweir FmFormData* pSubFormData; 570cdf0e10cSrcweir for (sal_Int32 i=0; i<xForms->getCount(); ++i) 571cdf0e10cSrcweir { 572cdf0e10cSrcweir DBG_ASSERT( xForms->getByIndex(i).getValueType() == ::getCppuType((const Reference< XForm>*)NULL), 573cdf0e10cSrcweir "NavigatorTreeModel::FillBranch : the root container should supply only elements of type XForm"); 574cdf0e10cSrcweir 575cdf0e10cSrcweir xForms->getByIndex(i) >>= xSubForm; 576cdf0e10cSrcweir pSubFormData = new FmFormData( xSubForm, m_aNormalImages, m_aHCImages, pFormData ); 577cdf0e10cSrcweir Insert( pSubFormData, LIST_APPEND ); 578cdf0e10cSrcweir 579cdf0e10cSrcweir ////////////////////////////////////////////////////////////// 580cdf0e10cSrcweir // Neuer Branch, wenn SubForm wiederum Subforms enthaelt 581cdf0e10cSrcweir FillBranch( pSubFormData ); 582cdf0e10cSrcweir } 583cdf0e10cSrcweir } 584cdf0e10cSrcweir 585cdf0e10cSrcweir ////////////////////////////////////////////////////////////// 586cdf0e10cSrcweir // Componenten einfuegen 587cdf0e10cSrcweir else 588cdf0e10cSrcweir { 589cdf0e10cSrcweir Reference< XIndexContainer > xComponents( GetFormComponents(pFormData)); 590cdf0e10cSrcweir if( !xComponents.is() ) return; 591cdf0e10cSrcweir 592cdf0e10cSrcweir ::rtl::OUString aControlName; 593cdf0e10cSrcweir Reference< XInterface > xInterface; 594cdf0e10cSrcweir Reference< XPropertySet > xSet; 595cdf0e10cSrcweir FmControlData* pNewControlData; 596cdf0e10cSrcweir FmFormData* pSubFormData; 597cdf0e10cSrcweir 598cdf0e10cSrcweir Reference< XFormComponent > xCurrentComponent; 599cdf0e10cSrcweir for (sal_Int32 j=0; j<xComponents->getCount(); ++j) 600cdf0e10cSrcweir { 601cdf0e10cSrcweir xComponents->getByIndex(j) >>= xCurrentComponent; 602cdf0e10cSrcweir Reference< XForm > xSubForm(xCurrentComponent, UNO_QUERY); 603cdf0e10cSrcweir 604cdf0e10cSrcweir if (xSubForm.is()) 605cdf0e10cSrcweir { // die aktuelle Component ist eine Form 606cdf0e10cSrcweir pSubFormData = new FmFormData(xSubForm, m_aNormalImages, m_aHCImages, pFormData); 607cdf0e10cSrcweir Insert(pSubFormData, LIST_APPEND); 608cdf0e10cSrcweir 609cdf0e10cSrcweir ////////////////////////////////////////////////////////////// 610cdf0e10cSrcweir // Neuer Branch, wenn SubForm wiederum Subforms enthaelt 611cdf0e10cSrcweir FillBranch(pSubFormData); 612cdf0e10cSrcweir } 613cdf0e10cSrcweir else 614cdf0e10cSrcweir { 615cdf0e10cSrcweir pNewControlData = new FmControlData(xCurrentComponent, m_aNormalImages, m_aHCImages, pFormData); 616cdf0e10cSrcweir Insert(pNewControlData, LIST_APPEND); 617cdf0e10cSrcweir } 618cdf0e10cSrcweir } 619cdf0e10cSrcweir } 620cdf0e10cSrcweir } 621cdf0e10cSrcweir 622cdf0e10cSrcweir //------------------------------------------------------------------------ InsertForm(const Reference<XForm> & xForm,sal_uInt32 nRelPos)623cdf0e10cSrcweir void NavigatorTreeModel::InsertForm(const Reference< XForm > & xForm, sal_uInt32 nRelPos) 624cdf0e10cSrcweir { 625cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::InsertForm" ); 626cdf0e10cSrcweir FmFormData* pFormData = (FmFormData*)FindData( xForm, GetRootList() ); 627cdf0e10cSrcweir if (pFormData) 628cdf0e10cSrcweir return; 629cdf0e10cSrcweir 630cdf0e10cSrcweir ////////////////////////////////////////////////////////// 631cdf0e10cSrcweir // ParentData setzen 632cdf0e10cSrcweir Reference< XInterface > xIFace( xForm->getParent()); 633cdf0e10cSrcweir Reference< XForm > xParentForm(xIFace, UNO_QUERY); 634cdf0e10cSrcweir FmFormData* pParentData = NULL; 635cdf0e10cSrcweir if (xParentForm.is()) 636cdf0e10cSrcweir pParentData = (FmFormData*)FindData( xParentForm, GetRootList() ); 637cdf0e10cSrcweir 638cdf0e10cSrcweir pFormData = new FmFormData( xForm, m_aNormalImages, m_aHCImages, pParentData ); 639cdf0e10cSrcweir Insert( pFormData, nRelPos ); 640cdf0e10cSrcweir } 641cdf0e10cSrcweir 642cdf0e10cSrcweir //------------------------------------------------------------------------ InsertFormComponent(const Reference<XFormComponent> & xComp,sal_uInt32 nRelPos)643cdf0e10cSrcweir void NavigatorTreeModel::InsertFormComponent(const Reference< XFormComponent > & xComp, sal_uInt32 nRelPos) 644cdf0e10cSrcweir { 645cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::InsertFormComponent" ); 646cdf0e10cSrcweir ////////////////////////////////////////////////////////// 647cdf0e10cSrcweir // ParentData setzen 648cdf0e10cSrcweir Reference< XInterface > xIFace( xComp->getParent()); 649cdf0e10cSrcweir Reference< XForm > xForm(xIFace, UNO_QUERY); 650cdf0e10cSrcweir if (!xForm.is()) 651cdf0e10cSrcweir return; 652cdf0e10cSrcweir 653cdf0e10cSrcweir FmFormData* pParentData = (FmFormData*)FindData( xForm, GetRootList() ); 654cdf0e10cSrcweir if( !pParentData ) 655cdf0e10cSrcweir { 656cdf0e10cSrcweir pParentData = new FmFormData( xForm, m_aNormalImages, m_aHCImages, NULL ); 657cdf0e10cSrcweir Insert( pParentData, LIST_APPEND ); 658cdf0e10cSrcweir } 659cdf0e10cSrcweir 660cdf0e10cSrcweir if (!FindData(xComp, pParentData->GetChildList(),sal_False)) 661cdf0e10cSrcweir { 662cdf0e10cSrcweir ////////////////////////////////////////////////////////// 663cdf0e10cSrcweir // Neue EntryData setzen 664cdf0e10cSrcweir FmEntryData* pNewEntryData = new FmControlData( xComp, m_aNormalImages, m_aHCImages, pParentData ); 665cdf0e10cSrcweir 666cdf0e10cSrcweir ////////////////////////////////////////////////////////// 667cdf0e10cSrcweir // Neue EntryData einfuegen 668cdf0e10cSrcweir Insert( pNewEntryData, nRelPos ); 669cdf0e10cSrcweir } 670cdf0e10cSrcweir } 671cdf0e10cSrcweir 672cdf0e10cSrcweir //------------------------------------------------------------------------ ReplaceFormComponent(const Reference<XFormComponent> & xOld,const Reference<XFormComponent> & xNew)673cdf0e10cSrcweir void NavigatorTreeModel::ReplaceFormComponent(const Reference< XFormComponent > & xOld, const Reference< XFormComponent > & xNew) 674cdf0e10cSrcweir { 675cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::ReplaceFormComponent" ); 676cdf0e10cSrcweir FmEntryData* pData = FindData(xOld, GetRootList(), sal_True); 677cdf0e10cSrcweir DBG_ASSERT(pData && pData->ISA(FmControlData), "NavigatorTreeModel::ReplaceFormComponent : invalid argument !"); 678cdf0e10cSrcweir ((FmControlData*)pData)->ModelReplaced( xNew, m_aNormalImages, m_aHCImages ); 679cdf0e10cSrcweir 680cdf0e10cSrcweir FmNavModelReplacedHint aReplacedHint( pData ); 681cdf0e10cSrcweir Broadcast( aReplacedHint ); 682cdf0e10cSrcweir } 683cdf0e10cSrcweir 684cdf0e10cSrcweir //------------------------------------------------------------------------ FindData(const Reference<XInterface> & xElement,FmEntryDataList * pDataList,sal_Bool bRecurs)685cdf0e10cSrcweir FmEntryData* NavigatorTreeModel::FindData(const Reference< XInterface > & xElement, FmEntryDataList* pDataList, sal_Bool bRecurs) 686cdf0e10cSrcweir { 687cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::FindData" ); 688cdf0e10cSrcweir // normalize 689cdf0e10cSrcweir Reference< XInterface > xIFace( xElement, UNO_QUERY ); 690cdf0e10cSrcweir 691cdf0e10cSrcweir for (sal_uInt16 i=0; i < pDataList->Count(); i++) 692cdf0e10cSrcweir { 693cdf0e10cSrcweir FmEntryData* pEntryData = pDataList->GetObject(i); 694cdf0e10cSrcweir if ( pEntryData->GetElement().get() == xIFace.get() ) 695cdf0e10cSrcweir return pEntryData; 696cdf0e10cSrcweir else if (bRecurs) 697cdf0e10cSrcweir { 698cdf0e10cSrcweir pEntryData = FindData( xElement, pEntryData->GetChildList() ); 699cdf0e10cSrcweir if (pEntryData) 700cdf0e10cSrcweir return pEntryData; 701cdf0e10cSrcweir } 702cdf0e10cSrcweir } 703cdf0e10cSrcweir return NULL; 704cdf0e10cSrcweir } 705cdf0e10cSrcweir 706cdf0e10cSrcweir //------------------------------------------------------------------------ FindData(const::rtl::OUString & rText,FmFormData * pParentData,sal_Bool bRecurs)707cdf0e10cSrcweir FmEntryData* NavigatorTreeModel::FindData( const ::rtl::OUString& rText, FmFormData* pParentData, sal_Bool bRecurs ) 708cdf0e10cSrcweir { 709cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::FindData" ); 710cdf0e10cSrcweir FmEntryDataList* pDataList; 711cdf0e10cSrcweir if( !pParentData ) 712cdf0e10cSrcweir pDataList = GetRootList(); 713cdf0e10cSrcweir else 714cdf0e10cSrcweir pDataList = pParentData->GetChildList(); 715cdf0e10cSrcweir 716cdf0e10cSrcweir ::rtl::OUString aEntryText; 717cdf0e10cSrcweir FmEntryData* pEntryData; 718cdf0e10cSrcweir FmEntryData* pChildData; 719cdf0e10cSrcweir 720cdf0e10cSrcweir for( sal_uInt16 i=0; i<pDataList->Count(); i++ ) 721cdf0e10cSrcweir { 722cdf0e10cSrcweir pEntryData = pDataList->GetObject(i); 723cdf0e10cSrcweir aEntryText = pEntryData->GetText(); 724cdf0e10cSrcweir 725cdf0e10cSrcweir if (rText == aEntryText) 726cdf0e10cSrcweir return pEntryData; 727cdf0e10cSrcweir 728cdf0e10cSrcweir if( bRecurs && pEntryData->ISA(FmFormData) ) 729cdf0e10cSrcweir { 730cdf0e10cSrcweir pChildData = FindData( rText, (FmFormData*)pEntryData ); 731cdf0e10cSrcweir if( pChildData ) 732cdf0e10cSrcweir return pChildData; 733cdf0e10cSrcweir } 734cdf0e10cSrcweir } 735cdf0e10cSrcweir 736cdf0e10cSrcweir return NULL; 737cdf0e10cSrcweir } 738cdf0e10cSrcweir 739cdf0e10cSrcweir //------------------------------------------------------------------------ Notify(SfxBroadcaster &,const SfxHint & rHint)740cdf0e10cSrcweir void NavigatorTreeModel::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint ) 741cdf0e10cSrcweir { 742cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::Notify" ); 743cdf0e10cSrcweir if( rHint.ISA(SdrHint) ) 744cdf0e10cSrcweir { 745cdf0e10cSrcweir SdrHint* pSdrHint = (SdrHint*)&rHint; 746cdf0e10cSrcweir switch( pSdrHint->GetKind() ) 747cdf0e10cSrcweir { 748cdf0e10cSrcweir case HINT_OBJINSERTED: 749cdf0e10cSrcweir InsertSdrObj(pSdrHint->GetObject()); 750cdf0e10cSrcweir break; 751cdf0e10cSrcweir case HINT_OBJREMOVED: 752cdf0e10cSrcweir RemoveSdrObj(pSdrHint->GetObject()); 753cdf0e10cSrcweir break; 754cdf0e10cSrcweir default: 755cdf0e10cSrcweir break; 756cdf0e10cSrcweir } 757cdf0e10cSrcweir } 758cdf0e10cSrcweir // hat sich die shell verabschiedet? 759cdf0e10cSrcweir else if ( rHint.ISA(SfxSimpleHint) && ((SfxSimpleHint&)rHint).GetId() == SFX_HINT_DYING) 760cdf0e10cSrcweir UpdateContent((FmFormShell*)NULL); 761cdf0e10cSrcweir 762cdf0e10cSrcweir // hat sich die Markierung der Controls veraendert ? 763cdf0e10cSrcweir else if (rHint.ISA(FmNavViewMarksChanged)) 764cdf0e10cSrcweir { 765cdf0e10cSrcweir FmNavViewMarksChanged* pvmcHint = (FmNavViewMarksChanged*)&rHint; 766cdf0e10cSrcweir BroadcastMarkedObjects( pvmcHint->GetAffectedView()->GetMarkedObjectList() ); 767cdf0e10cSrcweir } 768cdf0e10cSrcweir } 769cdf0e10cSrcweir 770cdf0e10cSrcweir //------------------------------------------------------------------------ InsertSdrObj(const SdrObject * pObj)771cdf0e10cSrcweir void NavigatorTreeModel::InsertSdrObj( const SdrObject* pObj ) 772cdf0e10cSrcweir { 773cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::InsertSdrObj" ); 774cdf0e10cSrcweir const FmFormObj* pFormObject = FmFormObj::GetFormObject( pObj ); 775cdf0e10cSrcweir if ( pFormObject ) 776cdf0e10cSrcweir { 777cdf0e10cSrcweir try 778cdf0e10cSrcweir { 779cdf0e10cSrcweir Reference< XFormComponent > xFormComponent( pFormObject->GetUnoControlModel(), UNO_QUERY_THROW ); 780cdf0e10cSrcweir Reference< XIndexAccess > xContainer( xFormComponent->getParent(), UNO_QUERY_THROW ); 781cdf0e10cSrcweir 782cdf0e10cSrcweir sal_Int32 nPos = getElementPos( xContainer, xFormComponent ); 783cdf0e10cSrcweir InsertFormComponent( xFormComponent, nPos ); 784cdf0e10cSrcweir } 785cdf0e10cSrcweir catch( const Exception& ) 786cdf0e10cSrcweir { 787cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 788cdf0e10cSrcweir } 789cdf0e10cSrcweir } 790cdf0e10cSrcweir else if ( pObj->IsGroupObject() ) 791cdf0e10cSrcweir { 792cdf0e10cSrcweir SdrObjListIter aIter( *pObj->GetSubList() ); 793cdf0e10cSrcweir while ( aIter.IsMore() ) 794cdf0e10cSrcweir InsertSdrObj( aIter.Next() ); 795cdf0e10cSrcweir } 796cdf0e10cSrcweir } 797cdf0e10cSrcweir 798cdf0e10cSrcweir //------------------------------------------------------------------------ RemoveSdrObj(const SdrObject * pObj)799cdf0e10cSrcweir void NavigatorTreeModel::RemoveSdrObj( const SdrObject* pObj ) 800cdf0e10cSrcweir { 801cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::RemoveSdrObj" ); 802cdf0e10cSrcweir const FmFormObj* pFormObject = FmFormObj::GetFormObject( pObj ); 803cdf0e10cSrcweir if ( pFormObject ) 804cdf0e10cSrcweir { 805cdf0e10cSrcweir try 806cdf0e10cSrcweir { 807cdf0e10cSrcweir Reference< XFormComponent > xFormComponent( pFormObject->GetUnoControlModel(), UNO_QUERY_THROW ); 808cdf0e10cSrcweir FmEntryData* pEntryData = FindData( xFormComponent, GetRootList(), sal_True ); 809cdf0e10cSrcweir if ( pEntryData ) 810cdf0e10cSrcweir Remove( pEntryData ); 811cdf0e10cSrcweir } 812cdf0e10cSrcweir catch( const Exception& ) 813cdf0e10cSrcweir { 814cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 815cdf0e10cSrcweir } 816cdf0e10cSrcweir } 817cdf0e10cSrcweir else if ( pObj->IsGroupObject() ) 818cdf0e10cSrcweir { 819cdf0e10cSrcweir SdrObjListIter aIter( *pObj->GetSubList() ); 820cdf0e10cSrcweir while ( aIter.IsMore() ) 821cdf0e10cSrcweir RemoveSdrObj( aIter.Next() ); 822cdf0e10cSrcweir } 823cdf0e10cSrcweir } 824cdf0e10cSrcweir InsertFormComponent(FmNavRequestSelectHint & rHint,SdrObject * pObject)825cdf0e10cSrcweir sal_Bool NavigatorTreeModel::InsertFormComponent(FmNavRequestSelectHint& rHint, SdrObject* pObject) 826cdf0e10cSrcweir { 827cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::InsertFormComponent" ); 828cdf0e10cSrcweir if ( pObject->ISA(SdrObjGroup) ) 829cdf0e10cSrcweir { // rekursiv absteigen 830cdf0e10cSrcweir const SdrObjList *pChilds = ((SdrObjGroup*)pObject)->GetSubList(); 831cdf0e10cSrcweir for ( sal_uInt16 i=0; i<pChilds->GetObjCount(); ++i ) 832cdf0e10cSrcweir { 833cdf0e10cSrcweir SdrObject* pCurrent = pChilds->GetObj(i); 834cdf0e10cSrcweir if (!InsertFormComponent(rHint, pCurrent)) 835cdf0e10cSrcweir return sal_False; 836cdf0e10cSrcweir } 837cdf0e10cSrcweir } 838cdf0e10cSrcweir else 839cdf0e10cSrcweir { 840cdf0e10cSrcweir FmFormObj* pFormObject = FmFormObj::GetFormObject( pObject ); 841cdf0e10cSrcweir if ( !pFormObject ) 842cdf0e10cSrcweir return sal_False; 843cdf0e10cSrcweir 844cdf0e10cSrcweir try 845cdf0e10cSrcweir { 846cdf0e10cSrcweir Reference< XFormComponent > xFormViewControl( pFormObject->GetUnoControlModel(), UNO_QUERY_THROW ); 847cdf0e10cSrcweir FmEntryData* pControlData = FindData( xFormViewControl, GetRootList() ); 848cdf0e10cSrcweir if ( !pControlData ) 849cdf0e10cSrcweir return sal_False; 850cdf0e10cSrcweir 851cdf0e10cSrcweir rHint.AddItem( pControlData ); 852cdf0e10cSrcweir return sal_True; 853cdf0e10cSrcweir } 854cdf0e10cSrcweir catch( const Exception& ) 855cdf0e10cSrcweir { 856cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 857cdf0e10cSrcweir return sal_False; 858cdf0e10cSrcweir } 859cdf0e10cSrcweir } 860cdf0e10cSrcweir 861cdf0e10cSrcweir return sal_True; 862cdf0e10cSrcweir } 863cdf0e10cSrcweir BroadcastMarkedObjects(const SdrMarkList & mlMarked)864cdf0e10cSrcweir void NavigatorTreeModel::BroadcastMarkedObjects(const SdrMarkList& mlMarked) 865cdf0e10cSrcweir { 866cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::BroadcastMarkedObjects" ); 867cdf0e10cSrcweir // gehen wir durch alle markierten Objekte und suchen wir die raus, mit denen ich was anfangen kann 868cdf0e10cSrcweir FmNavRequestSelectHint rshRequestSelection; 869cdf0e10cSrcweir sal_Bool bIsMixedSelection = sal_False; 870cdf0e10cSrcweir 871cdf0e10cSrcweir for (sal_uLong i=0; (i<mlMarked.GetMarkCount()) && !bIsMixedSelection; i++) 872cdf0e10cSrcweir { 873cdf0e10cSrcweir SdrObject* pobjCurrent = mlMarked.GetMark(i)->GetMarkedSdrObj(); 874cdf0e10cSrcweir bIsMixedSelection |= !InsertFormComponent(rshRequestSelection, pobjCurrent); 875cdf0e10cSrcweir // bei einem Nicht-Form-Control liefert InsertFormComponent sal_False ! 876cdf0e10cSrcweir } 877cdf0e10cSrcweir 878cdf0e10cSrcweir rshRequestSelection.SetMixedSelection(bIsMixedSelection); 879cdf0e10cSrcweir if (bIsMixedSelection) 880cdf0e10cSrcweir rshRequestSelection.ClearItems(); 881cdf0e10cSrcweir 882cdf0e10cSrcweir Broadcast(rshRequestSelection); 883cdf0e10cSrcweir // eine leere Liste interpretiert der NavigatorTree so, dass er seine Selektion komplett rausnimmt 884cdf0e10cSrcweir } 885cdf0e10cSrcweir 886cdf0e10cSrcweir //------------------------------------------------------------------------ UpdateContent(const Reference<XNameContainer> & xForms)887cdf0e10cSrcweir void NavigatorTreeModel::UpdateContent( const Reference< XNameContainer > & xForms ) 888cdf0e10cSrcweir { 889cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::UpdateContent" ); 890cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 891cdf0e10cSrcweir // Model von der Root aufwaerts neu fuellen 892cdf0e10cSrcweir Clear(); 893cdf0e10cSrcweir if (xForms.is()) 894cdf0e10cSrcweir { 895cdf0e10cSrcweir Reference< XContainer > xFormContainer(xForms, UNO_QUERY); 896cdf0e10cSrcweir if (xFormContainer.is()) 897cdf0e10cSrcweir xFormContainer->addContainerListener((XContainerListener*)m_pPropChangeList); 898cdf0e10cSrcweir 899cdf0e10cSrcweir FillBranch(NULL); 900cdf0e10cSrcweir 901cdf0e10cSrcweir // jetzt in meinem Tree genau die das in meiner View markierte Control selektieren 902cdf0e10cSrcweir // (bzw alle solchen), falls es eines gibt ... 903cdf0e10cSrcweir if(!m_pFormShell) return; // keine Shell -> wech 904cdf0e10cSrcweir 905cdf0e10cSrcweir FmFormView* pFormView = m_pFormShell->GetFormView(); 906cdf0e10cSrcweir DBG_ASSERT(pFormView != NULL, "NavigatorTreeModel::UpdateContent : keine FormView"); 907cdf0e10cSrcweir BroadcastMarkedObjects(pFormView->GetMarkedObjectList()); 908cdf0e10cSrcweir } 909cdf0e10cSrcweir } 910cdf0e10cSrcweir 911cdf0e10cSrcweir //------------------------------------------------------------------------ UpdateContent(FmFormShell * pShell)912cdf0e10cSrcweir void NavigatorTreeModel::UpdateContent( FmFormShell* pShell ) 913cdf0e10cSrcweir { 914cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::UpdateContent" ); 915cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 916cdf0e10cSrcweir // Wenn Shell sich nicht veraendert hat, nichts machen 917cdf0e10cSrcweir FmFormPage* pNewPage = pShell ? pShell->GetCurPage() : NULL; 918cdf0e10cSrcweir if ((pShell == m_pFormShell) && (m_pFormPage == pNewPage)) 919cdf0e10cSrcweir return; 920cdf0e10cSrcweir 921cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 922cdf0e10cSrcweir // Als Listener abmelden 923cdf0e10cSrcweir if( m_pFormShell ) 924cdf0e10cSrcweir { 925cdf0e10cSrcweir if (m_pFormModel) 926cdf0e10cSrcweir EndListening( *m_pFormModel ); 927cdf0e10cSrcweir m_pFormModel = NULL; 928cdf0e10cSrcweir EndListening( *m_pFormShell ); 929cdf0e10cSrcweir Clear(); 930cdf0e10cSrcweir } 931cdf0e10cSrcweir 932cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 933cdf0e10cSrcweir // Vollupdate 934cdf0e10cSrcweir m_pFormShell = pShell; 935cdf0e10cSrcweir if (m_pFormShell) 936cdf0e10cSrcweir { 937cdf0e10cSrcweir m_pFormPage = pNewPage; 938cdf0e10cSrcweir UpdateContent(m_pFormPage->GetForms()); 939cdf0e10cSrcweir } else 940cdf0e10cSrcweir m_pFormPage = NULL; 941cdf0e10cSrcweir 942cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 943cdf0e10cSrcweir // Als Listener neu anmelden 944cdf0e10cSrcweir if( m_pFormShell ) 945cdf0e10cSrcweir { 946cdf0e10cSrcweir StartListening( *m_pFormShell ); 947cdf0e10cSrcweir m_pFormModel = m_pFormShell->GetFormModel(); 948cdf0e10cSrcweir if( m_pFormModel ) 949cdf0e10cSrcweir StartListening( *m_pFormModel ); 950cdf0e10cSrcweir } 951cdf0e10cSrcweir } 952cdf0e10cSrcweir 953cdf0e10cSrcweir //------------------------------------------------------------------------ GetFormComponents(FmFormData * pFormData)954cdf0e10cSrcweir Reference< XIndexContainer > NavigatorTreeModel::GetFormComponents( FmFormData* pFormData ) 955cdf0e10cSrcweir { 956cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::GetFormComponents" ); 957cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 958cdf0e10cSrcweir // Von der Form Components holen 959cdf0e10cSrcweir if (pFormData) 960cdf0e10cSrcweir return Reference< XIndexContainer > (pFormData->GetFormIface(), UNO_QUERY); 961cdf0e10cSrcweir 962cdf0e10cSrcweir return Reference< XIndexContainer > (); 963cdf0e10cSrcweir } 964cdf0e10cSrcweir 965cdf0e10cSrcweir //------------------------------------------------------------------------ CheckEntry(FmEntryData * pEntryData)966cdf0e10cSrcweir sal_Bool NavigatorTreeModel::CheckEntry( FmEntryData* pEntryData ) 967cdf0e10cSrcweir { 968cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::CheckEntry" ); 969cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 970cdf0e10cSrcweir // Nur Forms duerfen auf Doppeldeutigkeit untersucht werden 971cdf0e10cSrcweir if( !pEntryData->ISA(FmFormData) ) return sal_True; 972cdf0e10cSrcweir 973cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 974cdf0e10cSrcweir // ChildListe des Parents holen 975cdf0e10cSrcweir FmFormData* pParentData = (FmFormData*)pEntryData->GetParent(); 976cdf0e10cSrcweir FmEntryDataList* pChildList; 977cdf0e10cSrcweir if( !pParentData ) 978cdf0e10cSrcweir pChildList = GetRootList(); 979cdf0e10cSrcweir else 980cdf0e10cSrcweir pChildList = pParentData->GetChildList(); 981cdf0e10cSrcweir 982cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 983cdf0e10cSrcweir // In ChildListe nach doppelten Namen suchen 984cdf0e10cSrcweir ::rtl::OUString aChildText; 985cdf0e10cSrcweir FmEntryData* pChildData; 986cdf0e10cSrcweir 987cdf0e10cSrcweir for( sal_uInt16 i=0; i<pChildList->Count(); i++ ) 988cdf0e10cSrcweir { 989cdf0e10cSrcweir pChildData = pChildList->GetObject(i); 990cdf0e10cSrcweir aChildText = pChildData->GetText(); 991cdf0e10cSrcweir 992cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 993cdf0e10cSrcweir // Gleichen Eintrag gefunden 994cdf0e10cSrcweir if ( (aChildText == pEntryData->GetText()) 995cdf0e10cSrcweir && (pEntryData!=pChildData) 996cdf0e10cSrcweir ) 997cdf0e10cSrcweir { 998cdf0e10cSrcweir 999cdf0e10cSrcweir 1000cdf0e10cSrcweir SQLContext aError; 1001cdf0e10cSrcweir aError.Message = String(SVX_RES(RID_ERR_CONTEXT_ADDFORM)); 1002cdf0e10cSrcweir aError.Details = String(SVX_RES(RID_ERR_DUPLICATE_NAME)); 1003cdf0e10cSrcweir displayException(aError); 1004cdf0e10cSrcweir 1005cdf0e10cSrcweir return sal_False; 1006cdf0e10cSrcweir } 1007cdf0e10cSrcweir } 1008cdf0e10cSrcweir 1009cdf0e10cSrcweir return sal_True; 1010cdf0e10cSrcweir } 1011cdf0e10cSrcweir 1012cdf0e10cSrcweir //------------------------------------------------------------------------ Rename(FmEntryData * pEntryData,const::rtl::OUString & rNewText)1013cdf0e10cSrcweir sal_Bool NavigatorTreeModel::Rename( FmEntryData* pEntryData, const ::rtl::OUString& rNewText ) 1014cdf0e10cSrcweir { 1015cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::Rename" ); 1016cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1017cdf0e10cSrcweir // Wenn Name schon vorhanden, Fehlermeldung 1018cdf0e10cSrcweir pEntryData->SetText( rNewText ); 1019cdf0e10cSrcweir 1020cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1021cdf0e10cSrcweir // PropertySet besorgen 1022cdf0e10cSrcweir Reference< XFormComponent > xFormComponent; 1023cdf0e10cSrcweir 1024cdf0e10cSrcweir if( pEntryData->ISA(FmFormData) ) 1025cdf0e10cSrcweir { 1026cdf0e10cSrcweir FmFormData* pFormData = (FmFormData*)pEntryData; 1027cdf0e10cSrcweir Reference< XForm > xForm( pFormData->GetFormIface()); 1028cdf0e10cSrcweir xFormComponent = Reference< XFormComponent > (xForm, UNO_QUERY); 1029cdf0e10cSrcweir } 1030cdf0e10cSrcweir 1031cdf0e10cSrcweir if( pEntryData->ISA(FmControlData) ) 1032cdf0e10cSrcweir { 1033cdf0e10cSrcweir FmControlData* pControlData = (FmControlData*)pEntryData; 1034cdf0e10cSrcweir xFormComponent = pControlData->GetFormComponent(); 1035cdf0e10cSrcweir } 1036cdf0e10cSrcweir 1037cdf0e10cSrcweir if( !xFormComponent.is() ) return sal_False; 1038cdf0e10cSrcweir Reference< XPropertySet > xSet(xFormComponent, UNO_QUERY); 1039cdf0e10cSrcweir if( !xSet.is() ) return sal_False; 1040cdf0e10cSrcweir 1041cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1042cdf0e10cSrcweir // Namen setzen 1043cdf0e10cSrcweir xSet->setPropertyValue( FM_PROP_NAME, makeAny(rNewText) ); 1044cdf0e10cSrcweir 1045cdf0e10cSrcweir return sal_True; 1046cdf0e10cSrcweir } 1047cdf0e10cSrcweir 1048cdf0e10cSrcweir //------------------------------------------------------------------------ IsNameAlreadyDefined(const::rtl::OUString & rName,FmFormData * pParentData)1049cdf0e10cSrcweir sal_Bool NavigatorTreeModel::IsNameAlreadyDefined( const ::rtl::OUString& rName, FmFormData* pParentData ) 1050cdf0e10cSrcweir { 1051cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::IsNameAlreadyDefined" ); 1052cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1053cdf0e10cSrcweir // Form in der Root 1054cdf0e10cSrcweir if( !pParentData ) 1055cdf0e10cSrcweir { 1056cdf0e10cSrcweir if (GetForms()->hasByName(rName)) 1057cdf0e10cSrcweir return sal_True; 1058cdf0e10cSrcweir } 1059cdf0e10cSrcweir 1060cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1061cdf0e10cSrcweir // Restliche Components 1062cdf0e10cSrcweir else 1063cdf0e10cSrcweir { 1064cdf0e10cSrcweir Reference< XNameContainer > xFormComponents(GetFormComponents(pParentData), UNO_QUERY); 1065cdf0e10cSrcweir if (xFormComponents.is() && xFormComponents->hasByName(rName)) 1066cdf0e10cSrcweir return sal_True; 1067cdf0e10cSrcweir } 1068cdf0e10cSrcweir 1069cdf0e10cSrcweir return sal_False; 1070cdf0e10cSrcweir } 1071cdf0e10cSrcweir 1072cdf0e10cSrcweir //------------------------------------------------------------------------ GetSdrObj(FmControlData * pControlData)1073cdf0e10cSrcweir SdrObject* NavigatorTreeModel::GetSdrObj( FmControlData* pControlData ) 1074cdf0e10cSrcweir { 1075cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::GetSdrObj" ); 1076cdf0e10cSrcweir if (!pControlData || !m_pFormShell) 1077cdf0e10cSrcweir return NULL; 1078cdf0e10cSrcweir 1079cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////// 1080cdf0e10cSrcweir // In der Page das entsprechende SdrObj finden und selektieren 1081cdf0e10cSrcweir Reference< XFormComponent > xFormComponent( pControlData->GetFormComponent()); 1082cdf0e10cSrcweir if (!xFormComponent.is()) 1083cdf0e10cSrcweir return NULL; 1084cdf0e10cSrcweir 1085cdf0e10cSrcweir FmFormView* pFormView = m_pFormShell->GetFormView(); 1086cdf0e10cSrcweir SdrPageView* pPageView = pFormView->GetSdrPageView(); 1087cdf0e10cSrcweir SdrPage* pPage = pPageView->GetPage(); 1088cdf0e10cSrcweir 1089cdf0e10cSrcweir SdrObjListIter aIter( *pPage ); 1090cdf0e10cSrcweir return Search(aIter, xFormComponent); 1091cdf0e10cSrcweir } 1092cdf0e10cSrcweir 1093cdf0e10cSrcweir //------------------------------------------------------------------ Search(SdrObjListIter & rIter,const Reference<XFormComponent> & xComp)1094cdf0e10cSrcweir SdrObject* NavigatorTreeModel::Search(SdrObjListIter& rIter, const Reference< XFormComponent > & xComp) 1095cdf0e10cSrcweir { 1096cdf0e10cSrcweir RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "svx", "Ocke.Janssen@sun.com", "NavigatorTreeModel::Search" ); 1097cdf0e10cSrcweir while (rIter.IsMore()) 1098cdf0e10cSrcweir { 1099cdf0e10cSrcweir SdrObject* pObj = rIter.Next(); 1100cdf0e10cSrcweir FmFormObj* pFormObject = FmFormObj::GetFormObject( pObj ); 1101cdf0e10cSrcweir if ( pFormObject ) 1102cdf0e10cSrcweir { 1103cdf0e10cSrcweir Reference< XFormComponent > xFormViewControl( pFormObject->GetUnoControlModel(), UNO_QUERY ); 1104cdf0e10cSrcweir if ( xFormViewControl == xComp ) 1105cdf0e10cSrcweir return pObj; 1106cdf0e10cSrcweir } 1107cdf0e10cSrcweir else if ( pObj->IsGroupObject() ) 1108cdf0e10cSrcweir { 1109cdf0e10cSrcweir SdrObjListIter aIter( *pObj->GetSubList() ); 1110cdf0e10cSrcweir pObj = Search( aIter, xComp ); 1111cdf0e10cSrcweir if ( pObj ) 1112cdf0e10cSrcweir return pObj; 1113cdf0e10cSrcweir } 1114cdf0e10cSrcweir } 1115cdf0e10cSrcweir return NULL; 1116cdf0e10cSrcweir } 1117cdf0e10cSrcweir 1118cdf0e10cSrcweir //............................................................................ 1119cdf0e10cSrcweir } // namespace svxform 1120cdf0e10cSrcweir //............................................................................ 1121cdf0e10cSrcweir 1122cdf0e10cSrcweir 1123