1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_REPORTDESIGN_INC_RPTOBJECT_HXX
#define INCLUDED_REPORTDESIGN_INC_RPTOBJECT_HXX
#include "dllapi.h"
#include <svx/svdoole2.hxx>
#include <svx/svdouno.hxx>
#include <com/sun/star/beans/XPropertyChangeListener.hpp>
#include <com/sun/star/report/XReportComponent.hpp>
#include <com/sun/star/report/XSection.hpp>
#include <svx/svdoashp.hxx>
#include <map>
namespace rptui
{
typedef ::std::multimap< sal_Int16, OUString > IndexToNameMap;
enum DlgEdHintKind
{
RPTUI_HINT_WINDOWSCROLLED,
RPTUI_HINT_SELECTIONCHANGED
};
class OUnoObject;
class REPORTDESIGN_DLLPUBLIC DlgEdHint final : public SfxHint
{
private:
DlgEdHintKind eHintKind;
DlgEdHint(DlgEdHint const &) = delete;
void operator =(DlgEdHint const &) = delete;
public:
DlgEdHint( DlgEdHintKind eHint );
virtual ~DlgEdHint() override;
DlgEdHintKind GetKind() const { return eHintKind; }
};
class OReportPage;
class OPropertyMediator;
class REPORTDESIGN_DLLPUBLIC OObjectBase
{
protected:
mutable rtl::Reference<OPropertyMediator> m_xMediator;
mutable css::uno::Reference< css::beans::XPropertyChangeListener> m_xPropertyChangeListener;
mutable css::uno::Reference< css::report::XReportComponent> m_xReportComponent;
css::uno::Reference< css::uno::XInterface > m_xKeepShapeAlive;
OUString m_sComponentName;
bool m_bIsListening;
OObjectBase(const css::uno::Reference< css::report::XReportComponent>& _xComponent);
OObjectBase(const OUString& _sComponentName);
virtual ~OObjectBase();
bool isListening() const { return m_bIsListening; }
void SetPropsFromRect(const tools::Rectangle& _rRect);
virtual SdrPage* GetImplPage() const = 0;
/** called by instances of derived classes to implement their overriding of getUnoShape
*/
css::uno::Reference< css::uno::XInterface >
getUnoShapeOf( SdrObject& _rSdrObject );
private:
static void ensureSdrObjectOwnership(
const css::uno::Reference< css::uno::XInterface >& _rxShape );
public:
OObjectBase(const OObjectBase&) = delete;
OObjectBase& operator=(const OObjectBase&) = delete;
void StartListening();
void EndListening();
// PropertyChangeListener
/// @throws css::uno::RuntimeException
virtual void _propertyChange( const css::beans::PropertyChangeEvent& evt );
virtual void initializeOle() {}
bool supportsService( const OUString& _sServiceName ) const;
const css::uno::Reference< css::report::XReportComponent>& getReportComponent() const { return m_xReportComponent;}
virtual css::uno::Reference< css::beans::XPropertySet> getAwtComponent();
css::uno::Reference< css::report::XSection> getSection() const;
const OUString& getServiceName() const { return m_sComponentName; }
/** releases the reference to our UNO shape (m_xKeepShapeAlive)
*/
void releaseUnoShape() { m_xKeepShapeAlive.clear(); }
static SdrObject* createObject(
SdrModel& rTargetModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent);
static sal_uInt16 getObjectType(const css::uno::Reference< css::report::XReportComponent>& _xComponent);
};
// OCustomShape
class REPORTDESIGN_DLLPUBLIC OCustomShape final : public SdrObjCustomShape , public OObjectBase
{
friend class OReportPage;
friend class DlgEdFactory;
private:
// protected destructor - due to final, make private
virtual ~OCustomShape() override;
public:
static OCustomShape* Create(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent)
{
return new OCustomShape(rSdrModel, _xComponent );
}
virtual css::uno::Reference< css::beans::XPropertySet> getAwtComponent() override;
virtual css::uno::Reference< css::uno::XInterface > getUnoShape() override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override;
private:
virtual void impl_setUnoShape( const css::uno::Reference< css::uno::XInterface >& rxUnoShape ) override;
OCustomShape(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent);
OCustomShape(
SdrModel& rSdrModel,
const OUString& _sComponentName);
virtual void NbcMove( const Size& rSize ) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override;
virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override;
virtual SdrPage* GetImplPage() const override;
};
// OOle2Obj
class REPORTDESIGN_DLLPUBLIC OOle2Obj final : public SdrOle2Obj , public OObjectBase
{
friend class OReportPage;
friend class DlgEdFactory;
private:
// protected destructor - due to final, make private
virtual ~OOle2Obj() override;
public:
static OOle2Obj* Create(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent,
sal_uInt16 _nType)
{
return new OOle2Obj(rSdrModel, _xComponent, _nType);
}
virtual css::uno::Reference< css::beans::XPropertySet> getAwtComponent() override;
virtual css::uno::Reference< css::uno::XInterface > getUnoShape() override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override;
// Clone() should make a complete copy of the object.
virtual OOle2Obj* CloneSdrObject(SdrModel& rTargetModel) const override;
virtual void initializeOle() override;
OOle2Obj& operator=(const OOle2Obj& rObj);
void initializeChart( const css::uno::Reference< css::frame::XModel>& _xModel);
private:
OOle2Obj(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent,
sal_uInt16 _nType);
OOle2Obj(
SdrModel& rSdrModel,
const OUString& _sComponentName,
sal_uInt16 _nType);
virtual void NbcMove( const Size& rSize ) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override;
virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override;
virtual SdrPage* GetImplPage() const override;
void impl_createDataProvider_nothrow( const css::uno::Reference< css::frame::XModel>& _xModel);
virtual void impl_setUnoShape( const css::uno::Reference< css::uno::XInterface >& rxUnoShape ) override;
sal_uInt16 m_nType;
bool m_bOnlyOnce;
};
// OUnoObject
class REPORTDESIGN_DLLPUBLIC OUnoObject: public SdrUnoObj , public OObjectBase
{
friend class OReportPage;
friend class OObjectBase;
friend class DlgEdFactory;
sal_uInt16 m_nObjectType;
// tdf#118730 remember if this object was created interactively (due to ::EndCreate being called)
bool m_bSetDefaultLabel;
protected:
OUnoObject(SdrModel& rSdrModel,
const OUString& _sComponentName,
const OUString& rModelName,
sal_uInt16 _nObjectType);
OUnoObject(
SdrModel& rSdrModel,
const css::uno::Reference< css::report::XReportComponent>& _xComponent,
const OUString& rModelName,
sal_uInt16 _nObjectType);
// protected destructor
virtual ~OUnoObject() override;
virtual void NbcMove( const Size& rSize ) override;
virtual void NbcResize(const Point& rRef, const Fraction& xFact, const Fraction& yFact) override;
virtual void NbcSetLogicRect(const tools::Rectangle& rRect) override;
virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd) override;
virtual SdrPage* GetImplPage() const override;
public:
virtual void _propertyChange( const css::beans::PropertyChangeEvent& evt ) override;
/** creates the m_xMediator when it doesn't already exist.
@param _bReverse when set to <TRUE/> then the properties from the uno control will be copied into report control
*/
void CreateMediator(bool _bReverse = false);
virtual css::uno::Reference< css::beans::XPropertySet> getAwtComponent() override;
static OUString GetDefaultName(const OUnoObject* _pObj);
virtual css::uno::Reference< css::uno::XInterface > getUnoShape() override;
virtual sal_uInt16 GetObjIdentifier() const override;
virtual SdrInventor GetObjInventor() const override;
virtual OUnoObject* CloneSdrObject(SdrModel& rTargetModel) const override;
OUnoObject& operator=(const OUnoObject& rObj);
private:
virtual void impl_setUnoShape( const css::uno::Reference< css::uno::XInterface >& rxUnoShape ) override;
void impl_initializeModel_nothrow();
};
} // rptui
#endif // INCLUDED_REPORTDESIGN_INC_RPTOBJECT_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|