1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _REPORT_RPTUIOBJ_HXX 28 #define _REPORT_RPTUIOBJ_HXX 29 30 #include "dllapi.h" 31 #include <svx/svdoole2.hxx> 32 #include <svx/svdouno.hxx> 33 34 35 #include <comphelper/processfactory.hxx> 36 #include <com/sun/star/beans/XPropertyChangeListener.hpp> 37 #include <com/sun/star/container/XContainerListener.hpp> 38 #include <com/sun/star/report/XReportComponent.hpp> 39 #include <com/sun/star/report/XSection.hpp> 40 #include <svx/svdocirc.hxx> 41 #include <svx/svdogrp.hxx> 42 #include <svx/svdoashp.hxx> 43 #include <comphelper/stl_types.hxx> 44 #include <comphelper/implementationreference.hxx> 45 46 47 namespace rptui 48 { 49 typedef ::std::multimap< sal_Int16, ::rtl::OUString, ::std::less< sal_Int16 > > IndexToNameMap; 50 enum DlgEdHintKind 51 { 52 RPTUI_HINT_UNKNOWN, 53 RPTUI_HINT_WINDOWSCROLLED, 54 RPTUI_HINT_LAYERCHANGED, 55 RPTUI_HINT_OBJORDERCHANGED, 56 RPTUI_HINT_SELECTIONCHANGED 57 }; 58 59 class OUnoObject; 60 class REPORTDESIGN_DLLPUBLIC DlgEdHint: public SfxHint 61 { 62 private: 63 DlgEdHintKind eHintKind; 64 OUnoObject* pDlgEdObj; 65 66 DlgEdHint(DlgEdHint&); 67 void operator =(DlgEdHint&); 68 public: 69 TYPEINFO(); 70 DlgEdHint( DlgEdHintKind eHint ); 71 virtual ~DlgEdHint(); 72 73 inline DlgEdHintKind GetKind() const { return eHintKind; } 74 inline OUnoObject* GetObject() const { return pDlgEdObj; } 75 }; 76 77 78 class OReportPage; 79 class OPropertyMediator; 80 81 class REPORTDESIGN_DLLPUBLIC OObjectBase 82 { 83 public: 84 typedef ::comphelper::ImplementationReference<OPropertyMediator,::com::sun::star::beans::XPropertyChangeListener> TMediator; 85 86 protected: 87 mutable TMediator m_xMediator; 88 mutable ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener> m_xPropertyChangeListener; 89 //mutable ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener> 90 mutable ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent> m_xReportComponent; 91 ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener> m_xContainerListener; 92 ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection> m_xSection; 93 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > m_xKeepShapeAlive; 94 ::rtl::OUString m_sComponentName; 95 sal_Bool m_bIsListening; 96 97 OObjectBase(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent); 98 OObjectBase(const ::rtl::OUString& _sComponentName); 99 100 virtual ~OObjectBase(); 101 102 inline sal_Bool isListening() const { return m_bIsListening; } 103 104 void SetPropsFromRect(const Rectangle& _rRect); 105 106 virtual void SetSnapRectImpl(const Rectangle& _rRect) = 0; 107 virtual SdrPage* GetImplPage() const = 0; 108 virtual void SetObjectItemHelper(const SfxPoolItem& rItem); 109 110 /** called by instances of derived classes to implement their overloading of getUnoShape 111 */ 112 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > 113 getUnoShapeOf( SdrObject& _rSdrObject ); 114 115 private: 116 static void ensureSdrObjectOwnership( 117 const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxShape ); 118 119 public: 120 void StartListening(); 121 void EndListening(sal_Bool bRemoveListener = sal_True); 122 // PropertyChangeListener 123 virtual void _propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw(::com::sun::star::uno::RuntimeException); 124 virtual void initializeOle() {} 125 126 sal_Bool supportsService( const ::rtl::OUString& _sServiceName ) const; 127 128 ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent> getReportComponent() const; 129 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> getAwtComponent(); 130 inline void setOldParent(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection) { m_xSection = _xSection; } 131 inline ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection> getOldParent() const { return m_xSection;} 132 ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection> getSection() const; 133 inline const ::rtl::OUString getServiceName() const { return m_sComponentName; } 134 135 /** releases the reference to our UNO shape (m_xKeepShapeAlive) 136 */ 137 void releaseUnoShape() { m_xKeepShapeAlive.clear(); } 138 139 static SdrObject* createObject(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent); 140 static sal_uInt16 getObjectType(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent); 141 }; 142 //============================================================================ 143 // OCustomShape 144 //============================================================================ 145 class REPORTDESIGN_DLLPUBLIC OCustomShape: public SdrObjCustomShape , public OObjectBase 146 { 147 friend class OReportPage; 148 friend class DlgEdFactory; 149 150 public: 151 static OCustomShape* Create( const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent ) 152 { 153 return new OCustomShape( _xComponent ); 154 } 155 156 protected: 157 OCustomShape(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent); 158 OCustomShape(const ::rtl::OUString& _sComponentName); 159 160 virtual void NbcMove( const Size& rSize ); 161 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); 162 virtual void NbcSetLogicRect(const Rectangle& rRect); 163 virtual FASTBOOL EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); 164 165 virtual void SetSnapRectImpl(const Rectangle& _rRect); 166 virtual SdrPage* GetImplPage() const; 167 void SetObjectItemHelper(const SfxPoolItem& rItem); 168 169 public: 170 TYPEINFO(); 171 172 virtual ~OCustomShape(); 173 174 virtual sal_Int32 GetStep() const; 175 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> getAwtComponent(); 176 177 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape(); 178 virtual sal_uInt16 GetObjIdentifier() const; 179 virtual sal_uInt32 GetObjInventor() const; 180 }; 181 182 //============================================================================ 183 // OOle2Obj 184 //============================================================================ 185 class REPORTDESIGN_DLLPUBLIC OOle2Obj: public SdrOle2Obj , public OObjectBase 186 { 187 friend class OReportPage; 188 friend class DlgEdFactory; 189 190 sal_uInt16 m_nType; 191 bool m_bOnlyOnce; 192 void impl_createDataProvider_nothrow( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel); 193 public: 194 static OOle2Obj* Create( const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent,sal_uInt16 _nType ) 195 { 196 return new OOle2Obj( _xComponent,_nType ); 197 } 198 protected: 199 OOle2Obj(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent,sal_uInt16 _nType); 200 OOle2Obj(const ::rtl::OUString& _sComponentName,sal_uInt16 _nType); 201 202 203 virtual void NbcMove( const Size& rSize ); 204 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); 205 virtual void NbcSetLogicRect(const Rectangle& rRect); 206 virtual FASTBOOL EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); 207 208 virtual void SetSnapRectImpl(const Rectangle& _rRect); 209 virtual SdrPage* GetImplPage() const; 210 211 public: 212 TYPEINFO(); 213 214 virtual ~OOle2Obj(); 215 216 virtual sal_Int32 GetStep() const; 217 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> getAwtComponent(); 218 219 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape(); 220 virtual sal_uInt16 GetObjIdentifier() const; 221 virtual sal_uInt32 GetObjInventor() const; 222 // Clone() soll eine komplette Kopie des Objektes erzeugen. 223 virtual SdrObject* Clone() const; 224 virtual void initializeOle(); 225 226 void initializeChart( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel>& _xModel); 227 }; 228 229 //============================================================================ 230 // OUnoObject 231 //============================================================================ 232 class REPORTDESIGN_DLLPUBLIC OUnoObject: public SdrUnoObj , public OObjectBase 233 { 234 friend class OReportPage; 235 friend class OObjectBase; 236 friend class DlgEdFactory; 237 238 sal_uInt16 m_nObjectType; 239 protected: 240 OUnoObject(const ::rtl::OUString& _sComponentName 241 ,const ::rtl::OUString& rModelName 242 ,sal_uInt16 _nObjectType); 243 OUnoObject( const ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent>& _xComponent 244 ,const ::rtl::OUString& rModelName 245 ,sal_uInt16 _nObjectType); 246 247 virtual ~OUnoObject(); 248 249 virtual void NbcMove( const Size& rSize ); 250 virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact); 251 virtual void NbcSetLogicRect(const Rectangle& rRect); 252 virtual FASTBOOL EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd); 253 254 virtual void SetSnapRectImpl(const Rectangle& _rRect); 255 virtual SdrPage* GetImplPage() const; 256 257 public: 258 TYPEINFO(); 259 260 virtual sal_Int32 GetStep() const; 261 virtual void _propertyChange( const ::com::sun::star::beans::PropertyChangeEvent& evt ) throw(::com::sun::star::uno::RuntimeException); 262 263 /** creates the m_xMediator when it doesn't already exist. 264 @param _bReverse when set to <TRUE/> then the properties from the uno control will be copied into report control 265 */ 266 void CreateMediator(sal_Bool _bReverse = sal_False); 267 268 virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet> getAwtComponent(); 269 270 static ::rtl::OUString GetDefaultName(const OUnoObject* _pObj); 271 272 virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > getUnoShape(); 273 virtual sal_uInt16 GetObjIdentifier() const; 274 virtual sal_uInt32 GetObjInventor() const; 275 virtual SdrObject* Clone() const; 276 277 private: 278 void impl_setReportComponent_nothrow(); 279 void impl_initializeModel_nothrow(); 280 }; 281 282 //============================================================================ 283 } // rptui 284 //============================================================================ 285 #endif // _REPORT_RPTUIOBJ_HXX 286 287