//*******************************************************************************
BOOL CBCGPBaseTabbedBar::FloatTab (CWnd* pBar, int nTabID, 
									  BCGP_DOCK_METHOD dockMethod, 
									  BOOL bHide)
{
	ASSERT_VALID (this);
	ASSERT_VALID (pBar);
	ASSERT_VALID (m_pTabWnd);

	CString strWndText;
	pBar->GetWindowText (strWndText);

	if (strWndText.IsEmpty ())
	{
		if (m_pTabWnd->GetTabLabel (nTabID, strWndText))
		{
			pBar->SetWindowText (strWndText);
		}
	}

	m_pTabWnd->RemoveTab (nTabID);
	
	if (dockMethod == BCGP_DM_MOUSE)
	{
		m_pTabWnd->SendMessage (WM_LBUTTONUP, 0, 0);
	}

	CBCGPDockingControlBar* pDockingBar = 
			DYNAMIC_DOWNCAST (CBCGPDockingControlBar, pBar);

	if (pDockingBar != NULL)
	{
		pDockingBar->StoreRecentTabRelatedInfo ();
	}

	if (dockMethod == BCGP_DM_DBL_CLICK && pDockingBar != NULL)
	{
		CBCGPMultiMiniFrameWnd* pParentMiniFrame = 
				DYNAMIC_DOWNCAST (CBCGPMultiMiniFrameWnd, GetParentMiniFrame ());

		if (pParentMiniFrame != NULL)
		{
			pParentMiniFrame->DockRecentControlBarToMainFrame (pDockingBar);
			return TRUE;
		}
		else if (m_hDefaultSlider != NULL && IsWindow (m_hDefaultSlider))
		{
			CBCGPMultiMiniFrameWnd* pRecentMiniFrame = 
				DYNAMIC_DOWNCAST (CBCGPMultiMiniFrameWnd,
					CWnd::FromHandlePermanent (pDockingBar->m_recentDockInfo.m_hRecentMiniFrame));
			if (pRecentMiniFrame != NULL && 
				pRecentMiniFrame->AddRecentControlBar (pDockingBar))
			{
				return TRUE;
			}
		}
	}

	if (pBar->IsKindOf (RUNTIME_CLASS (CBCGPControlBar)))
	{
		CBCGPControlBar* pControlBar = 
			DYNAMIC_DOWNCAST (CBCGPControlBar, pBar);
		ASSERT_VALID (pControlBar);
		pControlBar->FloatControlBar (pControlBar->m_recentDockInfo.m_rectRecentFloatingRect, 
									  dockMethod, !bHide);
		return TRUE;
	}
	return FALSE;
}