summaryrefslogtreecommitdiff
path: root/basctl/source/basicide/basobj3.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basctl/source/basicide/basobj3.cxx')
-rw-r--r--basctl/source/basicide/basobj3.cxx519
1 files changed, 0 insertions, 519 deletions
diff --git a/basctl/source/basicide/basobj3.cxx b/basctl/source/basicide/basobj3.cxx
deleted file mode 100644
index 76f45d5a6..000000000
--- a/basctl/source/basicide/basobj3.cxx
+++ /dev/null
@@ -1,519 +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 <ide_pch.hxx>
-
-#include <vector>
-#include <algorithm>
-#include <basic/sbx.hxx>
-#include <unotools/moduleoptions.hxx>
-
-#include <iderdll.hxx>
-#include <iderdll2.hxx>
-#include <basobj.hxx>
-#include <basidesh.hxx>
-#include <objdlg.hxx>
-#include <bastypes.hxx>
-#include <basdoc.hxx>
-#include <basidesh.hrc>
-
-#include <baside2.hxx>
-#include <baside3.hxx>
-#include <basicmod.hxx>
-#include <localizationmgr.hxx>
-#include "dlged.hxx"
-#include <dlgeddef.hxx>
-#include <comphelper/processfactory.hxx>
-#include <com/sun/star/script/XLibraryContainer.hpp>
-#include <com/sun/star/script/XLibraryContainerPassword.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <xmlscript/xmldlg_imexp.hxx>
-#include <rtl/uri.hxx>
-#include <osl/process.h>
-#include <osl/file.hxx>
-
-using namespace comphelper;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::container;
-
-
-//----------------------------------------------------------------------------
-
-extern "C" {
- SAL_DLLPUBLIC_EXPORT long basicide_handle_basic_error( void* pPtr )
- {
- return BasicIDE::HandleBasicError( (StarBASIC*)pPtr );
- }
-}
-
-namespace BasicIDE
-{
-//----------------------------------------------------------------------------
-
-SbMethod* CreateMacro( SbModule* pModule, const String& rMacroName )
-{
- 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 ( pModule->GetMethods()->Find( rMacroName, SbxCLASS_METHOD ) )
- return 0;
-
- String aMacroName( rMacroName );
- if ( aMacroName.Len() == 0 )
- {
- if ( !pModule->GetMethods()->Count() )
- aMacroName = String( RTL_CONSTASCII_USTRINGPARAM( "Main" ) );
- else
- {
- sal_Bool bValid = sal_False;
- String aStdMacroText( RTL_CONSTASCII_USTRINGPARAM( "Macro" ) );
- sal_uInt16 nMacro = 1;
- while ( !bValid )
- {
- aMacroName = aStdMacroText;
- aMacroName += String::CreateFromInt32( nMacro );
- // Pruefen, ob vorhanden...
- bValid = pModule->GetMethods()->Find( aMacroName, SbxCLASS_METHOD ) ? sal_False : sal_True;
- nMacro++;
- }
- }
- }
-
- ::rtl::OUString aOUSource( pModule->GetSource32() );
-
- // Nicht zu viele Leerzeilen erzeugen...
- sal_Int32 nSourceLen = aOUSource.getLength();
- if ( nSourceLen > 2 )
- {
- const sal_Unicode* pStr = aOUSource.getStr();
- if ( pStr[ nSourceLen - 1 ] != LINE_SEP )
- aOUSource += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "\n\n" ) );
- else if ( pStr[ nSourceLen - 2 ] != LINE_SEP )
- aOUSource += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "\n" ) );
- else if ( pStr[ nSourceLen - 3 ] == LINE_SEP )
- aOUSource = aOUSource.copy( 0, nSourceLen-1 );
- }
-
- ::rtl::OUString aSubStr;
- aSubStr = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Sub " ) );
- aSubStr += aMacroName;
- aSubStr += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "\n\nEnd Sub" ) );
-
- aOUSource += aSubStr;
-
- // update module in library
- ScriptDocument aDocument( ScriptDocument::NoDocument );
- SbxObject* pParent = pModule->GetParent();
- StarBASIC* pBasic = PTR_CAST(StarBASIC,pParent);
- DBG_ASSERT(pBasic, "BasicIDE::CreateMacro: No Basic found!");
- if ( pBasic )
- {
- BasicManager* pBasMgr = BasicIDE::FindBasicManager( pBasic );
- DBG_ASSERT(pBasMgr, "BasicIDE::CreateMacro: No BasicManager found!");
- if ( pBasMgr )
- {
- aDocument = ScriptDocument::getDocumentForBasicManager( pBasMgr );
- OSL_ENSURE( aDocument.isValid(), "BasicIDE::CreateMacro: no document for the given BasicManager!" );
- if ( aDocument.isValid() )
- {
- String aLibName = pBasic->GetName();
- String aModName = pModule->GetName();
- OSL_VERIFY( aDocument.updateModule( aLibName, aModName, aOUSource ) );
- }
- }
- }
-
- SbMethod* pMethod = (SbMethod*)pModule->GetMethods()->Find( aMacroName, SbxCLASS_METHOD );
-
- if( pDispatcher )
- {
- pDispatcher->Execute( SID_BASICIDE_UPDATEALLMODULESOURCES );
- }
-
- if ( aDocument.isAlive() )
- BasicIDE::MarkDocumentModified( aDocument );
-
- return pMethod;
-}
-
-//----------------------------------------------------------------------------
-
-bool RenameDialog( Window* pErrorParent, const ScriptDocument& rDocument, const String& rLibName, const String& rOldName, const String& rNewName )
- throw(ElementExistException, NoSuchElementException)
-{
- if ( !rDocument.hasDialog( rLibName, rOldName ) )
- {
- OSL_FAIL( "BasicIDE::RenameDialog: old module name is invalid!" );
- return false;
- }
-
- if ( rDocument.hasDialog( rLibName, rNewName ) )
- {
- ErrorBox aError( pErrorParent, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_SBXNAMEALLREADYUSED2 ) ) );
- aError.Execute();
- return false;
- }
-
- // #i74440
- if ( rNewName.Len() == 0 )
- {
- ErrorBox aError( pErrorParent, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_BADSBXNAME ) ) );
- aError.Execute();
- return false;
- }
-
- BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
- IDEBaseWindow* pWin = pIDEShell ? pIDEShell->FindWindow( rDocument, rLibName, rOldName, BASICIDE_TYPE_DIALOG, sal_False ) : NULL;
- Reference< XNameContainer > xExistingDialog;
- if ( pWin )
- xExistingDialog = ((DialogWindow*)pWin)->GetEditor()->GetDialog();
-
- if ( xExistingDialog.is() )
- LocalizationMgr::renameStringResourceIDs( rDocument, rLibName, rNewName, xExistingDialog );
-
- if ( !rDocument.renameDialog( rLibName, rOldName, rNewName, xExistingDialog ) )
- return false;
-
- if ( pWin )
- {
- // set new name in window
- pWin->SetName( rNewName );
-
- // update property browser
- ((DialogWindow*)pWin)->UpdateBrowser();
-
- // update tabwriter
- sal_uInt16 nId = (sal_uInt16)(pIDEShell->GetIDEWindowTable()).GetKey( pWin );
- DBG_ASSERT( nId, "No entry in Tabbar!" );
- if ( nId )
- {
- BasicIDETabBar* pTabBar = (BasicIDETabBar*)pIDEShell->GetTabBar();
- pTabBar->SetPageText( nId, rNewName );
- pTabBar->Sort();
- pTabBar->MakeVisible( pTabBar->GetCurPageId() );
- }
- }
- return true;
-}
-
-//----------------------------------------------------------------------------
-
-bool RemoveDialog( const ScriptDocument& rDocument, const String& rLibName, const String& rDlgName )
-{
- BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
- if ( pIDEShell )
- {
- DialogWindow* pDlgWin = pIDEShell->FindDlgWin( rDocument, rLibName, rDlgName, sal_False );
- if( pDlgWin )
- {
- Reference< container::XNameContainer > xDialogModel = pDlgWin->GetDialog();
- LocalizationMgr::removeResourceForDialog( rDocument, rLibName, rDlgName, xDialogModel );
- }
- }
-
- return rDocument.removeDialog( rLibName, rDlgName );
-}
-
-//----------------------------------------------------------------------------
-
-StarBASIC* FindBasic( const SbxVariable* pVar )
-{
- const SbxVariable* pSbx = pVar;
- while ( pSbx && !pSbx->ISA( StarBASIC ) )
- pSbx = pSbx->GetParent();
-
- DBG_ASSERT( !pSbx || pSbx->ISA( StarBASIC ), "Find Basic: Kein Basic!" );
- return (StarBASIC*)pSbx;
-}
-
-//----------------------------------------------------------------------------
-
-BasicManager* FindBasicManager( StarBASIC* pLib )
-{
- ScriptDocuments aDocuments( ScriptDocument::getAllScriptDocuments( ScriptDocument::AllWithApplication ) );
- for ( ScriptDocuments::const_iterator doc = aDocuments.begin();
- doc != aDocuments.end();
- ++doc
- )
- {
- BasicManager* pBasicMgr = doc->getBasicManager();
- OSL_ENSURE( pBasicMgr, "BasicIDE::FindBasicManager: no basic manager for the document!" );
- if ( !pBasicMgr )
- continue;
-
- Sequence< ::rtl::OUString > aLibNames( doc->getLibraryNames() );
- sal_Int32 nLibCount = aLibNames.getLength();
- const ::rtl::OUString* pLibNames = aLibNames.getConstArray();
-
- for ( sal_Int32 i = 0 ; i < nLibCount ; i++ )
- {
- StarBASIC* pL = pBasicMgr->GetLib( pLibNames[ i ] );
- if ( pL == pLib )
- return pBasicMgr;
- }
- }
- return NULL;
-}
-
-//----------------------------------------------------------------------------
-
-void MarkDocumentModified( const ScriptDocument& rDocument )
-{
- // Muss ja nicht aus einem Document kommen...
- if ( rDocument.isApplication() )
- {
- BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
- if ( pIDEShell )
- pIDEShell->SetAppBasicModified();
- }
- else
- {
- rDocument.setDocumentModified();
- }
-
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- {
- pBindings->Invalidate( SID_SIGNATURE );
- pBindings->Invalidate( SID_SAVEDOC );
- pBindings->Update( SID_SAVEDOC );
- }
-
- // Objectcatalog updaten...
- BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
- ObjectCatalog* pObjCatalog = pIDEShell ? pIDEShell->GetObjectCatalog() : 0;
- if ( pObjCatalog )
- pObjCatalog->UpdateEntries();
-}
-
-//----------------------------------------------------------------------------
-
-void RunMethod( SbMethod* pMethod )
-{
- SbxValues aRes;
- aRes.eType = SbxVOID;
- pMethod->Get( aRes );
-}
-
-//----------------------------------------------------------------------------
-
-void StopBasic()
-{
- StarBASIC::Stop();
- BasicIDEShell* pShell = IDE_DLL()->GetShell();
- if ( pShell )
- {
- IDEWindowTable& rWindows = pShell->GetIDEWindowTable();
- IDEBaseWindow* pWin = rWindows.First();
- while ( pWin )
- {
- // BasicStopped von Hand rufen, da das Stop-Notify ggf. sonst nicht
- // durchkommen kann.
- pWin->BasicStopped();
- pWin = rWindows.Next();
- }
- }
- BasicIDE::BasicStopped();
-}
-
-//----------------------------------------------------------------------------
-
-void BasicStopped( sal_Bool* pbAppWindowDisabled,
- sal_Bool* pbDispatcherLocked, sal_uInt16* pnWaitCount,
- SfxUInt16Item** ppSWActionCount, SfxUInt16Item** ppSWLockViewCount )
-{
- // Nach einem Error oder dem expliziten abbrechen des Basics muessen
- // ggf. einige Locks entfernt werden...
-
- if ( pbAppWindowDisabled )
- *pbAppWindowDisabled = sal_False;
- if ( pbDispatcherLocked )
- *pbDispatcherLocked = sal_False;
- if ( pnWaitCount )
- *pnWaitCount = 0;
- if ( ppSWActionCount )
- *ppSWActionCount = 0;
- if ( ppSWLockViewCount )
- *ppSWLockViewCount = 0;
-
- // AppWait ?
- BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
- if( pIDEShell )
- {
- sal_uInt16 nWait = 0;
- while ( pIDEShell->GetViewFrame()->GetWindow().IsWait() )
- {
- pIDEShell->GetViewFrame()->GetWindow().LeaveWait();
- nWait++;
- }
- if ( pnWaitCount )
- *pnWaitCount = nWait;
- }
-
- Window* pDefParent = Application::GetDefDialogParent();
- if ( pDefParent && !pDefParent->IsEnabled() )
- {
- pDefParent->Enable( sal_True );
- if ( pbAppWindowDisabled )
- *pbAppWindowDisabled = sal_True;
- }
-
-}
-
-//----------------------------------------------------------------------------
-
-void InvalidateDebuggerSlots()
-{
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- {
- pBindings->Invalidate( SID_BASICSTOP );
- pBindings->Update( SID_BASICSTOP );
- pBindings->Invalidate( SID_BASICRUN );
- pBindings->Update( SID_BASICRUN );
- pBindings->Invalidate( SID_BASICCOMPILE );
- pBindings->Update( SID_BASICCOMPILE );
- pBindings->Invalidate( SID_BASICSTEPOVER );
- pBindings->Update( SID_BASICSTEPOVER );
- pBindings->Invalidate( SID_BASICSTEPINTO );
- pBindings->Update( SID_BASICSTEPINTO );
- pBindings->Invalidate( SID_BASICSTEPOUT );
- pBindings->Update( SID_BASICSTEPOUT );
- pBindings->Invalidate( SID_BASICIDE_TOGGLEBRKPNT );
- pBindings->Update( SID_BASICIDE_TOGGLEBRKPNT );
- pBindings->Invalidate( SID_BASICIDE_STAT_POS );
- pBindings->Update( SID_BASICIDE_STAT_POS );
- }
-}
-
-//----------------------------------------------------------------------------
-
-long HandleBasicError( StarBASIC* pBasic )
-{
- BasicIDEDLL::Init();
- BasicIDE::BasicStopped();
-
- // no error output during macro choosing
- if ( IDE_DLL()->GetExtraData()->ChoosingMacro() )
- return 1;
- if ( IDE_DLL()->GetExtraData()->ShellInCriticalSection() )
- return 2;
-
- long nRet = 0;
- BasicIDEShell* pIDEShell = 0;
- if ( SvtModuleOptions().IsBasicIDE() )
- {
- BasicManager* pBasMgr = BasicIDE::FindBasicManager( pBasic );
- if ( pBasMgr )
- {
- sal_Bool bProtected = sal_False;
- ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
- OSL_ENSURE( aDocument.isValid(), "BasicIDE::HandleBasicError: no document for the given BasicManager!" );
- if ( aDocument.isValid() )
- {
- ::rtl::OUString aOULibName( pBasic->GetName() );
- Reference< script::XLibraryContainer > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ) );
- if ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) )
- {
- Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY );
- if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aOULibName ) && !xPasswd->isLibraryPasswordVerified( aOULibName ) )
- {
- bProtected = sal_True;
- }
- }
- }
-
- if ( !bProtected )
- {
- pIDEShell = IDE_DLL()->GetShell();
- if ( !pIDEShell )
- {
- SfxAllItemSet aArgs( SFX_APP()->GetPool() );
- SfxRequest aRequest( SID_BASICIDE_APPEAR, SFX_CALLMODE_SYNCHRON, aArgs );
- SFX_APP()->ExecuteSlot( aRequest );
- pIDEShell = IDE_DLL()->GetShell();
- }
- }
- }
- }
-
- if ( pIDEShell )
- nRet = pIDEShell->CallBasicErrorHdl( pBasic );
- else
- ErrorHandler::HandleError( StarBASIC::GetErrorCode() );
-
- return nRet;
-}
-
-//----------------------------------------------------------------------------
-
-SfxBindings* GetBindingsPtr()
-{
- SfxBindings* pBindings = NULL;
-
- SfxViewFrame* pFrame = NULL;
- BasicIDEDLL* pIDEDLL = IDE_DLL();
- if ( pIDEDLL && pIDEDLL->GetShell() )
- {
- pFrame = pIDEDLL->GetShell()->GetViewFrame();
- }
- else
- {
- SfxViewFrame* pView = SfxViewFrame::GetFirst();
- while ( pView )
- {
- SfxObjectShell* pObjShell = pView->GetObjectShell();
- if ( pObjShell && pObjShell->ISA( BasicDocShell ) )
- {
- pFrame = pView;
- break;
- }
- pView = SfxViewFrame::GetNext( *pView );
- }
- }
- if ( pFrame != NULL )
- pBindings = &pFrame->GetBindings();
-
- return pBindings;
-}
-
-} //namespace BasicIDE
-
-//----------------------------------------------------------------------------
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */