diff options
Diffstat (limited to 'reportdesign/source/ui/report/ReportSection.cxx')
-rw-r--r-- | reportdesign/source/ui/report/ReportSection.cxx | 874 |
1 files changed, 0 insertions, 874 deletions
diff --git a/reportdesign/source/ui/report/ReportSection.cxx b/reportdesign/source/ui/report/ReportSection.cxx deleted file mode 100644 index 4abc3c68d..000000000 --- a/reportdesign/source/ui/report/ReportSection.cxx +++ /dev/null @@ -1,874 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org 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 version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#include "precompiled_rptui.hxx" -#include "ReportSection.hxx" -#include "ReportWindow.hxx" -#include "DesignView.hxx" -#include "uistrings.hrc" -#include "RptObject.hxx" -#include "RptModel.hxx" -#include "SectionView.hxx" -#include "RptPage.hxx" -#include "ReportController.hxx" -#include "UITools.hxx" -#include "ViewsWindow.hxx" - -#include <svx/svdpagv.hxx> -#include <editeng/eeitemid.hxx> -#include <editeng/adjitem.hxx> -#include <svx/sdrpaintwindow.hxx> -#include <svx/unoshape.hxx> -#include <svx/gallery.hxx> -#include <svx/svxids.hrc> -#include <svx/svditer.hxx> -#include <svx/dbaexchange.hxx> - -#include <vcl/svapp.hxx> - -#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> -#include <toolkit/helper/convert.hxx> -#include "RptDef.hxx" -#include "SectionWindow.hxx" -#include "helpids.hrc" -#include "RptResId.hrc" -#include "dlgedclip.hxx" -#include "UndoActions.hxx" -#include "rptui_slotid.hrc" - -#include <connectivity/dbtools.hxx> - -#include <vcl/lineinfo.hxx> -#include "ColorChanger.hxx" - -#include <svl/itempool.hxx> -#include <svtools/extcolorcfg.hxx> -#include <unotools/confignode.hxx> -#include <framework/imageproducer.hxx> - -// ============================================================================= -namespace rptui -{ -// ============================================================================= -using namespace ::com::sun::star; -// ----------------------------------------------------------------------------- - -sal_Int32 lcl_getOverlappedControlColor(/*const uno::Reference <lang::XMultiServiceFactory> _rxFactory*/) -{ - svtools::ExtendedColorConfig aConfig; - sal_Int32 nColor = aConfig.GetColorValue(CFG_REPORTDESIGNER, DBOVERLAPPEDCONTROL).getColor(); - return nColor; -} -//------------------------------------------------------------------------------ -DBG_NAME( rpt_OReportSection ) -OReportSection::OReportSection(OSectionWindow* _pParent,const uno::Reference< report::XSection >& _xSection) -: Window(_pParent,WB_DIALOGCONTROL) -, ::comphelper::OPropertyChangeListener(m_aMutex) -, DropTargetHelper(this) -,m_pPage(NULL) -,m_pView(NULL) -,m_pParent(_pParent) -,m_pFunc(NULL) -,m_pMulti(NULL) -,m_pReportListener(NULL) -,m_xSection(_xSection) -,m_nPaintEntranceCount(0) -,m_eMode(RPTUI_SELECT) -,m_bDialogModelChanged(sal_False) -,m_bInDrag(sal_False) -{ - DBG_CTOR( rpt_OReportSection,NULL); - //EnableChildTransparentMode(); - SetHelpId(HID_REPORTSECTION); - SetMapMode( MapMode( MAP_100TH_MM ) ); - SetParentClipMode( PARENTCLIPMODE_CLIP ); - EnableChildTransparentMode( sal_False ); - SetPaintTransparent( sal_False ); - - try - { - fill(); - } - catch(uno::Exception&) - { - OSL_FAIL("Exception catched!"); - } - - m_pFunc.reset(new DlgEdFuncSelect( this )); - m_pFunc->setOverlappedControlColor(lcl_getOverlappedControlColor() ); -} -//------------------------------------------------------------------------------ -OReportSection::~OReportSection() -{ - DBG_DTOR( rpt_OReportSection,NULL); - m_pPage = NULL; - if ( m_pMulti.is() ) - m_pMulti->dispose(); - - if ( m_pReportListener.is() ) - m_pReportListener->dispose(); - m_pFunc = ::std::auto_ptr<DlgEdFunc>(); - - { - ::std::auto_ptr<OSectionView> aTemp( m_pView); - if ( m_pView ) - m_pView->EndListening( *m_pModel ); - m_pView = NULL; - } -} -//------------------------------------------------------------------------------ -void OReportSection::Paint( const Rectangle& rRect ) -{ - Window::Paint(rRect); - - if ( m_pView && m_nPaintEntranceCount == 0) - { - ++m_nPaintEntranceCount; - // repaint, get PageView and prepare Region - SdrPageView* pPgView = m_pView->GetSdrPageView(); - const Region aPaintRectRegion(rRect); - - // #i74769# - SdrPaintWindow* pTargetPaintWindow = 0; - - // mark repaint start - if(pPgView) - { - pTargetPaintWindow = pPgView->GetView().BeginDrawLayers(this, aPaintRectRegion); - OSL_ENSURE(pTargetPaintWindow, "BeginDrawLayers: Got no SdrPaintWindow (!)"); - // draw background self using wallpaper - OutputDevice& rTargetOutDev = pTargetPaintWindow->GetTargetOutputDevice(); - rTargetOutDev.DrawWallpaper(rRect, Wallpaper(pPgView->GetApplicationDocumentColor())); - } - - // do paint (unbuffered) and mark repaint end - if(pPgView) - { - pPgView->DrawLayer(0, this); - pPgView->GetView().EndDrawLayers(*pTargetPaintWindow, true); - } - - m_pView->CompleteRedraw(this,aPaintRectRegion); - --m_nPaintEntranceCount; - } -} -//------------------------------------------------------------------------------ -void OReportSection::Resize() -{ - Window::Resize(); -} -//------------------------------------------------------------------------------ -void OReportSection::fill() -{ - if ( !m_xSection.is() ) - return; - - m_pMulti = new comphelper::OPropertyChangeMultiplexer(this,m_xSection.get()); - m_pMulti->addProperty(PROPERTY_BACKCOLOR); - - m_pReportListener = addStyleListener(m_xSection->getReportDefinition(),this); - - m_pModel = m_pParent->getViewsWindow()->getView()->getReportView()->getController().getSdrModel(); - m_pPage = m_pModel->getPage(m_xSection); - - m_pView = new OSectionView( m_pModel.get(), this, m_pParent->getViewsWindow()->getView() ); - - // #i93597# tell SdrPage that only left and right page border is defined - // instead of the full rectangle definition - m_pPage->setPageBorderOnlyLeftRight(true); - - // without the following call, no grid is painted - m_pView->ShowSdrPage( m_pPage ); - - m_pView->SetMoveSnapOnlyTopLeft( sal_True ); - ODesignView* pDesignView = m_pParent->getViewsWindow()->getView()->getReportView(); - - // #i93595# Adapted grid to a more coarse grid and subdivisions for better visualisation. This - // is only for visualisation and has nothing to do with the actual snap - const Size aGridSizeCoarse(pDesignView->getGridSizeCoarse()); - const Size aGridSizeFine(pDesignView->getGridSizeFine()); - m_pView->SetGridCoarse(aGridSizeCoarse); - m_pView->SetGridFine(aGridSizeFine); - - // #i93595# set snap grid width to snap to all existing subdivisions - const Fraction aX(aGridSizeFine.A()); - const Fraction aY(aGridSizeFine.B()); - m_pView->SetSnapGridWidth(aX, aY); - - m_pView->SetGridSnap( pDesignView->isGridSnap() ); - m_pView->SetGridFront( sal_False ); - m_pView->SetDragStripes( sal_True ); - m_pView->SetPageVisible(); - sal_Int32 nColor = m_xSection->getBackColor(); - if ( nColor == (sal_Int32)COL_TRANSPARENT ) - nColor = getStyleProperty<sal_Int32>(m_xSection->getReportDefinition(),PROPERTY_BACKCOLOR); - m_pView->SetApplicationDocumentColor(nColor); - - uno::Reference<report::XReportDefinition> xReportDefinition = m_xSection->getReportDefinition(); - const sal_Int32 nLeftMargin = getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_LEFTMARGIN); - const sal_Int32 nRightMargin = getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_RIGHTMARGIN); - m_pPage->SetLftBorder(nLeftMargin); - m_pPage->SetRgtBorder(nRightMargin); - -// LLA: TODO -// m_pPage->SetUppBorder(-10000); - - m_pView->SetDesignMode( sal_True ); - - m_pView->StartListening( *m_pModel ); - m_pPage->SetSize( Size( getStyleProperty<awt::Size>(xReportDefinition,PROPERTY_PAPERSIZE).Width,5*m_xSection->getHeight()) ); - const Size aPageSize = m_pPage->GetSize(); - m_pView->SetWorkArea( Rectangle( Point( nLeftMargin, 0), Size(aPageSize.Width() - nLeftMargin - nRightMargin,aPageSize.Height()) ) ); -} -// ----------------------------------------------------------------------------- -void OReportSection::Paste(const uno::Sequence< beans::NamedValue >& _aAllreadyCopiedObjects,bool _bForce) -{ - OSL_ENSURE(m_xSection.is(),"Why is the section here NULL!"); - if ( m_xSection.is() && _aAllreadyCopiedObjects.getLength() ) - { - // stop all drawing actions - m_pView->BrkAction(); - - // unmark all objects - m_pView->UnmarkAll(); - const ::rtl::OUString sSectionName = m_xSection->getName(); - const sal_Int32 nLength = _aAllreadyCopiedObjects.getLength(); - const beans::NamedValue* pIter = _aAllreadyCopiedObjects.getConstArray(); - const beans::NamedValue* pEnd = pIter + nLength; - for(;pIter != pEnd;++pIter) - { - if ( _bForce || pIter->Name == sSectionName) - { - try - { - uno::Sequence< uno::Reference<report::XReportComponent> > aCopies; - pIter->Value >>= aCopies; - const uno::Reference<report::XReportComponent>* pCopiesIter = aCopies.getConstArray(); - const uno::Reference<report::XReportComponent>* pCopiesEnd = pCopiesIter + aCopies.getLength(); - for (;pCopiesIter != pCopiesEnd ; ++pCopiesIter) - { - SvxShape* pShape = SvxShape::getImplementation( *pCopiesIter ); - SdrObject* pObject = pShape ? pShape->GetSdrObject() : NULL; - if ( pObject ) - { - SdrObject* pNeuObj = pObject->Clone(); - - pNeuObj->SetPage( m_pPage ); - pNeuObj->SetModel( m_pModel.get() ); - SdrInsertReason aReason(SDRREASON_VIEWCALL); - m_pPage->InsertObject(pNeuObj,CONTAINER_APPEND,&aReason); - - Rectangle aRet(VCLPoint((*pCopiesIter)->getPosition()),VCLSize((*pCopiesIter)->getSize())); - aRet.setHeight(aRet.getHeight() + 1); - aRet.setWidth(aRet.getWidth() + 1); - bool bOverlapping = true; - while ( bOverlapping ) - { - bOverlapping = isOver(aRet,*m_pPage,*m_pView,true,pNeuObj) != NULL; - if ( bOverlapping ) - { - aRet.Move(0,aRet.getHeight()+1); - pNeuObj->SetLogicRect(aRet); - } - } - m_pView->AddUndo( m_pView->GetModel()->GetSdrUndoFactory().CreateUndoNewObject( *pNeuObj ) ); - m_pView->MarkObj( pNeuObj, m_pView->GetSdrPageView() ); - if ( m_xSection.is() && (static_cast<sal_uInt32>(aRet.getHeight() + aRet.Top()) > m_xSection->getHeight()) ) - m_xSection->setHeight(aRet.getHeight() + aRet.Top()); - } - } - } - catch(uno::Exception&) - { - OSL_FAIL("Exception caught while pasting a new object!"); - } - if ( !_bForce ) - break; - } - } - } -} -//---------------------------------------------------------------------------- -void OReportSection::Delete() -{ - if( !m_pView->AreObjectsMarked() ) - return; - - m_pView->BrkAction(); - m_pView->DeleteMarked(); -} -//---------------------------------------------------------------------------- -void OReportSection::SetMode( DlgEdMode eNewMode ) -{ - if ( eNewMode != m_eMode ) - { - if ( eNewMode == RPTUI_INSERT ) - { - m_pFunc.reset(new DlgEdFuncInsert( this )); - } - else - { - m_pFunc.reset(new DlgEdFuncSelect( this )); - } - m_pFunc->setOverlappedControlColor(lcl_getOverlappedControlColor( ) ); - m_pModel->SetReadOnly(eNewMode == RPTUI_READONLY); - m_eMode = eNewMode; - } -} -// ----------------------------------------------------------------------------- -void OReportSection::Copy(uno::Sequence< beans::NamedValue >& _rAllreadyCopiedObjects) -{ - Copy(_rAllreadyCopiedObjects,false); -} -//---------------------------------------------------------------------------- -void OReportSection::Copy(uno::Sequence< beans::NamedValue >& _rAllreadyCopiedObjects,bool _bEraseAnddNoClone) -{ - OSL_ENSURE(m_xSection.is(),"Why is the section here NULL!"); - if( !m_pView->AreObjectsMarked() || !m_xSection.is() ) - return; - - // insert control models of marked objects into clipboard dialog model - const SdrMarkList& rMarkedList = m_pView->GetMarkedObjectList(); - const sal_uLong nMark = rMarkedList.GetMarkCount(); - - ::std::vector< uno::Reference<report::XReportComponent> > aCopies; - aCopies.reserve(nMark); - - SdrUndoFactory& rUndo = m_pView->GetModel()->GetSdrUndoFactory(); - - for( sal_uLong i = nMark; i > 0; ) - { - --i; - SdrObject* pSdrObject = rMarkedList.GetMark(i)->GetMarkedSdrObj(); - OObjectBase* pObj = dynamic_cast<OObjectBase*>(pSdrObject); - if ( pObj ) - { - try - { - SdrObject* pNeuObj = pSdrObject->Clone(); - aCopies.push_back(uno::Reference<report::XReportComponent>(pNeuObj->getUnoShape(),uno::UNO_QUERY)); - if ( _bEraseAnddNoClone ) - { - m_pView->AddUndo( rUndo.CreateUndoDeleteObject( *pSdrObject ) ); - m_pPage->RemoveObject(pSdrObject->GetOrdNum()); - } - - } - catch(uno::Exception&) - { - OSL_FAIL("Can't copy report elements!"); - } - } - } - - if ( !aCopies.empty() ) - { - ::std::reverse(aCopies.begin(),aCopies.end()); - const sal_Int32 nLength = _rAllreadyCopiedObjects.getLength(); - _rAllreadyCopiedObjects.realloc( nLength + 1); - beans::NamedValue* pNewValue = _rAllreadyCopiedObjects.getArray() + nLength; - pNewValue->Name = m_xSection->getName(); - pNewValue->Value <<= uno::Sequence< uno::Reference<report::XReportComponent> >(&(*aCopies.begin()),aCopies.size()); - } -} -//---------------------------------------------------------------------------- -void OReportSection::MouseButtonDown( const MouseEvent& rMEvt ) -{ - m_pParent->getViewsWindow()->getView()->setMarked(m_pView,sal_True); // mark the section in which is clicked - m_pFunc->MouseButtonDown( rMEvt ); - Window::MouseButtonDown(rMEvt); -} -//---------------------------------------------------------------------------- -void OReportSection::MouseButtonUp( const MouseEvent& rMEvt ) -{ - if ( !m_pFunc->MouseButtonUp( rMEvt ) ) - m_pParent->getViewsWindow()->getView()->getReportView()->getController().executeUnChecked(SID_OBJECT_SELECT,uno::Sequence< beans::PropertyValue>()); -} - -//---------------------------------------------------------------------------- - -void OReportSection::MouseMove( const MouseEvent& rMEvt ) -{ - m_pFunc->MouseMove( rMEvt ); - -} -//---------------------------------------------------------------------------- -void OReportSection::SetGridVisible(sal_Bool _bVisible) -{ - m_pView->SetGridVisible( _bVisible ); -} -//------------------------------------------------------------------------------ -void OReportSection::SelectAll(const sal_uInt16 _nObjectType) -{ - if ( m_pView ) - { - if ( _nObjectType == OBJ_NONE ) - m_pView->MarkAllObj(); - else - { - m_pView->UnmarkAll(); - SdrObjListIter aIter(*m_pPage,IM_DEEPNOGROUPS); - SdrObject* pObjIter = NULL; - while( (pObjIter = aIter.Next()) != NULL ) - { - if ( pObjIter->GetObjIdentifier() == _nObjectType ) - m_pView->MarkObj( pObjIter, m_pView->GetSdrPageView() ); - } - } - } -} -void lcl_insertMenuItemImages( - PopupMenu& rContextMenu, - OReportController& rController, - const uno::Reference< report::XReportDefinition>& _xReportDefinition,uno::Reference<frame::XFrame>& _rFrame -) -{ - const sal_uInt16 nCount = rContextMenu.GetItemCount(); - for (sal_uInt16 i = 0; i < nCount; ++i) - { - if ( MENUITEM_SEPARATOR != rContextMenu.GetItemType(i)) - { - const sal_uInt16 nId = rContextMenu.GetItemId(i); - PopupMenu* pPopupMenu = rContextMenu.GetPopupMenu( nId ); - if ( pPopupMenu ) - { - lcl_insertMenuItemImages(*pPopupMenu,rController,_xReportDefinition,_rFrame); - } - else - { - const ::rtl::OUString sCommand = rContextMenu.GetItemCommand(nId); - rContextMenu.SetItemImage(nId,framework::GetImageFromURL(_rFrame,sCommand,sal_False)); - if ( nId == SID_PAGEHEADERFOOTER ) - { - String sText = String(ModuleRes((_xReportDefinition.is() && _xReportDefinition->getPageHeaderOn()) ? RID_STR_PAGEHEADERFOOTER_DELETE : RID_STR_PAGEHEADERFOOTER_INSERT)); - rContextMenu.SetItemText(nId,sText); - } - else if ( nId == SID_REPORTHEADERFOOTER ) - { - String sText = String(ModuleRes((_xReportDefinition.is() && _xReportDefinition->getReportHeaderOn()) ? RID_STR_REPORTHEADERFOOTER_DELETE : RID_STR_REPORTHEADERFOOTER_INSERT)); - rContextMenu.SetItemText(nId,sText); - } - } - rContextMenu.CheckItem(nId,rController.isCommandChecked(nId)); - rContextMenu.EnableItem(nId,rController.isCommandEnabled(nId)); - } - } -} -//---------------------------------------------------------------------------- -void OReportSection::Command( const CommandEvent& _rCEvt ) -{ - Window::Command(_rCEvt); - switch (_rCEvt.GetCommand()) - { - case COMMAND_CONTEXTMENU: - { - OReportController& rController = m_pParent->getViewsWindow()->getView()->getReportView()->getController(); - uno::Reference<frame::XFrame> xFrame = rController.getFrame(); - PopupMenu aContextMenu( ModuleRes( RID_MENU_REPORT ) ); - uno::Reference< report::XReportDefinition> xReportDefinition = getSection()->getReportDefinition(); - - lcl_insertMenuItemImages(aContextMenu,rController,xReportDefinition,xFrame); - - Point aPos = _rCEvt.GetMousePosPixel(); - m_pView->EndAction(); - const sal_uInt16 nId = aContextMenu.Execute(this, aPos); - if ( nId ) - { - uno::Sequence< beans::PropertyValue> aArgs; - if ( nId == SID_ATTR_CHAR_COLOR_BACKGROUND ) - { - aArgs.realloc(1); - aArgs[0].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Selection")); - aArgs[0].Value <<= m_xSection; - } - rController.executeChecked(nId,aArgs); - } - } - break; - } -} -// ----------------------------------------------------------------------------- -void OReportSection::_propertyChanged(const beans::PropertyChangeEvent& _rEvent) throw( uno::RuntimeException) -{ - if ( m_xSection.is() ) - { - if ( _rEvent.Source == m_xSection || PROPERTY_BACKCOLOR == _rEvent.PropertyName ) - { - sal_Int32 nColor = m_xSection->getBackColor(); - if ( nColor == (sal_Int32)COL_TRANSPARENT ) - nColor = getStyleProperty<sal_Int32>(m_xSection->getReportDefinition(),PROPERTY_BACKCOLOR); - m_pView->SetApplicationDocumentColor(nColor); - Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_NOERASE); - } - else - { - uno::Reference<report::XReportDefinition> xReportDefinition = m_xSection->getReportDefinition(); - const sal_Int32 nLeftMargin = getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_LEFTMARGIN); - const sal_Int32 nRightMargin = getStyleProperty<sal_Int32>(xReportDefinition,PROPERTY_RIGHTMARGIN); - const sal_Int32 nPaperWidth = getStyleProperty<awt::Size>(xReportDefinition,PROPERTY_PAPERSIZE).Width; - - if ( _rEvent.PropertyName == PROPERTY_LEFTMARGIN ) - { - m_pPage->SetLftBorder(nLeftMargin); - } - else if ( _rEvent.PropertyName == PROPERTY_RIGHTMARGIN ) - { - m_pPage->SetRgtBorder(nRightMargin); - } - const Size aOldPageSize = m_pPage->GetSize(); - sal_Int32 nNewHeight = 5*m_xSection->getHeight(); - if ( aOldPageSize.Height() != nNewHeight || nPaperWidth != aOldPageSize.Width() ) - { - m_pPage->SetSize( Size( nPaperWidth,nNewHeight) ); - const Size aPageSize = m_pPage->GetSize(); - m_pView->SetWorkArea( Rectangle( Point( nLeftMargin, 0), Size(aPageSize.Width() - nLeftMargin - nRightMargin,aPageSize.Height()) ) ); - } - impl_adjustObjectSizePosition(nPaperWidth,nLeftMargin,nRightMargin); - m_pParent->Invalidate(INVALIDATE_UPDATE | INVALIDATE_TRANSPARENT); - } - } -} -void OReportSection::impl_adjustObjectSizePosition(sal_Int32 i_nPaperWidth,sal_Int32 i_nLeftMargin,sal_Int32 i_nRightMargin) -{ - try - { - sal_Int32 nRightBorder = i_nPaperWidth - i_nRightMargin; - const sal_Int32 nCount = m_xSection->getCount(); - for (sal_Int32 i = 0; i < nCount; ++i) - { - bool bChanged = false; - uno::Reference< report::XReportComponent> xReportComponent(m_xSection->getByIndex(i),uno::UNO_QUERY_THROW); - awt::Point aPos = xReportComponent->getPosition(); - awt::Size aSize = xReportComponent->getSize(); - SvxShape* pShape = SvxShape::getImplementation( xReportComponent ); - SdrObject* pObject = pShape ? pShape->GetSdrObject() : NULL; - if ( pObject ) - { - OObjectBase* pBase = dynamic_cast<OObjectBase*>(pObject); - pBase->EndListening(sal_False); - if ( aPos.X < i_nLeftMargin ) - { - aPos.X = i_nLeftMargin; - bChanged = true; - } - if ( (aPos.X + aSize.Width) > nRightBorder ) - { - aPos.X = nRightBorder - aSize.Width; - if ( aPos.X < i_nLeftMargin ) - { - aSize.Width += aPos.X - i_nLeftMargin; - aPos.X = i_nLeftMargin; - // add listener around - pBase->StartListening(); - xReportComponent->setSize(aSize); - pBase->EndListening(sal_False); - } - bChanged = true; - } - if ( aPos.Y < 0 ) - aPos.Y = 0; - if ( bChanged ) - { - xReportComponent->setPosition(aPos); - correctOverlapping(pObject,*this,false); - Rectangle aRet(VCLPoint(xReportComponent->getPosition()),VCLSize(xReportComponent->getSize())); - aRet.setHeight(aRet.getHeight() + 1); - aRet.setWidth(aRet.getWidth() + 1); - if ( m_xSection.is() && (static_cast<sal_uInt32>(aRet.getHeight() + aRet.Top()) > m_xSection->getHeight()) ) - m_xSection->setHeight(aRet.getHeight() + aRet.Top()); - - pObject->RecalcBoundRect(); - } - pBase->StartListening(); - } - } - } - catch(uno::Exception) - { - OSL_FAIL("Exception caught: OReportSection::_propertyChanged("); - } -} -//------------------------------------------------------------------------------ -sal_Bool OReportSection::handleKeyEvent(const KeyEvent& _rEvent) -{ - return m_pFunc.get() ? m_pFunc->handleKeyEvent(_rEvent) : sal_False; -} -// ----------------------------------------------------------------------------- -void OReportSection::deactivateOle() -{ - if ( m_pFunc.get() ) - m_pFunc->deactivateOle(true); -} -// ----------------------------------------------------------------------------- -void OReportSection::createDefault(const ::rtl::OUString& _sType) -{ - SdrObject* pObj = m_pView->GetCreateObj(); - if ( !pObj ) - return; - createDefault(_sType,pObj); -} -// ----------------------------------------------------------------------------- -void OReportSection::createDefault(const ::rtl::OUString& _sType,SdrObject* _pObj) -{ - sal_Bool bAttributesAppliedFromGallery = sal_False; - - if ( GalleryExplorer::GetSdrObjCount( GALLERY_THEME_POWERPOINT ) ) - { - std::vector< rtl::OUString > aObjList; - if ( GalleryExplorer::FillObjListTitle( GALLERY_THEME_POWERPOINT, aObjList ) ) - { - std::vector< rtl::OUString >::iterator aIter = aObjList.begin(); - std::vector< rtl::OUString >::iterator aEnd = aObjList.end(); - for (sal_uInt32 i=0 ; aIter != aEnd; ++aIter,++i) - { - if ( aIter->equalsIgnoreAsciiCase( _sType ) ) - { - OReportModel aReportModel(NULL); - SfxItemPool& rPool = aReportModel.GetItemPool(); - rPool.FreezeIdRanges(); - if ( GalleryExplorer::GetSdrObj( GALLERY_THEME_POWERPOINT, i, &aReportModel ) ) - { - const SdrObject* pSourceObj = aReportModel.GetPage( 0 )->GetObj( 0 ); - if( pSourceObj ) - { - const SfxItemSet& rSource = pSourceObj->GetMergedItemSet(); - SfxItemSet aDest( _pObj->GetModel()->GetItemPool(), // ranges from SdrAttrObj - SDRATTR_START, SDRATTR_SHADOW_LAST, - SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST, - SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION, - // Graphic Attributes - SDRATTR_GRAF_FIRST, SDRATTR_GRAF_LAST, - // 3d Properties - SDRATTR_3D_FIRST, SDRATTR_3D_LAST, - // CustomShape properties - SDRATTR_CUSTOMSHAPE_FIRST, SDRATTR_CUSTOMSHAPE_LAST, - // range from SdrTextObj - EE_ITEMS_START, EE_ITEMS_END, - // end - 0, 0); - aDest.Set( rSource ); - _pObj->SetMergedItemSet( aDest ); - sal_Int32 nAngle = pSourceObj->GetRotateAngle(); - if ( nAngle ) - { - double a = nAngle * F_PI18000; - _pObj->NbcRotate( _pObj->GetSnapRect().Center(), nAngle, sin( a ), cos( a ) ); - } - bAttributesAppliedFromGallery = sal_True; - } - } - break; - } - } - } - } - if ( !bAttributesAppliedFromGallery ) - { - _pObj->SetMergedItem( SvxAdjustItem( SVX_ADJUST_CENTER ,ITEMID_ADJUST) ); - _pObj->SetMergedItem( SdrTextVertAdjustItem( SDRTEXTVERTADJUST_CENTER ) ); - _pObj->SetMergedItem( SdrTextHorzAdjustItem( SDRTEXTHORZADJUST_BLOCK ) ); - _pObj->SetMergedItem( SdrTextAutoGrowHeightItem( sal_False ) ); - ((SdrObjCustomShape*)_pObj)->MergeDefaultAttributes( &_sType ); - } -} -// ----------------------------------------------------------------------------- -uno::Reference< report::XReportComponent > OReportSection::getCurrentControlModel() const -{ - uno::Reference< report::XReportComponent > xModel; - if ( m_pView ) - { - const SdrMarkList& rMarkList = m_pView->GetMarkedObjectList(); - sal_uInt32 nMarkCount = rMarkList.GetMarkCount(); - - if ( nMarkCount == 1 ) - { - SdrObject* pDlgEdObj = rMarkList.GetMark(0)->GetMarkedSdrObj(); - OObjectBase* pObj = dynamic_cast<OObjectBase*>(pDlgEdObj); - if ( pObj ) - xModel = pObj->getReportComponent().get(); - } - } - return xModel; -} -// ----------------------------------------------------------------------------- -void OReportSection::fillControlModelSelection(::std::vector< uno::Reference< uno::XInterface > >& _rSelection) const -{ - if ( m_pView ) - { - const SdrMarkList& rMarkList = m_pView->GetMarkedObjectList(); - const sal_uInt32 nMarkCount = rMarkList.GetMarkCount(); - - for (sal_uInt32 i=0; i < nMarkCount; ++i) - { - const SdrObject* pDlgEdObj = rMarkList.GetMark(i)->GetMarkedSdrObj(); - const OObjectBase* pObj = dynamic_cast<const OObjectBase*>(pDlgEdObj); - if ( pObj ) - _rSelection.push_back(pObj->getReportComponent()); - } - } -} -// ----------------------------------------------------------------------------- -sal_Int8 OReportSection::AcceptDrop( const AcceptDropEvent& _rEvt ) -{ - OSL_TRACE("AcceptDrop::DropEvent.Action %i\n", _rEvt.mnAction); - - ::Point aDropPos(_rEvt.maPosPixel); - const MouseEvent aMouseEvt(aDropPos); - if ( m_pFunc->isOverlapping(aMouseEvt) ) - return DND_ACTION_NONE; - - if ( _rEvt.mnAction == DND_ACTION_COPY || - _rEvt.mnAction == DND_ACTION_LINK - ) - { - if (!m_pParent) return DND_ACTION_NONE; - sal_uInt16 nCurrentPosition = 0; - nCurrentPosition = m_pParent->getViewsWindow()->getPosition(m_pParent); - if (_rEvt.mnAction == DND_ACTION_COPY ) - { - // we must assure, we can't drop in the top section - if (nCurrentPosition < 1) - { - return DND_ACTION_NONE; - } - return DND_ACTION_LINK; - } - if (_rEvt.mnAction == DND_ACTION_LINK) - { - // we must assure, we can't drop in the bottom section - if (m_pParent->getViewsWindow()->getSectionCount() > (nCurrentPosition + 1) ) - { - return DND_ACTION_COPY; - } - return DND_ACTION_NONE; - } - } - else - { - const DataFlavorExVector& rFlavors = GetDataFlavorExVector(); - if ( ::svx::OMultiColumnTransferable::canExtractDescriptor(rFlavors) - || ::svx::OColumnTransferable::canExtractColumnDescriptor(rFlavors, CTF_FIELD_DESCRIPTOR | CTF_CONTROL_EXCHANGE | CTF_COLUMN_DESCRIPTOR) ) - return _rEvt.mnAction; - - const sal_Int8 nDropOption = ( OReportExchange::canExtract(rFlavors) ) ? DND_ACTION_COPYMOVE : DND_ACTION_NONE; - - return nDropOption; - } - return DND_ACTION_NONE; -} - -// ----------------------------------------------------------------------------- -sal_Int8 OReportSection::ExecuteDrop( const ExecuteDropEvent& _rEvt ) -{ - OSL_TRACE("ExecuteDrop::DropEvent.Action %i\n", _rEvt.mnAction); - ::Point aDropPos(PixelToLogic(_rEvt.maPosPixel)); - const MouseEvent aMouseEvt(aDropPos); - if ( m_pFunc->isOverlapping(aMouseEvt) ) - return DND_ACTION_NONE; - - sal_Int8 nDropOption = DND_ACTION_NONE; - const TransferableDataHelper aDropped(_rEvt.maDropEvent.Transferable); - DataFlavorExVector& rFlavors = aDropped.GetDataFlavorExVector(); - bool bMultipleFormat = ::svx::OMultiColumnTransferable::canExtractDescriptor(rFlavors); - if ( OReportExchange::canExtract(rFlavors) ) - { - OReportExchange::TSectionElements aCopies = OReportExchange::extractCopies(aDropped); - Paste(aCopies,true); - nDropOption = DND_ACTION_COPYMOVE; - m_pParent->getViewsWindow()->BrkAction(); - m_pParent->getViewsWindow()->unmarkAllObjects(m_pView); - } - else if ( bMultipleFormat - || ::svx::OColumnTransferable::canExtractColumnDescriptor(rFlavors, CTF_FIELD_DESCRIPTOR | CTF_CONTROL_EXCHANGE | CTF_COLUMN_DESCRIPTOR) ) - { - m_pParent->getViewsWindow()->getView()->setMarked(m_pView,sal_True); - m_pView->UnmarkAll(); - const Rectangle& rRect = m_pView->GetWorkArea(); - if ( aDropPos.X() < rRect.Left() ) - aDropPos.X() = rRect.Left(); - else if ( aDropPos.X() > rRect.Right() ) - aDropPos.X() = rRect.Right(); - - if ( aDropPos.Y() > rRect.Bottom() ) - aDropPos.Y() = rRect.Bottom(); - - uno::Sequence<beans::PropertyValue> aValues; - if ( !bMultipleFormat ) - { - ::svx::ODataAccessDescriptor aDescriptor = ::svx::OColumnTransferable::extractColumnDescriptor(aDropped); - - aValues.realloc(1); - aValues[0].Value <<= aDescriptor.createPropertyValueSequence(); - } - else - aValues = ::svx::OMultiColumnTransferable::extractDescriptor(aDropped); - - beans::PropertyValue* pIter = aValues.getArray(); - beans::PropertyValue* pEnd = pIter + aValues.getLength(); - for(;pIter != pEnd; ++pIter) - { - uno::Sequence<beans::PropertyValue> aCurrent; - pIter->Value >>= aCurrent; - sal_Int32 nLength = aCurrent.getLength(); - if ( nLength ) - { - aCurrent.realloc(nLength + 3); - aCurrent[nLength].Name = PROPERTY_POSITION; - aCurrent[nLength++].Value <<= AWTPoint(aDropPos); - // give also the DND Action (Shift|Ctrl) Key to really say what we want - aCurrent[nLength].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DNDAction")); - aCurrent[nLength++].Value <<= _rEvt.mnAction; - - aCurrent[nLength].Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Section")); - aCurrent[nLength++].Value <<= getSection(); - pIter->Value <<= aCurrent; - } - } - - // we use this way to create undo actions - OReportController& rController = m_pParent->getViewsWindow()->getView()->getReportView()->getController(); - rController.executeChecked(SID_ADD_CONTROL_PAIR,aValues); - nDropOption = DND_ACTION_COPY; - } - return nDropOption; -} -// ----------------------------------------------------------------------------- -void OReportSection::stopScrollTimer() -{ - m_pFunc->stopScrollTimer(); -} -// ----------------------------------------------------------------------------- -bool OReportSection::isUiActive() const -{ - return m_pFunc->isUiActive(); -} -// ----------------------------------------------------------------------------- -// ============================================================================= -} -// ============================================================================= - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |