20#include <com/sun/star/container/XNameAccess.hpp>
21#include <ooo/vba/office/MsoBarType.hpp>
33class CommandBarEnumeration :
public ::cppu::WeakImplHelper< container::XEnumeration >
35 uno::Reference< XHelperInterface > m_xParent;
36 uno::Reference< uno::XComponentContext >
m_xContext;
38 uno::Sequence< OUString > m_sNames;
39 sal_Int32 m_nCurrentPosition;
42 CommandBarEnumeration( uno::Reference< XHelperInterface > xParent, uno::Reference< uno::XComponentContext > xContext,
VbaCommandBarHelperRef pHelper) : m_xParent(
std::move( xParent )),
m_xContext(
std::move( xContext )), m_pCBarHelper(
std::move( pHelper )) , m_nCurrentPosition( 0 )
44 uno::Reference< container::XNameAccess > xNameAccess = m_pCBarHelper->getPersistentWindowState();
45 m_sNames = xNameAccess->getElementNames();
47 virtual sal_Bool SAL_CALL hasMoreElements()
override
49 return m_nCurrentPosition < m_sNames.getLength();
51 virtual uno::Any SAL_CALL nextElement()
override
54 if( !hasMoreElements() )
55 throw container::NoSuchElementException();
57 OUString sResourceUrl( m_sNames[ m_nCurrentPosition++ ] );
58 if( sResourceUrl.indexOf(
"private:resource/toolbar/" ) != -1 )
60 uno::Reference< container::XIndexAccess > xCBarSetting = m_pCBarHelper->getSettings( sResourceUrl );
61 uno::Reference< XCommandBar > xCommandBar(
new ScVbaCommandBar( m_xParent, m_xContext, m_pCBarHelper, xCBarSetting, sResourceUrl,
false ) );
74ScVbaCommandBars::ScVbaCommandBars(
const uno::Reference< XHelperInterface >& xParent,
const uno::Reference< uno::XComponentContext >& xContext,
const uno::Reference< container::XIndexAccess >& xIndexAccess,
const uno::Reference< frame::XModel >& xModel ) :
CommandBars_BASE( xParent, xContext, xIndexAccess )
91uno::Reference< container::XEnumeration >
94 return uno::Reference< container::XEnumeration >(
new CommandBarEnumeration(
this,
mxContext,
m_pCBarHelper ) );
101 OUString sResourceUrl;
102 uno::Reference< container::XIndexAccess > xBarSettings;
107 if( aSource >>= sBarName )
110 if(
m_pCBarHelper->getModuleId() ==
"com.sun.star.sheet.SpreadsheetDocument" )
112 if( sBarName.equalsIgnoreAsciiCase(
"Worksheet Menu Bar" ) )
118 else if( sBarName.equalsIgnoreAsciiCase(
"Cell" ) )
124 else if(
m_pCBarHelper->getModuleId() ==
"com.sun.star.text.TextDocument" )
126 if( sBarName.equalsIgnoreAsciiCase(
"Menu Bar" ) )
135 if( !aRet.
hasValue() && sResourceUrl.isEmpty() )
142 if( !sResourceUrl.isEmpty() )
149 throw uno::RuntimeException(
"Toolbar do not exist" );
155uno::Reference< XCommandBar > SAL_CALL
156ScVbaCommandBars::Add(
const css::uno::Any& Name,
const css::uno::Any& ,
const css::uno::Any& ,
const css::uno::Any& )
162 if(
Name.hasValue() )
165 OUString sResourceUrl;
166 if( !
sName.isEmpty() )
169 if( !sResourceUrl.isEmpty() )
170 throw uno::RuntimeException(
"Toolbar exists" );
178 uno::Reference< container::XIndexAccess > xBarSettings(
m_pCBarHelper->getSettings( sResourceUrl ), uno::UNO_SET_THROW );
180 xCBar->setName(
sName );
188 const uno::Sequence< ::OUString > allNames =
m_xNameAccess->getElementNames();
189 nCount += std::count_if(allNames.begin(), allNames.end(),
190 [](
const OUString& rName) { return rName.indexOf(
"private:resource/toolbar/" ) != -1; });
198 if(
aIndex.getValueTypeClass() == uno::TypeClass_STRING )
209 if(
m_pCBarHelper->getModuleId() ==
"com.sun.star.sheet.SpreadsheetDocument" )
210 aSource <<= OUString(
"Worksheet Menu Bar");
211 else if(
m_pCBarHelper->getModuleId() ==
"com.sun.star.text.TextDocument" )
212 aSource <<= OUString(
"Menu Bar");
223 return "ScVbaCommandBars";
226uno::Sequence<OUString>
231 "ooo.vba.CommandBars"
Reference< XComponentContext > m_xContext
css::uno::Reference< css::uno::XComponentContext > mxContext
css::uno::Reference< css::container::XNameAccess > m_xNameAccess
virtual css::uno::Any SAL_CALL Item(const css::uno::Any &aIndex, const css::uno::Any &) override
virtual ~ScVbaCommandBars() override
VbaCommandBarHelperRef m_pCBarHelper
virtual css::uno::Any createCollectionObject(const css::uno::Any &aSource) override
ScVbaCommandBars(const css::uno::Reference< ov::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &xContext, const css::uno::Reference< css::container::XIndexAccess > &xIndexAccess, const css::uno::Reference< css::frame::XModel > &xModel)
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
virtual sal_Int32 SAL_CALL getCount() override
virtual css::uno::Type SAL_CALL getElementType() override
virtual css::uno::Reference< ov::XCommandBar > SAL_CALL Add(const css::uno::Any &Name, const css::uno::Any &Position, const css::uno::Any &MenuBar, const css::uno::Any &Temporary) override
virtual css::uno::Sequence< OUString > getServiceNames() override
virtual OUString getServiceImplName() override
static OUString generateCustomURL()
Dummy command bar implementation.
css::uno::Type const & get()
std::deque< AttacherIndex_Impl > aIndex
Sequence< OUString > aServiceNames
Reference< XModel > xModel
std::shared_ptr< VbaCommandBarHelper > VbaCommandBarHelperRef
constexpr OUStringLiteral ITEM_MENUBAR_URL