Play-/Source/win32ui/RegViewWnd.cpp
jpd002 14129468e4 Removed uses of CList, CEvent, CEventEx, CEventHandler.
Fixed TR1 compilance.
Input configuration support for Win32.
Support for analog axis in PadMan.

git-svn-id: http://svn.purei.org/purei/trunk@361 b36208d7-6611-0410-8bec-b1987f11c4a2
2008-08-24 21:28:42 +00:00

133 lines
3 KiB
C++

#include <boost/bind.hpp>
#include "RegViewWnd.h"
#include "RegViewGeneral.h"
#include "RegViewSCU.h"
#include "RegViewFPU.h"
#include "RegViewVU.h"
#include "PtrMacro.h"
#define CLSNAME _T("CRegViewWnd")
using namespace Framework;
using namespace boost;
CRegViewWnd::CRegViewWnd(HWND hParent, CVirtualMachine& virtualMachine, CMIPS* pCtx)
{
RECT rc;
if(!DoesWindowClassExist(CLSNAME))
{
WNDCLASSEX wc;
memset(&wc, 0, sizeof(WNDCLASSEX));
wc.cbSize = sizeof(WNDCLASSEX);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = CLSNAME;
wc.lpfnWndProc = CWindow::WndProc;
RegisterClassEx(&wc);
}
SetRect(&rc, 0, 0, 320, 240);
Create(NULL, CLSNAME, _T("Registers"), WS_CLIPCHILDREN | WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_CHILD | WS_MAXIMIZEBOX, &rc, hParent, NULL);
SetClassPtr();
m_pRegView[0] = new CRegViewGeneral(m_hWnd, &rc, virtualMachine, pCtx);
m_pRegView[1] = new CRegViewSCU(m_hWnd, &rc, virtualMachine, pCtx);
m_pRegView[2] = new CRegViewFPU(m_hWnd, &rc, virtualMachine, pCtx);
m_pRegView[3] = new CRegViewVU(m_hWnd, &rc, virtualMachine, pCtx);
m_pRegView[0]->Enable(false);
m_pRegView[1]->Enable(false);
m_pRegView[2]->Enable(false);
m_pRegView[3]->Enable(false);
m_pRegView[0]->Show(SW_HIDE);
m_pRegView[1]->Show(SW_HIDE);
m_pRegView[2]->Show(SW_HIDE);
m_pRegView[3]->Show(SW_HIDE);
m_pTabs = new CNiceTabs(m_hWnd, &rc);
m_pTabs->InsertTab(_T("General"), CNiceTabs::TAB_FLAG_UNDELETEABLE, 0);
m_pTabs->InsertTab(_T("SCU"), CNiceTabs::TAB_FLAG_UNDELETEABLE, 1);
m_pTabs->InsertTab(_T("FPU"), CNiceTabs::TAB_FLAG_UNDELETEABLE, 2);
m_pTabs->InsertTab(_T("VU"), CNiceTabs::TAB_FLAG_UNDELETEABLE, 3);
m_pCurrent = NULL;
SetCurrentView(0);
m_pTabs->m_OnTabChange.connect(bind(&CRegViewWnd::OnTabChange, this, _1));
RefreshLayout();
}
CRegViewWnd::~CRegViewWnd()
{
unsigned int i;
for(i = 0; i < MAXTABS; i++)
{
DELETEPTR(m_pRegView[i]);
}
DELETEPTR(m_pTabs);
}
void CRegViewWnd::RefreshLayout()
{
RECT rc;
GetClientRect(&rc);
if(m_pCurrent != NULL)
{
m_pCurrent->SetSize(rc.right, rc.bottom - 21);
}
m_pTabs->SetPosition(0, rc.bottom - 21);
m_pTabs->SetSize(rc.right, 21);
}
long CRegViewWnd::OnSize(unsigned int nType, unsigned int nX, unsigned int nY)
{
RefreshLayout();
return TRUE;
}
long CRegViewWnd::OnSysCommand(unsigned int nCmd, LPARAM lParam)
{
switch(nCmd)
{
case SC_CLOSE:
Show(SW_HIDE);
return FALSE;
}
return TRUE;
}
void CRegViewWnd::OnTabChange(unsigned int nTabID)
{
SetCurrentView(nTabID);
}
void CRegViewWnd::SetCurrentView(unsigned int nView)
{
if(m_pCurrent != NULL)
{
m_pCurrent->Enable(false);
m_pCurrent->Show(SW_HIDE);
}
m_pCurrent = m_pRegView[nView];
if(m_pCurrent != NULL)
{
m_pCurrent->Enable(true);
m_pCurrent->Show(SW_SHOW);
m_pCurrent->SetFocus();
}
RefreshLayout();
}