diff options
Diffstat (limited to 'svx/source/cui/macroass.cxx')
-rw-r--r-- | svx/source/cui/macroass.cxx | 719 |
1 files changed, 719 insertions, 0 deletions
diff --git a/svx/source/cui/macroass.cxx b/svx/source/cui/macroass.cxx new file mode 100644 index 0000000000..ed8f8a46f3 --- /dev/null +++ b/svx/source/cui/macroass.cxx @@ -0,0 +1,719 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: macropg.cxx,v $ + * $Revision: 1.21 $ + * + * 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_svx.hxx" + +#define ITEMID_MACRO 0 +#include <svtools/macitem.hxx> +#undef ITEMID_MACRO + +#include "macroass.hxx" + +#include <basic/basmgr.hxx> +#include <svx/dialmgr.hxx> + +#define _SVSTDARR_STRINGSDTOR +#include <svtools/svstdarr.hxx> + +#include <svtools/svmedit.hxx> +#include "cfgutil.hxx" +#include <sfx2/app.hxx> +#include <sfx2/objsh.hxx> +#include "macroass.hrc" +#include "svx/dialogs.hrc" +#include <sfx2/macrconf.hxx> +#include "headertablistbox.hxx" + +using ::com::sun::star::uno::Reference; +using ::com::sun::star::frame::XFrame; + +class _SfxMacroTabPage_Impl +{ +public: + _SfxMacroTabPage_Impl( void ); + ~_SfxMacroTabPage_Impl(); + + String maStaticMacroLBLabel; + PushButton* pAssignPB; + PushButton* pDeletePB; + String* pStrEvent; + String* pAssignedMacro; + ListBox* pScriptTypeLB; + _HeaderTabListBox* pEventLB; + SfxConfigGroupListBox_Impl* pGroupLB; + FixedText* pFT_MacroLBLabel; + SfxConfigFunctionListBox_Impl* pMacroLB; + + FixedText* pMacroFT; + String* pMacroStr; + FNGetRangeHdl fnGetRange; + FNGetMacrosOfRangeHdl fnGetMacroOfRange; + + BOOL bReadOnly; + Timer maFillGroupTimer; + BOOL bGotEvents; +}; + +_SfxMacroTabPage_Impl::_SfxMacroTabPage_Impl( void ) : + pAssignPB( NULL ), + pDeletePB( NULL ), + pStrEvent( NULL ), + pAssignedMacro( NULL ), + pScriptTypeLB( NULL ), + pEventLB( NULL ), + pGroupLB( NULL ), + pFT_MacroLBLabel( NULL ), + pMacroLB( NULL ), + pMacroFT( NULL ), + pMacroStr( NULL ), + fnGetRange( NULL ), + fnGetMacroOfRange( NULL ), + bReadOnly( FALSE ), + bGotEvents( FALSE ) +{ +} + +_SfxMacroTabPage_Impl::~_SfxMacroTabPage_Impl() +{ + delete pAssignPB; + delete pDeletePB; + delete pStrEvent; + delete pAssignedMacro; + delete pScriptTypeLB; + delete pEventLB; + delete pGroupLB; + delete pMacroLB; + delete pFT_MacroLBLabel; + delete pMacroFT; + delete pMacroStr; +} + + +SvStringsDtor* _ImpGetRangeHdl( _SfxMacroTabPage*, const String& rLanguage ); +SvStringsDtor* _ImpGetMacrosOfRangeHdl( _SfxMacroTabPage*, const String& rLanguage, const String& rRange ); + +static USHORT __FAR_DATA aPageRg[] = { + SID_ATTR_MACROITEM, SID_ATTR_MACROITEM, + 0 +}; + +// Achtung im Code wird dieses Array direkt (0, 1, ...) indiziert +static long nTabs[] = + { + 2, // Number of Tabs + 0, 90 + }; + +#define TAB_WIDTH_MIN 10 + +// IDs for items in HeaderBar of EventLB +#define ITEMID_EVENT 1 +#define ITMEID_ASSMACRO 2 + + +#define LB_EVENTS_ITEMPOS 1 +#define LB_MACROS_ITEMPOS 2 + +String ConvertToUIName_Impl( SvxMacro *pMacro, const String& /*rLanguage*/ ) +{ + String aName( pMacro->GetMacName() ); + String aEntry; + if ( ! pMacro->GetLanguage().EqualsAscii("JavaScript") ) + { + USHORT nCount = aName.GetTokenCount('.'); + aEntry = aName.GetToken( nCount-1, '.' ); + if ( nCount > 2 ) + { + aEntry += '('; + aEntry += aName.GetToken( 0, '.' ); + aEntry += '.'; + aEntry += aName.GetToken( nCount-2, '.' ); + aEntry += ')'; + } + return aEntry; + } + else + return aName; +} + +void _SfxMacroTabPage::EnableButtons( const String& rLangName ) +{ + // Solange die Eventbox leer ist, nichts tun + const SvLBoxEntry* pE = mpImpl->pEventLB->GetListBox().FirstSelected(); + if ( pE ) + { + // Gebundenes Macro holen + const SvxMacro* pM = aTbl.Get( (USHORT)(ULONG) pE->GetUserData() ); + mpImpl->pDeletePB->Enable( 0 != pM && !mpImpl->bReadOnly ); + + // Bei gleichem ScriptType Zuweisung nur, wenn Macro sich + // ge"andert hat; bei verschiedenem ScriptType, wenn Script nicht leer + String sEventMacro; + sEventMacro = ((SvLBoxString*)pE->GetItem( LB_MACROS_ITEMPOS ))->GetText(); + if ( rLangName.EqualsAscii("JavaScript") ) + { + DBG_ERROR( "_SfxMacroTabPage::EnableButtons(): this is not an up to date usage!" ); + } + else + { + SfxMacroInfo* pInfo = mpImpl->pMacroLB->GetMacroInfo(); + String sSelMacro; + if ( pInfo ) + sSelMacro = pInfo->GetMacroName(); + if( pM && rLangName != pM->GetLanguage() ) + mpImpl->pAssignPB->Enable( pInfo != 0 && !mpImpl->bReadOnly ); + else + mpImpl->pAssignPB->Enable( pInfo && !mpImpl->bReadOnly && !sSelMacro.EqualsIgnoreCaseAscii( sEventMacro ) ); + } + } +} + +_SfxMacroTabPage::_SfxMacroTabPage( Window* pParent, const ResId& rResId, const SfxItemSet& rAttrSet ) + : SfxTabPage( pParent, rResId, rAttrSet ) + +{ + mpImpl = new _SfxMacroTabPage_Impl; + mpImpl->fnGetRange = &_ImpGetRangeHdl; + mpImpl->fnGetMacroOfRange = &_ImpGetMacrosOfRangeHdl; +} + +_SfxMacroTabPage::~_SfxMacroTabPage() +{ + DELETEZ( mpImpl ); +} + +void _SfxMacroTabPage::AddEvent( const String & rEventName, USHORT nEventId ) +{ + String sTmp( rEventName ); + sTmp += '\t'; + + // falls die Tabelle schon gueltig ist + SvxMacro* pM = aTbl.Get( nEventId ); + if( pM ) + { + String sNew( ConvertToUIName_Impl( pM, mpImpl->pScriptTypeLB->GetSelectEntry() ) ); + sTmp += sNew; + } + + SvLBoxEntry* pE = mpImpl->pEventLB->GetListBox().InsertEntry( sTmp ); + pE->SetUserData( reinterpret_cast< void* >( sal::static_int_cast< sal_IntPtr >( nEventId )) ); +} + +void _SfxMacroTabPage::ScriptChanged( const String& aLangName ) +{ + // neue Bereiche und deren Funktionen besorgen + { + mpImpl->pGroupLB->SetScriptType( aLangName ); + mpImpl->pGroupLB->Show(); + mpImpl->pMacroLB->Show(); + mpImpl->pMacroFT->SetText( *mpImpl->pMacroStr ); + } + + EnableButtons( aLangName ); +} + +void _SfxMacroTabPage::SetGetRangeLink( FNGetRangeHdl pFn ) +{ + mpImpl->fnGetRange = pFn; +} + +FNGetRangeHdl _SfxMacroTabPage::GetGetRangeLink() const +{ + return mpImpl->fnGetRange; +} + +void _SfxMacroTabPage::SetGetMacrosOfRangeLink( FNGetMacrosOfRangeHdl pFn ) +{ + mpImpl->fnGetMacroOfRange = pFn; +} + +FNGetMacrosOfRangeHdl _SfxMacroTabPage::GetGetMacrosOfRangeLink() const +{ + return mpImpl->fnGetMacroOfRange; +} + +BOOL _SfxMacroTabPage::FillItemSet( SfxItemSet& rSet ) +{ + SvxMacroItem aItem( GetWhich( aPageRg[0] ) ); + ((SvxMacroTableDtor&)aItem.GetMacroTable()) = aTbl; + + const SfxPoolItem* pItem; + if( SFX_ITEM_SET != GetItemSet().GetItemState( aItem.Which(), TRUE, &pItem ) + || aItem != *(SvxMacroItem*)pItem ) + { + rSet.Put( aItem ); + return TRUE; + } + return FALSE; +} + +void _SfxMacroTabPage::PageCreated (SfxAllItemSet aSet) +{ + const SfxPoolItem* pEventsItem; + if( !mpImpl->bGotEvents && SFX_ITEM_SET == aSet.GetItemState( SID_EVENTCONFIG, TRUE, &pEventsItem ) ) + { + mpImpl->bGotEvents = TRUE; + const SfxEventNamesList& rList = ((SfxEventNamesItem*)pEventsItem)->GetEvents(); + for ( USHORT nNo = 0; nNo < rList.Count(); ++nNo ) + { + const SfxEventName *pOwn = rList.GetObject(nNo); + AddEvent( pOwn->maUIName, pOwn->mnId ); + } + } +} + +void _SfxMacroTabPage::Reset( const SfxItemSet& rSet ) +{ + const SfxPoolItem* pItem; + if( SFX_ITEM_SET == rSet.GetItemState( GetWhich( aPageRg[0] ), TRUE, &pItem )) + aTbl = ((SvxMacroItem*)pItem)->GetMacroTable(); + + const SfxPoolItem* pEventsItem; + if( !mpImpl->bGotEvents && SFX_ITEM_SET == rSet.GetItemState( SID_EVENTCONFIG, TRUE, &pEventsItem ) ) + { + mpImpl->bGotEvents = TRUE; + const SfxEventNamesList& rList = ((SfxEventNamesItem*)pEventsItem)->GetEvents(); + for ( USHORT nNo = 0; nNo < rList.Count(); ++nNo ) + { + const SfxEventName *pOwn = rList.GetObject(nNo); + AddEvent( pOwn->maUIName, pOwn->mnId ); + } + } + + FillEvents(); + + SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox(); + SvLBoxEntry* pE = rListBox.GetEntry( 0 ); + if( pE ) + rListBox.SetCurEntry( pE ); +} + +void _SfxMacroTabPage::SetReadOnly( BOOL bSet ) +{ + mpImpl->bReadOnly = bSet; +} + +BOOL _SfxMacroTabPage::IsReadOnly() const +{ + return mpImpl->bReadOnly; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, SelectEvent_Impl, SvTabListBox*, EMPTYARG ) +{ + _SfxMacroTabPage_Impl* pImpl = pThis->mpImpl; + SvHeaderTabListBox& rListBox = pImpl->pEventLB->GetListBox(); + SvLBoxEntry* pE = rListBox.FirstSelected(); + ULONG nPos; + if( !pE || LISTBOX_ENTRY_NOTFOUND == + ( nPos = rListBox.GetModel()->GetAbsPos( pE ) ) ) + { + DBG_ASSERT( pE, "wo kommt der leere Eintrag her?" ); + return 0; + } + + USHORT nEventId = (USHORT)(ULONG)pE->GetUserData(); + String aLanguage = pImpl->pScriptTypeLB->GetSelectEntry(); + + const SvxMacro* pM = pThis->aTbl.Get( nEventId ); + if( pM ) + { + if( aLanguage != pM->GetLanguage() ) + { + pImpl->pScriptTypeLB->SelectEntry( pM->GetLanguage() ); + pThis->ScriptChanged( pM->GetLanguage() ); + } + else + { + DBG_ASSERT( !aLanguage.EqualsAscii("JavaScript"), "_SfxMacroTabPage, SelectEvent_Impl(): outdated use!" ); + } + } + + pThis->EnableButtons( aLanguage ); + return 0; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, SelectGroup_Impl, ListBox*, EMPTYARG ) +{ + _SfxMacroTabPage_Impl* pImpl = pThis->mpImpl; + String sSel( pImpl->pGroupLB->GetGroup() ); + String aLanguage = pImpl->pScriptTypeLB->GetSelectEntry(); + if( !aLanguage.EqualsAscii( "JavaScript" ) ) + { + pImpl->pGroupLB->GroupSelected(); + SfxMacroInfo* pMacro = pImpl->pMacroLB->GetMacroInfo(); + String aLabelText; + if( pMacro ) + { + aLabelText = pImpl->maStaticMacroLBLabel; + aLabelText += pMacro->GetModuleName(); + } + else + { + // Wenn dort ein Macro drin ist, wurde es selektiert und der + // AssignButton schon in SelectMacro richtig enabled + pImpl->pAssignPB->Enable( FALSE ); + } + + pImpl->pFT_MacroLBLabel->SetText( aLabelText ); + } + return 0; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, SelectMacro_Impl, ListBox*, EMPTYARG ) +{ + _SfxMacroTabPage_Impl* pImpl = pThis->mpImpl; + pImpl->pMacroLB->FunctionSelected(); + pThis->EnableButtons( pImpl->pScriptTypeLB->GetSelectEntry() ); + return 0; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, GetFocus_Impl, Edit*, EMPTYARG ) +{ + pThis->EnableButtons( DEFINE_CONST_UNICODE("JavaScript") ); + return 0; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, AssignDeleteHdl_Impl, PushButton*, pBtn ) +{ + _SfxMacroTabPage_Impl* pImpl = pThis->mpImpl; + SvHeaderTabListBox& rListBox = pImpl->pEventLB->GetListBox(); + SvLBoxEntry* pE = rListBox.FirstSelected(); + ULONG nPos; + if( !pE || LISTBOX_ENTRY_NOTFOUND == + ( nPos = rListBox.GetModel()->GetAbsPos( pE ) ) ) + { + DBG_ASSERT( pE, "wo kommt der leere Eintrag her?" ); + return 0; + } + + const BOOL bAssEnabled = pBtn != pImpl->pDeletePB && pImpl->pAssignPB->IsEnabled(); + + // aus der Tabelle entfernen + USHORT nEvent = (USHORT)(ULONG)pE->GetUserData(); + SvxMacro *pRemoveMacro = pThis->aTbl.Remove( nEvent ); + delete pRemoveMacro; + + String aLanguage = pImpl->pScriptTypeLB->GetSelectEntry(); + String sNew; + if( bAssEnabled ) + { + String sGroup; + String sMacro; + String aEntryText( sNew ); + DBG_ASSERT( !aLanguage.EqualsAscii("JavaScript"), "_SfxMacroTabPage, AssignDeleteHdl_Impl(): outdated use!" ); + + SfxMacroInfo* pMacro = pImpl->pMacroLB->GetMacroInfo(); + sMacro = pMacro->GetQualifiedName(); + sGroup = pImpl->pGroupLB->GetGroup(); + sNew = pMacro->GetMacroName(); + + if( sMacro.CompareToAscii( "vnd.sun.star.script:", 20 ) == COMPARE_EQUAL ) + { + OSL_TRACE("ASSIGN_DELETE: Its a script"); + pThis->aTbl.Insert( + nEvent, new SvxMacro( sMacro, String::CreateFromAscii("Script") ) ); + } + else + { + OSL_TRACE("ASSIGN_DELETE: Its a basic macro"); + String sBasicName/*(SfxResId(STR_BASICNAME))*/; + if ( aLanguage == sBasicName ) + pThis->aTbl.Insert( nEvent, new SvxMacro( sMacro, sGroup, STARBASIC ) ); + else + pThis->aTbl.Insert( nEvent, new SvxMacro( sMacro, aLanguage ) ); + } + } + + pImpl->pEventLB->SetUpdateMode( FALSE ); + pE->ReplaceItem( new SvLBoxString( pE, 0, sNew ), LB_MACROS_ITEMPOS ); + rListBox.GetModel()->InvalidateEntry( pE ); + rListBox.Select( pE ); + rListBox.MakeVisible( pE ); + rListBox.SetUpdateMode( TRUE ); + + pThis->EnableButtons( aLanguage ); + return 0; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, ChangeScriptHdl_Impl, RadioButton*, EMPTYARG ) +{ + pThis->ScriptChanged( pThis->mpImpl->pScriptTypeLB->GetSelectEntry() ); + return 0; +} + +IMPL_STATIC_LINK( _SfxMacroTabPage, TimeOut_Impl, Timer*, EMPTYARG ) +{ + // FillMacroList() can take a long time -> show wait cursor and disable input + SfxTabDialog* pTabDlg = pThis->GetTabDialog(); + // perhaps the tabpage is part of a SingleTabDialog then pTabDlg == NULL + if ( pTabDlg ) + { + pTabDlg->EnterWait(); + pTabDlg->EnableInput( FALSE ); + } + pThis->FillMacroList(); + if ( pTabDlg ) + { + pTabDlg->EnableInput( TRUE ); + pTabDlg->LeaveWait(); + } + return 0; +} + +void _SfxMacroTabPage::InitAndSetHandler() +{ + // Handler installieren + SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox(); + HeaderBar& rHeaderBar = mpImpl->pEventLB->GetHeaderBar(); + Link aLnk(STATIC_LINK(this, _SfxMacroTabPage, AssignDeleteHdl_Impl )); + mpImpl->pMacroLB->SetDoubleClickHdl( aLnk ); + mpImpl->pDeletePB->SetClickHdl( aLnk ); + mpImpl->pAssignPB->SetClickHdl( aLnk ); + rListBox.SetDoubleClickHdl( aLnk ); + + rListBox.SetSelectHdl( STATIC_LINK( this, _SfxMacroTabPage, SelectEvent_Impl )); + mpImpl->pGroupLB->SetSelectHdl( STATIC_LINK( this, _SfxMacroTabPage, SelectGroup_Impl )); + mpImpl->pMacroLB->SetSelectHdl( STATIC_LINK( this, _SfxMacroTabPage, SelectMacro_Impl )); + + mpImpl->pScriptTypeLB->SetSelectHdl( STATIC_LINK( this, _SfxMacroTabPage, ChangeScriptHdl_Impl )); + + rListBox.SetSelectionMode( SINGLE_SELECTION ); + rListBox.SetTabs( &nTabs[0], MAP_APPFONT ); + Size aSize( nTabs[ 2 ], 0 ); + rHeaderBar.InsertItem( ITEMID_EVENT, *mpImpl->pStrEvent, LogicToPixel( aSize, MapMode( MAP_APPFONT ) ).Width() ); + aSize.Width() = 1764; // don't know what, so 42^2 is best to use... + rHeaderBar.InsertItem( ITMEID_ASSMACRO, *mpImpl->pAssignedMacro, LogicToPixel( aSize, MapMode( MAP_APPFONT ) ).Width() ); + rListBox.SetSpaceBetweenEntries( 0 ); + + mpImpl->pEventLB->Show(); + mpImpl->pEventLB->ConnectElements(); + + mpImpl->pEventLB->Enable( TRUE ); + mpImpl->pGroupLB->Enable( TRUE ); + mpImpl->pMacroLB->Enable( TRUE ); + + mpImpl->pScriptTypeLB->SetDropDownLineCount( 3 ); + String sBasicName/*(SfxResId(STR_BASICNAME))*/; + mpImpl->pScriptTypeLB->InsertEntry( sBasicName ); + mpImpl->pScriptTypeLB->SelectEntry( sBasicName ); + + mpImpl->pGroupLB->SetFunctionListBox( mpImpl->pMacroLB ); + + mpImpl->maFillGroupTimer.SetTimeoutHdl( STATIC_LINK( this, _SfxMacroTabPage, TimeOut_Impl ) ); + mpImpl->maFillGroupTimer.SetTimeout( 0 ); + mpImpl->maFillGroupTimer.Start(); +} + +void _SfxMacroTabPage::FillMacroList() +{ + String aLanguage = mpImpl->pScriptTypeLB->GetSelectEntry(); + if( ! aLanguage.EqualsAscii("JavaScript") ) + { + // 2 Listboxen + SvStringsDtor* pArr = (*mpImpl->fnGetRange)( this, String(/*SfxResId(STR_BASICNAME)*/) ); + if( pArr ) + { + mpImpl->pGroupLB->Init( + ::com::sun::star::uno::Reference< + ::com::sun::star::lang::XMultiServiceFactory >(), + GetFrame(), + ::rtl::OUString() ); + + delete pArr; + } + } +} + +void _SfxMacroTabPage::FillEvents() +{ + SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox(); + + String aLanguage = mpImpl->pScriptTypeLB->GetSelectEntry(); + ULONG nEntryCnt = rListBox.GetEntryCount(); + + // Events aus der Tabelle holen und die EventListBox entsprechen fuellen + for( ULONG n = 0 ; n < nEntryCnt ; ++n ) + { + SvLBoxEntry* pE = rListBox.GetEntry( n ); + if( pE ) + { + SvLBoxString* pLItem = ( SvLBoxString* ) pE->GetItem( LB_MACROS_ITEMPOS ); + DBG_ASSERT( pLItem && SV_ITEM_ID_LBOXSTRING == pLItem->IsA(), "_SfxMacroTabPage::FillEvents(): no LBoxString" ); + + String sOld( pLItem->GetText() ); + String sNew; + USHORT nEventId = ( USHORT ) ( ULONG ) pE->GetUserData(); + if( aTbl.IsKeyValid( nEventId ) ) + sNew = ConvertToUIName_Impl( aTbl.Get( nEventId ), aLanguage ); + + if( sOld != sNew ) + { + pE->ReplaceItem( new SvLBoxString( pE, 0, sNew ), LB_MACROS_ITEMPOS ); + rListBox.GetModel()->InvalidateEntry( pE ); + } + } + } +} + +void _SfxMacroTabPage::SelectEvent( const String & /*rEventName*/, USHORT nEventId ) +{ + SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox(); + ULONG nEntryCnt = rListBox.GetEntryCount(); + + for( ULONG n = 0 ; n < nEntryCnt ; ++n ) + { + SvLBoxEntry* pE = rListBox.GetEntry( n ); + if( pE && ( USHORT ) ( ULONG ) pE->GetUserData() == nEventId ) + { + rListBox.SetCurEntry( pE ); + rListBox.MakeVisible( pE ); + break; + } + } +} + + +SvStringsDtor* __EXPORT _ImpGetRangeHdl( _SfxMacroTabPage* /*pTbPg*/, const String& rLanguage ) +{ + SvStringsDtor* pNew = new SvStringsDtor; + SfxApplication* pSfxApp = SFX_APP(); + + if ( !rLanguage.EqualsAscii("JavaScript") ) + { + pSfxApp->EnterBasicCall(); + + // AppBasic einf"ugen + String* pNewEntry = new String( pSfxApp->GetName() ); + pNew->Insert( pNewEntry, pNew->Count() ); + + // Aktuelles Dokument + SfxObjectShell* pDoc = SfxObjectShell::Current(); + if ( pDoc ) + { + String aTitle = pDoc->GetTitle(); + + // Hack f"ur Aufruf aus der Basic-IDE : das Basic ermitteln, das + // gerade bearbeitet wird + + String aAppName(DEFINE_CONST_UNICODE("BASIC - ")); + USHORT nLen = aAppName.Len(); + if ( aTitle.CompareIgnoreCaseToAscii( aAppName, nLen ) == COMPARE_EQUAL ) + { + // Basic-Namensprefix entfernen + aTitle.Erase( 0, nLen ); + USHORT nIndex=0, nCount=aTitle.GetTokenCount('.'); + if ( nCount > 1 ) + { + // Namen der Library entfernen + aTitle.GetToken( nCount-2, '.', nIndex ); + aTitle.Erase( nIndex-1 ); + } + + // Wenn das App-Basic gerade in der Basic-IDE bearbeitet wird, kein + // Dokument verwenden + pDoc = SfxObjectShell::GetFirst(); + while( pDoc ) + { + if ( aTitle == pDoc->GetTitle() ) + break; + pDoc = SfxObjectShell::GetNext( *pDoc ); + } + } + + if ( pDoc && pDoc->GetBasicManager() != SFX_APP()->GetBasicManager() && + pDoc->GetBasicManager()->GetLibCount() ) + { + pNewEntry = new String( aTitle ); + pNew->Insert( pNewEntry, pNew->Count() ); + } + } + + pSfxApp->LeaveBasicCall(); + } + + return pNew; +} + +// besorgen der Funktionen eines Bereiches +SvStringsDtor* __EXPORT _ImpGetMacrosOfRangeHdl( + _SfxMacroTabPage* /*pTbPg*/, + const String& /*rLanguage*/, + const String& /*rRange*/ ) +{ + SvStringsDtor* pNew = new SvStringsDtor; + return pNew; +} + + +SfxMacroTabPage::SfxMacroTabPage( Window* pParent, const ResId& rResId, const Reference< XFrame >& rxDocumentFrame, const SfxItemSet& rSet ) + : _SfxMacroTabPage( pParent, rResId, rSet ) +{ + mpImpl->pStrEvent = new String( SVX_RES( STR_EVENT ) ); + mpImpl->pAssignedMacro = new String( SVX_RES( STR_ASSMACRO ) ); + mpImpl->pEventLB = new _HeaderTabListBox( this, SVX_RES( LB_EVENT ) ); + mpImpl->pAssignPB = new PushButton( this, SVX_RES( PB_ASSIGN ) ); + mpImpl->pDeletePB = new PushButton( this, SVX_RES( PB_DELETE ) ); + mpImpl->pScriptTypeLB = new ListBox(this, SVX_RES( LB_SCRIPTTYPE ) ); + mpImpl->pScriptTypeLB->Hide(); + mpImpl->pMacroFT = new FixedText( this, SVX_RES( FT_MACRO ) ); + mpImpl->pGroupLB = new SfxConfigGroupListBox_Impl( this, SVX_RES( LB_GROUP ) ); + mpImpl->pFT_MacroLBLabel = new FixedText( this, SVX_RES( FT_LABEL4LB_MACROS ) ); + mpImpl->maStaticMacroLBLabel= mpImpl->pFT_MacroLBLabel->GetText(); + mpImpl->pMacroLB = new SfxConfigFunctionListBox_Impl( this, SVX_RES( LB_MACROS ) ); + mpImpl->pMacroStr = new String( SVX_RES( STR_MACROS ) ); + + FreeResource(); + + SetFrame( rxDocumentFrame ); + + InitAndSetHandler(); + + ScriptChanged( String( /*SfxResId(STR_BASICNAME)*/ ) ); +} + +SfxTabPage* SfxMacroTabPage::Create( Window* pParent, const SfxItemSet& rAttrSet ) +{ + return new SfxMacroTabPage( pParent, SVX_RES( RID_SVXPAGE_EVENTASSIGN ), NULL, rAttrSet ); +} + +SfxMacroAssignDlg::SfxMacroAssignDlg( Window* pParent, const Reference< XFrame >& rxDocumentFrame, const SfxItemSet& rSet ) + : SfxSingleTabDialog( pParent, rSet, 0 ) +{ + SfxTabPage* pPage = SfxMacroTabPage::Create( this, rSet ); + pPage->SetFrame( rxDocumentFrame ); + SetTabPage( pPage ); +} + +SfxMacroAssignDlg::~SfxMacroAssignDlg() +{ +} + + |