diff options
Diffstat (limited to 'patches/vba/vba-worksheet-change-event-fix.diff')
-rw-r--r-- | patches/vba/vba-worksheet-change-event-fix.diff | 148 |
1 files changed, 0 insertions, 148 deletions
diff --git a/patches/vba/vba-worksheet-change-event-fix.diff b/patches/vba/vba-worksheet-change-event-fix.diff deleted file mode 100644 index 4bcabe9e2..000000000 --- a/patches/vba/vba-worksheet-change-event-fix.diff +++ /dev/null @@ -1,148 +0,0 @@ -diff --git sc/source/ui/vba/vbaeventshelper.cxx sc/source/ui/vba/vbaeventshelper.cxx -index 8248d48..794cb84 100644 ---- sc/source/ui/vba/vbaeventshelper.cxx -+++ sc/source/ui/vba/vbaeventshelper.cxx -@@ -56,8 +56,12 @@ - #include <com/sun/star/util/XCloseBroadcaster.hpp> - #include <com/sun/star/frame/XControllerBorder.hpp> - #include <com/sun/star/frame/XBorderResizeListener.hpp> --#include "cellsuno.hxx" -- -+#include <com/sun/star/util/XChangesListener.hpp> -+#include <com/sun/star/util/ElementChange.hpp> -+#include <com/sun/star/util/XChangesNotifier.hpp> -+#include <com/sun/star/sheet/XCellRangeAddressable.hpp> -+#include <cellsuno.hxx> -+#include <convuno.hxx> - #include <map> - - using namespace std; -@@ -69,6 +73,70 @@ const static rtl::OUString sUrlPart0 = rtl::OUString::createFromAscii( "vnd.sun. - const static rtl::OUString sUrlPart1 = rtl::OUString::createFromAscii( "vnd.sun.star.script:Standard."); - const static rtl::OUString sUrlPart2 = rtl::OUString::createFromAscii( "?language=Basic&location=document"); - -+typedef ::cppu::WeakImplHelper1< util::XChangesListener > WorksheetChangeListener_BASE; -+ -+class WorksheetChangeListener : public WorksheetChangeListener_BASE -+{ -+private: -+ ScVbaEventsHelper* pVbaEventsHelper; -+public: -+ WorksheetChangeListener(ScVbaEventsHelper* pHelper ) : pVbaEventsHelper( pHelper ){} -+ virtual void SAL_CALL changesOccurred(const util::ChangesEvent& aEvent) throw (uno::RuntimeException); -+ virtual void SAL_CALL disposing(const lang::EventObject& aSource) throw(uno::RuntimeException){} -+}; -+ -+void WorksheetChangeListener::changesOccurred(const util::ChangesEvent& aEvent) throw (uno::RuntimeException) -+{ -+ sal_Int32 nCount = aEvent.Changes.getLength(); -+ if( nCount == 0 ) -+ return; -+ -+ util::ElementChange aChange = aEvent.Changes[ 0 ]; -+ rtl::OUString sOperation; -+ aChange.Accessor >>= sOperation; -+ if( !sOperation.equalsIgnoreAsciiCaseAscii("cell-change") ) -+ return; -+ -+ if( nCount == 1 ) -+ { -+ uno::Reference< table::XCellRange > xRangeObj; -+ aChange.ReplacedElement >>= xRangeObj; -+ if( xRangeObj.is() ) -+ { -+ uno::Sequence< uno::Any > aArgs(1); -+ aArgs[0] <<= xRangeObj; -+ pVbaEventsHelper->ProcessCompatibleVbaEvent( VBAEVENT_WORKSHEET_CHANGE, aArgs ); -+ } -+ return; -+ } -+ -+ ScRangeList aRangeList; -+ for( sal_Int32 nIndex = 0; nIndex < nCount; ++nIndex ) -+ { -+ aChange = aEvent.Changes[ nIndex ]; -+ aChange.Accessor >>= sOperation; -+ uno::Reference< table::XCellRange > xRangeObj; -+ aChange.ReplacedElement >>= xRangeObj; -+ if( xRangeObj.is() && sOperation.equalsIgnoreAsciiCaseAscii("cell-change") ) -+ { -+ uno::Reference< sheet::XCellRangeAddressable > xCellRangeAddressable( xRangeObj, uno::UNO_QUERY ); -+ if( xCellRangeAddressable.is() ) -+ { -+ ScRange aRange; -+ ScUnoConversion::FillScRange( aRange, xCellRangeAddressable->getRangeAddress() ); -+ aRangeList.Append( aRange ); -+ } -+ } -+ } -+ -+ if( aRangeList.Count() > 0 ) -+ { -+ uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( pVbaEventsHelper->getDocumentShell(), aRangeList ) ); -+ uno::Sequence< uno::Any > aArgs(1); -+ aArgs[0] <<= xRanges; -+ pVbaEventsHelper->ProcessCompatibleVbaEvent( VBAEVENT_WORKSHEET_CHANGE, aArgs ); -+ } -+} - - typedef ::cppu::WeakImplHelper3< awt::XWindowListener, util::XCloseListener, frame::XBorderResizeListener > WindowListener_BASE; - -@@ -394,8 +462,12 @@ ScVbaEventsHelper::ScVbaEventsHelper( uno::Sequence< css::uno::Any > const& aArg - : m_xContext( xContext ), mpVbaEventsListener( NULL ), mbOpened( sal_False ), mbIgnoreEvents( sal_False ) - { - uno::Reference< frame::XModel > xModel ( getXSomethingFromArgs< frame::XModel >( aArgs, 0 ), uno::UNO_QUERY ); -- ScDocShell* pDocShell = excel::getDocShell( xModel ); -+ pDocShell = excel::getDocShell( xModel ); - pDoc = pDocShell->GetDocument(); -+ // Add worksheet change listener -+ uno::Reference< util::XChangesNotifier > xChangesNotifier( xModel, uno::UNO_QUERY ); -+ if( xChangesNotifier.is() ) -+ xChangesNotifier->addChangesListener( uno::Reference< util::XChangesListener >( new WorksheetChangeListener( this ) ) ); - } - - ScVbaEventsHelper::~ScVbaEventsHelper() -@@ -782,6 +854,18 @@ SCTAB ScVbaEventsHelper::getTabFromArgs( const uno::Sequence< uno::Any > aArgs, - table::CellRangeAddress aAddress = xCellRangeAddressable->getRangeAddress(); - nTab = aAddress.Sheet; - } -+ else -+ { -+ uno::Reference< sheet::XSheetCellRangeContainer > xRanges( getXSomethingFromArgs< sheet::XSheetCellRangeContainer >( aArgs, nPos ), uno::UNO_QUERY ); -+ if( xRanges.is() ) -+ { -+ uno::Sequence< table::CellRangeAddress > aRangeAddresses = xRanges->getRangeAddresses(); -+ if( aRangeAddresses.getLength() > 0 ) -+ { -+ nTab = aRangeAddresses[ 0 ].Sheet; -+ } -+ } -+ } - return nTab; - } - -diff --git sc/source/ui/vba/vbaeventshelper.hxx sc/source/ui/vba/vbaeventshelper.hxx -index e8c41d3..e812aa0 100644 ---- sc/source/ui/vba/vbaeventshelper.hxx -+++ sc/source/ui/vba/vbaeventshelper.hxx -@@ -47,10 +47,12 @@ - typedef ::cppu::WeakImplHelper1< com::sun::star::document::XVbaEventsHelper > VBAWorkbookEvent_BASE; - - class VbaEventsListener; -+class ScDocShell; - class ScVbaEventsHelper : public VBAWorkbookEvent_BASE - { - private: - ScDocument* pDoc; -+ ScDocShell* pDocShell; - css::uno::Reference< css::uno::XComponentContext > m_xContext; - VbaEventsListener* mpVbaEventsListener; - sal_Bool mbOpened; -@@ -72,6 +74,7 @@ public: - ScVbaEventsHelper( css::uno::Sequence< css::uno::Any > const& aArgs, css::uno::Reference< css::uno::XComponentContext > const& xContext ); - ~ScVbaEventsHelper(); - ScDocument* getDocument() { return pDoc; }; -+ ScDocShell* getDocumentShell() { return pDocShell; }; - // XVBAWorkbookEventHelper - virtual sal_Bool SAL_CALL ProcessCompatibleVbaEvent( sal_Int32 nEventId, const css::uno::Sequence< css::uno::Any >& aArgs ) throw (css::uno::RuntimeException); - virtual void SAL_CALL setIgnoreEvents( ::sal_Bool _ignoreevents ) throw (css::uno::RuntimeException); |