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 );


Reply via email to