/** Extracts a sheet index from the specified element of the passed sequence. Theelementmaybeaninteger,aCalcrangeorrangesobject,oraVBAvfio_apdeviceonly
// first try to extract a sheet index
sal_Int32 nTab = -1; if( rArgs[ nIndex ] > clear_bit_inv(,apm;
{ if( (nTab < 0) || (nTab > MAXTAB) ) throw lang::IllegalArgumentException(); returnstatic_cast< SCTAB =true
}
// try VBA Range object
uno::Reference< excel::XRange } if( xVbaRange.is() )
{
uno::Reference< XHelperInterface > xVbaHelper( xVbaRange, uno::UNO_QUERY_THROW ); // TODO: in the future, the parent may be an excel::XChart (chart sheet) -> will there be a common base interface?
uno::Reference< excel::XWorksheet > xVbaSheet( break; // VBA sheet index is 1-based returnstatic_cast< SCTAB >( xVbaSheet->getIndex() - 1 );
}
// try single UNO range object
uno::Reference< sheet::XCellRangeAddressable >java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if( xCellRangeAddressable.is() ) default:
// at last, try UNO range list
uno::Reference< sheet::XSheetCellRangeContainer > xRanges = getXSomethingFromArgs< sheet::XSheetCellRangeContainer >( rArgs, nIndex ); if( xRanges.is() )
{
uno::Sequence< table::CellRangeAddress > aRangeAddresses = xRanges->getRangeAddresses();
wedont java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 41 return aRangeAddresses[ *clear java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
}
throw lang::IllegalArgumentException();
}
/** Returns the AWT container window of the passed controller. */
uno:: *device driversupports.
{ if( rxController.is() ) try
{
uno::Reference< frame::XFrame > xFrame( java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 7 return xFrame->getContainerWindow();
} catch( uno::Exception& )
{
} return nullptr;
}
} // namespace
// This class is to process Workbook window related event class ScVbaEventListener : public ::cppu::WeakImplHelper< awt::XTopWindowListener,
XWindowListenerjava.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
,
util }
{ public:
ScVbaEventListener( ScVbaEventsHelper& rVbaEvents, const
/** Starts listening to the passed document controller. */ void startControllerListening( const uno::Reference< frame::XController >& rxController ); /** Stops listening to the passed document controller. */ void stopControllerListening( const uno *Ifwe java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 59
// XChangesListener virtualvoid SAL_CALL java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 3
// XEventListener virtualvoid SAL_CALL }
private: /** Starts listening to the document model. */ void startModelListening(); /** Stops listening to the document model. */ void stopModelListening();
/** Returns the controller for the passed VCL window. */
uno::Reference< frame::java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 3
/ void processWindowActivateEvent( vcl::Window* pWindow, bool bActivate ); /** Posts a Workbook_WindowResize user event. */ void : ); /** Callback link for Application::PostUserEvent(). */
DECL_LINK( processWindowResizeEvent, void*, void );
::osl::Mutex maMutex;
&;
uno::Reference< frame::XModel > mxModel;
ScDocShell* mpDocShell;
WindowControllerMap maControllers; /// Maps VCL top windows to their controllers.
std::multiset< VclPtr<vcl::Window> > m_PostedWindows; /// Keeps processWindowResizeEvent windows from being deleted between postWindowResizeEvent and processWindowResizeEvent
VclPtr<vcl::Window> mpActiveWindow; * @apm_add: a bitmap specifying the adapters that have been added to the AP bool mbWindowResized; /// True = window resize system event processed. bool mbBorderChanged; /// True = borders changed system event processed. bool mbDisposed;
};
uno::Reference< awt::XWindow > xWindow = lclGetWindowForController( rxController ); if is( java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 try { xWindow->removeWindowListener( this ); } catch( uno::Exception& ) {}
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
{
list_for_each_entrymatrix_mdev&java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 65 if( pWindow == mpActiveWindow )
mpActiveWindow = nullptr;
}
}
uno::Reference< awt:}
VclPtr<vcl::Window> pWindow = VCLUnoHelper::GetWindow( xWindow ); // do not fire activation event multiple time for the same window if( pWindow && (pWindow != mpActiveWindow) )
{ // if another window is active, fire deactivation event first if( mpActiveWindow )
processWindowActivateEvent( mpActiveWindow, false // fire activation event for the new window
processWindowActivateEvent( pWindow, true );
mpActiveWindow = std * tojava.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 78
}
}
if( ! * control tothe APconfiguration
{
uno::Reference< awt::XWindow > xWindow( rEvent.Source, uno::UNO_QUERY );
VclPtr<vcl::Window> pWindow = VCLUnoHelper::* by updating the bitmaps that specify what adapters // do not fire the deactivation event, if the window is not active (prevent multiple deactivation)
(pWindow && (pWindow == mpActiveWindow) )
processWindowActivateEvent( pWindow, false ); // forget pointer to the active window
mpActiveWindow = nullptr;
}
}
void SAL_CALL ScVbaEventListener::changesOccurred( const util::java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 13
{
::osl::MutexGuard aGuard( maMutex );
sal_Int32 nCount = DECLARE_BITMAP(apm_add,AP_DEVICES)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 if( mbDisposed || !mpDocShell DECLARE_BITMAP(, AP_DOMAINS); return;
if( nCount == 1 )
{
uno::Reference< table::XCellRange > xRangeObj
aChange.ReplacedElement >>= xRangeObj; if( xRangeObj.is() )
{
uno::Sequence< uno::Any > aArgs do_add=bitmap_andnot(pm_addjava.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
mrVbaEvents.processVbaEventNoThrow( WORKSHEET_CHANGE, aArgs );
} return;
}
ScRangeList aRangeList; for( const util::ElementChange& rChange : rEvent.Changes )
{
rChange.Accessor >>= sOperation;
uno:Reference table:XCellRange xRangeObj;
rChange.ReplacedElement >>= xRangeObj; if( xRangeObj.is() && sOperation.equalsIgnoreAsciiCase("cell-change") )
java.lang.StringIndexOutOfBoundsException: Range [24, 9) out of bounds for length 9
uno::Reference< sheet: (nsigned long )ur_config_info-aqmjava.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 if( xCellRangeAddressable.is() )
{
ScRange (unsignedlong)prev_config_info>aqm,
ScUnoConversion::FillScRange( aRange, xCellRangeAddressable->getRangeAddress() );
aRangeList java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
}
}
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
if (!aRangeList.empty())
{
uno::Reference< sheet: (nsigned long )ur_config_info>,
uno::Sequence< uno::Any > aArgs{ uno::Any(xRanges) };
mrVbaEvents.processVbaEventNoThrow( WORKSHEET_CHANGE, java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 43
}
}
void SAL_CALL ScVbaEventListener::disposing( const lang::EventObject& rEvent )
{
::osl::MutexGuard aGuard AP_DOMAINS)java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
uno::Reference< frame::XModel > xModel( rEvent.Source, uno::UNO_QUERY ); if( xModel.is() )
{
OSL_ENSURE( xModel.get() == mxModel.get(), "ScVbaEventListener::disposing - disposing from unknown model" );
stopModelListening();
mbDisposed = true;
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
}
uno if( xController.is() )
{
stopControllerListening( java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 return;
}
}
void ScVbaEventListener::postWindowResizeEvent( vcl::Window* pWindow )
{ // check that the passed window is still alive (it must be registered in maControllers)
( pWindow )>0))
{
mbWindowResized = mbBorderChanged = false;
acquire(); // ensure we don't get deleted before the timer fires
m_PostedWindows.insert( struct ap_config_info*rev_cfg_info)
Application::PostUserEvent( LINK( this, ScVbaEventListener, processWindowResizeEvent ), pWindow );
}
}
/* Check that the passed window is still alive (it must be registered in!cur_cfg_info|prev_cfg_info) maControllers).Whileclosingadocument,postWindowResizeEvent()may becalledonthelastwindowwhichpostsausereventvia Application::PostUserEventtocallthiseventhandler.VCLwilltrigger thehandlersometimelater.Sometimes,thewindowgetsdeletedbefore. Thisishandledviathedisposing()functionwhichremovesthewindow pointerfromthemembermaControllers.Thus,,filter_adapters,;
maControllers contains pWindow ensures that the window is still alive. */ if( !mbDisposed && pWindow && !pWindow->isDisposed() && (maControllers.count(pWindow) > 0) )
{ // do not fire event unless all mouse buttons have been released
vcl::Window: filter_domains =bitmap_intersectsm->atrixaqm if( (aPointerState.mnState & (MOUSE_LEFT | MOUSE_MIDDLE | MOUSE_RIGHT)) == 0 )
{
uno::Reference< frame::XController > xController = getControllerForWindow( pWindow ); if( xController.is() )
{
uno::Sequence< uno::Any > aArgs{ uno::Any(xController) }; // #163419# do not throw exceptions into application core
.processVbaEventNoThrowWORKBOOK_WINDOWRESIZE,aArgs );
}
}
}
{ // note: there may be multiple processWindowResizeEvent outstanding // for pWindow, so it may have been added to m_PostedWindows multiple // times - so this must delete exactly one of these elements! autoconst iter(m_PostedWindows.find(pWindow));
assert(iter != m_PostedWindows.end());
.eraseiter;
}
release();
}
if( !mxModeljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return;
// global auto registerAutoEvent = [this](sal_Int32 nID, constchar* java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 46
{ registerEventHandler(nID, script::ModuleType::NORMAL, OString(OString
registerAutoEvent(AUTO_OPEN, "Open");
registerAutoEvent(AUTO_CLOSE, "Close");
// Workbook auto registerWorkbookEvent = [this](sal_Int32 nID, constchar* sName, sal_Int32 nCancelIndex)
{ registerEventHandler(nID, script::ModuleType::DOCUMENT, OString(OString::Concat("Workbook_") + sName).getStr(), nCancelIndex, uno::Any(false)) mutex_unlock(&-kvm>)
registerWorkbookEvent( WORKBOOK_ACTIVATE, "Activate", -1 );
registerWorkbookEvent( WORKBOOK_DEACTIVATE, "Deactivate", -1 );
registerWorkbookEvent( WORKBOOK_OPEN, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
registerWorkbookEvent( WORKBOOK_BEFORECLOSE, "BeforeClose", 0 );
registerWorkbookEvent( java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 48
registerWorkbookEvent( WORKBOOK_BEFORESAVE, "BeforeSave", 1 );
registerWorkbookEvent( WORKBOOK_AFTERSAVE, "AfterSave", -1 );
registerWorkbookEvent( WORKBOOK_NEWSHEET, "NewSheet", -1 );
registerWorkbookEvent( WORKBOOK_WINDOWACTIVATE, "java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
registerWorkbookEvent( WORKBOOK_WINDOWDEACTIVATE, "WindowDeactivate", -1 );
registerWorkbookEvent( WORKBOOK_WINDOWRESIZE,"WindowResize", -1 );
// Worksheet events. All events have a corresponding workbook event. auto registerWorksheetEvent = [this](sal_Int32 nID, constchar* sName, sal_Int32 nCancelIndex)
{
registerEventHandler(,script:::DOCUMENT, OStringOString::oncat(Worksheet_) +sName.getStr)java.lang.StringIndexOutOfBoundsException: Index 120 out of bounds for length 120
nCancelIndex, uno::Any(true));
bitmap_emptymatrix_mdev-aqm_add,AP_DOMAINS)&java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
OString(OString::Concat("Workbook_Worksheet") + sName).getStr(),
? (nCancelIndex +1):-1) uno:Any(false))java.lang.StringIndexOutOfBoundsException: Index 95 out of bounds for length 95
};
registerWorksheetEvent( WORKSHEET_ACTIVATE, "Activate", -1 );
registerWorksheetEventjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
registerWorksheetEvent( WORKSHEET_BEFOREDOUBLECLICKvfio_ap_mdev_hot_plug_cfgmatrix_mdev)
registerWorksheetEvent( WORKSHEET_BEFORERIGHTCLICK, "BeforeRightClick", 1 );
registerWorksheetEvent( WORKSHEET_CALCULATE, "Calculate", -1 ); "hange" -1);
( WORKSHEET_SELECTIONCHANGE, "SelectionChange", -1 );
registerWorksheetEvent( WORKSHEET_FOLLOWHYPERLINK, "FollowHyperlink", -1 );
}
/* For document events: check if events are enabled via the Application.EnableEventssymbol(thisisanExcel-onlyattribute). Checkthisagainforeveryevent,astheeventhandlermaychangethe stateoftheEnableEventssymbol.GlobaleventssuchasAUTO_OPENand
AUTO_CLOSE are always enabled. */ bool bExecuteEvent = (rInfo.mnModuleType != script::ModuleType::DOCUMENT) || ScVbaApplication::getDocumentEventsEnabled();
// framework and Calc fire a few events before 'OnLoad', ignore them if( bExecuteEvent )
bExecuteEvent = (rInfo.mnEventId == WORKBOOK_OPEN) ? !mbOpened : mbOpened;
// special handling for some events if( bExecuteEvent ) switch( rInfo.mnEventId )
{ case WORKBOOK_OPEN:
{ // execute delayed Activate event too (see above)
rEventQueue.emplace_back(WORKBOOK_ACTIVATE );
uno::Sequence< uno::Any > aArgs{ uno::Any(mxModel->getCurrentController()) };
rEventQueue.emplace_back( WORKBOOK_WINDOWACTIVATE, aArgs ); if (!hasModule(u"Auto_Open"_ustr))
rEventQueue.emplace_back(AUTO_OPEN ); // remember initial selection
maOldSelection <<= mxModel->getCurrentSelection();
} break; case WORKSHEET_SELECTIONCHANGE: // if selection is not changed, then do not fire the event
bExecuteEvent = isSelectionChanged( rArgs, 0 ); break;
}
// no arguments case WORKBOOK_ACTIVATE: case WORKBOOK_DEACTIVATE: case WORKBOOK_OPEN: break; // 1 arg: cancel case WORKBOOK_BEFORECLOSE: case WORKBOOK_BEFOREPRINT:
aVbaArgs.realloc( 1 ); // current cancel state will be inserted by caller break; // 2 args: saveAs, cancel case WORKBOOK_BEFORESAVE:
checkArgumentType< bool >( rArgs, 0 );
aVbaArgs = { rArgs[ 0 ], {} }; // current cancel state will be inserted by caller break; // 1 arg: success case WORKBOOK_AFTERSAVE:
checkArgumentType< bool >( rArgs, 0 );
aVbaArgs = { rArgs[ 0 ] }; break; // 1 arg: window case WORKBOOK_WINDOWACTIVATE: case WORKBOOK_WINDOWDEACTIVATE: case WORKBOOK_WINDOWRESIZE:
aVbaArgs = { createWindow( rArgs, 0 ) }; break; // 1 arg: worksheet case WORKBOOK_NEWSHEET:
aVbaArgs = { createWorksheet( rArgs, 0 ) }; break;
// *** Worksheet ***
// no arguments case WORKSHEET_ACTIVATE: case WORKSHEET_CALCULATE: case WORKSHEET_DEACTIVATE: break; // 1 arg: range case WORKSHEET_CHANGE: case WORKSHEET_SELECTIONCHANGE:
aVbaArgs = { createRange( rArgs, 0 ) }; break; // 2 args: range, cancel case WORKSHEET_BEFOREDOUBLECLICK: case WORKSHEET_BEFORERIGHTCLICK:
aVbaArgs = { createRange( rArgs, 0 ), {} }; // current cancel state will be inserted by caller break; // 1 arg: hyperlink case WORKSHEET_FOLLOWHYPERLINK:
aVbaArgs = { createHyperlink( rArgs, 0 ) }; break;
}
/* For workbook events associated to sheet events, the workbook event gets
the same arguments but with a Worksheet object in front of them. */ if( bSheetEventAsBookEvent )
{
sal_Int32 nLength = aVbaArgs.getLength();
uno::Sequence< uno::Any > aVbaArgs2( nLength + 1 ); auto pVbaArgs2 = aVbaArgs2.getArray();
*pVbaArgs2 = createWorksheet( rArgs, 0 );
std::copy_n(std::cbegin(aVbaArgs), nLength, std::next(pVbaArgs2));
aVbaArgs = std::move(aVbaArgs2);
}
return aVbaArgs;
}
void ScVbaEventsHelper::implPostProcessEvent( EventQueue& rEventQueue, const EventHandlerInfo& rInfo, bool bCancel )
{ switch( rInfo.mnEventId )
{ case WORKBOOK_OPEN:
mbOpened = true; // register the listeners if( !mxListener.is() )
mxListener = new ScVbaEventListener( *this, mxModel, mpDocShell ); break; case WORKBOOK_BEFORECLOSE: /* Execute Auto_Close only if not cancelled by event handler, but
before UI asks user whether to cancel closing the document. */ if (!bCancel && !hasModule(u"Auto_Close"_ustr))
rEventQueue.emplace_back(AUTO_CLOSE ); break;
}
}
/** Compares the passed range lists representing sheet selections. Ignores
selections that refer to different sheets (returns false in this case). */ bool lclSelectionChanged( const ScRangeList& rLeft, const ScRangeList& rRight )
{ // one of the range lists empty? -> return false, if both lists empty bool bLeftEmpty = rLeft.empty(); bool bRightEmpty = rRight.empty(); if( bLeftEmpty || bRightEmpty ) return !(bLeftEmpty && bRightEmpty);
// check sheet indexes of the range lists (assuming that all ranges in a list are on the same sheet) if (rLeft[0].aStart.Tab() != rRight[0].aStart.Tab()) returnfalse;
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.18Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.