Files
firestorm/Gameleap/code/mw4/Tools/LabRat/NameView.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
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.
2026-06-24 21:28:16 -05:00

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;
}