20#include <com/sun/star/beans/XPropertySet.hpp>
21#include <com/sun/star/lang/XServiceInfo.hpp>
22#include <com/sun/star/ui/theModuleUIConfigurationManagerSupplier.hpp>
23#include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
24#include <com/sun/star/ui/theWindowStateConfiguration.hpp>
28#include <rtl/ustrbuf.hxx>
41class MSO2OOCommandbarHelper final
44 static MSO2OOCommandbarHelper* pMSO2OOCommandbarHelper;
47 MSO2OOCommandbarHelper()
50 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Standard") , OUString(
"private:resource/toolbar/standardbar" ) ) );
51 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Formatting"), OUString(
"private:resource/toolbar/formatobjectbar") ) );
52 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Drawing"), OUString(
"private:resource/toolbar/drawbar") ) );
53 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Toolbar List"), OUString(
"private:resource/toolbar/toolbar") ) );
54 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Forms"), OUString(
"private:resource/toolbar/formcontrols") ) );
55 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Form Controls"),OUString(
"private:resource/toolbar/formcontrols") ) );
56 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Full Screen"), OUString(
"private:resource/toolbar/fullscreenbar") ) );
57 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Chart"), OUString(
"private:resource/toolbar/flowchartshapes") ) );
58 maBuildinToolbarMap.insert( std::make_pair( OUString(
"Picture"), OUString(
"private:resource/toolbar/graphicobjectbar") ) );
59 maBuildinToolbarMap.insert( std::make_pair( OUString(
"WordArt"), OUString(
"private:resource/toolbar/fontworkobjectbar") ) );
60 maBuildinToolbarMap.insert( std::make_pair( OUString(
"3-D Settings"), OUString(
"private:resource/toolbar/extrusionobjectbar") ) );
64 static MSO2OOCommandbarHelper* getMSO2OOCommandbarHelper()
66 if( pMSO2OOCommandbarHelper ==
nullptr )
68 pMSO2OOCommandbarHelper =
new MSO2OOCommandbarHelper();
70 return pMSO2OOCommandbarHelper;
73 OUString findBuildinToolbar(
const OUString& sToolbarName )
75 auto it = std::find_if(maBuildinToolbarMap.begin(), maBuildinToolbarMap.end(),
76 [&sToolbarName](
const MSO2OOCommandbarMap::value_type& rItem) { return rItem.first.equalsIgnoreAsciiCase( sToolbarName ); });
77 if( it != maBuildinToolbarMap.end() )
85MSO2OOCommandbarHelper* MSO2OOCommandbarHelper::pMSO2OOCommandbarHelper =
nullptr;
95 uno::Reference< css::ui::XUIConfigurationManagerSupplier > xUICfgSupplier(
mxModel, uno::UNO_QUERY_THROW );
96 m_xDocCfgMgr = xUICfgSupplier->getUIConfigurationManager();
98 uno::Reference< lang::XServiceInfo > xServiceInfo(
mxModel, uno::UNO_QUERY_THROW );
99 if( xServiceInfo->supportsService(
"com.sun.star.sheet.SpreadsheetDocument" ) )
101 maModuleId =
"com.sun.star.sheet.SpreadsheetDocument";
103 else if( xServiceInfo->supportsService(
"com.sun.star.text.TextDocument" ) )
105 maModuleId =
"com.sun.star.text.TextDocument";
110 throw uno::RuntimeException(
"Not implemented" );
113 css::uno::Reference< css::ui::XModuleUIConfigurationManagerSupplier > xUICfgMgrSupp(
114 css::ui::theModuleUIConfigurationManagerSupplier::get(
mxContext) );
118 css::uno::Reference< css::container::XNameAccess > xNameAccess = css::ui::theWindowStateConfiguration::get(
mxContext );
131 css::uno::Reference< css::container::XIndexAccess > xSettings(
m_xAppCfgMgr->createSettings( ), uno::UNO_QUERY_THROW );
150 m_xDocCfgMgr->replaceSettings( sResourceUrl, xSettings );
154 m_xDocCfgMgr->insertSettings( sResourceUrl, xSettings );
160 uno::Reference< frame::XFrame >
xFrame(
getModel()->getCurrentController()->getFrame(), uno::UNO_SET_THROW );
161 uno::Reference< beans::XPropertySet > xPropertySet(
xFrame, uno::UNO_QUERY_THROW );
162 uno::Reference< frame::XLayoutManager > xLayoutManager( xPropertySet->getPropertyValue(
"LayoutManager" ), uno::UNO_QUERY_THROW );
163 return xLayoutManager;
171 uno::Reference< beans::XPropertySet > xPropertySet(
m_xDocCfgMgr->getSettings( sResourceUrl,
false ), uno::UNO_QUERY_THROW );
183 OUString sResourceUrl = MSO2OOCommandbarHelper::getMSO2OOCommandbarHelper()->findBuildinToolbar(
sName );
184 if( !sResourceUrl.isEmpty() )
187 const uno::Sequence< OUString > allNames = xNameAccess->getElementNames();
188 auto pName = std::find_if(allNames.begin(), allNames.end(),
189 [
this, &
sName](
const OUString& rName) {
190 return rName.startsWith( ITEM_TOOLBAR_URL )
191 && hasToolbar( rName, sName );
193 if (
pName != allNames.end())
197 sResourceUrl =
"private:resource/toolbar/custom_" +
sName;
207 sal_Int32
nCount = xIndexAccess->getCount();
208 css::uno::Sequence< css::beans::PropertyValue > aProps;
212 xIndexAccess->getByIndex(
i ) >>= aProps;
216 sal_Int32
index = sLabel.indexOf(
'~' );
228 OUString sNewLabel =
aBuffer.makeStringAndClear();
229 SAL_INFO(
"vbahelper",
"VbaCommandBarHelper::findControlByName, control name: " << sNewLabel);
css::uno::Reference< css::frame::XModel2 > mxModel
static sal_Int32 findControlByName(const css::uno::Reference< css::container::XIndexAccess > &xIndexAccess, std::u16string_view sName, bool bMenu)
css::uno::Reference< css::frame::XModel > mxModel
css::uno::Reference< css::ui::XUIConfigurationManager > m_xAppCfgMgr
void removeSettings(const OUString &sResourceUrl)
css::uno::Reference< css::container::XIndexAccess > getSettings(const OUString &sResourceUrl)
bool hasToolbar(const OUString &sResourceUrl, std::u16string_view sName)
VbaCommandBarHelper(css::uno::Reference< css::uno::XComponentContext > xContext, css::uno::Reference< css::frame::XModel > xModel)
void ApplyTempChange(const OUString &sResourceUrl, const css::uno::Reference< css::container::XIndexAccess > &xSettings)
css::uno::Reference< css::container::XNameAccess > m_xWindowState
css::uno::Reference< css::frame::XLayoutManager > getLayoutManager() const
css::uno::Reference< css::uno::XComponentContext > mxContext
static OUString generateCustomURL()
const css::uno::Reference< css::frame::XModel > & getModel() const
css::uno::Reference< css::ui::XUIConfigurationManager > m_xDocCfgMgr
OUString findToolbarByName(const css::uno::Reference< css::container::XNameAccess > &xNameAccess, const OUString &sName)
#define SAL_INFO(area, stream)
int uniform_int_distribution(int a, int b)
bool equalsIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2)
uno::Any getPropertyValue(const uno::Sequence< beans::PropertyValue > &aProp, const OUString &aName)
Reference< XFrame > xFrame
Reference< XModel > xModel
std::map< OUString, OUString > MSO2OOCommandbarMap
constexpr char16_t ITEM_TOOLBAR_URL[]
constexpr OUStringLiteral CUSTOM_TOOLBAR_STR
constexpr OUStringLiteral ITEM_DESCRIPTOR_UINAME
constexpr OUStringLiteral ITEM_DESCRIPTOR_LABEL
std::unique_ptr< char[]> aBuffer