diff options
Diffstat (limited to 'basctl/source/basicide/macrodlg.cxx')
-rw-r--r-- | basctl/source/basicide/macrodlg.cxx | 910 |
1 files changed, 0 insertions, 910 deletions
diff --git a/basctl/source/basicide/macrodlg.cxx b/basctl/source/basicide/macrodlg.cxx deleted file mode 100644 index b2a11d1c9..000000000 --- a/basctl/source/basicide/macrodlg.cxx +++ /dev/null @@ -1,910 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_basctl.hxx" - -#include <memory> - -#include <ide_pch.hxx> - - -#include <macrodlg.hxx> -#include <macrodlg.hrc> -#include <basidesh.hrc> -#include <basidesh.hxx> -#include <baside2.hrc> // ID's fuer Imagese -#include <basobj.hxx> -#include <baside3.hxx> - -#include <iderdll.hxx> -#include <iderdll2.hxx> -#include <iderid.hxx> - -#include <moduldlg.hxx> -#include <basic/sbx.hxx> - -#include <bastypes.hxx> -#include <sbxitem.hxx> -#include <sfx2/minfitem.hxx> - -#include <com/sun/star/script/XLibraryContainer2.hpp> -#include <com/sun/star/document/MacroExecMode.hpp> - -#include <map> -using ::std::map; -using ::std::pair; - -using namespace ::com::sun::star; -using namespace ::com::sun::star::uno; - -MacroChooser::MacroChooser( Window* pParnt, sal_Bool bCreateEntries ) : - SfxModalDialog( pParnt, IDEResId( RID_MACROCHOOSER ) ), - aMacroNameTxt( this, IDEResId( RID_TXT_MACRONAME ) ), - aMacroNameEdit( this, IDEResId( RID_ED_MACRONAME ) ), - aMacroFromTxT( this, IDEResId( RID_TXT_MACROFROM ) ), - aMacrosSaveInTxt( this, IDEResId( RID_TXT_SAVEMACRO ) ), - aBasicBox( this, IDEResId( RID_CTRL_LIB ) ), - aMacrosInTxt( this, IDEResId( RID_TXT_MACROSIN ) ), - aMacroBox( this, IDEResId( RID_CTRL_MACRO ) ), - aRunButton( this, IDEResId( RID_PB_RUN ) ), - aCloseButton( this, IDEResId( RID_PB_CLOSE ) ), - aAssignButton( this, IDEResId( RID_PB_ASSIGN ) ), - aEditButton( this, IDEResId( RID_PB_EDIT ) ), - aNewDelButton( this, IDEResId( RID_PB_DEL ) ), - aOrganizeButton( this, IDEResId( RID_PB_ORG ) ), - aHelpButton( this, IDEResId( RID_PB_HELP ) ), - aNewLibButton( this, IDEResId( RID_PB_NEWLIB ) ), - aNewModButton( this, IDEResId( RID_PB_NEWMOD ) ) -{ - FreeResource(); - - nMode = MACROCHOOSER_ALL; - bNewDelIsDel = sal_True; - - // Der Sfx fragt den BasicManager nicht, ob modified - // => Speichern anschmeissen, wenn Aenderung, aber kein Sprung in - // die BasicIDE. - bForceStoreBasic = sal_False; - - aMacrosInTxtBaseStr = aMacrosInTxt.GetText(); - - aMacroBox.SetSelectionMode( SINGLE_SELECTION ); - aMacroBox.SetHighlightRange(); // ueber ganze Breite selektieren - - aRunButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aCloseButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aAssignButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aEditButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aNewDelButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aOrganizeButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - - // Buttons only for MACROCHOOSER_RECORDING - aNewLibButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aNewModButton.SetClickHdl( LINK( this, MacroChooser, ButtonHdl ) ); - aNewLibButton.Hide(); // default - aNewModButton.Hide(); // default - aMacrosSaveInTxt.Hide(); // default - - aMacrosInTxt.SetStyle( WB_NOMULTILINE | WB_PATHELLIPSIS ); - - aMacroNameEdit.SetModifyHdl( LINK( this, MacroChooser, EditModifyHdl ) ); - - aBasicBox.SetSelectHdl( LINK( this, MacroChooser, BasicSelectHdl ) ); - - aMacroBox.SetDoubleClickHdl( LINK( this, MacroChooser, MacroDoubleClickHdl ) ); - aMacroBox.SetSelectHdl( LINK( this, MacroChooser, MacroSelectHdl ) ); - - aBasicBox.SetMode( BROWSEMODE_MODULES ); - aBasicBox.SetStyle( WB_TABSTOP | WB_BORDER | - WB_HASLINES | WB_HASLINESATROOT | - WB_HASBUTTONS | WB_HASBUTTONSATROOT | - WB_HSCROLL ); - - BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); - SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; - SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; - if( pDispatcher ) - { - pDispatcher->Execute( SID_BASICIDE_STOREALLMODULESOURCES ); - } - - if ( bCreateEntries ) - aBasicBox.ScanAllEntries(); -} - -MacroChooser::~MacroChooser() -{ - if ( bForceStoreBasic ) - SFX_APP()->SaveBasicAndDialogContainer(); -} - -void MacroChooser::StoreMacroDescription() -{ - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( aBasicBox.FirstSelected() ) ); - String aMethodName; - SvLBoxEntry* pEntry = aMacroBox.FirstSelected(); - if ( pEntry ) - aMethodName = aMacroBox.GetEntryText( pEntry ); - else - aMethodName = aMacroNameEdit.GetText(); - if ( aMethodName.Len() ) - { - aDesc.SetMethodName( aMethodName ); - aDesc.SetType( OBJ_TYPE_METHOD ); - } - - BasicIDEData* pData = IDE_DLL()->GetExtraData(); - if ( pData ) - pData->SetLastEntryDescriptor( aDesc ); -} - -void MacroChooser::RestoreMacroDescription() -{ - BasicEntryDescriptor aDesc; - BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); - if ( pIDEShell ) - { - IDEBaseWindow* pCurWin = pIDEShell->GetCurWindow(); - if ( pCurWin ) - aDesc = pCurWin->CreateEntryDescriptor(); - } - else - { - BasicIDEData* pData = IDE_DLL()->GetExtraData(); - if ( pData ) - aDesc = pData->GetLastEntryDescriptor(); - } - - aBasicBox.SetCurrentEntry( aDesc ); - - String aLastMacro( aDesc.GetMethodName() ); - if ( aLastMacro.Len() ) - { - // find entry in macro box - SvLBoxEntry* pEntry = 0; - sal_uLong nPos = 0; - SvLBoxEntry* pE = aMacroBox.GetEntry( nPos ); - while ( pE ) - { - if ( aMacroBox.GetEntryText( pE ) == aLastMacro ) - { - pEntry = pE; - break; - } - pE = aMacroBox.GetEntry( ++nPos ); - } - - if ( pEntry ) - aMacroBox.SetCurEntry( pEntry ); - else - { - aMacroNameEdit.SetText( aLastMacro ); - aMacroNameEdit.SetSelection( Selection( 0, 0 ) ); - } - } -} - -short MacroChooser::Execute() -{ - RestoreMacroDescription(); - aRunButton.GrabFocus(); - - // #104198 Check if "wrong" document is active - SvLBoxEntry* pSelectedEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pSelectedEntry ) ); - const ScriptDocument& rSelectedDoc( aDesc.GetDocument() ); - - // App Basic is always ok, so only check if shell was found - if( rSelectedDoc.isDocument() && !rSelectedDoc.isActive() ) - { - // Search for the right entry - sal_uLong nRootPos = 0; - SvLBoxEntry* pRootEntry = aBasicBox.GetEntry( nRootPos ); - while( pRootEntry ) - { - BasicEntryDescriptor aCmpDesc( aBasicBox.GetEntryDescriptor( pRootEntry ) ); - const ScriptDocument& rCmpDoc( aCmpDesc.GetDocument() ); - if ( rCmpDoc.isDocument() && rCmpDoc.isActive() ) - { - SvLBoxEntry* pEntry = pRootEntry; - SvLBoxEntry* pLastValid = pEntry; - while ( pEntry ) - { - pLastValid = pEntry; - pEntry = aBasicBox.FirstChild( pEntry ); - } - if( pLastValid ) - aBasicBox.SetCurEntry( pLastValid ); - } - pRootEntry = aBasicBox.GetEntry( ++nRootPos ); - } - } - - CheckButtons(); - UpdateFields(); - - if ( StarBASIC::IsRunning() ) - aCloseButton.GrabFocus(); - - Window* pPrevDlgParent = Application::GetDefDialogParent(); - Application::SetDefDialogParent( this ); - short nRet = ModalDialog::Execute(); - // #57314# Wenn die BasicIDE aktiviert wurde, dann nicht den DefModalDialogParent auf das inaktive Dokument zuruecksetzen. - if ( Application::GetDefDialogParent() == this ) - Application::SetDefDialogParent( pPrevDlgParent ); - return nRet; -} - - -void MacroChooser::EnableButton( Button& rButton, sal_Bool bEnable ) -{ - if ( bEnable ) - { - if ( nMode == MACROCHOOSER_CHOOSEONLY || nMode == MACROCHOOSER_RECORDING ) - { - // Nur der RunButton kann enabled werden - if ( &rButton == &aRunButton ) - rButton.Enable(); - else - rButton.Disable(); - } - else - rButton.Enable(); - } - else - rButton.Disable(); -} - - - - -SbMethod* MacroChooser::GetMacro() -{ - SbMethod* pMethod = 0; - SbModule* pModule = aBasicBox.FindModule( aBasicBox.GetCurEntry() ); - if ( pModule ) - { - SvLBoxEntry* pEntry = aMacroBox.FirstSelected(); - if ( pEntry ) - { - String aMacroName( aMacroBox.GetEntryText( pEntry ) ); - pMethod = (SbMethod*)pModule->GetMethods()->Find( aMacroName, SbxCLASS_METHOD ); - } - } - return pMethod; -} - - - -void MacroChooser::DeleteMacro() -{ - SbMethod* pMethod = GetMacro(); - DBG_ASSERT( pMethod, "DeleteMacro: Kein Macro !" ); - if ( pMethod && QueryDelMacro( pMethod->GetName(), this ) ) - { - BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); - SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; - SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; - if( pDispatcher ) - { - pDispatcher->Execute( SID_BASICIDE_STOREALLMODULESOURCES ); - } - - // Aktuelles Doc als geaendert markieren: - StarBASIC* pBasic = BasicIDE::FindBasic( pMethod ); - DBG_ASSERT( pBasic, "Basic?!" ); - BasicManager* pBasMgr = BasicIDE::FindBasicManager( pBasic ); - DBG_ASSERT( pBasMgr, "BasMgr?" ); - ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) ); - if ( aDocument.isDocument() ) // Muss ja nicht aus einem Document kommen... - { - aDocument.setDocumentModified(); - SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); - if ( pBindings ) - pBindings->Invalidate( SID_SAVEDOC ); - } - - SbModule* pModule = pMethod->GetModule(); - DBG_ASSERT( pModule, "DeleteMacro: Kein Modul?!" ); - ::rtl::OUString aSource( pModule->GetSource32() ); - sal_uInt16 nStart, nEnd; - pMethod->GetLineRange( nStart, nEnd ); - pModule->GetMethods()->Remove( pMethod ); - CutLines( aSource, nStart-1, nEnd-nStart+1, sal_True ); - pModule->SetSource32( aSource ); - - // update module in library - String aLibName = pBasic->GetName(); - String aModName = pModule->GetName(); - OSL_VERIFY( aDocument.updateModule( aLibName, aModName, aSource ) ); - - SvLBoxEntry* pEntry = aMacroBox.FirstSelected(); - DBG_ASSERT( pEntry, "DeleteMacro: Entry ?!" ); - aMacroBox.GetModel()->Remove( pEntry ); - bForceStoreBasic = sal_True; - } -} - -SbMethod* MacroChooser::CreateMacro() -{ - SbMethod* pMethod = 0; - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); - ScriptDocument aDocument( aDesc.GetDocument() ); - OSL_ENSURE( aDocument.isAlive(), "MacroChooser::CreateMacro: no document!" ); - if ( !aDocument.isAlive() ) - return NULL; - - String aLibName( aDesc.GetLibName() ); - - if ( !aLibName.Len() ) - aLibName = String::CreateFromAscii( "Standard" ); - - aDocument.getOrCreateLibrary( E_SCRIPTS, aLibName ); - - ::rtl::OUString aOULibName( aLibName ); - Reference< script::XLibraryContainer > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ) ); - if ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) && !xModLibContainer->isLibraryLoaded( aOULibName ) ) - xModLibContainer->loadLibrary( aOULibName ); - Reference< script::XLibraryContainer > xDlgLibContainer( aDocument.getLibraryContainer( E_DIALOGS ) ); - if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && !xDlgLibContainer->isLibraryLoaded( aOULibName ) ) - xDlgLibContainer->loadLibrary( aOULibName ); - - BasicManager* pBasMgr = aDocument.getBasicManager(); - StarBASIC* pBasic = pBasMgr ? pBasMgr->GetLib( aLibName ) : 0; - if ( pBasic ) - { - SbModule* pModule = 0; - String aModName( aDesc.GetName() ); - if ( aModName.Len() ) - { - // 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 ); - } - pModule = pBasic->FindModule( aModName ); - } - else if ( pBasic->GetModules()->Count() ) - pModule = (SbModule*)pBasic->GetModules()->Get( 0 ); - - if ( !pModule ) - { - pModule = createModImpl( static_cast<Window*>( this ), - aDocument, aBasicBox, aLibName, aModName ); - } - - String aSubName = aMacroNameEdit.GetText(); - DBG_ASSERT( !pModule || !pModule->GetMethods()->Find( aSubName, SbxCLASS_METHOD ), "Macro existiert schon!" ); - pMethod = pModule ? BasicIDE::CreateMacro( pModule, aSubName ) : NULL; - } - - return pMethod; -} - -void MacroChooser::SaveSetCurEntry( SvTreeListBox& rBox, SvLBoxEntry* pEntry ) -{ - // Durch das Highlight wird das Edit sonst platt gemacht: - - String aSaveText( aMacroNameEdit.GetText() ); - Selection aCurSel( aMacroNameEdit.GetSelection() ); - - rBox.SetCurEntry( pEntry ); - aMacroNameEdit.SetText( aSaveText ); - aMacroNameEdit.SetSelection( aCurSel ); -} - -void MacroChooser::CheckButtons() -{ - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); - SvLBoxEntry* pMacroEntry = aMacroBox.FirstSelected(); - SbMethod* pMethod = GetMacro(); - - // check, if corresponding libraries are readonly - sal_Bool bReadOnly = sal_False; - sal_uInt16 nDepth = pCurEntry ? aBasicBox.GetModel()->GetDepth( pCurEntry ) : 0; - if ( nDepth == 1 || nDepth == 2 ) - { - 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 ) ) ) - { - bReadOnly = sal_True; - } - } - - if ( nMode != MACROCHOOSER_RECORDING ) - { - // Run... - sal_Bool bEnable = pMethod ? sal_True : sal_False; - if ( ( nMode != MACROCHOOSER_CHOOSEONLY ) && StarBASIC::IsRunning() ) - bEnable = sal_False; - EnableButton( aRunButton, bEnable ); - } - - // Organisieren immer moeglich ? - - // Assign... - EnableButton( aAssignButton, pMethod ? sal_True : sal_False ); - - // Edit... - EnableButton( aEditButton, pMacroEntry ? sal_True : sal_False ); - - // aOrganizeButton - EnableButton( aOrganizeButton, !StarBASIC::IsRunning() && ( nMode == MACROCHOOSER_ALL )); - - // aNewDelButton.... - bool bProtected = aBasicBox.IsEntryProtected( pCurEntry ); - bool bShare = ( aDesc.GetLocation() == LIBRARY_LOCATION_SHARE ); - EnableButton( aNewDelButton, - !StarBASIC::IsRunning() && ( nMode == MACROCHOOSER_ALL ) && !bProtected && !bReadOnly && !bShare ); - sal_Bool bPrev = bNewDelIsDel; - bNewDelIsDel = pMethod ? sal_True : sal_False; - if ( ( bPrev != bNewDelIsDel ) && ( nMode == MACROCHOOSER_ALL ) ) - { - String aBtnText( bNewDelIsDel ? IDEResId( RID_STR_BTNDEL) : IDEResId( RID_STR_BTNNEW ) ); - aNewDelButton.SetText( aBtnText ); - } - - if ( nMode == MACROCHOOSER_RECORDING ) - { - // save button - if ( !bProtected && !bReadOnly && !bShare ) - aRunButton.Enable(); - else - aRunButton.Disable(); - - // new library button - if ( !bShare ) - aNewLibButton.Enable(); - else - aNewLibButton.Disable(); - - // new module button - if ( !bProtected && !bReadOnly && !bShare ) - aNewModButton.Enable(); - else - aNewModButton.Disable(); - } -} - - - -IMPL_LINK_INLINE_START( MacroChooser, MacroDoubleClickHdl, SvTreeListBox *, EMPTYARG ) -{ - StoreMacroDescription(); - if ( nMode == MACROCHOOSER_RECORDING ) - { - SbMethod* pMethod = GetMacro(); - if ( pMethod && !QueryReplaceMacro( pMethod->GetName(), this ) ) - return 0; - } - - EndDialog( MACRO_OK_RUN ); - return 0; -} -IMPL_LINK_INLINE_END( MacroChooser, MacroDoubleClickHdl, SvTreeListBox *, EMPTYARG ) - -IMPL_LINK( MacroChooser, MacroSelectHdl, SvTreeListBox *, pBox ) -{ - // Wird auch gerufen, wenn Deselektiert! - // 2 Funktionsaufrufe in jedem SelectHdl, nur weil Olli - // keinen separatren DeselctHdl einfuehren wollte: - // Also: Feststellen, ob Select oder Deselect: - if ( pBox->IsSelected( pBox->GetHdlEntry() ) ) - { - UpdateFields(); - CheckButtons(); - } - return 0; -} - -IMPL_LINK( MacroChooser, BasicSelectHdl, SvTreeListBox *, pBox ) -{ - static String aSpaceStr = String::CreateFromAscii(" "); - - // Wird auch gerufen, wenn Deselektiert! - // 2 Funktionsaufrufe in jedem SelectHdl, nur weil Olli - // keinen separatren DeselctHdl einfuehren wollte: - // Also: Feststellen, ob Select oder Deselect: - if ( !pBox->IsSelected( pBox->GetHdlEntry() ) ) - return 0; - - SbModule* pModule = aBasicBox.FindModule( aBasicBox.GetCurEntry() ); - - aMacroBox.Clear(); - if ( pModule ) - { - String aStr = aMacrosInTxtBaseStr; - aStr += aSpaceStr; - aStr += pModule->GetName(); - - aMacrosInTxt.SetText( aStr ); - - // Die Macros sollen in der Reihenfolge angezeigt werden, - // wie sie im Modul stehen. - - map< sal_uInt16, SbMethod* > aMacros; - size_t nMacroCount = pModule->GetMethods()->Count(); - for ( size_t iMeth = 0; iMeth < nMacroCount; iMeth++ ) - { - SbMethod* pMethod = (SbMethod*)pModule->GetMethods()->Get( iMeth ); - if( pMethod->IsHidden() ) - continue; - DBG_ASSERT( pMethod, "Methode nicht gefunden! (NULL)" ); - // Eventuell weiter vorne ? - sal_uInt16 nStart, nEnd; - pMethod->GetLineRange( nStart, nEnd ); - aMacros.insert( map< sal_uInt16, SbMethod*>::value_type( nStart, pMethod ) ); - } - - aMacroBox.SetUpdateMode( sal_False ); - for ( map< sal_uInt16, SbMethod* >::iterator it = aMacros.begin(); it != aMacros.end(); ++it ) - aMacroBox.InsertEntry( (*it).second->GetName() ); - aMacroBox.SetUpdateMode( sal_True ); - - if ( aMacroBox.GetEntryCount() ) - { - SvLBoxEntry* pEntry = aMacroBox.GetEntry( 0 ); - DBG_ASSERT( pEntry, "Entry ?!" ); - aMacroBox.SetCurEntry( pEntry ); - } - } - - UpdateFields(); - CheckButtons(); - return 0; -} - - - -IMPL_LINK( MacroChooser, EditModifyHdl, Edit *, pEdit ) -{ - (void)pEdit; - - // Das Modul, in dem bei Neu das Macro landet, selektieren, - // wenn BasicManager oder Lib selektiert. - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - if ( pCurEntry ) - { - sal_uInt16 nDepth = aBasicBox.GetModel()->GetDepth( pCurEntry ); - if ( ( nDepth == 1 ) && ( aBasicBox.IsEntryProtected( pCurEntry ) ) ) - { - // Dann auf die entsprechende Std-Lib stellen... - SvLBoxEntry* pManagerEntry = aBasicBox.GetModel()->GetParent( pCurEntry ); - pCurEntry = aBasicBox.GetModel()->FirstChild( pManagerEntry ); - } - if ( nDepth < 2 ) - { - SvLBoxEntry* pNewEntry = pCurEntry; - while ( pCurEntry && ( nDepth < 2 ) ) - { - pCurEntry = aBasicBox.FirstChild( pCurEntry ); - if ( pCurEntry ) - { - pNewEntry = pCurEntry; - nDepth = aBasicBox.GetModel()->GetDepth( pCurEntry ); - } - } - SaveSetCurEntry( aBasicBox, pNewEntry ); - } - if ( aMacroBox.GetEntryCount() ) - { - String aEdtText( aMacroNameEdit.GetText() ); - sal_Bool bFound = sal_False; - for ( sal_uInt16 n = 0; n < aMacroBox.GetEntryCount(); n++ ) - { - SvLBoxEntry* pEntry = aMacroBox.GetEntry( n ); - DBG_ASSERT( pEntry, "Entry ?!" ); - if ( aMacroBox.GetEntryText( pEntry ).CompareIgnoreCaseToAscii( aEdtText ) == COMPARE_EQUAL ) - { - SaveSetCurEntry( aMacroBox, pEntry ); - bFound = sal_True; - break; - } - } - if ( !bFound ) - { - SvLBoxEntry* pEntry = aMacroBox.FirstSelected(); - // Wenn es den Eintrag gibt ->Select ->Desription... - if ( pEntry ) - aMacroBox.Select( pEntry, sal_False ); - } - } - } - - CheckButtons(); - return 0; -} - - - -IMPL_LINK( MacroChooser, ButtonHdl, Button *, pButton ) -{ - // ausser bei New/Record wird die Description durch LoseFocus uebernommen. - if ( pButton == &aRunButton ) - { - StoreMacroDescription(); - - // #116444# check security settings before macro execution - if ( nMode == MACROCHOOSER_ALL ) - { - SbMethod* pMethod = GetMacro(); - SbModule* pModule = pMethod ? pMethod->GetModule() : NULL; - StarBASIC* pBasic = pModule ? (StarBASIC*)pModule->GetParent() : NULL; - BasicManager* pBasMgr = pBasic ? BasicIDE::FindBasicManager( pBasic ) : NULL; - if ( pBasMgr ) - { - ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) ); - if ( aDocument.isDocument() && !aDocument.allowMacros() ) - { - WarningBox( this, WB_OK, String( IDEResId( RID_STR_CANNOTRUNMACRO ) ) ).Execute(); - return 0; - } - } - } - else if ( nMode == MACROCHOOSER_RECORDING ) - { - sal_Bool bValid = BasicIDE::IsValidSbxName( aMacroNameEdit.GetText() ); - if ( !bValid ) - { - ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_BADSBXNAME ) ) ).Execute(); - aMacroNameEdit.SetSelection( Selection( 0, aMacroNameEdit.GetText().Len() ) ); - aMacroNameEdit.GrabFocus(); - return 0; - } - - SbMethod* pMethod = GetMacro(); - if ( pMethod && !QueryReplaceMacro( pMethod->GetName(), this ) ) - return 0; - } - - EndDialog( MACRO_OK_RUN ); - } - else if ( pButton == &aCloseButton ) - { - StoreMacroDescription(); - EndDialog( MACRO_CLOSE ); - } - else if ( ( pButton == &aEditButton ) || ( pButton == &aNewDelButton ) ) - { - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); - ScriptDocument aDocument( aDesc.GetDocument() ); - DBG_ASSERT( aDocument.isAlive(), "MacroChooser::ButtonHdl: no document, or document is dead!" ); - if ( !aDocument.isAlive() ) - return 0; - BasicManager* pBasMgr = aDocument.getBasicManager(); - String aLib( aDesc.GetLibName() ); - String aMod( 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; - aMod = aMod.GetToken( 0, ' ', nIndex ); - } - String aSub( aDesc.GetMethodName() ); - SfxMacroInfoItem aInfoItem( SID_BASICIDE_ARG_MACROINFO, pBasMgr, aLib, aMod, aSub, String() ); - if ( pButton == &aEditButton ) - { - SvLBoxEntry* pEntry = aMacroBox.FirstSelected(); - if ( pEntry ) - aInfoItem.SetMethod( aMacroBox.GetEntryText( pEntry ) ); - StoreMacroDescription(); - 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; - if( pDispatcher ) - pDispatcher->Execute( SID_BASICIDE_EDITMACRO, SFX_CALLMODE_ASYNCHRON, &aInfoItem, 0L ); - EndDialog( MACRO_EDIT ); - } - else - { - if ( bNewDelIsDel ) - { - DeleteMacro(); - BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); - SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL; - SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL; - if( pDispatcher ) - { - pDispatcher->Execute( SID_BASICIDE_UPDATEMODULESOURCE, - SFX_CALLMODE_SYNCHRON, &aInfoItem, 0L ); - } - CheckButtons(); - UpdateFields(); - //if ( aMacroBox.GetCurEntry() ) // OV-Bug ? - // aMacroBox.Select( aMacroBox.GetCurEntry() ); - } - else - { - sal_Bool bValid = BasicIDE::IsValidSbxName( aMacroNameEdit.GetText() ); - if ( !bValid ) - { - ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_BADSBXNAME ) ) ).Execute(); - aMacroNameEdit.SetSelection( Selection( 0, aMacroNameEdit.GetText().Len() ) ); - aMacroNameEdit.GrabFocus(); - return 1; - } - SbMethod* pMethod = CreateMacro(); - if ( pMethod ) - { - aInfoItem.SetMethod( pMethod->GetName() ); - aInfoItem.SetModule( pMethod->GetModule()->GetName() ); - aInfoItem.SetLib( pMethod->GetModule()->GetParent()->GetName() ); - 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; - if ( pDispatcher ) - pDispatcher->Execute( SID_BASICIDE_EDITMACRO, SFX_CALLMODE_ASYNCHRON, &aInfoItem, 0L ); - StoreMacroDescription(); - EndDialog( MACRO_NEW ); - } - } - } - } - - else if ( pButton == &aAssignButton ) - { - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); - ScriptDocument aDocument( aDesc.GetDocument() ); - DBG_ASSERT( aDocument.isAlive(), "MacroChooser::ButtonHdl: no document, or document is dead!" ); - if ( !aDocument.isAlive() ) - return 0; - BasicManager* pBasMgr = aDocument.getBasicManager(); - String aLib( aDesc.GetLibName() ); - String aMod( aDesc.GetName() ); - String aSub( aMacroNameEdit.GetText() ); - SbMethod* pMethod = GetMacro(); - DBG_ASSERT( pBasMgr, "BasMgr?" ); - DBG_ASSERT( pMethod, "Method?" ); - String aComment( GetInfo( pMethod ) ); - SfxMacroInfoItem aItem( SID_MACROINFO, pBasMgr, aLib, aMod, aSub, aComment ); - SfxAllItemSet Args( SFX_APP()->GetPool() ); - SfxRequest aRequest( SID_CONFIG, SFX_CALLMODE_SYNCHRON, Args ); - aRequest.AppendItem( aItem ); - SFX_APP()->ExecuteSlot( aRequest ); - } - else if ( pButton == &aNewLibButton ) - { - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); - ScriptDocument aDocument( aDesc.GetDocument() ); - createLibImpl( static_cast<Window*>( this ), aDocument, NULL, &aBasicBox ); - } - else if ( pButton == &aNewModButton ) - { - SvLBoxEntry* pCurEntry = aBasicBox.GetCurEntry(); - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( pCurEntry ) ); - ScriptDocument aDocument( aDesc.GetDocument() ); - String aLibName( aDesc.GetLibName() ); - String aModName; - createModImpl( static_cast<Window*>( this ), aDocument, - aBasicBox, aLibName, aModName, true ); - } - else if ( pButton == &aOrganizeButton ) - { - StoreMacroDescription(); - - BasicEntryDescriptor aDesc( aBasicBox.GetEntryDescriptor( aBasicBox.FirstSelected() ) ); - OrganizeDialog* pDlg = new OrganizeDialog( this, 0, aDesc ); - sal_uInt16 nRet = pDlg->Execute(); - delete pDlg; - - if ( nRet ) // Nicht einfach nur geschlossen - { - EndDialog( MACRO_EDIT ); - return 0; - } - - BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); - if ( pIDEShell && pIDEShell->IsAppBasicModified() ) - bForceStoreBasic = sal_True; - - aBasicBox.UpdateEntries(); - } - return 0; -} - - - -void MacroChooser::UpdateFields() -{ - SvLBoxEntry* pMacroEntry = aMacroBox.GetCurEntry(); - String aEmptyStr; - - aMacroNameEdit.SetText( aEmptyStr ); - if ( pMacroEntry ) - aMacroNameEdit.SetText( aMacroBox.GetEntryText( pMacroEntry ) ); -} - -void MacroChooser::SetMode( sal_uInt16 nM ) -{ - nMode = nM; - if ( nMode == MACROCHOOSER_ALL ) - { - aRunButton.SetText( String( IDEResId( RID_STR_RUN ) ) ); - EnableButton( aNewDelButton, sal_True ); - EnableButton( aOrganizeButton, sal_True ); - } - else if ( nMode == MACROCHOOSER_CHOOSEONLY ) - { - aRunButton.SetText( String( IDEResId( RID_STR_CHOOSE ) ) ); - EnableButton( aNewDelButton, sal_False ); - EnableButton( aOrganizeButton, sal_False ); - } - else if ( nMode == MACROCHOOSER_RECORDING ) - { - aRunButton.SetText( String( IDEResId( RID_STR_RECORD ) ) ); - EnableButton( aNewDelButton, sal_False ); - EnableButton( aOrganizeButton, sal_False ); - - aAssignButton.Hide(); - aEditButton.Hide(); - aNewDelButton.Hide(); - aOrganizeButton.Hide(); - aMacroFromTxT.Hide(); - - aNewLibButton.Show(); - aNewModButton.Show(); - aMacrosSaveInTxt.Show(); - - Point aHelpPos = aHelpButton.GetPosPixel(); - Point aHelpPosLogic = PixelToLogic( aHelpPos, MapMode(MAP_APPFONT) ); - aHelpPosLogic.Y() -= 34; - aHelpPos = LogicToPixel( aHelpPosLogic, MapMode(MAP_APPFONT) ); - aHelpButton.SetPosPixel( aHelpPos ); - } - CheckButtons(); -} - -String MacroChooser::GetInfo( SbxVariable* pVar ) -{ - String aComment; - SbxInfoRef xInfo = pVar->GetInfo(); - if ( xInfo.Is() ) - aComment = xInfo->GetComment(); - return aComment; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |