diff options
-rw-r--r-- | reportdesign/source/ui/report/ViewsWindow.cxx | 759 |
1 files changed, 345 insertions, 414 deletions
diff --git a/reportdesign/source/ui/report/ViewsWindow.cxx b/reportdesign/source/ui/report/ViewsWindow.cxx index df9ff2500..4b9ca5a99 100644 --- a/reportdesign/source/ui/report/ViewsWindow.cxx +++ b/reportdesign/source/ui/report/ViewsWindow.cxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: ViewsWindow.cxx,v $ - * $Revision: 1.10 $ + * $Revision: 1.11 $ * * This file is part of OpenOffice.org. * @@ -35,26 +35,19 @@ #include "DesignView.hxx" #include <svtools/colorcfg.hxx> #include "ReportController.hxx" -#ifndef RPTUI_TOOLS_HXX #include "UITools.hxx" -#endif -#include "EndMarker.hxx" #include "RptDef.hxx" -#ifndef _RPTUI_DLGRESID_HRC #include "RptResId.hrc" -#endif #include "SectionView.hxx" #include "ReportSection.hxx" -#ifndef REPORTDESIGN_SHARED_UISTRINGS_HRC #include "uistrings.hrc" -#endif -#ifndef _RPTUI_SLOTID_HRC_ #include "rptui_slotid.hrc" -#endif #include "dlgedclip.hxx" +#include "ColorChanger.hxx" #include "RptObject.hxx" #include "RptObject.hxx" #include "ModuleHelper.hxx" +#include "EndMarker.hxx" #include <svx/svdpagv.hxx> #include <svx/unoshape.hxx> #include <vcl/svapp.hxx> @@ -64,10 +57,10 @@ #include <svx/svdundo.hxx> #include <toolkit/helper/convert.hxx> #include <algorithm> +#include <numeric> namespace rptui { -#define SECTION_OFFSET 3 #define DEFAUL_MOVE_SIZE 100 using namespace ::com::sun::star; @@ -187,16 +180,16 @@ bool lcl_getNewRectSize(const Rectangle& _aObjRect,long& _nXMov, long& _nYMov,Sd // ----------------------------------------------------------------------------- DBG_NAME( rpt_OViewsWindow ); -OViewsWindow::OViewsWindow( Window* _pParent,OReportWindow* _pReportWindow) -: Window( _pParent,WB_DIALOGCONTROL) -,OPropertyChangeListener(m_aMutex) +OViewsWindow::OViewsWindow( OReportWindow* _pReportWindow) +: Window( _pReportWindow,WB_DIALOGCONTROL) ,m_pParent(_pReportWindow) -,m_bInSplitHandler(sal_False) ,m_bInUnmark(sal_False) { DBG_CTOR( rpt_OViewsWindow,NULL); + SetPaintTransparent(TRUE); SetUniqueId(UID_RPT_VIEWSWINDOW); SetMapMode( MapMode( MAP_100TH_MM ) ); + EnableMapMode(); StartListening(m_aColorConfig); ImplInitSettings(); } @@ -204,16 +197,6 @@ OViewsWindow::OViewsWindow( Window* _pParent,OReportWindow* _pReportWindow) OViewsWindow::~OViewsWindow() { EndListening(m_aColorConfig); - try - { - TSectionsMap::iterator aIter = m_aSections.begin(); - TSectionsMap::iterator aEnd = m_aSections.end(); - for (;aIter != aEnd ; ++aIter) - aIter->first.second->dispose(); - } - catch (uno::Exception&) - { - } m_aSections.clear(); DBG_DTOR( rpt_OViewsWindow,NULL); @@ -223,67 +206,98 @@ void OViewsWindow::initialize() { } +// ----------------------------------------------------------------------------- +void OViewsWindow::impl_resizeSectionWindow(OSectionWindow& _rSectionWindow,Point& _rStartPoint,bool _bSet) +{ + const uno::Reference< report::XSection> xSection = _rSectionWindow.getReportSection().getSection(); + + Size aSectionSize = _rSectionWindow.LogicToPixel( Size( 0,xSection->getHeight() ) ); + aSectionSize.Width() = getView()->GetTotalWidth(); + + const sal_Int32 nMinHeight = _rSectionWindow.getStartMarker().getMinHeight(); + if ( _rSectionWindow.getStartMarker().isCollapsed() || nMinHeight > aSectionSize.Height() ) + { + aSectionSize.Height() = nMinHeight; + } + const StyleSettings& rSettings = GetSettings().GetStyleSettings(); + aSectionSize.Height() += (long)(rSettings.GetSplitSize() * (double)_rSectionWindow.GetMapMode().GetScaleY()); + + if ( _bSet ) + _rSectionWindow.SetPosSizePixel(_rStartPoint,aSectionSize); + + _rStartPoint.Y() += aSectionSize.Height(); +} + +// ----------------------------------------------------------------------------- +void OViewsWindow::resize(const OSectionWindow& _rSectionWindow) +{ + bool bSet = false; + Point aStartPoint; + TSectionsMap::iterator aIter = m_aSections.begin(); + TSectionsMap::iterator aEnd = m_aSections.end(); + for (;aIter != aEnd ; ++aIter) + { + const ::boost::shared_ptr<OSectionWindow> pSectionWindow = (*aIter); + if ( pSectionWindow.get() == &_rSectionWindow ) + { + aStartPoint = pSectionWindow->GetPosPixel(); + bSet = true; + } // if ( pSectionWindow.get() == &_rSectionWindow ) + + if ( bSet ) + { + impl_resizeSectionWindow(*pSectionWindow.get(),aStartPoint,bSet); + pSectionWindow->Invalidate(INVALIDATE_NOERASE | INVALIDATE_NOCHILDREN | INVALIDATE_TRANSPARENT); + pSectionWindow->getStartMarker().Invalidate(INVALIDATE_NOERASE | INVALIDATE_NOCHILDREN | INVALIDATE_TRANSPARENT ); + } + } // for (;aIter != aEnd ; ++aIter,++nPos) + Fraction aStartWith(long(REPORT_STARTMARKER_WIDTH)); + aStartWith *= GetMapMode().GetScaleX(); + Size aOut = GetOutputSizePixel(); + aOut.Width() = aStartWith; + aOut = PixelToLogic(aOut); + + Rectangle aRect(PixelToLogic(Point(0,0)),aOut); + Invalidate(aRect,INVALIDATE_NOERASE | INVALIDATE_NOCHILDREN | INVALIDATE_TRANSPARENT); +} //------------------------------------------------------------------------------ void OViewsWindow::Resize() { Window::Resize(); if ( m_aSections.empty() ) return; - Point aStartPoint(0,0); - - aStartPoint -= m_pParent->getScrollOffset(); - Point aSplitterStartPoint(aStartPoint.X(),0); - Size aOutputSize = GetOutputSizePixel(); - aOutputSize.Width() -= (REPORT_ENDMARKER_WIDTH + REPORT_STARTMARKER_WIDTH); + const Point aOffset = m_pParent->getScrollOffset(); + Point aStartPoint(0,aOffset.Y()); TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); for (USHORT nPos=0;aIter != aEnd ; ++aIter,++nPos) { - ::boost::shared_ptr<OReportSection> pReportSection = (*aIter).first.first; - uno::Reference< report::XSection> xSection = pReportSection->getSection(); - Size aSectionSize = LogicToPixel( Size( 0,xSection->getHeight() ),MAP_100TH_MM ); - aSectionSize.Width() = aOutputSize.Width(); - - ::boost::shared_ptr<Splitter> pSplitter = (*aIter).second.second; - ::boost::shared_ptr<OEndMarker> pEndMarker = (*aIter).second.first; - - const sal_Int32 nMinHeight = m_pParent->getMinHeight(nPos); - if ( pReportSection->IsVisible() ) - { - pReportSection->SetPosSizePixel(aStartPoint,aSectionSize); - if ( !m_bInSplitHandler ) - { - pSplitter->SetPosSizePixel(Point(aSplitterStartPoint.X(),aStartPoint.Y() + aSectionSize.Height()),Size(aOutputSize.Width(),pSplitter->GetSizePixel().Height())); - pSplitter->SetDragRectPixel( Rectangle(Point(aSplitterStartPoint.X(),aStartPoint.Y()/*- 1*/),aOutputSize)); - } - - if ( nMinHeight > aSectionSize.Height() ) - { - pEndMarker->SetPosSizePixel(Point(aSplitterStartPoint.X() + aOutputSize.Width(),aStartPoint.Y()),Size(REPORT_ENDMARKER_WIDTH,nMinHeight)); - aSectionSize.Height() = nMinHeight; - } - else - { - pEndMarker->SetPosSizePixel(Point(aSplitterStartPoint.X() + aOutputSize.Width(),aStartPoint.Y()),Size(REPORT_ENDMARKER_WIDTH,aSectionSize.Height())); - } - } - else - { - aSectionSize.Height() = nMinHeight; - pEndMarker->SetPosSizePixel(Point(aSplitterStartPoint.X(),aStartPoint.Y()),Size(aOutputSize.Width() + REPORT_ENDMARKER_WIDTH,aSectionSize.Height())); - } - aStartPoint.Y() += aSectionSize.Height() + pSplitter->GetSizePixel().Height(); + const ::boost::shared_ptr<OSectionWindow> pSectionWindow = (*aIter); + impl_resizeSectionWindow(*pSectionWindow.get(),aStartPoint,true); } // for (;aIter != aEnd ; ++aIter) } +// ----------------------------------------------------------------------------- +void OViewsWindow::Paint( const Rectangle& rRect ) +{ + Window::Paint( rRect ); + + Size aOut = GetOutputSizePixel(); + Fraction aStartWith(long(REPORT_STARTMARKER_WIDTH)); + aStartWith *= GetMapMode().GetScaleX(); + + aOut.Width() -= (long)aStartWith; + aOut = PixelToLogic(aOut); + + Rectangle aRect(PixelToLogic(Point(aStartWith,0)),aOut); + Wallpaper aWall( m_aColorConfig.GetColorValue(::svtools::APPBACKGROUND).nColor ); + DrawWallpaper(aRect,aWall); +} //------------------------------------------------------------------------------ void OViewsWindow::ImplInitSettings() { -//#if OSL_DEBUG_LEVEL > 0 -// SetBackground( Wallpaper( COL_GREEN )); -//#else - SetBackground( Wallpaper( m_aColorConfig.GetColorValue(::svtools::APPBACKGROUND).nColor ) ); -//#endif + // SetBackground( Wallpaper( COL_LIGHTBLUE )); + SetBackground( ); SetFillColor( Application::GetSettings().GetStyleSettings().GetDialogColor() ); SetTextFillColor( Application::GetSettings().GetStyleSettings().GetDialogColor() ); } @@ -302,26 +316,10 @@ void OViewsWindow::DataChanged( const DataChangedEvent& rDCEvt ) //---------------------------------------------------------------------------- void OViewsWindow::addSection(const uno::Reference< report::XSection >& _xSection,const ::rtl::OUString& _sColorEntry,USHORT _nPosition) { - ::boost::shared_ptr<OReportSection> pReportSection( new OReportSection(this,_xSection) ); - pReportSection->Show(); - - ::boost::shared_ptr<OEndMarker> pEndMarker( new OEndMarker(this,_sColorEntry) ); - pEndMarker->Show(); - - ::boost::shared_ptr<Splitter> pSplitter(new Splitter(this)); - pSplitter->SetStartSplitHdl(LINK(this, OViewsWindow,StartSplitHdl)); - pSplitter->SetSplitHdl(LINK(this, OViewsWindow,SplitHdl)); - pSplitter->SetEndSplitHdl(LINK(this, OViewsWindow,EndSplitHdl)); - pSplitter->SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() )); - pSplitter->SetSplitPosPixel(LogicToPixel(Size(0,getTotalHeight() + _xSection->getHeight()),MAP_100TH_MM).Height()); - //pSplitter->SetSizePixel(Size(pSplitter->GetSizePixel().Width(),1)); - pSplitter->Show(); - - ::rtl::Reference< comphelper::OPropertyChangeMultiplexer> pMulti = new OPropertyChangeMultiplexer(this,_xSection.get()); - pMulti->addProperty(PROPERTY_HEIGHT); - - m_aSections.insert(getIteratorAtPos(_nPosition) , TSectionsMap::value_type(TReportPair(pReportSection,pMulti),TSplitterPair(pEndMarker,pSplitter))); - m_pParent->setMarked(pReportSection->getView(),m_aSections.size() == 1); + ::boost::shared_ptr<OSectionWindow> pSectionWindow( new OSectionWindow(this,_xSection,_sColorEntry) ); + + m_aSections.insert(getIteratorAtPos(_nPosition) , TSectionsMap::value_type(pSectionWindow)); + m_pParent->setMarked(&pSectionWindow->getReportSection().getSectionView(),m_aSections.size() == 1); Resize(); } @@ -333,10 +331,8 @@ void OViewsWindow::removeSection(USHORT _nPosition) TSectionsMap::iterator aPos = getIteratorAtPos(_nPosition); TSectionsMap::iterator aNew = getIteratorAtPos(_nPosition == 0 ? _nPosition+1: _nPosition - 1); - m_pParent->getReportView()->UpdatePropertyBrowserDelayed(aNew->first.first->getView()); + m_pParent->getReportView()->UpdatePropertyBrowserDelayed((*aNew)->getReportSection().getSectionView()); - aPos->first.second->dispose(); - aPos->first.second = NULL; m_aSections.erase(aPos); Resize(); } // if ( _nPosition < m_aSections.size() ) @@ -345,15 +341,10 @@ void OViewsWindow::removeSection(USHORT _nPosition) void OViewsWindow::showView(USHORT _nPos,BOOL _bShow) { if ( _nPos < m_aSections.size() ) - { - TSectionsMap::iterator aPos = getIteratorAtPos(_nPos); - aPos->first.first->Show(_bShow); - aPos->second.first->setCollapsed(_bShow); - aPos->second.second->Show(_bShow); - } + m_aSections[_nPos]->setCollapsed(_bShow); } //------------------------------------------------------------------------------ -void OViewsWindow::toggleGrid(sal_Bool _bVisible) +void OViewsWindow::toggleGrid(BOOL _bVisible) { ::std::for_each(m_aSections.begin(),m_aSections.end(), ::std::compose1(::boost::bind(&OReportSection::SetGridVisible,_1,_bVisible),TReportPairHelper())); @@ -361,118 +352,19 @@ void OViewsWindow::toggleGrid(sal_Bool _bVisible) ::std::compose1(::boost::bind(&OReportSection::Window::Invalidate,_1,INVALIDATE_NOERASE),TReportPairHelper())); } //------------------------------------------------------------------------------ -sal_Int32 OViewsWindow::getTotalHeight(const OReportSection* _pSection) const +sal_Int32 OViewsWindow::getTotalHeight() const { sal_Int32 nHeight = 0; TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); - for (;aIter != aEnd && _pSection != (*aIter).first.first.get() ; ++aIter) + for (;aIter != aEnd ; ++aIter) { - const ::boost::shared_ptr<OReportSection> pReportSection = (*aIter).first.first; - const ::boost::shared_ptr<Splitter> pSplitter = (*aIter).second.second; - - uno::Reference< report::XSection> xSection = pReportSection->getSection(); - const Size aSectionSize = LogicToPixel( Size( 0 ,xSection->getHeight() ) ,MAP_100TH_MM); - nHeight += aSectionSize.Height() + pSplitter->GetSizePixel().Height(); + nHeight += (*aIter)->GetSizePixel().Height(); } return nHeight; } //---------------------------------------------------------------------------- -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ -sal_Int32 OViewsWindow::getSplitterHeight() const -{ - sal_Int32 nRet = 0; - if ( !m_aSections.empty() ) - nRet = m_aSections.begin()->second.second->GetSizePixel().Height(); - return nRet; -} -//----------------------------------------------------------------------------- -IMPL_LINK( OViewsWindow, StartSplitHdl, Splitter*, ) -{ - const String sEmpty(ModuleRes(RID_STR_UNDO_CHANGE_SIZE)); - getView()->getReportView()->getController().getUndoMgr()->EnterListAction(sEmpty,String()); - return 0L; -} -//------------------------------------------------------------------------------ -IMPL_LINK( OViewsWindow, EndSplitHdl, Splitter*, ) -{ - getView()->getReportView()->getController().getUndoMgr()->LeaveListAction(); - Resize(); - return 0L; -} -//----------------------------------------------------------------------------- -IMPL_LINK( OViewsWindow, SplitHdl, Splitter*, _pSplitter ) -{ - if ( !getView()->getReportView()->getController().isEditable() ) - { - m_bInSplitHandler = sal_False; - return 0L; - } - - //m_bInSplitHandler = sal_True; - sal_Int32 nSplitPos = _pSplitter->GetSplitPosPixel(); - const Point aPos = _pSplitter->GetPosPixel(); - _pSplitter->SetPosPixel( Point( 0,nSplitPos )); - TSectionsMap::iterator aIter = m_aSections.begin(); - TSectionsMap::iterator aEnd = m_aSections.end(); - for (;aIter != aEnd ; ++aIter) - { - if ( (*aIter).second.second.get() == _pSplitter ) - { - uno::Reference< report::XSection> xSection = (*aIter).first.first->getSection(); - nSplitPos = xSection->getHeight() + PixelToLogic(Size(0,nSplitPos-aPos.Y()),MAP_100TH_MM).Height(); - - const sal_Int32 nCount = xSection->getCount(); - for (sal_Int32 i = 0; i < nCount; ++i) - { - uno::Reference<report::XReportComponent> xReportComponent(xSection->getByIndex(i),uno::UNO_QUERY); - if ( xReportComponent.is() && nSplitPos < (xReportComponent->getPositionY() + xReportComponent->getHeight()) ) - { - nSplitPos = xReportComponent->getPositionY() + xReportComponent->getHeight(); - break; - } - } - - //nSplitPos += xSection->getHeight(); - if ( nSplitPos < 0 ) - nSplitPos = 0; - - xSection->setHeight(nSplitPos); - break; - } - } - m_bInSplitHandler = sal_False; - return 0L; -} -// ----------------------------------------------------------------------------- -void OViewsWindow::_propertyChanged(const beans::PropertyChangeEvent& _rEvent) throw( uno::RuntimeException) -{ - uno::Reference< report::XSection > xSection(_rEvent.Source,uno::UNO_QUERY); - if ( xSection.is() ) - { - if ( _rEvent.PropertyName.equals(PROPERTY_HEIGHT) ) - { - TSectionsMap::iterator aIter = m_aSections.begin(); - TSectionsMap::iterator aEnd = m_aSections.end(); - for (;aIter != aEnd ; ++aIter) - { - ::boost::shared_ptr<OReportSection> pReportSection = (*aIter).first.first; - uno::Reference< report::XSection> xCurrentSection = pReportSection->getSection(); - if ( xCurrentSection == xSection ) - { - Resize(); - pReportSection->Invalidate(); - // end marker - (*aIter).second.first->Invalidate(); - break; - } - } // for (;aIter != aEnd ; ++aIter) - } - } // if ( xSection.is() ) -} -//---------------------------------------------------------------------------- USHORT OViewsWindow::getSectionCount() const { return static_cast<USHORT>(m_aSections.size()); @@ -483,7 +375,7 @@ void OViewsWindow::SetInsertObj( USHORT eObj,const ::rtl::OUString& _sShapeType TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); for (;aIter != aEnd ; ++aIter) - (*aIter).first.first->getView()->SetCurrentObj( eObj, ReportInventor ); + (*aIter)->getReportSection().getSectionView().SetCurrentObj( eObj, ReportInventor ); m_sShapeType = _sShapeType; } @@ -504,7 +396,7 @@ BOOL OViewsWindow::HasSelection() { TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); - for (;aIter != aEnd && !(*aIter).first.first->getView()->AreObjectsMarked(); ++aIter) + for (;aIter != aEnd && !(*aIter)->getReportSection().getSectionView().AreObjectsMarked(); ++aIter) ; return aIter != aEnd; } @@ -520,10 +412,13 @@ void OViewsWindow::Delete() void OViewsWindow::Copy() { uno::Sequence< beans::NamedValue > aAllreadyCopiedObjects; - TSectionsMap::iterator aIter = m_aSections.begin(); - TSectionsMap::iterator aEnd = m_aSections.end(); - for (; aIter != aEnd; ++aIter) - aIter->first.first->Copy(aAllreadyCopiedObjects); + ::std::for_each(m_aSections.begin(),m_aSections.end(), + ::std::compose1(::boost::bind(&OReportSection::Copy,_1,::boost::ref(aAllreadyCopiedObjects)),TReportPairHelper())); + + //TSectionsMap::iterator aIter = m_aSections.begin(); + //TSectionsMap::iterator aEnd = m_aSections.end(); + //for (; aIter != aEnd; ++aIter) + // (*aIter)->getReportSection().Copy(aAllreadyCopiedObjects); OReportExchange* pCopy = new OReportExchange(aAllreadyCopiedObjects); uno::Reference< datatransfer::XTransferable> aEnsureDelete = pCopy; pCopy->CopyToClipboard(this); @@ -538,42 +433,41 @@ void OViewsWindow::Paste() ::std::compose1(::boost::bind(&OReportSection::Paste,_1,aCopies,false),TReportPairHelper())); else { - ::boost::shared_ptr<OReportSection> pMarkedSection = getMarkedSection(); + ::boost::shared_ptr<OSectionWindow> pMarkedSection = getMarkedSection(); if ( pMarkedSection ) - pMarkedSection->Paste(aCopies,true); + pMarkedSection->getReportSection().Paste(aCopies,true); } } //---------------------------------------------------------------------------- -::boost::shared_ptr<OReportSection> OViewsWindow::getMarkedSection(NearSectionAccess nsa) const +::boost::shared_ptr<OSectionWindow> OViewsWindow::getMarkedSection(NearSectionAccess nsa) const { - ::boost::shared_ptr<OReportSection> pRet; + ::boost::shared_ptr<OSectionWindow> pRet; TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); sal_uInt32 nCurrentPosition = 0; for (; aIter != aEnd ; ++aIter) { - if ( (*aIter).second.first->isMarked() ) + if ( (*aIter)->getStartMarker().isMarked() ) { if (nsa == CURRENT) { - pRet = (*aIter).first.first; + pRet = (*aIter); break; } else if ( nsa == PREVIOUS ) { if (nCurrentPosition > 0) { - const TSectionPair aPair = (*(--aIter)); - pRet = aPair.first.first; + pRet = (*(--aIter)); if (pRet == NULL) { - pRet = (*m_aSections.begin()).first.first; + pRet = (*m_aSections.begin()); } } else { // if we are out of bounds return the first one - pRet = (*m_aSections.begin()).first.first; + pRet = (*m_aSections.begin()); } break; } @@ -582,22 +476,21 @@ void OViewsWindow::Paste() sal_uInt32 nSize = m_aSections.size(); if ((nCurrentPosition + 1) < nSize) { - const TSectionPair aPair = (*(++aIter)); - pRet = aPair.first.first; + pRet = *(++aIter); if (pRet == NULL) { - pRet = (*(--aEnd)).first.first; + pRet = (*(--aEnd)); } } else { // if we are out of bounds return the last one - pRet = (*(--aEnd)).first.first; + pRet = (*(--aEnd)); } break; } - } // ( (*aIter).second.first->isMarked() ) - nCurrentPosition ++; + } // ( (*aIter).second->isMarked() ) + ++nCurrentPosition; } // for (; aIter != aEnd ; ++aIter) return pRet; @@ -606,7 +499,7 @@ void OViewsWindow::Paste() void OViewsWindow::markSection(const sal_uInt16 _nPos) { if ( _nPos < m_aSections.size() ) - m_pParent->setMarked(getIteratorAtPos(_nPos)->first.first->getSection(),sal_True); + m_pParent->setMarked(m_aSections[_nPos]->getReportSection().getSection(),sal_True); } //---------------------------------------------------------------------------- BOOL OViewsWindow::IsPasteAllowed() @@ -615,11 +508,11 @@ BOOL OViewsWindow::IsPasteAllowed() return aTransferData.HasFormat(OReportExchange::getDescriptorFormatId()); } //----------------------------------------------------------------------------- -void OViewsWindow::SelectAll() +void OViewsWindow::SelectAll(const sal_uInt16 _nObjectType) { m_bInUnmark = sal_True; ::std::for_each(m_aSections.begin(),m_aSections.end(), - ::std::compose1(::boost::mem_fn(&OReportSection::SelectAll),TReportPairHelper())); + ::std::compose1(::boost::bind(::boost::mem_fn(&OReportSection::SelectAll),_1,_nObjectType),TReportPairHelper())); m_bInUnmark = sal_False; } //---------------------------------------------------------------------------- @@ -630,7 +523,7 @@ TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); for (USHORT i = 0 ; aIter != aEnd ; ++aIter,++i) { - if ( aIter->first.first.get() == _pSection ) + if ( (*aIter).first.get() == _pSection ) { } @@ -647,29 +540,29 @@ void OViewsWindow::unmarkAllObjects(OSectionView* _pSectionView) TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd ; ++aIter) { - if ( (*aIter).first.first->getView() != _pSectionView ) + if ( &(*aIter)->getReportSection().getSectionView() != _pSectionView ) { - (*aIter).first.first->deactivateOle(); - (*aIter).first.first->getView()->UnmarkAllObj(); + (*aIter)->getReportSection().deactivateOle(); + (*aIter)->getReportSection().getSectionView().UnmarkAllObj(); } } // for (; aIter != aEnd ; ++aIter) m_bInUnmark = sal_False; } } //----------------------------------------------------------------------------- -::boost::shared_ptr<OReportSection> OViewsWindow::getReportSection(const uno::Reference< report::XSection >& _xSection) +::boost::shared_ptr<OSectionWindow> OViewsWindow::getReportSection(const uno::Reference< report::XSection >& _xSection) { OSL_ENSURE(_xSection.is(),"Section is NULL!"); - ::boost::shared_ptr<OReportSection> pRet; + ::boost::shared_ptr<OSectionWindow> pRet; TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd ; ++aIter) { - if ( (*aIter).first.first->getSection() == _xSection ) + if ( (*aIter)->getReportSection().getSection() == _xSection ) { - pRet = (*aIter).first.first; + pRet = (*aIter); break; - } // if ( (*aIter).first.first->getSection() == _xSection ) + } // if ( (*aIter)->getSection() == _xSection ) } // for (; aIter != aEnd ; ++aIter) return pRet; } @@ -695,19 +588,13 @@ void OViewsWindow::MouseButtonDown( const MouseEvent& rMEvt ) } Window::MouseButtonDown(rMEvt); } -// ----------------------------------------------------------------------------- -void OViewsWindow::showProperties(const OEndMarker* _pEndMarker) +//---------------------------------------------------------------------------- +void OViewsWindow::showRuler(sal_Bool _bShow) { - OSL_PRECOND(_pEndMarker,"End marker is null!"); - TSectionsMap::iterator aIter = m_aSections.begin(); - TSectionsMap::iterator aEnd = m_aSections.end(); - for (;aIter != aEnd && (*aIter).second.first.get() != _pEndMarker; ++aIter) - ; - if ( aIter != aEnd ) - { - uno::Reference< report::XSection> xSection = (*aIter).first.first->getSection(); - m_pParent->showProperties( xSection.get() ); - } + ::std::for_each(m_aSections.begin(),m_aSections.end(), + ::std::compose1(::boost::bind(&OStartMarker::showRuler,_1,_bShow),TStartMarkerHelper())); + ::std::for_each(m_aSections.begin(),m_aSections.end(), + ::std::compose1(::boost::bind(&OStartMarker::Window::Invalidate,_1,USHORT(INVALIDATE_NOERASE)),TStartMarkerHelper())); } //---------------------------------------------------------------------------- void OViewsWindow::MouseButtonUp( const MouseEvent& rMEvt ) @@ -718,9 +605,9 @@ void OViewsWindow::MouseButtonUp( const MouseEvent& rMEvt ) TSectionsMap::iterator aEnd = m_aSections.end(); for (;aIter != aEnd ; ++aIter) { - if ( (*aIter).first.first->getView()->AreObjectsMarked() ) + if ( (*aIter)->getReportSection().getSectionView().AreObjectsMarked() ) { - (*aIter).first.first->MouseButtonUp(rMEvt); + (*aIter)->getReportSection().MouseButtonUp(rMEvt); break; } } @@ -728,8 +615,7 @@ void OViewsWindow::MouseButtonUp( const MouseEvent& rMEvt ) // remove special insert mode for (aIter = m_aSections.begin();aIter != aEnd ; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - pReportSection->getPage()->resetSpecialMode(); + (*aIter)->getReportSection().getPage()->resetSpecialMode(); } } } @@ -741,10 +627,10 @@ sal_Bool OViewsWindow::handleKeyEvent(const KeyEvent& _rEvent) TSectionsMap::iterator aEnd = m_aSections.end(); for (;aIter != aEnd ; ++aIter) { - //if ( (*aIter).first.first->getView()->AreObjectsMarked() ) - if ( (*aIter).second.first->isMarked() ) + //if ( (*aIter).getReportSection().getSectionView().->AreObjectsMarked() ) + if ( (*aIter)->getStartMarker().isMarked() ) { - bRet = (*aIter).first.first->handleKeyEvent(_rEvent); + bRet = (*aIter)->getReportSection().handleKeyEvent(_rEvent); } } return bRet; @@ -762,7 +648,7 @@ void OViewsWindow::setMarked(OSectionView* _pSectionView,sal_Bool _bMark) { OSL_ENSURE(_pSectionView != NULL,"SectionView is NULL!"); if ( _pSectionView ) - setMarked(_pSectionView->getSectionWindow()->getSection(),_bMark); + setMarked(_pSectionView->getReportSection()->getSection(),_bMark); } //------------------------------------------------------------------------ void OViewsWindow::setMarked(const uno::Reference< report::XSection>& _xSection,sal_Bool _bMark) @@ -771,15 +657,13 @@ void OViewsWindow::setMarked(const uno::Reference< report::XSection>& _xSection, TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd ; ++aIter) { - if ( (*aIter).first.first->getSection() != _xSection ) + if ( (*aIter)->getReportSection().getSection() != _xSection ) { - (*aIter).second.first->setMarked(sal_False); - (*aIter).second.first->Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_NOERASE); + (*aIter)->setMarked(sal_False); } - else if ( (*aIter).second.first->isMarked() != _bMark ) + else if ( (*aIter)->getStartMarker().isMarked() != _bMark ) { - (*aIter).second.first->setMarked(_bMark); - (*aIter).second.first->Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_NOERASE); + (*aIter)->setMarked(_bMark); } } } @@ -788,10 +672,10 @@ void OViewsWindow::setMarked(const uno::Sequence< uno::Reference< report::XRepor { bool bFirst = true; const uno::Reference< report::XReportComponent>* pIter = _aShapes.getConstArray(); - const uno::Reference< report::XReportComponent>* pEnd = pIter + _aShapes.getLength(); + const uno::Reference< report::XReportComponent>* pEnd = pIter + _aShapes.getLength(); for(;pIter != pEnd;++pIter) { - uno::Reference< report::XSection> xSection = (*pIter)->getSection(); + const uno::Reference< report::XSection> xSection = (*pIter)->getSection(); if ( xSection.is() ) { if ( bFirst ) @@ -799,35 +683,18 @@ void OViewsWindow::setMarked(const uno::Sequence< uno::Reference< report::XRepor bFirst = false; m_pParent->setMarked(xSection,_bMark); } - ::boost::shared_ptr<OReportSection> pSection = getReportSection(xSection); - if ( pSection ) + ::boost::shared_ptr<OSectionWindow> pSectionWindow = getReportSection(xSection); + if ( pSectionWindow ) { SvxShape* pShape = SvxShape::getImplementation( *pIter ); SdrObject* pObject = pShape ? pShape->GetSdrObject() : NULL; OSL_ENSURE( pObject, "OViewsWindow::setMarked: no SdrObject for the shape!" ); if ( pObject ) - pSection->getView()->MarkObj( pObject, pSection->getView()->GetSdrPageView(), !_bMark ); + pSectionWindow->getReportSection().getSectionView().MarkObj( pObject, pSectionWindow->getReportSection().getSectionView().GetSdrPageView(), !_bMark ); } } } } -//------------------------------------------------------------------------ -::boost::shared_ptr<OReportSection> OViewsWindow::getSection(const Point& _aPosition) -{ - ::boost::shared_ptr<OReportSection> pRet; - TSectionsMap::iterator aIter = m_aSections.begin(); - TSectionsMap::iterator aEnd = m_aSections.end(); - for (; aIter != aEnd ; ++aIter) - { - Rectangle aWorkArea((*aIter).first.first->ScreenToOutputPixel((*aIter).first.first->GetPosPixel()),(*aIter).first.first->GetOutputSizePixel()); - aWorkArea = (*aIter).first.first->PixelToLogic( aWorkArea ); - if ( aWorkArea.IsInside(_aPosition) ) - { - pRet = (*aIter).first.first; - } - } - return pRet; -} // ----------------------------------------------------------------------------- void OViewsWindow::collectRectangles(TRectangleMap& _rSortRectangles, bool _bBoundRects) { @@ -835,17 +702,17 @@ void OViewsWindow::collectRectangles(TRectangleMap& _rSortRectangles, bool _bBo TSectionsMap::iterator aEnd = m_aSections.end(); for (aIter = m_aSections.begin();aIter != aEnd ; ++aIter) { - OSectionView* pView = (*aIter).first.first->getView(); - if ( pView->AreObjectsMarked() ) + OSectionView& rView = (*aIter)->getReportSection().getSectionView(); + if ( rView.AreObjectsMarked() ) { - pView->SortMarkedObjects(); - const sal_uInt32 nCount = pView->GetMarkedObjectCount(); + rView.SortMarkedObjects(); + const sal_uInt32 nCount = rView.GetMarkedObjectCount(); for (sal_uInt32 i=0; i < nCount; ++i) { - const SdrMark* pM = pView->GetSdrMarkByIndex(i); + const SdrMark* pM = rView.GetSdrMarkByIndex(i); SdrObject* pObj = pM->GetMarkedSdrObj(); Rectangle aObjRect(_bBoundRects ? pObj->GetCurrentBoundRect() : pObj->GetSnapRect()); - _rSortRectangles.insert(TRectangleMap::value_type(aObjRect,TRectangleMap::mapped_type(pObj,pView))); + _rSortRectangles.insert(TRectangleMap::value_type(aObjRect,TRectangleMap::mapped_type(pObj,&rView))); } } } @@ -894,8 +761,8 @@ void OViewsWindow::collectBoundResizeRect(const TRectangleMap& _rSortRectangles, if ( ! bOnlyOnce ) { bOnlyOnce = true; - OReportSection* pReportSection = aRectIter->second.second->getSectionWindow(); - uno::Reference< report::XSection> xSection = pReportSection->getSection(); + OReportSection* pReportSection = aRectIter->second.second->getReportSection(); + const uno::Reference< report::XSection> xSection = pReportSection->getSection(); try { uno::Reference<report::XReportDefinition> xReportDefinition = xSection->getReportDefinition(); @@ -934,7 +801,7 @@ void OViewsWindow::alignMarkedObjects(sal_Int32 _nControlModification,bool _bAli case ControlModification::CENTER_VERTICAL : { eCompareMode = (ControlModification::CENTER_VERTICAL == _nControlModification) ? RectangleLess::POS_CENTER_VERTICAL : RectangleLess::POS_CENTER_HORIZONTAL; - uno::Reference<report::XSection> xSection = m_aSections.begin()->first.first->getSection(); + uno::Reference<report::XSection> xSection = (*m_aSections.begin())->getReportSection().getSection(); uno::Reference<report::XReportDefinition> xReportDefinition = xSection->getReportDefinition(); aRefPoint = Rectangle(getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_LEFTMARGIN),0, getStyleProperty<awt::Size>(xReportDefinition,PROPERTY_PAPERSIZE).Width - getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_RIGHTMARGIN), @@ -1075,9 +942,9 @@ void OViewsWindow::alignMarkedObjects(sal_Int32 _nControlModification,bool _bAli // ----------------------------------------------------------------------------- void OViewsWindow::createDefault() { - ::boost::shared_ptr<OReportSection> pSection = getMarkedSection(); - if ( pSection ) - pSection->createDefault(m_sShapeType); + ::boost::shared_ptr<OSectionWindow> pMarkedSection = getMarkedSection(); + if ( pMarkedSection ) + pMarkedSection->getReportSection().createDefault(m_sShapeType); } // ----------------------------------------------------------------------------- void OViewsWindow::setGridSnap(BOOL bOn) @@ -1086,8 +953,8 @@ void OViewsWindow::setGridSnap(BOOL bOn) TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd ; ++aIter) { - (*aIter).first.first->getView()->SetGridSnap(bOn); - (*aIter).first.first->Invalidate(); + (*aIter)->getReportSection().getSectionView().SetGridSnap(bOn); + (*aIter)->getReportSection().Invalidate(); } } // ----------------------------------------------------------------------------- @@ -1096,26 +963,23 @@ void OViewsWindow::setDragStripes(BOOL bOn) TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd ; ++aIter) - (*aIter).first.first->getView()->SetDragStripes(bOn); + (*aIter)->getReportSection().getSectionView().SetDragStripes(bOn); } // ----------------------------------------------------------------------------- BOOL OViewsWindow::isDragStripes() const { - if ( m_aSections.empty() ) - return FALSE; - return m_aSections.begin()->first.first->getView()->IsDragStripes(); + return !m_aSections.empty() && (*m_aSections.begin())->getReportSection().getSectionView().IsDragStripes(); } // ----------------------------------------------------------------------------- -USHORT OViewsWindow::getPosition(const OReportSection* _pSection) const +USHORT OViewsWindow::getPosition(const OSectionWindow* _pSectionWindow) const { TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); USHORT nPosition = 0; for (; aIter != aEnd ; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = (*aIter).first.first; - if (_pSection == pReportSection.get() ) + if ( _pSectionWindow == (*aIter).get() ) { break; } @@ -1124,12 +988,12 @@ USHORT OViewsWindow::getPosition(const OReportSection* _pSection) const return nPosition; } // ----------------------------------------------------------------------------- -::boost::shared_ptr<OReportSection> OViewsWindow::getSection(const USHORT _nPos) const +::boost::shared_ptr<OSectionWindow> OViewsWindow::getSectionWindow(const USHORT _nPos) const { - ::boost::shared_ptr<OReportSection> aReturn; + ::boost::shared_ptr<OSectionWindow> aReturn; if ( _nPos < m_aSections.size() ) - aReturn = m_aSections[_nPos].first.first; + aReturn = m_aSections[_nPos]; return aReturn; } @@ -1159,7 +1023,7 @@ namespace void operator() ( const OViewsWindow::TSectionsMap::value_type& _rhs ) { - OSectionView& rView( *_rhs.first.first->getView() ); + OSectionView& rView( _rhs->getReportSection().getSectionView() ); switch ( m_eAction ) { case eEndDragObj: @@ -1195,7 +1059,7 @@ void OViewsWindow::BrkAction() ::std::for_each( m_aSections.begin(), m_aSections.end(), ApplySectionViewAction(eBreakAction) ); } // ----------------------------------------------------------------------------- -void OViewsWindow::BegDragObj_createInvisibleObjectAtPosition(const Rectangle& _aRect, const OSectionView* _pSection) +void OViewsWindow::BegDragObj_createInvisibleObjectAtPosition(const Rectangle& _aRect, const OSectionView& _rSection) { TSectionsMap::iterator aIter = m_aSections.begin(); TSectionsMap::iterator aEnd = m_aSections.end(); @@ -1203,11 +1067,11 @@ void OViewsWindow::BegDragObj_createInvisibleObjectAtPosition(const Rectangle& _ for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - pReportSection->getPage()->setSpecialMode(); - OSectionView* pView = pReportSection->getView(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + rReportSection.getPage()->setSpecialMode(); + OSectionView& rView = rReportSection.getSectionView(); - if ( pView != _pSection ) + if ( &rView != &_rSection ) { // SdrRectObj *pNewObj = new SdrRectObj(OBJ_RECT, _aRect); // SdrObject *pNewObj = new SdrUnoObj(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Temp Label"))); @@ -1219,15 +1083,15 @@ void OViewsWindow::BegDragObj_createInvisibleObjectAtPosition(const Rectangle& _ // pNewObj->Move(Size(_aRect.Left(), _aRect.Top())); pNewObj->Move(Size(0, aNewPos.Y())); - pReportSection->getPage()->InsertObject(pNewObj); + rReportSection.getPage()->InsertObject(pNewObj); m_aBegDragTempList.push_back(pNewObj); Rectangle aRect = pNewObj->GetLogicRect(); // pNewObj->SetText(String::CreateFromAscii("Drag helper")); - pView->MarkObj( pNewObj, pView->GetSdrPageView() ); + rView.MarkObj( pNewObj, rView.GetSdrPageView() ); } } - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + const long nSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); aNewPos.Y() -= nSectionHeight; // aNewPos.Y() -= PixelToLogic(aIter->second.second->GetSizePixel()).Height(); } @@ -1260,11 +1124,11 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - OSectionView* pView = pReportSection->getView(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + OSectionView* pView = &rReportSection.getSectionView(); if (pView == _pSection) break; - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + const long nSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); aAbsolutePnt.Y() += nSectionHeight; } m_aDragDelta = Point(SAL_MAX_INT32, SAL_MAX_INT32); @@ -1280,16 +1144,16 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi Point aNewObjPos(0,0); for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; + OReportSection& rReportSection = (*aIter)->getReportSection(); - OSectionView* pView = pReportSection->getView(); + OSectionView& rView = rReportSection.getSectionView(); - if ( pView->AreObjectsMarked() ) + if ( rView.AreObjectsMarked() ) { - const sal_uInt32 nCount = pView->GetMarkedObjectCount(); + const sal_uInt32 nCount = rView.GetMarkedObjectCount(); for (sal_uInt32 i=0; i < nCount; ++i) { - const SdrMark* pM = pView->GetSdrMarkByIndex(i); + const SdrMark* pM = rView.GetSdrMarkByIndex(i); SdrObject* pObj = pM->GetMarkedSdrObj(); if (!isObjectInMyTempList(pObj)) { @@ -1297,7 +1161,7 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi aRect.Move(0, aNewObjPos.Y()); OSL_TRACE("BegDragObj createInvisible X:%d Y:%d on View #%d\n", aRect.Left(), aRect.Top(), nViewCount ); - BegDragObj_createInvisibleObjectAtPosition(aRect, pView); + BegDragObj_createInvisibleObjectAtPosition(aRect, rView); // calculate the clickpoint const sal_Int32 nDeltaX = abs(aRect.Left() - aAbsolutePnt.X()); @@ -1310,11 +1174,11 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi } } ++nViewCount; - Rectangle aClipRect = pView->GetWorkArea(); + Rectangle aClipRect = rView.GetWorkArea(); aClipRect.Top() = -aNewObjPos.Y(); - pView->SetWorkArea( aClipRect ); + rView.SetWorkArea( aClipRect ); - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + const long nSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); aNewObjPos.Y() += nSectionHeight; // don't subtract the height of the lines between the views @@ -1324,10 +1188,10 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi Point aNewPos = aAbsolutePnt; // for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) // { - // ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - // if ( pReportSection->getView() == _pSection ) + // OReportSection& rReportSection = (*aIter)->getReportSection(); + // if ( &rReportSection.getSectionView() == _pSection ) // break; - // aNewPos.Y() += pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + // aNewPos.Y() += rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); // } const short nDrgLog = static_cast<short>(PixelToLogic(Size(3,0)).Width()); @@ -1336,16 +1200,16 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi nViewCount = 0; for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; + OReportSection& rReportSection = (*aIter)->getReportSection(); - // if ( pReportSection->getView() == _pSection ) + // if ( &rReportSection.getSectionView() == _pSection ) // { // bAdd = false; // aNewPos = _aPnt; // } // else if ( bAdd ) // { - // const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + // const long nSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); // aNewPos.Y() += nSectionHeight; // } // else @@ -1357,19 +1221,19 @@ void OViewsWindow::BegDragObj(const Point& _aPnt, SdrHdl* _pHdl,const OSectionVi SdrHdl* pHdl = _pHdl; if ( pHdl ) { - if ( pReportSection->getView() != _pSection ) + if ( &rReportSection.getSectionView() != _pSection ) { - const SdrHdlList& rHdlList = pReportSection->getView()->GetHdlList(); + const SdrHdlList& rHdlList = rReportSection.getSectionView().GetHdlList(); pHdl = rHdlList.GetHdl(_pHdl->GetKind()); } } OSL_TRACE("BegDragObj X:%d Y:%d on View#%d\n", aNewPos.X(), aNewPos.Y(), nViewCount++ ); - pReportSection->getView()->BegDragObj(aNewPos, (OutputDevice*)NULL, pHdl, nDrgLog, NULL); + rReportSection.getSectionView().BegDragObj(aNewPos, (OutputDevice*)NULL, pHdl, nDrgLog, NULL); - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + const long nSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); aNewPos.Y() -= nSectionHeight; // subtract the height between the views, because they are visible but not from interest here. - aNewPos.Y() -= PixelToLogic(aIter->second.second->GetSizePixel()).Height(); + // aNewPos.Y() -= PixelToLogic(aIter->second.second->GetSizePixel()).Height(); } } @@ -1389,25 +1253,25 @@ void OViewsWindow::BegMarkObj(const Point& _aPnt,const OSectionView* _pSection) long nLastSectionHeight = 0; for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - if ( pReportSection->getView() == _pSection ) + OReportSection& rReportSection = (*aIter)->getReportSection(); + if ( &rReportSection.getSectionView() == _pSection ) { bAdd = false; aNewPos = _aPnt; // 2,2 } else if ( bAdd ) { - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + const long nSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); aNewPos.Y() += nSectionHeight; } else { aNewPos.Y() -= nLastSectionHeight; } - pReportSection->getView()->BegMarkObj ( aNewPos ); - nLastSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + rReportSection.getSectionView().BegMarkObj ( aNewPos ); + nLastSectionHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); - aNewPos.Y() -= PixelToLogic(aIter->second.second->GetSizePixel()).Height(); + // aNewPos.Y() -= PixelToLogic(aIter->second.second->GetSizePixel()).Height(); } //::std::for_each( m_aSections.begin(), m_aSections.end(), ApplySectionViewAction( _aPnt , eMarkAction) ); } @@ -1420,8 +1284,8 @@ OSectionView* OViewsWindow::getSectionRelativeToPosition(const OSectionView* _pS const TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd ; ++aIter,++nCount) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - if ( pReportSection->getView() == _pSection) + OReportSection& rReportSection = (*aIter)->getReportSection(); + if ( &rReportSection.getSectionView() == _pSection) break; } OSL_ENSURE(aIter != aEnd,"This can never happen!"); @@ -1431,30 +1295,30 @@ OSectionView* OViewsWindow::getSectionRelativeToPosition(const OSectionView* _pS --aIter; for (; nCount && (_rPnt.Y() < 0); --nCount) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - _rPnt.Y() += pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + _rPnt.Y() += rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); if ( (nCount -1) > 0 && (_rPnt.Y() < 0) ) --aIter; } if ( nCount == 0 ) - pSection = m_aSections.begin()->first.first->getView(); + pSection = &(*m_aSections.begin())->getReportSection().getSectionView(); else - pSection = aIter->first.first->getView(); + pSection = &(*aIter)->getReportSection().getSectionView(); } else { for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - const long nHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + const long nHeight = rReportSection.PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); if ( (_rPnt.Y() - nHeight) < 0 ) break; _rPnt.Y() -= nHeight; } if ( aIter != aEnd ) - pSection = aIter->first.first->getView(); + pSection = &(*aIter)->getReportSection().getSectionView(); else - pSection = (aEnd-1)->first.first->getView(); + pSection = &(*(aEnd-1))->getReportSection().getSectionView(); } return pSection; @@ -1467,8 +1331,8 @@ void OViewsWindow::EndDragObj_removeInvisibleObjects() for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - pReportSection->getPage()->resetSpecialMode(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + rReportSection.getPage()->resetSpecialMode(); } } // ----------------------------------------------------------------------------- @@ -1494,11 +1358,11 @@ void OViewsWindow::EndDragObj(BOOL _bControlKeyPressed, const OSectionView* _pSe const TSectionsMap::iterator aEnd = m_aSections.end(); for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - if ( pInSection != pReportSection->getView() ) + OReportSection& rReportSection = (*aIter)->getReportSection(); + if ( pInSection != &rReportSection.getSectionView() ) { - pReportSection->getView()->BrkAction(); - pReportSection->Copy(aAllreadyCopiedObjects,true); + rReportSection.getSectionView().BrkAction(); + rReportSection.Copy(aAllreadyCopiedObjects,true); } else pInSection->EndDragObj(FALSE); @@ -1553,7 +1417,7 @@ void OViewsWindow::EndDragObj(BOOL _bControlKeyPressed, const OSectionView* _pSe catch(uno::Exception&) { } - pInSection->getSectionWindow()->Paste(aAllreadyCopiedObjects,true); + pInSection->getReportSection()->Paste(aAllreadyCopiedObjects,true); } } else @@ -1589,14 +1453,12 @@ void OViewsWindow::MovAction(const Point& _aPnt,const OSectionView* _pSection,bo //{ for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - if ( pReportSection->getView() == _pSection ) + OReportSection& rReportSection = (*aIter)->getReportSection(); + if ( &rReportSection.getSectionView() == _pSection ) break; - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + const long nSectionHeight = (*aIter)->PixelToLogic(rReportSection.GetOutputSizePixel()).Height(); aCurrentSectionPos.Y() += nSectionHeight; - const long nSectionSeparator = PixelToLogic(aIter->second.second->GetSizePixel()).Height(); - aCurrentSectionPos.Y() += nSectionSeparator; - } + } // for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) //} aRealMousePos += aCurrentSectionPos; @@ -1604,24 +1466,23 @@ void OViewsWindow::MovAction(const Point& _aPnt,const OSectionView* _pSection,bo Point aPosForWorkArea(0,0); for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - OSectionView* pView = pReportSection->getView(); - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); - const long nSeparatorHeight = PixelToLogic(aIter->second.second->GetSizePixel()).Height(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + OSectionView& rView = rReportSection.getSectionView(); + const long nSectionHeight = (*aIter)->PixelToLogic((*aIter)->GetOutputSizePixel()).Height(); if (_bControlKeySet) { - Rectangle aClipRect = pView->GetWorkArea(); - aClipRect.Top() = aCurrentSectionPos.Y() - aPosForWorkArea.Y() - nSeparatorHeight; + Rectangle aClipRect = rView.GetWorkArea(); + aClipRect.Top() = aCurrentSectionPos.Y() - aPosForWorkArea.Y(); // if (aClipRect.Top() < 0) aClipRect.Top() = 0; aClipRect.Bottom() = aClipRect.Top() + nSectionHeight; - pView->SetWorkArea( aClipRect ); + rView.SetWorkArea( aClipRect ); } else { - Rectangle aClipRect = pView->GetWorkArea(); + Rectangle aClipRect = rView.GetWorkArea(); aClipRect.Top() = -aPosForWorkArea.Y(); - pView->SetWorkArea( aClipRect ); + rView.SetWorkArea( aClipRect ); } aPosForWorkArea.Y() += nSectionHeight; // aNewPos.Y() += PixelToLogic(aIter->second.second->GetSizePixel()).Height(); @@ -1630,19 +1491,15 @@ void OViewsWindow::MovAction(const Point& _aPnt,const OSectionView* _pSection,bo for (aIter = m_aSections.begin(); aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; - SdrHdl* pCurrentHdl = pReportSection->getView()->GetDragHdl(); + OReportSection& rReportSection = (*aIter)->getReportSection(); + SdrHdl* pCurrentHdl = rReportSection.getSectionView().GetDragHdl(); if ( pCurrentHdl ) { aRealMousePos = _aPnt + pCurrentHdl->GetPos() - aHdlPos; } - pReportSection->getView()->MovAction ( aRealMousePos ); - // if ( _bMove ) - // { - const long nSectionHeight = pReportSection->PixelToLogic(pReportSection->GetOutputSizePixel()).Height(); + rReportSection.getSectionView().MovAction ( aRealMousePos ); + const long nSectionHeight = (*aIter)->PixelToLogic((*aIter)->GetOutputSizePixel()).Height(); aRealMousePos.Y() -= nSectionHeight; - aRealMousePos.Y() -= PixelToLogic(aIter->second.second->GetSizePixel()).Height(); - // } } } // ----------------------------------------------------------------------------- @@ -1652,7 +1509,7 @@ BOOL OViewsWindow::IsAction() const TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); for (; !bAction && aIter != aEnd; ++aIter) - bAction = aIter->first.first->getView()->IsAction(); + bAction = (*aIter)->getReportSection().getSectionView().IsAction(); return bAction; } // ----------------------------------------------------------------------------- @@ -1662,7 +1519,7 @@ BOOL OViewsWindow::IsDragObj() const TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); for (; !bAction && aIter != aEnd; ++aIter) - bAction = aIter->first.first->getView()->IsAction(); + bAction = (*aIter)->getReportSection().getSectionView().IsAction(); return bAction; } // ----------------------------------------------------------------------------- @@ -1672,7 +1529,7 @@ sal_uInt32 OViewsWindow::getMarkedObjectCount() const TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); for (; aIter != aEnd; ++aIter) - nCount += aIter->first.first->getView()->GetMarkedObjectCount(); + nCount += (*aIter)->getReportSection().getSectionView().GetMarkedObjectCount(); return nCount; } // ----------------------------------------------------------------------------- @@ -1692,7 +1549,7 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) TSectionsMap::const_iterator aEnd = m_aSections.end(); for (; aIter != aEnd; ++aIter) { - ::boost::shared_ptr<OReportSection> pReportSection = aIter->first.first; + OReportSection& rReportSection = (*aIter)->getReportSection(); long nX = 0; long nY = 0; @@ -1705,12 +1562,12 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) else if ( nCode == KEY_RIGHT ) nX = 1; - if ( pReportSection->getView()->AreObjectsMarked() ) + if ( rReportSection.getSectionView().AreObjectsMarked() ) { if ( _rCode.IsMod2() ) { // move in 1 pixel distance - const Size aPixelSize = pReportSection->PixelToLogic( Size( 1, 1 ) ); + const Size aPixelSize = rReportSection.PixelToLogic( Size( 1, 1 ) ); nX *= aPixelSize.Width(); nY *= aPixelSize.Height(); } @@ -1721,23 +1578,23 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) nY *= DEFAUL_MOVE_SIZE; } - OSectionView* pView = pReportSection->getView(); - const SdrHdlList& rHdlList = pView->GetHdlList(); + OSectionView& rView = rReportSection.getSectionView(); + const SdrHdlList& rHdlList = rView.GetHdlList(); SdrHdl* pHdl = rHdlList.GetFocusHdl(); if ( pHdl == 0 ) { // no handle selected - if ( pView->IsMoveAllowed() ) + if ( rView.IsMoveAllowed() ) { // restrict movement to work area - Rectangle rWorkArea = pView->GetWorkArea(); + Rectangle rWorkArea = rView.GetWorkArea(); if ( !rWorkArea.IsEmpty() ) { if ( rWorkArea.Top() < 0 ) rWorkArea.Top() = 0; - Rectangle aMarkRect( pView->GetMarkedObjRect() ); + Rectangle aMarkRect( rView.GetMarkedObjRect() ); aMarkRect.Move( nX, nY ); if ( !rWorkArea.IsInside( aMarkRect ) ) @@ -1755,21 +1612,21 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) nY -= aMarkRect.Bottom() - rWorkArea.Bottom(); } bool bCheck = false; - const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); + const SdrMarkList& rMarkList = rView.GetMarkedObjectList(); for (sal_uInt32 i = 0; !bCheck && i < rMarkList.GetMarkCount();++i ) { SdrMark* pMark = rMarkList.GetMark(i); bCheck = dynamic_cast<OUnoObject*>(pMark->GetMarkedSdrObj()) != NULL; } - if ( bCheck && isOver(aMarkRect,*pReportSection->getPage(),*pView) ) + if ( bCheck && isOver(aMarkRect,*rReportSection.getPage(),rView) ) break; } if ( nX != 0 || nY != 0 ) { - pView->MoveAllMarked( Size( nX, nY ) ); - pView->MakeVisible( pView->GetAllMarkedRect(), *pReportSection); + rView.MoveAllMarked( Size( nX, nY ) ); + rView.MakeVisible( rView.GetAllMarkedRect(), rReportSection); } } } @@ -1780,25 +1637,25 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) { const Point aStartPoint( pHdl->GetPos() ); const Point aEndPoint( pHdl->GetPos() + Point( nX, nY ) ); - const SdrDragStat& rDragStat = pView->GetDragStat(); + const SdrDragStat& rDragStat = rView.GetDragStat(); // start dragging - pView->BegDragObj( aStartPoint, 0, pHdl, 0 ); + rView.BegDragObj( aStartPoint, 0, pHdl, 0 ); - if ( pView->IsDragObj() ) + if ( rView.IsDragObj() ) { const FASTBOOL bWasNoSnap = rDragStat.IsNoSnap(); - const BOOL bWasSnapEnabled = pView->IsSnapEnabled(); + const BOOL bWasSnapEnabled = rView.IsSnapEnabled(); // switch snapping off if ( !bWasNoSnap ) ((SdrDragStat&)rDragStat).SetNoSnap( TRUE ); if ( bWasSnapEnabled ) - pView->SetSnapEnabled( FALSE ); + rView.SetSnapEnabled( FALSE ); Rectangle aNewRect; bool bCheck = false; - const SdrMarkList& rMarkList = pView->GetMarkedObjectList(); + const SdrMarkList& rMarkList = rView.GetMarkedObjectList(); for (sal_uInt32 i = 0; !bCheck && i < rMarkList.GetMarkCount();++i ) { SdrMark* pMark = rMarkList.GetMark(i); @@ -1826,23 +1683,23 @@ void OViewsWindow::handleKey(const KeyCode& _rCode) default: break; } - if ( !(bCheck && isOver(aNewRect,*pReportSection->getPage(),*pView)) ) - pView->MovAction(aEndPoint); - pView->EndDragObj(); + if ( !(bCheck && isOver(aNewRect,*rReportSection.getPage(),rView)) ) + rView.MovAction(aEndPoint); + rView.EndDragObj(); // restore snap if ( !bWasNoSnap ) ((SdrDragStat&)rDragStat).SetNoSnap( bWasNoSnap ); if ( bWasSnapEnabled ) - pView->SetSnapEnabled( bWasSnapEnabled ); + rView.SetSnapEnabled( bWasSnapEnabled ); } // make moved handle visible const Rectangle aVisRect( aEndPoint - Point( DEFAUL_MOVE_SIZE, DEFAUL_MOVE_SIZE ), Size( 200, 200 ) ); - pView->MakeVisible( aVisRect, *pReportSection); + rView.MakeVisible( aVisRect, rReportSection); } } - pView->AdjustMarkHdl(); + rView.AdjustMarkHdl(); } } } @@ -1853,13 +1710,87 @@ void OViewsWindow::stopScrollTimer() ::std::compose1(::boost::mem_fn(&OReportSection::stopScrollTimer),TReportPairHelper())); } // ----------------------------------------------------------------------------- +void OViewsWindow::fillCollapsedSections(::std::vector<sal_uInt16>& _rCollapsedPositions) const +{ + TSectionsMap::const_iterator aIter = m_aSections.begin(); + TSectionsMap::const_iterator aEnd = m_aSections.end(); + for (sal_uInt16 i = 0;aIter != aEnd ; ++aIter,++i) + { + if ( (*aIter)->getStartMarker().isCollapsed() ) + _rCollapsedPositions.push_back(i); + } +} +// ----------------------------------------------------------------------------- +void OViewsWindow::collapseSections(const uno::Sequence< beans::PropertyValue>& _aCollpasedSections) +{ + const beans::PropertyValue* pIter = _aCollpasedSections.getConstArray(); + const beans::PropertyValue* pEnd = pIter + _aCollpasedSections.getLength(); + for (; pIter != pEnd; ++pIter) + { + sal_uInt16 nPos = sal_uInt16(-1); + if ( (pIter->Value >>= nPos) && nPos < m_aSections.size() ) + { + m_aSections[nPos]->setCollapsed(sal_True); + } + } +} +// ----------------------------------------------------------------------------- +void OViewsWindow::zoom(const sal_Int16 _nZoom) +{ + Fraction aStartWith(long(REPORT_STARTMARKER_WIDTH)); + aStartWith *= GetMapMode().GetScaleX(); + + setZoomFactor(_nZoom,*this); + + TSectionsMap::iterator aIter = m_aSections.begin(); + TSectionsMap::iterator aEnd = m_aSections.end(); + for (;aIter != aEnd ; ++aIter) + { + (*aIter)->zoom(_nZoom); + } // for (;aIter != aEnd ; ++aIter) + + Resize(); + + Size aOut = GetOutputSizePixel(); + aOut.Width() = aStartWith; + aOut = PixelToLogic(aOut); + + Rectangle aRect(PixelToLogic(Point(0,0)),aOut); + Invalidate(aRect,/*INVALIDATE_NOERASE | */INVALIDATE_NOCHILDREN /*| INVALIDATE_TRANSPARENT*/); +} +//---------------------------------------------------------------------------- +void OViewsWindow::scrollChildren(long _nDeltaX, long _nDeltaY) +{ + const Size aDelta( PixelToLogic(Size(_nDeltaX,_nDeltaY)) ); + if ( _nDeltaY ) + { + MapMode aMap = GetMapMode(); + Point aOrg = aMap.GetOrigin(); + aMap.SetOrigin( Point(aOrg.X() , aOrg.Y() - _nDeltaY)); + SetMapMode( aMap ); + OWindowPositionCorrector aCorrector(this,0,-_nDeltaY); + Scroll(0,-aDelta.Height(),SCROLL_CHILDREN); + Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_TRANSPARENT); + } + + if ( _nDeltaX ) + { + TSectionsMap::iterator aIter = m_aSections.begin(); + TSectionsMap::iterator aEnd = m_aSections.end(); + for (;aIter != aEnd ; ++aIter) + { + (*aIter)->scrollChildren(_nDeltaX); + } // for (;aIter != aEnd ; ++aIter) + } +} +// ----------------------------------------------------------------------------- void OViewsWindow::fillControlModelSelection(::std::vector< uno::Reference< uno::XInterface > >& _rSelection) const { TSectionsMap::const_iterator aIter = m_aSections.begin(); TSectionsMap::const_iterator aEnd = m_aSections.end(); for(;aIter != aEnd; ++aIter) { - aIter->first.first->fillControlModelSelection(_rSelection); + (*aIter)->getReportSection().fillControlModelSelection(_rSelection); } } //============================================================================== |