summaryrefslogtreecommitdiffstats
path: root/reportdesign/source/ui/report/ReportWindow.cxx
diff options
context:
space:
mode:
authorRĂ¼diger Timm <rt@openoffice.org>2007-07-09 10:56:41 +0000
committerRĂ¼diger Timm <rt@openoffice.org>2007-07-09 10:56:41 +0000
commit94ccba3eebc83b58e74e18f0e028c6a995ce6aa6 (patch)
tree1b0341ba73e54b771a58b636bff8c60c0f6beeaf /reportdesign/source/ui/report/ReportWindow.cxx
parent#i79375# Avoid warning ('directValue' may be used uninitialized in this funct... (diff)
downloadcore-94ccba3eebc83b58e74e18f0e028c6a995ce6aa6.tar.gz
core-94ccba3eebc83b58e74e18f0e028c6a995ce6aa6.zip
Bring module to HEAD.
Diffstat (limited to 'reportdesign/source/ui/report/ReportWindow.cxx')
-rw-r--r--reportdesign/source/ui/report/ReportWindow.cxx535
1 files changed, 535 insertions, 0 deletions
diff --git a/reportdesign/source/ui/report/ReportWindow.cxx b/reportdesign/source/ui/report/ReportWindow.cxx
new file mode 100644
index 000000000000..b482b247741d
--- /dev/null
+++ b/reportdesign/source/ui/report/ReportWindow.cxx
@@ -0,0 +1,535 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: ReportWindow.cxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: rt $ $Date: 2007-07-09 11:56:33 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+#include "precompiled_reportdesign.hxx"
+
+#ifndef RPTUI_REPORT_WINDOW_HXX
+#include "ReportWindow.hxx"
+#endif
+#ifndef REPORT_REPORTSECTION_HXX
+#include "ReportSection.hxx"
+#endif
+#ifndef _REPORT_SECTIONVIEW_HXX
+#include "SectionView.hxx"
+#endif
+#ifndef RPTUI_SECTIONSWINDOW_HXX
+#include "SectionsWindow.hxx"
+#endif
+#ifndef RPTUI_VIEWSWINDOW_HXX
+#include "ViewsWindow.hxx"
+#endif
+#ifndef RPTUI_RULER_HXX
+#include "ReportRuler.hxx"
+#endif
+#ifndef RPTUI_DESIGNVIEW_HXX
+#include "DesignView.hxx"
+#endif
+#ifndef _TOOLS_DEBUG_HXX
+#include <tools/debug.hxx>
+#endif
+#ifndef INCLUDED_SVTOOLS_COLORCFG_HXX
+#include <svtools/colorcfg.hxx>
+#endif
+#ifndef _REPORT_RPTUIDEF_HXX
+#include <RptDef.hxx>
+#endif
+#ifndef _REPORT_RPTUIFUNC_HXX
+#include "dlgedfunc.hxx"
+#endif
+
+#ifndef REPORT_RPTMODEL_HXX
+#include <RptModel.hxx>
+#endif
+#ifndef REPORTDESIGN_SHARED_UISTRINGS_HRC
+#include "uistrings.hrc"
+#endif
+#ifndef _REPORT_RPTUIPAGE_HXX
+#include "RptPage.hxx"
+#endif
+#ifndef RPTUI_REPORTCONTROLLER_HXX
+#include "ReportController.hxx"
+#endif
+#ifndef RPTUI_ENDMARKER_HXX
+#include "EndMarker.hxx"
+#endif
+#ifndef _SFXITEMPOOL_HXX
+#include <svtools/itempool.hxx>
+#endif
+#ifndef RPTUI_COLORCHANGER_HXX
+#include "ColorChanger.hxx"
+#endif
+#ifndef RPTUI_SCROLLHELPER_HXX
+#include "ScrollHelper.hxx"
+#endif
+#ifndef _SV_SPLIT_HXX
+#include <vcl/split.hxx>
+#endif
+#ifndef RTPUI_REPORTDESIGN_HELPID_HRC
+#include "helpids.hrc"
+#endif
+#ifndef _REPORT_RPTUIFAC_HXX
+#include "dlgedfac.hxx"
+#endif
+#include <boost/bind.hpp>
+
+#define SECTION_OFFSET 3
+namespace rptui
+{
+using namespace ::com::sun::star;
+using namespace ::comphelper;
+//==================================================================
+// class OReportWindow
+//==================================================================
+DBG_NAME( rpt_OReportWindow )
+//------------------------------------------------------------------------------
+OReportWindow::OReportWindow(OScrollWindowHelper* _pParent,ODesignView* _pView)
+: Window(_pParent,WB_DIALOGCONTROL)
+,m_aHRuler(this)
+,m_pView(_pView)
+,m_pParent(_pParent)
+{
+ DBG_CTOR( rpt_OReportWindow,NULL);
+ SetUniqueId(UID_REPORTWINDOW);
+ SetMapMode( MapMode( MAP_100TH_MM ) );
+
+ m_pSections = new OSectionsWindow(this,this);
+ m_pSections->Show();
+ m_pViews = new OViewsWindow(this,this);
+ m_pViews->Show();
+
+ m_pSections->SetZOrder(m_pViews,WINDOW_ZORDER_BEFOR);
+
+ m_aHRuler.Show();
+ m_aHRuler.Activate();
+ m_aHRuler.SetPagePos(0);
+ m_aHRuler.SetBorders();
+ m_aHRuler.SetIndents();
+ m_aHRuler.SetMargin1();
+ m_aHRuler.SetMargin2();
+
+ m_pObjFac = new DlgEdFactory();
+
+ ImplInitSettings();
+}
+//------------------------------------------------------------------------------
+OReportWindow::~OReportWindow()
+{
+ DBG_DTOR( rpt_OReportWindow,NULL);
+ {
+ ::std::auto_ptr<Window> aTemp(m_pSections);
+ m_pSections = NULL;
+ }
+ {
+ ::std::auto_ptr<Window> aTemp(m_pViews);
+ m_pViews = NULL;
+ }
+ delete m_pObjFac;
+}
+// -----------------------------------------------------------------------------
+void OReportWindow::initialize()
+{
+ if ( m_pViews )
+ m_pViews->initialize();
+}
+//----------------------------------------------------------------------------
+void OReportWindow::SetInsertObj( USHORT eObj,const ::rtl::OUString& _sShapeType )
+{
+ if ( m_pViews )
+ m_pViews->SetInsertObj( eObj,_sShapeType);
+}
+//------------------------------------------------------------------------------
+void OReportWindow::SetMode( DlgEdMode eNewMode )
+{
+ if ( m_pViews )
+ m_pViews->SetMode(eNewMode);
+}
+//----------------------------------------------------------------------------
+void OReportWindow::removeSection(USHORT _nPosition)
+{
+ m_pViews->removeSection(_nPosition);
+ m_pSections->removeSection(_nPosition);
+ m_pParent->setTotalSize(GetTotalWidth(),GetTotalHeight());
+ m_pSections->Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_TRANSPARENT);
+ m_pViews->Invalidate(INVALIDATE_NOCHILDREN);
+ //Resize();
+}
+//----------------------------------------------------------------------------
+void OReportWindow::addSection(const uno::Reference< report::XSection >& _xSection,const ::rtl::OUString& _sColorEntry,USHORT _nPosition)
+{
+ if ( !_xSection.is() )
+ return;
+
+ m_pSections->addSection(_xSection,_sColorEntry,_nPosition);
+ m_pViews->addSection(_xSection,_sColorEntry,_nPosition);
+
+ Resize();
+ m_pParent->setTotalSize(GetTotalWidth(),GetTotalHeight());
+}
+//------------------------------------------------------------------------------
+IMPL_LINK( OReportWindow, Collapsed, OStartMarker *, _pMarker )
+{
+ if ( _pMarker && m_pSections && m_pViews )
+ {
+ m_pViews->showView(m_pSections->find(_pMarker),!_pMarker->isCollapsed());
+
+ m_pViews->Resize();
+ m_pViews->Invalidate(INVALIDATE_NOCHILDREN);
+ m_pSections->Resize();
+ _pMarker->Invalidate();
+ m_pSections->Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_TRANSPARENT);
+ }
+ return 0L;
+}
+//------------------------------------------------------------------------------
+void OReportWindow::toggleGrid(sal_Bool _bVisible)
+{
+ if ( m_pViews )
+ m_pViews->toggleGrid(_bVisible);
+}
+//----------------------------------------------------------------------------
+void OReportWindow::showRuler(sal_Bool _bShow)
+{
+ m_aHRuler.Show(_bShow);
+ if ( m_pSections )
+ m_pSections->showRuler(_bShow);
+}
+//------------------------------------------------------------------------------
+sal_Int32 OReportWindow::getMaxMarkerWidth(sal_Bool _bWithEnd) const
+{
+ return REPORT_STARTMARKER_WIDTH + ( _bWithEnd ? REPORT_ENDMARKER_WIDTH : 0 );
+}
+//------------------------------------------------------------------------------
+sal_Int32 OReportWindow::GetTotalWidth() const
+{
+ sal_Int32 nWidth = 0;
+ if ( m_pViews && !m_pViews->empty() )
+ {
+ const sal_Int32 nPaperWidth = getStyleProperty<awt::Size>(m_pView->getController()->getReportDefinition(),PROPERTY_PAPERSIZE).Width;
+ const Size aPageSize = LogicToPixel(Size(nPaperWidth,0),MAP_100TH_MM);
+ nWidth = aPageSize.Width()
+ + REPORT_ENDMARKER_WIDTH + REPORT_STARTMARKER_WIDTH;
+ }
+ return nWidth;
+}
+//------------------------------------------------------------------------------
+void OReportWindow::Resize()
+{
+ Window::Resize();
+ if ( m_pView->getController() && m_pViews && !m_pViews->empty() && m_pSections )
+ {
+ const Size aTotalOutputSize = GetOutputSizePixel();
+
+ Point aStartPoint(REPORT_STARTMARKER_WIDTH,0);
+ uno::Reference<report::XReportDefinition> xReportDefinition = getReportView()->getController()->getReportDefinition();
+ const sal_Int32 nPaperWidth = getStyleProperty<awt::Size>(xReportDefinition,PROPERTY_PAPERSIZE).Width;
+ sal_Int32 nLeftMargin = getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_LEFTMARGIN);
+ sal_Int32 nRightMargin = getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_RIGHTMARGIN);
+ Size aPageSize = LogicToPixel(Size(nPaperWidth,0),MAP_100TH_MM);
+ nLeftMargin = LogicToPixel(Size(nLeftMargin,0),MAP_100TH_MM).Width();
+ nRightMargin = LogicToPixel(Size(nRightMargin,0),MAP_100TH_MM).Width();
+
+ aPageSize.Height() = m_aHRuler.GetSizePixel().Height();
+
+ const long nTermp(m_pViews->getTotalHeight() + aPageSize.Height());
+ long nSectionsHeight = ::std::max<long>(nTermp,aTotalOutputSize.getHeight());
+ m_pSections->SetPosSizePixel(Point(0,aPageSize.Height()),Size(REPORT_STARTMARKER_WIDTH,nSectionsHeight));
+
+ m_aHRuler.SetPosSizePixel(aStartPoint,aPageSize);
+ m_aHRuler.SetNullOffset(nLeftMargin);
+ m_aHRuler.SetMargin1(0);
+ m_aHRuler.SetMargin2(aPageSize.Width() - nLeftMargin - nRightMargin);
+
+ aStartPoint.Y() += aPageSize.Height();
+ nSectionsHeight -= aStartPoint.Y();
+
+ //m_pViews->SetPosSizePixel(aStartPoint,Size(GetTotalWidth() - aStartPoint.X(),nSectionsHeight));
+ m_pViews->SetPosSizePixel(aStartPoint,Size(GetTotalWidth(),nSectionsHeight));
+ }
+}
+//------------------------------------------------------------------------------
+Point OReportWindow::getScrollOffset() const
+{
+ return m_pParent->getScrollOffset();
+}
+//------------------------------------------------------------------------------
+void OReportWindow::ImplInitSettings()
+{
+ SetBackground( );
+}
+//-----------------------------------------------------------------------------
+void OReportWindow::DataChanged( const DataChangedEvent& rDCEvt )
+{
+ Window::DataChanged( rDCEvt );
+
+ if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
+ (rDCEvt.GetFlags() & SETTINGS_STYLE) )
+ {
+ ImplInitSettings();
+ Invalidate();
+ }
+}
+//------------------------------------------------------------------------------
+sal_Int32 OReportWindow::getSplitterHeight() const
+{
+ sal_Int32 nRet = 0;
+ if ( m_pViews )
+ nRet = m_pViews->getSplitterHeight();
+ return nRet;
+}
+//------------------------------------------------------------------------------
+void OReportWindow::setTotalSize()
+{
+}
+//------------------------------------------------------------------------------
+sal_Int32 OReportWindow::GetTotalHeight() const
+{
+ sal_Int32 nHeight = m_aHRuler.GetSizePixel().Height();
+ if ( m_pViews )
+ nHeight += m_pViews->getTotalHeight();
+ return nHeight;
+}
+//------------------------------------------------------------------------------
+namespace
+{
+ class OWindowPositionCorrector
+ {
+ ::std::vector< ::std::pair<Window*,Point> > m_aChildren;
+ long m_nDeltaX;
+ long m_nDeltaY;
+ public:
+ OWindowPositionCorrector(Window* _pWindow,long _nDeltaX, long _nDeltaY) :m_nDeltaX(_nDeltaX), m_nDeltaY(_nDeltaY)
+ {
+ USHORT nCount = _pWindow->GetChildCount();
+ m_aChildren.reserve(nCount);
+ while( nCount )
+ {
+ Window* pChild = _pWindow->GetChild(--nCount);
+ m_aChildren.push_back(::std::pair<Window*,Point>(pChild,pChild->GetPosPixel()));
+ }
+ }
+ ~OWindowPositionCorrector()
+ {
+ ::std::vector< ::std::pair<Window*,Point> >::iterator aIter = m_aChildren.begin();
+ ::std::vector< ::std::pair<Window*,Point> >::iterator aEnd = m_aChildren.end();
+ for (; aIter != aEnd; ++aIter)
+ {
+ const Point aPos = aIter->first->GetPosPixel();
+ if ( aPos == aIter->second )
+ aIter->first->SetPosPixel(Point(m_nDeltaX,m_nDeltaY) + aPos);
+ }
+ }
+ };
+}
+//----------------------------------------------------------------------------
+void OReportWindow::ScrollChildren(long nDeltaX, long nDeltaY)
+{
+ MapMode aMap = m_aHRuler.GetMapMode();
+ Point aOrg( aMap.GetOrigin() );
+ aMap.SetOrigin( Point(aOrg.X() - nDeltaX, aOrg.Y()));
+ m_aHRuler.SetMapMode( aMap );
+ m_aHRuler.Scroll(-nDeltaX,0);
+
+ if ( m_pViews )
+ {
+ aMap = m_pViews->GetMapMode();
+ aOrg = aMap.GetOrigin();
+ aMap.SetOrigin( Point(aOrg.X() - nDeltaX, aOrg.Y() - nDeltaY));
+ m_pViews->SetMapMode( aMap );
+ const Size aDelta( PixelToLogic(Size(nDeltaX,nDeltaY)) );
+ OWindowPositionCorrector aCorrector(m_pViews,-nDeltaX,-nDeltaY);
+ m_pViews->Scroll(-aDelta.Width(),-aDelta.Height(),SCROLL_CHILDREN);
+ } // if ( m_pViews )
+ if ( m_pSections && nDeltaY )
+ {
+ aMap = m_pSections->GetMapMode();
+ aOrg = aMap.GetOrigin();
+ aMap.SetOrigin( Point(aOrg.X(), aOrg.Y() - nDeltaY));
+ m_pSections->SetMapMode( aMap );
+ const Size aDelta( PixelToLogic(Size(0,nDeltaY)) );
+ OWindowPositionCorrector aCorrector(m_pSections,0,-nDeltaY);
+ m_pSections->Scroll(0,-aDelta.Height(),SCROLL_CHILDREN);
+ m_pSections->Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_TRANSPARENT);
+ } // if ( m_pSections )
+}
+//----------------------------------------------------------------------------
+USHORT OReportWindow::getSectionCount() const
+{
+ USHORT nRet = 0;
+ if ( m_pViews )
+ nRet = m_pViews->getSectionCount();
+ return nRet;
+}
+//----------------------------------------------------------------------------
+sal_Int32 OReportWindow::getMinHeight(USHORT _nPos) const
+{
+ return m_pSections ? m_pSections->getMinHeight(_nPos) : sal_Int32(0);
+}
+//----------------------------------------------------------------------------
+void OReportWindow::notifyHeightChanged()
+{
+ m_pParent->setTotalSize(GetTotalWidth(),GetTotalHeight());
+ Resize();
+ Invalidate(INVALIDATE_TRANSPARENT);
+}
+//----------------------------------------------------------------------------
+BOOL OReportWindow::HasSelection()
+{
+ return m_pViews && m_pViews->HasSelection();
+}
+//----------------------------------------------------------------------------
+void OReportWindow::Delete()
+{
+ if ( m_pViews )
+ m_pViews->Delete();
+}
+//----------------------------------------------------------------------------
+void OReportWindow::Copy()
+{
+ if ( m_pViews )
+ m_pViews->Copy();
+}
+//----------------------------------------------------------------------------
+void OReportWindow::Paste()
+{
+ if ( m_pViews )
+ m_pViews->Paste();
+}
+//----------------------------------------------------------------------------
+BOOL OReportWindow::IsPasteAllowed()
+{
+ return m_pViews && m_pViews->IsPasteAllowed();
+}
+//-----------------------------------------------------------------------------
+void OReportWindow::SelectAll()
+{
+ if ( m_pViews )
+ m_pViews->SelectAll();
+}
+//-----------------------------------------------------------------------------
+void OReportWindow::unmarkAllObjects(OSectionView* _pSectionView)
+{
+ if ( m_pViews )
+ m_pViews->unmarkAllObjects(_pSectionView);
+}
+//-----------------------------------------------------------------------------
+void OReportWindow::showProperties(const uno::Reference< report::XSection>& _xReportComponent)
+{
+ ::boost::shared_ptr<OReportSection> pReportSection = m_pViews->getReportSection( _xReportComponent );
+ m_pView->UpdatePropertyBrowserDelayed(pReportSection->getView());
+}
+//------------------------------------------------------------------------------
+sal_Bool OReportWindow::handleKeyEvent(const KeyEvent& _rEvent)
+{
+ return m_pViews ? m_pViews->handleKeyEvent(_rEvent) : sal_False;
+}
+//------------------------------------------------------------------------
+void OReportWindow::setMarked(OSectionView* _pSectionView,sal_Bool _bMark)
+{
+ if ( m_pViews && _pSectionView )
+ m_pViews->setMarked(_pSectionView,_bMark);
+ if ( m_pSections )
+ {
+ m_pSections->setMarked(_pSectionView->getSectionWindow()->getSection(),_bMark);
+ }
+}
+//------------------------------------------------------------------------
+void OReportWindow::setMarked(const uno::Reference< report::XSection>& _xSection,sal_Bool _bMark)
+{
+ if ( m_pViews )
+ m_pViews->setMarked(_xSection,_bMark);
+ if ( m_pSections )
+ m_pSections->setMarked(_xSection,_bMark);
+}
+//------------------------------------------------------------------------
+void OReportWindow::setMarked(const uno::Sequence< uno::Reference< report::XReportComponent> >& _xShape,sal_Bool _bMark)
+{
+ if ( m_pViews )
+ m_pViews->setMarked(_xShape,_bMark);
+}
+//-----------------------------------------------------------------------------
+::boost::shared_ptr<OReportSection> OReportWindow::getMarkedSection(NearSectionAccess nsa) const
+{
+ return m_pViews ? m_pViews->getMarkedSection(nsa) : ::boost::shared_ptr<OReportSection>();
+}
+// -------------------------------------------------------------------------
+void OReportWindow::markSection(const sal_uInt16 _nPos)
+{
+ if ( m_pViews )
+ m_pViews->markSection(_nPos);
+}
+// -----------------------------------------------------------------------------
+void OReportWindow::fillCollapsedSections(::std::vector<sal_uInt16>& _rCollapsedPositions) const
+{
+ if ( m_pSections )
+ m_pSections->fillCollapsedSections(_rCollapsedPositions);
+}
+// -----------------------------------------------------------------------------
+void OReportWindow::collapseSections(const uno::Sequence< ::com::sun::star::beans::PropertyValue>& _aCollpasedSections)
+{
+ if ( m_pSections )
+ m_pSections->collapseSections(_aCollpasedSections);
+}
+// -----------------------------------------------------------------------------
+void OReportWindow::alignMarkedObjects(sal_Int32 _nControlModification,bool _bAlignAtSection, bool bBoundRects)
+{
+ if ( m_pViews )
+ m_pViews->alignMarkedObjects(_nControlModification, _bAlignAtSection, bBoundRects);
+}
+// -----------------------------------------------------------------------------
+void OReportWindow::setGridSnap(BOOL bOn)
+{
+ if ( m_pViews )
+ m_pViews->setGridSnap(bOn);
+}
+// -----------------------------------------------------------------------------
+void OReportWindow::setDragStripes(BOOL bOn)
+{
+ if ( m_pViews )
+ m_pViews->setDragStripes(bOn);
+}
+// -----------------------------------------------------------------------------
+BOOL OReportWindow::isDragStripes() const
+{
+ return m_pViews ? m_pViews->isDragStripes() : FALSE;
+}
+// -----------------------------------------------------------------------------
+sal_uInt32 OReportWindow::getMarkedObjectCount() const
+{
+ return m_pViews ? m_pViews->getMarkedObjectCount() : 0;
+}
+
+//==================================================================
+} //rptui
+//==================================================================
+