109 lines
5.5 KiB
C++
109 lines
5.5 KiB
C++
// OXPropertyTree.cpp : implementation file
|
||
//
|
||
|
||
#include "stdafx.h"
|
||
#include "OXPropertyTree.h"
|
||
#include "OXPropertiesWnd.h"
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// COXPropertyTree
|
||
|
||
IMPLEMENT_DYNAMIC(COXPropertyTree, COXTreeCtrl)
|
||
|
||
COXPropertyTree::COXPropertyTree(COXPropertiesWnd* pPropertiesWnd)
|
||
{
|
||
m_pPropertiesWnd = pPropertiesWnd;
|
||
}
|
||
|
||
COXPropertyTree::~COXPropertyTree()
|
||
{
|
||
}
|
||
|
||
|
||
BEGIN_MESSAGE_MAP(COXPropertyTree, COXTreeCtrl)
|
||
//{{AFX_MSG_MAP(COXPropertyTree)
|
||
ON_WM_VSCROLL()
|
||
ON_WM_LBUTTONDOWN()
|
||
ON_EN_KILLFOCUS(_EDITOR_ID, OnKillEditFocus)
|
||
//}}AFX_MSG_MAP
|
||
END_MESSAGE_MAP()
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
// COXPropertyTree message handlers
|
||
|
||
void COXPropertyTree::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
||
{
|
||
m_pPropertiesWnd->FinishEditing();
|
||
|
||
COXTreeCtrl::OnVScroll(nSBCode, nPos, pScrollBar);
|
||
}
|
||
|
||
void COXPropertyTree::OnLButtonDown(UINT nFlags, CPoint point)
|
||
{
|
||
COXTreeCtrl::OnLButtonDown(nFlags, point);
|
||
|
||
if (HitTest(point, &nFlags) == -1)
|
||
m_pPropertiesWnd->FinishEditing();
|
||
}
|
||
|
||
BOOL COXPropertyTree::PreTranslateMessage(MSG* pMsg)
|
||
{
|
||
if (pMsg->message == WM_KEYDOWN)
|
||
{
|
||
if (pMsg->wParam == VK_RETURN) {
|
||
if(m_pPropertiesWnd->m_pEditWnd != NULL && ::GetFocus() == m_pPropertiesWnd->m_pEditWnd->m_hWnd) {
|
||
m_pPropertiesWnd->FinishEditing();
|
||
}
|
||
return TRUE;
|
||
}
|
||
else if (pMsg->wParam == VK_ESCAPE) {
|
||
if(m_pPropertiesWnd->m_pEditWnd != NULL && ::GetFocus() == m_pPropertiesWnd->m_pEditWnd->m_hWnd) {
|
||
m_pPropertiesWnd->FinishEditing(FALSE);
|
||
}
|
||
return TRUE;
|
||
}
|
||
else if (pMsg->wParam == VK_TAB)
|
||
{
|
||
// if we're not editing, start editing
|
||
if(m_pPropertiesWnd->m_pEditWnd != NULL && ::GetFocus() == m_pPropertiesWnd->m_pEditWnd->m_hWnd) {
|
||
m_pPropertiesWnd->FinishEditing(TRUE);
|
||
if(GetKeyState(VK_SHIFT) & 0xf0000000) {
|
||
SendMessage(WM_KEYDOWN,VK_UP);
|
||
}
|
||
else {
|
||
SendMessage(WM_KEYDOWN,VK_DOWN);
|
||
}
|
||
}
|
||
HPROPERTY hSelectedProp = m_pPropertiesWnd->GetSelectedProperty();
|
||
m_pPropertiesWnd->StartEditing(hSelectedProp);
|
||
if(m_pPropertiesWnd->m_pEditWnd != NULL) {
|
||
m_pPropertiesWnd->m_pEditWnd->SetFocus();
|
||
m_pPropertiesWnd->m_pEditWnd->ShowCaret();
|
||
}
|
||
else {
|
||
// read only field - move on...
|
||
if(GetKeyState(VK_SHIFT) & 0xf0000000) {
|
||
SendMessage(WM_KEYDOWN,VK_UP);
|
||
}
|
||
else {
|
||
SendMessage(WM_KEYDOWN,VK_DOWN);
|
||
}
|
||
}
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
return COXTreeCtrl::PreTranslateMessage(pMsg);
|
||
}
|
||
|
||
void COXPropertyTree::OnKillEditFocus()
|
||
{
|
||
if (m_pPropertiesWnd)
|
||
m_pPropertiesWnd->FinishEditing();
|
||
}
|