summaryrefslogtreecommitdiff
path: root/basctl/source/basicide/basides1.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basctl/source/basicide/basides1.cxx')
-rw-r--r--basctl/source/basicide/basides1.cxx1399
1 files changed, 0 insertions, 1399 deletions
diff --git a/basctl/source/basicide/basides1.cxx b/basctl/source/basicide/basides1.cxx
deleted file mode 100644
index a82a8bbb5..000000000
--- a/basctl/source/basicide/basides1.cxx
+++ /dev/null
@@ -1,1399 +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 "docsignature.hxx"
-
-#define GLOBALOVERFLOW2
-#include <basic/sbx.hxx>
-#define _SVSTDARR_STRINGS
-#include <svl/svstdarr.hxx>
-#include <ide_pch.hxx>
-
-#define _SOLAR__PRIVATE 1
-
-// #define _SVX_NOIDERESIDS
-
-#define SI_NOCONTROL
-#define SI_NOSBXCONTROLS
-#define SI_NOITEMS
-#define SI_NODRW
-#define _VCTRLS_HXX
-
-#include <basidesh.hrc>
-#include <basidesh.hxx>
-#include <baside2.hxx>
-#include <baside3.hxx>
-#include <basobj.hxx>
-#include <iderdll.hxx>
-#include <iderdll2.hxx>
-#include <sbxitem.hxx>
-#include <managelang.hxx>
-#include <localizationmgr.hxx>
-#include <helpid.hrc>
-
-#include <svtools/texteng.hxx>
-#include <svtools/textview.hxx>
-#include <svtools/xtextedt.hxx>
-#include <tools/urlobj.hxx>
-#include <tools/diagnose_ex.h>
-#include <sfx2/minfitem.hxx>
-#include <sfx2/docfile.hxx>
-#include <com/sun/star/task/XStatusIndicator.hpp>
-#include <com/sun/star/task/XStatusIndicatorFactory.hpp>
-#include <com/sun/star/script/XLibraryContainer.hpp>
-#include <com/sun/star/script/XLibraryContainerPassword.hpp>
-#include <com/sun/star/frame/XDispatchProvider.hpp>
-#include <com/sun/star/frame/XLayoutManager.hpp>
-
-#include <algorithm>
-#include <memory>
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::frame;
-
-class SvxSearchItem;
-
-// Egal was, einfach ans aktuelle Fenster:
-void BasicIDEShell::ExecuteCurrent( SfxRequest& rReq )
-{
- if ( !pCurWin )
- return;
-
- switch ( rReq.GetSlot() )
- {
- case SID_BASICIDE_HIDECURPAGE:
- {
- pCurWin->StoreData();
- RemoveWindow( pCurWin, sal_False );
- }
- break;
- case SID_BASICIDE_DELETECURRENT:
- {
- ScriptDocument aDocument( pCurWin->GetDocument() );
- String aLibName = pCurWin->GetLibName();
- String aName = pCurWin->GetName();
-
- if ( pCurWin->ISA( ModulWindow ) )
- {
- // module
- if ( QueryDelModule( aName, pCurWin ) )
- {
- if ( aDocument.removeModule( aLibName, aName ) )
- {
- BasicIDE::MarkDocumentModified( aDocument );
- }
- }
- }
- else
- {
- // dialog
- if ( QueryDelDialog( aName, pCurWin ) )
- {
- if ( BasicIDE::RemoveDialog( aDocument, aLibName, aName ) )
- {
- RemoveWindow( pCurWin, sal_True );
- BasicIDE::MarkDocumentModified( aDocument );
- }
- }
- }
- }
- break;
- case SID_BASICIDE_RENAMECURRENT:
- {
- pTabBar->StartEditMode( pTabBar->GetCurPageId() );
- }
- break;
- case FID_SEARCH_NOW:
- {
- if ( pCurWin->ISA( ModulWindow ) )
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SfxItemSet* pArgs = rReq.GetArgs();
- // Leider kenne ich die ID nicht:
- sal_uInt16 nWhich = pArgs->GetWhichByPos( 0 );
- DBG_ASSERT( nWhich, "Wich fuer SearchItem ?" );
- const SfxPoolItem& rItem = pArgs->Get( nWhich );
- DBG_ASSERT( rItem.ISA( SvxSearchItem ), "Kein Searchitem!" );
- if ( rItem.ISA( SvxSearchItem ) )
- {
- // Item wegen der Einstellungen merken...
- IDE_DLL()->GetExtraData()->SetSearchItem( (const SvxSearchItem&)rItem );
- sal_uInt16 nFound = 0;
- sal_Bool bCanceled = sal_False;
- if ( ((const SvxSearchItem&)rItem).GetCommand() == SVX_SEARCHCMD_REPLACE_ALL )
- {
- sal_uInt16 nActModWindows = 0;
- IDEBaseWindow* pWin = aIDEWindowTable.First();
- while ( pWin )
- {
- if ( !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
- nActModWindows++;
- pWin = aIDEWindowTable.Next();
- }
-
- if ( ( nActModWindows <= 1 ) || ( !((const SvxSearchItem&)rItem).GetSelection() && QueryBox( pCurWin, WB_YES_NO|WB_DEF_YES, String( IDEResId( RID_STR_SEARCHALLMODULES ) ) ).Execute() == RET_YES ) )
- {
- pWin = aIDEWindowTable.First();
- while ( pWin )
- {
- if ( !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
- nFound = nFound + ((ModulWindow*)pWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem );
- pWin = aIDEWindowTable.Next();
- }
- }
- else
- nFound = ((ModulWindow*)pCurWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem );
-
- IDEResId nId( RID_STR_SEARCHREPLACES );
- String aReplStr( nId );
- aReplStr.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "XX" ) ), String::CreateFromInt32( nFound ) );
- InfoBox( pCurWin, aReplStr ).Execute();
- }
- else
- {
- nFound = ((ModulWindow*)pCurWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem );
- if ( !nFound && !((const SvxSearchItem&)rItem).GetSelection() )
- {
- // Andere Module durchsuchen...
- sal_Bool bChangeCurWindow = sal_False;
- aIDEWindowTable.Seek( pCurWin );
- // Erstmal beim naechsten Anfangen, ggf. spaeter von vorne
- IDEBaseWindow* pWin = aIDEWindowTable.Next();
- sal_Bool bSearchedFromStart = sal_False;
- while ( !nFound && !bCanceled && ( pWin || !bSearchedFromStart ) )
- {
- if ( !pWin )
- {
- SfxViewFrame* pViewFrame = GetViewFrame();
- SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow( SID_SEARCH_DLG ) : NULL;
- Window* pParent = pChildWin ? pChildWin->GetWindow() : NULL;
- QueryBox aQuery( pParent, WB_YES_NO|WB_DEF_YES, String( IDEResId( RID_STR_SEARCHFROMSTART ) ) );
- if ( aQuery.Execute() == RET_YES )
- {
- pWin = aIDEWindowTable.First();
- bSearchedFromStart = sal_True;
- }
- else
- bCanceled = sal_True;
- }
-
- if ( pWin && !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
- {
- if ( pWin != pCurWin )
- {
- // Groesse einstellen, damit die View
- // gleich richtig justiert werden kann.
- if ( pCurWin )
- pWin->SetSizePixel( pCurWin->GetSizePixel() );
- nFound = ((ModulWindow*)pWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem, sal_True );
- }
- if ( nFound )
- {
- bChangeCurWindow = sal_True;
- break;
- }
- }
- if ( pWin && ( pWin != pCurWin ) )
- pWin = aIDEWindowTable.Next();
- else
- pWin = 0; // Dann sind wir durch...
- }
- if ( !nFound && bSearchedFromStart ) // Aktuelles von vorne...
- nFound = ((ModulWindow*)pCurWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem, sal_True );
- if ( bChangeCurWindow )
- SetCurWindow( pWin, sal_True );
- }
- if ( !nFound && !bCanceled )
- InfoBox( pCurWin, String( IDEResId( RID_STR_SEARCHNOTFOUND ) ) ).Execute();
- }
-
- rReq.Done();
- }
- }
- }
- break;
- case FID_SEARCH_OFF:
- {
- if ( pCurWin && pCurWin->ISA( ModulWindow ) )
- pCurWin->GrabFocus();
- }
- break;
- case SID_UNDO:
- case SID_REDO:
- {
- if ( GetUndoManager() && pCurWin->AllowUndo() )
- {
- GetViewFrame()->ExecuteSlot( rReq );
- }
- }
- break;
- default:
- {
- pCurWin->ExecuteCommand( rReq );
- }
- }
-}
-
-// Egal, wer oben, Einfluss auf die Shell:
-void BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
-{
- sal_uInt16 nSlot = rReq.GetSlot();
- switch ( nSlot )
- {
- case SID_BASICSTOP:
- {
- // Evtl. nicht einfach anhalten, falls auf Brechpunkt!
- if ( pCurWin && pCurWin->IsA( TYPE( ModulWindow ) ) )
- ((ModulWindow*)pCurWin)->BasicStop();
- BasicIDE::StopBasic();
- }
- break;
-
- case SID_SAVEDOC:
- {
- if ( pCurWin )
- {
- // Daten ins BASIC zurueckschreiben
- StoreAllWindowData();
-
- // document basic
- ScriptDocument aDocument( pCurWin->GetDocument() );
- if ( aDocument.isDocument() )
- {
- uno::Reference< task::XStatusIndicator > xStatusIndicator;
-
- SFX_REQUEST_ARG( rReq, pStatusIndicatorItem, SfxUnoAnyItem, SID_PROGRESS_STATUSBAR_CONTROL, sal_False );
- if ( pStatusIndicatorItem )
- OSL_VERIFY( pStatusIndicatorItem->GetValue() >>= xStatusIndicator );
- else
- {
- // get statusindicator
- SfxViewFrame *pFrame_ = GetFrame();
- if ( pFrame_ )
- {
- uno::Reference< task::XStatusIndicatorFactory > xStatFactory(
- pFrame_->GetFrame().GetFrameInterface(),
- uno::UNO_QUERY );
- if( xStatFactory.is() )
- xStatusIndicator = xStatFactory->createStatusIndicator();
- }
-
- if ( xStatusIndicator.is() )
- rReq.AppendItem( SfxUnoAnyItem( SID_PROGRESS_STATUSBAR_CONTROL, uno::makeAny( xStatusIndicator ) ) );
- }
-
- aDocument.saveDocument( xStatusIndicator );
- }
-
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- {
- pBindings->Invalidate( SID_DOC_MODIFIED );
- pBindings->Invalidate( SID_SAVEDOC );
- pBindings->Invalidate( SID_SIGNATURE );
- }
- }
- }
- break;
- case SID_SIGNATURE:
- {
- if ( pCurWin )
- {
- ::basctl::DocumentSignature aSignature( pCurWin->GetDocument() );
- if ( aSignature.supportsSignatures() )
- {
- aSignature.signScriptingContent();
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- pBindings->Invalidate( SID_SIGNATURE );
- }
- }
- }
- break;
-
- case SID_BASICIDE_MODULEDLG:
- {
- if ( rReq.GetArgs() )
- {
- const SfxUInt16Item &rTabId = (const SfxUInt16Item&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_TABID );
- BasicIDE::Organize( rTabId.GetValue() );
- }
- else
- BasicIDE::Organize( 0 );
- }
- break;
- case SID_BASICIDE_CHOOSEMACRO:
- {
- BasicIDE::ChooseMacro( NULL, sal_False, ::rtl::OUString() );
- }
- break;
- case SID_BASICIDE_CREATEMACRO:
- case SID_BASICIDE_EDITMACRO:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SfxMacroInfoItem& rInfo = (const SfxMacroInfoItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_MACROINFO );
- BasicManager* pBasMgr = (BasicManager*)rInfo.GetBasicManager();
- DBG_ASSERT( pBasMgr, "Nichts selektiert im Basic-Baum ?" );
-
- ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
-
- StartListening( *pBasMgr, sal_True /* Nur einmal anmelden */ );
- String aLibName( rInfo.GetLib() );
- if ( !aLibName.Len() )
- aLibName = String::CreateFromAscii( "Standard" );
- StarBASIC* pBasic = pBasMgr->GetLib( aLibName );
- if ( !pBasic )
- {
- // load module and dialog library (if not loaded)
- aDocument.loadLibraryIfExists( E_SCRIPTS, aLibName );
- aDocument.loadLibraryIfExists( E_DIALOGS, aLibName );
-
- // get Basic
- pBasic = pBasMgr->GetLib( aLibName );
- }
- DBG_ASSERT( pBasic, "Kein Basic!" );
-
- SetCurLib( aDocument, aLibName );
-
- if ( rReq.GetSlot() == SID_BASICIDE_CREATEMACRO )
- {
- SbModule* pModule = pBasic->FindModule( rInfo.GetModule() );
- if ( !pModule )
- {
- if ( rInfo.GetModule().Len() || !pBasic->GetModules()->Count() )
- {
- String aModName = rInfo.GetModule();
-
- ::rtl::OUString sModuleCode;
- if ( aDocument.createModule( aLibName, aModName, sal_False, sModuleCode ) )
- pModule = pBasic->FindModule( aModName );
- }
- else
- pModule = (SbModule*) pBasic->GetModules()->Get(0);
- }
- DBG_ASSERT( pModule, "Kein Modul!" );
- if ( !pModule->GetMethods()->Find( rInfo.GetMethod(), SbxCLASS_METHOD ) )
- BasicIDE::CreateMacro( pModule, rInfo.GetMethod() );
- }
- SfxViewFrame* pViewFrame = GetViewFrame();
- if ( pViewFrame )
- pViewFrame->ToTop();
- ModulWindow* pWin = FindBasWin( aDocument, aLibName, rInfo.GetModule(), sal_True );
- DBG_ASSERT( pWin, "Edit/Create Macro: Fenster wurde nicht erzeugt/gefunden!" );
- SetCurWindow( pWin, sal_True );
- pWin->EditMacro( rInfo.GetMethod() );
- }
- break;
- case SID_BASICIDE_OBJCAT:
- {
- ShowObjectDialog( sal_True, sal_True );
- }
- break;
- case SID_BASICIDE_NAMECHANGEDONTAB:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SfxUInt16Item &rTabId = (const SfxUInt16Item&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_TABID );
- const SfxStringItem &rModName = (const SfxStringItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_MODULENAME );
- IDEBaseWindow* pWin = aIDEWindowTable.Get( rTabId.GetValue() );
- DBG_ASSERT( pWin, "Window nicht im Liste, aber in TabBar ?" );
- if ( pWin )
- {
- String aNewName( rModName.GetValue() );
- String aOldName( pWin->GetName() );
- if ( aNewName != aOldName )
- {
- bool bRenameOk = false;
- if ( pWin->IsA( TYPE( ModulWindow ) ) )
- {
- ModulWindow* pModWin = (ModulWindow*)pWin;
- String aLibName = ( pModWin->GetLibName() );
- ScriptDocument aDocument( pWin->GetDocument() );
-
- if ( BasicIDE::RenameModule( pModWin, aDocument, aLibName, aOldName, aNewName ) )
- {
- bRenameOk = true;
- // Because we listen for container events for script
- // modules, rename will delete the 'old' window
- // pWin has been invalidated, restore now
- pWin = FindBasWin( aDocument, aLibName, aNewName, sal_True );
- }
-
- }
- else if ( pWin->IsA( TYPE( DialogWindow ) ) )
- {
- DialogWindow* pDlgWin = (DialogWindow*)pWin;
- bRenameOk = pDlgWin->RenameDialog( aNewName );
- }
- if ( bRenameOk )
- {
- BasicIDE::MarkDocumentModified( pWin->GetDocument() );
- }
- else
- {
- // set old name in TabWriter
- sal_uInt16 nId = (sal_uInt16)aIDEWindowTable.GetKey( pWin );
- DBG_ASSERT( nId, "No entry in Tabbar!" );
- if ( nId )
- pTabBar->SetPageText( nId, aOldName );
- }
- }
-
- // set focus to current window
- pWin->GrabFocus();
- }
- }
- break;
- case SID_BASICIDE_STOREMODULESOURCE:
- case SID_BASICIDE_UPDATEMODULESOURCE:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SfxMacroInfoItem& rInfo = (const SfxMacroInfoItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_MACROINFO );
- BasicManager* pBasMgr = (BasicManager*)rInfo.GetBasicManager();
- DBG_ASSERT( pBasMgr, "Store source: Kein BasMgr?" );
- ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
- ModulWindow* pWin = FindBasWin( aDocument, rInfo.GetLib(), rInfo.GetModule(), sal_False, sal_True );
- if ( pWin )
- {
- if ( rReq.GetSlot() == SID_BASICIDE_STOREMODULESOURCE )
- pWin->StoreData();
- else
- pWin->UpdateData();
- }
- }
- break;
- case SID_BASICIDE_STOREALLMODULESOURCES:
- case SID_BASICIDE_UPDATEALLMODULESOURCES:
- {
- IDEBaseWindow* pWin = aIDEWindowTable.First();
- while ( pWin )
- {
- if ( !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
- {
- if ( rReq.GetSlot() == SID_BASICIDE_STOREALLMODULESOURCES )
- pWin->StoreData();
- else
- pWin->UpdateData();
- }
- pWin = aIDEWindowTable.Next();
- }
- }
- break;
- case SID_BASICIDE_LIBSELECTED:
- case SID_BASICIDE_LIBREMOVED:
- case SID_BASICIDE_LIBLOADED:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SfxUsrAnyItem& rShellItem = (const SfxUsrAnyItem&)rReq.GetArgs()->Get( SID_BASICIDE_ARG_DOCUMENT_MODEL );
- uno::Reference< frame::XModel > xModel( rShellItem.GetValue(), UNO_QUERY );
- ScriptDocument aDocument( xModel.is() ? ScriptDocument( xModel ) : ScriptDocument::getApplicationScriptDocument() );
- const SfxStringItem& rLibNameItem = (const SfxStringItem&)rReq.GetArgs()->Get( SID_BASICIDE_ARG_LIBNAME );
- String aLibName( rLibNameItem.GetValue() );
-
- if ( nSlot == SID_BASICIDE_LIBSELECTED )
- {
- // load module and dialog library (if not loaded)
- aDocument.loadLibraryIfExists( E_SCRIPTS, aLibName );
- aDocument.loadLibraryIfExists( E_DIALOGS, aLibName );
-
- // check password, if library is password protected and not verified
- sal_Bool bOK = sal_True;
- Reference< script::XLibraryContainer > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ) );
- if ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) )
- {
- Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY );
- if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aLibName ) && !xPasswd->isLibraryPasswordVerified( aLibName ) )
- {
- String aPassword;
- bOK = QueryPassword( xModLibContainer, aLibName, aPassword );
- }
- }
-
- if ( bOK )
- {
- SetCurLib( aDocument, aLibName, true, false );
- }
- else
- {
- // alten Wert einstellen...
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR, sal_True, sal_False );
- }
- }
- else if ( nSlot == SID_BASICIDE_LIBREMOVED )
- {
- if ( !m_aCurLibName.Len() || ( aDocument == m_aCurDocument && aLibName == m_aCurLibName ) )
- {
- RemoveWindows( aDocument, aLibName, sal_True );
- if ( aDocument == m_aCurDocument && aLibName == m_aCurLibName )
- {
- m_aCurDocument = ScriptDocument::getApplicationScriptDocument();
- m_aCurLibName = String();
- // Kein UpdateWindows!
- SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
- if ( pBindings )
- pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR );
- }
- }
- }
- else // Loaded...
- UpdateWindows();
- }
- break;
- case SID_BASICIDE_NEWMODULE:
- {
- ModulWindow* pWin = CreateBasWin( m_aCurDocument, m_aCurLibName, String() );
- DBG_ASSERT( pWin, "New Module: Konnte Fenster nicht erzeugen!" );
- SetCurWindow( pWin, sal_True );
- }
- break;
- case SID_BASICIDE_NEWDIALOG:
- {
- DialogWindow* pWin = CreateDlgWin( m_aCurDocument, m_aCurLibName, String() );
- DBG_ASSERT( pWin, "New Module: Konnte Fenster nicht erzeugen!" );
- SetCurWindow( pWin, sal_True );
- }
- break;
- case SID_BASICIDE_SBXRENAMED:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- }
- break;
- case SID_BASICIDE_SBXINSERTED:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SbxItem& rSbxItem = (const SbxItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX );
- ScriptDocument aDocument( rSbxItem.GetDocument() );
- String aLibName( rSbxItem.GetLibName() );
- String aName( rSbxItem.GetName() );
- if ( !m_aCurLibName.Len() || ( aDocument == m_aCurDocument && aLibName == m_aCurLibName ) )
- {
- if ( rSbxItem.GetType() == BASICIDE_TYPE_MODULE )
- FindBasWin( aDocument, aLibName, aName, sal_True );
- else if ( rSbxItem.GetType() == BASICIDE_TYPE_DIALOG )
- FindDlgWin( aDocument, aLibName, aName, sal_True );
- }
- }
- break;
- case SID_BASICIDE_SBXDELETED:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SbxItem& rSbxItem = (const SbxItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX );
- ScriptDocument aDocument( rSbxItem.GetDocument() );
- IDEBaseWindow* pWin = FindWindow( aDocument, rSbxItem.GetLibName(), rSbxItem.GetName(), rSbxItem.GetType(), sal_True );
- if ( pWin )
- RemoveWindow( pWin, sal_True );
- }
- break;
- case SID_BASICIDE_SHOWSBX:
- {
- DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
- const SbxItem& rSbxItem = (const SbxItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX );
- ScriptDocument aDocument( rSbxItem.GetDocument() );
- String aLibName( rSbxItem.GetLibName() );
- String aName( rSbxItem.GetName() );
- SetCurLib( aDocument, aLibName );
- IDEBaseWindow* pWin = 0;
- if ( rSbxItem.GetType() == BASICIDE_TYPE_DIALOG )
- {
- pWin = FindDlgWin( aDocument, aLibName, aName, sal_True );
- }
- else if ( rSbxItem.GetType() == BASICIDE_TYPE_MODULE )
- {
- pWin = FindBasWin( aDocument, aLibName, aName, sal_True );
- }
- else if ( rSbxItem.GetType() == BASICIDE_TYPE_METHOD )
- {
- pWin = FindBasWin( aDocument, aLibName, aName, sal_True );
- ((ModulWindow*)pWin)->EditMacro( rSbxItem.GetMethodName() );
- }
- DBG_ASSERT( pWin, "Fenster wurde nicht erzeugt!" );
- SetCurWindow( pWin, sal_True );
- pTabBar->MakeVisible( pTabBar->GetCurPageId() );
- }
- break;
- case SID_SHOW_PROPERTYBROWSER:
- {
- GetViewFrame()->ChildWindowExecute( rReq );
- rReq.Done();
- }
- break;
- case SID_BASICIDE_SHOWWINDOW:
- {
- ::std::auto_ptr< ScriptDocument > pDocument;
-
- SFX_REQUEST_ARG( rReq, pDocumentItem, SfxStringItem, SID_BASICIDE_ARG_DOCUMENT, sal_False );
- if ( pDocumentItem )
- {
- String sDocumentCaption = pDocumentItem->GetValue();
- if ( sDocumentCaption.Len() )
- pDocument.reset( new ScriptDocument( ScriptDocument::getDocumentWithURLOrCaption( sDocumentCaption ) ) );
- }
-
- SFX_REQUEST_ARG( rReq, pDocModelItem, SfxUsrAnyItem, SID_BASICIDE_ARG_DOCUMENT_MODEL, sal_False );
- if ( !pDocument.get() && pDocModelItem )
- {
- uno::Reference< frame::XModel > xModel( pDocModelItem->GetValue(), UNO_QUERY );
- if ( xModel.is() )
- pDocument.reset( new ScriptDocument( xModel ) );
- }
-
- if ( !pDocument.get() )
- break;
-
- SFX_REQUEST_ARG( rReq, pLibNameItem, SfxStringItem, SID_BASICIDE_ARG_LIBNAME, sal_False );
- if ( !pLibNameItem )
- break;
-
- String aLibName( pLibNameItem->GetValue() );
- pDocument->loadLibraryIfExists( E_SCRIPTS, aLibName );
- SetCurLib( *pDocument, aLibName );
- SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_BASICIDE_ARG_NAME, sal_False );
- if ( pNameItem )
- {
- String aName( pNameItem->GetValue() );
- String aModType( String::CreateFromAscii( "Module" ) );
- String aDlgType( String::CreateFromAscii( "Dialog" ) );
- String aType( aModType );
- SFX_REQUEST_ARG( rReq, pTypeItem, SfxStringItem, SID_BASICIDE_ARG_TYPE, sal_False );
- if ( pTypeItem )
- aType = pTypeItem->GetValue();
-
- IDEBaseWindow* pWin = 0;
- if ( aType == aModType )
- pWin = FindBasWin( *pDocument, aLibName, aName, sal_False );
- else if ( aType == aDlgType )
- pWin = FindDlgWin( *pDocument, aLibName, aName, sal_False );
-
- if ( pWin )
- {
- SetCurWindow( pWin, sal_True );
- if ( pTabBar )
- pTabBar->MakeVisible( pTabBar->GetCurPageId() );
-
- if ( pWin->ISA( ModulWindow ) )
- {
- ModulWindow* pModWin = (ModulWindow*)pWin;
- SFX_REQUEST_ARG( rReq, pLineItem, SfxUInt32Item, SID_BASICIDE_ARG_LINE, sal_False );
- if ( pLineItem )
- {
- pModWin->AssertValidEditEngine();
- TextView* pTextView = pModWin->GetEditView();
- if ( pTextView )
- {
- TextEngine* pTextEngine = pTextView->GetTextEngine();
- if ( pTextEngine )
- {
- sal_uInt32 nLine = pLineItem->GetValue();
- sal_uInt32 nLineCount = 0;
- for ( sal_uInt32 i = 0, nCount = pTextEngine->GetParagraphCount(); i < nCount; ++i )
- nLineCount += pTextEngine->GetLineCount( i );
- if ( nLine > nLineCount )
- nLine = nLineCount;
- if ( nLine > 0 )
- --nLine;
-
- // scroll window and set selection
- long nVisHeight = pModWin->GetOutputSizePixel().Height();
- long nTextHeight = pTextEngine->GetTextHeight();
- if ( nTextHeight > nVisHeight )
- {
- long nMaxY = nTextHeight - nVisHeight;
- long nOldY = pTextView->GetStartDocPos().Y();
- long nNewY = nLine * pTextEngine->GetCharHeight() - nVisHeight / 2;
- nNewY = ::std::min( nNewY, nMaxY );
- pTextView->Scroll( 0, -( nNewY - nOldY ) );
- pTextView->ShowCursor( sal_False, sal_True );
- pModWin->GetEditVScrollBar().SetThumbPos( pTextView->GetStartDocPos().Y() );
- }
- sal_uInt16 nCol1 = 0, nCol2 = 0;
- SFX_REQUEST_ARG( rReq, pCol1Item, SfxUInt16Item, SID_BASICIDE_ARG_COLUMN1, sal_False );
- if ( pCol1Item )
- {
- nCol1 = pCol1Item->GetValue();
- if ( nCol1 > 0 )
- --nCol1;
- nCol2 = nCol1;
- }
- SFX_REQUEST_ARG( rReq, pCol2Item, SfxUInt16Item, SID_BASICIDE_ARG_COLUMN2, sal_False );
- if ( pCol2Item )
- {
- nCol2 = pCol2Item->GetValue();
- if ( nCol2 > 0 )
- --nCol2;
- }
- TextSelection aSel( TextPaM( nLine, nCol1 ), TextPaM( nLine, nCol2 ) );
- pTextView->SetSelection( aSel );
- pTextView->ShowCursor();
- Window* pWindow_ = pTextView->GetWindow();
- if ( pWindow_ )
- pWindow_->GrabFocus();
- }
- }
- }
- }
- }
- }
- rReq.Done();
- }
- break;
-
- case SID_BASICIDE_MANAGE_LANG:
- {
- ManageLanguageDialog aDlg( GetCurWindow(), GetCurLocalizationMgr() );
- aDlg.Execute();
- rReq.Done();
- }
- break;
- }
-}
-
-void BasicIDEShell::GetState(SfxItemSet &rSet)
-{
- SfxWhichIter aIter(rSet);
- for ( sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich() )
- {
- switch ( nWh )
- {
- case SID_DOCINFO:
- {
- rSet.DisableItem( nWh );
- }
- break;
- case SID_SAVEDOC:
- {
- sal_Bool bDisable = sal_False;
-
- if ( pCurWin )
- {
- if ( !pCurWin->IsModified() )
- {
- ScriptDocument aDocument( pCurWin->GetDocument() );
- bDisable = ( !aDocument.isAlive() )
- || ( aDocument.isDocument() ? !aDocument.isDocumentModified() : !IsAppBasicModified() );
- }
- }
- else
- {
- bDisable = sal_True;
- }
-
- if ( bDisable )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_NEWWINDOW:
- case SID_SAVEASDOC:
- {
- rSet.DisableItem( nWh );
- }
- break;
- case SID_SIGNATURE:
- {
- sal_uInt16 nState = 0;
- if ( pCurWin )
- {
- ::basctl::DocumentSignature aSignature( pCurWin->GetDocument() );
- nState = aSignature.getScriptingSignatureState();
- }
- rSet.Put( SfxUInt16Item( SID_SIGNATURE, nState ) );
- }
- break;
- case SID_BASICIDE_MODULEDLG:
- {
- if ( StarBASIC::IsRunning() )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_BASICIDE_CHOOSEMACRO:
- case SID_BASICIDE_OBJCAT:
- case SID_BASICIDE_SHOWSBX:
- case SID_BASICIDE_CREATEMACRO:
- case SID_BASICIDE_EDITMACRO:
- case SID_BASICIDE_NAMECHANGEDONTAB:
- {
- ;
- }
- break;
-
- case SID_BASICIDE_ADDWATCH:
- case SID_BASICIDE_REMOVEWATCH:
- case SID_BASICLOAD:
- case SID_BASICSAVEAS:
- case SID_BASICIDE_MATCHGROUP:
- {
- if ( !pCurWin || !pCurWin->IsA( TYPE( ModulWindow ) ) )
- rSet.DisableItem( nWh );
- else if ( ( nWh == SID_BASICLOAD ) && ( StarBASIC::IsRunning() || ( pCurWin && pCurWin->IsReadOnly() ) ) )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_BASICRUN:
- case SID_BASICSTEPINTO:
- case SID_BASICSTEPOVER:
- case SID_BASICSTEPOUT:
- case SID_BASICIDE_TOGGLEBRKPNT:
- case SID_BASICIDE_MANAGEBRKPNTS:
- {
- if ( !pCurWin || !pCurWin->IsA( TYPE( ModulWindow ) ) )
- rSet.DisableItem( nWh );
- else if ( StarBASIC::IsRunning() && !((ModulWindow*)pCurWin)->GetBasicStatus().bIsInReschedule )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_BASICCOMPILE:
- {
- if ( !pCurWin || !pCurWin->IsA( TYPE( ModulWindow ) ) || StarBASIC::IsRunning() )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_BASICSTOP:
- {
- // Stop immermoeglich, wenn irgendein Basic lauft...
- if ( !StarBASIC::IsRunning() )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_CHOOSE_CONTROLS:
- case SID_DIALOG_TESTMODE:
- {
- if( !pCurWin || !pCurWin->IsA( TYPE( DialogWindow ) ) )
- rSet.DisableItem( nWh );
- }
- break;
- case SID_SHOW_FORMS:
- case SID_SHOW_HIDDEN:
- {
- rSet.DisableItem( nWh );
- }
- break;
- case SID_SEARCH_OPTIONS:
- {
- sal_uInt16 nOptions = 0;
- if( pCurWin )
- nOptions = pCurWin->GetSearchOptions();
- rSet.Put( SfxUInt16Item( SID_SEARCH_OPTIONS, nOptions ) );
- }
- break;
- case SID_BASICIDE_LIBSELECTOR:
- {
- String aName;
- if ( m_aCurLibName.Len() )
- {
- LibraryLocation eLocation = m_aCurDocument.getLibraryLocation( m_aCurLibName );
- aName = CreateMgrAndLibStr( m_aCurDocument.getTitle( eLocation ), m_aCurLibName );
- }
- SfxStringItem aItem( SID_BASICIDE_LIBSELECTOR, aName );
- rSet.Put( aItem );
- }
- break;
- case SID_SEARCH_ITEM:
- {
- String aSelected = GetSelectionText( sal_True );
- SvxSearchItem& rItem = IDE_DLL()->GetExtraData()->GetSearchItem();
- rItem.SetSearchString( aSelected );
- rSet.Put( rItem );
- }
- break;
- case SID_BASICIDE_STAT_DATE:
- {
- String aDate;
- aDate = String( RTL_CONSTASCII_USTRINGPARAM( "Datum?!" ) );
- SfxStringItem aItem( SID_BASICIDE_STAT_DATE, aDate );
- rSet.Put( aItem );
- }
- break;
- case SID_DOC_MODIFIED:
- {
- String aModifiedMarker;
- sal_Bool bModified = sal_False;
-
- if ( pCurWin )
- {
- if ( pCurWin->IsModified() )
- bModified = sal_True;
- else
- {
- ScriptDocument aDocument( pCurWin->GetDocument() );
- bModified = aDocument.isDocument() ? aDocument.isDocumentModified() : IsAppBasicModified();
- }
- }
-
- if ( bModified )
- aModifiedMarker = '*';
-
- SfxStringItem aItem( SID_DOC_MODIFIED, aModifiedMarker );
- rSet.Put( aItem );
- }
- break;
- case SID_BASICIDE_STAT_TITLE:
- {
- if ( pCurWin )
- {
- String aTitle = pCurWin->CreateQualifiedName();
- SfxStringItem aItem( SID_BASICIDE_STAT_TITLE, aTitle );
- rSet.Put( aItem );
- }
- }
- break;
- // Werden vom Controller ausgewertet:
- case SID_ATTR_SIZE:
- case SID_ATTR_INSERT:
- break;
- case SID_UNDO:
- case SID_REDO:
- {
- if( GetUndoManager() ) // sonst rekursives GetState
- GetViewFrame()->GetSlotState( nWh, NULL, &rSet );
- }
- break;
- case SID_SHOW_PROPERTYBROWSER:
- {
- if ( GetViewFrame()->KnowsChildWindow( nWh ) )
- rSet.Put( SfxBoolItem( nWh, GetViewFrame()->HasChildWindow( nWh ) ) );
- else
- rSet.DisableItem( nWh );
- }
- break;
-
- case SID_BASICIDE_CURRENT_LANG:
- {
- if( (pCurWin && pCurWin->IsReadOnly()) || GetCurLibName().Len() == 0 )
- rSet.DisableItem( nWh );
- else
- {
- String aItemStr;
- LocalizationMgr* pCurMgr = GetCurLocalizationMgr();
- if ( pCurMgr->isLibraryLocalized() )
- {
- Sequence< lang::Locale > aLocaleSeq = pCurMgr->getStringResourceManager()->getLocales();
- const lang::Locale* pLocale = aLocaleSeq.getConstArray();
- sal_Int32 i, nCount = aLocaleSeq.getLength();
-
- // Force different results for any combination of locales and default locale
- ::rtl::OUString aLangStr;
- for ( i = 0; i <= nCount; ++i )
- {
- lang::Locale aLocale;
- if( i < nCount )
- aLocale = pLocale[i];
- else
- aLocale = pCurMgr->getStringResourceManager()->getDefaultLocale();
-
- aLangStr += aLocale.Language;
- aLangStr += aLocale.Country;
- aLangStr += aLocale.Variant;
- }
- aItemStr = aLangStr;
- }
- rSet.Put( SfxStringItem( nWh, aItemStr ) );
- }
- }
- break;
-
- case SID_BASICIDE_MANAGE_LANG:
- {
- if( (pCurWin && pCurWin->IsReadOnly()) || GetCurLibName().Len() == 0 )
- rSet.DisableItem( nWh );
- }
- break;
- }
- }
- if ( pCurWin )
- pCurWin->GetState( rSet );
-}
-
-sal_Bool BasicIDEShell::HasUIFeature( sal_uInt32 nFeature )
-{
- sal_Bool bResult = sal_False;
-
- if ( (nFeature & BASICIDE_UI_FEATURE_SHOW_BROWSER) == BASICIDE_UI_FEATURE_SHOW_BROWSER )
- {
- // fade out (in) property browser in module (dialog) windows
- if ( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) && !pCurWin->IsReadOnly() )
- bResult = sal_True;
- }
-
- return bResult;
-}
-
-void BasicIDEShell::SetCurWindow( IDEBaseWindow* pNewWin, sal_Bool bUpdateTabBar, sal_Bool bRememberAsCurrent )
-{
- // Es muss ein EditWindow am Sfx gesetzt sein, sonst kommt kein
- // Resize, also stehen die Controls auf den Wiese...
- // Sieht dann sowieso besser aus, wenn das Modul-Layout angezeigt wird...
- if ( !pNewWin && ( GetWindow() != pModulLayout ) )
- {
- pModulLayout->Show();
- AdjustPosSizePixel( Point( 0, 0 ), GetViewFrame()->GetWindow().GetOutputSizePixel() );
- SetWindow( pModulLayout );
- EnableScrollbars( sal_False );
- aVScrollBar.Hide();
- }
-
- if ( pNewWin != pCurWin )
- {
- IDEBaseWindow* pPrevCurWin = pCurWin;
- pCurWin = pNewWin;
- if ( pPrevCurWin )
- {
- pPrevCurWin->Hide();
- pPrevCurWin->Deactivating();
-// pPrevCurWin->GetLayoutWindow()->Hide();
- if( pPrevCurWin->IsA( TYPE( DialogWindow ) ) )
- {
- ((DialogWindow*)pPrevCurWin)->DisableBrowser();
- }
- else
- {
- pModulLayout->SetModulWindow( NULL );
- }
- }
- if ( pCurWin )
- {
- AdjustPosSizePixel( Point( 0, 0 ), GetViewFrame()->GetWindow().GetOutputSizePixel() );
- if( pCurWin->IsA( TYPE( ModulWindow ) ) )
- {
- GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
- pModulLayout->SetModulWindow( (ModulWindow*)pCurWin );
- pModulLayout->Show();
- }
- else
- {
- pModulLayout->Hide();
- GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_DIALOGWINDOW );
- }
-
- if ( bRememberAsCurrent )
- {
- BasicIDEData* pData = IDE_DLL()->GetExtraData();
- if ( pData )
- {
- sal_uInt16 nCurrentType = pCurWin->IsA( TYPE( ModulWindow ) ) ? BASICIDE_TYPE_MODULE : BASICIDE_TYPE_DIALOG;
- LibInfoItem* pLibInfoItem = new LibInfoItem( pCurWin->GetDocument(), pCurWin->GetLibName(), pCurWin->GetName(), nCurrentType );
- pData->GetLibInfos().InsertInfo( pLibInfoItem );
- }
- }
-
- if ( GetViewFrame()->GetWindow().IsVisible() ) // sonst macht es spaeter der SFX
- pCurWin->Show();
-
- pCurWin->Init();
-
- if ( !IDE_DLL()->GetExtraData()->ShellInCriticalSection() )
- {
- Window* pFrameWindow = &GetViewFrame()->GetWindow();
- Window* pFocusWindow = Application::GetFocusWindow();
- while ( pFocusWindow && ( pFocusWindow != pFrameWindow ) )
- pFocusWindow = pFocusWindow->GetParent();
- if ( pFocusWindow ) // Focus in BasicIDE
- pNewWin->GrabFocus();
- }
- if( pCurWin->IsA( TYPE( DialogWindow ) ) )
- ((DialogWindow*)pCurWin)->UpdateBrowser();
- }
- if ( bUpdateTabBar )
- {
- sal_uLong nKey = aIDEWindowTable.GetKey( pCurWin );
- if ( pCurWin && ( pTabBar->GetPagePos( (sal_uInt16)nKey ) == TAB_PAGE_NOTFOUND ) )
- pTabBar->InsertPage( (sal_uInt16)nKey, pCurWin->GetTitle() ); // wurde neu eingeblendet
- pTabBar->SetCurPageId( (sal_uInt16)nKey );
- }
- if ( pCurWin && pCurWin->IsSuspended() ) // Wenn das Fenster im Fehlerfall angezeigt wird...
- pCurWin->SetStatus( pCurWin->GetStatus() & ~BASWIN_SUSPENDED );
- if ( pCurWin )
- {
- SetWindow( pCurWin );
- if ( pCurWin->GetDocument().isDocument() )
- SfxObjectShell::SetCurrentComponent( pCurWin->GetDocument().getDocument() );
- }
- else
- {
- SetWindow( pModulLayout );
- GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
- SfxObjectShell::SetCurrentComponent( NULL );
- }
- SetUndoManager( pCurWin ? pCurWin->GetUndoManager() : 0 );
- InvalidateBasicIDESlots();
- EnableScrollbars( pCurWin ? sal_True : sal_False );
-
- if ( m_pCurLocalizationMgr )
- m_pCurLocalizationMgr->handleTranslationbar();
-
- ManageToolbars();
-
- // fade out (in) property browser in module (dialog) windows
- UIFeatureChanged();
- }
-}
-
-void BasicIDEShell::ManageToolbars()
-{
- static ::rtl::OUString aLayoutManagerName( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" ));
- static ::rtl::OUString aMacroBarResName( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/macrobar" ));
- static ::rtl::OUString aDialogBarResName( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/dialogbar" ));
- static ::rtl::OUString aInsertControlsBarResName( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/insertcontrolsbar" ));
- (void)aInsertControlsBarResName;
-
- if( !pCurWin )
- return;
-
- Reference< beans::XPropertySet > xFrameProps
- ( GetViewFrame()->GetFrame().GetFrameInterface(), uno::UNO_QUERY );
- if ( xFrameProps.is() )
- {
- Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
- uno::Any a = xFrameProps->getPropertyValue( aLayoutManagerName );
- a >>= xLayoutManager;
- if ( xLayoutManager.is() )
- {
- xLayoutManager->lock();
- if( pCurWin->IsA( TYPE( DialogWindow ) ) )
- {
- xLayoutManager->destroyElement( aMacroBarResName );
-
- xLayoutManager->requestElement( aDialogBarResName );
- xLayoutManager->requestElement( aInsertControlsBarResName );
- }
- else
- {
- xLayoutManager->destroyElement( aDialogBarResName );
- xLayoutManager->destroyElement( aInsertControlsBarResName );
-
- xLayoutManager->requestElement( aMacroBarResName );
- }
- xLayoutManager->unlock();
- }
- }
-}
-
-IDEBaseWindow* BasicIDEShell::FindApplicationWindow()
-{
- return FindWindow( ScriptDocument::getApplicationScriptDocument() );
-}
-
-IDEBaseWindow* BasicIDEShell::FindWindow( const ScriptDocument& rDocument, const String& rLibName, const String& rName, sal_uInt16 nType, sal_Bool bFindSuspended )
-{
- IDEBaseWindow* pWin = aIDEWindowTable.First();
- while ( pWin )
- {
- if ( !pWin->IsSuspended() || bFindSuspended )
- {
- if ( !rLibName.Len() || !rName.Len() || nType == BASICIDE_TYPE_UNKNOWN )
- {
- // return any non-suspended window
- return pWin;
- }
- else if ( pWin->IsDocument( rDocument ) && pWin->GetLibName() == rLibName && pWin->GetName() == rName &&
- ( ( pWin->IsA( TYPE( ModulWindow ) ) && nType == BASICIDE_TYPE_MODULE ) ||
- ( pWin->IsA( TYPE( DialogWindow ) ) && nType == BASICIDE_TYPE_DIALOG ) ) )
- {
- return pWin;
- }
- }
- pWin = aIDEWindowTable.Next();
- }
- return 0;
-}
-
-long BasicIDEShell::CallBasicErrorHdl( StarBASIC* pBasic )
-{
- long nRet = 0;
- ModulWindow* pModWin = ShowActiveModuleWindow( pBasic );
- if ( pModWin )
- nRet = pModWin->BasicErrorHdl( pBasic );
- return nRet;
-}
-
-long BasicIDEShell::CallBasicBreakHdl( StarBASIC* pBasic )
-{
- long nRet = 0;
- ModulWindow* pModWin = ShowActiveModuleWindow( pBasic );
- if ( pModWin )
- {
- sal_Bool bAppWindowDisabled, bDispatcherLocked;
- sal_uInt16 nWaitCount;
- SfxUInt16Item *pSWActionCount, *pSWLockViewCount;
- BasicIDE::BasicStopped( &bAppWindowDisabled, &bDispatcherLocked,
- &nWaitCount, &pSWActionCount, &pSWLockViewCount );
-
- nRet = pModWin->BasicBreakHdl( pBasic );
-
- if ( StarBASIC::IsRunning() ) // Falls abgebrochen...
- {
- if ( bAppWindowDisabled )
- Application::GetDefDialogParent()->Enable( sal_False );
-
- if ( nWaitCount )
- {
- BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
- for ( sal_uInt16 n = 0; n < nWaitCount; n++ )
- pIDEShell->GetViewFrame()->GetWindow().EnterWait();
- }
- }
- }
- return nRet;
-}
-
-ModulWindow* BasicIDEShell::ShowActiveModuleWindow( StarBASIC* pBasic )
-{
- SetCurLib( ScriptDocument::getApplicationScriptDocument(), String(), false );
-
- SbModule* pActiveModule = StarBASIC::GetActiveModule();
- SbClassModuleObject* pClassModuleObject = PTR_CAST(SbClassModuleObject,pActiveModule);
- if( pClassModuleObject != NULL )
- pActiveModule = pClassModuleObject->getClassModule();
-
- DBG_ASSERT( pActiveModule, "Kein aktives Modul im ErrorHdl?!" );
- if ( pActiveModule )
- {
- ModulWindow* pWin = 0;
- SbxObject* pParent = pActiveModule->GetParent();
- DBG_ASSERT( pParent && pParent->ISA( StarBASIC ), "Kein BASIC!" );
- StarBASIC* pLib = static_cast< StarBASIC* >( pParent );
- if ( pLib )
- {
- BasicManager* pBasMgr = BasicIDE::FindBasicManager( pLib );
- if ( pBasMgr )
- {
- ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
- String aLibName = pLib->GetName();
- pWin = FindBasWin( aDocument, aLibName, pActiveModule->GetName(), sal_True );
- DBG_ASSERT( pWin, "Error/Step-Hdl: Fenster wurde nicht erzeugt/gefunden!" );
- SetCurLib( aDocument, aLibName );
- SetCurWindow( pWin, sal_True );
- }
- }
- BasicManager* pBasicMgr = BasicIDE::FindBasicManager( pBasic );
- if ( pBasicMgr )
- StartListening( *pBasicMgr, sal_True /* Nur einmal anmelden */ );
- return pWin;
- }
- return 0;
-}
-
-void BasicIDEShell::AdjustPosSizePixel( const Point &rPos, const Size &rSize )
-{
- // Nicht wenn minimiert, weil dann bei Restore der Text verschoben ist.
- if ( GetViewFrame()->GetWindow().GetOutputSizePixel().Height() == 0 )
- return;
-
- Size aSz( rSize );
- Size aScrollBarBoxSz( aScrollBarBox.GetSizePixel() );
- aSz.Height() -= aScrollBarBoxSz.Height();
-
- Size aOutSz( aSz );
- aSz.Width() -= aScrollBarBoxSz.Width();
- aScrollBarBox.SetPosPixel( Point( rSize.Width() - aScrollBarBoxSz.Width(), rSize.Height() - aScrollBarBoxSz.Height() ) );
- aVScrollBar.SetPosSizePixel( Point( rPos.X()+aSz.Width(), rPos.Y() ), Size( aScrollBarBoxSz.Width(), aSz.Height() ) );
- if ( bTabBarSplitted )
- {
- // SplitSize ist beim Resize 0 !
- long nSplitPos = pTabBar->GetSizePixel().Width();
- if ( nSplitPos > aSz.Width() )
- nSplitPos = aSz.Width();
- pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( nSplitPos, aScrollBarBoxSz.Height() ) );
- long nScrlStart = rPos.X() + nSplitPos;
- aHScrollBar.SetPosSizePixel( Point( nScrlStart, rPos.Y()+aSz.Height() ), Size( aSz.Width() - nScrlStart + 1, aScrollBarBoxSz.Height() ) );
- aHScrollBar.Update();
- }
- else
- {
- aHScrollBar.SetPosSizePixel( Point( rPos.X()+ aSz.Width()/2 - 1, rPos.Y()+aSz.Height() ), Size( aSz.Width()/2 + 2, aScrollBarBoxSz.Height() ) );
- pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( aSz.Width()/2, aScrollBarBoxSz.Height() ) );
- }
-
- Window* pEdtWin = pCurWin ? pCurWin->GetLayoutWindow() : pModulLayout;
- if ( pEdtWin )
- {
- if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
- pEdtWin->SetPosSizePixel( rPos, aSz ); // Ohne ScrollBar
- else
- pEdtWin->SetPosSizePixel( rPos, aOutSz );
- }
-}
-
-Reference< XModel > BasicIDEShell::GetCurrentDocument() const
-{
- Reference< XModel > xDocument;
- if ( pCurWin && pCurWin->GetDocument().isDocument() )
- xDocument = pCurWin->GetDocument().getDocument();
- return xDocument;
-}
-
-void BasicIDEShell::Activate( sal_Bool bMDI )
-{
- SfxViewShell::Activate( bMDI );
-
- if ( bMDI )
- {
- if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
- ((DialogWindow*)pCurWin)->UpdateBrowser();
-
- ShowObjectDialog( sal_True, sal_False );
- }
-}
-
-void BasicIDEShell::Deactivate( sal_Bool bMDI )
-{
- // bMDI sal_True heisst, dass ein anderes MDI aktiviert wurde, bei einem
- // Deactivate durch eine MessageBox ist bMDI FALSE
- if ( bMDI )
- {
- if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
- {
- DialogWindow* pXDlgWin = (DialogWindow*)pCurWin;
- pXDlgWin->DisableBrowser();
- if( pXDlgWin->IsModified() )
- BasicIDE::MarkDocumentModified( pXDlgWin->GetDocument() );
- }
-
- // CanClose pruefen, damit auch beim deaktivieren der BasicIDE geprueft wird,
- // ob in einem Modul der Sourcecode zu gross ist...
- for ( sal_uLong nWin = 0; nWin < aIDEWindowTable.Count(); nWin++ )
- {
- IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin );
- if ( /* !pWin->IsSuspended() && */ !pWin->CanClose() )
- {
- if ( m_aCurLibName.Len() && ( pWin->IsDocument( m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) )
- SetCurLib( ScriptDocument::getApplicationScriptDocument(), String(), false );
- SetCurWindow( pWin, sal_True );
- break;
- }
- }
-
- ShowObjectDialog( sal_False, sal_False );
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */