quadrilateralcowboy/tools/common/PropTree/PropTreeItemCheck.cpp
2020-06-12 14:06:25 -07:00

161 lines
3.7 KiB
C++

// PropTreeItemCheck.cpp : implementation file
//
// Copyright (C) 1998-2001 Scott Ramsay
// sramsay@gonavi.com
// http://www.gonavi.com
//
// This material is provided "as is", with absolutely no warranty expressed
// or implied. Any use is at your own risk.
//
// Permission to use or copy this software for any purpose is hereby granted
// without fee, provided the above notices are retained on all copies.
// Permission to modify the code and to distribute modified code is granted,
// provided the above notices are retained, and a notice that the code was
// modified is included with the above copyright notice.
//
// If you use this code, drop me an email. I'd like to know if you find the code
// useful.
//#include "stdafx.h"
#include "../../../idlib/precompiled.h"
#pragma hdrstop
#include "proptree.h"
#include "PropTreeItemCheck.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define CHECK_BOX_SIZE 14
/////////////////////////////////////////////////////////////////////////////
// CPropTreeItemCheck
CPropTreeItemCheck::CPropTreeItemCheck()
{
checkState = 0;
}
CPropTreeItemCheck::~CPropTreeItemCheck()
{
}
BEGIN_MESSAGE_MAP(CPropTreeItemCheck, CButton)
//{{AFX_MSG_MAP(CPropTreeItemCheck)
//}}AFX_MSG_MAP
ON_CONTROL_REFLECT(BN_KILLFOCUS, OnBnKillfocus)
ON_CONTROL_REFLECT(BN_CLICKED, OnBnClicked)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPropTreeItemCheck message handlers
void CPropTreeItemCheck::DrawAttribute(CDC* pDC, const RECT& rc)
{
ASSERT(m_pProp!=NULL);
// verify the window has been created
if (!IsWindow(m_hWnd))
{
TRACE0("CPropTreeItemCombo::DrawAttribute() - The window has not been created\n");
return;
}
checkRect.left = m_rc.left;
checkRect.top = m_rc.top + ((m_rc.bottom - m_rc.top)/2)-CHECK_BOX_SIZE/2;
checkRect.right = checkRect.left + CHECK_BOX_SIZE;
checkRect.bottom = checkRect.top + CHECK_BOX_SIZE;
if(!m_bActivated)
pDC->DrawFrameControl(&checkRect, DFC_BUTTON, DFCS_BUTTONCHECK | DFCS_FLAT |(checkState ? DFCS_CHECKED : 0));
}
void CPropTreeItemCheck::SetCheckState(BOOL state)
{
checkState = state;
SetCheck(checkState ? BST_CHECKED : BST_UNCHECKED);
}
LPARAM CPropTreeItemCheck::GetItemValue()
{
return (LPARAM)GetCheckState();
}
void CPropTreeItemCheck::SetItemValue(LPARAM lParam)
{
SetCheckState((BOOL)lParam);
}
void CPropTreeItemCheck::OnMove()
{
if (IsWindow(m_hWnd))
SetWindowPos(NULL, m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(), SWP_NOZORDER|SWP_NOACTIVATE);
}
void CPropTreeItemCheck::OnRefresh()
{
}
void CPropTreeItemCheck::OnCommit()
{
ShowWindow(SW_HIDE);
}
void CPropTreeItemCheck::OnActivate(int activateType, CPoint point)
{
if(activateType == CPropTreeItem::ACTIVATE_TYPE_MOUSE) {
//Check where the user clicked
if(point.x < m_rc.left + CHECK_BOX_SIZE) {
SetCheckState(!GetCheckState());
CommitChanges();
} else {
SetWindowPos(NULL, m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(), SWP_NOZORDER|SWP_SHOWWINDOW);
SetFocus();
}
} else {
SetWindowPos(NULL, m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(), SWP_NOZORDER|SWP_SHOWWINDOW);
SetFocus();
}
}
bool CPropTreeItemCheck::CreateCheckBox() {
ASSERT(m_pProp!=NULL);
if (IsWindow(m_hWnd))
DestroyWindow();
DWORD dwStyle = (WS_CHILD|BS_CHECKBOX|BS_NOTIFY|BS_FLAT );
if (!Create(NULL, dwStyle, CRect(0,0,0,0), m_pProp->GetCtrlParent(), GetCtrlID()))
{
TRACE0("CPropTreeItemCombo::CreateComboBox() - failed to create combo box\n");
return FALSE;
}
return TRUE;
}
void CPropTreeItemCheck::OnBnKillfocus()
{
CommitChanges();
}
void CPropTreeItemCheck::OnBnClicked()
{
int state = GetCheck();
SetCheckState(GetCheck() == BST_CHECKED ? FALSE : TRUE);
CommitChanges();
}