summaryrefslogtreecommitdiff
path: root/cui/source/customize/macropg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/customize/macropg.cxx')
-rw-r--r--cui/source/customize/macropg.cxx1027
1 files changed, 0 insertions, 1027 deletions
diff --git a/cui/source/customize/macropg.cxx b/cui/source/customize/macropg.cxx
deleted file mode 100644
index 944d6d0cb..000000000
--- a/cui/source/customize/macropg.cxx
+++ /dev/null
@@ -1,1027 +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.
- *
- ************************************************************************/
-
-#include <basic/basmgr.hxx>
-
-#include "macropg.hxx"
-#include <vcl/msgbox.hxx>
-#define _SVSTDARR_STRINGSDTOR
-#include <svl/svstdarr.hxx>
-#include <svtools/svmedit.hxx>
-#include <svl/eitem.hxx>
-#include <tools/diagnose_ex.h>
-#include <sfx2/app.hxx>
-#include <sfx2/objsh.hxx>
-#include <sfx2/sfxdefs.hxx>
-#include <com/sun/star/container/NoSuchElementException.hpp>
-#include <com/sun/star/lang/IllegalArgumentException.hpp>
-#include <dialmgr.hxx>
-#include "selector.hxx"
-#include "cfg.hxx"
-#include "macropg.hrc"
-#include "helpid.hrc"
-#include <cuires.hrc>
-#include "headertablistbox.hxx"
-#include "macropg_impl.hxx"
-#include <svx/dialogs.hrc> // RID_SVXPAGE_MACROASSIGN
-#include <comphelper/namedvaluecollection.hxx>
-
-#include <algorithm>
-#include <set>
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-static ::rtl::OUString aVndSunStarUNO( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.UNO:") );
-static ::rtl::OUString aVndSunStarScript( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.script:") );
-
-_SvxMacroTabPage_Impl::_SvxMacroTabPage_Impl( const SfxItemSet& rAttrSet ) :
- pAssignFT( NULL ),
- pAssignPB( NULL ),
- pAssignComponentPB( NULL ),
- pDeletePB( NULL ),
- pMacroImg( NULL ),
- pComponentImg( NULL ),
- pStrEvent( NULL ),
- pAssignedMacro( NULL ),
- pEventLB( NULL ),
- bReadOnly( sal_False ),
- bIDEDialogMode( sal_False )
-{
- const SfxPoolItem* pItem;
- if ( SFX_ITEM_SET == rAttrSet.GetItemState( SID_ATTR_MACROITEM, sal_False, &pItem ) )
- bIDEDialogMode = ((const SfxBoolItem*)pItem)->GetValue();
-}
-
-_SvxMacroTabPage_Impl::~_SvxMacroTabPage_Impl()
-{
- delete pAssignFT;
- delete pAssignPB;
- delete pAssignComponentPB;
- delete pDeletePB;
- delete pMacroImg;
- delete pComponentImg;
- delete pStrEvent;
- delete pAssignedMacro;
- delete pEventLB;
-}
-
-// 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
-
-
-IMPL_LINK( _HeaderTabListBox, HeaderEndDrag_Impl, HeaderBar*, pBar )
-{
- DBG_ASSERT( pBar == &maHeaderBar, "*_HeaderTabListBox::HeaderEndDrag_Impl: something is wrong here..." );
- (void)pBar;
-
- if( !maHeaderBar.GetCurItemId() )
- return 0;
-
- if( !maHeaderBar.IsItemMode() )
- {
- Size aSz;
- sal_uInt16 _nTabs = maHeaderBar.GetItemCount();
- long nWidth = maHeaderBar.GetItemSize( ITEMID_EVENT );
- long nBarWidth = maHeaderBar.GetSizePixel().Width();
-
- if( nWidth < TAB_WIDTH_MIN )
- maHeaderBar.SetItemSize( ITEMID_EVENT, TAB_WIDTH_MIN );
- else if( ( nBarWidth - nWidth ) < TAB_WIDTH_MIN )
- maHeaderBar.SetItemSize( ITEMID_EVENT, nBarWidth - TAB_WIDTH_MIN );
-
- {
- long _nWidth, nTmpSz = 0;
- for( sal_uInt16 i = 1 ; i < _nTabs ; ++i )
- {
- _nWidth = maHeaderBar.GetItemSize( i );
- aSz.Width() = _nWidth + nTmpSz;
- nTmpSz += _nWidth;
- maListBox.SetTab( i, PixelToLogic( aSz, MapMode( MAP_APPFONT ) ).Width(), MAP_APPFONT );
- }
- }
- }
- return 1;
-}
-
-long _HeaderTabListBox::Notify( NotifyEvent& rNEvt )
-{
- long nRet = Control::Notify( rNEvt );
-
- if( rNEvt.GetType() == EVENT_GETFOCUS )
- {
- if ( rNEvt.GetWindow() != &maListBox )
- maListBox.GrabFocus();
- }
-
- return nRet;
-}
-
-_HeaderTabListBox::_HeaderTabListBox( Window* pParent, const ResId& rId ) :
- Control( pParent, rId ),
- maListBox( this, WB_HSCROLL | WB_CLIPCHILDREN | WB_TABSTOP ),
- maHeaderBar( this, WB_BUTTONSTYLE | WB_BOTTOMBORDER )
-{
- maListBox.SetHelpId( HID_MACRO_HEADERTABLISTBOX );
-}
-
-_HeaderTabListBox::~_HeaderTabListBox()
-{
-}
-
-void _HeaderTabListBox::ConnectElements( void )
-{
- // calc pos and size of header bar
- Point aPnt( 0, 0 );
- Size aSize( maHeaderBar.CalcWindowSizePixel() );
- Size aCtrlSize( GetOutputSizePixel() );
- aSize.Width() = aCtrlSize.Width();
- maHeaderBar.SetPosSizePixel( aPnt, aSize );
-
- // calc pos and size of ListBox
- aPnt.Y() += aSize.Height();
- aSize.Height() = aCtrlSize.Height() - aSize.Height();
- maListBox.SetPosSizePixel( aPnt, aSize );
-
- // set handler
- maHeaderBar.SetEndDragHdl( LINK( this, _HeaderTabListBox, HeaderEndDrag_Impl ) );
-
- maListBox.InitHeaderBar( &maHeaderBar );
-}
-
-void _HeaderTabListBox::Show( sal_Bool bVisible, sal_uInt16 nFlags )
-{
- maListBox.Show( bVisible, nFlags );
- maHeaderBar.Show( bVisible, nFlags );
-}
-
-void _HeaderTabListBox::Enable( bool bEnable, bool bChild )
-{
- maListBox.Enable( bEnable, bChild );
- maHeaderBar.Enable( bEnable, bChild );
-}
-
-// assign button ("Add Command") is enabled only if it is not read only
-// delete button ("Remove Command") is enabled if a current binding exists
-// and it is not read only
-void _SvxMacroTabPage::EnableButtons()
-{
- const SvLBoxEntry* pE = mpImpl->pEventLB->GetListBox().FirstSelected();
- if ( pE )
- {
- SvLBoxString* pEventMacro = (SvLBoxString*)pE->GetItem( LB_MACROS_ITEMPOS );
- mpImpl->pDeletePB->Enable( 0 != pEventMacro && !mpImpl->bReadOnly );
-
- mpImpl->pAssignPB->Enable( !mpImpl->bReadOnly );
- if( mpImpl->pAssignComponentPB )
- mpImpl->pAssignComponentPB->Enable( !mpImpl->bReadOnly );
- }
-}
-
-_SvxMacroTabPage::_SvxMacroTabPage( Window* pParent, const ResId& rResId, const SfxItemSet& rAttrSet )
- : SfxTabPage( pParent, rResId, rAttrSet ),
- m_xAppEvents(0),
- m_xDocEvents(0),
- bReadOnly(false),
- bDocModified(false),
- bAppEvents(false),
- bInitialized(false)
-{
- mpImpl = new _SvxMacroTabPage_Impl( rAttrSet );
-}
-
-_SvxMacroTabPage::~_SvxMacroTabPage()
-{
- // need to delete the user data
- SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox();
- SvLBoxEntry* pE = rListBox.GetEntry( 0 );
- while( pE )
- {
- ::rtl::OUString* pEventName = (::rtl::OUString*)pE->GetUserData();
- delete pEventName;
- pE->SetUserData((void*)0);
- pE = rListBox.NextSibling( pE );
- }
- DELETEZ( mpImpl );
-}
-// -----------------------------------------------------------------------------
-void _SvxMacroTabPage::InitResources()
-{
- // Note: the order here controls the order in which the events are displayed in the UI!
-
- // the event name to UI string mappings for App Events
- aDisplayNames.push_back( EventDisplayName( "OnStartApp", RID_SVXSTR_EVENT_STARTAPP ) );
- aDisplayNames.push_back( EventDisplayName( "OnCloseApp", RID_SVXSTR_EVENT_CLOSEAPP ) );
- aDisplayNames.push_back( EventDisplayName( "OnCreate", RID_SVXSTR_EVENT_CREATEDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnNew", RID_SVXSTR_EVENT_NEWDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnLoadFinished", RID_SVXSTR_EVENT_LOADDOCFINISHED ) );
- aDisplayNames.push_back( EventDisplayName( "OnLoad", RID_SVXSTR_EVENT_OPENDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnPrepareUnload", RID_SVXSTR_EVENT_PREPARECLOSEDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnUnload", RID_SVXSTR_EVENT_CLOSEDOC ) ) ;
- aDisplayNames.push_back( EventDisplayName( "OnViewCreated", RID_SVXSTR_EVENT_VIEWCREATED ) );
- aDisplayNames.push_back( EventDisplayName( "OnPrepareViewClosing", RID_SVXSTR_EVENT_PREPARECLOSEVIEW ) );
- aDisplayNames.push_back( EventDisplayName( "OnViewClosed", RID_SVXSTR_EVENT_CLOSEVIEW ) ) ;
- aDisplayNames.push_back( EventDisplayName( "OnFocus", RID_SVXSTR_EVENT_ACTIVATEDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnUnfocus", RID_SVXSTR_EVENT_DEACTIVATEDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnSave", RID_SVXSTR_EVENT_SAVEDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnSaveDone", RID_SVXSTR_EVENT_SAVEDOCDONE ) );
- aDisplayNames.push_back( EventDisplayName( "OnSaveFailed", RID_SVXSTR_EVENT_SAVEDOCFAILED ) );
- aDisplayNames.push_back( EventDisplayName( "OnSaveAs", RID_SVXSTR_EVENT_SAVEASDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnSaveAsDone", RID_SVXSTR_EVENT_SAVEASDOCDONE ) );
- aDisplayNames.push_back( EventDisplayName( "OnSaveAsFailed", RID_SVXSTR_EVENT_SAVEASDOCFAILED ) );
- aDisplayNames.push_back( EventDisplayName( "OnCopyTo", RID_SVXSTR_EVENT_COPYTODOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnCopyToDone", RID_SVXSTR_EVENT_COPYTODOCDONE ) );
- aDisplayNames.push_back( EventDisplayName( "OnCopyToFailed", RID_SVXSTR_EVENT_COPYTODOCFAILED ) );
- aDisplayNames.push_back( EventDisplayName( "OnPrint", RID_SVXSTR_EVENT_PRINTDOC ) );
- aDisplayNames.push_back( EventDisplayName( "OnModifyChanged", RID_SVXSTR_EVENT_MODIFYCHANGED ) );
- aDisplayNames.push_back( EventDisplayName( "OnTitleChanged", RID_SVXSTR_EVENT_TITLECHANGED ) );
-
- // application specific events
- aDisplayNames.push_back( EventDisplayName( "OnMailMerge", RID_SVXSTR_EVENT_MAILMERGE ) );
- aDisplayNames.push_back( EventDisplayName( "OnMailMergeFinished", RID_SVXSTR_EVENT_MAILMERGE_END ) );
- aDisplayNames.push_back( EventDisplayName( "OnFieldMerge", RID_SVXSTR_EVENT_FIELDMERGE ) );
- aDisplayNames.push_back( EventDisplayName( "OnFieldMergeFinished", RID_SVXSTR_EVENT_FIELDMERGE_FINISHED ) );
- aDisplayNames.push_back( EventDisplayName( "OnPageCountChange", RID_SVXSTR_EVENT_PAGECOUNTCHANGE ) );
- aDisplayNames.push_back( EventDisplayName( "OnSubComponentOpened", RID_SVXSTR_EVENT_SUBCOMPONENT_OPENED ) );
- aDisplayNames.push_back( EventDisplayName( "OnSubComponentClosed", RID_SVXSTR_EVENT_SUBCOMPONENT_CLOSED ) );
- aDisplayNames.push_back( EventDisplayName( "OnSelect", RID_SVXSTR_EVENT_SELECTIONCHANGED ) );
- aDisplayNames.push_back( EventDisplayName( "OnDoubleClick", RID_SVXSTR_EVENT_DOUBLECLICK ) );
- aDisplayNames.push_back( EventDisplayName( "OnRightClick", RID_SVXSTR_EVENT_RIGHTCLICK ) );
- aDisplayNames.push_back( EventDisplayName( "OnCalculate", RID_SVXSTR_EVENT_CALCULATE ) );
- aDisplayNames.push_back( EventDisplayName( "OnChange", RID_SVXSTR_EVENT_CONTENTCHANGED ) );
-
- // the event name to UI string mappings for forms & dialogs
- //
- aDisplayNames.push_back( EventDisplayName( "approveAction", RID_SVXSTR_EVENT_APPROVEACTIONPERFORMED ) );
- aDisplayNames.push_back( EventDisplayName( "actionPerformed", RID_SVXSTR_EVENT_ACTIONPERFORMED ) );
- aDisplayNames.push_back( EventDisplayName( "changed", RID_SVXSTR_EVENT_CHANGED ) );
- aDisplayNames.push_back( EventDisplayName( "textChanged", RID_SVXSTR_EVENT_TEXTCHANGED ) );
- aDisplayNames.push_back( EventDisplayName( "itemStateChanged", RID_SVXSTR_EVENT_ITEMSTATECHANGED ) );
- aDisplayNames.push_back( EventDisplayName( "focusGained", RID_SVXSTR_EVENT_FOCUSGAINED ) );
- aDisplayNames.push_back( EventDisplayName( "focusLost", RID_SVXSTR_EVENT_FOCUSLOST ) );
- aDisplayNames.push_back( EventDisplayName( "keyPressed", RID_SVXSTR_EVENT_KEYTYPED ) );
- aDisplayNames.push_back( EventDisplayName( "keyReleased", RID_SVXSTR_EVENT_KEYUP ) );
- aDisplayNames.push_back( EventDisplayName( "mouseEntered", RID_SVXSTR_EVENT_MOUSEENTERED ) );
- aDisplayNames.push_back( EventDisplayName( "mouseDragged", RID_SVXSTR_EVENT_MOUSEDRAGGED ) );
- aDisplayNames.push_back( EventDisplayName( "mouseMoved", RID_SVXSTR_EVENT_MOUSEMOVED ) );
- aDisplayNames.push_back( EventDisplayName( "mousePressed", RID_SVXSTR_EVENT_MOUSEPRESSED ) );
- aDisplayNames.push_back( EventDisplayName( "mouseReleased", RID_SVXSTR_EVENT_MOUSERELEASED ) );
- aDisplayNames.push_back( EventDisplayName( "mouseExited", RID_SVXSTR_EVENT_MOUSEEXITED ) );
- aDisplayNames.push_back( EventDisplayName( "approveReset", RID_SVXSTR_EVENT_APPROVERESETTED ) );
- aDisplayNames.push_back( EventDisplayName( "resetted", RID_SVXSTR_EVENT_RESETTED ) );
- aDisplayNames.push_back( EventDisplayName( "approveSubmit", RID_SVXSTR_EVENT_SUBMITTED ) );
- aDisplayNames.push_back( EventDisplayName( "approveUpdate", RID_SVXSTR_EVENT_BEFOREUPDATE ) );
- aDisplayNames.push_back( EventDisplayName( "updated", RID_SVXSTR_EVENT_AFTERUPDATE ) );
- aDisplayNames.push_back( EventDisplayName( "loaded", RID_SVXSTR_EVENT_LOADED ) );
- aDisplayNames.push_back( EventDisplayName( "reloading", RID_SVXSTR_EVENT_RELOADING ) );
- aDisplayNames.push_back( EventDisplayName( "reloaded", RID_SVXSTR_EVENT_RELOADED ) );
- aDisplayNames.push_back( EventDisplayName( "unloading", RID_SVXSTR_EVENT_UNLOADING ) );
- aDisplayNames.push_back( EventDisplayName( "unloaded", RID_SVXSTR_EVENT_UNLOADED ) );
- aDisplayNames.push_back( EventDisplayName( "confirmDelete", RID_SVXSTR_EVENT_CONFIRMDELETE ) );
- aDisplayNames.push_back( EventDisplayName( "approveRowChange", RID_SVXSTR_EVENT_APPROVEROWCHANGE ) );
- aDisplayNames.push_back( EventDisplayName( "rowChanged", RID_SVXSTR_EVENT_ROWCHANGE ) );
- aDisplayNames.push_back( EventDisplayName( "approveCursorMove", RID_SVXSTR_EVENT_POSITIONING ) );
- aDisplayNames.push_back( EventDisplayName( "cursorMoved", RID_SVXSTR_EVENT_POSITIONED ) );
- aDisplayNames.push_back( EventDisplayName( "approveParameter", RID_SVXSTR_EVENT_APPROVEPARAMETER ) );
- aDisplayNames.push_back( EventDisplayName( "errorOccurred", RID_SVXSTR_EVENT_ERROROCCURRED ) );
- aDisplayNames.push_back( EventDisplayName( "adjustmentValueChanged", RID_SVXSTR_EVENT_ADJUSTMENTVALUECHANGED ) );
-}
-
-// the following method is called when the user clicks OK
-// We use the contents of the hashes to replace the settings
-sal_Bool _SvxMacroTabPage::FillItemSet( SfxItemSet& /*rSet*/ )
-{
- try
- {
- ::rtl::OUString eventName;
- if( m_xAppEvents.is() )
- {
- EventsHash::iterator h_itEnd = m_appEventsHash.end();
- EventsHash::iterator h_it = m_appEventsHash.begin();
- for ( ; h_it != h_itEnd; ++h_it )
- {
- eventName = h_it->first;
- try
- {
- m_xAppEvents->replaceByName( eventName, GetPropsByName( eventName, m_appEventsHash ) );
- }
- catch (const Exception&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- }
- }
- if( m_xDocEvents.is() && bDocModified )
- {
- EventsHash::iterator h_itEnd = m_docEventsHash.end();
- EventsHash::iterator h_it = m_docEventsHash.begin();
- for ( ; h_it != h_itEnd; ++h_it )
- {
- eventName = h_it->first;
- try
- {
- m_xDocEvents->replaceByName( eventName, GetPropsByName( eventName, m_docEventsHash ) );
- }
- catch (const Exception&)
- {
- DBG_UNHANDLED_EXCEPTION();
- }
- }
- // if we have a valid XModifiable (in the case of doc events)
- // call setModified(true)
- // in principle this should not be necessary (see issue ??)
- if(m_xModifiable.is())
- {
- m_xModifiable->setModified( sal_True );
- }
- }
- }
- catch (const Exception&)
- {
- }
- // what is the return value about??
- return sal_False;
-}
-
-// the following method clears the bindings in the hashes for both doc & app
-void _SvxMacroTabPage::Reset()
-{
- // called once in creation - don't reset the data this time
- if(!bInitialized)
- {
- bInitialized = true;
- return;
- }
-
- try
- {
- ::rtl::OUString sEmpty;
- if( m_xAppEvents.is() )
- {
- EventsHash::iterator h_itEnd = m_appEventsHash.end();
- EventsHash::iterator h_it = m_appEventsHash.begin();
- for ( ; h_it != h_itEnd; ++h_it )
- {
- h_it->second.second = sEmpty;
- }
- }
- if( m_xDocEvents.is() && bDocModified )
- {
- EventsHash::iterator h_itEnd = m_docEventsHash.end();
- EventsHash::iterator h_it = m_docEventsHash.begin();
- for ( ; h_it != h_itEnd; ++h_it )
- {
- h_it->second.second = sEmpty;
- }
- // if we have a valid XModifiable (in the case of doc events)
- // call setModified(true)
- if(m_xModifiable.is())
- {
- m_xModifiable->setModified( sal_True );
- }
- }
- }
- catch (const Exception&)
- {
- }
- DisplayAppEvents(bAppEvents);
-}
-
-void _SvxMacroTabPage::SetReadOnly( sal_Bool bSet )
-{
- mpImpl->bReadOnly = bSet;
-}
-
-sal_Bool _SvxMacroTabPage::IsReadOnly() const
-{
- return mpImpl->bReadOnly;
-}
-
-
-class IconLBoxString : public SvLBoxString
-{
- Image* m_pMacroImg;
- Image* m_pComponentImg;
- int m_nxImageOffset;
-
- public:
- IconLBoxString( SvLBoxEntry* pEntry, sal_uInt16 nFlags, const String& sText,
- Image* pMacroImg, Image* pComponentImg );
- virtual void Paint(const Point& aPos, SvLBox& aDevice, sal_uInt16 nFlags, SvLBoxEntry* pEntry );
-};
-
-
-IconLBoxString::IconLBoxString( SvLBoxEntry* pEntry, sal_uInt16 nFlags, const String& sText,
- Image* pMacroImg, Image* pComponentImg )
- : SvLBoxString( pEntry, nFlags, sText )
- , m_pMacroImg( pMacroImg )
- , m_pComponentImg( pComponentImg )
-{
- m_nxImageOffset = 20;
-}
-
-//===============================================
-void IconLBoxString::Paint( const Point& aPos, SvLBox& aDevice,
- sal_uInt16 /*nFlags*/, SvLBoxEntry* /*pEntry*/ )
-{
- String aTxt( GetText() );
- if( aTxt.Len() )
- {
- ::rtl::OUString aURL( aTxt );
- sal_Int32 nIndex = aURL.indexOf( aVndSunStarUNO );
- bool bUNO = nIndex == 0;
-
- const Image* pImg = bUNO ? m_pComponentImg : m_pMacroImg;
- aDevice.DrawImage( aPos, *pImg );
-
- ::rtl::OUString aPureMethod;
- if( bUNO )
- {
- sal_Int32 nBegin = aVndSunStarUNO.getLength();
- aPureMethod = aURL.copy( nBegin );
- }
- else
- {
- sal_Int32 nBegin = aVndSunStarScript.getLength();
- aPureMethod = aURL.copy( nBegin );
- aPureMethod = aPureMethod.copy( 0, aPureMethod.indexOf( '?' ) );
- }
-
- Point aPnt(aPos);
- aPnt.X() += m_nxImageOffset;
- aDevice.DrawText( aPnt, aPureMethod );
- }
-}
-
-
-// displays the app events if appEvents=true, otherwise displays the doc events
-void _SvxMacroTabPage::DisplayAppEvents( bool appEvents)
-{
- bAppEvents = appEvents;
-
- SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox();
- mpImpl->pEventLB->SetUpdateMode( sal_False );
- rListBox.Clear();
- SvLBoxEntry* pE = rListBox.GetEntry( 0 );
- EventsHash* eventsHash;
- Reference< container::XNameReplace> nameReplace;
- if(bAppEvents)
- {
- eventsHash = &m_appEventsHash;
- nameReplace = m_xAppEvents;
- }
- else
- {
- eventsHash = &m_docEventsHash;
- nameReplace = m_xDocEvents;
- }
- // have to use the original XNameReplace since the hash iterators do
- // not guarantee the order in which the elements are returned
- if(!nameReplace.is())
- {
- return;
- }
-
- Sequence< ::rtl::OUString > eventNames = nameReplace->getElementNames();
- ::std::set< ::rtl::OUString > aEventNamesCache;
- ::std::copy(
- eventNames.getConstArray(),
- eventNames.getConstArray() + eventNames.getLength(),
- ::std::insert_iterator< ::std::set< ::rtl::OUString > >( aEventNamesCache, aEventNamesCache.end() )
- );
-
- for ( EventDisplayNames::const_iterator displayableEvent = aDisplayNames.begin();
- displayableEvent != aDisplayNames.end();
- ++displayableEvent
- )
- {
- ::rtl::OUString sEventName( ::rtl::OUString::createFromAscii( displayableEvent->pAsciiEventName ) );
- if ( !nameReplace->hasByName( sEventName ) )
- continue;
-
- EventsHash::iterator h_it = eventsHash->find( sEventName );
- if( h_it == eventsHash->end() )
- {
- OSL_FAIL( "_SvxMacroTabPage::DisplayAppEvents: something's suspicious here!" );
- continue;
- }
-
- ::rtl::OUString eventURL = h_it->second.second;
- String displayName( CUI_RES( displayableEvent->nEventResourceID ) );
-
- displayName += '\t';
- SvLBoxEntry* _pE = rListBox.InsertEntry( displayName );
- ::rtl::OUString* pEventName = new ::rtl::OUString( sEventName );
- _pE->SetUserData( (void*)pEventName );
- String sNew( eventURL );
- _pE->ReplaceItem( new IconLBoxString( _pE, 0, sNew,
- mpImpl->pMacroImg, mpImpl->pComponentImg ), LB_MACROS_ITEMPOS );
- rListBox.GetModel()->InvalidateEntry( _pE );
- rListBox.Select( _pE );
- rListBox.MakeVisible( _pE );
- }
-
- pE = rListBox.GetEntry(0);
- if( pE )
- {
- rListBox.Select( pE );
- rListBox.MakeVisible( pE );
- }
-
- rListBox.SetUpdateMode( sal_True );
- EnableButtons();
-}
-
-// select event handler on the listbox
-IMPL_STATIC_LINK( _SvxMacroTabPage, SelectEvent_Impl, SvTabListBox*, EMPTYARG )
-{
- _SvxMacroTabPage_Impl* pImpl = pThis->mpImpl;
- SvHeaderTabListBox& rListBox = pImpl->pEventLB->GetListBox();
- SvLBoxEntry* pE = rListBox.FirstSelected();
- sal_uLong nPos;
-
- if( !pE || LISTBOX_ENTRY_NOTFOUND ==
- ( nPos = rListBox.GetModel()->GetAbsPos( pE ) ) )
- {
- DBG_ASSERT( pE, "wo kommt der leere Eintrag her?" );
- return 0;
- }
-
- pThis->EnableButtons();
- return 0;
-}
-
-IMPL_STATIC_LINK( _SvxMacroTabPage, AssignDeleteHdl_Impl, PushButton*, pBtn )
-{
- return GenericHandler_Impl( pThis, pBtn );
-}
-
-IMPL_STATIC_LINK( _SvxMacroTabPage, DoubleClickHdl_Impl, SvTabListBox *, EMPTYARG )
-{
- return GenericHandler_Impl( pThis, NULL );
-}
-
-// handler for double click on the listbox, and for the assign/delete buttons
-long _SvxMacroTabPage::GenericHandler_Impl( _SvxMacroTabPage* pThis, PushButton* pBtn )
-{
- _SvxMacroTabPage_Impl* pImpl = pThis->mpImpl;
- SvHeaderTabListBox& rListBox = pImpl->pEventLB->GetListBox();
- SvLBoxEntry* pE = rListBox.FirstSelected();
- sal_uLong nPos;
- if( !pE || LISTBOX_ENTRY_NOTFOUND ==
- ( nPos = rListBox.GetModel()->GetAbsPos( pE ) ) )
- {
- DBG_ASSERT( pE, "wo kommt der leere Eintrag her?" );
- return 0;
- }
-
- const sal_Bool bAssEnabled = pBtn != pImpl->pDeletePB && pImpl->pAssignPB->IsEnabled();
-
- ::rtl::OUString* pEventName = (::rtl::OUString*)pE->GetUserData();
-
- ::rtl::OUString sEventURL;
- ::rtl::OUString sEventType;
- if(pThis->bAppEvents)
- {
- EventsHash::iterator h_it = pThis->m_appEventsHash.find( *pEventName );
- if(h_it != pThis->m_appEventsHash.end() )
- {
- sEventType = h_it->second.first;
- sEventURL = h_it->second.second;
- }
- }
- else
- {
- EventsHash::iterator h_it = pThis->m_docEventsHash.find( *pEventName );
- if(h_it != pThis->m_docEventsHash.end() )
- {
- sEventType = h_it->second.first;
- sEventURL = h_it->second.second;
- }
- }
-
- bool bDoubleClick = (pBtn == NULL);
- bool bUNOAssigned = (sEventURL.indexOf( aVndSunStarUNO ) == 0);
- if( pBtn == pImpl->pDeletePB )
- {
- // delete pressed
- sEventType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Script") );
- sEventURL = ::rtl::OUString();
- if(!pThis->bAppEvents)
- pThis->bDocModified = true;
- }
- else if ( ( ( pBtn != NULL )
- && ( pBtn == pImpl->pAssignComponentPB )
- )
- || ( bDoubleClick
- && bUNOAssigned
- )
- )
- {
- AssignComponentDialog* pAssignDlg = new AssignComponentDialog( pThis, sEventURL );
-
- short ret = pAssignDlg->Execute();
- if( ret )
- {
- sEventType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UNO"));
- sEventURL = pAssignDlg->getURL();
- if(!pThis->bAppEvents)
- pThis->bDocModified = true;
- }
- delete pAssignDlg;
- }
- else if( bAssEnabled )
- {
- // assign pressed
- SvxScriptSelectorDialog* pDlg = new SvxScriptSelectorDialog( pThis, sal_False, pThis->GetFrame() );
- if( pDlg )
- {
- short ret = pDlg->Execute();
- if ( ret )
- {
- sEventType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Script"));
- sEventURL = pDlg->GetScriptURL();
- if(!pThis->bAppEvents)
- pThis->bDocModified = true;
- }
- }
- }
-
- // update the hashes
- if(pThis->bAppEvents)
- {
- EventsHash::iterator h_it = pThis->m_appEventsHash.find( *pEventName );
- h_it->second.first = sEventType;
- h_it->second.second = sEventURL;
- }
- else
- {
- EventsHash::iterator h_it = pThis->m_docEventsHash.find( *pEventName );
- h_it->second.first = sEventType;
- h_it->second.second = sEventURL;
- }
-
- // update the listbox entry
- pImpl->pEventLB->SetUpdateMode( sal_False );
- pE->ReplaceItem( new IconLBoxString( pE, 0, sEventURL,
- pImpl->pMacroImg, pImpl->pComponentImg ), LB_MACROS_ITEMPOS );
-
- rListBox.GetModel()->InvalidateEntry( pE );
- rListBox.Select( pE );
- rListBox.MakeVisible( pE );
- rListBox.SetUpdateMode( sal_True );
-
- pThis->EnableButtons();
- return 0;
-}
-
-// pass in the XNameReplace.
-// can remove the 3rd arg once issue ?? is fixed
-void _SvxMacroTabPage::InitAndSetHandler( Reference< container::XNameReplace> xAppEvents, Reference< container::XNameReplace> xDocEvents, Reference< util::XModifiable > xModifiable )
-{
- m_xAppEvents = xAppEvents;
- m_xDocEvents = xDocEvents;
- m_xModifiable = xModifiable;
- SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox();
- HeaderBar& rHeaderBar = mpImpl->pEventLB->GetHeaderBar();
- Link aLnk(STATIC_LINK(this, _SvxMacroTabPage, AssignDeleteHdl_Impl ));
- mpImpl->pDeletePB->SetClickHdl( aLnk );
- mpImpl->pAssignPB->SetClickHdl( aLnk );
- if( mpImpl->pAssignComponentPB )
- mpImpl->pAssignComponentPB->SetClickHdl( aLnk );
- rListBox.SetDoubleClickHdl( STATIC_LINK(this, _SvxMacroTabPage, DoubleClickHdl_Impl ) );
-
- rListBox.SetSelectHdl( STATIC_LINK( this, _SvxMacroTabPage, SelectEvent_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();
-
- long nMinLineHeight = mpImpl->pMacroImg->GetSizePixel().Height() + 2;
- if( nMinLineHeight > mpImpl->pEventLB->GetListBox().GetEntryHeight() )
- mpImpl->pEventLB->GetListBox().SetEntryHeight(
- sal::static_int_cast< short >(nMinLineHeight) );
-
- mpImpl->pEventLB->Enable( sal_True );
-
- if(!m_xAppEvents.is())
- {
- return;
- }
- Sequence< ::rtl::OUString > eventNames = m_xAppEvents->getElementNames();
- sal_Int32 nEventCount = eventNames.getLength();
- for(sal_Int32 nEvent = 0; nEvent < nEventCount; ++nEvent )
- {
- //need exception handling here
- try
- {
- m_appEventsHash[ eventNames[nEvent] ] = GetPairFromAny( m_xAppEvents->getByName( eventNames[nEvent] ) );
- }
- catch (const Exception&)
- {
- }
- }
- if(m_xDocEvents.is())
- {
- eventNames = m_xDocEvents->getElementNames();
- nEventCount = eventNames.getLength();
- for(sal_Int32 nEvent = 0; nEvent < nEventCount; ++nEvent )
- {
- try
- {
- m_docEventsHash[ eventNames[nEvent] ] = GetPairFromAny( m_xDocEvents->getByName( eventNames[nEvent] ) );
- }
- catch (const Exception&)
- {
- }
- }
- }
-}
-
-// returns the two props EventType & Script for a given event name
-Any _SvxMacroTabPage::GetPropsByName( const ::rtl::OUString& eventName, EventsHash& eventsHash )
-{
- const ::std::pair< ::rtl::OUString, ::rtl::OUString >& rAssignedEvent( eventsHash[ eventName ] );
-
- Any aReturn;
- ::comphelper::NamedValueCollection aProps;
- if ( rAssignedEvent.first.getLength() && rAssignedEvent.second.getLength() )
- {
- aProps.put( "EventType", rAssignedEvent.first );
- aProps.put( "Script", rAssignedEvent.second );
- }
- aReturn <<= aProps.getPropertyValues();
-
- return aReturn;
-}
-
-// converts the Any returned by GetByName into a pair which can be stored in
-// the EventHash
-::std::pair< ::rtl::OUString, ::rtl::OUString > _SvxMacroTabPage::GetPairFromAny( Any aAny )
-{
- Sequence< beans::PropertyValue > props;
- ::rtl::OUString type, url;
- if( sal_True == ( aAny >>= props ) )
- {
- ::comphelper::NamedValueCollection aProps( props );
- type = aProps.getOrDefault( "EventType", type );
- url = aProps.getOrDefault( "Script", url );
- }
- return ::std::make_pair( type, url );
-}
-
-SvxMacroTabPage::SvxMacroTabPage( Window* pParent, const Reference< frame::XFrame >& _rxDocumentFrame, const SfxItemSet& rSet, Reference< container::XNameReplace > xNameReplace, sal_uInt16 nSelectedIndex )
- : _SvxMacroTabPage( pParent, CUI_RES( RID_SVXPAGE_MACROASSIGN ), rSet )
-{
- mpImpl->pStrEvent = new String( CUI_RES( STR_EVENT ) );
- mpImpl->pAssignedMacro = new String( CUI_RES( STR_ASSMACRO ) );
- mpImpl->pEventLB = new _HeaderTabListBox( this, CUI_RES( LB_EVENT ) );
- mpImpl->pAssignFT = new FixedText( this, CUI_RES( FT_ASSIGN ) );
- mpImpl->pAssignPB = new PushButton( this, CUI_RES( PB_ASSIGN ) );
- mpImpl->pDeletePB = new PushButton( this, CUI_RES( PB_DELETE ) );
- mpImpl->pAssignComponentPB = new PushButton( this, CUI_RES( PB_ASSIGN_COMPONENT ) );
- mpImpl->pMacroImg = new Image( CUI_RES(IMG_MACRO) );
- mpImpl->pComponentImg = new Image( CUI_RES(IMG_COMPONENT) );
-
- FreeResource();
-
- SetFrame( _rxDocumentFrame );
-
- if( !mpImpl->bIDEDialogMode )
- {
- Point aPosAssign = mpImpl->pAssignPB->GetPosPixel();
- Point aPosComp = mpImpl->pAssignComponentPB->GetPosPixel();
-
- Point aPosDelete = mpImpl->pDeletePB->GetPosPixel();
- long nYDiff = aPosComp.Y() - aPosAssign.Y();
- aPosDelete.Y() -= nYDiff;
- mpImpl->pDeletePB->SetPosPixel( aPosDelete );
-
- mpImpl->pAssignComponentPB->Hide();
- mpImpl->pAssignComponentPB->Disable();
- }
-
- // must be done after FreeResource is called
- InitResources();
-
- mpImpl->pEventLB->GetListBox().SetHelpId( HID_SVX_MACRO_LB_EVENT );
-
- InitAndSetHandler( xNameReplace, Reference< container::XNameReplace>(0), Reference< util::XModifiable >(0));
- DisplayAppEvents(true);
- SvHeaderTabListBox& rListBox = mpImpl->pEventLB->GetListBox();
- SvLBoxEntry* pE = rListBox.GetEntry( (sal_uLong)nSelectedIndex );
- if( pE )
- rListBox.Select(pE);
-}
-
-SvxMacroTabPage::~SvxMacroTabPage()
-{
-}
-
-SvxMacroAssignDlg::SvxMacroAssignDlg( Window* pParent, const Reference< frame::XFrame >& _rxDocumentFrame, const SfxItemSet& rSet,
- const Reference< container::XNameReplace >& xNameReplace, sal_uInt16 nSelectedIndex )
- : SvxMacroAssignSingleTabDialog( pParent, rSet, 0 )
-{
- SetTabPage( new SvxMacroTabPage( this, _rxDocumentFrame, rSet, xNameReplace, nSelectedIndex ) );
-}
-
-SvxMacroAssignDlg::~SvxMacroAssignDlg()
-{
-}
-
-
-//===============================================
-
-IMPL_LINK(AssignComponentDialog, ButtonHandler, Button *, EMPTYARG)
-{
- ::rtl::OUString aMethodName = maMethodEdit.GetText();
- maURL = ::rtl::OUString();
- if( aMethodName.getLength() )
- {
- maURL = aVndSunStarUNO;
- maURL += aMethodName;
- }
- EndDialog(1);
- return 0;
-}
-
-AssignComponentDialog::AssignComponentDialog( Window * pParent, const ::rtl::OUString& rURL )
- : ModalDialog( pParent, CUI_RES( RID_SVXDLG_ASSIGNCOMPONENT ) )
- , maMethodLabel( this, CUI_RES( FT_METHOD ) )
- , maMethodEdit( this, CUI_RES( EDIT_METHOD ) )
- , maOKButton( this, CUI_RES( RID_PB_OK ) )
- , maCancelButton( this, CUI_RES( RID_PB_CANCEL ) )
- , maHelpButton( this, CUI_RES( RID_PB_HELP ) )
- , maURL( rURL )
-{
- FreeResource();
- maOKButton.SetClickHdl(LINK(this, AssignComponentDialog, ButtonHandler));
-
- ::rtl::OUString aMethodName;
- if( maURL.getLength() )
- {
- sal_Int32 nIndex = maURL.indexOf( aVndSunStarUNO );
- if( nIndex == 0 )
- {
- sal_Int32 nBegin = aVndSunStarUNO.getLength();
- aMethodName = maURL.copy( nBegin );
- }
- }
- maMethodEdit.SetText( aMethodName, Selection( 0, SELECTION_MAX ) );
-}
-
-AssignComponentDialog::~AssignComponentDialog()
-{
-}
-
-// -----------------------------------------------------------------------
-
-IMPL_LINK( SvxMacroAssignSingleTabDialog, OKHdl_Impl, Button *, pButton )
-{
- (void)pButton; //unused
- pPage->FillItemSet( *pOutSet );
- EndDialog( RET_OK );
- return 0;
-}
-
-// -----------------------------------------------------------------------
-
-SvxMacroAssignSingleTabDialog::SvxMacroAssignSingleTabDialog
- ( Window *pParent, const SfxItemSet& rSet, sal_uInt16 nUniqueId ) :
- SfxModalDialog( pParent, nUniqueId, WinBits( WB_STDMODAL | WB_3DLOOK ) ),
- pFixedLine ( 0 ),
- pOKBtn ( 0 ),
- pCancelBtn ( 0 ),
- pHelpBtn ( 0 ),
- pPage ( 0 ),
- pOptions ( &rSet ),
- pOutSet ( 0 )
-{}
-
-
-// -----------------------------------------------------------------------
-
-SvxMacroAssignSingleTabDialog::~SvxMacroAssignSingleTabDialog()
-{
- delete pFixedLine;
- delete pOKBtn;
- delete pCancelBtn;
- delete pHelpBtn;
- delete pPage;
-}
-
-// -----------------------------------------------------------------------
-
-// According to SfxSingleTabDialog
-void SvxMacroAssignSingleTabDialog::SetTabPage( SfxTabPage* pTabPage )
-{
- pFixedLine = new FixedLine( this );
-
- pOKBtn = new OKButton( this, WB_DEFBUTTON );
- pOKBtn->SetClickHdl( LINK( this, SvxMacroAssignSingleTabDialog, OKHdl_Impl ) );
-
- pCancelBtn = new CancelButton( this );
- pHelpBtn = new HelpButton( this );
-
- pPage = pTabPage;
-
- if ( pPage )
- {
- String sUserData;
- pPage->SetUserData( sUserData );
- pPage->Reset( *pOptions );
- pPage->Show();
-
- // Set dialog's and buttons' size and position according to tabpage size
- long nSpaceX = LogicToPixel( Size( 6, 0 ), MAP_APPFONT ).Width();
- long nSpaceY = LogicToPixel( Size( 0, 6 ), MAP_APPFONT ).Height();
- long nHalfSpaceX = LogicToPixel( Size( 3, 0 ), MAP_APPFONT ).Width();
- long nHalfSpaceY = LogicToPixel( Size( 0, 3 ), MAP_APPFONT ).Height();
-
- pPage->SetPosPixel( Point() );
- Size aTabpageSize( pPage->GetSizePixel() );
- Size aDialogSize( aTabpageSize );
- Size aButtonSize = LogicToPixel( Size( 50, 14 ), MAP_APPFONT );
- long nButtonWidth = aButtonSize.Width();
- long nButtonHeight = aButtonSize.Height();
-
- Size aFixedLineSize( aTabpageSize );
- long nFixedLineHeight = LogicToPixel( Size( 0, 8 ), MAP_APPFONT ).Height();
- aFixedLineSize.Height() = nFixedLineHeight;
-
- aDialogSize.Height() += nFixedLineHeight + nButtonHeight + nSpaceY + nHalfSpaceY;
- SetOutputSizePixel( aDialogSize );
-
- long nButtonPosY = aTabpageSize.Height() + nFixedLineHeight + nHalfSpaceY;
- long nHelpButtonPosX = nSpaceX;
- pHelpBtn->SetPosSizePixel( Point( nHelpButtonPosX, nButtonPosY), aButtonSize );
- pHelpBtn->Show();
-
- long nCancelButtonPosX = aDialogSize.Width() - nButtonWidth - nSpaceX + 1;
- pCancelBtn->SetPosSizePixel( Point( nCancelButtonPosX, nButtonPosY), aButtonSize );
- pCancelBtn->Show();
-
- long nOkButtonPosX = nCancelButtonPosX - nButtonWidth - nHalfSpaceX;
- pOKBtn->SetPosSizePixel( Point( nOkButtonPosX, nButtonPosY), aButtonSize );
- pOKBtn->Show();
-
- long nFixedLinePosY = aTabpageSize.Height();
- pFixedLine->SetPosSizePixel( Point( 0, nFixedLinePosY), aFixedLineSize );
- pFixedLine->Show();
-
- // Get text from TabPage
- SetText( pPage->GetText() );
-
- // Get IDs from TabPage
- SetHelpId( pPage->GetHelpId() );
- SetUniqueId( pPage->GetUniqueId() );
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */