]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/fl/bardragpl.cpp
Updated version and other minor tweaks
[wxWidgets.git] / contrib / src / fl / bardragpl.cpp
index b48d2540383268baafd15037a4fdf2a89c0c7f81..4e35ae422e53ab98490d6be34a26f5ad06f85d4c 100644 (file)
@@ -1,12 +1,12 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        No names yet.
-// Purpose:     Contrib. demo
+// Name:        bardragpl.cpp
+// Purpose:     cbBarDragPlugin implementation
 // Author:      Aleksandras Gluchovas
 // Modified by:
 // Created:     23/09/98
 // RCS-ID:      $Id$
 // Copyright:   (c) Aleksandras Gluchovas
-// Licence:    wxWindows license
+// Licence:    wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
@@ -293,8 +293,8 @@ void cbBarDragPlugin::StickToPane( cbDockPane* pPane, wxPoint& mousePos )
                                                 : mousePos.x > bounds.x;
 
        // NOTE:: about all the below min/max things: they are meant to ensure
-       //        that mouse pointer doesn't overrun (leave) the hint-rectangle
-       //        when dimensions it's are recalculated upon sticking it to the pane
+       //        that the mouse pointer doesn't overrun (leave) the hint-rectangle
+       //        when its dimensions are recalculated upon sticking it to the pane
 
        if ( pPane->IsHorizontal() && fromLowerEdge )
        {
@@ -341,10 +341,9 @@ void cbBarDragPlugin::StickToPane( cbDockPane* pPane, wxPoint& mousePos )
 
 void cbBarDragPlugin::UnstickFromPane( cbDockPane* pPane, wxPoint& mousePos )
 {
-       // unsticking causes rectangle to get the shape, in which
+       // unsticking causes rectangle to get the shape in which
        // dragged control-bar would be when floated
 
-
        int newWidth  = mpDraggedBar->mDimInfo.mSizes[wxCBAR_FLOATING].x;
        int newHeight = mpDraggedBar->mDimInfo.mSizes[wxCBAR_FLOATING].y;
 
@@ -457,21 +456,10 @@ void cbBarDragPlugin::ShowHint( bool prevWasInClient )
 {
        bool wasDocked = FALSE;
 
-       if ( mpDraggedBar->mState != wxCBAR_FLOATING && !mpCurPane )
-       {
-               mpLayout->SetBarState( mpDraggedBar, wxCBAR_FLOATING, TRUE );
-       }
-       else
-       if ( mpDraggedBar->mState == wxCBAR_FLOATING && mpCurPane )
-       {
-               mpLayout->SetBarState( mpDraggedBar, wxCBAR_DOCKED_HORIZONTALLY, FALSE );
-
-               wasDocked = TRUE;
-       }
 
        if ( mpSrcPane->mProps.mRealTimeUpdatesOn == FALSE )
        {
-               // do hevy calculations first
+               // do heavy calculations first
 
                wxRect actualRect = mHintRect; // will be adjusted depending on drag-settings
 
@@ -511,6 +499,18 @@ void cbBarDragPlugin::ShowHint( bool prevWasInClient )
        {
                // otherwise, if real-time updates option is ON
 
+           if ( mpDraggedBar->mState != wxCBAR_FLOATING && !mpCurPane )
+           {
+                   mpLayout->SetBarState( mpDraggedBar, wxCBAR_FLOATING, TRUE );
+           }
+         else
+           if ( mpDraggedBar->mState == wxCBAR_FLOATING && mpCurPane )
+           {
+                   mpLayout->SetBarState( mpDraggedBar, wxCBAR_DOCKED_HORIZONTALLY, FALSE );
+
+                   wasDocked = TRUE;
+           }
+
                if ( mpCurPane )
                {
                        mpLayout->GetUpdatesManager().OnStartChanges();
@@ -642,19 +642,26 @@ void cbBarDragPlugin::OnMouseMove( cbMotionEvent& event )
        wxCursor* pPrevCurs = mpCurCursor;
 
        if ( mpCurPane )
-       
-               mpCurCursor = mpLayout->mpDragCursor;
+    {
+               mpCurCursor = mpLayout->mpNormalCursor;
+    }
        else
        {
-               if ( mpLayout->mFloatingOn && mpSrcPane->mProps.mRealTimeUpdatesOn )
+        // if floating is off, and we are in the client
+        // area, the cursor will be invalid, otherwise
+        // it will be the normal cursor
                
-                       mpCurCursor = mpLayout->mpDragCursor;
+        if (mpLayout->mFloatingOn)
+        {
+                       mpCurCursor = mpLayout->mpNormalCursor;
+        }
                else
+        {
                        mpCurCursor = mpLayout->mpNECursor;
        }
 
+       }
        if ( pPrevCurs != mpCurCursor )
-
                mpLayout->GetParentFrame().SetCursor( *mpCurCursor );
 }
 
@@ -690,13 +697,36 @@ void cbBarDragPlugin::OnLButtonUp( cbLeftUpEvent& event )
                                        mpLayout->GetUpdatesManager().UpdateNow();
                                }
                                else
+                {
+                    if (mpDraggedBar->mState == wxCBAR_FLOATING)
+                    {
+                               mpLayout->SetBarState( mpDraggedBar, wxCBAR_DOCKED_HORIZONTALLY, TRUE);
+                    }
+
                                        mpLayout->RedockBar( mpDraggedBar, mHintRect, mpCurPane );
                        }
                }
+             else
+            {
+                if (mpDraggedBar->mState != wxCBAR_FLOATING)
+                {
+                    mpLayout->SetBarState(mpDraggedBar, wxCBAR_FLOATING, true);
+                }
+
+                               mpDraggedBar->mDimInfo.mBounds[ wxCBAR_FLOATING ] = mHintRect;
+                               mpLayout->ApplyBarProperties( mpDraggedBar );
+            }
+               }
        
                mHintRect.width = -1;
 
-               mpLayout->GetParentFrame().SetCursor( *mpLayout->mpNormalCursor );
+        // In Windows, at least, the frame needs to have a null cursor
+        // else child windows (such as text windows) inherit the cursor
+#if 1
+        mpLayout->GetParentFrame().SetCursor( wxNullCursor );
+#else
+        mpLayout->GetParentFrame().SetCursor( *mpLayout->mpNormalCursor );
+#endif
 
                mpLayout->ReleaseEventsFromPane( event.mpPane );
                mpLayout->ReleaseEventsFromPlugin( this );
@@ -750,7 +780,7 @@ void cbBarDragPlugin::OnStartBarDragging( cbStartBarDraggingEvent& event )
        mpLayout->CaptureEventsForPane( event.mpPane );
        mpLayout->CaptureEventsForPlugin( this );
 
-       mpLayout->GetParentFrame().SetCursor( *mpLayout->mpDragCursor );
+       mpLayout->GetParentFrame().SetCursor( *mpLayout->mpNormalCursor );
 
        mBarDragStarted = TRUE;