1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski #ifndef REPORT_REPORTSECTION_HXX
24*b1cdbd2cSJim Jagielski #define REPORT_REPORTSECTION_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <vcl/window.hxx>
27*b1cdbd2cSJim Jagielski #include "RptPage.hxx"
28*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/NamedValue.hpp>
29*b1cdbd2cSJim Jagielski #include <comphelper/propmultiplex.hxx>
30*b1cdbd2cSJim Jagielski #include "cppuhelper/basemutex.hxx"
31*b1cdbd2cSJim Jagielski #include "ReportDefines.hxx"
32*b1cdbd2cSJim Jagielski #include "dlgedfunc.hxx"
33*b1cdbd2cSJim Jagielski #include <svtools/transfer.hxx>
34*b1cdbd2cSJim Jagielski #include <rtl/ref.hxx>
35*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp>
36*b1cdbd2cSJim Jagielski #include <memory>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski namespace rptui
39*b1cdbd2cSJim Jagielski {
40*b1cdbd2cSJim Jagielski 	class OReportModel;
41*b1cdbd2cSJim Jagielski 	class OReportPage;
42*b1cdbd2cSJim Jagielski 	class OSectionView;
43*b1cdbd2cSJim Jagielski 	class OSectionWindow;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 	class OReportSection :	 public Window
46*b1cdbd2cSJim Jagielski 						,	public ::cppu::BaseMutex
47*b1cdbd2cSJim Jagielski 						,	public ::comphelper::OPropertyChangeListener
48*b1cdbd2cSJim Jagielski                         ,   public DropTargetHelper
49*b1cdbd2cSJim Jagielski 	{
50*b1cdbd2cSJim Jagielski 		OReportPage*				        m_pPage;
51*b1cdbd2cSJim Jagielski 		OSectionView*				        m_pView;
52*b1cdbd2cSJim Jagielski 		OSectionWindow*				        m_pParent;
53*b1cdbd2cSJim Jagielski 		::std::auto_ptr<DlgEdFunc>	        m_pFunc;
54*b1cdbd2cSJim Jagielski         ::boost::shared_ptr<OReportModel>   m_pModel;
55*b1cdbd2cSJim Jagielski 		::rtl::Reference< comphelper::OPropertyChangeMultiplexer>				            m_pMulti;
56*b1cdbd2cSJim Jagielski 		::rtl::Reference< comphelper::OPropertyChangeMultiplexer>				            m_pReportListener;
57*b1cdbd2cSJim Jagielski         ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection >              m_xSection;
58*b1cdbd2cSJim Jagielski         sal_Int32                   m_nPaintEntranceCount;
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski 		DlgEdMode					m_eMode;
61*b1cdbd2cSJim Jagielski 		sal_Bool						m_bDialogModelChanged;
62*b1cdbd2cSJim Jagielski 		sal_Bool					m_bInDrag;
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 		/** fills the section with all control from the report section
65*b1cdbd2cSJim Jagielski 		*/
66*b1cdbd2cSJim Jagielski 		void fill();
67*b1cdbd2cSJim Jagielski         /** checks all objects if they fit in the new paper width.
68*b1cdbd2cSJim Jagielski         */
69*b1cdbd2cSJim Jagielski         void impl_adjustObjectSizePosition(sal_Int32 i_nPaperWidth,sal_Int32 i_nLeftMargin,sal_Int32 i_nRightMargin);
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski         OReportSection(OReportSection&);
72*b1cdbd2cSJim Jagielski         void operator =(OReportSection&);
73*b1cdbd2cSJim Jagielski     protected:
74*b1cdbd2cSJim Jagielski         // DropTargetHelper overridables
75*b1cdbd2cSJim Jagielski 		virtual sal_Int8	AcceptDrop( const AcceptDropEvent& _rEvt );
76*b1cdbd2cSJim Jagielski 		virtual sal_Int8	ExecuteDrop( const ExecuteDropEvent& _rEvt );
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 		// window overrides
79*b1cdbd2cSJim Jagielski 		virtual void        Paint( const Rectangle& rRect );
80*b1cdbd2cSJim Jagielski 		virtual void 		MouseMove( const MouseEvent& rMEvt );
81*b1cdbd2cSJim Jagielski 		virtual void		Command( const CommandEvent& rCEvt );
82*b1cdbd2cSJim Jagielski 		virtual void		Resize();
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 		// OPropertyChangeListener
85*b1cdbd2cSJim Jagielski 		virtual void	_propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& _rEvent) throw( ::com::sun::star::uno::RuntimeException);
86*b1cdbd2cSJim Jagielski 	public:
87*b1cdbd2cSJim Jagielski 		OReportSection(OSectionWindow* _pParent,const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection >& _xSection);
88*b1cdbd2cSJim Jagielski 		virtual ~OReportSection();
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski         // window overrides
91*b1cdbd2cSJim Jagielski 		virtual void 		MouseButtonDown( const MouseEvent& rMEvt );
92*b1cdbd2cSJim Jagielski         virtual void 		MouseButtonUp( const MouseEvent& rMEvt );
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski 		/** copies the current selection in this section
95*b1cdbd2cSJim Jagielski             @param  _rAllreadyCopiedObjects This is an out/in put param which contains all already copied objects.
96*b1cdbd2cSJim Jagielski 		*/
97*b1cdbd2cSJim Jagielski 		void Copy(::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _rAllreadyCopiedObjects);
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski         void Copy(::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _rAllreadyCopiedObjects,bool _bEraseAnddNoClone);
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 		/** paste a new control in this section
102*b1cdbd2cSJim Jagielski             @param  _aAllreadyCopiedObjects objects to paste into the section. Only objects are pasted where the name is equal to the section name.
103*b1cdbd2cSJim Jagielski             @param  _bForce If set to <TRUE/> than the objects will be copied into this section. The name is not compared in this case.
104*b1cdbd2cSJim Jagielski 		*/
105*b1cdbd2cSJim Jagielski 		void Paste(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& _aAllreadyCopiedObjects,bool _bForce = false);
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski 		/** Deletes the current selection in this section
108*b1cdbd2cSJim Jagielski 		*
109*b1cdbd2cSJim Jagielski 		*/
110*b1cdbd2cSJim Jagielski 		void Delete();
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski 		/** All objects will be marked.
113*b1cdbd2cSJim Jagielski 		*/
114*b1cdbd2cSJim Jagielski 		void SelectAll(const sal_uInt16 _nObjectType);
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 		/** makes the grid visible
117*b1cdbd2cSJim Jagielski 		*
118*b1cdbd2cSJim Jagielski 		* \param _bVisible when <TRUE/> the grid is made visible
119*b1cdbd2cSJim Jagielski 		*/
120*b1cdbd2cSJim Jagielski 		void SetGridVisible(sal_Bool _bVisible);
121*b1cdbd2cSJim Jagielski 
getSectionWindow() const122*b1cdbd2cSJim Jagielski 		inline OSectionWindow*		getSectionWindow() const { return m_pParent; }
getSectionView() const123*b1cdbd2cSJim Jagielski 		inline OSectionView&		getSectionView() const { return *m_pView; }
getPage() const124*b1cdbd2cSJim Jagielski 		inline OReportPage*			getPage() const { return m_pPage; }
getSection() const125*b1cdbd2cSJim Jagielski 		inline ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection > getSection() const { return m_xSection; }
126*b1cdbd2cSJim Jagielski 
SetDialogModelChanged(sal_Bool bChanged=sal_True)127*b1cdbd2cSJim Jagielski 		void			SetDialogModelChanged( sal_Bool bChanged = sal_True ) { m_bDialogModelChanged = bChanged; }
IsDialogModelChanged() const128*b1cdbd2cSJim Jagielski 		sal_Bool			IsDialogModelChanged() const { return m_bDialogModelChanged; }
GetMode() const129*b1cdbd2cSJim Jagielski 		DlgEdMode   	GetMode() const { return m_eMode; }
130*b1cdbd2cSJim Jagielski 		void 			SetMode( DlgEdMode m_eMode );
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 		/** checks if the keycode is known by the child windows
133*b1cdbd2cSJim Jagielski 			@param	_rCode	the keycode
134*b1cdbd2cSJim Jagielski 			@return <TRUE/> if the keycode is handled otherwise <FALSE/>
135*b1cdbd2cSJim Jagielski 		*/
136*b1cdbd2cSJim Jagielski 		sal_Bool		handleKeyEvent(const KeyEvent& _rEvent);
137*b1cdbd2cSJim Jagielski 
138*b1cdbd2cSJim Jagielski 		/** returns the current control report model or <NULL/>
139*b1cdbd2cSJim Jagielski 		*/
140*b1cdbd2cSJim Jagielski 		::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent > getCurrentControlModel() const;
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski         /** fills the vector with all selected control models
143*b1cdbd2cSJim Jagielski             /param  _rSelection The vector will be filled and will not be cleared before.
144*b1cdbd2cSJim Jagielski         */
145*b1cdbd2cSJim Jagielski         void fillControlModelSelection(::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >& _rSelection) const;
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski         /** creates a default object (custom shape)
148*b1cdbd2cSJim Jagielski         *
149*b1cdbd2cSJim Jagielski         * @param _sType
150*b1cdbd2cSJim Jagielski         */
151*b1cdbd2cSJim Jagielski         void createDefault(const ::rtl::OUString& _sType);
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski         /** creates a new default custom shape
154*b1cdbd2cSJim Jagielski         *
155*b1cdbd2cSJim Jagielski         * \param _sType
156*b1cdbd2cSJim Jagielski         * \param _pObj
157*b1cdbd2cSJim Jagielski         */
158*b1cdbd2cSJim Jagielski         void createDefault(const ::rtl::OUString& _sType,SdrObject* _pObj);
159*b1cdbd2cSJim Jagielski         void stopScrollTimer();
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski         /** deactivate the currect active ole object if any
162*b1cdbd2cSJim Jagielski         */
163*b1cdbd2cSJim Jagielski         void    deactivateOle();
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski         /** returns true when an ole object is currently active
166*b1cdbd2cSJim Jagielski         */
167*b1cdbd2cSJim Jagielski         bool isUiActive() const;
168*b1cdbd2cSJim Jagielski 	};
169*b1cdbd2cSJim Jagielski //==================================================================
170*b1cdbd2cSJim Jagielski }	//rptui
171*b1cdbd2cSJim Jagielski //==================================================================
172*b1cdbd2cSJim Jagielski #endif // REPORT_REPORTSECTION_HXX
173*b1cdbd2cSJim Jagielski 
174