xref: /trunk/main/reportdesign/source/ui/inc/ReportSection.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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_REPORTSECTION_HXX
28 #define REPORT_REPORTSECTION_HXX
29 
30 #include <vcl/window.hxx>
31 #include "RptPage.hxx"
32 #include <com/sun/star/beans/NamedValue.hpp>
33 #include <comphelper/propmultiplex.hxx>
34 #include "cppuhelper/basemutex.hxx"
35 #include "ReportDefines.hxx"
36 #include "dlgedfunc.hxx"
37 #include <svtools/transfer.hxx>
38 #include <rtl/ref.hxx>
39 #include <boost/shared_ptr.hpp>
40 #include <memory>
41 
42 namespace rptui
43 {
44     class OReportModel;
45     class OReportPage;
46     class OSectionView;
47     class OSectionWindow;
48 
49     class OReportSection :   public Window
50                         ,   public ::cppu::BaseMutex
51                         ,   public ::comphelper::OPropertyChangeListener
52                         ,   public DropTargetHelper
53     {
54         OReportPage*                        m_pPage;
55         OSectionView*                       m_pView;
56         OSectionWindow*                     m_pParent;
57         ::std::auto_ptr<DlgEdFunc>          m_pFunc;
58         ::boost::shared_ptr<OReportModel>   m_pModel;
59         ::rtl::Reference< comphelper::OPropertyChangeMultiplexer>                           m_pMulti;
60         ::rtl::Reference< comphelper::OPropertyChangeMultiplexer>                           m_pReportListener;
61         ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection >              m_xSection;
62         sal_Int32                   m_nPaintEntranceCount;
63 
64         DlgEdMode                   m_eMode;
65         sal_Bool                        m_bDialogModelChanged;
66         sal_Bool                    m_bInDrag;
67 
68         /** fills the section with all control from the report section
69         */
70         void fill();
71         /** checks all objects if they fit in the new paper width.
72         */
73         void impl_adjustObjectSizePosition(sal_Int32 i_nPaperWidth,sal_Int32 i_nLeftMargin,sal_Int32 i_nRightMargin);
74 
75         OReportSection(OReportSection&);
76         void operator =(OReportSection&);
77     protected:
78         // DropTargetHelper overridables
79         virtual sal_Int8    AcceptDrop( const AcceptDropEvent& _rEvt );
80         virtual sal_Int8    ExecuteDrop( const ExecuteDropEvent& _rEvt );
81 
82         // window overrides
83         virtual void        Paint( const Rectangle& rRect );
84         virtual void        MouseMove( const MouseEvent& rMEvt );
85         virtual void        Command( const CommandEvent& rCEvt );
86         virtual void        Resize();
87 
88         // OPropertyChangeListener
89         virtual void    _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& _rEvent) throw( ::com::sun::star::uno::RuntimeException);
90     public:
91         OReportSection(OSectionWindow* _pParent,const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection >& _xSection);
92         virtual ~OReportSection();
93 
94         // window overrides
95         virtual void        MouseButtonDown( const MouseEvent& rMEvt );
96         virtual void        MouseButtonUp( const MouseEvent& rMEvt );
97 
98         /** copies the current selection in this section
99             @param  _rAllreadyCopiedObjects This is an out/in put param which contains all already copied objects.
100         */
101         void Copy(::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _rAllreadyCopiedObjects);
102 
103         void Copy(::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _rAllreadyCopiedObjects,bool _bEraseAnddNoClone);
104 
105         /** paste a new control in this section
106             @param  _aAllreadyCopiedObjects objects to paste into the section. Only objects are pasted where the name is equal to the section name.
107             @param  _bForce If set to <TRUE/> than the objects will be copied into this section. The name is not compared in this case.
108         */
109         void Paste(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _aAllreadyCopiedObjects,bool _bForce = false);
110 
111         /** Deletes the current selection in this section
112         *
113         */
114         void Delete();
115 
116         /** All objects will be marked.
117         */
118         void SelectAll(const sal_uInt16 _nObjectType);
119 
120         /** makes the grid visible
121         *
122         * \param _bVisible when <TRUE/> the grid is made visible
123         */
124         void SetGridVisible(sal_Bool _bVisible);
125 
126         inline OSectionWindow*      getSectionWindow() const { return m_pParent; }
127         inline OSectionView&        getSectionView() const { return *m_pView; }
128         inline OReportPage*         getPage() const { return m_pPage; }
129         inline ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection > getSection() const { return m_xSection; }
130 
131         void            SetDialogModelChanged( sal_Bool bChanged = sal_True ) { m_bDialogModelChanged = bChanged; }
132         sal_Bool            IsDialogModelChanged() const { return m_bDialogModelChanged; }
133         DlgEdMode       GetMode() const { return m_eMode; }
134         void            SetMode( DlgEdMode m_eMode );
135 
136         /** checks if the keycode is known by the child windows
137             @param  _rCode  the keycode
138             @return <TRUE/> if the keycode is handled otherwise <FALSE/>
139         */
140         sal_Bool        handleKeyEvent(const KeyEvent& _rEvent);
141 
142         /** returns the current control report model or <NULL/>
143         */
144         ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent > getCurrentControlModel() const;
145 
146         /** fills the vector with all selected control models
147             /param  _rSelection The vector will be filled and will not be cleared before.
148         */
149         void fillControlModelSelection(::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >& _rSelection) const;
150 
151         /** creates a default object (custom shape)
152         *
153         * @param _sType
154         */
155         void createDefault(const ::rtl::OUString& _sType);
156 
157         /** creates a new default custom shape
158         *
159         * \param _sType
160         * \param _pObj
161         */
162         void createDefault(const ::rtl::OUString& _sType,SdrObject* _pObj);
163         void stopScrollTimer();
164 
165         /** deactivate the currect active ole object if any
166         */
167         void    deactivateOle();
168 
169         /** returns true when an ole object is currently active
170         */
171         bool isUiActive() const;
172     };
173 //==================================================================
174 }   //rptui
175 //==================================================================
176 #endif // REPORT_REPORTSECTION_HXX
177 
178