123
This commit is contained in:
143
Editor/Controls/ToolButton.cpp
Normal file
143
Editor/Controls/ToolButton.cpp
Normal file
@@ -0,0 +1,143 @@
|
||||
// ToolButton.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ToolButton.h"
|
||||
#include "EditTool.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
#define TOOLBUTTON_TIMERID 1001
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CToolButton
|
||||
IMPLEMENT_DYNAMIC(CToolButton,CColorCheckBox)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CToolButton::CToolButton()
|
||||
{
|
||||
m_toolClass = 0;
|
||||
m_userData = 0;
|
||||
m_nTimer = 0;
|
||||
}
|
||||
|
||||
CToolButton::~CToolButton()
|
||||
{
|
||||
StopTimer();
|
||||
}
|
||||
|
||||
void CToolButton::SetToolClass( CRuntimeClass *toolClass,void *userData )
|
||||
{
|
||||
m_toolClass = toolClass;
|
||||
m_userData = userData;
|
||||
}
|
||||
|
||||
BEGIN_MESSAGE_MAP(CToolButton, CButton)
|
||||
//{{AFX_MSG_MAP(CToolButton)
|
||||
ON_WM_TIMER()
|
||||
ON_WM_DESTROY()
|
||||
ON_WM_PAINT()
|
||||
ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CToolButton message handlers
|
||||
void CToolButton::OnTimer(UINT_PTR nIDEvent)
|
||||
{
|
||||
// Check tool state.
|
||||
CEditTool *tool = GetIEditor()->GetEditTool();
|
||||
CRuntimeClass *toolClass = 0;
|
||||
if (tool)
|
||||
toolClass = tool->GetRuntimeClass();
|
||||
|
||||
int c = GetCheck();
|
||||
|
||||
if (toolClass != m_toolClass)
|
||||
{
|
||||
if (GetCheck() == 1)
|
||||
SetCheck(0);
|
||||
StopTimer();
|
||||
}
|
||||
|
||||
CButton::OnTimer(nIDEvent);
|
||||
}
|
||||
|
||||
void CToolButton::OnDestroy()
|
||||
{
|
||||
StopTimer();
|
||||
CButton::OnDestroy();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CToolButton::OnPaint()
|
||||
{
|
||||
CColorCheckBox::OnPaint();
|
||||
|
||||
// Check if tool is current tool.
|
||||
CEditTool *tool = GetIEditor()->GetEditTool();
|
||||
if (tool && tool->GetRuntimeClass() == m_toolClass)
|
||||
{
|
||||
if (GetCheck() == 0)
|
||||
{
|
||||
SetCheck(1);
|
||||
StartTimer();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetCheck() == 1)
|
||||
{
|
||||
SetCheck(0);
|
||||
StopTimer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CToolButton::OnClicked()
|
||||
{
|
||||
if (!m_toolClass)
|
||||
return;
|
||||
|
||||
CEditTool *tool = GetIEditor()->GetEditTool();
|
||||
if (tool && tool->GetRuntimeClass() == m_toolClass)
|
||||
{
|
||||
GetIEditor()->SetEditTool(0);
|
||||
SetCheck(0);
|
||||
|
||||
StopTimer();
|
||||
}
|
||||
else
|
||||
{
|
||||
CEditTool *tool = (CEditTool*)m_toolClass->CreateObject();
|
||||
if (!tool)
|
||||
return;
|
||||
|
||||
SetCheck(1);
|
||||
StartTimer();
|
||||
|
||||
if (m_userData)
|
||||
tool->SetUserData( m_userData );
|
||||
|
||||
// Must be last function, can delete this.
|
||||
GetIEditor()->SetEditTool( tool );
|
||||
}
|
||||
}
|
||||
|
||||
void CToolButton::StartTimer()
|
||||
{
|
||||
StopTimer();
|
||||
m_nTimer = SetTimer(TOOLBUTTON_TIMERID,200,NULL);
|
||||
}
|
||||
|
||||
void CToolButton::StopTimer()
|
||||
{
|
||||
if (m_nTimer != 0)
|
||||
KillTimer(m_nTimer);
|
||||
m_nTimer = 0;
|
||||
}
|
||||
Reference in New Issue
Block a user