| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_basctl.hxx" |
| |
| #include <memory> |
| |
| #include <ide_pch.hxx> |
| |
| |
| #include <moduldlg.hrc> |
| #include <moduldlg.hxx> |
| #include <basidesh.hrc> |
| #include <basidesh.hxx> |
| #include <bastypes.hxx> |
| #include <baside3.hxx> |
| #include <basobj.hxx> |
| #include <baside2.hrc> |
| #include <sbxitem.hxx> |
| #include <iderdll.hxx> |
| |
| #ifndef _COM_SUN_STAR_IO_XINPUTSTREAMPROVIDER_HXX_ |
| #include <com/sun/star/io/XInputStreamProvider.hpp> |
| #endif |
| #ifndef _COM_SUN_STAR_SCRIPT_XLIBRYARYCONTAINER2_HPP_ |
| #include <com/sun/star/script/XLibraryContainer2.hpp> |
| #endif |
| #include <com/sun/star/script/XLibraryContainerPassword.hpp> |
| #include <com/sun/star/resource/XStringResourceManager.hpp> |
| #include <com/sun/star/lang/XMultiServiceFactory.hpp> |
| #include <comphelper/processfactory.hxx> |
| #include <xmlscript/xmldlg_imexp.hxx> |
| |
| #include "localizationmgr.hxx" |
| #include <basic/sbx.hxx> |
| #include <tools/diagnose_ex.h> |
| |
| using namespace ::com::sun::star; |
| using namespace ::com::sun::star::uno; |
| using namespace ::com::sun::star::lang; |
| using namespace ::com::sun::star::resource; |
| |
| |
| ExtBasicTreeListBox::ExtBasicTreeListBox( Window* pParent, const ResId& rRes ) |
| : BasicTreeListBox( pParent, rRes ) |
| { |
| } |
| |
| |
| |
| ExtBasicTreeListBox::~ExtBasicTreeListBox() |
| { |
| } |
| |
| sal_Bool __EXPORT ExtBasicTreeListBox::EditingEntry( SvLBoxEntry* pEntry, Selection& ) |
| { |
| sal_Bool bRet = sal_False; |
| |
| if ( pEntry ) |
| { |
| sal_uInt16 nDepth = GetModel()->GetDepth( pEntry ); |
| if ( nDepth >= 2 ) |
| { |
| BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); |
| ScriptDocument aDocument( aDesc.GetDocument() ); |
| ::rtl::OUString aOULibName( aDesc.GetLibName() ); |
| Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); |
| Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); |
| if ( !( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) || |
| ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) ) ) |
| { |
| // allow editing only for libraries, which are not readonly |
| bRet = sal_True; |
| } |
| } |
| } |
| |
| return bRet; |
| } |
| |
| sal_Bool __EXPORT ExtBasicTreeListBox::EditedEntry( SvLBoxEntry* pEntry, const String& rNewText ) |
| { |
| sal_Bool bValid = BasicIDE::IsValidSbxName( rNewText ); |
| if ( !bValid ) |
| { |
| ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_BADSBXNAME ) ) ).Execute(); |
| return sal_False; |
| } |
| |
| String aCurText( GetEntryText( pEntry ) ); |
| if ( aCurText == rNewText ) |
| // nothing to do |
| return sal_True; |
| |
| BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); |
| ScriptDocument aDocument( aDesc.GetDocument() ); |
| DBG_ASSERT( aDocument.isValid(), "ExtBasicTreeListBox::EditedEntry: no document!" ); |
| if ( !aDocument.isValid() ) |
| return sal_False; |
| String aLibName( aDesc.GetLibName() ); |
| BasicEntryType eType( aDesc.GetType() ); |
| |
| bool bSuccess = ( eType == OBJ_TYPE_MODULE ) |
| ? BasicIDE::RenameModule( this, aDocument, aLibName, aCurText, rNewText ) |
| : BasicIDE::RenameDialog( this, aDocument, aLibName, aCurText, rNewText ); |
| |
| if ( !bSuccess ) |
| return sal_False; |
| |
| BasicIDE::MarkDocumentModified( aDocument ); |
| |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| if( pDispatcher ) |
| { |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, rNewText, ConvertType( eType ) ); |
| pDispatcher->Execute( SID_BASICIDE_SBXRENAMED, |
| SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| |
| // OV-Bug?! |
| SetEntryText( pEntry, rNewText ); |
| SetCurEntry( pEntry ); |
| SetCurEntry( pEntry ); |
| Select( pEntry, sal_False ); |
| Select( pEntry ); // damit Handler gerufen wird => Edit updaten |
| |
| return sal_True; |
| } |
| |
| |
| DragDropMode __EXPORT ExtBasicTreeListBox::NotifyStartDrag( TransferDataContainer&, SvLBoxEntry* pEntry ) |
| { |
| DragDropMode nMode_ = SV_DRAGDROP_NONE; |
| |
| if ( pEntry ) |
| { |
| sal_uInt16 nDepth = GetModel()->GetDepth( pEntry ); |
| if ( nDepth >= 2 ) |
| { |
| nMode_ = SV_DRAGDROP_CTRL_COPY; |
| BasicEntryDescriptor aDesc( GetEntryDescriptor( pEntry ) ); |
| ScriptDocument aDocument( aDesc.GetDocument() ); |
| ::rtl::OUString aOULibName( aDesc.GetLibName() ); |
| // allow MOVE mode only for libraries, which are not readonly |
| Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); |
| Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); |
| if ( !( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) || |
| ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) ) ) |
| { |
| // Only allow copy for localized libraries |
| bool bAllowMove = true; |
| if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) ) |
| { |
| // Get StringResourceManager |
| Reference< container::XNameContainer > xDialogLib( aDocument.getLibrary( E_DIALOGS, aOULibName, sal_True ) ); |
| Reference< XStringResourceManager > xSourceMgr = |
| LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib ); |
| if( xSourceMgr.is() ) |
| bAllowMove = ( xSourceMgr->getLocales().getLength() == 0 ); |
| } |
| if( bAllowMove ) |
| nMode_ |= SV_DRAGDROP_CTRL_MOVE; |
| } |
| } |
| } |
| |
| return nMode_; |
| } |
| |
| |
| sal_Bool __EXPORT ExtBasicTreeListBox::NotifyAcceptDrop( SvLBoxEntry* pEntry ) |
| { |
| // don't drop on a BasicManager (nDepth == 0) |
| sal_uInt16 nDepth = pEntry ? GetModel()->GetDepth( pEntry ) : 0; |
| sal_Bool bValid = nDepth ? sal_True : sal_False; |
| |
| // don't drop in the same library |
| SvLBoxEntry* pSelected = FirstSelected(); |
| if ( ( nDepth == 1 ) && ( pEntry == GetParent( pSelected ) ) ) |
| bValid = sal_False; |
| else if ( ( nDepth == 2 ) && ( GetParent( pEntry ) == GetParent( pSelected ) ) ) |
| bValid = sal_False; |
| |
| // don't drop on a library, which is not loaded, readonly or password protected |
| // or which already has a module/dialog with this name |
| if ( bValid && ( nDepth > 0 ) ) |
| { |
| // get source module/dialog name |
| BasicEntryDescriptor aSourceDesc( GetEntryDescriptor( pSelected ) ); |
| String aSourceName( aSourceDesc.GetName() ); |
| BasicEntryType eSourceType( aSourceDesc.GetType() ); |
| |
| // get target shell and target library name |
| BasicEntryDescriptor aDestDesc( GetEntryDescriptor( pEntry ) ); |
| const ScriptDocument& rDestDoc( aDestDesc.GetDocument() ); |
| String aDestLibName( aDestDesc.GetLibName() ); |
| ::rtl::OUString aOUDestLibName( aDestLibName ); |
| |
| // check if module library is not loaded, readonly or password protected |
| Reference< script::XLibraryContainer2 > xModLibContainer( rDestDoc.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); |
| if ( xModLibContainer.is() && xModLibContainer->hasByName( aOUDestLibName ) ) |
| { |
| if ( !xModLibContainer->isLibraryLoaded( aOUDestLibName ) ) |
| bValid = sal_False; |
| |
| if ( xModLibContainer->isLibraryReadOnly( aOUDestLibName ) ) |
| bValid = sal_False; |
| |
| Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY ); |
| if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aOUDestLibName ) && !xPasswd->isLibraryPasswordVerified( aOUDestLibName ) ) |
| bValid = sal_False; |
| } |
| |
| // check if dialog library is not loaded or readonly |
| Reference< script::XLibraryContainer2 > xDlgLibContainer( rDestDoc.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); |
| if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOUDestLibName ) ) |
| { |
| if ( !xDlgLibContainer->isLibraryLoaded( aOUDestLibName ) ) |
| bValid = sal_False; |
| |
| if ( xDlgLibContainer->isLibraryReadOnly( aOUDestLibName ) ) |
| bValid = sal_False; |
| } |
| |
| // check, if module/dialog with this name is already existing in target library |
| if ( ( eSourceType == OBJ_TYPE_MODULE && rDestDoc.hasModule( aDestLibName, aSourceName ) ) || |
| ( eSourceType == OBJ_TYPE_DIALOG && rDestDoc.hasDialog( aDestLibName, aSourceName ) ) ) |
| { |
| bValid = sal_False; |
| } |
| } |
| |
| return bValid; |
| } |
| |
| |
| sal_Bool __EXPORT ExtBasicTreeListBox::NotifyMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, |
| SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos ) |
| { |
| return NotifyCopyingMoving( pTarget, pEntry, |
| rpNewParent, rNewChildPos, sal_True ); |
| } |
| |
| |
| sal_Bool __EXPORT ExtBasicTreeListBox::NotifyCopying( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, |
| SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos ) |
| { |
| // return sal_False; // Wie kopiere ich ein SBX ?! |
| return NotifyCopyingMoving( pTarget, pEntry, |
| rpNewParent, rNewChildPos, sal_False ); |
| } |
| |
| |
| void BasicIDEShell::CopyDialogResources( Reference< io::XInputStreamProvider >& io_xISP, |
| const ScriptDocument& rSourceDoc, const String& rSourceLibName, const ScriptDocument& rDestDoc, |
| const String& rDestLibName, const String& rDlgName ) |
| { |
| if ( !io_xISP.is() ) |
| return; |
| |
| // Get StringResourceManager |
| Reference< container::XNameContainer > xSourceDialogLib( rSourceDoc.getLibrary( E_DIALOGS, rSourceLibName, sal_True ) ); |
| Reference< XStringResourceManager > xSourceMgr = |
| LocalizationMgr::getStringResourceFromDialogLibrary( xSourceDialogLib ); |
| if( !xSourceMgr.is() ) |
| return; |
| bool bSourceLocalized = ( xSourceMgr->getLocales().getLength() > 0 ); |
| |
| Reference< container::XNameContainer > xDestDialogLib( rDestDoc.getLibrary( E_DIALOGS, rDestLibName, sal_True ) ); |
| Reference< XStringResourceManager > xDestMgr = |
| LocalizationMgr::getStringResourceFromDialogLibrary( xDestDialogLib ); |
| if( !xDestMgr.is() ) |
| return; |
| bool bDestLocalized = ( xDestMgr->getLocales().getLength() > 0 ); |
| |
| if( !bSourceLocalized && !bDestLocalized ) |
| return; |
| |
| // create dialog model |
| Reference< lang::XMultiServiceFactory > xMSF = ::comphelper::getProcessServiceFactory(); |
| Reference< container::XNameContainer > xDialogModel = Reference< container::XNameContainer >( xMSF->createInstance |
| ( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ), UNO_QUERY ); |
| Reference< io::XInputStream > xInput( io_xISP->createInputStream() ); |
| Reference< XComponentContext > xContext; |
| Reference< beans::XPropertySet > xProps( xMSF, UNO_QUERY ); |
| OSL_ASSERT( xProps.is() ); |
| OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext ); |
| ::xmlscript::importDialogModel( xInput, xDialogModel, xContext ); |
| |
| if( xDialogModel.is() ) |
| { |
| if( bSourceLocalized && bDestLocalized ) |
| { |
| Reference< resource::XStringResourceResolver > xSourceStringResolver( xSourceMgr, UNO_QUERY ); |
| LocalizationMgr::copyResourceForDroppedDialog( xDialogModel, rDlgName, xDestMgr, xSourceStringResolver ); |
| } |
| else if( bSourceLocalized ) |
| { |
| LocalizationMgr::resetResourceForDialog( xDialogModel, xSourceMgr ); |
| } |
| else if( bDestLocalized ) |
| { |
| LocalizationMgr::setResourceIDsForDialog( xDialogModel, xDestMgr ); |
| } |
| io_xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext ); |
| } |
| } |
| |
| |
| sal_Bool __EXPORT ExtBasicTreeListBox::NotifyCopyingMoving( SvLBoxEntry* pTarget, SvLBoxEntry* pEntry, |
| SvLBoxEntry*& rpNewParent, sal_uLong& rNewChildPos, sal_Bool bMove ) |
| { |
| (void)pEntry; |
| DBG_ASSERT( pEntry, "Kein Eintrag?" ); // Hier ASS ok, sollte nicht mit |
| DBG_ASSERT( pTarget, "Kein Ziel?" ); // NULL (ganz vorne) erreicht werden |
| sal_uInt16 nDepth = GetModel()->GetDepth( pTarget ); |
| DBG_ASSERT( nDepth, "Tiefe?" ); |
| if ( nDepth == 1 ) |
| { |
| // Target = Basic => Modul/Dialog unter das Basic haengen... |
| rpNewParent = pTarget; |
| rNewChildPos = 0; |
| } |
| else if ( nDepth >= 2 ) |
| { |
| // Target = Modul/Dialog => Modul/Dialog unter das uebergeordnete Basic haengen... |
| rpNewParent = GetParent( pTarget ); |
| rNewChildPos = GetModel()->GetRelPos( pTarget ) + 1; |
| } |
| |
| // get target shell and target library name |
| BasicEntryDescriptor aDestDesc( GetEntryDescriptor( rpNewParent ) ); |
| const ScriptDocument& rDestDoc( aDestDesc.GetDocument() ); |
| String aDestLibName( aDestDesc.GetLibName() ); |
| |
| // get source shell, library name and module/dialog name |
| BasicEntryDescriptor aSourceDesc( GetEntryDescriptor( FirstSelected() ) ); |
| const ScriptDocument rSourceDoc( aSourceDesc.GetDocument() ); |
| String aSourceLibName( aSourceDesc.GetLibName() ); |
| String aSourceName( aSourceDesc.GetName() ); |
| BasicEntryType eType( aSourceDesc.GetType() ); |
| |
| // get dispatcher |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| |
| if ( bMove ) // move |
| { |
| // remove source module/dialog window |
| if ( rSourceDoc != rDestDoc || aSourceLibName != aDestLibName ) |
| { |
| if( pDispatcher ) |
| { |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rSourceDoc, aSourceLibName, aSourceName, ConvertType( eType ) ); |
| pDispatcher->Execute( SID_BASICIDE_SBXDELETED, |
| SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| } |
| |
| try |
| { |
| if ( eType == OBJ_TYPE_MODULE ) // module |
| { |
| // get module |
| ::rtl::OUString aModule; |
| if ( rSourceDoc.getModule( aSourceLibName, aSourceName, aModule ) ) |
| { |
| // remove module from source library |
| if ( rSourceDoc.removeModule( aSourceLibName, aSourceName ) ) |
| { |
| BasicIDE::MarkDocumentModified( rSourceDoc ); |
| |
| // insert module into target library |
| if ( rDestDoc.insertModule( aDestLibName, aSourceName, aModule ) ) |
| BasicIDE::MarkDocumentModified( rDestDoc ); |
| } |
| } |
| } |
| else if ( eType == OBJ_TYPE_DIALOG ) // dialog |
| { |
| // get dialog |
| Reference< io::XInputStreamProvider > xISP; |
| if ( rSourceDoc.getDialog( aSourceLibName, aSourceName, xISP ) ) |
| { |
| BasicIDEShell::CopyDialogResources( xISP, rSourceDoc, |
| aSourceLibName, rDestDoc, aDestLibName, aSourceName ); |
| |
| // remove dialog from source library |
| if ( BasicIDE::RemoveDialog( rSourceDoc, aSourceLibName, aSourceName ) ) |
| { |
| BasicIDE::MarkDocumentModified( rSourceDoc ); |
| |
| // insert dialog into target library |
| if ( rDestDoc.insertDialog( aDestLibName, aSourceName, xISP ) ) |
| BasicIDE::MarkDocumentModified( rDestDoc ); |
| } |
| } |
| } |
| } |
| catch ( uno::Exception& ) |
| { |
| DBG_UNHANDLED_EXCEPTION(); |
| } |
| } |
| else // copy |
| { |
| try |
| { |
| if ( eType == OBJ_TYPE_MODULE ) // module |
| { |
| // get module |
| ::rtl::OUString aModule; |
| if ( rSourceDoc.getModule( aSourceLibName, aSourceName, aModule ) ) |
| { |
| // insert module into target library |
| if ( rDestDoc.insertModule( aDestLibName, aSourceName, aModule ) ) |
| BasicIDE::MarkDocumentModified( rDestDoc ); |
| } |
| } |
| else if ( eType == OBJ_TYPE_DIALOG ) // dialog |
| { |
| // get dialog |
| Reference< io::XInputStreamProvider > xISP; |
| if ( rSourceDoc.getDialog( aSourceLibName, aSourceName, xISP ) ) |
| { |
| BasicIDEShell::CopyDialogResources( xISP, rSourceDoc, |
| aSourceLibName, rDestDoc, aDestLibName, aSourceName ); |
| |
| // insert dialog into target library |
| if ( rDestDoc.insertDialog( aDestLibName, aSourceName, xISP ) ) |
| BasicIDE::MarkDocumentModified( rDestDoc ); |
| } |
| } |
| } |
| catch ( const Exception& ) |
| { |
| DBG_UNHANDLED_EXCEPTION(); |
| } |
| } |
| |
| // create target module/dialog window |
| if ( rSourceDoc != rDestDoc || aSourceLibName != aDestLibName ) |
| { |
| if( pDispatcher ) |
| { |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rDestDoc, aDestLibName, aSourceName, ConvertType( eType ) ); |
| pDispatcher->Execute( SID_BASICIDE_SBXINSERTED, |
| SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| } |
| |
| return 2; // Aufklappen... |
| } |
| |
| OrganizeDialog::OrganizeDialog( Window* pParent, sal_Int16 tabId, BasicEntryDescriptor& rDesc ) |
| :TabDialog( pParent, IDEResId( RID_TD_ORGANIZE ) ) |
| ,aTabCtrl( this, IDEResId( RID_TC_ORGANIZE ) ) |
| ,m_aCurEntry( rDesc ) |
| { |
| FreeResource(); |
| aTabCtrl.SetActivatePageHdl( LINK( this, OrganizeDialog, ActivatePageHdl ) ); |
| if( tabId == 0 ) |
| { |
| aTabCtrl.SetCurPageId( RID_TP_MOD ); |
| } |
| else if ( tabId == 1 ) |
| { |
| aTabCtrl.SetCurPageId( RID_TP_DLG ); |
| } |
| else |
| { |
| aTabCtrl.SetCurPageId( RID_TP_LIB ); |
| } |
| |
| ActivatePageHdl( &aTabCtrl ); |
| |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| if( pDispatcher ) |
| { |
| pDispatcher->Execute( SID_BASICIDE_STOREALLMODULESOURCES ); |
| } |
| } |
| |
| __EXPORT OrganizeDialog::~OrganizeDialog() |
| { |
| for ( sal_uInt16 i = 0; i < aTabCtrl.GetPageCount(); i++ ) |
| delete aTabCtrl.GetTabPage( aTabCtrl.GetPageId( i ) ); |
| }; |
| |
| short OrganizeDialog::Execute() |
| { |
| Window* pPrevDlgParent = Application::GetDefDialogParent(); |
| Application::SetDefDialogParent( this ); |
| short nRet = TabDialog::Execute(); |
| Application::SetDefDialogParent( pPrevDlgParent ); |
| return nRet; |
| } |
| |
| |
| IMPL_LINK( OrganizeDialog, ActivatePageHdl, TabControl *, pTabCtrl ) |
| { |
| sal_uInt16 nId = pTabCtrl->GetCurPageId(); |
| // Wenn TabPage noch nicht erzeugt wurde, dann erzeugen |
| if ( !pTabCtrl->GetTabPage( nId ) ) |
| { |
| TabPage* pNewTabPage = 0; |
| switch ( nId ) |
| { |
| case RID_TP_MOD: |
| { |
| pNewTabPage = new ObjectPage( pTabCtrl, IDEResId( RID_TP_MODULS ), BROWSEMODE_MODULES ); |
| ((ObjectPage*)pNewTabPage)->SetTabDlg( this ); |
| ((ObjectPage*)pNewTabPage)->SetCurrentEntry( m_aCurEntry ); |
| } |
| break; |
| case RID_TP_DLG: |
| { |
| pNewTabPage = new ObjectPage( pTabCtrl, IDEResId( RID_TP_DLGS ), BROWSEMODE_DIALOGS ); |
| ((ObjectPage*)pNewTabPage)->SetTabDlg( this ); |
| ((ObjectPage*)pNewTabPage)->SetCurrentEntry( m_aCurEntry ); |
| } |
| break; |
| case RID_TP_LIB: |
| { |
| pNewTabPage = new LibPage( pTabCtrl ); |
| ((LibPage*)pNewTabPage)->SetTabDlg( this ); |
| } |
| break; |
| default: DBG_ERROR( "PageHdl: Unbekannte ID!" ); |
| } |
| DBG_ASSERT( pNewTabPage, "Keine Page!" ); |
| pTabCtrl->SetTabPage( nId, pNewTabPage ); |
| } |
| return 0; |
| } |
| |
| ObjectPage::ObjectPage( Window * pParent, const ResId& rResId, sal_uInt16 nMode ) : |
| TabPage( pParent, rResId ), |
| aLibText( this, IDEResId( RID_STR_LIB ) ), |
| aBasicBox( this, IDEResId( RID_TRLBOX ) ), |
| aEditButton( this, IDEResId( RID_PB_EDIT ) ), |
| aCloseButton( this, IDEResId( RID_PB_CLOSE ) ), |
| aNewModButton( this, IDEResId( RID_PB_NEWMOD ) ), |
| aNewDlgButton( this, IDEResId( RID_PB_NEWDLG ) ), |
| aDelButton( this, IDEResId( RID_PB_DELETE ) ) |
| { |
| FreeResource(); |
| pTabDlg = 0; |
| |
| aEditButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); |
| aDelButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); |
| aCloseButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); |
| aBasicBox.SetSelectHdl( LINK( this, ObjectPage, BasicBoxHighlightHdl ) ); |
| |
| if( nMode & BROWSEMODE_MODULES ) |
| { |
| aNewModButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); |
| aNewDlgButton.Hide(); |
| } |
| else if ( nMode & BROWSEMODE_DIALOGS ) |
| { |
| aNewDlgButton.SetClickHdl( LINK( this, ObjectPage, ButtonHdl ) ); |
| aNewModButton.Hide(); |
| } |
| |
| aBasicBox.SetDragDropMode( SV_DRAGDROP_CTRL_MOVE | SV_DRAGDROP_CTRL_COPY ); |
| aBasicBox.EnableInplaceEditing( sal_True ); |
| aBasicBox.SetMode( nMode ); |
| aBasicBox.SetStyle( WB_BORDER | WB_TABSTOP | |
| WB_HASLINES | WB_HASLINESATROOT | |
| WB_HASBUTTONS | WB_HASBUTTONSATROOT | |
| WB_HSCROLL ); |
| aBasicBox.ScanAllEntries(); |
| |
| aEditButton.GrabFocus(); |
| CheckButtons(); |
| } |
| |
| void ObjectPage::SetCurrentEntry( BasicEntryDescriptor& rDesc ) |
| { |
| aBasicBox.SetCurrentEntry( rDesc ); |
| } |
| |
| void __EXPORT ObjectPage::ActivatePage() |
| { |
| aBasicBox.UpdateEntries(); |
| } |
| |
| void __EXPORT ObjectPage::DeactivatePage() |
| { |
| } |
| |
| void ObjectPage::CheckButtons() |
| { |
| // enable/disable edit button |
| SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); |
| BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); |
| ScriptDocument aDocument( aDesc.GetDocument() ); |
| ::rtl::OUString aOULibName( aDesc.GetLibName() ); |
| String aLibSubName( aDesc.GetLibSubName() ); |
| sal_Bool bVBAEnabled = aDocument.isInVBAMode(); |
| sal_uInt16 nMode = aBasicBox.GetMode(); |
| |
| sal_uInt16 nDepth = pCurEntry ? aBasicBox.GetModel()->GetDepth( pCurEntry ) : 0; |
| if ( nDepth >= 2 ) |
| { |
| if( bVBAEnabled && ( nMode & BROWSEMODE_MODULES ) && ( nDepth == 2 ) ) |
| aEditButton.Disable(); |
| else |
| aEditButton.Enable(); |
| } |
| else |
| aEditButton.Disable(); |
| |
| // enable/disable new module/dialog buttons |
| LibraryLocation eLocation( aDesc.GetLocation() ); |
| sal_Bool bReadOnly = sal_False; |
| if ( nDepth > 0 ) |
| { |
| Reference< script::XLibraryContainer2 > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); |
| Reference< script::XLibraryContainer2 > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY ); |
| if ( ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && xModLibContainer->isLibraryReadOnly( aOULibName ) ) || |
| ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) ) ) |
| { |
| bReadOnly = sal_True; |
| } |
| } |
| if ( bReadOnly || eLocation == LIBRARY_LOCATION_SHARE ) |
| { |
| aNewModButton.Disable(); |
| aNewDlgButton.Disable(); |
| } |
| else |
| { |
| aNewModButton.Enable(); |
| aNewDlgButton.Enable(); |
| } |
| |
| // enable/disable delete button |
| if ( nDepth >= 2 && !bReadOnly && eLocation != LIBRARY_LOCATION_SHARE ) |
| { |
| if( bVBAEnabled && ( nMode & BROWSEMODE_MODULES ) && ( ( nDepth == 2 ) || aLibSubName.Equals( String( IDEResId( RID_STR_DOCUMENT_OBJECTS ) ) ) ) ) |
| aDelButton.Disable(); |
| else |
| aDelButton.Enable(); |
| } |
| else |
| aDelButton.Disable(); |
| } |
| |
| IMPL_LINK( ObjectPage, BasicBoxHighlightHdl, BasicTreeListBox *, pBox ) |
| { |
| if ( !pBox->IsSelected( pBox->GetHdlEntry() ) ) |
| return 0; |
| |
| CheckButtons(); |
| return 0; |
| } |
| |
| IMPL_LINK( ObjectPage, ButtonHdl, Button *, pButton ) |
| { |
| if ( pButton == &aEditButton ) |
| { |
| SfxAllItemSet aArgs( SFX_APP()->GetPool() ); |
| SfxRequest aRequest( SID_BASICIDE_APPEAR, SFX_CALLMODE_SYNCHRON, aArgs ); |
| SFX_APP()->ExecuteSlot( aRequest ); |
| |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); |
| DBG_ASSERT( pCurEntry, "Entry?!" ); |
| if ( aBasicBox.GetModel()->GetDepth( pCurEntry ) >= 2 ) |
| { |
| BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); |
| if ( pDispatcher ) |
| { |
| String aModName( aDesc.GetName() ); |
| // extract the module name from the string like "Sheet1 (Example1)" |
| if( aDesc.GetLibSubName().Equals( String( IDEResId( RID_STR_DOCUMENT_OBJECTS ) ) ) ) |
| { |
| sal_uInt16 nIndex = 0; |
| aModName = aModName.GetToken( 0, ' ', nIndex ); |
| } |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDesc.GetDocument(), aDesc.GetLibName(), |
| aModName, aBasicBox.ConvertType( aDesc.GetType() ) ); |
| pDispatcher->Execute( SID_BASICIDE_SHOWSBX, SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| } |
| else // Nur Lib selektiert |
| { |
| DBG_ASSERT( aBasicBox.GetModel()->GetDepth( pCurEntry ) == 1, "Kein LibEntry?!" ); |
| ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() ); |
| SvLBoxEntry* pParentEntry = aBasicBox.GetParent( pCurEntry ); |
| if ( pParentEntry ) |
| { |
| BasicDocumentEntry* pBasicDocumentEntry = (BasicDocumentEntry*)pParentEntry->GetUserData(); |
| if ( pBasicDocumentEntry ) |
| aDocument = pBasicDocumentEntry->GetDocument(); |
| } |
| SfxUsrAnyItem aDocItem( SID_BASICIDE_ARG_DOCUMENT_MODEL, makeAny( aDocument.getDocumentOrNull() ) ); |
| String aLibName( aBasicBox.GetEntryText( pCurEntry ) ); |
| SfxStringItem aLibNameItem( SID_BASICIDE_ARG_LIBNAME, aLibName ); |
| if ( pDispatcher ) |
| { |
| pDispatcher->Execute( SID_BASICIDE_LIBSELECTED, SFX_CALLMODE_ASYNCHRON, &aDocItem, &aLibNameItem, 0L ); |
| } |
| } |
| EndTabDialog( 1 ); |
| } |
| else if ( pButton == &aNewModButton ) |
| NewModule(); |
| else if ( pButton == &aNewDlgButton ) |
| NewDialog(); |
| else if ( pButton == &aDelButton ) |
| DeleteCurrent(); |
| else if ( pButton == &aCloseButton ) |
| EndTabDialog( 0 ); |
| |
| return 0; |
| } |
| |
| bool ObjectPage::GetSelection( ScriptDocument& rDocument, String& rLibName ) |
| { |
| bool bRet = false; |
| |
| SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); |
| BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); |
| rDocument = aDesc.GetDocument(); |
| rLibName = aDesc.GetLibName(); |
| if ( !rLibName.Len() ) |
| rLibName = String::CreateFromAscii( "Standard" ); |
| |
| DBG_ASSERT( rDocument.isAlive(), "ObjectPage::GetSelection: no or dead ScriptDocument in the selection!" ); |
| if ( !rDocument.isAlive() ) |
| return false; |
| |
| // check if the module library is loaded |
| sal_Bool bOK = sal_True; |
| ::rtl::OUString aOULibName( rLibName ); |
| Reference< script::XLibraryContainer > xModLibContainer( rDocument.getLibraryContainer( E_SCRIPTS ) ); |
| if ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && !xModLibContainer->isLibraryLoaded( aOULibName ) ) |
| { |
| // check password |
| Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY ); |
| if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aOULibName ) && !xPasswd->isLibraryPasswordVerified( aOULibName ) ) |
| { |
| String aPassword; |
| bOK = QueryPassword( xModLibContainer, rLibName, aPassword ); |
| } |
| |
| // load library |
| if ( bOK ) |
| xModLibContainer->loadLibrary( aOULibName ); |
| } |
| |
| // check if the dialog library is loaded |
| Reference< script::XLibraryContainer > xDlgLibContainer( rDocument.getLibraryContainer( E_DIALOGS ) ); |
| if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && !xDlgLibContainer->isLibraryLoaded( aOULibName ) ) |
| { |
| // load library |
| if ( bOK ) |
| xDlgLibContainer->loadLibrary( aOULibName ); |
| } |
| |
| if ( bOK ) |
| bRet = true; |
| |
| return bRet; |
| } |
| |
| void ObjectPage::NewModule() |
| { |
| ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() ); |
| String aLibName; |
| |
| if ( GetSelection( aDocument, aLibName ) ) |
| { |
| String aModName; |
| createModImpl( static_cast<Window*>( this ), aDocument, |
| aBasicBox, aLibName, aModName, true ); |
| } |
| } |
| |
| void ObjectPage::NewDialog() |
| { |
| ScriptDocument aDocument( ScriptDocument::getApplicationScriptDocument() ); |
| String aLibName; |
| |
| if ( GetSelection( aDocument, aLibName ) ) |
| { |
| aDocument.getOrCreateLibrary( E_DIALOGS, aLibName ); |
| |
| std::auto_ptr< NewObjectDialog > xNewDlg( |
| new NewObjectDialog(this, NEWOBJECTMODE_DLG, true)); |
| xNewDlg->SetObjectName( aDocument.createObjectName( E_DIALOGS, aLibName ) ); |
| |
| if (xNewDlg->Execute() != 0) |
| { |
| String aDlgName( xNewDlg->GetObjectName() ); |
| if (aDlgName.Len() == 0) |
| aDlgName = aDocument.createObjectName( E_DIALOGS, aLibName); |
| |
| if ( aDocument.hasDialog( aLibName, aDlgName ) ) |
| { |
| ErrorBox( this, WB_OK | WB_DEF_OK, |
| String( IDEResId( RID_STR_SBXNAMEALLREADYUSED2 ) ) ).Execute(); |
| } |
| else |
| { |
| Reference< io::XInputStreamProvider > xISP; |
| if ( !aDocument.createDialog( aLibName, aDlgName, xISP ) ) |
| return; |
| |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, aDlgName, BASICIDE_TYPE_DIALOG ); |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| if( pDispatcher ) |
| { |
| pDispatcher->Execute( SID_BASICIDE_SBXINSERTED, |
| SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| LibraryLocation eLocation = aDocument.getLibraryLocation( aLibName ); |
| SvLBoxEntry* pRootEntry = aBasicBox.FindRootEntry( aDocument, eLocation ); |
| if ( pRootEntry ) |
| { |
| if ( !aBasicBox.IsExpanded( pRootEntry ) ) |
| aBasicBox.Expand( pRootEntry ); |
| SvLBoxEntry* pLibEntry = aBasicBox.FindEntry( pRootEntry, aLibName, OBJ_TYPE_LIBRARY ); |
| DBG_ASSERT( pLibEntry, "Libeintrag nicht gefunden!" ); |
| if ( pLibEntry ) |
| { |
| if ( !aBasicBox.IsExpanded( pLibEntry ) ) |
| aBasicBox.Expand( pLibEntry ); |
| SvLBoxEntry* pEntry = aBasicBox.FindEntry( pLibEntry, aDlgName, OBJ_TYPE_DIALOG ); |
| if ( !pEntry ) |
| { |
| pEntry = aBasicBox.AddEntry( |
| aDlgName, |
| Image( IDEResId( RID_IMG_DIALOG ) ), |
| Image( IDEResId( RID_IMG_DIALOG_HC ) ), |
| pLibEntry, false, |
| std::auto_ptr< BasicEntry >( new BasicEntry( OBJ_TYPE_DIALOG ) ) ); |
| DBG_ASSERT( pEntry, "InsertEntry fehlgeschlagen!" ); |
| } |
| aBasicBox.SetCurEntry( pEntry ); |
| aBasicBox.Select( aBasicBox.GetCurEntry() ); // OV-Bug?! |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| void ObjectPage::DeleteCurrent() |
| { |
| SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); |
| DBG_ASSERT( pCurEntry, "Kein aktueller Eintrag!" ); |
| BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); |
| ScriptDocument aDocument( aDesc.GetDocument() ); |
| DBG_ASSERT( aDocument.isAlive(), "ObjectPage::DeleteCurrent: no document!" ); |
| if ( !aDocument.isAlive() ) |
| return; |
| String aLibName( aDesc.GetLibName() ); |
| String aName( aDesc.GetName() ); |
| BasicEntryType eType( aDesc.GetType() ); |
| |
| if ( ( eType == OBJ_TYPE_MODULE && QueryDelModule( aName, this ) ) || |
| ( eType == OBJ_TYPE_DIALOG && QueryDelDialog( aName, this ) ) ) |
| { |
| aBasicBox.GetModel()->Remove( pCurEntry ); |
| if ( aBasicBox.GetCurEntry() ) // OV-Bug ? |
| aBasicBox.Select( aBasicBox.GetCurEntry() ); |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| if( pDispatcher ) |
| { |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, aDocument, aLibName, aName, aBasicBox.ConvertType( eType ) ); |
| pDispatcher->Execute( SID_BASICIDE_SBXDELETED, |
| SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| |
| try |
| { |
| bool bSuccess = false; |
| if ( eType == OBJ_TYPE_MODULE ) |
| bSuccess = aDocument.removeModule( aLibName, aName ); |
| else if ( eType == OBJ_TYPE_DIALOG ) |
| bSuccess = BasicIDE::RemoveDialog( aDocument, aLibName, aName ); |
| |
| if ( bSuccess ) |
| BasicIDE::MarkDocumentModified( aDocument ); |
| } |
| catch ( container::NoSuchElementException& ) |
| { |
| DBG_UNHANDLED_EXCEPTION(); |
| } |
| } |
| } |
| |
| |
| |
| void ObjectPage::EndTabDialog( sal_uInt16 nRet ) |
| { |
| DBG_ASSERT( pTabDlg, "TabDlg nicht gesetzt!" ); |
| if ( pTabDlg ) |
| pTabDlg->EndDialog( nRet ); |
| } |
| |
| |
| LibDialog::LibDialog( Window* pParent ) |
| : ModalDialog( pParent, IDEResId( RID_DLG_LIBS ) ), |
| aOKButton( this, IDEResId( RID_PB_OK ) ), |
| aCancelButton( this, IDEResId( RID_PB_CANCEL ) ), |
| aStorageName( this, IDEResId( RID_FT_STORAGENAME ) ), |
| aLibBox( this, IDEResId( RID_CTRL_LIBS ) ), |
| aFixedLine( this, IDEResId( RID_FL_OPTIONS ) ), |
| aReferenceBox( this, IDEResId( RID_CB_REF ) ), |
| aReplaceBox( this, IDEResId( RID_CB_REPL ) ) |
| { |
| SetText( String( IDEResId( RID_STR_APPENDLIBS ) ) ); |
| FreeResource(); |
| } |
| |
| |
| LibDialog::~LibDialog() |
| { |
| } |
| |
| void LibDialog::SetStorageName( const String& rName ) |
| { |
| String aName( IDEResId( RID_STR_FILENAME ) ); |
| aName += rName; |
| aStorageName.SetText( aName ); |
| } |
| |
| // Helper function |
| SbModule* createModImpl( Window* pWin, const ScriptDocument& rDocument, |
| BasicTreeListBox& rBasicBox, const String& rLibName, String aModName, bool bMain ) |
| { |
| OSL_ENSURE( rDocument.isAlive(), "createModImpl: invalid document!" ); |
| if ( !rDocument.isAlive() ) |
| return NULL; |
| |
| SbModule* pModule = NULL; |
| |
| String aLibName( rLibName ); |
| if ( !aLibName.Len() ) |
| aLibName = String::CreateFromAscii( "Standard" ); |
| rDocument.getOrCreateLibrary( E_SCRIPTS, aLibName ); |
| if ( !aModName.Len() ) |
| aModName = rDocument.createObjectName( E_SCRIPTS, aLibName ); |
| |
| std::auto_ptr< NewObjectDialog > xNewDlg( |
| new NewObjectDialog( pWin, NEWOBJECTMODE_MOD, true ) ); |
| xNewDlg->SetObjectName( aModName ); |
| |
| if (xNewDlg->Execute() != 0) |
| { |
| if ( xNewDlg->GetObjectName().Len() ) |
| aModName = xNewDlg->GetObjectName(); |
| |
| try |
| { |
| ::rtl::OUString sModuleCode; |
| // the module has existed |
| if( rDocument.hasModule( aLibName, aModName ) ) |
| return NULL; |
| rDocument.createModule( aLibName, aModName, bMain, sModuleCode ); |
| BasicManager* pBasMgr = rDocument.getBasicManager(); |
| StarBASIC* pBasic = pBasMgr? pBasMgr->GetLib( aLibName ) : 0; |
| if ( pBasic ) |
| pModule = pBasic->FindModule( aModName ); |
| SbxItem aSbxItem( SID_BASICIDE_ARG_SBX, rDocument, aLibName, aModName, BASICIDE_TYPE_MODULE ); |
| BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); |
| SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; |
| SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; |
| if( pDispatcher ) |
| { |
| pDispatcher->Execute( SID_BASICIDE_SBXINSERTED, |
| SFX_CALLMODE_SYNCHRON, &aSbxItem, 0L ); |
| } |
| LibraryLocation eLocation = rDocument.getLibraryLocation( aLibName ); |
| SvLBoxEntry* pRootEntry = rBasicBox.FindRootEntry( rDocument, eLocation ); |
| if ( pRootEntry ) |
| { |
| if ( !rBasicBox.IsExpanded( pRootEntry ) ) |
| rBasicBox.Expand( pRootEntry ); |
| SvLBoxEntry* pLibEntry = rBasicBox.FindEntry( pRootEntry, aLibName, OBJ_TYPE_LIBRARY ); |
| DBG_ASSERT( pLibEntry, "Libeintrag nicht gefunden!" ); |
| if ( pLibEntry ) |
| { |
| if ( !rBasicBox.IsExpanded( pLibEntry ) ) |
| rBasicBox.Expand( pLibEntry ); |
| SvLBoxEntry* pSubRootEntry = pLibEntry; |
| if( pBasic && rDocument.isInVBAMode() ) |
| { |
| // add the new module in the "Modules" entry |
| SvLBoxEntry* pLibSubEntry = rBasicBox.FindEntry( pLibEntry, String( IDEResId( RID_STR_NORMAL_MODULES ) ) , OBJ_TYPE_NORMAL_MODULES ); |
| if( pLibSubEntry ) |
| { |
| if( !rBasicBox.IsExpanded( pLibSubEntry ) ) |
| rBasicBox.Expand( pLibSubEntry ); |
| pSubRootEntry = pLibSubEntry; |
| } |
| } |
| |
| SvLBoxEntry* pEntry = rBasicBox.FindEntry( pSubRootEntry, aModName, OBJ_TYPE_MODULE ); |
| if ( !pEntry ) |
| { |
| pEntry = rBasicBox.AddEntry( |
| aModName, |
| Image( IDEResId( RID_IMG_MODULE ) ), |
| Image( IDEResId( RID_IMG_MODULE_HC ) ), |
| pSubRootEntry, false, |
| std::auto_ptr< BasicEntry >( new BasicEntry( OBJ_TYPE_MODULE ) ) ); |
| DBG_ASSERT( pEntry, "InsertEntry fehlgeschlagen!" ); |
| } |
| rBasicBox.SetCurEntry( pEntry ); |
| rBasicBox.Select( rBasicBox.GetCurEntry() ); // OV-Bug?! |
| } |
| } |
| } |
| catch ( container::ElementExistException& ) |
| { |
| ErrorBox( pWin, WB_OK | WB_DEF_OK, |
| String( IDEResId( RID_STR_SBXNAMEALLREADYUSED2 ) ) ).Execute(); |
| } |
| catch ( container::NoSuchElementException& ) |
| { |
| DBG_UNHANDLED_EXCEPTION(); |
| } |
| } |
| return pModule; |
| } |
| |
| |
| |
| |