diff host/tools/configtool/common/win32/thinsplitter.cpp @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents
children 74dbf4c3f2e1
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/host/tools/configtool/common/win32/thinsplitter.cpp
@@ -0,0 +1,190 @@
+//####COPYRIGHTBEGIN####
+//                                                                          
+// ----------------------------------------------------------------------------
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+//
+// This program is part of the eCos host tools.
+//
+// This program is free software; you can redistribute it and/or modify it 
+// under the terms of the GNU General Public License as published by the Free 
+// Software Foundation; either version 2 of the License, or (at your option) 
+// any later version.
+// 
+// This program is distributed in the hope that it will be useful, but WITHOUT 
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+// more details.
+// 
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc., 
+// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+// ----------------------------------------------------------------------------
+//                                                                          
+//####COPYRIGHTEND####
+//===========================================================================
+//#####DESCRIPTIONBEGIN####
+//
+// Author(s): 	sdf
+// Contact(s):	sdf
+// Date:		1998/08/11
+// Version:		0.01
+// Purpose:	
+// Description:	Implementation of a CSplitterWndEx override for control/cell view split
+// Requires:	
+// Provides:	
+// See also:    
+// Known bugs:	
+// Usage:	
+//
+//####DESCRIPTIONEND####
+//
+//===========================================================================
+#include "stdafx.h"
+#include "ThinSplitter.h"
+#include "ControlView.h"
+//#include "CellView.h"
+
+BEGIN_MESSAGE_MAP(CThinSplitter, CSplitterWndEx)
+	//{{AFX_MSG_MAP(CThinSplitter)
+	ON_WM_SIZE()
+	ON_WM_VSCROLL()
+	ON_WM_MOUSEWHEEL()
+	//}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+//IMPLEMENT_DYNCREATE(CThinSplitter, CSplitterWndEx)
+
+CThinSplitter::CThinSplitter():
+	m_fColumnRatio(0.75),
+	CSplitterWndEx()
+{
+  m_GrayPen.CreatePen(PS_SOLID,1,RGB(192,192,192));	
+}
+
+CThinSplitter::~CThinSplitter()
+{
+}
+
+void CThinSplitter::OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rect )
+{
+	m_cxSplitterGap=1;
+	switch(nType){
+		case splitBar:
+//TRACE("paint bar pDC=%08x\n",pDC);
+			if(pDC){
+				int cx=rect.left;
+				CPen *pOldPen=pDC->SelectObject(&m_GrayPen);
+				//static CPen redpen(PS_SOLID,1,RGB(255,0,0));
+				//pDC->FillSolidRect(rect,RGB(192,192,192));
+				//CPen *pOldPen=pDC->SelectObject(&redpen);
+
+				pDC->MoveTo(cx,rect.top+m_cyBorder);
+				pDC->LineTo(cx,rect.bottom-m_cyBorder);
+				pDC->MoveTo(cx+1,rect.top+m_cyBorder);
+				pDC->LineTo(cx+1,rect.bottom-m_cyBorder);
+				pDC->SelectObject(pOldPen);
+				
+				return;
+			}
+			break;
+		case splitBorder:
+			//if(pDC)
+			{
+				CRect rcClient;
+				GetClientRect(rcClient);
+				CSplitterWndEx::OnDrawSplitter( pDC,splitBorder,rcClient);
+				return;
+			}
+		default:
+			break;
+	}
+	
+	CSplitterWndEx::OnDrawSplitter( pDC,  nType,rect );
+}
+
+void CThinSplitter::DeleteColumn(int colDelete)
+{
+	// Do nothing - we don't allow deletion of columns
+	UNUSED_ALWAYS(colDelete);
+}
+
+int CThinSplitter::HitTest(CPoint pt) const
+{
+	enum HitTestValue
+	{
+		hSplitterBar1           = 201,
+	};
+	int rc=CSplitterWndEx::HitTest(pt);
+	if(rc==0){
+		// Be more lenient about finding the splitter bar
+		CRect rect;
+		GetClientRect(rect);
+		rect.left = m_pColInfo[0].nCurSize-3;
+		rect.right = m_pColInfo[0].nCurSize + m_cxSplitterGap + 3;
+		if (rect.PtInRect(pt))
+		{
+			rc=hSplitterBar1;
+		}
+	}
+	return rc;
+}
+
+void CThinSplitter::OnSize( UINT nType, int cx, int cy )
+{
+	//if(m_nCols>1 && m_pColInfo){
+	//	SetColumnInfo(0,int(m_fColumnRatio * cx + 0.5),0);
+	//}
+	CSplitterWndEx::OnSize( nType, cx, cy );
+}
+
+// Two reasons for this: 1-the annoying debug warning the MFC version emits and
+// 2- an apparent bug whereby the scrollbar gets frozen.
+void CThinSplitter::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
+{
+	for (int col = 0; col < m_nCols; col++)
+	{
+		GetPane(0, col)->SendMessage(WM_VSCROLL,
+			MAKELONG(nSBCode, nPos), (LPARAM)pScrollBar->m_hWnd);
+	}
+}
+
+BOOL CThinSplitter::SplitColumn(int cxBefore){
+	CRect rcClient;
+	GetClientRect(rcClient);
+	m_pColInfo[0].nCurSize=m_pColInfo[0].nIdealSize;
+	//m_pDynamicViewClass = RUNTIME_CLASS(CCellView);
+	int rc=CSplitterWndEx::SplitColumn(cxBefore);
+	double d0=double(m_pColInfo[0].nCurSize);
+	double d1=double(m_pColInfo[1].nCurSize);
+	m_fColumnRatio=d0/(d0+d1);
+	return rc;
+}
+
+// We do this because the CSplitterWndEx implementation assumes both children are derived
+// from CScrollView - so here we just let the children handle the message themselves.
+BOOL CThinSplitter::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) 
+{
+	return TRUE;
+	UNUSED_ALWAYS(nFlags);
+	UNUSED_ALWAYS(zDelta);
+	UNUSED_ALWAYS(pt);
+}
+
+void CThinSplitter::RecalcLayout()
+{
+	CSplitterWndEx::RecalcLayout();
+	if (m_nCols==2 && m_pColInfo[0].nCurSize && m_pColInfo[1].nCurSize){
+		CRect rect;
+		GetClientRect(rect);
+		m_fColumnRatio=double(m_pColInfo[0].nCurSize)/double(rect.Width());
+	}
+}
+
+BOOL CThinSplitter::CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle, UINT nID)
+{
+  bool rc=CSplitterWndEx::CreateStatic(pParentWnd, nRows, nCols, dwStyle, nID);
+  m_nMaxRows=1;
+  return rc;
+}
+