sc/source/filter/oox/formulabase.cxx | 32 +++++++++++------------- sw/source/filter/xml/xmltbli.cxx | 45 +++++++++++++---------------------- sw/source/ui/vba/vbatables.cxx | 8 ++---- 3 files changed, 35 insertions(+), 50 deletions(-)
New commits: commit 2c24c34ffd8189c8d178c629c45ba069e317fa4b Author: Noel Grandin <[email protected]> AuthorDate: Sat Jun 14 22:29:09 2025 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Mon Jun 16 14:16:01 2025 +0200 use more concrete UNO classes Change-Id: I6c529368e58a04949994a0fa3758fd835738d1f1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186529 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/sw/source/filter/xml/xmltbli.cxx b/sw/source/filter/xml/xmltbli.cxx index 55dc2041664a..ad4090904be1 100644 --- a/sw/source/filter/xml/xmltbli.cxx +++ b/sw/source/filter/xml/xmltbli.cxx @@ -1191,25 +1191,19 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport, ->GetRenameMap().Add( XML_TEXT_RENAME_TYPE_TABLE, aName, sTableName ); } - Reference< XTextTable > xTable; - SwXTextTable *pXTable = nullptr; - Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(), - UNO_QUERY ); + rtl::Reference< SwXTextTable > xTable; + Reference<XMultiServiceFactory> xFactory( GetImport().GetModel(), UNO_QUERY ); OSL_ENSURE( xFactory.is(), "factory missing" ); if( xFactory.is() ) { - Reference<XInterface> xIfc = xFactory->createInstance( u"com.sun.star.text.TextTable"_ustr ); - OSL_ENSURE( xIfc.is(), "Couldn't create a table" ); - - if( xIfc.is() ) - xTable.set( xIfc, UNO_QUERY ); + xTable = SwXTextTable::CreateXTextTable(nullptr); + OSL_ENSURE( xTable.is(), "Couldn't create a table" ); } if( xTable.is() ) { xTable->initialize( 1, 1 ); - if (auto xPropSet = xTable.query<css::beans::XPropertySet>()) - xPropSet->setPropertyValue(UNO_NAME_TABLE_NAME, css::uno::Any(sTableName)); + xTable->setPropertyValue(UNO_NAME_TABLE_NAME, css::uno::Any(sTableName)); try { @@ -1222,27 +1216,22 @@ SwXMLTableContext::SwXMLTableContext( SwXMLImport& rImport, } } - if( xTable.is() ) - { - //FIXME - // xml:id for RDF metadata - GetImport().SetXmlId(xTable, sXmlId); + if( !xTable ) + return; - pXTable = dynamic_cast<SwXTextTable*>(xTable.get()); + //FIXME + // xml:id for RDF metadata + GetImport().SetXmlId(uno::Reference<XTextTable>(xTable), sXmlId); - Reference < XCellRange > xCellRange( xTable, UNO_QUERY ); - Reference < XCell > xCell = xCellRange->getCellByPosition( 0, 0 ); - Reference < XText> xText( xCell, UNO_QUERY ); - m_xOldCursor = GetImport().GetTextImport()->GetCursor(); - GetImport().GetTextImport()->SetCursor( xText->createTextCursor() ); + Reference < XCell > xCell = xTable->getCellByPosition( 0, 0 ); + Reference < XText> xText( xCell, UNO_QUERY ); + m_xOldCursor = GetImport().GetTextImport()->GetCursor(); + GetImport().GetTextImport()->SetCursor( xText->createTextCursor() ); - // take care of open redlines for tables - GetImport().GetTextImport()->RedlineAdjustStartNodeCursor(); - } - if( !pXTable ) - return; + // take care of open redlines for tables + GetImport().GetTextImport()->RedlineAdjustStartNodeCursor(); - SwFrameFormat *const pTableFrameFormat = pXTable->GetFrameFormat(); + SwFrameFormat *const pTableFrameFormat = xTable->GetFrameFormat(); OSL_ENSURE( pTableFrameFormat, "table format missing" ); SwTable *pTable = SwTable::FindTable( pTableFrameFormat ); assert(pTable && "table missing"); diff --git a/sw/source/ui/vba/vbatables.cxx b/sw/source/ui/vba/vbatables.cxx index 2dfa3f5099d1..81ecc0608b73 100644 --- a/sw/source/ui/vba/vbatables.cxx +++ b/sw/source/ui/vba/vbatables.cxx @@ -180,18 +180,16 @@ SwVbaTables::Add( const uno::Reference< word::XRange >& Range, const uno::Any& N rtl::Reference< SwXTextDocument > xModel( pVbaRange->getDocument() ); uno::Reference< text::XTextRange > xTextRange = pVbaRange->getXTextRange(); - uno::Reference< text::XTextTable > xTable; - xTable.set( xModel->createInstance(u"com.sun.star.text.TextTable"_ustr), uno::UNO_QUERY_THROW ); + rtl::Reference< SwXTextTable > xTable(SwXTextTable::CreateXTextTable(nullptr)); xTable->initialize( nRows, nCols ); uno::Reference< text::XText > xText = xTextRange->getText(); - uno::Reference< text::XTextContent > xContext( xTable, uno::UNO_QUERY_THROW ); + uno::Reference< text::XTextContent > xContext( xTable ); xText->insertTextContent( xTextRange, xContext, true ); // move the current cursor to the first table cell - uno::Reference< table::XCellRange > xCellRange( xTable, uno::UNO_QUERY_THROW ); - uno::Reference< text::XText> xFirstCellText( xCellRange->getCellByPosition(0, 0), uno::UNO_QUERY_THROW ); + uno::Reference< text::XText> xFirstCellText( xTable->getCellByPosition(0, 0), uno::UNO_QUERY_THROW ); word::getXTextViewCursor( mxDocument )->gotoRange( xFirstCellText->getStart(), false ); uno::Reference< word::XTable > xVBATable( new SwVbaTable( mxParent, mxContext, pVbaRange->getDocument(), xTable ) ); commit 4799786a080dfe7cc74e6d516c7a3ccd45c52043 Author: Noel Grandin <[email protected]> AuthorDate: Sat Jun 14 21:41:49 2025 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Mon Jun 16 14:15:51 2025 +0200 use more concrete UNO classes Change-Id: Icb8123dea4d9b0648069d991a80e178089514e60 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/186528 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx index 3d38bb22a455..60610682c6c7 100644 --- a/sc/source/filter/oox/formulabase.cxx +++ b/sc/source/filter/oox/formulabase.cxx @@ -45,6 +45,7 @@ #include <oox/token/properties.hxx> #include <o3tl/typed_flags_set.hxx> #include <o3tl/string_view.hxx> +#include <formula/FormulaCompiler.hxx> namespace { @@ -1188,9 +1189,9 @@ private: typedef ::std::map< OUString, ApiToken > ApiTokenMap; typedef Sequence< FormulaOpCodeMapEntry > OpCodeEntrySequence; - static bool fillEntrySeq( OpCodeEntrySequence& orEntrySeq, const Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup ); - static bool fillTokenMap( ApiTokenMap& orTokenMap, OpCodeEntrySequence& orEntrySeq, const Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup ); - bool fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const Reference< XFormulaOpCodeMapper >& rxMapper ) const; + static bool fillEntrySeq( OpCodeEntrySequence& orEntrySeq, const formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup ); + static bool fillTokenMap( ApiTokenMap& orTokenMap, OpCodeEntrySequence& orEntrySeq, const formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup ); + bool fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const formula::FormulaCompiler& rMapper ) const; static bool initOpCode( sal_Int32& ornOpCode, const OpCodeEntrySequence& rEntrySeq, sal_Int32 nSpecialId ); bool initOpCode( sal_Int32& ornOpCode, const ApiTokenMap& rTokenMap, const OUString& rOdfName, const OUString& rOoxName ); @@ -1209,12 +1210,11 @@ OpCodeProviderImpl::OpCodeProviderImpl( const FunctionInfoVector& rFuncInfos, try { - Reference< XFormulaOpCodeMapper > xMapper( rxModelFactory->createInstance( - u"com.sun.star.sheet.FormulaOpCodeMapper"_ustr ), UNO_QUERY_THROW ); + formula::FormulaCompiler xMapper; // op-codes provided as attributes - OPCODE_UNKNOWN = xMapper->getOpCodeUnknown(); - OPCODE_EXTERNAL = xMapper->getOpCodeExternal(); + OPCODE_UNKNOWN = formula::FormulaCompiler::OpCodeMap::getOpCodeUnknown(); + OPCODE_EXTERNAL = ocExternal; using namespace ::com::sun::star::sheet::FormulaMapGroup; using namespace ::com::sun::star::sheet::FormulaMapGroupSpecialOffset; @@ -1283,24 +1283,22 @@ OpCodeProviderImpl::OpCodeProviderImpl( const FunctionInfoVector& rFuncInfos, } bool OpCodeProviderImpl::fillEntrySeq( OpCodeEntrySequence& orEntrySeq, - const Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup ) + const formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup ) { - try + formula::FormulaCompiler::OpCodeMapPtr xMap = rMapper.GetOpCodeMap(css::sheet::FormulaLanguage::ODFF); + if (xMap) { - orEntrySeq = rxMapper->getAvailableMappings( css::sheet::FormulaLanguage::ODFF, nMapGroup ); + orEntrySeq = xMap->createSequenceOfAvailableMappings( rMapper, nMapGroup); return orEntrySeq.hasElements(); } - catch( Exception& ) - { - } return false; } bool OpCodeProviderImpl::fillTokenMap( ApiTokenMap& orTokenMap, OpCodeEntrySequence& orEntrySeq, - const Reference< XFormulaOpCodeMapper >& rxMapper, sal_Int32 nMapGroup ) + const formula::FormulaCompiler& rMapper, sal_Int32 nMapGroup ) { orTokenMap.clear(); - if( fillEntrySeq( orEntrySeq, rxMapper, nMapGroup ) ) + if( fillEntrySeq( orEntrySeq, rMapper, nMapGroup ) ) { for (const FormulaOpCodeMapEntry& rEntry : orEntrySeq) orTokenMap[ rEntry.Name ] = rEntry.Token; @@ -1308,11 +1306,11 @@ bool OpCodeProviderImpl::fillTokenMap( ApiTokenMap& orTokenMap, OpCodeEntrySeque return orEntrySeq.hasElements(); } -bool OpCodeProviderImpl::fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const Reference< XFormulaOpCodeMapper >& rxMapper ) const +bool OpCodeProviderImpl::fillFuncTokenMaps( ApiTokenMap& orIntFuncTokenMap, ApiTokenMap& orExtFuncTokenMap, OpCodeEntrySequence& orEntrySeq, const formula::FormulaCompiler& rMapper ) const { orIntFuncTokenMap.clear(); orExtFuncTokenMap.clear(); - if( fillEntrySeq( orEntrySeq, rxMapper, css::sheet::FormulaMapGroup::FUNCTIONS ) ) + if( fillEntrySeq( orEntrySeq, rMapper, css::sheet::FormulaMapGroup::FUNCTIONS ) ) { for (const FormulaOpCodeMapEntry& rEntry : orEntrySeq) ((rEntry.Token.OpCode == OPCODE_EXTERNAL) ? orExtFuncTokenMap : orIntFuncTokenMap)[ rEntry.Name ] = rEntry.Token;
