1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef RPTUI_DESIGNVIEW_HXX 24 #define RPTUI_DESIGNVIEW_HXX 25 26 #include <dbaccess/dataview.hxx> 27 #include <com/sun/star/frame/XController.hpp> 28 #include <com/sun/star/report/XSection.hpp> 29 #include <com/sun/star/report/XReportComponent.hpp> 30 #include <vcl/split.hxx> 31 #include <vcl/scrbar.hxx> 32 #include <com/sun/star/container/XNameContainer.hpp> 33 #include <com/sun/star/datatransfer/DataFlavor.hpp> 34 #include <tools/link.hxx> 35 #include <tools/gen.hxx> 36 #include <vcl/timer.hxx> 37 #include <svl/hint.hxx> 38 #include <svl/brdcst.hxx> 39 #include <comphelper/stl_types.hxx> 40 #include "ReportDefines.hxx" 41 #include <svtools/colorcfg.hxx> 42 #include <boost/shared_ptr.hpp> 43 #include <svx/svdedtv.hxx> 44 #include <vcl/tabpage.hxx> 45 #include <vcl/splitwin.hxx> 46 #include <MarkedSection.hxx> 47 #include "ScrollHelper.hxx" 48 49 class KeyEvent; 50 class MouseEvent; 51 class Timer; 52 class Window; 53 54 namespace rptui 55 { 56 class OReportSection; 57 class OUnoObject; 58 class OSectionView; 59 class OReportController; 60 class PropBrw; 61 class OAddFieldWindow; 62 class OReportModel; 63 class ONavigator; 64 //================================================================== 65 //================================================================== 66 class ODesignView : public dbaui::ODataView, public SfxBroadcaster, public IMarkedSection 67 { 68 private: 69 SplitWindow m_aSplitWin; 70 71 ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface> m_xReportComponent; 72 OReportController& m_rReportController; 73 OScrollWindowHelper m_aScrollWindow; 74 Window* m_pTaskPane; 75 PropBrw* m_pPropWin; 76 OAddFieldWindow* m_pAddField; 77 OSectionView* m_pCurrentView; 78 ONavigator* m_pReportExplorer; 79 Timer m_aMarkTimer; 80 Point m_aScrollOffset; 81 DlgEdMode m_eMode; 82 sal_uInt16 m_nCurrentPosition; 83 sal_uInt16 m_eActObj; 84 sal_Bool m_bFirstDraw; 85 Size m_aGridSizeCoarse; 86 Size m_aGridSizeFine; 87 sal_Bool m_bGridVisible; 88 sal_Bool m_bGridSnap; 89 sal_Bool m_bDeleted; 90 91 92 DECL_LINK( MarkTimeout, Timer * ); 93 DECL_LINK( SplitHdl, void* ); 94 95 void ImplInitSettings(); 96 97 ODesignView(ODesignView&); 98 void operator =(ODesignView&); 99 protected: 100 // return the Rectangle where I can paint myself 101 virtual void resizeDocumentView(Rectangle& rRect); 102 // return the Rectangle where I can paint myself 103 virtual void DataChanged( const DataChangedEvent& rDCEvt ); 104 105 public: 106 ODesignView(Window* pParent, 107 const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&, 108 OReportController& _rController); 109 virtual ~ODesignView(); 110 111 // window overloads 112 virtual void MouseButtonDown( const MouseEvent& rMEvt ); 113 virtual long PreNotify( NotifyEvent& rNEvt ); 114 virtual void GetFocus(); 115 116 // set the view readonly or not 117 virtual void setReadOnly(sal_Bool _bReadOnly); 118 119 virtual void initialize(); 120 getController() const121 inline OReportController& getController() const { return m_rReportController; } 122 123 void SetMode( DlgEdMode m_eMode ); 124 void SetInsertObj( sal_uInt16 eObj,const ::rtl::OUString& _sShapeType = ::rtl::OUString()); 125 sal_uInt16 GetInsertObj() const; 126 rtl::OUString GetInsertObjString() const; GetMode() const127 DlgEdMode GetMode() const { return m_eMode; } 128 129 /** cuts the current selection in this section 130 */ 131 void Cut(); 132 133 /** copies the current selection in this section 134 */ 135 void Copy(); 136 137 /** returns if paste is allowed 138 * 139 * \return <TRUE/> if paste is allowed 140 */ 141 sal_Bool IsPasteAllowed() const; 142 143 /** paste a new control in this section 144 */ 145 void Paste(); 146 147 /** Deletes the current selection in this section 148 * 149 */ 150 void Delete(); 151 152 /** align all marked objects in all sections 153 */ 154 void alignMarkedObjects(sal_Int32 _nControlModification, bool _bAlignAtSection, bool bBoundRects = false); 155 156 #if 0 157 /** checks if alignment is possible in the current section 158 */ 159 sal_Bool isAlignPossible() const; 160 #endif 161 162 /** All objects will be marked. 163 */ 164 void SelectAll(const sal_uInt16 _nObjectType); 165 166 /// checks if a selection exists 167 sal_Bool HasSelection() const; 168 169 void UpdatePropertyBrowserDelayed(OSectionView& _rView); 170 171 sal_uInt16 getSectionCount() const; 172 173 /** removes the section at the given position. 174 * 175 * \param _nPosition Zero based. 176 */ 177 void removeSection(sal_uInt16 _nPosition); 178 179 /** adds a new section at position _nPosition. 180 If the section is <NULL/> nothing happens. 181 If the position is grater than the current elements, the section will be appended. 182 */ 183 void addSection(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection >& _xSection 184 ,const ::rtl::OUString& _sColorEntry 185 ,sal_uInt16 _nPosition = USHRT_MAX); 186 getGridSizeCoarse() const187 inline Size getGridSizeCoarse() const { return m_aGridSizeCoarse; } getGridSizeFine() const188 inline Size getGridSizeFine() const { return m_aGridSizeFine; } isGridSnap() const189 inline sal_Bool isGridSnap() const { return m_bGridSnap; } 190 void setGridSnap(sal_Bool bOn); 191 void setDragStripes(sal_Bool bOn); 192 /** turns the grid on or off 193 * 194 * \param _bGridVisible 195 */ 196 void toggleGrid(sal_Bool _bGridVisible); 197 198 void togglePropertyBrowser(sal_Bool _bToogleOn); 199 200 sal_Bool isAddFieldVisible() const; 201 void toggleAddField(); 202 203 sal_Bool isReportExplorerVisible() const; 204 void toggleReportExplorer(); 205 206 /** shows or hides the ruler. 207 */ 208 void showRuler(sal_Bool _bShow); 209 210 /** unmark all objects on the views without the given one. 211 * 212 * @param _pSectionView The view where the objects should not be unmarked. 213 */ 214 void unmarkAllObjects(OSectionView* _pSectionView); 215 216 /** triggers the property browser with the section 217 @param _xReportComponent the report component 218 */ 219 void showProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>& _xReportComponent); 220 ::com::sun::star::uno::Any getCurrentlyShownProperty() const; 221 222 /** returns the current section or the detail section if no section was selected previously 223 */ 224 ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection > getCurrentSection() const; 225 226 /** returns the current control report model or <NULL/> 227 */ 228 ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent > getCurrentControlModel() const; 229 230 // IMarkedSection 231 ::boost::shared_ptr<OSectionWindow> getMarkedSection(NearSectionAccess nsa = CURRENT) const; 232 ::boost::shared_ptr<OSectionWindow> getSectionWindow(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection) const; 233 virtual void markSection(const sal_uInt16 _nPos); 234 235 /** fills the positions of all collapsed sections. 236 * 237 * \param _rCollapsedPositions Out parameter which holds afterwards all positions of the collapsed sections. 238 */ 239 void fillCollapsedSections(::std::vector<sal_uInt16>& _rCollapsedPositions) const; 240 241 /** collpase all sections given by their position 242 * 243 * \param _aCollpasedSections The position of the sections which should be collapsed. 244 */ 245 void collapseSections(const com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue>& _aCollpasedSections); 246 247 ::rtl::OUString getCurrentPage() const; 248 void setCurrentPage(const ::rtl::OUString& _sLastActivePage); 249 250 /** checks if the keycode is known by the child windows 251 @param _rCode the keycode 252 @return <TRUE/> if the keycode is handled otherwise <FALSE/> 253 */ 254 sal_Bool handleKeyEvent(const KeyEvent& _rEvent); 255 256 /** set the section as marked or not marked 257 @param _pSectionView the section where to set the marked flag 258 @param _bMark the marked flag 259 */ 260 void setMarked(const ::com::sun::star::uno::Reference< ::com::sun::star::report::XSection>& _xSection,sal_Bool _bMark); 261 void setMarked(const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::report::XReportComponent> >& _xShape,sal_Bool _bMark); 262 263 /** returns if the view handles the event by itself 264 * 265 * \param _nId the command id 266 * \return <FALSE/> is the event is not handled by the view otherwise <TRUE/> 267 */ 268 sal_Bool isHandleEvent(sal_uInt16 _nId) const; 269 270 sal_uInt32 getMarkedObjectCount() const; 271 272 /** zoom the ruler and view windows 273 */ 274 void zoom(const Fraction& _aZoom); 275 276 /** fills the vector with all selected control models 277 /param _rSelection The vector will be filled and will not be cleared before. 278 */ 279 void fillControlModelSelection(::std::vector< ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > >& _rSelection) const; 280 281 /** returns the selected field from the add field dialog 282 */ 283 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > getSelectedFieldDescriptors(); 284 285 /** calculates the zoom factor. 286 @param _eType which kind of zoom is needed 287 */ 288 sal_uInt16 getZoomFactor(SvxZoomType _eType) const; 289 }; 290 //================================================================== 291 } //rptui 292 //================================================================== 293 #endif // RPTUI_DESIGNVIEW_HXX 294 295