Modified: openoffice/trunk/main/svx/source/table/svdotable.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svx/source/table/svdotable.cxx?rev=1439888&r1=1439887&r2=1439888&view=diff ============================================================================== --- openoffice/trunk/main/svx/source/table/svdotable.cxx (original) +++ openoffice/trunk/main/svx/source/table/svdotable.cxx Tue Jan 29 13:32:36 2013 @@ -2427,7 +2427,7 @@ void SdrTableObj::AddToHdlList(SdrHdlLis // add remaining handles SdrHdl* pH=0; - rHdlList.AddHdl( pH = new TableBorderHdl( aRect ) ); pH->SetMoveOutside( true ); + rHdlList.AddHdl( pH = new TableBorderHdl( aRect, !IsTextEditActive() ) ); pH->SetMoveOutside( true ); rHdlList.AddHdl( pH = new SdrHdl(aRect.TopLeft(),HDL_UPLFT) ); pH->SetMoveOutside( true ); rHdlList.AddHdl( pH = new SdrHdl(aRect.TopCenter(),HDL_UPPER) ); pH->SetMoveOutside( true ); rHdlList.AddHdl( pH = new SdrHdl(aRect.TopRight(),HDL_UPRGT) ); pH->SetMoveOutside( true );
Modified: openoffice/trunk/main/svx/source/table/tablehandles.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svx/source/table/tablehandles.cxx?rev=1439888&r1=1439887&r2=1439888&view=diff ============================================================================== --- openoffice/trunk/main/svx/source/table/tablehandles.cxx (original) +++ openoffice/trunk/main/svx/source/table/tablehandles.cxx Tue Jan 29 13:32:36 2013 @@ -42,7 +42,7 @@ #include <svx/svdmrkv.hxx> #include <svx/svdpagv.hxx> #include <drawinglayer/primitive2d/polypolygonprimitive2d.hxx> -#include <svx/sdr/overlay/overlayhatchrect.hxx> +#include <svx/sdr/overlay/overlayrectangle.hxx> #include <drawinglayer/primitive2d/hiddengeometryprimitive2d.hxx> namespace sdr { namespace table { @@ -252,11 +252,13 @@ drawinglayer::primitive2d::Primitive2DSe // ==================================================================== -TableBorderHdl::TableBorderHdl( const Rectangle& rRect ) -: SdrHdl( rRect.TopLeft(), HDL_MOVE ) -, maRectangle( rRect ) +TableBorderHdl::TableBorderHdl( + const Rectangle& rRect, + bool bAnimate) +: SdrHdl(rRect.TopLeft(), HDL_MOVE), + maRectangle(rRect), + mbAnimate(bAnimate) { - } Pointer TableBorderHdl::GetPointer() const @@ -278,7 +280,6 @@ void TableBorderHdl::CreateB2dIAObject() { for(sal_uInt32 nWindow = 0; nWindow < pPageView->PageWindowCount(); nWindow++) { - // const SdrPageViewWinRec& rPageViewWinRec = rPageViewWinList[b]; const SdrPageWindow& rPageWindow = *pPageView->GetPageWindow(nWindow); if(rPageWindow.GetPaintWindow().OutputToWindow()) @@ -286,14 +287,24 @@ void TableBorderHdl::CreateB2dIAObject() if(rPageWindow.GetOverlayManager()) { const basegfx::B2DRange aRange(vcl::unotools::b2DRectangleFromRectangle(maRectangle)); - sdr::overlay::OverlayObject* pOverlayObject = new sdr::overlay::OverlayHatchRect( + const SvtOptionsDrawinglayer aSvtOptionsDrawinglayer; + const Color aHilightColor(aSvtOptionsDrawinglayer.getHilightColor()); + const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() * 0.01); + + sdr::overlay::OverlayObject* pOverlayObject = new sdr::overlay::OverlayRectangle( aRange.getMinimum(), aRange.getMaximum(), - Color(0x80, 0x80, 0x80), + aHilightColor, + fTransparence, 6.0, 0.0, - 45 * F_PI180, - 0.0); + 0.0, + 500, + // make animation dependent from text edit active, because for tables + // this handle is also used when text edit *is* active for it. This + // interferes too much concerning repaint stuff (at least as long as + // text edit is not yet on the overlay) + getAnimate()); rPageWindow.GetOverlayManager()->add(*pOverlayObject); maOverlayGroup.append(*pOverlayObject); Modified: openoffice/trunk/main/svx/source/table/tablehandles.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svx/source/table/tablehandles.hxx?rev=1439888&r1=1439887&r2=1439888&view=diff ============================================================================== --- openoffice/trunk/main/svx/source/table/tablehandles.hxx (original) +++ openoffice/trunk/main/svx/source/table/tablehandles.hxx Tue Jan 29 13:32:36 2013 @@ -74,16 +74,22 @@ private: class TableBorderHdl : public SdrHdl { public: - TableBorderHdl( const Rectangle& rRect ); + TableBorderHdl( + const Rectangle& rRect, + bool bAnimate); virtual Pointer GetPointer() const; + bool getAnimate() const { return mbAnimate; } protected: // create marker for this kind virtual void CreateB2dIAObject(); private: - Rectangle maRectangle; + Rectangle maRectangle; + + /// bitfield + bool mbAnimate : 1; }; } // end of namespace table Modified: openoffice/trunk/main/sw/source/core/frmedt/fecopy.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/frmedt/fecopy.cxx?rev=1439888&r1=1439887&r2=1439888&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/core/frmedt/fecopy.cxx (original) +++ openoffice/trunk/main/sw/source/core/frmedt/fecopy.cxx Tue Jan 29 13:32:36 2013 @@ -1466,7 +1466,43 @@ void SwFEShell::Paste( SvStream& rStrm, case SW_PASTESDR_SETATTR: { SfxItemSet aSet( GetAttrPool() ); - aSet.Put(pClpObj->GetMergedItemSet()); + const SdrGrafObj* pSdrGrafObj = dynamic_cast< const SdrGrafObj* >(pClpObj); + + if(pSdrGrafObj) + { + SdrObject* pTarget = 0; + + if(0 != pView->GetMarkedObjectList().GetMarkCount()) + { + // try to get target (if it's at least one, take first) + SdrMark* pMark = pView->GetMarkedObjectList().GetMark(0); + + if(pMark) + { + pTarget = pMark->GetMarkedSdrObj(); + } + } + + if(pTarget) + { + // copy ItemSet from target + aSet.Set(pTarget->GetMergedItemSet()); + } + + // for SdrGrafObj, use the graphic as fill style argument + const Graphic& rGraphic = pSdrGrafObj->GetGraphic(); + + if(GRAPHIC_NONE != rGraphic.GetType() && GRAPHIC_DEFAULT != rGraphic.GetType()) + { + aSet.Put(XFillBitmapItem(String(), rGraphic)); + aSet.Put(XFillStyleItem(XFILL_BITMAP)); + } + } + else + { + aSet.Put(pClpObj->GetMergedItemSet()); + } + pView->SetAttributes( aSet, sal_False ); } break; Modified: openoffice/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx?rev=1439888&r1=1439887&r2=1439888&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx (original) +++ openoffice/trunk/main/sw/source/ui/dochdl/swdtflvr.cxx Tue Jan 29 13:32:36 2013 @@ -397,8 +397,13 @@ sal_Bool SwTransferable::GetData( const { SelectionType nSelectionType = pWrtShell->GetSelectionType(); -// SEL_GRF kommt vom ContentType der editsh - if( (nsSelectionType::SEL_GRF | nsSelectionType::SEL_DRW_FORM) & nSelectionType ) + // when pending we will not get the correct type, but nsSelectionType::SEL_TXT + // as fallback. This *happens* durning D&D, so we need to check if we are in + // the fallback and just try to get a graphic + const bool bPending(pWrtShell->BasicActionPend()); + + // SEL_GRF kommt vom ContentType der editsh + if(bPending || ((nsSelectionType::SEL_GRF | nsSelectionType::SEL_DRW_FORM) & nSelectionType)) { pClpGraphic = new Graphic; if( !pWrtShell->GetDrawObjGraphic( FORMAT_GDIMETAFILE, *pClpGraphic )) @@ -1230,8 +1235,31 @@ int SwTransferable::PasteData( Transfera // pTunneledTrans = (SwTransferable*) (sal_IntPtr) nHandle; // } - if( pPt && ( bPasteSelection ? 0 != ( pTrans = pMod->pXSelection ) - : 0 != ( pTrans = pMod->pDragDrop) )) + // check for private drop + bool bPrivateDrop(pPt && (bPasteSelection ? 0 != (pTrans = pMod->pXSelection) : 0 != (pTrans = pMod->pDragDrop))); + bool bNeedToSelectBeforePaste(false); + + if(bPrivateDrop && DND_ACTION_LINK == nDropAction) + { + // internal drop on object, suppress bPrivateDrop to change internal fill + bPrivateDrop = false; + bNeedToSelectBeforePaste = true; + } + + if(bPrivateDrop && pPt && DND_ACTION_MOVE == nDropAction) + { + // check if dragged over a useful target. If yes, use as content exchange + // drop as if from external + const SwFrmFmt* pSwFrmFmt = rSh.GetFmtFromObj(*pPt); + + if(pSwFrmFmt && 0 != dynamic_cast< const SwDrawFrmFmt* >(pSwFrmFmt)) + { + bPrivateDrop = false; + bNeedToSelectBeforePaste = true; + } + } + + if(bPrivateDrop) { // then internal Drag & Drop or XSelection nRet = pTrans->PrivateDrop( rSh, *pPt, DND_ACTION_MOVE == nDropAction, @@ -1283,7 +1311,7 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case SOT_FORMATSTR_ID_DRAWING: nRet = SwTransferable::_PasteSdrFormat( rData, rSh, SW_PASTESDR_INSERT, pPt, - nActionFlags ); + nActionFlags, bNeedToSelectBeforePaste); break; case SOT_FORMATSTR_ID_HTML: @@ -1321,7 +1349,7 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case SOT_FORMAT_GDIMETAFILE: nRet = SwTransferable::_PasteGrf( rData, rSh, nFormat, SW_PASTESDR_INSERT,pPt, - nActionFlags, bMsg ); + nActionFlags, nDropAction, bNeedToSelectBeforePaste); break; case SOT_FORMATSTR_ID_XFORMS: @@ -1441,7 +1469,7 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case SOT_FORMATSTR_ID_DRAWING: nRet = SwTransferable::_PasteSdrFormat( rData, rSh, SW_PASTESDR_SETATTR, pPt, - nActionFlags ); + nActionFlags, bNeedToSelectBeforePaste); break; case SOT_FORMATSTR_ID_SVXB: case SOT_FORMAT_GDIMETAFILE: @@ -1452,7 +1480,7 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR: nRet = SwTransferable::_PasteGrf( rData, rSh, nFormat, SW_PASTESDR_SETATTR, pPt, - nActionFlags, bMsg ); + nActionFlags, nDropAction, bNeedToSelectBeforePaste); break; default: ASSERT( sal_False, "unbekanntes Format" ); @@ -1463,7 +1491,7 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case EXCHG_OUT_ACTION_INSERT_DRAWOBJ: nRet = SwTransferable::_PasteSdrFormat( rData, rSh, SW_PASTESDR_INSERT, pPt, - nActionFlags ); + nActionFlags, bNeedToSelectBeforePaste); break; case EXCHG_OUT_ACTION_INSERT_SVXB: case EXCHG_OUT_ACTION_INSERT_GDIMETAFILE: @@ -1471,13 +1499,13 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case EXCHG_OUT_ACTION_INSERT_GRAPH: nRet = SwTransferable::_PasteGrf( rData, rSh, nFormat, SW_PASTESDR_INSERT, pPt, - nActionFlags, bMsg ); + nActionFlags, nDropAction, bNeedToSelectBeforePaste); break; case EXCHG_OUT_ACTION_REPLACE_DRAWOBJ: nRet = SwTransferable::_PasteSdrFormat( rData, rSh, SW_PASTESDR_REPLACE, pPt, - nActionFlags ); + nActionFlags, bNeedToSelectBeforePaste); break; case EXCHG_OUT_ACTION_REPLACE_SVXB: @@ -1486,7 +1514,7 @@ ASSERT( pPt, "EXCHG_OUT_ACTION_MOVE_PRIV case EXCHG_OUT_ACTION_REPLACE_GRAPH: nRet = SwTransferable::_PasteGrf( rData, rSh, nFormat, SW_PASTESDR_REPLACE,pPt, - nActionFlags, bMsg ); + nActionFlags, nDropAction, bNeedToSelectBeforePaste); break; case EXCHG_OUT_ACTION_INSERT_INTERACTIVE: @@ -2212,13 +2240,21 @@ int SwTransferable::_PasteDDE( Transfera int SwTransferable::_PasteSdrFormat( TransferableDataHelper& rData, SwWrtShell& rSh, sal_uInt16 nAction, - const Point* pPt, sal_uInt8 nActionFlags ) + const Point* pPt, sal_uInt8 nActionFlags, bool bNeedToSelectBeforePaste) { int nRet = 0; SotStorageStreamRef xStrm; if( rData.GetSotStorageStream( SOT_FORMATSTR_ID_DRAWING, xStrm )) { xStrm->SetVersion( SOFFICE_FILEFORMAT_50 ); + + if(bNeedToSelectBeforePaste && pPt) + { + // if this is an internal drag, need to set the target right (select it), else + // still the source will be selected + SwTransferable::SetSelInShell( rSh, sal_True, pPt ); + } + rSh.Paste( *xStrm, nAction, pPt ); nRet = 1; @@ -2233,7 +2269,7 @@ int SwTransferable::_PasteSdrFormat( Tr int SwTransferable::_PasteGrf( TransferableDataHelper& rData, SwWrtShell& rSh, sal_uLong nFmt, sal_uInt16 nAction, const Point* pPt, - sal_uInt8 nActionFlags, sal_Bool /*bMsg*/ ) + sal_uInt8 nActionFlags, sal_Int8 nDropAction, bool bNeedToSelectBeforePaste) { int nRet = 0; @@ -2248,6 +2284,19 @@ int SwTransferable::_PasteGrf( Transfera nRet = rData.GetGraphic( nFmt, aGrf ); break; + case SOT_FORMATSTR_ID_SVXB: + { + SotStorageStreamRef xStm; + + if(rData.GetSotStorageStream(SOT_FORMATSTR_ID_SVXB, xStm)) + { + *xStm >> aGrf; + nRet = (GRAPHIC_NONE != aGrf.GetType() && GRAPHIC_DEFAULT != aGrf.GetType()); + } + + break; + } + case SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK: case SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR: case SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR: @@ -2307,6 +2356,15 @@ int SwTransferable::_PasteGrf( Transfera } } + if(pPt && bNeedToSelectBeforePaste) + { + // when using internal D&Ds, still the source object is selected and + // this is necessary to get the correct source data which is also + // dependent from selection. After receiving the drag data it is + // now tiime to select the correct target object + SwTransferable::SetSelInShell( rSh, sal_True, pPt ); + } + if( nRet ) { String sURL; @@ -2478,7 +2536,7 @@ int SwTransferable::_PasteFileName( Tran sal_uInt8 nActionFlags, sal_Bool bMsg ) { int nRet = SwTransferable::_PasteGrf( rData, rSh, nFmt, nAction, - pPt, nActionFlags, bMsg ); + pPt, nActionFlags, 0, false); if( nRet ) nRet |= SWTRANSFER_GRAPHIC_INSERTED; if( !nRet ) Modified: openoffice/trunk/main/sw/source/ui/inc/swdtflvr.hxx URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/ui/inc/swdtflvr.hxx?rev=1439888&r1=1439887&r2=1439888&view=diff ============================================================================== --- openoffice/trunk/main/sw/source/ui/inc/swdtflvr.hxx (original) +++ openoffice/trunk/main/sw/source/ui/inc/swdtflvr.hxx Tue Jan 29 13:32:36 2013 @@ -106,11 +106,11 @@ class SwTransferable : public Transferab static int _PasteSdrFormat( TransferableDataHelper& rData, SwWrtShell& rSh, sal_uInt16 nAction, - const Point* pPt, sal_uInt8 nActionFlags ); + const Point* pPt, sal_uInt8 nActionFlags, bool bNeedToSelectBeforePaste); static int _PasteGrf( TransferableDataHelper& rData, SwWrtShell& rSh, sal_uLong nFmt, sal_uInt16 nAction, const Point* pPt, - sal_uInt8 nActionFlags, sal_Bool bMsg ); + sal_uInt8 nActionFlags, sal_Int8 nDropAction, bool bNeedToSelectBeforePaste); static int _PasteImageMap( TransferableDataHelper& rData, SwWrtShell& rSh );