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 RPTUI_SCROLLHELPER_HXX 24*b1cdbd2cSJim Jagielski #define RPTUI_SCROLLHELPER_HXX 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <vcl/scrbar.hxx> 27*b1cdbd2cSJim Jagielski #include <com/sun/star/report/XSection.hpp> 28*b1cdbd2cSJim Jagielski #include <comphelper/propmultiplex.hxx> 29*b1cdbd2cSJim Jagielski #include "ReportDefines.hxx" 30*b1cdbd2cSJim Jagielski #include <svtools/colorcfg.hxx> 31*b1cdbd2cSJim Jagielski #include <svx/svdedtv.hxx> 32*b1cdbd2cSJim Jagielski #include "cppuhelper/basemutex.hxx" 33*b1cdbd2cSJim Jagielski #include <rtl/ref.hxx> 34*b1cdbd2cSJim Jagielski #include <boost/shared_ptr.hpp> 35*b1cdbd2cSJim Jagielski #include <vcl/dockwin.hxx> 36*b1cdbd2cSJim Jagielski #include <MarkedSection.hxx> 37*b1cdbd2cSJim Jagielski #include "ReportWindow.hxx" 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski class SdrView; 40*b1cdbd2cSJim Jagielski namespace rptui 41*b1cdbd2cSJim Jagielski { 42*b1cdbd2cSJim Jagielski class ODesignView; 43*b1cdbd2cSJim Jagielski class OReportWindow; 44*b1cdbd2cSJim Jagielski class OSectionView; 45*b1cdbd2cSJim Jagielski class OReportSection; 46*b1cdbd2cSJim Jagielski class OReportModel; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski /** This class defines the scrollable area of the report design. It includes 49*b1cdbd2cSJim Jagielski the h-ruler and the sections, and end marker. Not the start marker. 50*b1cdbd2cSJim Jagielski */ 51*b1cdbd2cSJim Jagielski typedef Window OScrollWindowHelper_BASE; 52*b1cdbd2cSJim Jagielski class OScrollWindowHelper : public ::cppu::BaseMutex 53*b1cdbd2cSJim Jagielski , public OScrollWindowHelper_BASE/*TabPage*/ 54*b1cdbd2cSJim Jagielski , public ::comphelper::OPropertyChangeListener 55*b1cdbd2cSJim Jagielski , public IMarkedSection 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski private: 58*b1cdbd2cSJim Jagielski ScrollBar m_aHScroll; 59*b1cdbd2cSJim Jagielski ScrollBar m_aVScroll; 60*b1cdbd2cSJim Jagielski ScrollBarBox m_aCornerWin; // window in the bottom right corner 61*b1cdbd2cSJim Jagielski Size m_aTotalPixelSize; 62*b1cdbd2cSJim Jagielski ODesignView* m_pParent; 63*b1cdbd2cSJim Jagielski OReportWindow m_aReportWindow; 64*b1cdbd2cSJim Jagielski ::rtl::Reference<comphelper::OPropertyChangeMultiplexer > 65*b1cdbd2cSJim Jagielski m_pReportDefintionMultiPlexer; // listener for property changes 66*b1cdbd2cSJim Jagielski 67*b1cdbd2cSJim Jagielski DECL_LINK( ScrollHdl, ScrollBar*); 68*b1cdbd2cSJim Jagielski Size ResizeScrollBars(); 69*b1cdbd2cSJim Jagielski void ImplInitSettings(); 70*b1cdbd2cSJim Jagielski void impl_initScrollBar( ScrollBar& _rScrollBar ) const; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski OScrollWindowHelper(OScrollWindowHelper&); 73*b1cdbd2cSJim Jagielski void operator =(OScrollWindowHelper&); 74*b1cdbd2cSJim Jagielski protected: 75*b1cdbd2cSJim Jagielski virtual void DataChanged( const DataChangedEvent& rDCEvt ); 76*b1cdbd2cSJim Jagielski // window 77*b1cdbd2cSJim Jagielski virtual void Resize(); 78*b1cdbd2cSJim Jagielski virtual long Notify( NotifyEvent& rNEvt ); 79*b1cdbd2cSJim Jagielski // OPropertyChangeListener 80*b1cdbd2cSJim Jagielski virtual void _propertyChanged(const ::com::sun::star::beans::PropertyChangeEvent& _rEvent) throw( ::com::sun::star::uno::RuntimeException); 81*b1cdbd2cSJim Jagielski public: 82*b1cdbd2cSJim Jagielski OScrollWindowHelper( ODesignView* _pReportDesignView); 83*b1cdbd2cSJim Jagielski virtual ~OScrollWindowHelper(); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski /** late ctor 86*b1cdbd2cSJim Jagielski */ 87*b1cdbd2cSJim Jagielski void initialize(); 88*b1cdbd2cSJim Jagielski getThumbPos() const89*b1cdbd2cSJim Jagielski inline Point getThumbPos() const { return Point(m_aHScroll.GetThumbPos(),m_aVScroll.GetThumbPos())/*m_aScrollOffset*/; } getReportWindow() const90*b1cdbd2cSJim Jagielski inline const OReportWindow& getReportWindow() const { return m_aReportWindow; } 91*b1cdbd2cSJim Jagielski void setTotalSize(sal_Int32 _nWidth ,sal_Int32 _nHeight); getTotalSize() const92*b1cdbd2cSJim Jagielski inline Size getTotalSize() const { return m_aTotalPixelSize; } GetHScroll()93*b1cdbd2cSJim Jagielski inline ScrollBar* GetHScroll() { return &m_aHScroll; } GetVScroll()94*b1cdbd2cSJim Jagielski inline ScrollBar* GetVScroll() { return &m_aVScroll; } 95*b1cdbd2cSJim Jagielski 96*b1cdbd2cSJim Jagielski // forwards 97*b1cdbd2cSJim Jagielski void SetMode( DlgEdMode _eMode ); 98*b1cdbd2cSJim Jagielski void SetInsertObj( sal_uInt16 eObj,const ::rtl::OUString& _sShapeType = ::rtl::OUString()); 99*b1cdbd2cSJim Jagielski rtl::OUString GetInsertObjString() const; 100*b1cdbd2cSJim Jagielski void setGridSnap(sal_Bool bOn); 101*b1cdbd2cSJim Jagielski void setDragStripes(sal_Bool bOn); 102*b1cdbd2cSJim Jagielski /** copies the current selection in this section 103*b1cdbd2cSJim Jagielski */ 104*b1cdbd2cSJim Jagielski void Copy(); 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski /** returns if paste is allowed 107*b1cdbd2cSJim Jagielski * 108*b1cdbd2cSJim Jagielski * \return <TRUE/> if paste is allowed 109*b1cdbd2cSJim Jagielski */ 110*b1cdbd2cSJim Jagielski sal_Bool IsPasteAllowed() const; 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski /** paste a new control in this section 113*b1cdbd2cSJim Jagielski */ 114*b1cdbd2cSJim Jagielski void Paste(); 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski /** Deletes the current selection in this section 117*b1cdbd2cSJim Jagielski * 118*b1cdbd2cSJim Jagielski */ 119*b1cdbd2cSJim Jagielski void Delete(); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski /** All objects will be marked. 122*b1cdbd2cSJim Jagielski */ 123*b1cdbd2cSJim Jagielski void SelectAll(const sal_uInt16 _nObjectType); 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski /** returns <TRUE/> when a object is marked 126*b1cdbd2cSJim Jagielski */ 127*b1cdbd2cSJim Jagielski sal_Bool HasSelection() const; 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski /** removes the section at the given position. 130*b1cdbd2cSJim Jagielski * 131*b1cdbd2cSJim Jagielski * \param _nPosition Zero based. 132*b1cdbd2cSJim Jagielski */ 133*b1cdbd2cSJim Jagielski void removeSection(sal_uInt16 _nPosition); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski /** adds a new section at position _nPosition. 136*b1cdbd2cSJim Jagielski If the section is <NULL/> nothing happens. 137*b1cdbd2cSJim Jagielski If the position is grater than the current elements, the section will be appended. 138*b1cdbd2cSJim Jagielski */ 139*b1cdbd2cSJim Jagielski void addSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection >& _xSection 140*b1cdbd2cSJim Jagielski ,const ::rtl::OUString& _sColorEntry 141*b1cdbd2cSJim Jagielski ,sal_uInt16 _nPosition = USHRT_MAX); 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski sal_uInt16 getSectionCount() const; 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski /** turns the grid on or off 146*b1cdbd2cSJim Jagielski * 147*b1cdbd2cSJim Jagielski * \param _bVisible 148*b1cdbd2cSJim Jagielski */ 149*b1cdbd2cSJim Jagielski void toggleGrid(sal_Bool _bVisible); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski /** unmark all objects on the views without the given one. 152*b1cdbd2cSJim Jagielski * 153*b1cdbd2cSJim Jagielski * @param _pSectionView The view where the objects should not be unmarked. 154*b1cdbd2cSJim Jagielski */ 155*b1cdbd2cSJim Jagielski void unmarkAllObjects(OSectionView* _pSectionView); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski /** shows or hides the ruler. 158*b1cdbd2cSJim Jagielski */ 159*b1cdbd2cSJim Jagielski void showRuler(sal_Bool _bShow); 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski /** calculate the max width of the markers 162*b1cdbd2cSJim Jagielski * 163*b1cdbd2cSJim Jagielski * @param _bWithEnd if <TRUE/> the end marker will be used for calculation as well otherwise not. 164*b1cdbd2cSJim Jagielski * \return the max width 165*b1cdbd2cSJim Jagielski */ 166*b1cdbd2cSJim Jagielski sal_Int32 getMaxMarkerWidth(sal_Bool _bWithEnd) const; 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski /** checks if the keycode is known by the child windows 169*b1cdbd2cSJim Jagielski @param _rCode the keycode 170*b1cdbd2cSJim Jagielski @return <TRUE/> if the keycode is handled otherwise <FALSE/> 171*b1cdbd2cSJim Jagielski */ 172*b1cdbd2cSJim Jagielski sal_Bool handleKeyEvent(const KeyEvent& _rEvent); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski /** the the section as marked or not marked 175*b1cdbd2cSJim Jagielski @param _pSectionView the section where to set the marked flag 176*b1cdbd2cSJim Jagielski @param _bMark the marked flag 177*b1cdbd2cSJim Jagielski */ 178*b1cdbd2cSJim Jagielski void setMarked(OSectionView* _pSectionView,sal_Bool _bMark); 179*b1cdbd2cSJim Jagielski void setMarked(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection,sal_Bool _bMark); 180*b1cdbd2cSJim Jagielski void setMarked(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent> >& _xShape,sal_Bool _bMark); 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski // IMarkedSection 183*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OSectionWindow> getMarkedSection(NearSectionAccess nsa = CURRENT) const; 184*b1cdbd2cSJim Jagielski ::boost::shared_ptr<OSectionWindow> getSectionWindow(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection) const; 185*b1cdbd2cSJim Jagielski virtual void markSection(const sal_uInt16 _nPos); 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski /** fills the positions of all collapsed sections. 189*b1cdbd2cSJim Jagielski * 190*b1cdbd2cSJim Jagielski * \param _rCollapsedPositions Out parameter which holds afterwards all positions of the collapsed sections. 191*b1cdbd2cSJim Jagielski */ 192*b1cdbd2cSJim Jagielski void fillCollapsedSections(::std::vector<sal_uInt16>& _rCollapsedPositions) const; 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski /** collpase all sections given by their position 195*b1cdbd2cSJim Jagielski * 196*b1cdbd2cSJim Jagielski * \param _aCollpasedSections The position of the sections which should be collapsed. 197*b1cdbd2cSJim Jagielski */ 198*b1cdbd2cSJim Jagielski void collapseSections(const com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& _aCollpasedSections); 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski /** align all marked objects in all sections 201*b1cdbd2cSJim Jagielski * 202*b1cdbd2cSJim Jagielski * \param eHor 203*b1cdbd2cSJim Jagielski * \param eVert 204*b1cdbd2cSJim Jagielski * \param bBoundRects 205*b1cdbd2cSJim Jagielski */ 206*b1cdbd2cSJim Jagielski void alignMarkedObjects(sal_Int32 _nControlModification, bool _bAlignAtSection, bool bBoundRects = false); 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski sal_uInt32 getMarkedObjectCount() const; 209*b1cdbd2cSJim Jagielski 210*b1cdbd2cSJim Jagielski /** zoom the ruler and view windows 211*b1cdbd2cSJim Jagielski */ 212*b1cdbd2cSJim Jagielski void zoom(const Fraction& _aZoom); 213*b1cdbd2cSJim Jagielski 214*b1cdbd2cSJim Jagielski /** fills the vector with all selected control models 215*b1cdbd2cSJim Jagielski /param _rSelection The vector will be filled and will not be cleared before. 216*b1cdbd2cSJim Jagielski */ 217*b1cdbd2cSJim Jagielski void fillControlModelSelection(::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >& _rSelection) const; 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski /** calculates the zoom factor. 220*b1cdbd2cSJim Jagielski @param _eType which kind of zoom is needed 221*b1cdbd2cSJim Jagielski */ 222*b1cdbd2cSJim Jagielski sal_uInt16 getZoomFactor(SvxZoomType _eType) const; 223*b1cdbd2cSJim Jagielski }; 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski #endif // RPTUI_SCROLLHELPER_HXX 226