24#include <com/sun/star/form/XSubmit.hpp>
25#include <com/sun/star/frame/XDispatch.hpp>
26#include <com/sun/star/frame/XDispatchProvider.hpp>
27#include <com/sun/star/frame/FrameSearchFlag.hpp>
28#include <com/sun/star/frame/XController.hpp>
29#include <com/sun/star/frame/XFrame.hpp>
30#include <com/sun/star/awt/ActionEvent.hpp>
31#include <com/sun/star/graphic/XGraphic.hpp>
32#include <com/sun/star/graphic/GraphicObject.hpp>
33#include <com/sun/star/util/VetoException.hpp>
41#include <osl/mutex.hxx>
50#define LOCAL_URL_PREFIX '#'
68 using namespace ::com::sun::star::form::submission;
70 using ::com::sun::star::awt::MouseEvent;
71 using ::com::sun::star::task::XInteractionHandler;
79 static Sequence<Type>
const aTypes =
87 ,m_aSubmissionVetoListeners(
m_aMutex )
88 ,m_aFeatureInterception( _rxFactory )
89 ,m_aApproveActionListeners(
m_aMutex )
97 if (!OComponentHelper::rBHelper.bDisposed)
109 if (!aReturn.hasValue())
117 const Reference<XApproveActionListener>& l)
124 const Reference<XApproveActionListener>& l)
145 EventObject
aEvent(
static_cast< XWeak*
>(
this ) );
152 ::osl::MutexGuard aGuard(
m_aMutex );
173 bool bCancelled =
false;
174 EventObject
aEvent(
static_cast< XWeak*
>(
this ) );
191 if( bNotifyListener )
199 Reference<XPropertySet> xSet;
200 Reference< XInterface > xModelsParent;
201 FormButtonType eButtonType = FormButtonType_PUSH;
206 Reference<XFormComponent> xComp(
getModel(), UNO_QUERY);
210 xModelsParent = xComp->getParent();
211 if (!xModelsParent.is())
215 xSet.set(xComp, css::uno::UNO_QUERY);
223 case FormButtonType_RESET:
226 Reference<XReset> xReset(xModelsParent, UNO_QUERY);
234 case FormButtonType_SUBMIT:
242 catch(
const Exception& )
249 case FormButtonType_URL:
291 bool bDispatchUrlInternal =
false;
293 if ( bDispatchUrlInternal )
297 OUString aTargetFrame;
300 Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY_THROW)->queryDispatch( aURL, aTargetFrame,
301 FrameSearchFlag::SELF | FrameSearchFlag::PARENT |
302 FrameSearchFlag::SIBLINGS | FrameSearchFlag::CREATE );
307 xDisp->dispatch( aURL, aArgs );
313 Reference< XDispatch > xDisp = Reference< XDispatchProvider > (xFrame,UNO_QUERY_THROW)->queryDispatch(aHyperLink, OUString() , 0);
317 Sequence<PropertyValue> aProps{
324 xDisp->dispatch( aHyperLink, aProps );
365 aSupported.realloc( aSupported.getLength() + 1 );
367 OUString* pArray = aSupported.getArray();
382 Reference< submission::XSubmissionSupplier > xSubmissionSupp(
getModel(), UNO_QUERY );
383 Reference< XSubmission > xSubmission;
384 if ( xSubmissionSupp.is() )
385 xSubmission = xSubmissionSupp->getSubmission();
387 if ( xSubmission.is() )
389 if ( !_rxHandler.is() )
390 xSubmission->submit();
392 xSubmission->submitWithInteraction( _rxHandler );
397 Reference< XChild > xChild(
getModel(), UNO_QUERY );
398 Reference< XSubmit > xParentSubmission;
400 xParentSubmission.set(xChild->getParent(), css::uno::UNO_QUERY);
401 if ( xParentSubmission.is() )
402 xParentSubmission->submit(
this, _rEvent );
405 catch(
const VetoException& )
410 catch(
const RuntimeException& )
415 catch(
const WrappedTargetException& )
423 TOOLS_WARN_EXCEPTION(
"forms.component",
"OClickableImageBaseControl::implSubmit: caught an unknown exception!" );
424 throw WrappedTargetException( OUString(), *
this, anyEx );
442 const OUString& rDefault )
443 :
OControlModel( _rxFactory, _rUnoControlModelTypeName, rDefault )
445 ,m_bDispatchUrlInternal(false)
446 ,m_bProdStarted(false)
454 :OControlModel( _pOriginal, _rxFactory )
456 ,m_xGraphicObject( _pOriginal->m_xGraphicObject )
457 ,m_bDispatchUrlInternal(false)
458 ,m_bProdStarted( false )
489 if ( m_xAggregateSet.is() )
501 if (!OComponentHelper::rBHelper.bDisposed)
506 DBG_ASSERT(
m_pMedium ==
nullptr,
"OClickableImageBaseModel::~OClickableImageBaseModel : leaving a memory leak ...");
549 aSupported.realloc( aSupported.getLength() + 1 );
551 OUString* pArray = aSupported.getArray();
577 || !aReturn.hasValue()
604 DBG_ASSERT(rValue.has<FormButtonType>(),
"OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" );
609 DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING,
"OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" );
614 DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_STRING,
"OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" );
619 DBG_ASSERT(rValue.getValueType().getTypeClass() == TypeClass_BOOLEAN,
"OClickableImageBaseModel::setFastPropertyValue_NoBroadcast : invalid type !" );
659 if ( ::svt::GraphicAccess::isSupportedURL( sURL ) )
688 Reference< XModel >
xModel;
689 css::uno::Reference<css::uno::XInterface> xIfc( *
this );
690 while( !
xModel.is() && xIfc.is() )
692 Reference<XChild> xChild( xIfc, UNO_QUERY );
693 xIfc = xChild->getParent();
694 xModel.set(xIfc, css::uno::UNO_QUERY);
707 Reference< XModel > xTestModel = pTestObjSh->
GetModel();
708 if( xTestModel ==
xModel )
714 while( !pObjSh && pTestObjSh )
716 Reference< XModel > xTestModel = pTestObjSh->
GetModel();
717 if( xTestModel ==
xModel )
743 if (!rURL.isEmpty() && !::svt::GraphicAccess::isSupportedURL( rURL ) )
765 if ( ::svt::GraphicAccess::isSupportedURL( rURL ) )
783 ::osl::MutexGuard aGuard(
m_aMutex );
811 const Reference< XGraphic > xGraphic( i_pGraphic !=
nullptr ?
Graphic(i_pGraphic->GetBitmapEx()).
GetXGraphic() :
nullptr );
812 if ( !xGraphic.is() )
814 m_xGraphicObject.clear();
818 m_xGraphicObject = css::graphic::GraphicObject::create(
m_xContext );
819 m_xGraphicObject->setGraphic( xGraphic );
827 const EventObject* pEvt,
828 const Reference<XControl>&,
Reference< XComponentContext > m_xContext
css::uno::Reference< css::graphic::XGraphic > GetXGraphic() const
INetProtocol GetProtocol() const
void SAL_CALL removeConsumer(const css::uno::Reference< css::awt::XImageConsumer > &rxConsumer) override
void SAL_CALL startProduction() override
void SAL_CALL addConsumer(const css::uno::Reference< css::awt::XImageConsumer > &rxConsumer) override
void SetImage(const OUString &rPath)
SfxFrame * GetLoadTargetFrame() const
static SAL_WARN_UNUSED_RESULT SfxObjectShell * GetNext(const SfxObjectShell &rPrev, const std::function< bool(const SfxObjectShell *)> &isObjectShell=nullptr, bool bOnlyVisible=true)
SfxMedium * GetMedium() const
css::uno::Reference< css::frame::XModel3 > GetModel() const
static SAL_WARN_UNUSED_RESULT SfxObjectShell * GetFirst(const std::function< bool(const SfxObjectShell *)> &isObjectShell=nullptr, bool bOnlyVisible=true)
static SAL_WARN_UNUSED_RESULT SfxObjectShell * Current()
sal_Int32 addInterface(const css::uno::Reference< ListenerT > &rxIFace)
void disposeAndClear(const css::lang::EventObject &rEvt)
sal_Int32 removeInterface(const css::uno::Reference< ListenerT > &rxIFace)
void notifyEach(void(SAL_CALL ListenerT::*NotificationMethod)(const EventT &), const EventT &Event)
bool hasMoreElements() const
css::uno::Reference< ListenerT > const & next()
friend friend class OPropertyChangeMultiplexer
virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes() SAL_OVERRIDE
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) SAL_OVERRIDE
virtual void SAL_CALL acquire() SAL_NOEXCEPT SAL_OVERRIDE
virtual void SAL_CALL dispose() SAL_OVERRIDE
oslInterlockedCount m_refCount
void releaseDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor > &Interceptor)
const UrlTransformer & getTransformer() const
retrieves our URL transformer, so our clients may use it, too
void registerDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor > &Interceptor)
css::uno::Reference< css::frame::XDispatch > queryDispatch(const css::util::URL &_rURL)
queries the interceptor chain for the given dispatch, with a blank target frame and no frame search f...
void implSubmit(const css::awt::MouseEvent &_rEvent, const css::uno::Reference< css::task::XInteractionHandler > &aHandler)
virtual void SAL_CALL addSubmissionVetoListener(const css::uno::Reference< css::form::submission::XSubmissionVetoListener > &listener) override
OUString m_aActionCommand
OClickableImageBaseControl(const css::uno::Reference< css::uno::XComponentContext > &_rxFactory, const OUString &_aService)
virtual void SAL_CALL submit() override
virtual void SAL_CALL removeSubmissionVetoListener(const css::uno::Reference< css::form::submission::XSubmissionVetoListener > &listener) override
::comphelper::OInterfaceContainerHelper3< css::form::submission::XSubmissionVetoListener > m_aSubmissionVetoListeners
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
virtual void SAL_CALL addApproveActionListener(const css::uno::Reference< css::form::XApproveActionListener > &_rxListener) override
bool approveAction()
approves the action by calling the approve listeners
virtual void SAL_CALL releaseDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor > &Interceptor) override
OImageProducerThread_Impl * getImageProducerThread()
retrieves (and if necessary creates) the image producer thread.
virtual void SAL_CALL submitWithInteraction(const css::uno::Reference< css::task::XInteractionHandler > &aHandler) override
virtual void actionPerformed_Impl(bool bNotifyListener, const css::awt::MouseEvent &rEvt)
friend class OImageProducerThread_Impl
virtual ~OClickableImageBaseControl() override
virtual void SAL_CALL removeApproveActionListener(const css::uno::Reference< css::form::XApproveActionListener > &_rxListener) override
rtl::Reference< OImageProducerThread_Impl > m_pThread
::comphelper::OInterfaceContainerHelper3< css::awt::XActionListener > m_aActionListeners
::comphelper::OInterfaceContainerHelper3< css::form::XApproveActionListener > m_aApproveActionListeners
css::uno::Sequence< css::uno::Type > _getTypes() override
virtual void SAL_CALL registerDispatchProviderInterceptor(const css::uno::Reference< css::frame::XDispatchProviderInterceptor > &Interceptor) override
virtual void SAL_CALL disposing() override
ControlFeatureInterception m_aFeatureInterception
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const override
virtual css::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const override
ImageProducer * GetImageProducer()
virtual void SAL_CALL startProduction() override
std::unique_ptr< SfxMedium > m_pMedium
void SetURL(const OUString &rURL)
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue) override
virtual void SAL_CALL removeConsumer(const css::uno::Reference< css::awt::XImageConsumer > &xConsumer) override
css::form::FormButtonType m_eButtonType
virtual void SAL_CALL setSubmission(const css::uno::Reference< css::form::submission::XSubmission > &_submission) override
virtual void SAL_CALL addConsumer(const css::uno::Reference< css::awt::XImageConsumer > &xConsumer) override
virtual void SAL_CALL disposing() override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
void implInitializeImageURL()
SfxObjectShell * GetObjectShell()
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &rConvertedValue, css::uno::Any &rOldValue, sal_Int32 nHandle, const css::uno::Any &rValue) override
virtual css::uno::Reference< css::form::submission::XSubmission > SAL_CALL getSubmission() override
bool m_bDispatchUrlInternal
rtl::Reference< ImageProducer > m_xProducer
css::uno::Reference< css::form::submission::XSubmission > m_xSubmissionDelegate
virtual void _propertyChanged(const css::beans::PropertyChangeEvent &) override
OClickableImageBaseModel(const css::uno::Reference< css::uno::XComponentContext > &_rxFactory, const OUString &_rUnoControlModelTypeName, const OUString &_rDefault)
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
css::uno::Sequence< css::uno::Type > _getTypes() override
virtual ~OClickableImageBaseModel() override
virtual css::uno::Sequence< css::uno::Type > _getTypes()
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL disposing() override
virtual css::uno::Any getPropertyDefaultByHandle(sal_Int32 nHandle) const override
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue) override
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &_rConvertedValue, css::uno::Any &_rOldValue, sal_Int32 _nHandle, const css::uno::Any &_rValue) override
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &_rType) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual css::uno::Reference< css::awt::XControlModel > SAL_CALL getModel() override
virtual void SAL_CALL disposing() override
virtual css::uno::Sequence< css::uno::Type > _getTypes()
virtual void SAL_CALL dispose() override
virtual void processEvent(::cppu::OComponentHelper *pCompImpl, const css::lang::EventObject *, const css::uno::Reference< css::awt::XControl > &, bool) override
#define DBG_ASSERT(sCon, aError)
#define TOOLS_WARN_EXCEPTION(area, stream)
constexpr OUStringLiteral PROPERTY_TARGET_URL
constexpr OUStringLiteral PROPERTY_DISPATCHURLINTERNAL
constexpr OUStringLiteral PROPERTY_TARGET_FRAME
constexpr OUStringLiteral PROPERTY_IMAGE_URL
constexpr OUStringLiteral PROPERTY_BUTTONTYPE
#define LINK(Instance, Class, Member)
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &... rSn)
bool tryPropertyValue(Any &_rConvertedValue, Any &_rOldValue, const Any &_rValueToSet, const Any &_rCurrentValue, const Type &_rExpectedType)
std::enable_if< std::is_enum< ENUMTYPE >::value, bool >::type tryPropertyValueEnum(css::uno::Any &_rConvertedValue, css::uno::Any &_rOldValue, const css::uno::Any &_rValueToSet, const ENUMTYPE &_rCurrentValue)
OUString getString(const Any &_rAny)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
Any SAL_CALL getCaughtException()
ListBox is a bit confusing / different from other form components, so here are a few notes:
IMPL_LINK_NOARG(OButtonControl, OnClick, void *, void)
IMPL_LINK(OClickableImageBaseModel, OnImageImportDone, Graphic *, i_pGraphic, void)
css::uno::Reference< css::frame::XModel > getXModel(const css::uno::Reference< css::uno::XInterface > &_rxComponent)
bool getPropertyValue(ValueType &rValue, css::uno::Reference< css::beans::XPropertySet > const &xPropSet, OUString const &propName)
#define PROPERTY_ID_DISPATCHURLINTERNAL
#define PROPERTY_ID_TARGET_FRAME
#define PROPERTY_ID_TARGET_URL
#define PROPERTY_ID_BUTTONTYPE
#define PROPERTY_ID_IMAGE_URL
constexpr OUStringLiteral FRM_SUN_COMPONENT_SUBMITBUTTON
constexpr OUStringLiteral FRM_SUN_CONTROL_SUBMITBUTTON
Reference< XController > xController
Reference< XFrame > xFrame
Reference< XModel > xModel