using ::com::sun::star::beans::PropertyValue; using ::com::sun::star::container::XNameReplace; using ::com::sun::star::document::XEventsSupplier; using ::com::sun::star::lang::IllegalArgumentException;
XMLEventsImportContext::~XMLEventsImportContext()
{ // // if, for whatever reason, the object gets destroyed prematurely, // // we need to delete the collected events
}
css::uno::Reference< css::xml::sax::XFastContextHandler > XMLEventsImportContext::createFastChildContext(
sal_Int32 /*nElement*/, const css::uno::Reference< css::xml::sax::XFastAttributeList >& xAttrList )
{ // a) search for script:language and script:event-name attribute // b) delegate to factory. The factory will: // 1) translate XML event name into API event name // 2) get proper event context factory from import // 3) instantiate context
// a) search for script:language and script:event-name attribute
OUString sLanguage;
OUString sEventName; for (auto &aIter : sax_fastparser::castToFastAttributeList( xAttrList ))
{
OUString sValue = aIter.toString();
if (aIter.getToken() == XML_ELEMENT(SCRIPT, XML_EVENT_NAME))
{
sEventName = sValue;
} elseif (aIter.getToken() == XML_ELEMENT(SCRIPT, XML_LANGUAGE))
{
sLanguage = sValue; // else: ignore -> let child context handle this
} // else: ignore -> let child context handle this
}
// b) delegate to factory return GetImport().GetEventImport().CreateContext(
GetImport(), xAttrList, this, sEventName, sLanguage);
}
// now iterate over vector and a) insert b) delete all elements for(constauto& rEvent : m_aCollectEvents)
{
AddEventValues(rEvent.first, rEvent.second);
}
m_aCollectEvents.clear();
}
}
void XMLEventsImportContext::GetEventSequence( const OUString& rName,
Sequence<PropertyValue> & rSequence )
{ // search through the vector // (This shouldn't take a lot of time, since this method should only get // called if only one (or few) events are being expected)
// if we're not at the end, set the sequence if (aIter != m_aCollectEvents.end())
{
rSequence = aIter->second;
}
}
void XMLEventsImportContext::AddEventValues( const OUString& rEventName, const Sequence<PropertyValue> & rValues )
{ // if we already have the events, set them; else just collect if (m_xEvents.is())
{ // set event (if name is known) if (m_xEvents->hasByName(rEventName))
{ try
{
m_xEvents->replaceByName(rEventName, Any(rValues));
} catch ( const IllegalArgumentException & rException )
{
Sequence<OUString> aMsgParams { rEventName };
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.