1*31598a22SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*31598a22SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*31598a22SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*31598a22SAndrew Rist * distributed with this work for additional information 6*31598a22SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*31598a22SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*31598a22SAndrew Rist * "License"); you may not use this file except in compliance 9*31598a22SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*31598a22SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*31598a22SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*31598a22SAndrew Rist * software distributed under the License is distributed on an 15*31598a22SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*31598a22SAndrew Rist * KIND, either express or implied. See the License for the 17*31598a22SAndrew Rist * specific language governing permissions and limitations 18*31598a22SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*31598a22SAndrew Rist *************************************************************/ 21*31598a22SAndrew Rist 22*31598a22SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_basctl.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include <memory> 28cdf0e10cSrcweir 29cdf0e10cSrcweir #include <ide_pch.hxx> 30cdf0e10cSrcweir 31cdf0e10cSrcweir 32cdf0e10cSrcweir #include <moduldlg.hrc> 33cdf0e10cSrcweir #include <moduldlg.hxx> 34cdf0e10cSrcweir #include <basidesh.hrc> 35cdf0e10cSrcweir #include <basidesh.hxx> 36cdf0e10cSrcweir #include <bastypes.hxx> 37cdf0e10cSrcweir #include <baside3.hxx> 38cdf0e10cSrcweir #include <basobj.hxx> 39cdf0e10cSrcweir #include <baside2.hrc> 40cdf0e10cSrcweir #include <sbxitem.hxx> 41cdf0e10cSrcweir #include <iderdll.hxx> 42cdf0e10cSrcweir 43cdf0e10cSrcweir #ifndef _COM_SUN_STAR_IO_XINPUTSTREAMPROVIDER_HXX_ 44cdf0e10cSrcweir #include <com/sun/star/io/XInputStreamProvider.hpp> 45cdf0e10cSrcweir #endif 46cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SCRIPT_XLIBRYARYCONTAINER2_HPP_ 47cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer2.hpp> 48cdf0e10cSrcweir #endif 49cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainerPassword.hpp> 50cdf0e10cSrcweir #include <com/sun/star/resource/XStringResourceManager.hpp> 51cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp> 52cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 53cdf0e10cSrcweir #include <xmlscript/xmldlg_imexp.hxx> 54cdf0e10cSrcweir 55cdf0e10cSrcweir #include "localizationmgr.hxx" 56cdf0e10cSrcweir #include <basic/sbx.hxx> 57cdf0e10cSrcweir #include <tools/diagnose_ex.h> 58cdf0e10cSrcweir 59cdf0e10cSrcweir using namespace ::com::sun::star; 60cdf0e10cSrcweir using namespace ::com::sun::star::uno; 61cdf0e10cSrcweir using namespace ::com::sun::star::lang; 62cdf0e10cSrcweir using namespace ::com::sun::star::resource; 63cdf0e10cSrcweir 64cdf0e10cSrcweir 65cdf0e10cSrcweir ExtBasicTreeListBox::ExtBasicTreeListBox( Window* pParent, const ResId& rRes ) 66cdf0e10cSrcweir : BasicTreeListBox( pParent, rRes ) 67cdf0e10cSrcweir { 68cdf0e10cSrcweir } 69cdf0e10cSrcweir 70cdf0e10cSrcweir 71cdf0e10cSrcweir 72cdf0e10cSrcweir ExtBasicTreeListBox::~ExtBasicTreeListBox() 73cdf0e10cSrcweir { 74cdf0e10cSrcweir } 75cdf0e10cSrcweir 76cdf0e10cSrcweir sal_Bool __EXPORT ExtBasicTreeListBox::EditingEntry( SvLBoxEntry* pEntry, Selection& ) 77cdf0e10cSrcweir { 78cdf0e10cSrcweir sal_Bool bRet = sal_False; 79cdf0e10cSrcweir 80cdf0e10cSrcweir if ( pEntry ) 81cdf0e10cSrcweir { 82cdf0e10cSrcweir sal_uInt16 nDepth = GetModel()->GetDepth( pEntry ); 83cdf0e10cSrcweir if ( nDepth >= 2 ) 84cdf0e10cSrcweir { 85cdf0e10cSrcweir BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); 86cdf0e10cSrcweir ScriptDocument aDocument( aDesc.GetDocument() ); 87cdf0e10cSrcweir ::rtl::OUString aOULibName( aDesc.GetLibName() ); 88cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); 89cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); 90cdf0e10cSrcweir if ( !( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) || 91cdf0e10cSrcweir ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) ) ) 92cdf0e10cSrcweir { 93cdf0e10cSrcweir // allow editing only for libraries, which are not readonly 94cdf0e10cSrcweir bRet = sal_True; 95cdf0e10cSrcweir } 96cdf0e10cSrcweir } 97cdf0e10cSrcweir } 98cdf0e10cSrcweir 99cdf0e10cSrcweir return bRet; 100cdf0e10cSrcweir } 101cdf0e10cSrcweir 102cdf0e10cSrcweir sal_Bool __EXPORT ExtBasicTreeListBox::EditedEntry( SvLBoxEntry* pEntry, const String& rNewText ) 103cdf0e10cSrcweir { 104cdf0e10cSrcweir sal_Bool bValid = BasicIDE::IsValidSbxName( rNewText ); 105cdf0e10cSrcweir if ( !bValid ) 106cdf0e10cSrcweir { 107cdf0e10cSrcweir ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_BADSBXNAME ) ) ).Execute(); 108cdf0e10cSrcweir return sal_False; 109cdf0e10cSrcweir } 110cdf0e10cSrcweir 111cdf0e10cSrcweir String aCurText( GetEntryText( pEntry ) ); 112cdf0e10cSrcweir if ( aCurText == rNewText ) 113cdf0e10cSrcweir // nothing to do 114cdf0e10cSrcweir return sal_True; 115cdf0e10cSrcweir 116cdf0e10cSrcweir BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); 117cdf0e10cSrcweir ScriptDocument aDocument( aDesc.GetDocument() ); 118cdf0e10cSrcweir DBG_ASSERT( aDocument.isValid(), "ExtBasicTreeListBox::EditedEntry: no document!" ); 119cdf0e10cSrcweir if ( !aDocument.isValid() ) 120cdf0e10cSrcweir return sal_False; 121cdf0e10cSrcweir String aLibName( aDesc.GetLibName() ); 122cdf0e10cSrcweir BasicEntryType eType( aDesc.GetType() ); 123cdf0e10cSrcweir 124cdf0e10cSrcweir bool bSuccess = ( eType == OBJ_TYPE_MODULE ) 125cdf0e10cSrcweir ? BasicIDE::RenameModule( this, aDocument, aLibName, aCurText, rNewText ) 126cdf0e10cSrcweir : BasicIDE::RenameDialog( this, aDocument, aLibName, aCurText, rNewText ); 127cdf0e10cSrcweir 128cdf0e10cSrcweir if ( !bSuccess ) 129cdf0e10cSrcweir return sal_False; 130cdf0e10cSrcweir 131cdf0e10cSrcweir BasicIDE::MarkDocumentModified( aDocument ); 132cdf0e10cSrcweir 133cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 134cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 135cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 136cdf0e10cSrcweir if( pDispatcher ) 137cdf0e10cSrcweir { 138cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, rNewText, ConvertType( eType ) ); 139cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SBXRENAMED, 140cdf0e10cSrcweir SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 141cdf0e10cSrcweir } 142cdf0e10cSrcweir 143cdf0e10cSrcweir // OV-Bug?! 144cdf0e10cSrcweir SetEntryText( pEntry, rNewText ); 145cdf0e10cSrcweir SetCurEntry( pEntry ); 146cdf0e10cSrcweir SetCurEntry( pEntry ); 147cdf0e10cSrcweir Select( pEntry, sal_False ); 148cdf0e10cSrcweir Select( pEntry ); // damit Handler gerufen wird => Edit updaten 149cdf0e10cSrcweir 150cdf0e10cSrcweir return sal_True; 151cdf0e10cSrcweir } 152cdf0e10cSrcweir 153cdf0e10cSrcweir 154cdf0e10cSrcweir DragDropMode __EXPORT ExtBasicTreeListBox::NotifyStartDrag( TransferDataContainer&, SvLBoxEntry* pEntry ) 155cdf0e10cSrcweir { 156cdf0e10cSrcweir DragDropMode nMode_ = SV_DRAGDROP_NONE; 157cdf0e10cSrcweir 158cdf0e10cSrcweir if ( pEntry ) 159cdf0e10cSrcweir { 160cdf0e10cSrcweir sal_uInt16 nDepth = GetModel()->GetDepth( pEntry ); 161cdf0e10cSrcweir if ( nDepth >= 2 ) 162cdf0e10cSrcweir { 163cdf0e10cSrcweir nMode_ = SV_DRAGDROP_CTRL_COPY; 164cdf0e10cSrcweir BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); 165cdf0e10cSrcweir ScriptDocument aDocument( aDesc.GetDocument() ); 166cdf0e10cSrcweir ::rtl::OUString aOULibName( aDesc.GetLibName() ); 167cdf0e10cSrcweir // allow MOVE mode only for libraries, which are not readonly 168cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); 169cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); 170cdf0e10cSrcweir if ( !( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) || 171cdf0e10cSrcweir ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) ) ) 172cdf0e10cSrcweir { 173cdf0e10cSrcweir // Only allow copy for localized libraries 174cdf0e10cSrcweir bool bAllowMove = true; 175cdf0e10cSrcweir if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) ) 176cdf0e10cSrcweir { 177cdf0e10cSrcweir // Get StringResourceManager 178cdf0e10cSrcweir Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, aOULibName, sal_True ) ); 179cdf0e10cSrcweir Reference< XStringResourceManager > xSourceMgr = 180cdf0e10cSrcweir LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib ); 181cdf0e10cSrcweir if( xSourceMgr.is() ) 182cdf0e10cSrcweir bAllowMove = ( xSourceMgr->getLocales().getLength() == 0 ); 183cdf0e10cSrcweir } 184cdf0e10cSrcweir if( bAllowMove ) 185cdf0e10cSrcweir nMode_ |= SV_DRAGDROP_CTRL_MOVE; 186cdf0e10cSrcweir } 187cdf0e10cSrcweir } 188cdf0e10cSrcweir } 189cdf0e10cSrcweir 190cdf0e10cSrcweir return nMode_; 191cdf0e10cSrcweir } 192cdf0e10cSrcweir 193cdf0e10cSrcweir 194cdf0e10cSrcweir sal_Bool __EXPORT ExtBasicTreeListBox::NotifyAcceptDrop( SvLBoxEntry* pEntry ) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir // don't drop on a BasicManager (nDepth == 0) 197cdf0e10cSrcweir sal_uInt16 nDepth = pEntry ? GetModel()->GetDepth( pEntry ) : 0; 198cdf0e10cSrcweir sal_Bool bValid = nDepth ? sal_True : sal_False; 199cdf0e10cSrcweir 200cdf0e10cSrcweir // don't drop in the same library 201cdf0e10cSrcweir SvLBoxEntry* pSelected = FirstSelected(); 202cdf0e10cSrcweir if ( ( nDepth == 1 ) && ( pEntry == GetParent( pSelected ) ) ) 203cdf0e10cSrcweir bValid = sal_False; 204cdf0e10cSrcweir else if ( ( nDepth == 2 ) && ( GetParent( pEntry ) == GetParent( pSelected ) ) ) 205cdf0e10cSrcweir bValid = sal_False; 206cdf0e10cSrcweir 207cdf0e10cSrcweir // don't drop on a library, which is not loaded, readonly or password protected 208cdf0e10cSrcweir // or which already has a module/dialog with this name 209cdf0e10cSrcweir if ( bValid && ( nDepth > 0 ) ) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir // get source module/dialog name 212cdf0e10cSrcweir BasicEntryDescriptor aSourceDesc( GetEntryDescriptor( pSelected ) ); 213cdf0e10cSrcweir String aSourceName( aSourceDesc.GetName() ); 214cdf0e10cSrcweir BasicEntryType eSourceType( aSourceDesc.GetType() ); 215cdf0e10cSrcweir 216cdf0e10cSrcweir // get target shell and target library name 217cdf0e10cSrcweir BasicEntryDescriptor aDestDesc( GetEntryDescriptor( pEntry ) ); 218cdf0e10cSrcweir const ScriptDocument& rDestDoc( aDestDesc.GetDocument() ); 219cdf0e10cSrcweir String aDestLibName( aDestDesc.GetLibName() ); 220cdf0e10cSrcweir ::rtl::OUString aOUDestLibName( aDestLibName ); 221cdf0e10cSrcweir 222cdf0e10cSrcweir // check if module library is not loaded, readonly or password protected 223cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xModLibContainer( rDestDoc.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); 224cdf0e10cSrcweir if ( xModLibContainer.is() && xModLibContainer->hasByName( aOUDestLibName ) ) 225cdf0e10cSrcweir { 226cdf0e10cSrcweir if ( !xModLibContainer->isLibraryLoaded( aOUDestLibName ) ) 227cdf0e10cSrcweir bValid = sal_False; 228cdf0e10cSrcweir 229cdf0e10cSrcweir if ( xModLibContainer->isLibraryReadOnly( aOUDestLibName ) ) 230cdf0e10cSrcweir bValid = sal_False; 231cdf0e10cSrcweir 232cdf0e10cSrcweir Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY ); 233cdf0e10cSrcweir if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aOUDestLibName ) && !xPasswd->isLibraryPasswordVerified( aOUDestLibName ) ) 234cdf0e10cSrcweir bValid = sal_False; 235cdf0e10cSrcweir } 236cdf0e10cSrcweir 237cdf0e10cSrcweir // check if dialog library is not loaded or readonly 238cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xDlgLibContainer( rDestDoc.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); 239cdf0e10cSrcweir if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOUDestLibName ) ) 240cdf0e10cSrcweir { 241cdf0e10cSrcweir if ( !xDlgLibContainer->isLibraryLoaded( aOUDestLibName ) ) 242cdf0e10cSrcweir bValid = sal_False; 243cdf0e10cSrcweir 244cdf0e10cSrcweir if ( xDlgLibContainer->isLibraryReadOnly( aOUDestLibName ) ) 245cdf0e10cSrcweir bValid = sal_False; 246cdf0e10cSrcweir } 247cdf0e10cSrcweir 248cdf0e10cSrcweir // check, if module/dialog with this name is already existing in target library 249cdf0e10cSrcweir if ( ( eSourceType == OBJ_TYPE_MODULE && rDestDoc.hasModule( aDestLibName, aSourceName ) ) || 250cdf0e10cSrcweir ( eSourceType == OBJ_TYPE_DIALOG && rDestDoc.hasDialog( aDestLibName, aSourceName ) ) ) 251cdf0e10cSrcweir { 252cdf0e10cSrcweir bValid = sal_False; 253cdf0e10cSrcweir } 254cdf0e10cSrcweir } 255cdf0e10cSrcweir 256cdf0e10cSrcweir return bValid; 257cdf0e10cSrcweir } 258cdf0e10cSrcweir 259cdf0e10cSrcweir 260cdf0e10cSrcweir sal_Bool __EXPORT ExtBasicTreeListBox::NotifyMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, 261cdf0e10cSrcweir SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos ) 262cdf0e10cSrcweir { 263cdf0e10cSrcweir return NotifyCopyingMoving( pTarget, pEntry, 264cdf0e10cSrcweir rpNewParent, rNewChildPos, sal_True ); 265cdf0e10cSrcweir } 266cdf0e10cSrcweir 267cdf0e10cSrcweir 268cdf0e10cSrcweir sal_Bool __EXPORT ExtBasicTreeListBox::NotifyCopying( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, 269cdf0e10cSrcweir SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos ) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir // return sal_False; // Wie kopiere ich ein SBX ?! 272cdf0e10cSrcweir return NotifyCopyingMoving( pTarget, pEntry, 273cdf0e10cSrcweir rpNewParent, rNewChildPos, sal_False ); 274cdf0e10cSrcweir } 275cdf0e10cSrcweir 276cdf0e10cSrcweir 277cdf0e10cSrcweir void BasicIDEShell::CopyDialogResources( Reference< io::XInputStreamProvider >& io_xISP, 278cdf0e10cSrcweir const ScriptDocument& rSourceDoc, const String& rSourceLibName, const ScriptDocument& rDestDoc, 279cdf0e10cSrcweir const String& rDestLibName, const String& rDlgName ) 280cdf0e10cSrcweir { 281cdf0e10cSrcweir if ( !io_xISP.is() ) 282cdf0e10cSrcweir return; 283cdf0e10cSrcweir 284cdf0e10cSrcweir // Get StringResourceManager 285cdf0e10cSrcweir Reference< container::XNameContainer > xSourceDialogLib( rSourceDoc.getLibrary( E_DIALOGS, rSourceLibName, sal_True ) ); 286cdf0e10cSrcweir Reference< XStringResourceManager > xSourceMgr = 287cdf0e10cSrcweir LocalizationMgr::getStringResourceFromDialogLibrary( xSourceDialogLib ); 288cdf0e10cSrcweir if( !xSourceMgr.is() ) 289cdf0e10cSrcweir return; 290cdf0e10cSrcweir bool bSourceLocalized = ( xSourceMgr->getLocales().getLength() > 0 ); 291cdf0e10cSrcweir 292cdf0e10cSrcweir Reference< container::XNameContainer > xDestDialogLib( rDestDoc.getLibrary( E_DIALOGS, rDestLibName, sal_True ) ); 293cdf0e10cSrcweir Reference< XStringResourceManager > xDestMgr = 294cdf0e10cSrcweir LocalizationMgr::getStringResourceFromDialogLibrary( xDestDialogLib ); 295cdf0e10cSrcweir if( !xDestMgr.is() ) 296cdf0e10cSrcweir return; 297cdf0e10cSrcweir bool bDestLocalized = ( xDestMgr->getLocales().getLength() > 0 ); 298cdf0e10cSrcweir 299cdf0e10cSrcweir if( !bSourceLocalized && !bDestLocalized ) 300cdf0e10cSrcweir return; 301cdf0e10cSrcweir 302cdf0e10cSrcweir // create dialog model 303cdf0e10cSrcweir Reference< lang::XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); 304cdf0e10cSrcweir Reference< container::XNameContainer > xDialogModel = Reference< container::XNameContainer >( xMSF->createInstance 305cdf0e10cSrcweir ( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ), UNO_QUERY ); 306cdf0e10cSrcweir Reference< io::XInputStream > xInput( io_xISP->createInputStream() ); 307cdf0e10cSrcweir Reference< XComponentContext > xContext; 308cdf0e10cSrcweir Reference< beans::XPropertySet > xProps( xMSF, UNO_QUERY ); 309cdf0e10cSrcweir OSL_ASSERT( xProps.is() ); 310cdf0e10cSrcweir OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext ); 311cdf0e10cSrcweir ::xmlscript::importDialogModel( xInput, xDialogModel, xContext ); 312cdf0e10cSrcweir 313cdf0e10cSrcweir if( xDialogModel.is() ) 314cdf0e10cSrcweir { 315cdf0e10cSrcweir if( bSourceLocalized && bDestLocalized ) 316cdf0e10cSrcweir { 317cdf0e10cSrcweir Reference< resource::XStringResourceResolver > xSourceStringResolver( xSourceMgr, UNO_QUERY ); 318cdf0e10cSrcweir LocalizationMgr::copyResourceForDroppedDialog( xDialogModel, rDlgName, xDestMgr, xSourceStringResolver ); 319cdf0e10cSrcweir } 320cdf0e10cSrcweir else if( bSourceLocalized ) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir LocalizationMgr::resetResourceForDialog( xDialogModel, xSourceMgr ); 323cdf0e10cSrcweir } 324cdf0e10cSrcweir else if( bDestLocalized ) 325cdf0e10cSrcweir { 326cdf0e10cSrcweir LocalizationMgr::setResourceIDsForDialog( xDialogModel, xDestMgr ); 327cdf0e10cSrcweir } 328cdf0e10cSrcweir io_xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext ); 329cdf0e10cSrcweir } 330cdf0e10cSrcweir } 331cdf0e10cSrcweir 332cdf0e10cSrcweir 333cdf0e10cSrcweir sal_Bool __EXPORT ExtBasicTreeListBox::NotifyCopyingMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, 334cdf0e10cSrcweir SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos, sal_Bool bMove ) 335cdf0e10cSrcweir { 336cdf0e10cSrcweir (void)pEntry; 337cdf0e10cSrcweir DBG_ASSERT( pEntry, "Kein Eintrag?" ); // Hier ASS ok, sollte nicht mit 338cdf0e10cSrcweir DBG_ASSERT( pTarget, "Kein Ziel?" ); // NULL (ganz vorne) erreicht werden 339cdf0e10cSrcweir sal_uInt16 nDepth = GetModel()->GetDepth( pTarget ); 340cdf0e10cSrcweir DBG_ASSERT( nDepth, "Tiefe?" ); 341cdf0e10cSrcweir if ( nDepth == 1 ) 342cdf0e10cSrcweir { 343cdf0e10cSrcweir // Target = Basic => Modul/Dialog unter das Basic haengen... 344cdf0e10cSrcweir rpNewParent = pTarget; 345cdf0e10cSrcweir rNewChildPos = 0; 346cdf0e10cSrcweir } 347cdf0e10cSrcweir else if ( nDepth >= 2 ) 348cdf0e10cSrcweir { 349cdf0e10cSrcweir // Target = Modul/Dialog => Modul/Dialog unter das uebergeordnete Basic haengen... 350cdf0e10cSrcweir rpNewParent = GetParent( pTarget ); 351cdf0e10cSrcweir rNewChildPos = GetModel()->GetRelPos( pTarget ) + 1; 352cdf0e10cSrcweir } 353cdf0e10cSrcweir 354cdf0e10cSrcweir // get target shell and target library name 355cdf0e10cSrcweir BasicEntryDescriptor aDestDesc( GetEntryDescriptor( rpNewParent ) ); 356cdf0e10cSrcweir const ScriptDocument& rDestDoc( aDestDesc.GetDocument() ); 357cdf0e10cSrcweir String aDestLibName( aDestDesc.GetLibName() ); 358cdf0e10cSrcweir 359cdf0e10cSrcweir // get source shell, library name and module/dialog name 360cdf0e10cSrcweir BasicEntryDescriptor aSourceDesc( GetEntryDescriptor( FirstSelected() ) ); 361cdf0e10cSrcweir const ScriptDocument rSourceDoc( aSourceDesc.GetDocument() ); 362cdf0e10cSrcweir String aSourceLibName( aSourceDesc.GetLibName() ); 363cdf0e10cSrcweir String aSourceName( aSourceDesc.GetName() ); 364cdf0e10cSrcweir BasicEntryType eType( aSourceDesc.GetType() ); 365cdf0e10cSrcweir 366cdf0e10cSrcweir // get dispatcher 367cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 368cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 369cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 370cdf0e10cSrcweir 371cdf0e10cSrcweir if ( bMove ) // move 372cdf0e10cSrcweir { 373cdf0e10cSrcweir // remove source module/dialog window 374cdf0e10cSrcweir if ( rSourceDoc != rDestDoc || aSourceLibName != aDestLibName ) 375cdf0e10cSrcweir { 376cdf0e10cSrcweir if( pDispatcher ) 377cdf0e10cSrcweir { 378cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rSourceDoc, aSourceLibName, aSourceName, ConvertType( eType ) ); 379cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SBXDELETED, 380cdf0e10cSrcweir SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 381cdf0e10cSrcweir } 382cdf0e10cSrcweir } 383cdf0e10cSrcweir 384cdf0e10cSrcweir try 385cdf0e10cSrcweir { 386cdf0e10cSrcweir if ( eType == OBJ_TYPE_MODULE ) // module 387cdf0e10cSrcweir { 388cdf0e10cSrcweir // get module 389cdf0e10cSrcweir ::rtl::OUString aModule; 390cdf0e10cSrcweir if ( rSourceDoc.getModule( aSourceLibName, aSourceName, aModule ) ) 391cdf0e10cSrcweir { 392cdf0e10cSrcweir // remove module from source library 393cdf0e10cSrcweir if ( rSourceDoc.removeModule( aSourceLibName, aSourceName ) ) 394cdf0e10cSrcweir { 395cdf0e10cSrcweir BasicIDE::MarkDocumentModified( rSourceDoc ); 396cdf0e10cSrcweir 397cdf0e10cSrcweir // insert module into target library 398cdf0e10cSrcweir if ( rDestDoc.insertModule( aDestLibName, aSourceName, aModule ) ) 399cdf0e10cSrcweir BasicIDE::MarkDocumentModified( rDestDoc ); 400cdf0e10cSrcweir } 401cdf0e10cSrcweir } 402cdf0e10cSrcweir } 403cdf0e10cSrcweir else if ( eType == OBJ_TYPE_DIALOG ) // dialog 404cdf0e10cSrcweir { 405cdf0e10cSrcweir // get dialog 406cdf0e10cSrcweir Reference< io::XInputStreamProvider > xISP; 407cdf0e10cSrcweir if ( rSourceDoc.getDialog( aSourceLibName, aSourceName, xISP ) ) 408cdf0e10cSrcweir { 409cdf0e10cSrcweir BasicIDEShell::CopyDialogResources( xISP, rSourceDoc, 410cdf0e10cSrcweir aSourceLibName, rDestDoc, aDestLibName, aSourceName ); 411cdf0e10cSrcweir 412cdf0e10cSrcweir // remove dialog from source library 413cdf0e10cSrcweir if ( BasicIDE::RemoveDialog( rSourceDoc, aSourceLibName, aSourceName ) ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir BasicIDE::MarkDocumentModified( rSourceDoc ); 416cdf0e10cSrcweir 417cdf0e10cSrcweir // insert dialog into target library 418cdf0e10cSrcweir if ( rDestDoc.insertDialog( aDestLibName, aSourceName, xISP ) ) 419cdf0e10cSrcweir BasicIDE::MarkDocumentModified( rDestDoc ); 420cdf0e10cSrcweir } 421cdf0e10cSrcweir } 422cdf0e10cSrcweir } 423cdf0e10cSrcweir } 424cdf0e10cSrcweir catch ( uno::Exception& ) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 427cdf0e10cSrcweir } 428cdf0e10cSrcweir } 429cdf0e10cSrcweir else // copy 430cdf0e10cSrcweir { 431cdf0e10cSrcweir try 432cdf0e10cSrcweir { 433cdf0e10cSrcweir if ( eType == OBJ_TYPE_MODULE ) // module 434cdf0e10cSrcweir { 435cdf0e10cSrcweir // get module 436cdf0e10cSrcweir ::rtl::OUString aModule; 437cdf0e10cSrcweir if ( rSourceDoc.getModule( aSourceLibName, aSourceName, aModule ) ) 438cdf0e10cSrcweir { 439cdf0e10cSrcweir // insert module into target library 440cdf0e10cSrcweir if ( rDestDoc.insertModule( aDestLibName, aSourceName, aModule ) ) 441cdf0e10cSrcweir BasicIDE::MarkDocumentModified( rDestDoc ); 442cdf0e10cSrcweir } 443cdf0e10cSrcweir } 444cdf0e10cSrcweir else if ( eType == OBJ_TYPE_DIALOG ) // dialog 445cdf0e10cSrcweir { 446cdf0e10cSrcweir // get dialog 447cdf0e10cSrcweir Reference< io::XInputStreamProvider > xISP; 448cdf0e10cSrcweir if ( rSourceDoc.getDialog( aSourceLibName, aSourceName, xISP ) ) 449cdf0e10cSrcweir { 450cdf0e10cSrcweir BasicIDEShell::CopyDialogResources( xISP, rSourceDoc, 451cdf0e10cSrcweir aSourceLibName, rDestDoc, aDestLibName, aSourceName ); 452cdf0e10cSrcweir 453cdf0e10cSrcweir // insert dialog into target library 454cdf0e10cSrcweir if ( rDestDoc.insertDialog( aDestLibName, aSourceName, xISP ) ) 455cdf0e10cSrcweir BasicIDE::MarkDocumentModified( rDestDoc ); 456cdf0e10cSrcweir } 457cdf0e10cSrcweir } 458cdf0e10cSrcweir } 459cdf0e10cSrcweir catch ( const Exception& ) 460cdf0e10cSrcweir { 461cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 462cdf0e10cSrcweir } 463cdf0e10cSrcweir } 464cdf0e10cSrcweir 465cdf0e10cSrcweir // create target module/dialog window 466cdf0e10cSrcweir if ( rSourceDoc != rDestDoc || aSourceLibName != aDestLibName ) 467cdf0e10cSrcweir { 468cdf0e10cSrcweir if( pDispatcher ) 469cdf0e10cSrcweir { 470cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rDestDoc, aDestLibName, aSourceName, ConvertType( eType ) ); 471cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SBXINSERTED, 472cdf0e10cSrcweir SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 473cdf0e10cSrcweir } 474cdf0e10cSrcweir } 475cdf0e10cSrcweir 476cdf0e10cSrcweir return 2; // Aufklappen... 477cdf0e10cSrcweir } 478cdf0e10cSrcweir 479cdf0e10cSrcweir OrganizeDialog::OrganizeDialog( Window* pParent, sal_Int16 tabId, BasicEntryDescriptor& rDesc ) 480cdf0e10cSrcweir :TabDialog( pParent, IDEResId( RID_TD_ORGANIZE ) ) 481cdf0e10cSrcweir ,aTabCtrl( this, IDEResId( RID_TC_ORGANIZE ) ) 482cdf0e10cSrcweir ,m_aCurEntry( rDesc ) 483cdf0e10cSrcweir { 484cdf0e10cSrcweir FreeResource(); 485cdf0e10cSrcweir aTabCtrl.SetActivatePageHdl( LINK( this, OrganizeDialog, ActivatePageHdl ) ); 486cdf0e10cSrcweir if( tabId == 0 ) 487cdf0e10cSrcweir { 488cdf0e10cSrcweir aTabCtrl.SetCurPageId( RID_TP_MOD ); 489cdf0e10cSrcweir } 490cdf0e10cSrcweir else if ( tabId == 1 ) 491cdf0e10cSrcweir { 492cdf0e10cSrcweir aTabCtrl.SetCurPageId( RID_TP_DLG ); 493cdf0e10cSrcweir } 494cdf0e10cSrcweir else 495cdf0e10cSrcweir { 496cdf0e10cSrcweir aTabCtrl.SetCurPageId( RID_TP_LIB ); 497cdf0e10cSrcweir } 498cdf0e10cSrcweir 499cdf0e10cSrcweir ActivatePageHdl( &aTabCtrl ); 500cdf0e10cSrcweir 501cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 502cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 503cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 504cdf0e10cSrcweir if( pDispatcher ) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_STOREALLMODULESOURCES ); 507cdf0e10cSrcweir } 508cdf0e10cSrcweir } 509cdf0e10cSrcweir 510cdf0e10cSrcweir __EXPORT OrganizeDialog::~OrganizeDialog() 511cdf0e10cSrcweir { 512cdf0e10cSrcweir for ( sal_uInt16 i = 0; i < aTabCtrl.GetPageCount(); i++ ) 513cdf0e10cSrcweir delete aTabCtrl.GetTabPage( aTabCtrl.GetPageId( i ) ); 514cdf0e10cSrcweir }; 515cdf0e10cSrcweir 516cdf0e10cSrcweir short OrganizeDialog::Execute() 517cdf0e10cSrcweir { 518cdf0e10cSrcweir Window* pPrevDlgParent = Application::GetDefDialogParent(); 519cdf0e10cSrcweir Application::SetDefDialogParent( this ); 520cdf0e10cSrcweir short nRet = TabDialog::Execute(); 521cdf0e10cSrcweir Application::SetDefDialogParent( pPrevDlgParent ); 522cdf0e10cSrcweir return nRet; 523cdf0e10cSrcweir } 524cdf0e10cSrcweir 525cdf0e10cSrcweir 526cdf0e10cSrcweir IMPL_LINK( OrganizeDialog, ActivatePageHdl, TabControl *, pTabCtrl ) 527cdf0e10cSrcweir { 528cdf0e10cSrcweir sal_uInt16 nId = pTabCtrl->GetCurPageId(); 529cdf0e10cSrcweir // Wenn TabPage noch nicht erzeugt wurde, dann erzeugen 530cdf0e10cSrcweir if ( !pTabCtrl->GetTabPage( nId ) ) 531cdf0e10cSrcweir { 532cdf0e10cSrcweir TabPage* pNewTabPage = 0; 533cdf0e10cSrcweir switch ( nId ) 534cdf0e10cSrcweir { 535cdf0e10cSrcweir case RID_TP_MOD: 536cdf0e10cSrcweir { 537cdf0e10cSrcweir pNewTabPage = new ObjectPage( pTabCtrl, IDEResId( RID_TP_MODULS ), BROWSEMODE_MODULES ); 538cdf0e10cSrcweir ((ObjectPage*)pNewTabPage)->SetTabDlg( this ); 539cdf0e10cSrcweir ((ObjectPage*)pNewTabPage)->SetCurrentEntry( m_aCurEntry ); 540cdf0e10cSrcweir } 541cdf0e10cSrcweir break; 542cdf0e10cSrcweir case RID_TP_DLG: 543cdf0e10cSrcweir { 544cdf0e10cSrcweir pNewTabPage = new ObjectPage( pTabCtrl, IDEResId( RID_TP_DLGS ), BROWSEMODE_DIALOGS ); 545cdf0e10cSrcweir ((ObjectPage*)pNewTabPage)->SetTabDlg( this ); 546cdf0e10cSrcweir ((ObjectPage*)pNewTabPage)->SetCurrentEntry( m_aCurEntry ); 547cdf0e10cSrcweir } 548cdf0e10cSrcweir break; 549cdf0e10cSrcweir case RID_TP_LIB: 550cdf0e10cSrcweir { 551cdf0e10cSrcweir pNewTabPage = new LibPage( pTabCtrl ); 552cdf0e10cSrcweir ((LibPage*)pNewTabPage)->SetTabDlg( this ); 553cdf0e10cSrcweir } 554cdf0e10cSrcweir break; 555cdf0e10cSrcweir default: DBG_ERROR( "PageHdl: Unbekannte ID!" ); 556cdf0e10cSrcweir } 557cdf0e10cSrcweir DBG_ASSERT( pNewTabPage, "Keine Page!" ); 558cdf0e10cSrcweir pTabCtrl->SetTabPage( nId, pNewTabPage ); 559cdf0e10cSrcweir } 560cdf0e10cSrcweir return 0; 561cdf0e10cSrcweir } 562cdf0e10cSrcweir 563cdf0e10cSrcweir ObjectPage::ObjectPage( Window * pParent, const ResId& rResId, sal_uInt16 nMode ) : 564cdf0e10cSrcweir TabPage( pParent, rResId ), 565cdf0e10cSrcweir aLibText( this, IDEResId( RID_STR_LIB ) ), 566cdf0e10cSrcweir aBasicBox( this, IDEResId( RID_TRLBOX ) ), 567cdf0e10cSrcweir aEditButton( this, IDEResId( RID_PB_EDIT ) ), 568cdf0e10cSrcweir aCloseButton( this, IDEResId( RID_PB_CLOSE ) ), 569cdf0e10cSrcweir aNewModButton( this, IDEResId( RID_PB_NEWMOD ) ), 570cdf0e10cSrcweir aNewDlgButton( this, IDEResId( RID_PB_NEWDLG ) ), 571cdf0e10cSrcweir aDelButton( this, IDEResId( RID_PB_DELETE ) ) 572cdf0e10cSrcweir { 573cdf0e10cSrcweir FreeResource(); 574cdf0e10cSrcweir pTabDlg = 0; 575cdf0e10cSrcweir 576cdf0e10cSrcweir aEditButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); 577cdf0e10cSrcweir aDelButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); 578cdf0e10cSrcweir aCloseButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); 579cdf0e10cSrcweir aBasicBox.SetSelectHdl( LINK( this, ObjectPage, BasicBoxHighlightHdl ) ); 580cdf0e10cSrcweir 581cdf0e10cSrcweir if( nMode & BROWSEMODE_MODULES ) 582cdf0e10cSrcweir { 583cdf0e10cSrcweir aNewModButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); 584cdf0e10cSrcweir aNewDlgButton.Hide(); 585cdf0e10cSrcweir } 586cdf0e10cSrcweir else if ( nMode & BROWSEMODE_DIALOGS ) 587cdf0e10cSrcweir { 588cdf0e10cSrcweir aNewDlgButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); 589cdf0e10cSrcweir aNewModButton.Hide(); 590cdf0e10cSrcweir } 591cdf0e10cSrcweir 592cdf0e10cSrcweir aBasicBox.SetDragDropMode( SV_DRAGDROP_CTRL_MOVE | SV_DRAGDROP_CTRL_COPY ); 593cdf0e10cSrcweir aBasicBox.EnableInplaceEditing( sal_True ); 594cdf0e10cSrcweir aBasicBox.SetMode( nMode ); 595cdf0e10cSrcweir aBasicBox.SetStyle( WB_BORDER | WB_TABSTOP | 596cdf0e10cSrcweir WB_HASLINES | WB_HASLINESATROOT | 597cdf0e10cSrcweir WB_HASBUTTONS | WB_HASBUTTONSATROOT | 598cdf0e10cSrcweir WB_HSCROLL ); 599cdf0e10cSrcweir aBasicBox.ScanAllEntries(); 600cdf0e10cSrcweir 601cdf0e10cSrcweir aEditButton.GrabFocus(); 602cdf0e10cSrcweir CheckButtons(); 603cdf0e10cSrcweir } 604cdf0e10cSrcweir 605cdf0e10cSrcweir void ObjectPage::SetCurrentEntry( BasicEntryDescriptor& rDesc ) 606cdf0e10cSrcweir { 607cdf0e10cSrcweir aBasicBox.SetCurrentEntry( rDesc ); 608cdf0e10cSrcweir } 609cdf0e10cSrcweir 610cdf0e10cSrcweir void __EXPORT ObjectPage::ActivatePage() 611cdf0e10cSrcweir { 612cdf0e10cSrcweir aBasicBox.UpdateEntries(); 613cdf0e10cSrcweir } 614cdf0e10cSrcweir 615cdf0e10cSrcweir void __EXPORT ObjectPage::DeactivatePage() 616cdf0e10cSrcweir { 617cdf0e10cSrcweir } 618cdf0e10cSrcweir 619cdf0e10cSrcweir void ObjectPage::CheckButtons() 620cdf0e10cSrcweir { 621cdf0e10cSrcweir // enable/disable edit button 622cdf0e10cSrcweir SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); 623cdf0e10cSrcweir BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); 624cdf0e10cSrcweir ScriptDocument aDocument( aDesc.GetDocument() ); 625cdf0e10cSrcweir ::rtl::OUString aOULibName( aDesc.GetLibName() ); 626cdf0e10cSrcweir String aLibSubName( aDesc.GetLibSubName() ); 627cdf0e10cSrcweir sal_Bool bVBAEnabled = aDocument.isInVBAMode(); 628cdf0e10cSrcweir sal_uInt16 nMode = aBasicBox.GetMode(); 629cdf0e10cSrcweir 630cdf0e10cSrcweir sal_uInt16 nDepth = pCurEntry ? aBasicBox.GetModel()->GetDepth( pCurEntry ) : 0; 631cdf0e10cSrcweir if ( nDepth >= 2 ) 632cdf0e10cSrcweir { 633cdf0e10cSrcweir if( bVBAEnabled && ( nMode & BROWSEMODE_MODULES ) && ( nDepth == 2 ) ) 634cdf0e10cSrcweir aEditButton.Disable(); 635cdf0e10cSrcweir else 636cdf0e10cSrcweir aEditButton.Enable(); 637cdf0e10cSrcweir } 638cdf0e10cSrcweir else 639cdf0e10cSrcweir aEditButton.Disable(); 640cdf0e10cSrcweir 641cdf0e10cSrcweir // enable/disable new module/dialog buttons 642cdf0e10cSrcweir LibraryLocation eLocation( aDesc.GetLocation() ); 643cdf0e10cSrcweir sal_Bool bReadOnly = sal_False; 644cdf0e10cSrcweir if ( nDepth > 0 ) 645cdf0e10cSrcweir { 646cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); 647cdf0e10cSrcweir Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); 648cdf0e10cSrcweir if ( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) || 649cdf0e10cSrcweir ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) ) 650cdf0e10cSrcweir { 651cdf0e10cSrcweir bReadOnly = sal_True; 652cdf0e10cSrcweir } 653cdf0e10cSrcweir } 654cdf0e10cSrcweir if ( bReadOnly || eLocation == LIBRARY_LOCATION_SHARE ) 655cdf0e10cSrcweir { 656cdf0e10cSrcweir aNewModButton.Disable(); 657cdf0e10cSrcweir aNewDlgButton.Disable(); 658cdf0e10cSrcweir } 659cdf0e10cSrcweir else 660cdf0e10cSrcweir { 661cdf0e10cSrcweir aNewModButton.Enable(); 662cdf0e10cSrcweir aNewDlgButton.Enable(); 663cdf0e10cSrcweir } 664cdf0e10cSrcweir 665cdf0e10cSrcweir // enable/disable delete button 666cdf0e10cSrcweir if ( nDepth >= 2 && !bReadOnly && eLocation != LIBRARY_LOCATION_SHARE ) 667cdf0e10cSrcweir { 668cdf0e10cSrcweir if( bVBAEnabled && ( nMode & BROWSEMODE_MODULES ) && ( ( nDepth == 2 ) || aLibSubName.Equals( String( IDEResId( RID_STR_DOCUMENT_OBJECTS ) ) ) ) ) 669cdf0e10cSrcweir aDelButton.Disable(); 670cdf0e10cSrcweir else 671cdf0e10cSrcweir aDelButton.Enable(); 672cdf0e10cSrcweir } 673cdf0e10cSrcweir else 674cdf0e10cSrcweir aDelButton.Disable(); 675cdf0e10cSrcweir } 676cdf0e10cSrcweir 677cdf0e10cSrcweir IMPL_LINK( ObjectPage, BasicBoxHighlightHdl, BasicTreeListBox *, pBox ) 678cdf0e10cSrcweir { 679cdf0e10cSrcweir if ( !pBox->IsSelected( pBox->GetHdlEntry() ) ) 680cdf0e10cSrcweir return 0; 681cdf0e10cSrcweir 682cdf0e10cSrcweir CheckButtons(); 683cdf0e10cSrcweir return 0; 684cdf0e10cSrcweir } 685cdf0e10cSrcweir 686cdf0e10cSrcweir IMPL_LINK( ObjectPage, ButtonHdl, Button *, pButton ) 687cdf0e10cSrcweir { 688cdf0e10cSrcweir if ( pButton == &aEditButton ) 689cdf0e10cSrcweir { 690cdf0e10cSrcweir SfxAllItemSet aArgs( SFX_APP()->GetPool() ); 691cdf0e10cSrcweir SfxRequest aRequest( SID_BASICIDE_APPEAR, SFX_CALLMODE_SYNCHRON, aArgs ); 692cdf0e10cSrcweir SFX_APP()->ExecuteSlot( aRequest ); 693cdf0e10cSrcweir 694cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 695cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 696cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 697cdf0e10cSrcweir SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); 698cdf0e10cSrcweir DBG_ASSERT( pCurEntry, "Entry?!" ); 699cdf0e10cSrcweir if ( aBasicBox.GetModel()->GetDepth( pCurEntry ) >= 2 ) 700cdf0e10cSrcweir { 701cdf0e10cSrcweir BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); 702cdf0e10cSrcweir if ( pDispatcher ) 703cdf0e10cSrcweir { 704cdf0e10cSrcweir String aModName( aDesc.GetName() ); 705cdf0e10cSrcweir // extract the module name from the string like "Sheet1 (Example1)" 706cdf0e10cSrcweir if( aDesc.GetLibSubName().Equals( String( IDEResId( RID_STR_DOCUMENT_OBJECTS ) ) ) ) 707cdf0e10cSrcweir { 708cdf0e10cSrcweir sal_uInt16 nIndex = 0; 709cdf0e10cSrcweir aModName = aModName.GetToken( 0, ' ', nIndex ); 710cdf0e10cSrcweir } 711cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDesc.GetDocument(), aDesc.GetLibName(), 712cdf0e10cSrcweir aModName, aBasicBox.ConvertType( aDesc.GetType() ) ); 713cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SHOWSBX, SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 714cdf0e10cSrcweir } 715cdf0e10cSrcweir } 716cdf0e10cSrcweir else // Nur Lib selektiert 717cdf0e10cSrcweir { 718cdf0e10cSrcweir DBG_ASSERT( aBasicBox.GetModel()->GetDepth( pCurEntry ) == 1, "Kein LibEntry?!" ); 719cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() ); 720cdf0e10cSrcweir SvLBoxEntry* pParentEntry = aBasicBox.GetParent( pCurEntry ); 721cdf0e10cSrcweir if ( pParentEntry ) 722cdf0e10cSrcweir { 723cdf0e10cSrcweir BasicDocumentEntry* pBasicDocumentEntry = (BasicDocumentEntry*)pParentEntry->GetUserData(); 724cdf0e10cSrcweir if ( pBasicDocumentEntry ) 725cdf0e10cSrcweir aDocument = pBasicDocumentEntry->GetDocument(); 726cdf0e10cSrcweir } 727cdf0e10cSrcweir SfxUsrAnyItem aDocItem( SID_BASICIDE_ARG_DOCUMENT_MODEL, makeAny( aDocument.getDocumentOrNull() ) ); 728cdf0e10cSrcweir String aLibName( aBasicBox.GetEntryText( pCurEntry ) ); 729cdf0e10cSrcweir SfxStringItem aLibNameItem( SID_BASICIDE_ARG_LIBNAME, aLibName ); 730cdf0e10cSrcweir if ( pDispatcher ) 731cdf0e10cSrcweir { 732cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_LIBSELECTED, SFX_CALLMODE_ASYNCHRON, &aDocItem, &aLibNameItem, 0L ); 733cdf0e10cSrcweir } 734cdf0e10cSrcweir } 735cdf0e10cSrcweir EndTabDialog( 1 ); 736cdf0e10cSrcweir } 737cdf0e10cSrcweir else if ( pButton == &aNewModButton ) 738cdf0e10cSrcweir NewModule(); 739cdf0e10cSrcweir else if ( pButton == &aNewDlgButton ) 740cdf0e10cSrcweir NewDialog(); 741cdf0e10cSrcweir else if ( pButton == &aDelButton ) 742cdf0e10cSrcweir DeleteCurrent(); 743cdf0e10cSrcweir else if ( pButton == &aCloseButton ) 744cdf0e10cSrcweir EndTabDialog( 0 ); 745cdf0e10cSrcweir 746cdf0e10cSrcweir return 0; 747cdf0e10cSrcweir } 748cdf0e10cSrcweir 749cdf0e10cSrcweir bool ObjectPage::GetSelection( ScriptDocument& rDocument, String& rLibName ) 750cdf0e10cSrcweir { 751cdf0e10cSrcweir bool bRet = false; 752cdf0e10cSrcweir 753cdf0e10cSrcweir SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); 754cdf0e10cSrcweir BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); 755cdf0e10cSrcweir rDocument = aDesc.GetDocument(); 756cdf0e10cSrcweir rLibName = aDesc.GetLibName(); 757cdf0e10cSrcweir if ( !rLibName.Len() ) 758cdf0e10cSrcweir rLibName = String::CreateFromAscii( "Standard" ); 759cdf0e10cSrcweir 760cdf0e10cSrcweir DBG_ASSERT( rDocument.isAlive(), "ObjectPage::GetSelection: no or dead ScriptDocument in the selection!" ); 761cdf0e10cSrcweir if ( !rDocument.isAlive() ) 762cdf0e10cSrcweir return false; 763cdf0e10cSrcweir 764cdf0e10cSrcweir // check if the module library is loaded 765cdf0e10cSrcweir sal_Bool bOK = sal_True; 766cdf0e10cSrcweir ::rtl::OUString aOULibName( rLibName ); 767cdf0e10cSrcweir Reference< script::XLibraryContainer > xModLibContainer( rDocument.getLibraryContainer( E_SCRIPTS ) ); 768cdf0e10cSrcweir if ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && !xModLibContainer->isLibraryLoaded( aOULibName ) ) 769cdf0e10cSrcweir { 770cdf0e10cSrcweir // check password 771cdf0e10cSrcweir Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY ); 772cdf0e10cSrcweir if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aOULibName ) && !xPasswd->isLibraryPasswordVerified( aOULibName ) ) 773cdf0e10cSrcweir { 774cdf0e10cSrcweir String aPassword; 775cdf0e10cSrcweir bOK = QueryPassword( xModLibContainer, rLibName, aPassword ); 776cdf0e10cSrcweir } 777cdf0e10cSrcweir 778cdf0e10cSrcweir // load library 779cdf0e10cSrcweir if ( bOK ) 780cdf0e10cSrcweir xModLibContainer->loadLibrary( aOULibName ); 781cdf0e10cSrcweir } 782cdf0e10cSrcweir 783cdf0e10cSrcweir // check if the dialog library is loaded 784cdf0e10cSrcweir Reference< script::XLibraryContainer > xDlgLibContainer( rDocument.getLibraryContainer( E_DIALOGS ) ); 785cdf0e10cSrcweir if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && !xDlgLibContainer->isLibraryLoaded( aOULibName ) ) 786cdf0e10cSrcweir { 787cdf0e10cSrcweir // load library 788cdf0e10cSrcweir if ( bOK ) 789cdf0e10cSrcweir xDlgLibContainer->loadLibrary( aOULibName ); 790cdf0e10cSrcweir } 791cdf0e10cSrcweir 792cdf0e10cSrcweir if ( bOK ) 793cdf0e10cSrcweir bRet = true; 794cdf0e10cSrcweir 795cdf0e10cSrcweir return bRet; 796cdf0e10cSrcweir } 797cdf0e10cSrcweir 798cdf0e10cSrcweir void ObjectPage::NewModule() 799cdf0e10cSrcweir { 800cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() ); 801cdf0e10cSrcweir String aLibName; 802cdf0e10cSrcweir 803cdf0e10cSrcweir if ( GetSelection( aDocument, aLibName ) ) 804cdf0e10cSrcweir { 805cdf0e10cSrcweir String aModName; 806cdf0e10cSrcweir createModImpl( static_cast<Window*>( this ), aDocument, 807cdf0e10cSrcweir aBasicBox, aLibName, aModName, true ); 808cdf0e10cSrcweir } 809cdf0e10cSrcweir } 810cdf0e10cSrcweir 811cdf0e10cSrcweir void ObjectPage::NewDialog() 812cdf0e10cSrcweir { 813cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() ); 814cdf0e10cSrcweir String aLibName; 815cdf0e10cSrcweir 816cdf0e10cSrcweir if ( GetSelection( aDocument, aLibName ) ) 817cdf0e10cSrcweir { 818cdf0e10cSrcweir aDocument.getOrCreateLibrary( E_DIALOGS, aLibName ); 819cdf0e10cSrcweir 820cdf0e10cSrcweir std::auto_ptr< NewObjectDialog > xNewDlg( 821cdf0e10cSrcweir new NewObjectDialog(this, NEWOBJECTMODE_DLG, true)); 822cdf0e10cSrcweir xNewDlg->SetObjectName( aDocument.createObjectName( E_DIALOGS, aLibName ) ); 823cdf0e10cSrcweir 824cdf0e10cSrcweir if (xNewDlg->Execute() != 0) 825cdf0e10cSrcweir { 826cdf0e10cSrcweir String aDlgName( xNewDlg->GetObjectName() ); 827cdf0e10cSrcweir if (aDlgName.Len() == 0) 828cdf0e10cSrcweir aDlgName = aDocument.createObjectName( E_DIALOGS, aLibName); 829cdf0e10cSrcweir 830cdf0e10cSrcweir if ( aDocument.hasDialog( aLibName, aDlgName ) ) 831cdf0e10cSrcweir { 832cdf0e10cSrcweir ErrorBox( this, WB_OK | WB_DEF_OK, 833cdf0e10cSrcweir String( IDEResId( RID_STR_SBXNAMEALLREADYUSED2 ) ) ).Execute(); 834cdf0e10cSrcweir } 835cdf0e10cSrcweir else 836cdf0e10cSrcweir { 837cdf0e10cSrcweir Reference< io::XInputStreamProvider > xISP; 838cdf0e10cSrcweir if ( !aDocument.createDialog( aLibName, aDlgName, xISP ) ) 839cdf0e10cSrcweir return; 840cdf0e10cSrcweir 841cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, aDlgName, BASICIDE_TYPE_DIALOG ); 842cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 843cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 844cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 845cdf0e10cSrcweir if( pDispatcher ) 846cdf0e10cSrcweir { 847cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SBXINSERTED, 848cdf0e10cSrcweir SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 849cdf0e10cSrcweir } 850cdf0e10cSrcweir LibraryLocation eLocation = aDocument.getLibraryLocation( aLibName ); 851cdf0e10cSrcweir SvLBoxEntry* pRootEntry = aBasicBox.FindRootEntry( aDocument, eLocation ); 852cdf0e10cSrcweir if ( pRootEntry ) 853cdf0e10cSrcweir { 854cdf0e10cSrcweir if ( !aBasicBox.IsExpanded( pRootEntry ) ) 855cdf0e10cSrcweir aBasicBox.Expand( pRootEntry ); 856cdf0e10cSrcweir SvLBoxEntry* pLibEntry = aBasicBox.FindEntry( pRootEntry, aLibName, OBJ_TYPE_LIBRARY ); 857cdf0e10cSrcweir DBG_ASSERT( pLibEntry, "Libeintrag nicht gefunden!" ); 858cdf0e10cSrcweir if ( pLibEntry ) 859cdf0e10cSrcweir { 860cdf0e10cSrcweir if ( !aBasicBox.IsExpanded( pLibEntry ) ) 861cdf0e10cSrcweir aBasicBox.Expand( pLibEntry ); 862cdf0e10cSrcweir SvLBoxEntry* pEntry = aBasicBox.FindEntry( pLibEntry, aDlgName, OBJ_TYPE_DIALOG ); 863cdf0e10cSrcweir if ( !pEntry ) 864cdf0e10cSrcweir { 865cdf0e10cSrcweir pEntry = aBasicBox.AddEntry( 866cdf0e10cSrcweir aDlgName, 867cdf0e10cSrcweir Image( IDEResId( RID_IMG_DIALOG ) ), 868cdf0e10cSrcweir Image( IDEResId( RID_IMG_DIALOG_HC ) ), 869cdf0e10cSrcweir pLibEntry, false, 870cdf0e10cSrcweir std::auto_ptr< BasicEntry >( new BasicEntry( OBJ_TYPE_DIALOG ) ) ); 871cdf0e10cSrcweir DBG_ASSERT( pEntry, "InsertEntry fehlgeschlagen!" ); 872cdf0e10cSrcweir } 873cdf0e10cSrcweir aBasicBox.SetCurEntry( pEntry ); 874cdf0e10cSrcweir aBasicBox.Select( aBasicBox.GetCurEntry() ); // OV-Bug?! 875cdf0e10cSrcweir } 876cdf0e10cSrcweir } 877cdf0e10cSrcweir } 878cdf0e10cSrcweir } 879cdf0e10cSrcweir } 880cdf0e10cSrcweir } 881cdf0e10cSrcweir 882cdf0e10cSrcweir void ObjectPage::DeleteCurrent() 883cdf0e10cSrcweir { 884cdf0e10cSrcweir SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); 885cdf0e10cSrcweir DBG_ASSERT( pCurEntry, "Kein aktueller Eintrag!" ); 886cdf0e10cSrcweir BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); 887cdf0e10cSrcweir ScriptDocument aDocument( aDesc.GetDocument() ); 888cdf0e10cSrcweir DBG_ASSERT( aDocument.isAlive(), "ObjectPage::DeleteCurrent: no document!" ); 889cdf0e10cSrcweir if ( !aDocument.isAlive() ) 890cdf0e10cSrcweir return; 891cdf0e10cSrcweir String aLibName( aDesc.GetLibName() ); 892cdf0e10cSrcweir String aName( aDesc.GetName() ); 893cdf0e10cSrcweir BasicEntryType eType( aDesc.GetType() ); 894cdf0e10cSrcweir 895cdf0e10cSrcweir if ( ( eType == OBJ_TYPE_MODULE && QueryDelModule( aName, this ) ) || 896cdf0e10cSrcweir ( eType == OBJ_TYPE_DIALOG && QueryDelDialog( aName, this ) ) ) 897cdf0e10cSrcweir { 898cdf0e10cSrcweir aBasicBox.GetModel()->Remove( pCurEntry ); 899cdf0e10cSrcweir if ( aBasicBox.GetCurEntry() ) // OV-Bug ? 900cdf0e10cSrcweir aBasicBox.Select( aBasicBox.GetCurEntry() ); 901cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 902cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 903cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 904cdf0e10cSrcweir if( pDispatcher ) 905cdf0e10cSrcweir { 906cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, aName, aBasicBox.ConvertType( eType ) ); 907cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SBXDELETED, 908cdf0e10cSrcweir SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 909cdf0e10cSrcweir } 910cdf0e10cSrcweir 911cdf0e10cSrcweir try 912cdf0e10cSrcweir { 913cdf0e10cSrcweir bool bSuccess = false; 914cdf0e10cSrcweir if ( eType == OBJ_TYPE_MODULE ) 915cdf0e10cSrcweir bSuccess = aDocument.removeModule( aLibName, aName ); 916cdf0e10cSrcweir else if ( eType == OBJ_TYPE_DIALOG ) 917cdf0e10cSrcweir bSuccess = BasicIDE::RemoveDialog( aDocument, aLibName, aName ); 918cdf0e10cSrcweir 919cdf0e10cSrcweir if ( bSuccess ) 920cdf0e10cSrcweir BasicIDE::MarkDocumentModified( aDocument ); 921cdf0e10cSrcweir } 922cdf0e10cSrcweir catch ( container::NoSuchElementException& ) 923cdf0e10cSrcweir { 924cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 925cdf0e10cSrcweir } 926cdf0e10cSrcweir } 927cdf0e10cSrcweir } 928cdf0e10cSrcweir 929cdf0e10cSrcweir 930cdf0e10cSrcweir 931cdf0e10cSrcweir void ObjectPage::EndTabDialog( sal_uInt16 nRet ) 932cdf0e10cSrcweir { 933cdf0e10cSrcweir DBG_ASSERT( pTabDlg, "TabDlg nicht gesetzt!" ); 934cdf0e10cSrcweir if ( pTabDlg ) 935cdf0e10cSrcweir pTabDlg->EndDialog( nRet ); 936cdf0e10cSrcweir } 937cdf0e10cSrcweir 938cdf0e10cSrcweir 939cdf0e10cSrcweir LibDialog::LibDialog( Window* pParent ) 940cdf0e10cSrcweir : ModalDialog( pParent, IDEResId( RID_DLG_LIBS ) ), 941cdf0e10cSrcweir aOKButton( this, IDEResId( RID_PB_OK ) ), 942cdf0e10cSrcweir aCancelButton( this, IDEResId( RID_PB_CANCEL ) ), 943cdf0e10cSrcweir aStorageName( this, IDEResId( RID_FT_STORAGENAME ) ), 944cdf0e10cSrcweir aLibBox( this, IDEResId( RID_CTRL_LIBS ) ), 945cdf0e10cSrcweir aFixedLine( this, IDEResId( RID_FL_OPTIONS ) ), 946cdf0e10cSrcweir aReferenceBox( this, IDEResId( RID_CB_REF ) ), 947cdf0e10cSrcweir aReplaceBox( this, IDEResId( RID_CB_REPL ) ) 948cdf0e10cSrcweir { 949cdf0e10cSrcweir SetText( String( IDEResId( RID_STR_APPENDLIBS ) ) ); 950cdf0e10cSrcweir FreeResource(); 951cdf0e10cSrcweir } 952cdf0e10cSrcweir 953cdf0e10cSrcweir 954cdf0e10cSrcweir LibDialog::~LibDialog() 955cdf0e10cSrcweir { 956cdf0e10cSrcweir } 957cdf0e10cSrcweir 958cdf0e10cSrcweir void LibDialog::SetStorageName( const String& rName ) 959cdf0e10cSrcweir { 960cdf0e10cSrcweir String aName( IDEResId( RID_STR_FILENAME ) ); 961cdf0e10cSrcweir aName += rName; 962cdf0e10cSrcweir aStorageName.SetText( aName ); 963cdf0e10cSrcweir } 964cdf0e10cSrcweir 965cdf0e10cSrcweir // Helper function 966cdf0e10cSrcweir SbModule* createModImpl( Window* pWin, const ScriptDocument& rDocument, 967cdf0e10cSrcweir BasicTreeListBox& rBasicBox, const String& rLibName, String aModName, bool bMain ) 968cdf0e10cSrcweir { 969cdf0e10cSrcweir OSL_ENSURE( rDocument.isAlive(), "createModImpl: invalid document!" ); 970cdf0e10cSrcweir if ( !rDocument.isAlive() ) 971cdf0e10cSrcweir return NULL; 972cdf0e10cSrcweir 973cdf0e10cSrcweir SbModule* pModule = NULL; 974cdf0e10cSrcweir 975cdf0e10cSrcweir String aLibName( rLibName ); 976cdf0e10cSrcweir if ( !aLibName.Len() ) 977cdf0e10cSrcweir aLibName = String::CreateFromAscii( "Standard" ); 978cdf0e10cSrcweir rDocument.getOrCreateLibrary( E_SCRIPTS, aLibName ); 979cdf0e10cSrcweir if ( !aModName.Len() ) 980cdf0e10cSrcweir aModName = rDocument.createObjectName( E_SCRIPTS, aLibName ); 981cdf0e10cSrcweir 982cdf0e10cSrcweir std::auto_ptr< NewObjectDialog > xNewDlg( 983cdf0e10cSrcweir new NewObjectDialog( pWin, NEWOBJECTMODE_MOD, true ) ); 984cdf0e10cSrcweir xNewDlg->SetObjectName( aModName ); 985cdf0e10cSrcweir 986cdf0e10cSrcweir if (xNewDlg->Execute() != 0) 987cdf0e10cSrcweir { 988cdf0e10cSrcweir if ( xNewDlg->GetObjectName().Len() ) 989cdf0e10cSrcweir aModName = xNewDlg->GetObjectName(); 990cdf0e10cSrcweir 991cdf0e10cSrcweir try 992cdf0e10cSrcweir { 993cdf0e10cSrcweir ::rtl::OUString sModuleCode; 994cdf0e10cSrcweir // the module has existed 995cdf0e10cSrcweir if( rDocument.hasModule( aLibName, aModName ) ) 996cdf0e10cSrcweir return NULL; 997cdf0e10cSrcweir rDocument.createModule( aLibName, aModName, bMain, sModuleCode ); 998cdf0e10cSrcweir BasicManager* pBasMgr = rDocument.getBasicManager(); 999cdf0e10cSrcweir StarBASIC* pBasic = pBasMgr? pBasMgr->GetLib( aLibName ) : 0; 1000cdf0e10cSrcweir if ( pBasic ) 1001cdf0e10cSrcweir pModule = pBasic->FindModule( aModName ); 1002cdf0e10cSrcweir SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rDocument, aLibName, aModName, BASICIDE_TYPE_MODULE ); 1003cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 1004cdf0e10cSrcweir SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; 1005cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; 1006cdf0e10cSrcweir if( pDispatcher ) 1007cdf0e10cSrcweir { 1008cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_SBXINSERTED, 1009cdf0e10cSrcweir SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); 1010cdf0e10cSrcweir } 1011cdf0e10cSrcweir LibraryLocation eLocation = rDocument.getLibraryLocation( aLibName ); 1012cdf0e10cSrcweir SvLBoxEntry* pRootEntry = rBasicBox.FindRootEntry( rDocument, eLocation ); 1013cdf0e10cSrcweir if ( pRootEntry ) 1014cdf0e10cSrcweir { 1015cdf0e10cSrcweir if ( !rBasicBox.IsExpanded( pRootEntry ) ) 1016cdf0e10cSrcweir rBasicBox.Expand( pRootEntry ); 1017cdf0e10cSrcweir SvLBoxEntry* pLibEntry = rBasicBox.FindEntry( pRootEntry, aLibName, OBJ_TYPE_LIBRARY ); 1018cdf0e10cSrcweir DBG_ASSERT( pLibEntry, "Libeintrag nicht gefunden!" ); 1019cdf0e10cSrcweir if ( pLibEntry ) 1020cdf0e10cSrcweir { 1021cdf0e10cSrcweir if ( !rBasicBox.IsExpanded( pLibEntry ) ) 1022cdf0e10cSrcweir rBasicBox.Expand( pLibEntry ); 1023cdf0e10cSrcweir SvLBoxEntry* pSubRootEntry = pLibEntry; 1024cdf0e10cSrcweir if( pBasic && rDocument.isInVBAMode() ) 1025cdf0e10cSrcweir { 1026cdf0e10cSrcweir // add the new module in the "Modules" entry 1027cdf0e10cSrcweir SvLBoxEntry* pLibSubEntry = rBasicBox.FindEntry( pLibEntry, String( IDEResId( RID_STR_NORMAL_MODULES ) ) , OBJ_TYPE_NORMAL_MODULES ); 1028cdf0e10cSrcweir if( pLibSubEntry ) 1029cdf0e10cSrcweir { 1030cdf0e10cSrcweir if( !rBasicBox.IsExpanded( pLibSubEntry ) ) 1031cdf0e10cSrcweir rBasicBox.Expand( pLibSubEntry ); 1032cdf0e10cSrcweir pSubRootEntry = pLibSubEntry; 1033cdf0e10cSrcweir } 1034cdf0e10cSrcweir } 1035cdf0e10cSrcweir 1036cdf0e10cSrcweir SvLBoxEntry* pEntry = rBasicBox.FindEntry( pSubRootEntry, aModName, OBJ_TYPE_MODULE ); 1037cdf0e10cSrcweir if ( !pEntry ) 1038cdf0e10cSrcweir { 1039cdf0e10cSrcweir pEntry = rBasicBox.AddEntry( 1040cdf0e10cSrcweir aModName, 1041cdf0e10cSrcweir Image( IDEResId( RID_IMG_MODULE ) ), 1042cdf0e10cSrcweir Image( IDEResId( RID_IMG_MODULE_HC ) ), 1043cdf0e10cSrcweir pSubRootEntry, false, 1044cdf0e10cSrcweir std::auto_ptr< BasicEntry >( new BasicEntry( OBJ_TYPE_MODULE ) ) ); 1045cdf0e10cSrcweir DBG_ASSERT( pEntry, "InsertEntry fehlgeschlagen!" ); 1046cdf0e10cSrcweir } 1047cdf0e10cSrcweir rBasicBox.SetCurEntry( pEntry ); 1048cdf0e10cSrcweir rBasicBox.Select( rBasicBox.GetCurEntry() ); // OV-Bug?! 1049cdf0e10cSrcweir } 1050cdf0e10cSrcweir } 1051cdf0e10cSrcweir } 1052cdf0e10cSrcweir catch ( container::ElementExistException& ) 1053cdf0e10cSrcweir { 1054cdf0e10cSrcweir ErrorBox( pWin, WB_OK | WB_DEF_OK, 1055cdf0e10cSrcweir String( IDEResId( RID_STR_SBXNAMEALLREADYUSED2 ) ) ).Execute(); 1056cdf0e10cSrcweir } 1057cdf0e10cSrcweir catch ( container::NoSuchElementException& ) 1058cdf0e10cSrcweir { 1059cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1060cdf0e10cSrcweir } 1061cdf0e10cSrcweir } 1062cdf0e10cSrcweir return pModule; 1063cdf0e10cSrcweir } 1064cdf0e10cSrcweir 1065cdf0e10cSrcweir 1066cdf0e10cSrcweir 1067cdf0e10cSrcweir 1068