]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/fl/controlbar.cpp
correct access for virtuals
[wxWidgets.git] / contrib / src / fl / controlbar.cpp
index 5adc722a20cb8f2cc8c82cf3386734b65d46d86b..bb3b6bf2de70b5bb487f0845ae9dbea6c1789984 100644 (file)
@@ -9,10 +9,6 @@
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-    #pragma implementation "controlbar.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -90,7 +86,7 @@
 /*
 // FIXME:: see places where _gHorizCursorImg is used
 
-static const char* _gHorizCursorImg[] = 
+static const char* _gHorizCursorImg[] =
 {
     "............XX....XX............",
     "............XX....XX............",
@@ -110,7 +106,7 @@ static const char* _gHorizCursorImg[] =
     "............XX....XX............"
 };
 
-static const char* _gVertCursorImg[] = 
+static const char* _gVertCursorImg[] =
 {
     "................X...............",
     "...............XXX..............",
@@ -148,7 +144,7 @@ static inline bool rect_hits_rect( const wxRect& r1, const wxRect& r2 )
 
         if ( ( r2.y >= r1.y && r2.y <= r1.y + r1.height ) ||
              ( r1.y >= r2.y && r1.y <= r2.y + r2.height ) )
-             
+
             return 1;
 
     return 0;
@@ -164,11 +160,11 @@ static inline void hide_rect( wxRect& r )
 
 static inline void clip_rect_against_rect( wxRect& r1, const wxRect& r2 )
 {
-    if ( r1.x < r2.x              || 
+    if ( r1.x < r2.x              ||
          r1.y < r2.y              ||
          r1.x >= r2.x + r2.width  ||
-         r1.y >= r2.y + r2.height 
-       ) 
+         r1.y >= r2.y + r2.height
+       )
     {
         hide_rect( r1 );
         return;
@@ -194,7 +190,7 @@ cbBarSpy::cbBarSpy(void)
       mpBarWnd(0)
 {}
 
-cbBarSpy::cbBarSpy( wxFrameLayout* pPanel ) 
+cbBarSpy::cbBarSpy( wxFrameLayout* pPanel )
 
     : mpLayout(pPanel),
       mpBarWnd(0)
@@ -258,10 +254,6 @@ BEGIN_EVENT_TABLE( wxFrameLayout, wxEvtHandler )
     EVT_LEFT_DCLICK( wxFrameLayout::OnLDblClick   )
 
     EVT_IDLE       ( wxFrameLayout::OnIdle        )
-    EVT_SET_FOCUS  ( wxFrameLayout::OnSetFocus    )
-    EVT_KILL_FOCUS ( wxFrameLayout::OnKillFocus   )
-
-    EVT_ACTIVATE   ( wxFrameLayout::OnActivate    )
 
     EVT_ERASE_BACKGROUND( wxFrameLayout::OnEraseBackground )
 
@@ -279,7 +271,7 @@ wxFrameLayout::wxFrameLayout(void)
       mGrayPen  ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ),
       mBlackPen ( wxColour(  0,  0,  0), 1, wxSOLID ),
       mBorderPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ),
-   
+
       mNullPen( wxColour(0,0,0), 1, wxTRANSPARENT ),
 
       mpPaneInFocus( NULL ),
@@ -312,21 +304,21 @@ wxFrameLayout::wxFrameLayout( wxWindow* pParentFrame, wxWindow* pFrameClient, bo
       mGrayPen  ( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ),
       mBlackPen ( wxColour(  0,  0,  0), 1, wxSOLID ),
       mBorderPen( wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE), 1, wxSOLID ),
-      
+
       mNullPen( wxColour(0,0,0), 1, wxTRANSPARENT ),
 
       mpPaneInFocus( NULL ),
       mpLRUPane    ( NULL ),
-      
+
       mFloatingOn   ( true ),
-                 
+
       mpTopPlugin   ( NULL ),
       mpCaputesInput( NULL ),
-      
+
       mClientWndRefreshPending( false ),
       mRecalcPending( true ),
       mCheckFocusWhenIdle( false ),
-      
+
       mpUpdatesMgr( NULL )
 {
     CreateCursors();
@@ -355,6 +347,8 @@ bool wxFrameLayout::CanReparent()
 {
 #ifdef __WXMSW__
     return true;
+#elif defined(__WXGTK20__)
+    return true;
 #elif defined (__WXGTK__)
     //return true;
     return false;
@@ -372,22 +366,7 @@ bool wxFrameLayout::CanReparent()
 
 void wxFrameLayout::ReparentWindow( wxWindow* pChild, wxWindow* pNewParent )
 {
-#ifdef __WXMSW__
-#if 0
-
-    if ( pChild->GetParent() )
-    {
-        bool success = pChild->GetParent()->GetChildren().DeleteObject( pChild );
-
-        wxASSERT( success ); // DBG::
-    }
-
-    ::SetParent( (HWND)pChild->m_hWnd, (HWND)pNewParent->m_hWnd  );
-
-    pNewParent->GetChildren().Append( pChild );
-
-    pChild->SetParent( pNewParent );
-#endif
+#if defined(__WXMSW__) || defined(__WXGTK20__) || defined(__WXMAC__)
     pChild->Reparent(pNewParent);
 
     return;
@@ -400,13 +379,15 @@ void wxFrameLayout::ReparentWindow( wxWindow* pChild, wxWindow* pNewParent )
 
     //return;
 #else
-    wxMessageBox( "Sorry, docking is not supported for ports other than MSW and wxGTK" );
+    wxUnusedVar(pChild);
+    wxUnusedVar(pNewParent);
+    wxMessageBox( _("Sorry, docking is not supported for ports other than wxMSW, wxMac and wxGTK") );
 #endif
 }
 
 void wxFrameLayout::DestroyBarWindows()
 {
-    wxNode* pSpy = mBarSpyList.GetFirst();
+    wxObjectList::compatibility_iterator pSpy = mBarSpyList.GetFirst();
 
     while( pSpy )
     {
@@ -436,7 +417,7 @@ void wxFrameLayout::DestroyBarWindows()
 
 void wxFrameLayout::ShowFloatedWindows( bool show )
 {
-    wxNode* pNode = mFloatedFrames.GetFirst();
+    wxObjectList::compatibility_iterator pNode = mFloatedFrames.GetFirst();
 
     while( pNode )
     {
@@ -482,21 +463,21 @@ wxFrameLayout::~wxFrameLayout()
 
     for ( i = 0; i != MAX_PANES; ++i )
     {
-        if ( mPanes[i] ) 
+        if ( mPanes[i] )
             delete mPanes[i];
     }
-    if ( mpHorizCursor  ) 
+    if ( mpHorizCursor  )
         delete mpHorizCursor;
-    if ( mpVertCursor   ) 
+    if ( mpVertCursor   )
         delete mpVertCursor;
-    if ( mpNormalCursor ) 
+    if ( mpNormalCursor )
         delete mpNormalCursor;
-    if ( mpDragCursor   ) 
+    if ( mpDragCursor   )
         delete mpDragCursor;
-    if ( mpNECursor     ) 
+    if ( mpNECursor     )
         delete mpNECursor;
 
-    wxNode* pSpy = mBarSpyList.GetFirst();
+    wxObjectList::compatibility_iterator pSpy = mBarSpyList.GetFirst();
 
     while( pSpy )
     {
@@ -572,7 +553,7 @@ cbUpdatesManagerBase* wxFrameLayout::CreateUpdatesManager()
     //return new cbSimpleUpdatesMgr( this );
 }
 
-void wxFrameLayout::AddBar( wxWindow*        pBarWnd, 
+void wxFrameLayout::AddBar( wxWindow*        pBarWnd,
                             const cbDimInfo& dimInfo,
                             int              alignment,
                             int              rowNo,
@@ -598,6 +579,7 @@ void wxFrameLayout::AddBar( wxWindow*        pBarWnd,
     pInfo->mName      = name;
     pInfo->mpBarWnd   = pBarWnd;
     pInfo->mDimInfo   = dimInfo;
+    pInfo->mDimInfo.mLRUPane = alignment;
     pInfo->mState     = state;
     pInfo->mAlignment = alignment;
     pInfo->mRowNo     = rowNo;
@@ -608,18 +590,18 @@ void wxFrameLayout::AddBar( wxWindow*        pBarWnd,
     DoSetBarState( pInfo );
 }
 
-bool wxFrameLayout::RedockBar( cbBarInfo*    pBar, 
+bool wxFrameLayout::RedockBar( cbBarInfo*    pBar,
                                const wxRect& shapeInParent,
                                cbDockPane*   pToPane,
                                bool          updateNow )
 {
     if ( !pToPane )
-    
+
         pToPane = HitTestPanes( shapeInParent, NULL );
 
-    if ( !pToPane ) 
-        
-        return false; // bar's shape does not hit any pane 
+    if ( !pToPane )
+
+        return false; // bar's shape does not hit any pane
                      // - redocking is NOT possible
 
     cbDockPane* pBarPane = GetBarPane( pBar );
@@ -632,8 +614,8 @@ bool wxFrameLayout::RedockBar( cbBarInfo*    pBar,
 
     // FIXME FIXME:: the recalculation below may be a *huge* performance
     //               hit, it could be eliminated though...
-    //               but first the "pane-postion-changed" problem 
-    //               has to be fixed 
+    //               but first the "pane-postion-changed" problem
+    //               has to be fixed
 
     RecalcLayout( false );
 
@@ -697,7 +679,7 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow )
         cbRowInfo*  pRow;
 
         #ifdef  __WXDEBUG__
-        bool success = 
+        bool success =
         #endif
                        LocateBar( pBar, &pRow, &pPane );
 
@@ -723,7 +705,7 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow )
         {
             pBar->mpBarWnd->Show(false); // to avoid flicker upon reparenting
 
-            wxNode* pNode = mFloatedFrames.GetFirst();
+            wxObjectList::compatibility_iterator pNode = mFloatedFrames.GetFirst();
 
             while( pNode )
             {
@@ -731,7 +713,7 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow )
 
                 if ( pFFrm->GetBar() == pBar )
                 {
-                    pFFrm->Show( false ); // reduces flicker sligthly 
+                    pFFrm->Show( false ); // reduces flicker sligthly
 
                     ReparentWindow( pBar->mpBarWnd, &GetParentFrame() );
 
@@ -741,7 +723,7 @@ void wxFrameLayout::SetBarState( cbBarInfo* pBar, int newState, bool updateNow )
 
                         pBar->mAlignment = pBar->mDimInfo.mLRUPane;
 
-                    mFloatedFrames.DeleteNode( pNode );
+                    mFloatedFrames.Erase( pNode );
 
                     pFFrm->Show( false );
                     pFFrm->Destroy(); break;
@@ -811,7 +793,7 @@ void wxFrameLayout::InverseVisibility( cbBarInfo* pBar )
 
     if ( newState == wxCBAR_FLOATING )
 
-        this->RepositionFloatedBar( pBar ); 
+        this->RepositionFloatedBar( pBar );
 }
 
 void wxFrameLayout::ApplyBarProperties( cbBarInfo* pBar )
@@ -834,7 +816,7 @@ void wxFrameLayout::RepositionFloatedBar( cbBarInfo* pBar )
 {
     if ( !(mFloatingOn && pBar->mFloatingOn)) return;
 
-    wxNode* pNode = mFloatedFrames.GetFirst();
+    wxObjectList::compatibility_iterator pNode = mFloatedFrames.GetFirst();
 
     while( pNode )
     {
@@ -849,7 +831,7 @@ void wxFrameLayout::RepositionFloatedBar( cbBarInfo* pBar )
 
             GetParentFrame().ClientToScreen( &x, &y );
 
-            pFFrm->PositionFloatedWnd( x,y, 
+            pFFrm->PositionFloatedWnd( x,y,
                                        bounds.width,
                                        bounds.height );
 
@@ -864,7 +846,7 @@ void wxFrameLayout::DoSetBarState( cbBarInfo* pBar )
 {
     if ( pBar->mState != wxCBAR_FLOATING &&
          pBar->mState != wxCBAR_HIDDEN )
-    
+
         // dock it
 
         mPanes[pBar->mAlignment]->InsertBar( pBar );
@@ -878,14 +860,14 @@ void wxFrameLayout::DoSetBarState( cbBarInfo* pBar )
             pBar->mpBarWnd->Show( false );
     }
     else
-    {                   
+    {
         if ( !(mFloatingOn && pBar->mFloatingOn) )
           return;
 
         // float it
 
         if ( pBar->mpBarWnd == NULL || !CanReparent() )
-        {                               
+        {
             // FOR NOW:: just hide it
 
             if ( pBar->mpBarWnd )
@@ -902,11 +884,11 @@ void wxFrameLayout::DoSetBarState( cbBarInfo* pBar )
         pMiniFrm->SetBar( pBar );
         pMiniFrm->SetLayout( this );
 
-        pMiniFrm->Create( &GetParentFrame(), wxID_ANY, pBar->mName, 
+        pMiniFrm->Create( &GetParentFrame(), wxID_ANY, pBar->mName,
                           wxPoint( 50,50 ),
                           wxSize ( 0, 0  ),
                           wxFRAME_FLOAT_ON_PARENT |
-                          wxFRAME_TOOL_WINDOW |
+                          wxNO_BORDER |
                           wxFRAME_NO_TASKBAR
                         );
 
@@ -945,6 +927,7 @@ void wxFrameLayout::DoSetBarState( cbBarInfo* pBar )
         }
 
         pMiniFrm->Show( true );
+        RepositionFloatedBar(pMiniFrm->GetBar());
 
         // FIXME:: this is excessive
         pBar->mpBarWnd->Show(true);
@@ -972,9 +955,9 @@ void wxFrameLayout::RemoveBar( cbBarInfo* pBarInfo )
         if ( mAllBars[i] == pBarInfo )
         {
 #if wxCHECK_VERSION(2,3,2)
-            mAllBars.RemoveAt(i); 
+            mAllBars.RemoveAt(i);
 #else
-            mAllBars.Remove(i); 
+            mAllBars.Remove(i);
 #endif
             if ( pBarInfo->mpBarWnd ) // hides it's window
 
@@ -988,7 +971,7 @@ void wxFrameLayout::RemoveBar( cbBarInfo* pBarInfo )
     wxFAIL_MSG(wxT("bar info should be present in the list of all bars of all panes"));
 }
 
-bool wxFrameLayout::LocateBar( cbBarInfo* pBarInfo, 
+bool wxFrameLayout::LocateBar( cbBarInfo* pBarInfo,
                                cbRowInfo**  ppRow,
                                cbDockPane** ppPane )
 {
@@ -1001,7 +984,7 @@ bool wxFrameLayout::LocateBar( cbBarInfo* pBarInfo,
         wxBarIterator i( mPanes[n]->GetRowList() );
 
         while ( i.Next() )
-        
+
             if ( &i.BarInfo() == pBarInfo )
             {
                 (*ppPane) = mPanes[n];
@@ -1062,7 +1045,7 @@ void wxFrameLayout::RecalcLayout( bool repositionBarsNow )
 
     pPane->SetBoundsInParent( rect );
 
-    // setup LEFT pane 
+    // setup LEFT pane
 
     pPane = mPanes[ FL_ALIGN_LEFT ];
 
@@ -1102,9 +1085,9 @@ void wxFrameLayout::RecalcLayout( bool repositionBarsNow )
 
     // recalc bounds of the client-window
 
-    mClntWndBounds.x = mPanes[FL_ALIGN_LEFT]->mBoundsInParent.x + 
+    mClntWndBounds.x = mPanes[FL_ALIGN_LEFT]->mBoundsInParent.x +
                        mPanes[FL_ALIGN_LEFT]->mBoundsInParent.width;
-    mClntWndBounds.y = mPanes[FL_ALIGN_TOP ]->mBoundsInParent.y + 
+    mClntWndBounds.y = mPanes[FL_ALIGN_TOP ]->mBoundsInParent.y +
                        mPanes[FL_ALIGN_TOP ]->mBoundsInParent.height;
 
     mClntWndBounds.width  = mPanes[FL_ALIGN_RIGHT]->mBoundsInParent.x -
@@ -1137,7 +1120,7 @@ void wxFrameLayout::PositionClientWindow()
     {
         if ( mClntWndBounds.width >= 1 && mClntWndBounds.height >= 1 )
         {
-            mpFrameClient->SetSize( mClntWndBounds.x,     mClntWndBounds.y, 
+            mpFrameClient->SetSize( mClntWndBounds.x,     mClntWndBounds.y,
                                     mClntWndBounds.width, mClntWndBounds.height, 0 );
 
             if ( !mpFrameClient->IsShown() )
@@ -1199,13 +1182,13 @@ void wxFrameLayout::UnhookFromFrame()
     // NOTE:: the SetEvtHandlerEnabled() method is not used
     //        here, since it is assumed that unhooking layout
     //        from window may result destroying of the layout itself
-    //       
-    //        BUG BUG BUG (wx):: this would not be a problem if 
-    //                           wxEvtHandler's destructor checked if 
-    //                           this handler is currently the top-most 
-    //                           handler of some window, and additionally 
+    //
+    //        BUG BUG BUG (wx):: this would not be a problem if
+    //                           wxEvtHandler's destructor checked if
+    //                           this handler is currently the top-most
+    //                           handler of some window, and additionally
     //                           to the reconnecting itself from the chain.
-    //                           It would also re-setup current event handler 
+    //                           It would also re-setup current event handler
     //                           of the window using wxWindow::SetEventHandler()
 
     // FOR NOW::
@@ -1281,7 +1264,7 @@ void wxFrameLayout::CreateCursors()
     /*
     // FIXME:: The below code somehow doesn't work - cursors remain unchanged
     char bits[64];
-    
+
     set_cursor_bits( _gHorizCursorImg, bits, 32, 16 );
 
     mpHorizCursor = new wxCursor( bits, 32, 16 );
@@ -1316,15 +1299,15 @@ cbDockPane* wxFrameLayout::HitTestPanes( const wxRect& rect,
 {
     // first, give the privilege to the current pane
 
-    if ( pCurPane && rect_hits_rect( pCurPane->GetRealRect(), rect ) ) 
-    
+    if ( pCurPane && rect_hits_rect( pCurPane->GetRealRect(), rect ) )
+
         return pCurPane;
 
     int i;
     for ( i = 0; i != MAX_PANES; ++i )
     {
         if ( pCurPane != mPanes[i] &&
-             rect_hits_rect( mPanes[i]->GetRealRect(), rect ) ) 
+             rect_hits_rect( mPanes[i]->GetRealRect(), rect ) )
         {
             return mPanes[i];
         }
@@ -1332,7 +1315,7 @@ cbDockPane* wxFrameLayout::HitTestPanes( const wxRect& rect,
     return 0;
 }
 
-void wxFrameLayout::ForwardMouseEvent( wxMouseEvent& event, 
+void wxFrameLayout::ForwardMouseEvent( wxMouseEvent& event,
                                            cbDockPane*   pToPane,
                                            int           eventType )
 {
@@ -1421,7 +1404,7 @@ void wxFrameLayout::OnLButtonUp( wxMouseEvent& event )
 void wxFrameLayout::OnMouseMove( wxMouseEvent& event )
 {
     if ( mpPaneInFocus )
-    
+
         ForwardMouseEvent( event, mpPaneInFocus, cbEVT_PL_MOTION );
     else
     {
@@ -1497,38 +1480,6 @@ void wxFrameLayout::OnIdle( wxIdleEvent& event )
     event.Skip();
 }
 
-
-void wxFrameLayout::OnKillFocus( wxFocusEvent& WXUNUSED(event) )
-{
-    //wxMessageBox( "wxFrameLayoutGot Kill Focus!" );
-    //ShowFloatedWindows( false );
-}
-
-void wxFrameLayout::OnSetFocus( wxFocusEvent& WXUNUSED(event) )
-{
-    //ShowFloatedWindows( true );
-}
-
-void wxFrameLayout::OnActivate( wxActivateEvent& WXUNUSED(event) )
-{
-#if 0
-    if ( event.GetActive() == false )               
-    {
-        wxWindow* focus = wxWindow::FindFocus();
-
-        if ( !focus || focus == &GetParentFrame() )
-        {
-            mCheckFocusWhenIdle = true;
-
-            if ( !focus )
-
-                wxMessageBox("Deactivated!" );
-
-        }
-    }
-#endif
-}
-
 void wxFrameLayout::GetPaneProperties( cbCommonPaneProperties& props, int alignment )
 {
     props = mPanes[alignment]->mProps;
@@ -1582,15 +1533,15 @@ void wxFrameLayout::FirePluginEvent( cbPluginEvent& event )
 {
     // check state of input capture, before processing the event
 
-    if ( mpCaputesInput ) 
+    if ( mpCaputesInput )
     {
         bool isInputEvt = true;
 #if wxCHECK_VERSION(2,3,0)
-        if ( event.m_eventType != cbEVT_PL_LEFT_DOWN &&
-             event.m_eventType != cbEVT_PL_LEFT_UP &&
-             event.m_eventType != cbEVT_PL_RIGHT_DOWN &&
-             event.m_eventType != cbEVT_PL_RIGHT_UP &&
-             event.m_eventType != cbEVT_PL_MOTION )
+        if ( event.GetEventType() != cbEVT_PL_LEFT_DOWN &&
+             event.GetEventType() != cbEVT_PL_LEFT_UP &&
+             event.GetEventType() != cbEVT_PL_RIGHT_DOWN &&
+             event.GetEventType() != cbEVT_PL_RIGHT_UP &&
+             event.GetEventType() != cbEVT_PL_MOTION )
             isInputEvt = false;
 #else
         switch ( event.m_eventType )
@@ -1600,7 +1551,7 @@ void wxFrameLayout::FirePluginEvent( cbPluginEvent& event )
             case cbEVT_PL_RIGHT_DOWN : break;
             case cbEVT_PL_RIGHT_UP   : break;
             case cbEVT_PL_MOTION     : break;
-            
+
             default : isInputEvt = false; break;
         }
 #endif  // #if wxCHECK_VERSION(2,3,0)
@@ -1654,27 +1605,27 @@ void wxFrameLayout::ReleaseEventsFromPane( cbDockPane* WXUNUSED(fromPane) )
 
 cbPluginBase& wxFrameLayout::GetTopPlugin()
 {
-    if ( !mpTopPlugin ) 
-    
+    if ( !mpTopPlugin )
+
         PushDefaultPlugins(); // automatic configuration
 
     return *mpTopPlugin;
 }
 
-void wxFrameLayout::SetTopPlugin( cbPluginBase* pPlugin ) 
-{ 
-    mpTopPlugin = pPlugin; 
+void wxFrameLayout::SetTopPlugin( cbPluginBase* pPlugin )
+{
+    mpTopPlugin = pPlugin;
 }
 
-bool wxFrameLayout::HasTopPlugin() 
-{ 
-    return ( mpTopPlugin != NULL ); 
+bool wxFrameLayout::HasTopPlugin()
+{
+    return ( mpTopPlugin != NULL );
 }
 
 void wxFrameLayout::PushPlugin( cbPluginBase* pPlugin )
 {
-    if ( !mpTopPlugin ) 
-        
+    if ( !mpTopPlugin )
+
         mpTopPlugin = pPlugin;
     else
     {
@@ -1727,7 +1678,7 @@ void wxFrameLayout::AddPlugin( wxClassInfo* pPlInfo, int paneMask )
     PushPlugin( pObj );
 }
 
-void wxFrameLayout::AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlInfo, 
+void wxFrameLayout::AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlInfo,
                                        int paneMask )
 {
     wxASSERT( pNextPlInfo != pPlInfo ); // DBG:: no sense
@@ -1744,10 +1695,10 @@ void wxFrameLayout::AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlI
     // remove existing one if present
 
     cbPluginBase* pExistingPl = FindPlugin( pPlInfo );
-    
+
     if ( pExistingPl ) RemovePlugin( pPlInfo );
 
-    // create an instance 
+    // create an instance
 
     cbPluginBase* pNewPl = (cbPluginBase*)pPlInfo->CreateObject();
 
@@ -1756,7 +1707,6 @@ void wxFrameLayout::AddPluginBefore( wxClassInfo* pNextPlInfo, wxClassInfo* pPlI
     // insert it to the chain
 
     if ( pNextPl->GetPreviousHandler() )
-    
         pNextPl->GetPreviousHandler()->SetNextHandler( pNewPl );
     else
         mpTopPlugin = pNewPl;
@@ -1811,15 +1761,16 @@ cbPluginBase* wxFrameLayout::FindPlugin( wxClassInfo* pPlInfo )
 
 IMPLEMENT_DYNAMIC_CLASS( cbUpdateMgrData, wxObject )
 
-cbUpdateMgrData::cbUpdateMgrData() 
+cbUpdateMgrData::cbUpdateMgrData()
 
     : mPrevBounds( -1,-1,0,0 ),
-      mIsDirty( true )           // inidicate initial change
+      mIsDirty( true ),           // inidicate initial change
+      mpCustomData(0)
 {}
 
 void cbUpdateMgrData::StoreItemState( const wxRect& boundsInParent )
-{ 
-    mPrevBounds = boundsInParent; 
+{
+    mPrevBounds = boundsInParent;
 }
 
 void cbUpdateMgrData::SetDirty( bool isDirty )
@@ -1850,7 +1801,7 @@ wxBarIterator::wxBarIterator( RowArrayT& rows )
 }
 
 bool wxBarIterator::Next()
-{      
+{
     if ( mpRow )
     {
         if ( mpBar )
@@ -1859,25 +1810,24 @@ bool wxBarIterator::Next()
         {
             if ( mpRow->mBars.GetCount() == 0 )
             {
-                return false; 
+                return false;
             }
 
             mpBar = mpRow->mBars[0];
         }
-    
+
         if ( !mpBar )
-        {   
+        {
             // skip to the next row
 
             mpRow = mpRow->mpNext;
-    
+
             if ( mpRow )
-    
                 mpBar = mpRow->mBars[0];
             else
                 return false;
         }
-    
+
         return true;
     }
     else
@@ -1916,9 +1866,9 @@ void cbBarDimHandlerBase::RemoveRef()
 
 IMPLEMENT_DYNAMIC_CLASS( cbDimInfo, wxObject )
 
-cbDimInfo::cbDimInfo() 
+cbDimInfo::cbDimInfo()
 
-    : mVertGap ( 0 ), 
+    : mVertGap ( 0 ),
       mHorizGap( 0 ),
 
       mIsFixed(true),
@@ -1948,7 +1898,7 @@ cbDimInfo::cbDimInfo( cbBarDimHandlerBase* pDimHandler,
         // int vtad = *((int*)mpHandler);
         mpHandler->AddRef();
     }
-    
+
     size_t i;
     for ( i = 0; i != MAX_BAR_STATES; ++i )
     {
@@ -1990,10 +1940,10 @@ cbDimInfo::cbDimInfo( int dh_x, int dh_y,
     size_t i;
     for ( i = 0; i != MAX_BAR_STATES; ++i )
         mBounds[i] = wxRect( -1,-1,-1,-1 );
-}    
+}
 
-cbDimInfo::cbDimInfo( int x, int y,  
-                      bool isFixed, int gap, 
+cbDimInfo::cbDimInfo( int x, int y,
+                      bool isFixed, int gap,
                       cbBarDimHandlerBase* pDimHandler)
   : mVertGap  ( gap ),
     mHorizGap ( gap ),
@@ -2012,7 +1962,7 @@ cbDimInfo::cbDimInfo( int x, int y,
     mSizes[wxCBAR_DOCKED_VERTICALLY  ].y = y;
     mSizes[wxCBAR_FLOATING           ].x = x;
     mSizes[wxCBAR_FLOATING           ].y = y;
-    
+
     size_t i;
     for ( i = 0; i != MAX_BAR_STATES; ++i )
         mBounds[i] = wxRect( -1,-1,-1,-1 );
@@ -2020,8 +1970,8 @@ cbDimInfo::cbDimInfo( int x, int y,
 
 cbDimInfo::~cbDimInfo()
 {
-    if ( mpHandler ) 
-        
+    if ( mpHandler )
+
         mpHandler->RemoveRef();
 }
 
@@ -2098,7 +2048,7 @@ cbCommonPaneProperties& cbCommonPaneProperties::operator=(const cbCommonPaneProp
     mColProportionsOn      = props.mColProportionsOn;
     mBarCollapseIconsOn    = props.mBarCollapseIconsOn;
     mBarDragHintsOn        = props.mBarDragHintsOn;
-    
+
     mMinCBarDim            = props.mMinCBarDim;
     mResizeHandleSize      = props.mResizeHandleSize;
 
@@ -2146,13 +2096,13 @@ IMPLEMENT_DYNAMIC_CLASS( cbDockPane, wxObject )
 
 // FIXME:: how to eliminate these cut&pasted constructors?
 
-cbDockPane::cbDockPane(void)                             
+cbDockPane::cbDockPane(void)
     : mLeftMargin  ( 1 ),
       mRightMargin ( 1 ),
       mTopMargin   ( 1 ),
       mBottomMargin( 1 ),
       mPaneWidth ( 32768     ), // fake-up very large pane dims,
-                                // since the real dimensions of the pane may not 
+                                // since the real dimensions of the pane may not
                                 // be known, while inserting bars initially
       mPaneHeight( 32768     ),
       mAlignment ( -1   ),
@@ -2161,18 +2111,18 @@ cbDockPane::cbDockPane(void)
 {}
 
 cbDockPane::cbDockPane( int alignment, wxFrameLayout* pPanel )
-                             
+
     :  mLeftMargin  ( 1 ),
       mRightMargin ( 1 ),
       mTopMargin   ( 1 ),
       mBottomMargin( 1 ),
       mPaneWidth ( 32768     ), // fake-up very large pane dims,
-                                // since the real dimensions of the pane may not 
+                                // since the real dimensions of the pane may not
                                 // be known, while inserting bars initially
       mPaneHeight( 32768     ),
       mAlignment ( alignment ),
       mpLayout   ( pPanel    ),
-      mpStoredRow( NULL )    
+      mpStoredRow( NULL )
 {}
 
 cbDockPane::~cbDockPane()
@@ -2181,8 +2131,8 @@ cbDockPane::~cbDockPane()
     for ( i = 0; i != mRows.Count(); ++i )
         delete mRows[i];
 
-    mRowShapeData.DeleteContents( true );
-    
+    WX_CLEAR_LIST(wxList,mRowShapeData)
+
     // NOTE:: control bar infromation structures are cleaned-up
     //        in wxFrameLayout's destructor, using global control-bar list
 }
@@ -2241,7 +2191,7 @@ void cbDockPane::PaintRowDecorations( cbRowInfo* pRow, wxDC& dc )
 
     // decorations first
     for ( i = 0; i != pRow->mBars.Count(); ++i )
-    
+
         PaintBarDecorations( pRow->mBars[i], dc );
 
     // then handles if present
@@ -2353,7 +2303,7 @@ int cbDockPane::GetNotFixedBarsCount( cbRowInfo* pRow )
 
 void cbDockPane::RemoveBar( cbBarInfo* pBar )
 {
-    bool needsRestoring = mProps.mNonDestructFrictionOn && 
+    bool needsRestoring = mProps.mNonDestructFrictionOn &&
                           mpStoredRow == pBar->mpRow;
 
     cbRemoveBarEvent evt( pBar, this );
@@ -2396,7 +2346,7 @@ void cbDockPane::FrameToPane( int* x, int* y )
     *y -= mTopMargin;
 
     if ( mAlignment == FL_ALIGN_TOP ||
-         mAlignment == FL_ALIGN_BOTTOM 
+         mAlignment == FL_ALIGN_BOTTOM
        )
     {
         *x -= mBoundsInParent.x;
@@ -2415,7 +2365,7 @@ void cbDockPane::FrameToPane( int* x, int* y )
 void cbDockPane::PaneToFrame( int* x, int* y )
 {
     if ( mAlignment == FL_ALIGN_TOP ||
-         mAlignment == FL_ALIGN_BOTTOM 
+         mAlignment == FL_ALIGN_BOTTOM
        )
     {
         *x += mBoundsInParent.x;
@@ -2482,11 +2432,11 @@ int cbDockPane::GetRowAt( int paneY )
         int rowHeight = mRows[i]->mRowHeight;
 
         int third = rowHeight/3;
-        
-        if ( paneY >= curY && paneY < curY + third ) 
+
+        if ( paneY >= curY && paneY < curY + third )
             return i-1;
 
-        if ( paneY >= curY + third && paneY < curY + rowHeight - third ) 
+        if ( paneY >= curY + third && paneY < curY + rowHeight - third )
             return i;
 
         curY += rowHeight;
@@ -2515,13 +2465,13 @@ int cbDockPane::GetRowAt( int upperY, int lowerY )
         if ( upperY >= curY &&
              lowerY < curY ) return row;
 
-        if ( upperY <= curY && 
+        if ( upperY <= curY &&
              lowerY >= curY &&
              curY - upperY >= oneThird ) return row-1;
 
-        if ( ( upperY <  curY + rowHeight && 
+        if ( ( upperY <  curY + rowHeight &&
                lowerY >= curY + rowHeight &&
-               curY + rowHeight - lowerY >= oneThird ) 
+               curY + rowHeight - lowerY >= oneThird )
            )
             return row+1;
 
@@ -2578,7 +2528,7 @@ bool cbDockPane::HasNotFixedRowsAbove( cbRowInfo* pRow )
         if ( pRow->mHasOnlyFixedBars )
 
             return true;
-    } 
+    }
 
     return false;
 }
@@ -2607,7 +2557,7 @@ bool cbDockPane::HasNotFixedBarsLeft( cbBarInfo* pBar )
 
             return true;
     }
-        
+
     return false;
 }
 
@@ -2621,7 +2571,7 @@ bool cbDockPane::HasNotFixedBarsRight( cbBarInfo* pBar )
 
             return true;
     }
-        
+
     return false;
 }
 
@@ -2655,7 +2605,7 @@ void cbDockPane::CalcLengthRatios( cbRowInfo* pInRow )
 void cbDockPane::RecalcRowLayout( cbRowInfo* pRow )
 {
     cbLayoutRowEvent evt( pRow, this );
-    
+
     mpLayout->FirePluginEvent( evt );
 }
 
@@ -2679,7 +2629,7 @@ void cbDockPane::ExpandBar( cbBarInfo* pBar )
             if ( !pCur->IsFixed() )
             {
                 ratios.Add( 0.0 );
-                ratios[ ratios.GetCount() - 1 ] = pCur->mLenRatio; 
+                ratios[ ratios.GetCount() - 1 ] = pCur->mLenRatio;
             }
 
             pCur = pCur->mpNext;
@@ -2790,8 +2740,8 @@ void cbDockPane::DoInsertBar( cbBarInfo* pBar, int rowNo )
         pRow = new cbRowInfo();
 
         if ( rowNo == -1 && mRows.Count() )
-        
-            mRows.Insert( pRow, 0 ); 
+
+            mRows.Insert( pRow, 0 );
         else
             mRows.Add( pRow );
 
@@ -2806,7 +2756,7 @@ void cbDockPane::DoInsertBar( cbBarInfo* pBar, int rowNo )
             // store original shape of the row (before the bar is inserted)
 
             mpStoredRow = pRow;
-            
+
             GetRowShapeData( mpStoredRow, &mRowShapeData );
         }
     }
@@ -2943,7 +2893,7 @@ void cbDockPane::SetBoundsInParent( const wxRect& rect )
 
     if ( noMarginsRect.width < 0 ||
          noMarginsRect.height < 0 )
-    
+
         hide_rect( noMarginsRect   );
 
     // calculate mBoundsInParent for each item in the pane
@@ -2980,7 +2930,7 @@ void cbDockPane::SetBoundsInParent( const wxRect& rect )
         }
 
         if ( bar.mHasRightHandle )
-        
+
             bounds.width -= mProps.mResizeHandleSize;
 
         PaneToFrame( &bounds );
@@ -2996,7 +2946,7 @@ bool cbDockPane::BarPresent( cbBarInfo* pBar )
     wxBarIterator iter( mRows );
 
     while( iter.Next() )
-    
+
         if ( &iter.BarInfo() == pBar ) return true;
 
     return false;
@@ -3014,7 +2964,7 @@ int cbDockPane::GetRowIndex( cbRowInfo* pRow )
     size_t i;
     for ( i = 0; i != mRows.Count(); ++i )
     {
-        if ( mRows[i] == pRow ) 
+        if ( mRows[i] == pRow )
             return i;
     }
 
@@ -3033,7 +2983,6 @@ int cbDockPane::GetPaneHeight()
     int height = 0;
 
     if ( IsHorizontal() )
-    
         height += mTopMargin  + mBottomMargin;
     else
         height += mLeftMargin + mRightMargin;
@@ -3041,7 +2990,6 @@ int cbDockPane::GetPaneHeight()
     int count = mRows.Count();
 
     if ( count )
-    
         height += mRows[count-1]->mRowY + mRows[count-1]->mRowHeight;
 
     return height;
@@ -3079,7 +3027,7 @@ void cbDockPane::RecalcLayout()
     cbLayoutRowsEvent evt( this );
     mpLayout->FirePluginEvent( evt );
 
-    // then horizontally in each row 
+    // then horizontally in each row
 
     size_t i;
     for ( i = 0; i != mRows.Count(); ++i )
@@ -3088,7 +3036,7 @@ void cbDockPane::RecalcLayout()
 
 int cbDockPane::GetDockingState()
 {
-    if ( mAlignment == FL_ALIGN_TOP || 
+    if ( mAlignment == FL_ALIGN_TOP ||
          mAlignment == FL_ALIGN_BOTTOM )
     {
         return wxCBAR_DOCKED_HORIZONTALLY;
@@ -3097,10 +3045,10 @@ int cbDockPane::GetDockingState()
         return wxCBAR_DOCKED_VERTICALLY;
 }
 
-inline bool cbDockPane::HasPoint( const wxPoint& pos, int x, int y, 
+inline bool cbDockPane::HasPoint( const wxPoint& pos, int x, int y,
                                   int width, int height )
 {
-    return ( pos.x >= x && 
+    return ( pos.x >= x &&
              pos.y >= y &&
              pos.x < x + width &&
              pos.y < y + height   );
@@ -3133,7 +3081,7 @@ int cbDockPane::HitTestPaneItems( const wxPoint& pos,
         else
         if ( row.mHasLowerHandle )
         {
-            if ( HasPoint( pos, 0, row.mRowY + row.mRowHeight - mProps.mResizeHandleSize, 
+            if ( HasPoint( pos, 0, row.mRowY + row.mRowHeight - mProps.mResizeHandleSize,
                            row.mRowWidth, mProps.mResizeHandleSize ) )
 
                     return CB_LOWER_ROW_HANDLE_HITTED;
@@ -3161,7 +3109,7 @@ int cbDockPane::HitTestPaneItems( const wxPoint& pos,
             {
                 if ( HasPoint( pos, bounds.x + bounds.width - mProps.mResizeHandleSize, bounds.y,
                                mProps.mResizeHandleSize, bounds.height ) )
-                
+
                     return CB_RIGHT_BAR_HANDLE_HITTED;
             }
 
@@ -3208,10 +3156,9 @@ void cbDockPane::GetBarResizeRange( cbBarInfo* pBar, int* from, int *till,
 
         // treat not-fixed bars as minimized
 
-        if ( !pBar->IsFixed() ) 
-            
+        if ( !pBar->IsFixed() )
             notFree += mProps.mMinCBarDim.x;
-        else 
+        else
         {
             if ( pBar->mBounds.x + pBar->mBounds.width >= mPaneWidth )
             {
@@ -3222,17 +3169,15 @@ void cbDockPane::GetBarResizeRange( cbBarInfo* pBar, int* from, int *till,
                 notFree += pBar->mBounds.width;
         }
 
-    } 
+    }
 
     *till = mPaneWidth - notFree;
 
     // do not let resizing totally deform the bar itself
 
     if ( forLeftHandle )
-    
         (*till) -= mProps.mMinCBarDim.x;
     else
-    
         (*from) += mProps.mMinCBarDim.x;
 }
 
@@ -3252,7 +3197,7 @@ int cbDockPane::GetMinimalRowHeight( cbRowInfo* pRow )
 
     if ( pRow->mHasLowerHandle )
         height += mProps.mResizeHandleSize;
-    
+
     return height;
 }
 
@@ -3291,7 +3236,7 @@ void cbDockPane::GetRowResizeRange( cbRowInfo* pRow, int* from, int* till,
 
     };
 
-    *from = notFree;    
+    *from = notFree;
 
     // allow accupy the client window space by resizing pane rows
     if ( mAlignment == FL_ALIGN_BOTTOM )
@@ -3316,7 +3261,7 @@ void cbDockPane::GetRowResizeRange( cbRowInfo* pRow, int* from, int* till,
 
     }
 
-    *till = mPaneHeight - notFree;  
+    *till = mPaneHeight - notFree;
 
     // allow adjustinig pane space vs. client window space by resizing pane row heights
 
@@ -3333,7 +3278,7 @@ void cbDockPane::GetRowResizeRange( cbRowInfo* pRow, int* from, int* till,
     cbRowInfo& row = *pGivenRow;
 
     if ( forUpperHandle )
-    {   
+    {
         *till = row.mRowY + row.mRowHeight - GetMinimalRowHeight( pGivenRow );
 
         if ( row.mHasUpperHandle )
@@ -3350,7 +3295,7 @@ void cbDockPane::GetRowResizeRange( cbRowInfo* pRow, int* from, int* till,
     }
 }
 
-void cbDockPane::ResizeRow( cbRowInfo* pRow, int ofs, 
+void cbDockPane::ResizeRow( cbRowInfo* pRow, int ofs,
                             bool forUpperHandle )
 {
     cbResizeRowEvent evt( pRow, ofs, forUpperHandle, this );
@@ -3358,7 +3303,7 @@ void cbDockPane::ResizeRow( cbRowInfo* pRow, int ofs,
     mpLayout->FirePluginEvent( evt );
 }
 
-void cbDockPane::ResizeBar( cbBarInfo* pBar, int ofs, 
+void cbDockPane::ResizeBar( cbBarInfo* pBar, int ofs,
                             bool forLeftHandle )
 {
     pBar->mpRow->mpExpandedBar = NULL;
@@ -3383,7 +3328,7 @@ void cbDockPane::ResizeBar( cbBarInfo* pBar, int ofs,
     }
     else
     {
-        // move bar left if necessary       
+        // move bar left if necessary
         if ( bounds.width + ofs < mProps.mMinCBarDim.x )
         {
             bounds.x     = bounds.x + bounds.width + ofs - mProps.mMinCBarDim.x;
@@ -3450,11 +3395,13 @@ void cbDockPane::DrawHorizHandle( wxDC& dc, int x, int y, int width  )
         dc.DrawLine( x,y, right, y );
     }
 
+    ++y;
     dc.SetPen( mpLayout->mDarkPen );
-    dc.DrawLine( x,y, right, ++y );
+    dc.DrawLine( x,y, right, y );
 
+    ++y;
     dc.SetPen( mpLayout->mBlackPen );
-    dc.DrawLine( x,y, right, ++y );
+    dc.DrawLine( x,y, right, y );
 }
 
 cbBarInfo* cbDockPane::GetBarInfoByWindow( wxWindow* pBarWnd )
@@ -3462,7 +3409,7 @@ cbBarInfo* cbDockPane::GetBarInfoByWindow( wxWindow* pBarWnd )
     wxBarIterator i( mRows );
 
     while( i.Next() )
-    
+
         if ( i.BarInfo().mpBarWnd == pBarWnd )
 
             return &i.BarInfo();
@@ -3472,7 +3419,11 @@ cbBarInfo* cbDockPane::GetBarInfoByWindow( wxWindow* pBarWnd )
 
 void cbDockPane::GetRowShapeData( cbRowInfo* pRow, wxList* pLst )
 {
-    pLst->DeleteContents( true );
+    if(pLst)
+    {
+        WX_CLEAR_LIST(wxList,*pLst);
+    }
+
     pLst->Clear();
 
     size_t i;
@@ -3494,7 +3445,7 @@ void cbDockPane::SetRowShapeData( cbRowInfo* pRow, wxList* pLst )
     if ( pLst->GetFirst() == NULL )
         return;
 
-    wxNode* pData = pLst->GetFirst();
+    wxObjectList::compatibility_iterator pData = pLst->GetFirst();
 
     size_t i;
     for ( i = 0; i != pRow->mBars.Count(); ++i )
@@ -3527,7 +3478,7 @@ cbPluginBase::~cbPluginBase()
 
 bool cbPluginBase::ProcessEvent(wxEvent& event)
 {
-    if ( mPaneMask == wxALL_PANES ) 
+    if ( mPaneMask == wxALL_PANES )
 
         return wxEvtHandler::ProcessEvent( event );
 
@@ -3552,7 +3503,7 @@ bool cbPluginBase::ProcessEvent(wxEvent& event)
 
     // if event's pane maks matches the plugin's mask
 
-    if ( mPaneMask & mask ) 
+    if ( mPaneMask & mask )
 
         return wxEvtHandler::ProcessEvent( event );
 
@@ -3564,4 +3515,3 @@ bool cbPluginBase::ProcessEvent(wxEvent& event)
     else
         return false;
 }
-