Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
584 lines
11 KiB
C++
584 lines
11 KiB
C++
// NameView.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "NameView.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNameView
|
|
|
|
IMPLEMENT_DYNCREATE(CNameView, CView)
|
|
|
|
CNameView::CNameView()
|
|
{
|
|
displayMemory = new CDC;
|
|
windowActive = False;
|
|
|
|
ctrlPressed = False;
|
|
shiftPressed = False;
|
|
mouseMoveMode = NotActive;
|
|
|
|
firstSelect = 0;
|
|
insertAt = -1;
|
|
|
|
sizeCursor = AfxGetApp()->LoadStandardCursor(IDC_SIZENS);
|
|
arrowCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
|
|
|
|
}
|
|
|
|
CNameView::~CNameView()
|
|
{
|
|
delete displayMemory;
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CNameView, CView)
|
|
//{{AFX_MSG_MAP(CNameView)
|
|
ON_WM_SIZE()
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_LBUTTONUP()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_KEYDOWN()
|
|
ON_WM_KEYUP()
|
|
ON_WM_LBUTTONDBLCLK()
|
|
ON_WM_SETCURSOR()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNameView drawing
|
|
|
|
void CNameView::OnDraw(CDC* pDC)
|
|
{
|
|
CRect client_rect;
|
|
GetClientRect(client_rect);
|
|
CBitmap *old_bitmap;
|
|
old_bitmap = displayMemory->SelectObject(myParent->screenBitmap);
|
|
|
|
|
|
pDC->BitBlt(0,0,client_rect.right,client_rect.bottom, displayMemory,
|
|
myParent->nameSize.left, myParent->nameSize.top, SRCCOPY);
|
|
|
|
displayMemory->SelectObject(old_bitmap);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNameView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CNameView::AssertValid() const
|
|
{
|
|
CView::AssertValid();
|
|
}
|
|
|
|
void CNameView::Dump(CDumpContext& dc) const
|
|
{
|
|
CView::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNameView message handlers
|
|
|
|
void CNameView::OnInitialUpdate()
|
|
{
|
|
CView::OnInitialUpdate();
|
|
windowActive = True;
|
|
|
|
CClientDC client_dc(this);
|
|
|
|
if(displayMemory->GetSafeHdc() == NULL)
|
|
{
|
|
displayMemory->CreateCompatibleDC(&client_dc);
|
|
}
|
|
|
|
|
|
|
|
|
|
myParent->SaveSize();
|
|
myParent->Draw(this);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CView::OnSize(nType, cx, cy);
|
|
|
|
// TODO: Add your message handler code here
|
|
|
|
if (windowActive)
|
|
{
|
|
myParent->SaveSize();
|
|
myParent->Draw(this);
|
|
}
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
void CNameView::Render(CRect placement)
|
|
{
|
|
MY_RGB color;
|
|
color.red = 255;
|
|
color.blue = 255;
|
|
color.green = 255;
|
|
myParent->DrawCRect( placement,color);
|
|
|
|
|
|
int place_to_draw = myParent->borderSize + myParent->nameSize.top;
|
|
|
|
|
|
//Get starting trace as defined by the vert scroll bar in Logic View
|
|
int start = myParent->logicView->GetScrollPos(SB_VERT);
|
|
|
|
for (int i = start; i < myParent->traceCount; ++i)
|
|
{
|
|
//TRACE("%d\n", place_to_draw);
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
trace_line->DrawName(place_to_draw);
|
|
|
|
place_to_draw += trace_line->CalculateSize();
|
|
place_to_draw += myParent->borderSize;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
|
|
CView::OnLButtonDown(nFlags, point);
|
|
|
|
|
|
if (shiftPressed && ctrlPressed)
|
|
{
|
|
// invalid in this case
|
|
}
|
|
else if (shiftPressed)
|
|
{
|
|
// range select
|
|
Logical resize;
|
|
int selection = FindSelection(point, resize);
|
|
|
|
if (selection != -1)
|
|
{
|
|
RangeSelect(selection);
|
|
myParent->Draw(this);
|
|
//myParent->Draw(myParent->logicView);
|
|
}
|
|
}
|
|
else if (ctrlPressed)
|
|
{
|
|
// multi select
|
|
Logical resize;
|
|
int selection = FindSelection(point, resize);
|
|
|
|
if (selection != -1)
|
|
{
|
|
MultiSelect(selection);
|
|
myParent->Draw(this);
|
|
//myParent->Draw(myParent->logicView);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// either select or move or resize;
|
|
|
|
Logical resize;
|
|
int selection = FindSelection(point, resize);
|
|
|
|
if (selection != -1)
|
|
{
|
|
|
|
//SetCapture();
|
|
|
|
if (resize)
|
|
{
|
|
myParent->Draw(this);
|
|
myParent->Draw(myParent->logicView);
|
|
SetCursor(sizeCursor);
|
|
mouseMoveMode = ResizeTrace;
|
|
resizeSelect = selection;
|
|
|
|
}
|
|
else
|
|
{
|
|
SingleSelect(selection);
|
|
myParent->Draw(this);
|
|
myParent->Draw(myParent->valueView);
|
|
//myParent->Draw(myParent->logicView);
|
|
|
|
mouseMoveMode = MoveTrace;
|
|
insertAt = -1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::SingleSelect(int selection)
|
|
{
|
|
for (int i = 0; i < myParent->traceCount; ++i)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
if (i == selection)
|
|
{
|
|
if (trace_line->selected == True)
|
|
{
|
|
trace_line->selected = False;
|
|
}
|
|
else
|
|
{
|
|
trace_line->selected = True;
|
|
firstSelect = i;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
trace_line->selected = False;
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::MultiSelect(int selection)
|
|
{
|
|
for (int i = 0; i < myParent->traceCount; ++i)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
if (i == selection)
|
|
{
|
|
if (trace_line->selected == True)
|
|
{
|
|
trace_line->selected = False;
|
|
}
|
|
else
|
|
{
|
|
|
|
trace_line->selected = True;
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::RangeSelect(int selection)
|
|
{
|
|
int min, max;
|
|
|
|
|
|
for (int i = 0; i < myParent->traceCount; ++i)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
|
|
trace_line->selected = False;
|
|
|
|
}
|
|
|
|
|
|
if (selection < firstSelect)
|
|
{
|
|
min = selection;
|
|
max = firstSelect;
|
|
}
|
|
else
|
|
{
|
|
max = selection;
|
|
min = firstSelect;
|
|
}
|
|
|
|
for (; min <= max; ++min)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(min);
|
|
|
|
|
|
trace_line->selected = True;
|
|
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
int CNameView::FindSelection(CPoint point, Logical &resize)
|
|
{
|
|
|
|
|
|
resize = False;
|
|
|
|
int trace_hit = -1;
|
|
|
|
int top = myParent->borderSize;
|
|
int start = myParent->logicView->GetScrollPos(SB_VERT);
|
|
|
|
for (int i = start; i < myParent->traceCount; ++i)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
int bottom = top + trace_line->CalculateSize();
|
|
|
|
if (point.y < bottom && point.y > top)
|
|
{
|
|
trace_hit = i;
|
|
}
|
|
|
|
if ((point.y < bottom + 2) && (point.y > bottom - 2))
|
|
{
|
|
trace_hit = i;
|
|
resize = True;
|
|
}
|
|
|
|
|
|
top = bottom;
|
|
top += myParent->borderSize;
|
|
}
|
|
|
|
//afxDump << trace_hit << endl;
|
|
return trace_hit;
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
|
|
CView::OnLButtonUp(nFlags, point);
|
|
mouseMoveMode = NotActive;
|
|
|
|
//ReleaseCapture();
|
|
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
void CNameView::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
|
|
CView::OnMouseMove(nFlags, point);
|
|
|
|
|
|
SetFocus();
|
|
|
|
if (mouseMoveMode == ResizeTrace)
|
|
{
|
|
Resize(point);
|
|
myParent->Draw(this);
|
|
myParent->Draw(myParent->logicView);
|
|
SetCursor(sizeCursor);
|
|
}
|
|
else if (mouseMoveMode == MoveTrace)
|
|
{
|
|
Move(point);
|
|
myParent->Draw(this);
|
|
myParent->Draw(myParent->logicView);
|
|
}
|
|
else
|
|
{
|
|
|
|
Logical resize = False;
|
|
FindSelection(point, resize);
|
|
if (resize)
|
|
{
|
|
SetCursor(sizeCursor);
|
|
}
|
|
else
|
|
{
|
|
SetCursor(arrowCursor);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
void CNameView::Resize(CPoint point)
|
|
{
|
|
|
|
int top = myParent->borderSize;
|
|
int start = myParent->logicView->GetScrollPos(SB_VERT);
|
|
|
|
for (int i = start; i < myParent->traceCount; ++i)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
int bottom = top + trace_line->CalculateSize();
|
|
|
|
if (i == resizeSelect)
|
|
{
|
|
if (point.y > top + MIN_TRACE_SIZE)
|
|
{
|
|
trace_line->traceHeight = point.y - top;
|
|
trace_line->AdjustHeight();
|
|
}
|
|
else
|
|
{
|
|
trace_line->traceHeight = MIN_TRACE_SIZE;
|
|
trace_line->AdjustHeight();
|
|
}
|
|
break;
|
|
}
|
|
|
|
top = bottom;
|
|
top += myParent->borderSize;
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::Move(CPoint point)
|
|
{
|
|
|
|
|
|
int top = myParent->borderSize;
|
|
int start = myParent->logicView->GetScrollPos(SB_VERT);
|
|
|
|
for (int i = start; i < myParent->traceCount; ++i)
|
|
{
|
|
|
|
TraceLine *trace_line;
|
|
trace_line = (TraceLine *)myParent->traceListArray->GetAt(i);
|
|
|
|
int bottom = top + trace_line->CalculateSize();
|
|
|
|
if (point.y < bottom && point.y > top)
|
|
{
|
|
if (i != firstSelect)
|
|
{
|
|
// i is where it should go, first select is where it's at.
|
|
|
|
TraceLine *insert_me;
|
|
insert_me = (TraceLine *)myParent->traceListArray->GetAt(firstSelect);
|
|
|
|
myParent->traceListArray->RemoveAt(firstSelect);
|
|
myParent->traceListArray->InsertAt(i, insert_me);
|
|
firstSelect = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
top = bottom;
|
|
top += myParent->borderSize;
|
|
}
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
void CNameView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
{
|
|
|
|
CView::OnKeyDown(nChar, nRepCnt, nFlags);
|
|
|
|
switch(nChar)
|
|
{
|
|
case VK_SHIFT:
|
|
shiftPressed = True;
|
|
break;
|
|
case VK_CONTROL :
|
|
ctrlPressed = True;
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
void CNameView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
|
|
{
|
|
CView::OnKeyUp(nChar, nRepCnt, nFlags);
|
|
switch(nChar)
|
|
{
|
|
case VK_SHIFT:
|
|
shiftPressed = False;
|
|
break;
|
|
case VK_CONTROL :
|
|
ctrlPressed = False;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void CNameView::OnLButtonDblClk(UINT /*nFlags*/, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
|
|
Logical resize;
|
|
|
|
int selection = FindSelection(point, resize);
|
|
|
|
if (selection != -1)
|
|
{
|
|
TraceLine *trace;
|
|
trace = (TraceLine *)myParent->traceListArray->GetAt(selection);
|
|
|
|
if (trace->on)
|
|
{
|
|
trace->on = False;
|
|
}
|
|
else
|
|
{
|
|
trace->on = True;
|
|
}
|
|
|
|
myParent->Draw(this);
|
|
myParent->Draw(myParent->logicView);
|
|
}
|
|
}
|
|
|
|
BOOL CNameView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
|
|
{
|
|
// TODO: Add your specialized code here and/or call the base class
|
|
|
|
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
|
|
}
|
|
|
|
|
|
|
|
BOOL CNameView::OnSetCursor(CWnd* /*pWnd*/, UINT /*nHitTest*/, UINT /*message*/)
|
|
{
|
|
// TODO: Add your message handler code here and/or call default
|
|
|
|
//return CView::OnSetCursor(pWnd, nHitTest, message);
|
|
return True;
|
|
}
|