21#include <com/sun/star/lang/XSingleComponentFactory.hpp>
32class CommandBarControlEnumeration :
public ::cppu::WeakImplHelper< container::XEnumeration >
36 sal_Int32 m_nCurrentPosition;
38 explicit CommandBarControlEnumeration(
CommandBarControls_BASE* pCommandBarControls ) : m_pCommandBarControls( pCommandBarControls ), m_nCurrentPosition( 0 ) {}
39 virtual sal_Bool SAL_CALL hasMoreElements()
override
41 if( m_nCurrentPosition < m_pCommandBarControls->getCount() )
45 virtual uno::Any SAL_CALL nextElement()
override
47 if( !hasMoreElements() )
48 throw container::NoSuchElementException();
56ScVbaCommandBarControls::ScVbaCommandBarControls(
const uno::Reference< XHelperInterface >& xParent,
const uno::Reference< uno::XComponentContext >& xContext,
const uno::Reference< container::XIndexAccess>& xIndexAccess,
VbaCommandBarHelperRef pHelper, uno::Reference< container::XIndexAccess> xBarSettings,
const OUString& sResourceUrl ) :
CommandBarControls_BASE( xParent, xContext, xIndexAccess ), pCBarHelper(
std::move( pHelper )), m_xBarSettings(
std::move( xBarSettings )), m_sResourceUrl( sResourceUrl )
62 const OUString& sHelpURL,
63 const OUString& sLabel,
69 uno::Sequence< beans::PropertyValue > aProps{
83 const OUString& sHelpURL,
84 const OUString& sLabel,
90 uno::Sequence< beans::PropertyValue > aProps{
110uno::Reference< container::XEnumeration >
113 return uno::Reference< container::XEnumeration >(
new CommandBarControlEnumeration(
this ) );
119 sal_Int32 nPosition = -1;
120 aSource >>= nPosition;
121 uno::Sequence< beans::PropertyValue > aProps;
123 uno::Reference< container::XIndexAccess > xSubMenu;
131 return uno::Any( uno::Reference< XCommandBarControl > ( pNewCommandBarControl ) );
138 sal_Int32 nPosition = -1;
139 if(
aIndex.getValueTypeClass() == uno::TypeClass_STRING )
150 if( nPosition < 0 || nPosition >=
getCount() )
152 throw uno::RuntimeException();
158uno::Reference< XCommandBarControl > SAL_CALL
163 OUString sLabel(
"Custom");
165 sal_Int32
nType = office::MsoControlType::msoControlButton;
166 sal_Int32 nPosition = 0;
168 if(
Type.hasValue() )
173 if(
nType != office::MsoControlType::msoControlButton &&
174 nType != office::MsoControlType::msoControlPopup )
175 throw uno::RuntimeException(
"Not implemented" );
179 throw uno::RuntimeException(
"Not implemented" );
188 if(
nType == office::MsoControlType::msoControlPopup )
191 uno::Reference< lang::XSingleComponentFactory > xSCF(
m_xBarSettings, uno::UNO_QUERY_THROW );
192 aSubMenu <<= xSCF->createInstanceWithContext(
mxContext );
196 uno::Sequence< beans::PropertyValue > aProps;
197 sal_uInt16 nItemType = 0;
200 aProps =
CreateMenuItemData( sCommandUrl,
"", sLabel, nItemType, aSubMenu,
true,
true );
208 uno::Reference< container::XIndexContainer > xIndexContainer(
m_xIndexAccess, uno::UNO_QUERY_THROW );
209 xIndexContainer->insertByIndex( nPosition,
uno::Any( aProps ) );
214 if(
nType == office::MsoControlType::msoControlPopup )
219 return pNewCommandBarControl;
226 return "ScVbaCommandBarControls";
229uno::Sequence<OUString>
234 "ooo.vba.CommandBarControls"
241class VbaDummyIndexAccess :
public ::cppu::WeakImplHelper< container::XIndexAccess >
244 VbaDummyIndexAccess() {}
246 virtual ::sal_Int32 SAL_CALL getCount( )
override
248 virtual uno::Any SAL_CALL getByIndex( ::sal_Int32 )
override
249 {
throw lang::IndexOutOfBoundsException(); }
251 virtual uno::Type SAL_CALL getElementType( )
override
253 virtual sal_Bool SAL_CALL hasElements( )
override
260 const uno::Reference< XHelperInterface >& xParent,
261 const uno::Reference< uno::XComponentContext >& xContext ) :
274 return uno::Reference< container::XEnumeration >(
new CommandBarControlEnumeration(
this ) );
279 return uno::Any( uno::Reference< XCommandBarControl >() );
285 return uno::Any( uno::Reference< XCommandBarControl >() );
291 return uno::Reference< XCommandBarControl >();
297 return "VbaDummyCommandBarControls";
304 "ooo.vba.CommandBarControls"
css::uno::Reference< css::uno::XComponentContext > mxContext
virtual css::uno::Any createCollectionObject(const css::uno::Any &aSource)=0
css::uno::Reference< css::container::XIndexAccess > m_xIndexAccess
virtual ::sal_Int32 SAL_CALL getCount() override
virtual css::uno::Any SAL_CALL Item(const css::uno::Any &Index, const css::uno::Any &) override
virtual css::uno::Type SAL_CALL getElementType() override
virtual css::uno::Sequence< OUString > getServiceNames() override
virtual css::uno::Any createCollectionObject(const css::uno::Any &aSource) override
static css::uno::Sequence< css::beans::PropertyValue > CreateToolbarItemData(const OUString &sCommandURL, const OUString &sHelpURL, const OUString &sLabel, sal_uInt16 nType, const css::uno::Any &aSubMenu, bool isVisible, sal_Int32 nStyle)
css::uno::Reference< css::container::XIndexAccess > m_xBarSettings
virtual css::uno::Reference< ov::XCommandBarControl > SAL_CALL Add(const css::uno::Any &Type, const css::uno::Any &Id, const css::uno::Any &Parameter, const css::uno::Any &Before, const css::uno::Any &Temporary) override
static css::uno::Sequence< css::beans::PropertyValue > CreateMenuItemData(const OUString &sCommandURL, const OUString &sHelpURL, const OUString &sLabel, sal_uInt16 nType, const css::uno::Any &aSubMenu, bool isVisible, bool isEnabled)
VbaCommandBarHelperRef pCBarHelper
virtual OUString getServiceImplName() override
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
ScVbaCommandBarControls(const css::uno::Reference< ov::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &xContext, const css::uno::Reference< css::container::XIndexAccess > &xIndexAccess, VbaCommandBarHelperRef pHelper, css::uno::Reference< css::container::XIndexAccess > xBarSettings, const OUString &sResourceUrl)
static sal_Int32 findControlByName(const css::uno::Reference< css::container::XIndexAccess > &xIndexAccess, std::u16string_view sName, bool bMenu)
virtual OUString getServiceImplName() override
virtual css::uno::Any SAL_CALL Item(const css::uno::Any &Index, const css::uno::Any &) override
VbaDummyCommandBarControls(const css::uno::Reference< ov::XHelperInterface > &xParent, const css::uno::Reference< css::uno::XComponentContext > &xContext)
virtual css::uno::Type SAL_CALL getElementType() override
virtual css::uno::Reference< ov::XCommandBarControl > SAL_CALL Add(const css::uno::Any &Type, const css::uno::Any &Id, const css::uno::Any &Parameter, const css::uno::Any &Before, const css::uno::Any &Temporary) override
virtual css::uno::Sequence< OUString > getServiceNames() override
virtual css::uno::Reference< css::container::XEnumeration > SAL_CALL createEnumeration() override
virtual css::uno::Any createCollectionObject(const css::uno::Any &aSource) override
css::uno::Type const & get()
std::deque< AttacherIndex_Impl > aIndex
Sequence< OUString > aServiceNames
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
uno::Any getPropertyValue(const uno::Sequence< beans::PropertyValue > &aProp, const OUString &aName)
constexpr OUStringLiteral ITEM_DESCRIPTOR_ISVISIBLE
constexpr OUStringLiteral ITEM_DESCRIPTOR_STYLE
std::shared_ptr< VbaCommandBarHelper > VbaCommandBarHelperRef
constexpr OUStringLiteral ITEM_DESCRIPTOR_COMMANDURL
constexpr OUStringLiteral ITEM_DESCRIPTOR_TYPE
constexpr OUStringLiteral CUSTOM_MENU_STR
constexpr OUStringLiteral ITEM_DESCRIPTOR_HELPURL
constexpr OUStringLiteral ITEM_DESCRIPTOR_ENABLED
constexpr OUStringLiteral ITEM_DESCRIPTOR_LABEL
constexpr OUStringLiteral ITEM_MENUBAR_URL
constexpr OUStringLiteral ITEM_DESCRIPTOR_CONTAINER