diff options
Diffstat (limited to 'sc/source/ui/view')
-rw-r--r-- | sc/source/ui/view/cellsh.cxx | 19 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh1.cxx | 123 | ||||
-rw-r--r-- | sc/source/ui/view/cellsh2.cxx | 16 | ||||
-rw-r--r-- | sc/source/ui/view/drawview.cxx | 50 | ||||
-rw-r--r-- | sc/source/ui/view/editsh.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/view/formatsh.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin.cxx | 389 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin2.cxx | 444 | ||||
-rw-r--r-- | sc/source/ui/view/gridwin4.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/makefile.mk | 4 | ||||
-rw-r--r-- | sc/source/ui/view/output.cxx | 14 | ||||
-rw-r--r-- | sc/source/ui/view/output2.cxx | 27 | ||||
-rw-r--r-- | sc/source/ui/view/tabcont.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/view/tabview.cxx | 35 | ||||
-rw-r--r-- | sc/source/ui/view/tabview3.cxx | 12 | ||||
-rw-r--r-- | sc/source/ui/view/tabview5.cxx | 10 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsh4.cxx | 4 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwsha.cxx | 64 | ||||
-rw-r--r-- | sc/source/ui/view/tabvwshb.cxx | 5 | ||||
-rw-r--r-- | sc/source/ui/view/viewfun3.cxx | 382 | ||||
-rw-r--r-- | sc/source/ui/view/viewfun4.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/view/viewfun5.cxx | 9 | ||||
-rw-r--r-- | sc/source/ui/view/viewutil.cxx | 34 |
23 files changed, 662 insertions, 998 deletions
diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx index 54c8ff12e189..c2d0f68fc6ef 100644 --- a/sc/source/ui/view/cellsh.cxx +++ b/sc/source/ui/view/cellsh.cxx @@ -206,7 +206,6 @@ void ScCellShell::GetBlockState( SfxItemSet& rSet ) break; case SID_COPY: // Kopieren - bDisable = (!bSimpleArea && eMarkType != SC_MARK_SIMPLE_FILTERED); // nur wegen Matrix nicht editierbar? Matrix nicht zerreissen //! schlaegt nicht zu, wenn geschuetzt UND Matrix, aber damit //! muss man leben.. wird in Copy-Routine abgefangen, sonst @@ -443,7 +442,7 @@ IMPL_LINK( ScCellShell, ClipboardChanged, TransferableDataHelper*, pDataHelper ) SfxBindings& rBindings = GetViewData()->GetBindings(); rBindings.Invalidate( SID_PASTE ); - rBindings.Invalidate( FID_PASTE_CONTENTS ); + rBindings.Invalidate( SID_PASTE_SPECIAL ); rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS ); } return 0; @@ -453,7 +452,7 @@ IMPL_LINK( ScCellShell, ClipboardChanged, TransferableDataHelper*, pDataHelper ) void __EXPORT ScCellShell::GetClipState( SfxItemSet& rSet ) { // SID_PASTE -// FID_PASTE_CONTENTS +// SID_PASTE_SPECIAL // SID_CLIPBOARD_FORMAT_ITEMS if ( !pImpl->m_pClipEvtLstnr ) @@ -490,7 +489,7 @@ void __EXPORT ScCellShell::GetClipState( SfxItemSet& rSet ) if (bDisable) { rSet.DisableItem( SID_PASTE ); - rSet.DisableItem( FID_PASTE_CONTENTS ); + rSet.DisableItem( SID_PASTE_SPECIAL ); rSet.DisableItem( SID_CLIPBOARD_FORMAT_ITEMS ); } else if ( rSet.GetItemState( SID_CLIPBOARD_FORMAT_ITEMS ) != SFX_ITEM_UNKNOWN ) @@ -670,15 +669,9 @@ void ScCellShell::GetState(SfxItemSet &rSet) nErrCode = pFCell->GetErrCode(); } - if ( nErrCode > 0 ) - rSet.Put( SfxStringItem( nWhich, - ScGlobal::GetLongErrorString( nErrCode ) ) ); - else - { - String aFuncStr; - if ( pTabViewShell->GetFunction( aFuncStr ) ) - rSet.Put( SfxStringItem( nWhich, aFuncStr ) ); - } + String aFuncStr; + if ( pTabViewShell->GetFunction( aFuncStr, nErrCode ) ) + rSet.Put( SfxStringItem( nWhich, aFuncStr ) ); } } break; diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx index e5bb702402d8..f610e28b3fc5 100644 --- a/sc/source/ui/view/cellsh1.cxx +++ b/sc/source/ui/view/cellsh1.cxx @@ -104,6 +104,7 @@ #include "dpgroup.hxx" // for ScDPNumGroupInfo #include "spellparam.hxx" #include "postit.hxx" +#include "clipparam.hxx" #include "globstr.hrc" #include "scui_def.hxx" //CHINA001 @@ -1182,41 +1183,9 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) case SID_PASTE: { - Window* pWin = GetViewData()->GetActiveWin(); - ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard( pWin ); - ScDocument* pThisDoc = GetViewData()->GetDocument(); - ScDPObject* pDPObj = pThisDoc->GetDPAtCursor( GetViewData()->GetCurX(), - GetViewData()->GetCurY(), GetViewData()->GetTabNo() ); - if ( pOwnClip && pDPObj ) - { - // paste from Calc into DataPilot table: sort (similar to drag & drop) - - ScDocument* pClipDoc = pOwnClip->GetDocument(); - SCTAB nSourceTab = pOwnClip->GetVisibleTab(); - - SCCOL nClipStartX; - SCROW nClipStartY; - SCCOL nClipEndX; - SCROW nClipEndY; - pClipDoc->GetClipStart( nClipStartX, nClipStartY ); - pClipDoc->GetClipArea( nClipEndX, nClipEndY, TRUE ); - nClipEndX = nClipEndX + nClipStartX; - nClipEndY = nClipEndY + nClipStartY; // GetClipArea returns the difference - - ScRange aSource( nClipStartX, nClipStartY, nSourceTab, nClipEndX, nClipEndY, nSourceTab ); - BOOL bDone = pTabViewShell->DataPilotMove( aSource, GetViewData()->GetCurPos() ); - if ( !bDone ) - pTabViewShell->ErrorMessage( STR_ERR_DATAPILOT_INPUT ); - } - else - { - // normal paste - WaitObject aWait( GetViewData()->GetDialogParent() ); - pTabViewShell->PasteFromSystem(); - } + PasteFromClipboard ( GetViewData(), pTabViewShell, true ); rReq.Done(); } - pTabViewShell->CellContentChanged(); // => PasteFromSystem() ??? break; case SID_CLIPBOARD_FORMAT_ITEMS: @@ -1418,7 +1387,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) pTabViewShell->CellContentChanged(); // => PasteFromXXX ??? break; - case FID_PASTE_CONTENTS: + case SID_PASTE_SPECIAL: // Unterscheidung, ob eigene oder fremde Daten, // dadurch FID_INS_CELL_CONTENTS ueberfluessig { @@ -1516,43 +1485,6 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq ) pTabViewShell->CellContentChanged(); // => PasteFromSystem() ??? break; -#if 0 - // clipboard slots were used only for old basic: - - case SID_GET_CLPBRD_FORMAT_COUNT: - rReq.SetReturnValue( SfxUInt16Item( nSlot, Clipboard::GetFormatCount() ) ); - break; - - case SID_GET_CLPBRD_FORMAT_BY_IDX: - if (pReqArgs) - { - const SfxPoolItem* pItem; - if ( pReqArgs->GetItemState(nSlot, TRUE, &pItem) == SFX_ITEM_SET && - pItem->ISA(SfxUInt16Item) ) - { - USHORT nCount = Clipboard::GetFormatCount(); - USHORT nPos = ((const SfxUInt16Item*)pItem)->GetValue(); // 1-based - if ( nPos && nPos <= nCount ) - rReq.SetReturnValue( SfxUInt32Item( nSlot, Clipboard::GetFormat(--nPos) ) ); - } - } - break; - - case SID_GET_CLPBRD_FORMAT_NAME: - if (pReqArgs) - { - const SfxPoolItem* pItem; - if ( pReqArgs->GetItemState(nSlot, TRUE, &pItem) == SFX_ITEM_SET && - pItem->ISA(SfxUInt32Item) ) - { - String aName = Exchange::GetFormatName( - ((const SfxUInt32Item*)pItem)->GetValue() ); - rReq.SetReturnValue( SfxStringItem( nSlot, aName ) ); - } - } - break; -#endif - // // sonstiges // @@ -2226,3 +2158,52 @@ IMPL_LINK( ScCellShell, DialogClosed, AbstractScLinkedAreaDlg*, EMPTYARG ) return 0; } +void ScCellShell::PasteFromClipboard( ScViewData* pViewData, ScTabViewShell* pTabViewShell, bool bShowDialog ) +{ + Window* pWin = pViewData->GetActiveWin(); + ScTransferObj* pOwnClip = ScTransferObj::GetOwnClipboard( pWin ); + ScDocument* pThisDoc = pViewData->GetDocument(); + ScDPObject* pDPObj = pThisDoc->GetDPAtCursor( pViewData->GetCurX(), + pViewData->GetCurY(), pViewData->GetTabNo() ); + if ( pOwnClip && pDPObj ) + { + // paste from Calc into DataPilot table: sort (similar to drag & drop) + + ScDocument* pClipDoc = pOwnClip->GetDocument(); + SCTAB nSourceTab = pOwnClip->GetVisibleTab(); + + SCCOL nClipStartX; + SCROW nClipStartY; + SCCOL nClipEndX; + SCROW nClipEndY; + pClipDoc->GetClipStart( nClipStartX, nClipStartY ); + pClipDoc->GetClipArea( nClipEndX, nClipEndY, TRUE ); + nClipEndX = nClipEndX + nClipStartX; + nClipEndY = nClipEndY + nClipStartY; // GetClipArea returns the difference + + ScRange aSource( nClipStartX, nClipStartY, nSourceTab, nClipEndX, nClipEndY, nSourceTab ); + BOOL bDone = pTabViewShell->DataPilotMove( aSource, pViewData->GetCurPos() ); + if ( !bDone ) + pTabViewShell->ErrorMessage( STR_ERR_DATAPILOT_INPUT ); + } + else + { + // normal paste + WaitObject aWait( pViewData->GetDialogParent() ); + if (!pOwnClip) + pTabViewShell->PasteFromSystem(); + else + { + ScDocument* pClipDoc = pOwnClip->GetDocument(); + sal_uInt16 nFlags = IDF_ALL; + if (pClipDoc->GetClipParam().isMultiRange()) + // For multi-range paste, we paste values by default. + nFlags &= ~IDF_FORMULA; + + pTabViewShell->PasteFromClip( nFlags, pClipDoc, + PASTE_NOFUNC, FALSE, FALSE, FALSE, INS_NONE, IDF_NONE, + bShowDialog ); // allow warning dialog + } + } + pTabViewShell->CellContentChanged(); // => PasteFromSystem() ??? +} diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx index eabf33f3defc..039e4dc256ba 100644 --- a/sc/source/ui/view/cellsh2.cxx +++ b/sc/source/ui/view/cellsh2.cxx @@ -1235,22 +1235,6 @@ void __EXPORT ScCellShell::GetDBState( SfxItemSet& rSet ) bOk = pDBData->HasQueryParam() || pDBData->HasSortParam() || pDBData->HasSubTotalParam(); -#if OLD_PIVOT_IMPLEMENTATION - if (!bOk) - { - // Pivottabelle mit den Daten als Quellbereich ? - ScRange aDataRange; - pDBData->GetArea(aDataRange); - ScPivotCollection* pPivotCollection = pDoc->GetPivotCollection(); - USHORT nCount = pPivotCollection ? pPivotCollection->GetCount() : 0; - for (USHORT i=0; i<nCount; i++) - { - ScPivot* pTemp = (*pPivotCollection)[i]; - if ( pTemp && pTemp->GetSrcArea().Intersects( aDataRange ) ) - bOk = TRUE; - } - } -#endif } } if (!bOk) diff --git a/sc/source/ui/view/drawview.cxx b/sc/source/ui/view/drawview.cxx index 0c59e083f0fe..ef68bbc9bd0c 100644 --- a/sc/source/ui/view/drawview.cxx +++ b/sc/source/ui/view/drawview.cxx @@ -828,28 +828,28 @@ void ScDrawView::MarkDropObj( SdrObject* pObj ) } } -void ScDrawView::CaptionTextDirection( USHORT nSlot ) -{ - if(nSlot != SID_TEXTDIRECTION_LEFT_TO_RIGHT && nSlot != SID_TEXTDIRECTION_TOP_TO_BOTTOM) - return; - - SdrObject* pObject = GetTextEditObject(); - if ( ScDrawLayer::IsNoteCaption( pObject ) ) - { - if( SdrCaptionObj* pCaption = dynamic_cast< SdrCaptionObj* >( pObject ) ) - { - SfxItemSet aAttr(pCaption->GetMergedItemSet()); - aAttr.Put( SvxWritingModeItem( - nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ? - com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL, - SDRATTR_TEXTDIRECTION ) ); - pCaption->SetMergedItemSet(aAttr); - FuPoor* pPoor = pViewData->GetView()->GetDrawFuncPtr(); - if ( pPoor ) - { - FuText* pText = static_cast<FuText*>(pPoor); - pText->StopEditMode(TRUE); - } - } - } -} +//UNUSED2009-05 void ScDrawView::CaptionTextDirection( USHORT nSlot ) +//UNUSED2009-05 { +//UNUSED2009-05 if(nSlot != SID_TEXTDIRECTION_LEFT_TO_RIGHT && nSlot != SID_TEXTDIRECTION_TOP_TO_BOTTOM) +//UNUSED2009-05 return; +//UNUSED2009-05 +//UNUSED2009-05 SdrObject* pObject = GetTextEditObject(); +//UNUSED2009-05 if ( ScDrawLayer::IsNoteCaption( pObject ) ) +//UNUSED2009-05 { +//UNUSED2009-05 if( SdrCaptionObj* pCaption = dynamic_cast< SdrCaptionObj* >( pObject ) ) +//UNUSED2009-05 { +//UNUSED2009-05 SfxItemSet aAttr(pCaption->GetMergedItemSet()); +//UNUSED2009-05 aAttr.Put( SvxWritingModeItem( +//UNUSED2009-05 nSlot == SID_TEXTDIRECTION_LEFT_TO_RIGHT ? +//UNUSED2009-05 com::sun::star::text::WritingMode_LR_TB : com::sun::star::text::WritingMode_TB_RL, +//UNUSED2009-05 SDRATTR_TEXTDIRECTION ) ); +//UNUSED2009-05 pCaption->SetMergedItemSet(aAttr); +//UNUSED2009-05 FuPoor* pPoor = pViewData->GetView()->GetDrawFuncPtr(); +//UNUSED2009-05 if ( pPoor ) +//UNUSED2009-05 { +//UNUSED2009-05 FuText* pText = static_cast<FuText*>(pPoor); +//UNUSED2009-05 pText->StopEditMode(TRUE); +//UNUSED2009-05 } +//UNUSED2009-05 } +//UNUSED2009-05 } +//UNUSED2009-05 } diff --git a/sc/source/ui/view/editsh.cxx b/sc/source/ui/view/editsh.cxx index d9c19f02058a..022eabdc11cf 100644 --- a/sc/source/ui/view/editsh.cxx +++ b/sc/source/ui/view/editsh.cxx @@ -268,7 +268,7 @@ void ScEditShell::Execute( SfxRequest& rReq ) } break; - case FID_PASTE_CONTENTS: + case SID_PASTE_SPECIAL: { SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); SfxAbstractPasteDialog* pDlg = pFact->CreatePasteDialog( pViewData->GetDialogParent() ); @@ -714,7 +714,7 @@ IMPL_LINK( ScEditShell, ClipboardChanged, TransferableDataHelper*, pDataHelper ) SfxBindings& rBindings = pViewData->GetBindings(); rBindings.Invalidate( SID_PASTE ); - rBindings.Invalidate( FID_PASTE_CONTENTS ); + rBindings.Invalidate( SID_PASTE_SPECIAL ); rBindings.Invalidate( SID_CLIPBOARD_FORMAT_ITEMS ); } return 0; @@ -742,7 +742,7 @@ void __EXPORT ScEditShell::GetClipState( SfxItemSet& rSet ) switch (nWhich) { case SID_PASTE: - case FID_PASTE_CONTENTS: + case SID_PASTE_SPECIAL: if( !bPastePossible ) rSet.DisableItem( nWhich ); break; diff --git a/sc/source/ui/view/formatsh.cxx b/sc/source/ui/view/formatsh.cxx index b2f3e12d1ee6..36f6c682832f 100644 --- a/sc/source/ui/view/formatsh.cxx +++ b/sc/source/ui/view/formatsh.cxx @@ -824,6 +824,11 @@ void __EXPORT ScFormatShell::ExecuteStyle( SfxRequest& rReq ) bNumFormatChanged, aOldSet, rNewSet ) ) pDoc->InvalidateTextWidth( NULL, NULL, bNumFormatChanged ); + SCTAB nTabCount = pDoc->GetTableCount(); + for (SCTAB nTab=0; nTab<nTabCount; nTab++) + if (pDoc->IsStreamValid(nTab)) + pDoc->SetStreamValid(nTab, FALSE); + ULONG nOldFormat = ((const SfxUInt32Item&)aOldSet. Get( ATTR_VALUE_FORMAT )).GetValue(); ULONG nNewFormat = ((const SfxUInt32Item&)rNewSet. diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx index 5397377b69cc..de2b962f3272 100644 --- a/sc/source/ui/view/gridwin.cxx +++ b/sc/source/ui/view/gridwin.cxx @@ -122,18 +122,11 @@ #include "tabprotection.hxx" #include "postit.hxx" -// #114409# -#include <vcl/salbtype.hxx> // FRound #include "drawview.hxx" #include <svx/sdrpagewindow.hxx> -#include <svx/sdrpaintwindow.hxx> #include <svx/sdr/overlay/overlaymanager.hxx> #include <vcl/svapp.hxx> - -#include <drawinglayer/primitive2d/invertprimitive2d.hxx> -#include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <drawinglayer/primitive2d/unifiedalphaprimitive2d.hxx> -#include <basegfx/polygon/b2dpolygontools.hxx> +#include <svx/sdr/overlay/overlayselection.hxx> using namespace com::sun::star; using ::com::sun::star::uno::Sequence; @@ -359,8 +352,7 @@ void lcl_UnLockComment( ScDrawView* pView, SdrPageView* pPV, SdrModel* pDrDoc, c } } -//================================================================== - +// --------------------------------------------------------------------------- // WB_DIALOGCONTROL noetig fuer UNO-Controls ScGridWindow::ScGridWindow( Window* pParent, ScViewData* pData, ScSplitPos eWhichPos ) : Window( pParent, WB_CLIPCHILDREN | WB_DIALOGCONTROL ), @@ -383,9 +375,6 @@ ScGridWindow::ScGridWindow( Window* pParent, ScViewData* pData, ScSplitPos eWhic bEEMouse( FALSE ), nMouseStatus( SC_GM_NONE ), nNestedButtonState( SC_NESTEDBUTTON_NONE ), -#if OLD_PIVOT_IMPLEMENTATION - bPivotMouse( FALSE ), -#endif bDPMouse( FALSE ), bRFMouse( FALSE ), nPagebreakMouse( SC_PD_NONE ), @@ -1844,15 +1833,6 @@ void __EXPORT ScGridWindow::MouseButtonUp( const MouseEvent& rMEvt ) return; } -#if OLD_PIVOT_IMPLEMENTATION - if (bPivotMouse) - { - PivotMouseButtonUp( rMEvt ); - bPivotMouse = FALSE; - return; - } -#endif - if (bDPMouse) { DPMouseButtonUp( rMEvt ); // resets bDPMouse @@ -2260,14 +2240,6 @@ void __EXPORT ScGridWindow::MouseMove( const MouseEvent& rMEvt ) return; } -#if OLD_PIVOT_IMPLEMENTATION - if (bPivotMouse) - { - PivotMouseMove( rMEvt ); - return; - } -#endif - if (bDPMouse) { DPMouseMove( rMEvt ); @@ -2478,10 +2450,6 @@ void ScGridWindow::Tracking( const TrackingEvent& rTEvt ) { if (!pViewData->GetView()->IsInActivatePart()) { -#if OLD_PIVOT_IMPLEMENTATION - if (bPivotMouse) - bPivotMouse = FALSE; // gezeichnet wird per bDragRect -#endif if (bDPMouse) bDPMouse = FALSE; // gezeichnet wird per bDragRect if (bDragRect) @@ -4890,7 +4858,6 @@ BOOL ScGridWindow::GetEditUrlOrError( BOOL bSpellErr, const Point& rPos, MapMode aEditMode = pViewData->GetLogicMode(eWhich); // ohne Drawing-Skalierung Rectangle aLogicEdit = PixelToLogic( aEditRect, aEditMode ); long nThisColLogic = aLogicEdit.Right() - aLogicEdit.Left() + 1; - Size aPaperSize = Size( 1000000, 1000000 ); if(pCell->GetCellType() == CELLTYPE_FORMULA) { @@ -5205,37 +5172,30 @@ void ScGridWindow::UpdateCursorOverlay() } } - // - // convert into logic units and create overlay object - // - if ( aPixelRects.size() ) { - sdr::overlay::OverlayObjectCell::RangeVector aRanges; - - std::vector<Rectangle>::const_iterator aPixelEnd( aPixelRects.end() ); - for ( std::vector<Rectangle>::const_iterator aPixelIter( aPixelRects.begin() ); - aPixelIter != aPixelEnd; ++aPixelIter ) - { - Rectangle aLogic( PixelToLogic( *aPixelIter, aDrawMode ) ); - - const basegfx::B2DPoint aTopLeft(aLogic.Left(), aLogic.Top()); - const basegfx::B2DPoint aBottomRight(aLogic.Right(), aLogic.Bottom()); - const basegfx::B2DRange a2DRange(aTopLeft, aBottomRight); - - aRanges.push_back( a2DRange ); - } - // #i70788# get the OverlayManager safely ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); if(pOverlayManager) { - BOOL bOld = pViewData->GetView()->IsOldSelection(); + const Color aCursorColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); - ScOverlayType eType = bOld ? SC_OVERLAY_INVERT : SC_OVERLAY_SOLID; - Color aCursorColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); - sdr::overlay::OverlayObjectCell* pOverlay = new sdr::overlay::OverlayObjectCell( eType, aCursorColor, aRanges ); + for(sal_uInt32 a(0); a < aPixelRects.size(); a++) + { + const Rectangle aRA(aPixelRects[a]); + basegfx::B2DRange aRB(aRA.Left(), aRA.Top(), aRA.Right() + 1, aRA.Bottom() + 1); + aRB.transform(aTransform); + aRanges.push_back(aRB); + } + + sdr::overlay::OverlayObject* pOverlay = new sdr::overlay::OverlaySelection( + sdr::overlay::OVERLAY_SOLID, + aCursorColor, + aRanges, + false); pOverlayManager->add(*pOverlay); mpOOCursors = new ::sdr::overlay::OverlayObjectList; @@ -5260,50 +5220,52 @@ void ScGridWindow::UpdateSelectionOverlay() SetMapMode( aDrawMode ); DeleteSelectionOverlay(); - std::vector<Rectangle> aPixelRects; GetSelectionRects( aPixelRects ); if ( aPixelRects.size() && pViewData->IsActive() ) { - SCTAB nTab = pViewData->GetTabNo(); - BOOL bLayoutRTL = pViewData->GetDocument()->IsLayoutRTL( nTab ); - BOOL bOld = pViewData->GetView()->IsOldSelection(); - - sdr::overlay::OverlayObjectCell::RangeVector aRanges; + // #i70788# get the OverlayManager safely + ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); - std::vector<Rectangle>::const_iterator aPixelEnd( aPixelRects.end() ); - for ( std::vector<Rectangle>::const_iterator aPixelIter( aPixelRects.begin() ); - aPixelIter != aPixelEnd; ++aPixelIter ) + if(pOverlayManager) { - Rectangle aPixel( *aPixelIter ); - if ( !bOld ) + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + + for(sal_uInt32 a(0); a < aPixelRects.size(); a++) { - // for transparent selection, add a pixel so the border is on the grid on all edges - if ( bLayoutRTL ) - aPixel.Right() += 1; - else - aPixel.Left() -= 1; - aPixel.Top() -= 1; + const Rectangle aRA(aPixelRects[a]); + basegfx::B2DRange aRB(aRA.Left() - 1, aRA.Top() - 1, aRA.Right(), aRA.Bottom()); + aRB.transform(aTransform); + aRanges.push_back(aRB); } - Rectangle aLogic( PixelToLogic( aPixel, aDrawMode ) ); - const basegfx::B2DPoint aTopLeft(aLogic.Left(), aLogic.Top()); - const basegfx::B2DPoint aBottomRight(aLogic.Right(), aLogic.Bottom()); - const basegfx::B2DRange a2DRange(aTopLeft, aBottomRight); + // #i97672# get the system's hilight color and limit it to the maximum + // allowed luminance. This is needed to react on too bright hilight colors + // which would otherwise vive a bad visualisation + Color aHighlight(GetSettings().GetStyleSettings().GetHighlightColor()); + const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer; + const basegfx::BColor aSelection(aHighlight.getBColor()); + const double fLuminance(aSelection.luminance()); + const double fMaxLum(aSvtOptionsDrawinglayer.GetSelectionMaximumLuminancePercent() / 100.0); - aRanges.push_back( a2DRange ); - } + if(fLuminance > fMaxLum) + { + const double fFactor(fMaxLum / fLuminance); + const basegfx::BColor aNewSelection( + aSelection.getRed() * fFactor, + aSelection.getGreen() * fFactor, + aSelection.getBlue() * fFactor); - // #i70788# get the OverlayManager safely - ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); + aHighlight = Color(aNewSelection); + } - if(pOverlayManager) - { - ScOverlayType eType = bOld ? SC_OVERLAY_INVERT : SC_OVERLAY_BORDER_TRANSPARENT; - Color aHighlight( GetSettings().GetStyleSettings().GetHighlightColor() ); - sdr::overlay::OverlayObjectCell* pOverlay = - new sdr::overlay::OverlayObjectCell( eType, aHighlight, aRanges ); + sdr::overlay::OverlayObject* pOverlay = new sdr::overlay::OverlaySelection( + sdr::overlay::OVERLAY_TRANSPARENT, + aHighlight, + aRanges, + true); pOverlayManager->add(*pOverlay); mpOOSelection = new ::sdr::overlay::OverlayObjectList; @@ -5355,31 +5317,24 @@ void ScGridWindow::UpdateAutoFillOverlay() aFillPos.Y() -= 2; Rectangle aFillRect( aFillPos, Size(6,6) ); - // - // convert into logic units - // - - sdr::overlay::OverlayObjectCell::RangeVector aRanges; - - Rectangle aLogic( PixelToLogic( aFillRect, aDrawMode ) ); - - const basegfx::B2DPoint aTopLeft(aLogic.Left(), aLogic.Top()); - const basegfx::B2DPoint aBottomRight(aLogic.Right(), aLogic.Bottom()); - const basegfx::B2DRange a2DRange(aTopLeft, aBottomRight); - - aRanges.push_back( a2DRange ); - // #i70788# get the OverlayManager safely ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); if(pOverlayManager) { - BOOL bOld = pViewData->GetView()->IsOldSelection(); + const Color aHandleColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + basegfx::B2DRange aRB(aFillRect.Left(), aFillRect.Top(), aFillRect.Right() + 1, aFillRect.Bottom() + 1); - ScOverlayType eType = bOld ? SC_OVERLAY_INVERT : SC_OVERLAY_SOLID; - Color aHandleColor( SC_MOD()->GetColorConfig().GetColorValue(svtools::FONTCOLOR).nColor ); - sdr::overlay::OverlayObjectCell* pOverlay = - new sdr::overlay::OverlayObjectCell( eType, aHandleColor, aRanges ); + aRB.transform(aTransform); + aRanges.push_back(aRB); + + sdr::overlay::OverlayObject* pOverlay = new sdr::overlay::OverlaySelection( + sdr::overlay::OVERLAY_SOLID, + aHandleColor, + aRanges, + false); pOverlayManager->add(*pOverlay); mpOOAutoFill = new ::sdr::overlay::OverlayObjectList; @@ -5490,34 +5445,28 @@ void ScGridWindow::UpdateDragRectOverlay() aPixelRects.push_back( Rectangle( aRect.Left()+3, aRect.Bottom()-2, aRect.Right()-3, aRect.Bottom() ) ); } - // - // convert into logic units and create overlay object - // - - sdr::overlay::OverlayObjectCell::RangeVector aRanges; - - std::vector<Rectangle>::const_iterator aPixelEnd( aPixelRects.end() ); - for ( std::vector<Rectangle>::const_iterator aPixelIter( aPixelRects.begin() ); - aPixelIter != aPixelEnd; ++aPixelIter ) - { - Rectangle aLogic( PixelToLogic( *aPixelIter, aDrawMode ) ); - - const basegfx::B2DPoint aTopLeft(aLogic.Left(), aLogic.Top()); - const basegfx::B2DPoint aBottomRight(aLogic.Right(), aLogic.Bottom()); - const basegfx::B2DRange a2DRange(aTopLeft, aBottomRight); - - aRanges.push_back( a2DRange ); - } - // #i70788# get the OverlayManager safely ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); if(pOverlayManager) { - ScOverlayType eType = SC_OVERLAY_INVERT; - Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor(); - sdr::overlay::OverlayObjectCell* pOverlay = - new sdr::overlay::OverlayObjectCell( eType, aHighlight, aRanges ); + // Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor(); + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + + for(sal_uInt32 a(0); a < aPixelRects.size(); a++) + { + const Rectangle aRA(aPixelRects[a]); + basegfx::B2DRange aRB(aRA.Left(), aRA.Top(), aRA.Right() + 1, aRA.Bottom() + 1); + aRB.transform(aTransform); + aRanges.push_back(aRB); + } + + sdr::overlay::OverlayObject* pOverlay = new sdr::overlay::OverlaySelection( + sdr::overlay::OVERLAY_INVERT, + Color(COL_BLACK), + aRanges, + false); pOverlayManager->add(*pOverlay); mpOODragRect = new ::sdr::overlay::OverlayObjectList; @@ -5544,31 +5493,26 @@ void ScGridWindow::UpdateHeaderOverlay() DeleteHeaderOverlay(); // Pixel rectangle is in aInvertRect - - // - // convert into logic units and create overlay object - // - if ( !aInvertRect.IsEmpty() ) { - Rectangle aLogic( PixelToLogic( aInvertRect, aDrawMode ) ); - - const basegfx::B2DPoint aTopLeft(aLogic.Left(), aLogic.Top()); - const basegfx::B2DPoint aBottomRight(aLogic.Right(), aLogic.Bottom()); - const basegfx::B2DRange a2DRange(aTopLeft, aBottomRight); - - sdr::overlay::OverlayObjectCell::RangeVector aRanges; - aRanges.push_back( a2DRange ); - // #i70788# get the OverlayManager safely ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); if(pOverlayManager) { - ScOverlayType eType = SC_OVERLAY_INVERT; - Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor(); - sdr::overlay::OverlayObjectCell* pOverlay = - new sdr::overlay::OverlayObjectCell( eType, aHighlight, aRanges ); + // Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor(); + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + basegfx::B2DRange aRB(aInvertRect.Left(), aInvertRect.Top(), aInvertRect.Right() + 1, aInvertRect.Bottom() + 1); + + aRB.transform(aTransform); + aRanges.push_back(aRB); + + sdr::overlay::OverlayObject* pOverlay = new sdr::overlay::OverlaySelection( + sdr::overlay::OVERLAY_INVERT, + Color(COL_BLACK), + aRanges, + false); pOverlayManager->add(*pOverlay); mpOOHeader = new ::sdr::overlay::OverlayObjectList; @@ -5619,30 +5563,26 @@ void ScGridWindow::UpdateShrinkOverlay() } } - // - // convert into logic units and create overlay object - // - if ( !aPixRect.IsEmpty() ) { - Rectangle aLogic( PixelToLogic( aPixRect, aDrawMode ) ); - - const basegfx::B2DPoint aTopLeft(aLogic.Left(), aLogic.Top()); - const basegfx::B2DPoint aBottomRight(aLogic.Right(), aLogic.Bottom()); - const basegfx::B2DRange a2DRange(aTopLeft, aBottomRight); - - sdr::overlay::OverlayObjectCell::RangeVector aRanges; - aRanges.push_back( a2DRange ); - // #i70788# get the OverlayManager safely ::sdr::overlay::OverlayManager* pOverlayManager = getOverlayManager(); if(pOverlayManager) { - ScOverlayType eType = SC_OVERLAY_INVERT; - Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor(); - sdr::overlay::OverlayObjectCell* pOverlay = - new sdr::overlay::OverlayObjectCell( eType, aHighlight, aRanges ); + // Color aHighlight = GetSettings().GetStyleSettings().GetHighlightColor(); + std::vector< basegfx::B2DRange > aRanges; + const basegfx::B2DHomMatrix aTransform(GetInverseViewTransformation()); + basegfx::B2DRange aRB(aPixRect.Left(), aPixRect.Top(), aPixRect.Right() + 1, aPixRect.Bottom() + 1); + + aRB.transform(aTransform); + aRanges.push_back(aRB); + + sdr::overlay::OverlayObject* pOverlay = new sdr::overlay::OverlaySelection( + sdr::overlay::OVERLAY_INVERT, + Color(COL_BLACK), + aRanges, + false); pOverlayManager->add(*pOverlay); mpOOShrink = new ::sdr::overlay::OverlayObjectList; @@ -5684,121 +5624,4 @@ void ScGridWindow::flushOverlayManager() } // --------------------------------------------------------------------------- - -// #114409# -namespace sdr -{ - namespace overlay - { - OverlayObjectCell::OverlayObjectCell( ScOverlayType eType, const Color& rColor, const RangeVector& rRects ) - : OverlayObject( rColor ), - mePaintType( eType ), - maRectangles( rRects ) - { - // no AA for selection overlays - allowAntiAliase(false); - } - - OverlayObjectCell::~OverlayObjectCell() - { - } - - drawinglayer::primitive2d::Primitive2DSequence OverlayObjectCell::createOverlayObjectPrimitive2DSequence() - { - drawinglayer::primitive2d::Primitive2DSequence aRetval; - const basegfx::BColor aRGBColor(getBaseColor().getBColor()); - const sal_uInt32 nCount(maRectangles.size()); - - if(nCount) - { - // create fill primities for all rectangles - // These ranges are meant as rectangles, so it is not sufficient to replace them - // using the derived polygon. That would leave out the bottom and right lines - // in a discrete width/height due to polygon painting conventions of leaving off those. - // To solve, it is either possible to create a view-dependent rectangle primitive - // handling this internally or to additionally create a hairline primitive to - // cover these areas (which i will do here) - const bool bIsTransparent(SC_OVERLAY_BORDER_TRANSPARENT == mePaintType); - aRetval.realloc(nCount * 2); - - for(sal_uInt32 a(0);a < nCount; a++) - { - const basegfx::B2DRange& rRange(maRectangles[a]); - const basegfx::B2DPolygon aPolygon(basegfx::tools::createPolygonFromRect(rRange)); - - aRetval[a * 2] = drawinglayer::primitive2d::Primitive2DReference( - new drawinglayer::primitive2d::PolyPolygonColorPrimitive2D( - basegfx::B2DPolyPolygon(aPolygon), - aRGBColor)); - aRetval[(a * 2) + 1] = drawinglayer::primitive2d::Primitive2DReference( - new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D( - basegfx::B2DPolyPolygon(aPolygon), - aRGBColor)); - } - - if(SC_OVERLAY_INVERT == mePaintType) - { - // embed all in invert primitive - const drawinglayer::primitive2d::Primitive2DReference aInvert( - new drawinglayer::primitive2d::InvertPrimitive2D( - aRetval)); - - aRetval = drawinglayer::primitive2d::Primitive2DSequence(&aInvert, 1); - } - else if(bIsTransparent) - { - // embed all rectangles in 75% transparent paint - const drawinglayer::primitive2d::Primitive2DReference aUnifiedAlpha( - new drawinglayer::primitive2d::UnifiedAlphaPrimitive2D( - aRetval, - 0.75)); - - // prepare merged PolyPoygon selection outline - const basegfx::B2DPolyPolygon aPolyPolygon(impGetOverlayPolyPolygon()); - const drawinglayer::primitive2d::Primitive2DReference aSelectionOutline( - new drawinglayer::primitive2d::PolyPolygonHairlinePrimitive2D( - aPolyPolygon, - aRGBColor)); - - // add both to result - aRetval.realloc(2); - aRetval[0] = aUnifiedAlpha; - aRetval[1] = aSelectionOutline; - } - } - - return aRetval; - } - - basegfx::B2DPolyPolygon OverlayObjectCell::impGetOverlayPolyPolygon() const - { - PolyPolygon aPolyPoly; - const sal_uInt32 nRectCount(maRectangles.size()); - - for(sal_uInt32 nRect(0); nRect < nRectCount; ++nRect) - { - const basegfx::B2DRange& rRange(maRectangles[nRect]); - const Rectangle aRectangle( - FRound(rRange.getMinX()), FRound(rRange.getMinY()), - FRound(rRange.getMaxX()), FRound(rRange.getMaxY())); - - if ( nRectCount == 1 || nRect+1 < nRectCount ) - { - // simply add for all except the last rect - aPolyPoly.Insert( Polygon( aRectangle ) ); - } - else - { - PolyPolygon aTemp( aPolyPoly ); - aTemp.GetUnion( PolyPolygon( Polygon( aRectangle ) ), aPolyPoly ); - } - } - - return aPolyPoly.getB2DPolyPolygon(); - } - } // end of namespace overlay -} // end of namespace sdr - -// --------------------------------------------------------------------------- - // eof diff --git a/sc/source/ui/view/gridwin2.cxx b/sc/source/ui/view/gridwin2.cxx index 92743ef65524..643928a7c8aa 100644 --- a/sc/source/ui/view/gridwin2.cxx +++ b/sc/source/ui/view/gridwin2.cxx @@ -104,91 +104,6 @@ void ScGridWindow::DoPushButton( SCCOL nCol, SCROW nRow, const MouseEvent& rMEvt ScDPObject* pDPObj = pDoc->GetDPAtCursor(nCol, nRow, nTab); -#if OLD_PIVOT_IMPLEMENTATION - ScPivotCollection* pPivotCollection = pDoc->GetPivotCollection(); - ScPivot* pPivot = pPivotCollection->GetPivotAtCursor(nCol, nRow, nTab); - - if (pPivot) // alte Pivottabellen - { - if (pPivot->IsFilterAtCursor(nCol, nRow, nTab)) - { - ReleaseMouse(); // falls schon beim ButtonDown gecaptured, #44018# - - ScQueryParam aQueryParam; - pPivot->GetQuery(aQueryParam); - SCTAB nSrcTab = pPivot->GetSrcArea().aStart.Tab(); - - SfxItemSet aArgSet( pViewData->GetViewShell()->GetPool(), - SCITEM_QUERYDATA, SCITEM_QUERYDATA ); - aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, pViewData, &aQueryParam ) ); - - //CHINA001 ScPivotFilterDlg* pDlg = new ScPivotFilterDlg( - //CHINA001 pViewData->GetViewShell()->GetDialogParent(), - //CHINA001 aArgSet, nSrcTab ); - ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create(); - DBG_ASSERT(pFact, "ScAbstractFactory create fail!");//CHINA001 - - AbstractScPivotFilterDlg* pDlg = pFact->CreateScPivotFilterDlg( pViewData->GetViewShell()->GetDialogParent(), - aArgSet, nSrcTab, - RID_SCDLG_PIVOTFILTER); - DBG_ASSERT(pDlg, "Dialog create fail!");//CHINA001 - if ( pDlg->Execute() == RET_OK ) - { - ScPivot* pNewPivot = pPivot->CreateNew(); - - const ScQueryItem& rQueryItem = pDlg->GetOutputItem(); - pNewPivot->SetQuery(rQueryItem.GetQueryData()); - - PivotField* pColArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nColCount; - pPivot->GetColFields( pColArr, nColCount ); - PivotField* pRowArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nRowCount; - pPivot->GetRowFields( pRowArr, nRowCount ); - PivotField* pDataArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nDataCount; - pPivot->GetDataFields( pDataArr, nDataCount ); - - pNewPivot->SetColFields( pColArr, nColCount ); - pNewPivot->SetRowFields( pRowArr, nRowCount ); - pNewPivot->SetDataFields( pDataArr, nDataCount ); - - pNewPivot->SetName( pPivot->GetName() ); - pNewPivot->SetTag( pPivot->GetTag() ); - - pViewData->GetDocShell()->PivotUpdate( pPivot, pNewPivot ); - } - delete pDlg; - } - else - { - SCCOL nField; - if (pPivot->GetColFieldAtCursor(nCol, nRow, nTab, nField)) - { - bPivotMouse = TRUE; - nPivotField = nField; - bPivotColField = TRUE; - nPivotCol = nCol; - pDragPivot = pPivot; - PivotTestMouse( rMEvt, TRUE ); - // CaptureMouse(); - StartTracking(); - } - else if (pPivot->GetRowFieldAtCursor(nCol, nRow, nTab, nField)) - { - bPivotMouse = TRUE; - nPivotField = nField; - bPivotColField = FALSE; - nPivotCol = nCol; - pDragPivot = pPivot; - PivotTestMouse( rMEvt, TRUE ); - // CaptureMouse(); - StartTracking(); - } - } - } -#endif - if (pDPObj) { USHORT nOrient = sheet::DataPilotFieldOrientation_HIDDEN; @@ -256,365 +171,6 @@ void ScGridWindow::DoPushButton( SCCOL nCol, SCROW nRow, const MouseEvent& rMEvt } } -#if OLD_PIVOT_IMPLEMENTATION -void ScGridWindow::DoPivotDrop( BOOL bDelete, BOOL bToCols, SCSIZE nDestPos ) -{ - if ( nPivotField == PIVOT_DATA_FIELD && bDelete ) - { - pViewData->GetView()->ErrorMessage(STR_PIVOT_MOVENOTALLOWED); - return; - } - - if ( bPivotColField != bToCols && !bDelete ) - { - SCSIZE nDestCount = bToCols ? pDragPivot->GetColFieldCount() - : pDragPivot->GetRowFieldCount(); - if ( nDestCount >= PIVOT_MAXFIELD ) // schon voll? - { - // Versuch, mehr als PIVOT_MAXFIELD Eintraege zu erzeugen - pViewData->GetView()->ErrorMessage(STR_PIVOT_ERROR); - return; - } - } - - PivotField* pColArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nColCount; - pDragPivot->GetColFields( pColArr, nColCount ); - - PivotField* pRowArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nRowCount; - pDragPivot->GetRowFields( pRowArr, nRowCount ); - - PivotField* pDataArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nDataCount; - pDragPivot->GetDataFields( pDataArr, nDataCount ); - - SCSIZE nOldPos = 0; - PivotField aMoveField; - - PivotField* pSource = bPivotColField ? pColArr : pRowArr; - SCSIZE& rCount = bPivotColField ? nColCount : nRowCount; - - BOOL bFound = FALSE; - for (SCSIZE i=0; i<rCount && !bFound; i++) - if (pSource[i].nCol == nPivotField) - { - nOldPos = i; - aMoveField = pSource[i]; - --rCount; - if (i<rCount) - memmove( &pSource[i], &pSource[i+1], (rCount-i)*sizeof(PivotField) ); - if ( bPivotColField == bToCols ) - if (nDestPos > i) - --nDestPos; - bFound = TRUE; - } - - if (bFound) - { - if (!bDelete) - { - PivotField* pDest = bToCols ? pColArr : pRowArr; - SCSIZE& rDestCount = bToCols ? nColCount : nRowCount; - - if (nDestPos < rDestCount) - memmove( &pDest[nDestPos+1], &pDest[nDestPos], - (rDestCount-nDestPos)*sizeof(PivotField) ); - pDest[nDestPos] = aMoveField; - ++rDestCount; - } - - BOOL bEmpty = ( nColCount + nRowCount == 0 || - ( nColCount + nRowCount == 1 && nDataCount <= 1 ) ); - - if ( bEmpty ) // Pivottabelle loeschen - { - pViewData->GetDocShell()->PivotUpdate( pDragPivot, NULL ); - } - else - { - ScPivot* pNewPivot = pDragPivot->CreateNew(); - pNewPivot->SetColFields( pColArr, nColCount ); - pNewPivot->SetRowFields( pRowArr, nRowCount ); - pNewPivot->SetDataFields( pDataArr, nDataCount ); - - pNewPivot->SetName( pDragPivot->GetName() ); - pNewPivot->SetTag( pDragPivot->GetTag() ); - - pViewData->GetDocShell()->PivotUpdate( pDragPivot, pNewPivot ); - } - pDragPivot = NULL; - } - else - { - DBG_ASSERT(0,"Pivot-Eintrag nicht gefunden"); - } - - delete[] pColArr; - delete[] pRowArr; - delete[] pDataArr; -} - -BOOL ScGridWindow::PivotTestMouse( const MouseEvent& rMEvt, BOOL bMove ) -{ - BOOL bRet = FALSE; - BOOL bTimer = FALSE; - Point aPos = rMEvt.GetPosPixel(); - - SCsCOL nDx = 0; - SCsROW nDy = 0; - if ( aPos.X() < 0 ) - nDx = -1; - if ( aPos.Y() < 0 ) - nDy = -1; - Size aSize = GetOutputSizePixel(); - if ( aPos.X() >= aSize.Width() ) - nDx = 1; - if ( aPos.Y() >= aSize.Height() ) - nDy = 1; - if ( nDx != 0 || nDy != 0 ) - { - if (bDragRect) - { - // DrawDragRect( nDragStartX, nDragStartY, nDragEndX, nDragEndY, FALSE ); - bDragRect = FALSE; - UpdateDragRectOverlay(); - } - - if ( nDx != 0 ) - pViewData->GetView()->ScrollX( nDx, WhichH(eWhich) ); - if ( nDy != 0 ) - pViewData->GetView()->ScrollY( nDy, WhichV(eWhich) ); - - bTimer = TRUE; - } - - SCsCOL nPosX; - SCsROW nPosY; - pViewData->GetPosFromPixel( aPos.X(), aPos.Y(), eWhich, nPosX, nPosY ); - BOOL bMouseLeft; - BOOL bMouseTop; - pViewData->GetMouseQuadrant( aPos, eWhich, nPosX, nPosY, bMouseLeft, bMouseTop ); - - SCCOL nPiCol1; - SCROW nPiRow1; - SCCOL nPiCol2; - SCROW nPiRow2; - SCTAB nTab; - pDragPivot->GetDestArea( nPiCol1, nPiRow1, nPiCol2, nPiRow2, nTab ); - - if ( nPosX >= (SCsCOL) nPiCol1 && nPosX <= (SCsCOL) nPiCol2 && - nPosY >= (SCsROW) nPiRow1 && nPosY <= (SCsROW) nPiRow2 ) - { - SCsROW nFilterAdd = 2; // Platz fuer Filter-Button - SCsROW nColRows = 1; //! Ueberschrift: 0, wenn keine Zeilen, aber mehrere Datenfelder - SCCOL nNewStartX; - SCROW nNewStartY; - SCCOL nNewEndX; - SCROW nNewEndY; - - SCsCOL nRelX = nPosX - (SCsCOL) nPiCol1; - SCsROW nRelY = nPosY - (SCsROW) nPiRow1 - nFilterAdd; - - PivotField* pFieldArr = new PivotField[PIVOT_MAXFIELD]; - SCSIZE nColCount; - pDragPivot->GetColFields( pFieldArr, nColCount ); - SCSIZE nRowCount; - pDragPivot->GetRowFields( pFieldArr, nRowCount ); - delete[] pFieldArr; - - BOOL bBefore; - SCsCOL nColSize = static_cast<SCsCOL>(Max( nColCount, (SCSIZE) 1 )); - SCsROW nRowSize = static_cast<SCsROW>(Max( nRowCount, (SCSIZE) 1 )); - - BOOL bToCols; - if (nRelX < nColSize && nRelY >= nRowSize) - bToCols = TRUE; // links - else if (nRelY < nRowSize && nRelX >= nColSize) - bToCols = FALSE; // oben - else - bToCols = ( nRelY-nRowSize > static_cast<SCsCOLROW>(nRelX-nColSize) ); - - SCsCOL nDestCol = 0; - SCsROW nDestRow = 0; - BOOL bNothing = FALSE; - - if ( bToCols ) - { - bBefore = bMouseLeft; - nDestCol = nRelX; - if (nDestCol < 0) - { - nDestCol = 0; - bBefore = TRUE; - } - if (nDestCol >= static_cast<SCsCOL>(nColCount)) - { - nDestCol = static_cast<SCsCOL>(nColCount)-1; - bBefore = FALSE; - } - - nNewStartY = nPiRow1 + nFilterAdd + static_cast<SCROW>(nRowCount) + nColRows; - nNewEndY = nPiRow2 - 1; - nNewStartX = nPiCol1 + (SCCOL) nDestCol; - nNewEndX = nNewStartX; - - if ( !bPivotColField ) // von der anderen Seite - { - if (bBefore) - nNewEndX = nNewStartX - 1; // vor dem Feld - else - nNewStartX = nNewEndX + 1; // hinter dem Feld - } - else - { - SCCOL nThisCol = (SCCOL) nPosX; // absolute Spalte ( == Maus ) - if ( nThisCol < nPivotCol ) - { - nNewEndX = nNewStartX - 1; // vor dem Feld - bBefore = TRUE; - } - else if ( nThisCol > nPivotCol ) - { - nNewStartX = nNewEndX + 1; // hinter dem Feld - bBefore = FALSE; - } - else - bNothing = TRUE; - } - SetPointer( Pointer( POINTER_PIVOT_ROW ) ); - } - else - { - if (nRelY <= 0 && static_cast<SCsCOLROW>(nRelX) < static_cast<SCsCOLROW>(nColCount)+static_cast<SCsCOLROW>(nRowCount)) - { - nDestRow = static_cast<SCsCOLROW>(nRelX) - static_cast<SCsCOLROW>(nColCount); - bBefore = bMouseLeft; - } - else - { - nDestRow = nRelY-1; - bBefore = bMouseTop; - } - if (nDestRow < 0) - { - nDestRow = 0; - bBefore = TRUE; - } - if (nDestRow >= static_cast<SCsROW>(nRowCount)) - { - nDestRow = static_cast<SCsROW>(nRowCount)-1; - bBefore = FALSE; - } - - nNewStartX = nPiCol1 + (SCCOL) nColCount; - nNewEndX = nPiCol2 - 1; - nNewStartY = nPiRow1 + nFilterAdd + nDestRow + nColRows; - nNewEndY = nNewStartY; - if ( bPivotColField ) // von der anderen Seite - { - if (bBefore) - nNewEndY = nNewStartY - 1; // vor dem Feld - else - nNewStartY = nNewEndY + 1; // hinter dem Feld - } - else - { - SCCOL nThisCol = - static_cast<SCCOL>(static_cast<SCCOLROW>(nDestRow) + - static_cast<SCCOLROW>(nColCount) + nPiCol1); - // absolute Spalte - if ( nThisCol < nPivotCol ) - { - bBefore = TRUE; - nNewEndY = nNewStartY - 1; // vor dem Feld - } - else if ( nThisCol > nPivotCol ) - { - bBefore = FALSE; - nNewStartY = nNewEndY + 1; // hinter dem Feld - } - else - bNothing = TRUE; - } - SetPointer( Pointer( POINTER_PIVOT_COL ) ); - } - - if (bMove) - { - if ( nNewStartX != nDragStartX || nNewEndX != nDragEndX || - nNewStartY != nDragStartY || nNewEndY != nDragEndY || !bDragRect ) - { - //if (bDragRect) - // DrawDragRect( nDragStartX, nDragStartY, nDragEndX, nDragEndY, FALSE ); - - nDragStartX = nNewStartX; - nDragStartY = nNewStartY; - nDragEndX = nNewEndX; - nDragEndY = nNewEndY; - bDragRect = TRUE; - - // DrawDragRect( nDragStartX, nDragStartY, nDragEndX, nDragEndY, FALSE ); - - UpdateDragRectOverlay(); - } - } - else - { - if (bDragRect) - { - // DrawDragRect( nDragStartX, nDragStartY, nDragEndX, nDragEndY, FALSE ); - bDragRect = FALSE; - UpdateDragRectOverlay(); - } - - if (!bNothing) - { - SCSIZE nDestPos = bToCols ? static_cast<SCSIZE>(nDestCol) : static_cast<SCSIZE>(nDestRow); - if (!bBefore) - ++nDestPos; - DoPivotDrop( FALSE, bToCols, nDestPos ); - } - } - - bRet = TRUE; - } - else - { - if (bMove) - SetPointer( Pointer( POINTER_PIVOT_DELETE ) ); - // if (bDragRect) - // DrawDragRect( nDragStartX, nDragStartY, nDragEndX, nDragEndY, FALSE ); - bDragRect = FALSE; - UpdateDragRectOverlay(); - - if (!bMove) - DoPivotDrop( TRUE, FALSE,0 ); - } - - if (bTimer && bMove) - pViewData->GetView()->SetTimer( this, rMEvt ); // Event wiederholen - else - pViewData->GetView()->ResetTimer(); - - return bRet; -} - -void ScGridWindow::PivotMouseMove( const MouseEvent& rMEvt ) -{ - PivotTestMouse( rMEvt, TRUE ); -} - -void ScGridWindow::PivotMouseButtonUp( const MouseEvent& rMEvt ) -{ - bPivotMouse = FALSE; // als erstes, falls PivotTestMouse eine Fehlermeldung bringt - ReleaseMouse(); - - PivotTestMouse( rMEvt, FALSE ); - SetPointer( Pointer( POINTER_ARROW ) ); -} -#endif - // ----------------------------------------------------------------------- // // Data Pilot interaction diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index b90e5d3e802e..d700ee606731 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -2045,8 +2045,6 @@ void ScGridWindow::DataChanged( const DataChangedEvent& rDCEvt ) // RepeatResize in case scroll bar sizes have changed pView->RepeatResize(); - - pView->UpdateSelectionType(); pView->UpdateAllOverlays(); // invalidate cell attribs in input handler, in case the diff --git a/sc/source/ui/view/makefile.mk b/sc/source/ui/view/makefile.mk index 9af8051b6613..466ab5dc8627 100644 --- a/sc/source/ui/view/makefile.mk +++ b/sc/source/ui/view/makefile.mk @@ -135,12 +135,10 @@ SLOFILES = \ $(SLO)$/viewfun4.obj \ $(SLO)$/viewfun2.obj .ELIF "$(OS)$(COM)$(CPUNAME)"=="SOLARISC52INTEL" -# tabcont can be removed if -xspace is no longer used (i99576, i99592) NOOPTFILES=\ $(SLO)$/drawview.obj \ $(SLO)$/dbfunc2.obj \ - $(SLO)$/tabvwsh2.obj \ - $(SLO)$/tabcont.obj + $(SLO)$/tabvwsh2.obj .ELSE NOOPTFILES=\ diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx index b600600acb6b..9d2da303988c 100644 --- a/sc/source/ui/view/output.cxx +++ b/sc/source/ui/view/output.cxx @@ -1816,6 +1816,7 @@ void ScOutputData::FindChanged() pDoc->DisableIdle( bWasIdleDisabled ); } +#ifdef OLD_SELECTION_PAINT void ScOutputData::DrawMark( Window* pWin ) { Rectangle aRect; @@ -1826,14 +1827,14 @@ void ScOutputData::DrawMark( Window* pWin ) for (SCSIZE nArrY=1; nArrY+1<nArrCount; nArrY++) { RowInfo* pThisRowInfo = &pRowInfo[nArrY]; - if ( pThisRowInfo->bChanged ) + if (pThisRowInfo->bChanged) { long nPosX = nScrX; - if ( bLayoutRTL ) + if (bLayoutRTL) nPosX += nMirrorW - 1; // always in pixels aRect = Rectangle( Point( nPosX,nPosY ), Size(1, pThisRowInfo->nHeight) ); - if ( bLayoutRTL ) + if (bLayoutRTL) aRect.Left() = aRect.Right() + 1; else aRect.Right() = aRect.Left() - 1; @@ -1841,12 +1842,12 @@ void ScOutputData::DrawMark( Window* pWin ) BOOL bOldMarked = FALSE; for (SCCOL nX=nX1; nX<=nX2; nX++) { - if ( pThisRowInfo->pCellInfo[nX+1].bMarked != bOldMarked ) + if (pThisRowInfo->pCellInfo[nX+1].bMarked != bOldMarked) { if (bOldMarked && aRect.Right() >= aRect.Left()) aInvert.AddRect( aRect ); - if ( bLayoutRTL ) + if (bLayoutRTL) aRect.Right() = nPosX; else aRect.Left() = nPosX; @@ -1854,7 +1855,7 @@ void ScOutputData::DrawMark( Window* pWin ) bOldMarked = pThisRowInfo->pCellInfo[nX+1].bMarked; } - if ( bLayoutRTL ) + if (bLayoutRTL) { nPosX -= pRowInfo[0].pCellInfo[nX+1].nWidth; aRect.Left() = nPosX+1; @@ -1871,6 +1872,7 @@ void ScOutputData::DrawMark( Window* pWin ) nPosY += pThisRowInfo->nHeight; } } +#endif void ScOutputData::DrawRefMark( SCCOL nRefStartX, SCROW nRefStartY, SCCOL nRefEndX, SCROW nRefEndY, diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx index e41bd4941d9c..f5688171b145 100644 --- a/sc/source/ui/view/output2.cxx +++ b/sc/source/ui/view/output2.cxx @@ -94,7 +94,6 @@ const USHORT SC_SHRINKAGAIN_MAX = 7; class ScDrawStringsVars { ScOutputData* pOutput; // Verbindung - SvNumberFormatter* pFormatter; const ScPatternAttr* pPattern; // Attribute const SfxItemSet* pCondSet; // aus bedingter Formatierung @@ -187,8 +186,6 @@ ScDrawStringsVars::ScDrawStringsVars(ScOutputData* pData, BOOL bPTL) : bShrink ( FALSE ), bPixelToLogic( bPTL ) { - pFormatter = pData->pDoc->GetFormatTable(); - ScModule* pScMod = SC_MOD(); // #105733# SvtAccessibilityOptions::GetIsForBorders is no longer used (always assumed TRUE) bCellContrast = pOutput->bUseStyleColor && @@ -373,7 +370,7 @@ void ScDrawStringsVars::SetPattern( const ScPatternAttr* pNew, const SfxItemSet* // Zahlenformat // ULONG nOld = nValueFormat; - nValueFormat = pPattern->GetNumberFormat( pFormatter, pCondSet ); + nValueFormat = pPattern->GetNumberFormat( pOutput->pDoc->GetFormatTable(), pCondSet ); /* s.u. if (nValueFormat != nOld) @@ -414,7 +411,7 @@ void ScDrawStringsVars::SetPatternSimple( const ScPatternAttr* pNew, const SfxIt const SfxPoolItem* pLangItem; if ( !pCondSet || pCondSet->GetItemState(ATTR_LANGUAGE_FORMAT,TRUE,&pLangItem) != SFX_ITEM_SET ) pLangItem = &pPattern->GetItem(ATTR_LANGUAGE_FORMAT); - nValueFormat = pFormatter->GetFormatForLanguageIfBuiltIn( + nValueFormat = pOutput->pDoc->GetFormatTable()->GetFormatForLanguageIfBuiltIn( ((SfxUInt32Item*)pFormItem)->GetValue(), ((SvxLanguageItem*)pLangItem)->GetLanguage() ); @@ -456,7 +453,7 @@ BOOL ScDrawStringsVars::SetText( ScBaseCell* pCell ) ULONG nFormat = GetValueFormat(); ScCellFormat::GetString( pCell, nFormat, aString, &pColor, - *pFormatter, + *pOutput->pDoc->GetFormatTable(), pOutput->bShowNullValues, pOutput->bShowFormulas, ftCheck ); @@ -1358,11 +1355,13 @@ void ScOutputData::DrawStrings( BOOL bPixelToLogic ) } if (bDoCell && !bNeedEdit) { - if ( pCell->GetCellType() == CELLTYPE_FORMULA ) + BOOL bFormulaCell = (pCell->GetCellType() == CELLTYPE_FORMULA ); + if ( bFormulaCell ) lcl_CreateInterpretProgress( bProgress, pDoc, (ScFormulaCell*)pCell ); if ( aVars.SetText(pCell) ) pOldPattern = NULL; - bNeedEdit = aVars.HasEditCharacters(); + bNeedEdit = aVars.HasEditCharacters() || + (bFormulaCell && ((ScFormulaCell*)pCell)->IsMultilineResult()); } if (bDoCell && !bNeedEdit) { @@ -1914,8 +1913,6 @@ void ScOutputData::DrawEdit(BOOL bPixelToLogic) Size aMinSize = pRefDevice->PixelToLogic(Size(0,100)); // erst darueber wird ausgegeben // UINT32 nMinHeight = aMinSize.Height() / 200; // 1/2 Pixel - SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); - ScModule* pScMod = SC_MOD(); sal_Int32 nConfBackColor = pScMod->GetColorConfig().GetColorValue(svtools::DOCCOLOR).nColor; // #105733# SvtAccessibilityOptions::GetIsForBorders is no longer used (always assumed TRUE) @@ -2319,12 +2316,12 @@ void ScOutputData::DrawEdit(BOOL bPixelToLogic) else { ULONG nFormat = pPattern->GetNumberFormat( - pFormatter, pCondSet ); + pDoc->GetFormatTable(), pCondSet ); String aString; Color* pColor; ScCellFormat::GetString( pCell, nFormat,aString, &pColor, - *pFormatter, + *pDoc->GetFormatTable(), bShowNullValues, bShowFormulas, ftCheck ); @@ -2810,8 +2807,6 @@ void ScOutputData::DrawRotated(BOOL bPixelToLogic) nRotMax = pRowInfo[nRotY].nRotMaxCol; - SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); - ScModule* pScMod = SC_MOD(); sal_Int32 nConfBackColor = pScMod->GetColorConfig().GetColorValue(svtools::DOCCOLOR).nColor; // #105733# SvtAccessibilityOptions::GetIsForBorders is no longer used (always assumed TRUE) @@ -3100,12 +3095,12 @@ void ScOutputData::DrawRotated(BOOL bPixelToLogic) else { ULONG nFormat = pPattern->GetNumberFormat( - pFormatter, pCondSet ); + pDoc->GetFormatTable(), pCondSet ); String aString; Color* pColor; ScCellFormat::GetString( pCell, nFormat,aString, &pColor, - *pFormatter, + *pDoc->GetFormatTable(), bShowNullValues, bShowFormulas, ftCheck ); diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx index 3bfb8729cd37..db1a8952aeef 100644 --- a/sc/source/ui/view/tabcont.cxx +++ b/sc/source/ui/view/tabcont.cxx @@ -49,6 +49,7 @@ #include "sc.hrc" #include "globstr.hrc" #include "transobj.hxx" +#include "clipparam.hxx" // STATIC DATA ----------------------------------------------------------- @@ -447,7 +448,8 @@ void ScTabControl::DoDrag( const Region& /* rRegion */ ) aTabMark.SetMarkArea( ScRange(0,0,nTab,MAXCOL,MAXROW,nTab) ); ScDocument* pClipDoc = new ScDocument( SCDOCMODE_CLIP ); - pDoc->CopyToClip( 0,0, MAXCOL,MAXROW, FALSE, pClipDoc, FALSE, &aTabMark ); + ScClipParam aClipParam(ScRange(0, 0, 0, MAXCOL, MAXROW, 0), false); + pDoc->CopyToClip(aClipParam, pClipDoc, &aTabMark, false); TransferableObjectDescriptor aObjDesc; pDocSh->FillTransferableObjectDescriptor( aObjDesc ); diff --git a/sc/source/ui/view/tabview.cxx b/sc/source/ui/view/tabview.cxx index c51c81c36dd8..3077e852dbaf 100644 --- a/sc/source/ui/view/tabview.cxx +++ b/sc/source/ui/view/tabview.cxx @@ -384,8 +384,7 @@ BOOL lcl_HasRowOutline( const ScViewData& rViewData ) bInActivatePart( FALSE ), \ bInZoomUpdate( FALSE ), \ bMoveIsShift( FALSE ), \ - bNewStartIfMarking( FALSE ), \ - bOldSelection( FALSE ) + bNewStartIfMarking( FALSE ) ScTabView::ScTabView( Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pViewShell ) : @@ -398,22 +397,22 @@ ScTabView::ScTabView( Window* pParent, ScDocShell& rDocSh, ScTabViewShell* pView Init(); } -ScTabView::ScTabView( Window* pParent, const ScTabView& rScTabView, ScTabViewShell* pViewShell ) : - pFrameWin( pParent ), - aViewData( rScTabView.aViewData ), - TABVIEW_INIT -{ - RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScTabView::ScTabView" ); - - aViewData.SetViewShell( pViewShell ); - Init(); - - UpdateShow(); - if ( aViewData.GetActivePart() != SC_SPLIT_BOTTOMLEFT ) - pGridWin[SC_SPLIT_BOTTOMLEFT]->Show(); - - InvalidateSplit(); -} +//UNUSED2009-05 ScTabView::ScTabView( Window* pParent, const ScTabView& rScTabView, ScTabViewShell* pViewShell ) : +//UNUSED2009-05 pFrameWin( pParent ), +//UNUSED2009-05 aViewData( rScTabView.aViewData ), +//UNUSED2009-05 TABVIEW_INIT +//UNUSED2009-05 { +//UNUSED2009-05 RTL_LOGFILE_CONTEXT_AUTHOR ( aLog, "sc", "nn93723", "ScTabView::ScTabView" ); +//UNUSED2009-05 +//UNUSED2009-05 aViewData.SetViewShell( pViewShell ); +//UNUSED2009-05 Init(); +//UNUSED2009-05 +//UNUSED2009-05 UpdateShow(); +//UNUSED2009-05 if ( aViewData.GetActivePart() != SC_SPLIT_BOTTOMLEFT ) +//UNUSED2009-05 pGridWin[SC_SPLIT_BOTTOMLEFT]->Show(); +//UNUSED2009-05 +//UNUSED2009-05 InvalidateSplit(); +//UNUSED2009-05 } void ScTabView::InitScrollBar( ScrollBar& rScrollBar, long nMaxVal ) { diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx index 608658024d2b..a19760e4c277 100644 --- a/sc/source/ui/view/tabview3.cxx +++ b/sc/source/ui/view/tabview3.cxx @@ -422,7 +422,7 @@ void ScTabView::SelectionChanged() rBindings.Invalidate( SID_CUT ); rBindings.Invalidate( SID_COPY ); rBindings.Invalidate( SID_PASTE ); - rBindings.Invalidate( FID_PASTE_CONTENTS ); + rBindings.Invalidate( SID_PASTE_SPECIAL ); rBindings.Invalidate( FID_INS_ROW ); rBindings.Invalidate( FID_INS_COLUMN ); @@ -466,19 +466,9 @@ void ScTabView::CursorPosChanged() // Broadcast, damit andere Views des Dokuments auch umschalten ScDocument* pDoc = aViewData.GetDocument(); -#if OLD_PIVOT_IMPLEMENTATION - BOOL bPivot = ( NULL != pDoc->GetPivotAtCursor( aViewData.GetCurX(), - aViewData.GetCurY(), - aViewData.GetTabNo() ) || - NULL != pDoc->GetDPAtCursor( aViewData.GetCurX(), - aViewData.GetCurY(), - aViewData.GetTabNo() ) ); - aViewData.GetViewShell()->SetPivotShell(bPivot); -#else bool bDP = NULL != pDoc->GetDPAtCursor( aViewData.GetCurX(), aViewData.GetCurY(), aViewData.GetTabNo() ); aViewData.GetViewShell()->SetPivotShell(bDP); -#endif // UpdateInputHandler jetzt in CellContentChanged diff --git a/sc/source/ui/view/tabview5.cxx b/sc/source/ui/view/tabview5.cxx index c27524c83542..75e961d5eeec 100644 --- a/sc/source/ui/view/tabview5.cxx +++ b/sc/source/ui/view/tabview5.cxx @@ -148,16 +148,6 @@ void __EXPORT ScTabView::Init() // Das gilt auch fuer ViewOptionsHasChanged() TestHintWindow(); - - UpdateSelectionType(); -} - -void ScTabView::UpdateSelectionType() -{ - // old selection in high contrast mode, or if transparent drawing isn't supported - - bOldSelection = pFrameWin->GetSettings().GetStyleSettings().GetHighContrastMode() || - !pFrameWin->supportsOperation( OutDevSupport_TransparentRect ); } __EXPORT ScTabView::~ScTabView() diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx index d8449ebc3699..e34741ba4c6b 100644 --- a/sc/source/ui/view/tabvwsh4.cxx +++ b/sc/source/ui/view/tabvwsh4.cxx @@ -1510,7 +1510,7 @@ BOOL ScTabViewShell::TabKeyInput(const KeyEvent& rKEvt) // #51889# Spezialfall: Copy/Cut bei Mehrfachselektion -> Fehlermeldung // (Slot ist disabled, SfxViewShell::KeyInput wuerde also kommentarlos verschluckt) KeyFuncType eFunc = aCode.GetFunction(); - if ( eFunc == KEYFUNC_COPY || eFunc == KEYFUNC_CUT ) + if ( eFunc == KEYFUNC_CUT ) { ScRange aDummy; ScMarkType eMarkType = GetViewData()->GetSimpleArea( aDummy ); @@ -1806,7 +1806,7 @@ void ScTabViewShell::Construct( BYTE nForceDesignMode ) { SCTAB nInitTabCount = 3; //! konfigurierbar !!! for (SCTAB i=1; i<nInitTabCount; i++) - pDoc->MakeTable(i); + pDoc->MakeTable(i,false); } pDocSh->SetEmpty( FALSE ); // #i6232# make sure this is done only once diff --git a/sc/source/ui/view/tabvwsha.cxx b/sc/source/ui/view/tabvwsha.cxx index 766785d5ffc8..9e844f970909 100644 --- a/sc/source/ui/view/tabvwsha.cxx +++ b/sc/source/ui/view/tabvwsha.cxx @@ -72,11 +72,23 @@ #include "compiler.hxx" -BOOL ScTabViewShell::GetFunction( String& rFuncStr ) +BOOL ScTabViewShell::GetFunction( String& rFuncStr, sal_uInt16 nErrCode ) { String aStr; ScSubTotalFunc eFunc = (ScSubTotalFunc) SC_MOD()->GetAppOptions().GetStatusFunc(); + ScViewData* pViewData = GetViewData(); + ScMarkData& rMark = pViewData->GetMarkData(); + bool bIgnoreError = (rMark.IsMarked() || rMark.IsMultiMarked()); + + if (bIgnoreError && (eFunc == SUBTOTAL_FUNC_CNT || eFunc == SUBTOTAL_FUNC_CNT2)) + nErrCode = 0; + + if (nErrCode) + { + rFuncStr = ScGlobal::GetLongErrorString(nErrCode); + return true; + } USHORT nGlobStrId = 0; switch (eFunc) @@ -94,9 +106,7 @@ BOOL ScTabViewShell::GetFunction( String& rFuncStr ) } if (nGlobStrId) { - ScViewData* pViewData = GetViewData(); ScDocument* pDoc = pViewData->GetDocument(); - ScMarkData& rMark = pViewData->GetMarkData(); SCCOL nPosX = pViewData->GetCurX(); SCROW nPosY = pViewData->GetCurY(); SCTAB nTab = pViewData->GetTabNo(); @@ -104,30 +114,38 @@ BOOL ScTabViewShell::GetFunction( String& rFuncStr ) aStr = ScGlobal::GetRscString(nGlobStrId); aStr += '='; - // Anzahl im Standardformat, die anderen nach Cursorposition - sal_uInt32 nNumFmt = 0; - SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); - if ( eFunc != SUBTOTAL_FUNC_CNT && eFunc != SUBTOTAL_FUNC_CNT2 ) - { - // Zahlformat aus Attributen oder Formel - pDoc->GetNumberFormat( nPosX, nPosY, nTab, nNumFmt ); - if ( (nNumFmt % SV_COUNTRY_LANGUAGE_OFFSET) == 0 ) - { - ScBaseCell* pCell; - pDoc->GetCell( nPosX, nPosY, nTab, pCell ); - if (pCell && pCell->GetCellType() == CELLTYPE_FORMULA) - nNumFmt = ((ScFormulaCell*)pCell)->GetStandardFormat( - *pFormatter, nNumFmt ); - } - } ScAddress aCursor( nPosX, nPosY, nTab ); double nVal; if ( pDoc->GetSelectionFunction( eFunc, aCursor, rMark, nVal ) ) { - String aValStr; - Color* pDummy; - pFormatter->GetOutputString( nVal, nNumFmt, aValStr, &pDummy ); - aStr += aValStr; + if ( nVal == 0.0 ) + aStr += '0'; + else + { + // Anzahl im Standardformat, die anderen nach Cursorposition + SvNumberFormatter* pFormatter = pDoc->GetFormatTable(); + sal_uInt32 nNumFmt = 0; + if ( eFunc != SUBTOTAL_FUNC_CNT && eFunc != SUBTOTAL_FUNC_CNT2 ) + { + // Zahlformat aus Attributen oder Formel + pDoc->GetNumberFormat( nPosX, nPosY, nTab, nNumFmt ); + if ( (nNumFmt % SV_COUNTRY_LANGUAGE_OFFSET) == 0 ) + { + ScBaseCell* pCell; + pDoc->GetCell( nPosX, nPosY, nTab, pCell ); + if (pCell && pCell->GetCellType() == CELLTYPE_FORMULA) + { + + nNumFmt = ((ScFormulaCell*)pCell)->GetStandardFormat(*pFormatter, nNumFmt ); + } + } + } + + String aValStr; + Color* pDummy; + pFormatter->GetOutputString( nVal, nNumFmt, aValStr, &pDummy ); + aStr += aValStr; + } } rFuncStr = aStr; diff --git a/sc/source/ui/view/tabvwshb.cxx b/sc/source/ui/view/tabvwshb.cxx index f2bc65a66ba8..37dc2c11da7f 100644 --- a/sc/source/ui/view/tabvwshb.cxx +++ b/sc/source/ui/view/tabvwshb.cxx @@ -465,7 +465,10 @@ void ScTabViewShell::GetDrawInsState(SfxItemSet &rSet) case SID_INSERT_SOUND: case SID_INSERT_VIDEO: - if ( bOle || bTabProt || !SvxPluginFileDlg::IsAvailable(nWhich) || bShared ) + /* #i102735# discussed with NN: removed for performance reasons + || !SvxPluginFileDlg::IsAvailable(nWhich) + */ + if ( bOle || bTabProt || bShared ) rSet.DisableItem( nWhich ); break; diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx index 9dda9a097395..3065aa2fd4e1 100644 --- a/sc/source/ui/view/viewfun3.cxx +++ b/sc/source/ui/view/viewfun3.cxx @@ -212,6 +212,7 @@ #include "transobj.hxx" #include "drwtrans.hxx" #include "docuno.hxx" +#include "clipparam.hxx" using namespace com::sun::star; @@ -312,10 +313,10 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI ScRange aRange; ScMarkType eMarkType = GetViewData()->GetSimpleArea( aRange ); + ScDocument* pDoc = GetViewData()->GetDocument(); + ScMarkData& rMark = GetViewData()->GetMarkData(); if ( eMarkType == SC_MARK_SIMPLE || eMarkType == SC_MARK_SIMPLE_FILTERED ) { - ScDocument* pDoc = GetViewData()->GetDocument(); - ScMarkData& rMark = GetViewData()->GetMarkData(); if ( !pDoc->HasSelectedBlockMatrixFragment( aRange.aStart.Col(), aRange.aStart.Row(), aRange.aEnd.Col(), aRange.aEnd.Row(), @@ -342,9 +343,8 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI ScDrawLayer::SetGlobalDrawPersist( ScTransferObj::SetDrawClipDoc( bAnyOle ) ); } - pDoc->CopyToClip( aRange.aStart.Col(), aRange.aStart.Row(), - aRange.aEnd.Col(), aRange.aEnd.Row(), - bCut, pClipDoc, FALSE, &rMark, FALSE, bIncludeObjects ); + ScClipParam aClipParam(aRange, bCut); + pDoc->CopyToClip(aClipParam, pClipDoc, &rMark, false, false, bIncludeObjects); if (bSysClip) { ScDrawLayer::SetGlobalDrawPersist(NULL); @@ -382,6 +382,124 @@ BOOL ScViewFunc::CopyToClip( ScDocument* pClipDoc, BOOL bCut, BOOL bApi, BOOL bI ErrorMessage(STR_MATRIXFRAGMENTERR); } } + else if (eMarkType == SC_MARK_MULTI) + { + bool bSuccess = false; + ScClipParam aClipParam; + aClipParam.mbCutMode = false; + rMark.MarkToSimple(); + rMark.FillRangeListWithMarks(&aClipParam.maRanges, false); + + do + { + if (bCut) + // We con't support cutting of multi-selections. + break; + + if (pClipDoc) + // TODO: What's this for? + break; + + ::std::auto_ptr<ScDocument> pDocClip(new ScDocument(SCDOCMODE_CLIP)); + + // Check for geometrical feasibility of the ranges. + bool bValidRanges = true; + ScRangePtr p = aClipParam.maRanges.First(); + SCCOL nPrevColDelta = 0; + SCROW nPrevRowDelta = 0; + SCCOL nPrevCol = p->aStart.Col(); + SCROW nPrevRow = p->aStart.Row(); + SCCOL nPrevColSize = p->aEnd.Col() - p->aStart.Col() + 1; + SCROW nPrevRowSize = p->aEnd.Row() - p->aStart.Row() + 1; + for (p = aClipParam.maRanges.Next(); p; p = aClipParam.maRanges.Next()) + { + if (pDoc->HasSelectedBlockMatrixFragment( + p->aStart.Col(), p->aStart.Row(), p->aEnd.Col(), p->aEnd.Row(), rMark)) + { + if (!bApi) + ErrorMessage(STR_MATRIXFRAGMENTERR); + return false; + } + + SCCOL nColDelta = p->aStart.Col() - nPrevCol; + SCROW nRowDelta = p->aStart.Row() - nPrevRow; + + if ((nColDelta && nRowDelta) || (nPrevColDelta && nRowDelta) || (nPrevRowDelta && nColDelta)) + { + bValidRanges = false; + break; + } + + if (aClipParam.meDirection == ScClipParam::Unspecified) + { + if (nColDelta) + aClipParam.meDirection = ScClipParam::Column; + if (nRowDelta) + aClipParam.meDirection = ScClipParam::Row; + } + + SCCOL nColSize = p->aEnd.Col() - p->aStart.Col() + 1; + SCROW nRowSize = p->aEnd.Row() - p->aStart.Row() + 1; + + if (aClipParam.meDirection == ScClipParam::Column && nRowSize != nPrevRowSize) + { + // column-oriented ranges must have identical row size. + bValidRanges = false; + break; + } + if (aClipParam.meDirection == ScClipParam::Row && nColSize != nPrevColSize) + { + // likewise, row-oriented ranges must have identical + // column size. + bValidRanges = false; + break; + } + + nPrevCol = p->aStart.Col(); + nPrevRow = p->aStart.Row(); + nPrevColDelta = nColDelta; + nPrevRowDelta = nRowDelta; + nPrevColSize = nColSize; + nPrevRowSize = nRowSize; + } + if (!bValidRanges) + break; + + pDoc->CopyToClip(aClipParam, pDocClip.get(), &rMark, false, false, bIncludeObjects); + + ScChangeTrack* pChangeTrack = pDoc->GetChangeTrack(); + if ( pChangeTrack ) + pChangeTrack->ResetLastCut(); // kein CutMode mehr + + { + ScDocShell* pDocSh = GetViewData()->GetDocShell(); + TransferableObjectDescriptor aObjDesc; + pDocSh->FillTransferableObjectDescriptor( aObjDesc ); + aObjDesc.maDisplayName = pDocSh->GetMedium()->GetURLObject().GetURLNoPass(); + // maSize is set in ScTransferObj ctor + + ScTransferObj* pTransferObj = new ScTransferObj( pDocClip.release(), aObjDesc ); + uno::Reference<datatransfer::XTransferable> xTransferable( pTransferObj ); + + if ( ScGlobal::pDrawClipDocShellRef ) + { + SfxObjectShellRef aPersistRef( &(*ScGlobal::pDrawClipDocShellRef) ); + pTransferObj->SetDrawPersist( aPersistRef ); // keep persist for ole objects alive + } + + pTransferObj->CopyToClipboard( GetActiveWin() ); // system clipboard + SC_MOD()->SetClipObject( pTransferObj, NULL ); // internal clipboard + } + + bSuccess = true; + } + while (false); + + if (!bSuccess && !bApi) + ErrorMessage(STR_NOMULTISELECT); + + bDone = bSuccess; + } else { if (!bApi) @@ -408,9 +526,8 @@ ScTransferObj* ScViewFunc::CopyToTransferable() BOOL bAnyOle = pDoc->HasOLEObjectsInArea( aRange, &rMark ); ScDrawLayer::SetGlobalDrawPersist( ScTransferObj::SetDrawClipDoc( bAnyOle ) ); - pDoc->CopyToClip( aRange.aStart.Col(), aRange.aStart.Row(), - aRange.aEnd.Col(), aRange.aEnd.Row(), - FALSE, pClipDoc, FALSE, &rMark, FALSE, TRUE ); + ScClipParam aClipParam(aRange, false); + pDoc->CopyToClip(aClipParam, pClipDoc, &rMark, false, false, true); ScDrawLayer::SetGlobalDrawPersist(NULL); pClipDoc->ExtendMerge( aRange, TRUE ); @@ -739,6 +856,52 @@ BOOL lcl_SelHasAttrib( ScDocument* pDoc, SCCOL nCol1, SCROW nRow1, SCCOL nCol2, // internes Paste +namespace { + +class CursorSwitcher +{ +public: + CursorSwitcher(ScViewFunc* pViewFunc) : + mpViewFunc(pViewFunc) + { + mpViewFunc->HideCursor(); + } + + ~CursorSwitcher() + { + mpViewFunc->ShowCursor(); + } +private: + ScViewFunc* mpViewFunc; +}; + +bool lcl_checkDestRangeForOverwrite(const ScRange& rDestRange, const ScDocument* pDoc, const ScMarkData& rMark, Window* pParentWnd) +{ + bool bIsEmpty = true; + SCTAB nTabCount = pDoc->GetTableCount(); + for (SCTAB nTab=0; nTab < nTabCount && bIsEmpty; ++nTab) + { + if (!rMark.GetTableSelect(nTab)) + continue; + + bIsEmpty = pDoc->IsBlockEmpty(nTab, rDestRange.aStart.Col(), rDestRange.aStart.Row(), + rDestRange.aEnd.Col(), rDestRange.aEnd.Row()); + } + + if (!bIsEmpty) + { + ScReplaceWarnBox aBox(pParentWnd); + if (aBox.Execute() != RET_YES) + { + // changing the configuration is within the ScReplaceWarnBox + return false; + } + } + return true; +} + +} + BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, USHORT nFunction, BOOL bSkipEmpty, BOOL bTranspose, BOOL bAsLink, @@ -764,6 +927,12 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, // do not copy note captions into undo document nUndoFlags |= IDF_NOCAPTIONS; + ScClipParam& rClipParam = pClipDoc->GetClipParam(); + if (rClipParam.isMultiRange()) + return PasteMultiRangesFromClip( + nFlags, pClipDoc, nFunction, bSkipEmpty, bTranspose, bAsLink, bAllowDialogs, + eMoveMode, nContFlags, nUndoFlags); + BOOL bCutMode = pClipDoc->IsCutMode(); // if transposing, take from original clipdoc BOOL bIncludeFiltered = bCutMode; @@ -992,23 +1161,8 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, SC_MOD()->GetInputOptions().GetReplaceCellsWarn(); if ( bAskIfNotEmpty ) { - BOOL bIsEmpty = TRUE; - SCTAB nTabCount = pDoc->GetTableCount(); - for (SCTAB nTab=0; nTab<nTabCount && bIsEmpty; nTab++) - if ( aFilteredMark.GetTableSelect(nTab) && - !pDoc->IsBlockEmpty( nTab, aUserRange.aStart.Col(), aUserRange.aStart.Row(), - aUserRange.aEnd.Col(), aUserRange.aEnd.Row() ) ) - bIsEmpty = FALSE; - - if ( !bIsEmpty ) - { - ScReplaceWarnBox aBox( GetViewData()->GetDialogParent() ); - if ( aBox.Execute() != RET_YES ) - { - // changing the configuration is within the ScReplaceWarnBox - return FALSE; - } - } + if (!lcl_checkDestRangeForOverwrite(aUserRange, pDoc, aFilteredMark, GetViewData()->GetDialogParent())) + return false; } } @@ -1302,7 +1456,179 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, // AdjustBlockHeight has already been called above aModificator.SetDocumentModified(); - pDocSh->UpdateOle(GetViewData()); + PostPasteFromClip(aUserRange, rMark); + return TRUE; +} + +bool ScViewFunc::PasteMultiRangesFromClip( + sal_uInt16 nFlags, ScDocument* pClipDoc, sal_uInt16 nFunction, + bool bSkipEmpty, bool bTranspose, bool bAsLink, bool bAllowDialogs, + InsCellCmd eMoveMode, sal_uInt16 /*nContFlags*/, sal_uInt16 nUndoFlags) +{ + ScViewData& rViewData = *GetViewData(); + ScDocument* pDoc = rViewData.GetDocument(); + ScDocShell* pDocSh = rViewData.GetDocShell(); + ScMarkData aMark(rViewData.GetMarkData()); + const ScAddress& rCurPos = rViewData.GetCurPos(); + ScClipParam& rClipParam = pClipDoc->GetClipParam(); + SCCOL nColSize = rClipParam.getPasteColSize(); + SCROW nRowSize = rClipParam.getPasteRowSize(); + + if (bTranspose) + { + if (static_cast<SCROW>(rCurPos.Col()) + nRowSize-1 > static_cast<SCROW>(MAXCOL)) + { + ErrorMessage(STR_PASTE_FULL); + return false; + } + + ::std::auto_ptr<ScDocument> pTransClip(new ScDocument(SCDOCMODE_CLIP)); + pClipDoc->TransposeClip(pTransClip.get(), nFlags, bAsLink); + pClipDoc = pTransClip.release(); + SCCOL nTempColSize = nColSize; + nColSize = static_cast<SCCOL>(nRowSize); + nRowSize = static_cast<SCROW>(nTempColSize); + } + + if (!ValidCol(rCurPos.Col()+nColSize-1) || !ValidRow(rCurPos.Row()+nRowSize-1)) + { + ErrorMessage(STR_PASTE_FULL); + return false; + } + + // Determine the first and last selected sheet numbers. + SCTAB nTab1 = aMark.GetFirstSelected(); + SCTAB nTab2 = nTab1; + for (SCTAB i = nTab1+1; i <= MAXTAB; ++i) + if (aMark.GetTableSelect(i)) + nTab2 = i; + + ScDocShellModificator aModificator(*pDocSh); + + // For multi-selection paste, we don't support cell duplication for larger + // destination range. In case the destination is marked, we reset it to + // the clip size. + ScRange aMarkedRange(rCurPos.Col(), rCurPos.Row(), nTab1, + rCurPos.Col()+nColSize-1, rCurPos.Row()+nRowSize-1, nTab2); + + // Extend the marked range to account for filtered rows in the destination + // area. + if (ScViewUtil::HasFiltered(aMarkedRange, pDoc)) + { + if (!ScViewUtil::FitToUnfilteredRows(aMarkedRange, pDoc, nRowSize)) + return false; + } + + bool bAskIfNotEmpty = + bAllowDialogs && (nFlags & IDF_CONTENTS) && + nFunction == PASTE_NOFUNC && SC_MOD()->GetInputOptions().GetReplaceCellsWarn(); + + if (bAskIfNotEmpty) + { + if (!lcl_checkDestRangeForOverwrite(aMarkedRange, pDoc, aMark, rViewData.GetDialogParent())) + return false; + } + + aMark.SetMarkArea(aMarkedRange); + MarkRange(aMarkedRange); + + bool bInsertCells = (eMoveMode != INS_NONE); + if (bInsertCells) + { + if (!InsertCells(eMoveMode, pDoc->IsUndoEnabled(), true)) + return false; + } + + ::std::auto_ptr<ScDocument> pUndoDoc; + if (pDoc->IsUndoEnabled()) + { + pUndoDoc.reset(new ScDocument(SCDOCMODE_UNDO)); + pUndoDoc->InitUndoSelected(pDoc, aMark, false, false); + pDoc->CopyToDocument(aMarkedRange, nUndoFlags, false, pUndoDoc.get(), &aMark, true); + } + + ::std::auto_ptr<ScDocument> pMixDoc; + if ( bSkipEmpty || nFunction ) + { + if ( nFlags & IDF_CONTENTS ) + { + pMixDoc.reset(new ScDocument(SCDOCMODE_UNDO)); + pMixDoc->InitUndoSelected(pDoc, aMark, false, false); + pDoc->CopyToDocument(aMarkedRange, IDF_CONTENTS, false, pMixDoc.get(), &aMark, true); + } + } + + /* Make draw layer and start drawing undo. + - Needed before AdjustBlockHeight to track moved drawing objects. + - Needed before pDoc->CopyFromClip to track inserted note caption objects. + */ + if (nFlags & IDF_OBJECTS) + pDocSh->MakeDrawLayer(); + if (pDoc->IsUndoEnabled()) + pDoc->BeginDrawUndo(); + + CursorSwitcher aCursorSwitch(this); + sal_uInt16 nNoObjFlags = nFlags & ~IDF_OBJECTS; + pDoc->CopyMultiRangeFromClip(rCurPos, aMark, nNoObjFlags, pClipDoc, + true, bAsLink, false, bSkipEmpty); + + if (pMixDoc.get()) + pDoc->MixDocument(aMarkedRange, nFunction, bSkipEmpty, pMixDoc.get()); + + AdjustBlockHeight(); // update row heights before pasting objects + + if (nFlags & IDF_OBJECTS) + { + // Paste the drawing objects after the row heights have been updated. + pDoc->CopyMultiRangeFromClip(rCurPos, aMark, IDF_OBJECTS, pClipDoc, + true, false, false, true); + } + + pDocSh->PostPaint( + aMarkedRange.aStart.Col(), aMarkedRange.aStart.Row(), nTab1, + aMarkedRange.aEnd.Col(), aMarkedRange.aEnd.Row(), nTab1, PAINT_GRID); + + if (pDoc->IsUndoEnabled()) + { + SfxUndoManager* pUndoMgr = pDocSh->GetUndoManager(); + String aUndo = ScGlobal::GetRscString( + pClipDoc->IsCutMode() ? STR_UNDO_CUT : STR_UNDO_COPY); + pUndoMgr->EnterListAction(aUndo, aUndo); + + ScUndoPasteOptions aOptions; // store options for repeat + aOptions.nFunction = nFunction; + aOptions.bSkipEmpty = bSkipEmpty; + aOptions.bTranspose = bTranspose; + aOptions.bAsLink = bAsLink; + aOptions.eMoveMode = eMoveMode; + + ScUndoPaste* pUndo = new ScUndoPaste(pDocSh, + aMarkedRange.aStart.Col(), + aMarkedRange.aStart.Row(), + aMarkedRange.aStart.Tab(), + aMarkedRange.aEnd.Col(), + aMarkedRange.aEnd.Row(), + aMarkedRange.aEnd.Tab(), + aMark, pUndoDoc.release(), NULL, nFlags|nUndoFlags, NULL, NULL, NULL, NULL, false, &aOptions); + + if (bInsertCells) + pUndoMgr->AddUndoAction(new ScUndoWrapper(pUndo), true); + else + pUndoMgr->AddUndoAction(pUndo, false); + + pUndoMgr->LeaveListAction(); + } + aModificator.SetDocumentModified(); + PostPasteFromClip(aMarkedRange, aMark); + return true; +} + +void ScViewFunc::PostPasteFromClip(const ScRange& rPasteRange, const ScMarkData& rMark) +{ + ScViewData* pViewData = GetViewData(); + ScDocShell* pDocSh = pViewData->GetDocShell(); + ScDocument* pDoc = pViewData->GetDocument(); + pDocSh->UpdateOle(pViewData); SelectionChanged(); @@ -1316,7 +1642,7 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, { if ( rMark.GetTableSelect( i ) ) { - ScRange aChangeRange( aUserRange ); + ScRange aChangeRange(rPasteRange); aChangeRange.aStart.SetTab( i ); aChangeRange.aEnd.SetTab( i ); aChangeRanges.Append( aChangeRange ); @@ -1324,8 +1650,6 @@ BOOL ScViewFunc::PasteFromClip( USHORT nFlags, ScDocument* pClipDoc, } pModelObj->NotifyChanges( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "cell-change" ) ), aChangeRanges ); } - - return TRUE; } diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx index 0f3a1c812802..578f6c1fe733 100644 --- a/sc/source/ui/view/viewfun4.cxx +++ b/sc/source/ui/view/viewfun4.cxx @@ -155,7 +155,7 @@ void ScViewFunc::PasteRTF( SCCOL nStartCol, SCROW nStartRow, { ScDocument* pRedoDoc = new ScDocument( SCDOCMODE_UNDO ); pRedoDoc->InitUndo( pDoc, nTab, nTab ); - pDoc->CopyToDocument( nStartCol,nStartRow,nTab, nStartCol,nEndRow,nTab, IDF_ALL, FALSE, pRedoDoc ); + pDoc->CopyToDocument( nStartCol,nStartRow,nTab, nStartCol,nEndRow,nTab, IDF_ALL|IDF_NOCAPTIONS, FALSE, pRedoDoc ); ScMarkData aDestMark; aDestMark.SelectOneTable( nTab ); diff --git a/sc/source/ui/view/viewfun5.cxx b/sc/source/ui/view/viewfun5.cxx index f8b89a85e11c..35af3ee2a2e3 100644 --- a/sc/source/ui/view/viewfun5.cxx +++ b/sc/source/ui/view/viewfun5.cxx @@ -79,6 +79,7 @@ #include "asciiopt.hxx" #include "scabstdlg.hxx" +#include "clipparam.hxx" #include <vcl/msgbox.hxx> #include <sfx2/viewfrm.hxx> #include <svx/dbaexchange.hxx> @@ -163,12 +164,12 @@ BOOL ScViewFunc::PasteDataFormat( ULONG nFormatId, if ( pSrcDoc->GetDataStart( nSrcTab, nFirstCol, nFirstRow ) ) pSrcDoc->GetCellArea( nSrcTab, nLastCol, nLastRow ); else - { + { nFirstCol = nLastCol = 0; nFirstRow = nLastRow = 0; - } - pSrcDoc->CopyToClip( nFirstCol, nFirstRow, nLastCol, nLastRow, - FALSE, pClipDoc, FALSE, &aSrcMark ); + } + ScClipParam aClipParam(ScRange(nFirstCol, nFirstRow, 0, nLastCol, nLastRow, 0), false); + pSrcDoc->CopyToClip(aClipParam, pClipDoc, &aSrcMark); ScGlobal::SetClipDocName( xDocShRef->GetTitle( SFX_TITLE_FULLNAME ) ); SetCursor( nPosX, nPosY ); diff --git a/sc/source/ui/view/viewutil.cxx b/sc/source/ui/view/viewutil.cxx index 83dd05c9d33c..d0a6f2acf015 100644 --- a/sc/source/ui/view/viewutil.cxx +++ b/sc/source/ui/view/viewutil.cxx @@ -481,12 +481,13 @@ BOOL ScUpdateRect::GetDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 ) return TRUE; } +#ifdef OLD_SELECTION_PAINT BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, BOOL& rCont ) { rCont = FALSE; - if ( nNewStartX == nOldStartX && nNewEndX == nOldEndX && - nNewStartY == nOldStartY && nNewEndY == nOldEndY ) + if (nNewStartX == nOldStartX && nNewEndX == nOldEndX && + nNewStartY == nOldStartY && nNewEndY == nOldEndY) { rX1 = nNewStartX; rY1 = nNewStartY; @@ -500,14 +501,14 @@ BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, B rX2 = Max(nNewEndX,nOldEndX); rY2 = Max(nNewEndY,nOldEndY); - if ( nNewStartX == nOldStartX && nNewEndX == nOldEndX ) // nur vertikal + if (nNewStartX == nOldStartX && nNewEndX == nOldEndX) // nur vertikal { - if ( nNewStartY == nOldStartY ) + if (nNewStartY == nOldStartY) { rY1 = Min( nNewEndY, nOldEndY ) + 1; rY2 = Max( nNewEndY, nOldEndY ); } - else if ( nNewEndY == nOldEndY ) + else if (nNewEndY == nOldEndY) { rY1 = Min( nNewStartY, nOldStartY ); rY2 = Max( nNewStartY, nOldStartY ) - 1; @@ -523,14 +524,14 @@ BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, B nContX2 = rX2; } } - else if ( nNewStartY == nOldStartY && nNewEndY == nOldEndY ) // nur horizontal + else if (nNewStartY == nOldStartY && nNewEndY == nOldEndY) // nur horizontal { - if ( nNewStartX == nOldStartX ) + if (nNewStartX == nOldStartX) { rX1 = Min( nNewEndX, nOldEndX ) + 1; rX2 = Max( nNewEndX, nOldEndX ); } - else if ( nNewEndX == nOldEndX ) + else if (nNewEndX == nOldEndX) { rX1 = Min( nNewStartX, nOldStartX ); rX2 = Max( nNewStartX, nOldStartX ) - 1; @@ -546,9 +547,9 @@ BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, B nContY2 = rY2; } } - else if ( nNewEndX == nOldEndX && nNewEndY == nOldEndY ) // links oben + else if (nNewEndX == nOldEndX && nNewEndY == nOldEndY) // links oben { - if ( (nNewStartX<nOldStartX) == (nNewStartY<nOldStartY) ) + if ((nNewStartX<nOldStartX) == (nNewStartY<nOldStartY)) rX1 = Min( nNewStartX, nOldStartX ); else rX1 = Max( nNewStartX, nOldStartX ); // Ecke weglassen @@ -561,9 +562,9 @@ BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, B nContX1 = Min( nNewStartX, nOldStartX ); // links nContX2 = Max( nNewStartX, nOldStartX ) - 1; } - else if ( nNewStartX == nOldStartX && nNewEndY == nOldEndY ) // rechts oben + else if (nNewStartX == nOldStartX && nNewEndY == nOldEndY) // rechts oben { - if ( (nNewEndX<nOldEndX) != (nNewStartY<nOldStartY) ) + if ((nNewEndX<nOldEndX) != (nNewStartY<nOldStartY)) rX2 = Max( nNewEndX, nOldEndX ); else rX2 = Min( nNewEndX, nOldEndX ); // Ecke weglassen @@ -576,9 +577,9 @@ BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, B nContX1 = Min( nNewEndX, nOldEndX ) + 1; // rechts nContX2 = Max( nNewEndX, nOldEndX ); } - else if ( nNewEndX == nOldEndX && nNewStartY == nOldStartY ) // links unten + else if (nNewEndX == nOldEndX && nNewStartY == nOldStartY) // links unten { - if ( (nNewStartX<nOldStartX) != (nNewEndY<nOldEndY) ) + if ((nNewStartX<nOldStartX) != (nNewEndY<nOldEndY)) rX1 = Min( nNewStartX, nOldStartX ); else rX1 = Max( nNewStartX, nOldStartX ); // Ecke weglassen @@ -591,9 +592,9 @@ BOOL ScUpdateRect::GetXorDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2, B nContX1 = Min( nNewStartX, nOldStartX ); // links nContX2 = Max( nNewStartX, nOldStartX ) - 1; } - else if ( nNewStartX == nOldStartX && nNewStartY == nOldStartY ) // rechts unten + else if (nNewStartX == nOldStartX && nNewStartY == nOldStartY) // rechts unten { - if ( (nNewEndX<nOldEndX) == (nNewEndY<nOldEndY) ) + if ((nNewEndX<nOldEndX) == (nNewEndY<nOldEndY)) rX2 = Max( nNewEndX, nOldEndX ); else rX2 = Min( nNewEndX, nOldEndX ); // Ecke weglassen @@ -629,6 +630,7 @@ void ScUpdateRect::GetContDiff( SCCOL& rX1, SCROW& rY1, SCCOL& rX2, SCROW& rY2 ) rX2 = nContX2; rY2 = nContY2; } +#endif |