12 #include <com/sun/star/beans/XPropertySet.hpp>
13 #include <com/sun/star/document/IndexedPropertyValues.hpp>
14 #include <com/sun/star/ui/XUIConfigurationPersistence.hpp>
15 #include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
16 #include <com/sun/star/lang/XSingleComponentFactory.hpp>
17 #include <com/sun/star/ui/ItemType.hpp>
45 MSOWordCommandConvertor();
46 virtual OUString MSOCommandToOOCommand( sal_Int16 msoCmd )
override;
47 virtual OUString MSOTCIDToOOCommand( sal_Int16 key )
override;
52 MSOWordCommandConvertor::MSOWordCommandConvertor()
56 msoToOOcmd[ 0x20b ] =
".uno:CloseDoc";
57 msoToOOcmd[ 0x50 ] =
".uno:Open";
61 tcidToOOcmd[ 0x9d9 ] =
".uno:Print";
64 OUString MSOWordCommandConvertor::MSOCommandToOOCommand( sal_Int16 key )
66 IdToString::iterator it = msoToOOcmd.find( key );
67 if ( it != msoToOOcmd.end() )
72 OUString MSOWordCommandConvertor::MSOTCIDToOOCommand( sal_Int16 key )
74 IdToString::iterator it = tcidToOOcmd.find( key );
75 if ( it != tcidToOOcmd.end() )
98 if ( index < 0 || index >= static_cast<sal_Int16>(
rCustomizations.size() ) )
107 SwCTB* pCTB = rCustomization.GetCustomizationData();
108 return pCTB && pCTB->
GetName() == sTBName;
111 return it->GetCustomizationData();
117 SAL_INFO(
"sw.ww8",
"SwCTBWrapper::Read() stream pos 0x" << std::hex << rS.
Tell() );
127 int nStart = rS.
Tell();
136 if ( !aTBC.
Read( rS ) )
138 rtbdc.push_back( aTBC );
139 bytesToRead =
cbDTBC - ( rS.
Tell() - nStart );
140 }
while ( bytesToRead > 0 );
142 if ( rS.
Tell() != nExpectedPos )
147 SAL_WARN_IF( rS.
Tell() != nExpectedPos,
"sw.ww8",
"### Error: Expected pos not equal to actual pos after reading rtbdc");
148 SAL_INFO(
"sw.ww8",
"\tPos now is 0x" << std::hex << rS.
Tell() <<
" should be 0x" << std::hex << nExpectedPos );
150 rS.
Seek( nExpectedPos );
156 if (
cCust > nMaxPossibleRecords)
163 if ( !aCust.
Read( rS ) )
179 auto it = std::find_if(
rtbdc.begin(),
rtbdc.end(),
180 [&nStreamOffset](
SwTBC& rItem) {
return rItem.GetOffset() == nStreamOffset; });
181 if ( it !=
rtbdc.end() )
192 css::uno::Reference<css::ui::XUIConfigurationManager> xCfgMgr;
195 uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
197 xCfgMgr = xAppCfgSupp->getUIConfigurationManager(
"com.sun.star.text.TextDocument");
202 if ( !rCustomization.ImportCustomToolBar( *
this, helper ) )
217 , pWrapper( wrapper )
218 , bIsDroppedMenuTB(
false )
224 SAL_INFO(
"sw.ww8",
"Customization::Read() stream pos 0x" << std::hex << rS.
Tell() );
231 if (
ctbds > nMaxAvailableRecords)
236 if (!aTBDelta.
Read( rS ) )
261 if ( rTBDelta.ControlIsInserted() && rTBDelta.ControlDropsToolBar() )
267 static const OUStringLiteral sMenuBar(
u"private:resource/menubar/menubar" );
273 const OUString sMenuName = pTBC->
GetCustomText().replace(
'&',
'~');
277 uno::Reference< container::XIndexContainer > xIndexContainer;
278 bool bHasSettings =
false;
281 xIndexContainer.set( helper.
getCfgManager()->getSettings( sMenuBar,
true ), uno::UNO_QUERY_THROW );
287 xIndexContainer.set( helper.
getAppCfgManager()->getSettings( sMenuBar,
true ), uno::UNO_QUERY_THROW );
289 xIndexContainer.set( helper.
getAppCfgManager()->createSettings(), uno::UNO_SET_THROW );
292 uno::Reference< lang::XSingleComponentFactory > xSCF( xIndexContainer, uno::UNO_QUERY_THROW );
293 uno::Reference< uno::XComponentContext > xContext(
295 uno::Reference< container::XIndexContainer > xMenuContainer( xSCF->createInstanceWithContext( xContext ), uno::UNO_QUERY_THROW );
297 uno::Sequence< beans::PropertyValue > aPopupMenu{
305 SAL_INFO(
"sw.ww8",
"** there are " << xIndexContainer->getCount() <<
" menu items on the bar, inserting after that");
306 xIndexContainer->insertByIndex( xIndexContainer->getCount(),
uno::Any( aPopupMenu ) );
309 helper.
getCfgManager()->replaceSettings( sMenuBar, uno::Reference< container::XIndexAccess >( xIndexContainer, uno::UNO_QUERY_THROW ) );
311 helper.
getCfgManager()->insertSettings( sMenuBar, uno::Reference< container::XIndexAccess >( xIndexContainer, uno::UNO_QUERY_THROW ) );
313 uno::Reference< ui::XUIConfigurationPersistence > xPersistence( helper.
getCfgManager(), uno::UNO_QUERY_THROW );
314 xPersistence->store();
355 return !(
CiTBDE & 0x8000 );
362 nIndex = nIndex >> 1;
369 SAL_INFO(
"sw.ww8",
"TBDelta::Read() stream pos 0x" << std::hex << rS.
Tell() );
395 SAL_INFO(
"sw.ww8",
"SwCTB::Read() stream pos 0x" << std::hex << rS.
Tell() );
416 if ( !aTBC.
Read( rS ) )
418 rTBC.push_back( aTBC );
432 uno::Reference< container::XIndexContainer > xIndexContainer( helper.
getCfgManager()->createSettings(), uno::UNO_SET_THROW );
433 uno::Reference< container::XIndexAccess > xIndexAccess( xIndexContainer, uno::UNO_QUERY_THROW );
434 uno::Reference< beans::XPropertySet > xProps( xIndexContainer, uno::UNO_QUERY_THROW );
439 const OUString sToolBarName =
"private:resource/toolbar/custom_" +
name.
getString();
440 for (
auto& rItem :
rTBC )
443 if ( !rItem.ImportToolBarControl( rWrapper, xIndexContainer, helper,
IsMenuToolbar() ) )
447 SAL_INFO(
"sw.ww8",
"Name of toolbar :-/ " << sToolBarName );
449 helper.
getCfgManager()->insertSettings( sToolBarName, xIndexAccess );
451 #if 1 // don't think this is necessary
452 uno::Reference< ui::XUIConfigurationPersistence > xPersistence( helper.
getCfgManager()->getImageManager(), uno::UNO_QUERY_THROW );
453 xPersistence->store();
455 xPersistence.set( helper.
getCfgManager(), uno::UNO_QUERY_THROW );
456 xPersistence->store();
460 catch(
const uno::Exception& )
470 for (
auto& rItem :
rTBC )
473 if ( !rItem.ImportToolBarControl( rWrapper, xIndexContainer, rHelper,
true ) )
485 SAL_INFO(
"sw.ww8",
"SwTBC::Read() stream pos 0x" << std::hex << rS.
Tell() );
491 cid = std::make_shared<sal_uInt32>();
497 tbcd = std::make_shared<TBCData>(
tbch );
498 if ( !
tbcd->Read( rS ) )
511 bool bBuiltin =
false;
515 const sal_uInt32 nCid = ( *
cid & 0xFFFF );
518 const sal_Int16 arg2 =
static_cast<sal_Int16
>( nCid >> 3 );
523 SAL_INFO(
"sw.ww8",
"cmt is cmtFci builtin command 0x" << std::hex << arg2);
528 SAL_INFO(
"sw.ww8",
"cmt is cmtMacro macro 0x" << std::hex << arg2);
531 SAL_INFO(
"sw.ww8",
"cmt is cmtAllocated [???] 0x" << std::hex << arg2);
534 SAL_INFO(
"sw.ww8",
"cmt is cmNill no-thing 0x" << std::hex << arg2);
537 SAL_INFO(
"sw.ww8",
"illegal 0x" << std::hex << cmt);
544 std::vector< css::beans::PropertyValue >
props;
548 if ( !sCommand.isEmpty() )
550 beans::PropertyValue aProp;
552 aProp.Name =
"CommandURL";
553 aProp.Value <<= sCommand;
554 props.push_back( aProp );
557 bool bBeginGroup =
false;
558 tbcd->ImportToolBarControl( helper, props, bBeginGroup, bIsMenuBar );
563 SAL_INFO(
"sw.ww8",
"** control has a menu, name of toolbar with menu items is " << pMenu->
Name() );
572 if ( !pCustTB->ImportMenuTB( rWrapper,xMenuDesc, helper ) )
581 beans::PropertyValue aProp;
582 aProp.Name =
"ItemDescriptorContainer";
583 aProp.Value <<= xMenuDesc;
584 props.push_back( aProp );
593 "Type", ui::ItemType::SEPARATOR_LINE) };
594 toolbarcontainer->insertByIndex( toolbarcontainer->getCount(),
uno::Any( sProps ) );
606 return tbcd->getGeneralInfo().CustomText();
613 SAL_INFO(
"sw.ww8",
"Xst::Read() stream pos 0x" << std::hex << rS.
Tell() );
625 SAL_INFO(
"sw.ww8",
"Tcg::Read() stream pos 0x" << std::hex << rS.
Tell() );
631 return tcg->Read( rS );
637 return tcg->ImportCustomToolBar( rDocSh );
651 std::unique_ptr<Tcg255SubStruct> xSubStruct;
656 xSubStruct.reset(
new PlfMcd);
661 xSubStruct.reset(
new PlfAcd);
667 xSubStruct.reset(
new PlfKme);
686 SAL_INFO(
"sw.ww8",
"Unknown id 0x" << std::hex << nId);
689 xSubStruct->ch = nId;
690 if (!xSubStruct->Read(rS))
692 rgtcgData.push_back(std::move(xSubStruct));
699 for (
const auto & rSubStruct :
rgtcgData )
701 if ( rSubStruct->id() == 0x12 )
721 SAL_INFO(
"sw.ww8",
"Tcg255::Read() stream pos 0x" << std::hex << rS.
Tell() );
725 while ( nId != 0x40 )
742 SAL_INFO(
"sw.ww8",
"Tcg255SubStruct::Read() stream pos 0x" << std::hex << rS.
Tell() );
754 SAL_INFO(
"sw.ww8",
"PffMcd::Read() stream pos 0x" << std::hex << rS.
Tell() );
763 SAL_WARN(
"sw.ww8",
iMac <<
" records claimed, but max possible is " << nMaxPossibleRecords);
764 iMac = nMaxPossibleRecords;
789 SAL_INFO(
"sw.ww8",
"PffAcd::Read() stream pos 0x" << std::hex << rS.
Tell() );
795 auto nMaxPossibleRecords = rS.
remainingSize() / (
sizeof(sal_uInt16)*2);
798 SAL_WARN(
"sw.ww8",
iMac <<
" records claimed, but max possible is " << nMaxPossibleRecords);
799 iMac = nMaxPossibleRecords;
824 SAL_INFO(
"sw.ww8",
"PlfKme::Read() stream pos 0x" << std::hex << rS.
Tell() );
851 SAL_INFO(
"sw.ww8",
"TcgSttbf::Read() stream pos 0x" << std::hex << rS.
Tell() );
869 SAL_INFO(
"sw.ww8",
"TcgSttbfCore::Read() stream pos 0x" << std::hex << rS.
Tell() );
898 SAL_INFO(
"sw.ww8",
"MacroNames::Read() stream pos 0x" << std::hex << rS.
Tell() );
905 size_t nMaxAvailableRecords = rS.
remainingSize()/
sizeof(sal_uInt16);
906 if (
iMac > nMaxAvailableRecords)
924 SAL_INFO(
"sw.ww8",
"MacroName::Read() stream pos 0x" << std::hex << rS.
Tell() );
937 SAL_INFO(
"sw.ww8",
"Xstz::Read() stream pos 0x" << std::hex << rS.
Tell() );
963 SAL_INFO(
"sw.ww8",
"Kme::Read() stream pos 0x" << std::hex << rS.
Tell() );
976 SAL_INFO(
"sw.ww8",
"Acd::Read() stream pos 0x" << std::hex << rS.
Tell() );
996 SAL_INFO(
"sw.ww8",
"MCD::Read() stream pos 0x" << rS.
Tell() );
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
bool Read(SvStream &rS) override
const OUString & getString() const
bool Read(SvStream &rS) override
SvStream & ReadInt16(sal_Int16 &rInt16)
bool ImportToolBarControl(SwCTBWrapper &, const css::uno::Reference< css::container::XIndexContainer > &, CustomToolBarImportHelper &, bool)
std::vector< sal_Int16 > dropDownMenuIndices
bool ControlDropsToolBar()
bool ImportCustomToolBar(SwCTBWrapper &, CustomToolBarImportHelper &)
std::vector< TBVisualData > rVisualData
sal_uInt8 doprfatendFlags
OUString read_uInt16s_ToOUString(SvStream &rStrm, std::size_t nLen)
SvStream & ReadUInt16(sal_uInt16 &rUInt16)
virtual ~SwCTBWrapper() override
bool processSubStruct(sal_uInt8 nId, SvStream &)
virtual ~PlfAcd() override
std::unique_ptr< Tcg255 > tcg
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
sal_uInt64 Seek(sal_uInt64 nPos)
bool Read(SvStream &rS) override
bool Read(SvStream &rS) override
bool Read(SvStream &rS) override
SwCTB * GetCustomizationData(const OUString &name)
std::vector< std::unique_ptr< Tcg255SubStruct > > rgtcgData
bool Read(SvStream &rS) override
std::vector< SwTBC > rtbdc
virtual ~SwCTB() override
bool Read(SvStream &rS) override
OUString const & GetName()
sal_uInt64 remainingSize()
bool Read(SvStream &rS) override
SvStream & ReadUInt32(sal_uInt32 &rUInt32)
bool ImportMenu(SwCTBWrapper &, CustomToolBarImportHelper &)
virtual ~MacroNames() override
bool Read(SvStream &rS) override
SwTBC * GetTBCAtOffset(sal_uInt32 nStreamOffset)
sal_Int16 CustomizationIndex()
bool Read(SvStream &rS) override
bool IsMenuToolbar() const
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
std::shared_ptr< SwCTB > customizationDataCTB
bool Read(SvStream &rS) override
std::shared_ptr< sal_uInt32 > cid
std::shared_ptr< TBCData > tbcd
css::uno::Reference< css::frame::XModel3 > GetBaseModel() const
bool Read(SvStream &rS) override
Customization * GetCustomizaton(sal_Int16 index)
SvStream & ReadUChar(unsigned char &rChar)
bool ImportCustomToolBar(SfxObjectShell &rDocSh)
std::vector< Customization > rCustomizations
bool Read(SvStream &rS) override
std::vector< TBDelta > customizationDataTBDelta
SvStream & ReadInt32(sal_Int32 &rInt32)
#define TOOLS_INFO_EXCEPTION(area, stream)
std::vector< SwTBC > rTBC
bool Read(SvStream &rS) override
bool Read(SvStream &rS) override
std::unique_ptr< MacroName[]> rgNames
bool ImportCustomToolBar(SfxObjectShell &rDocSh)
#define SAL_WARN_IF(condition, area, stream)
bool Read(SvStream &rS) override
std::unique_ptr< Acd[]> rgacd
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
virtual ~Tcg255() override
#define SAL_INFO(area, stream)
virtual ~PlfKme() override
Customization(SwCTBWrapper *rapper)
virtual ~TcgSttbfCore() override
Reference< XComponentContext > getProcessComponentContext()
bool ImportMenuTB(SwCTBWrapper &, const css::uno::Reference< css::container::XIndexContainer > &, CustomToolBarImportHelper &)
bool Read(SvStream &rS) override
bool Read(SvStream &rS) override
#define SAL_WARN(area, stream)
Reference< XModel > xModel
std::unique_ptr< SBBItem[]> dataItems
bool ImportCustomToolBar(SfxObjectShell &rDocSh)
std::unique_ptr< Kme[]> rgkme
void InsertDropIndex(sal_Int32 aIndex)
OUString read_uInt16_PascalString(SvStream &rStrm)
COMPHELPER_DLLPUBLIC void notifyMacroEventRead(const css::uno::Reference< css::frame::XModel > &_rxDocument)
bool Read(SvStream &rS) override
bool ImportCustomToolBar(SwCTBWrapper &, CustomToolBarImportHelper &)
bool Read(SvStream &rS) override
bool Read(SvStream &rS) override
bool Read(SvStream &rS) override
bool m_bDetectedRangeSegmentation false
bool IsMenuToolbar() const
SvStream & ReadSChar(signed char &rChar)