Files
firestorm/Gameleap/code/mw4/Tools/PixelWhipPro/DVPanel.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

266 lines
5.6 KiB
C++

// DVPanel.cpp : implementation file
//
#include "stdafx.h"
#include "pixelwhippro.h"
#include "DVPanel.h"
#include "EffectEditWin.h"
#include "CurveEditorFrame.h"
/////////////////////////////////////////////////////////////////////////////
// DVPanel dialog
extern CPixelWhipProApp theApp;
DVPanel::DVPanel(CWnd* pParent /*=NULL*/)
: CDynaPanel(DVPanel::IDD, pParent)
{
LastPos=-1;
LastNum=0.0f;
//{{AFX_DATA_INIT(DVPanel)
//}}AFX_DATA_INIT
RecurseGaurd=false;
}
void DVPanel::DoDataExchange(CDataExchange* pDX)
{
CDynaPanel::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DVPanel)
DDX_Control(pDX, IDC_USEVAR, m_varbut);
DDX_Control(pDX, IDC_NUM, m_numedit);
DDX_Control(pDX, IDC_SLIDER, m_slider);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DVPanel, CDynaPanel)
//{{AFX_MSG_MAP(DVPanel)
ON_WM_HSCROLL()
ON_WM_LBUTTONDOWN()
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER, OnReleasedcaptureSlider)
ON_EN_CHANGE(IDC_NUM, OnChangeNum)
ON_EN_KILLFOCUS(IDC_NUM, OnKillfocusNum)
ON_BN_CLICKED(IDC_USEVAR, OnUsevar)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DVPanel message handlers
void DVPanel::UpdateControl()
{
if(MyCSet && MyCSet->Curve)
{
UpdateCurve();
gosFX::Curve *Curve=MyCSet->Curve->GetSubCurve(theApp.ParamWin->ViewVar?1:0);
if(Curve)
{
Check_Object(Curve);
float Max,Min;
float SliVal;
BaseCap=SliVal=Curve->ExpensiveCompute(0.0f,theApp.ParamWin->ViewVar);
Curve->ExpensiveComputeRange(&Min,&Max,theApp.ParamWin->ViewVar);
SliUnit=Max/100;
if(SliUnit<.00001f) SliUnit=.01f;
CString str;
str.Format("%5.3f",SliVal);
m_numedit.SetWindowText(str);
m_numedit.RedrawWindow();
m_slider.SetRange(0,200);
m_slider.SetPos(100);
if(Curve->IsComplex())
CheckDlgButton(IDC_USEVAR,Curve->GetSeedFlagIfComplex());
m_slider.ShowWindow(SW_SHOW);
m_numedit.ShowWindow(SW_SHOW);
// m_slider.EnableWindow(TRUE);
// m_numedit.EnableWindow(TRUE);
}
else
{
m_slider.ShowWindow(SW_HIDE);
m_numedit.ShowWindow(SW_HIDE);
// m_slider.EnableWindow(FALSE);
// m_numedit.EnableWindow(FALSE);
// m_numedit.SetWindowText("");
}
}
}
void DVPanel::Set(void *pt)
{
}
void DVPanel::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
theApp.Modified=true;
if(LastPos==-1)
{
LastPos=m_slider.GetPos();
}
else
{
if(MyCSet)
{
gosFX::Curve *Curve=MyCSet->Curve->GetSubCurve(theApp.ParamWin->ViewVar?1:0);
if(Curve)
{
Check_Object(Curve);
Stuff::DynamicMemoryStream stream;
if(Curve)
MyCSet->Curve->Save(&stream);
Curve->TranslateTo(BaseCap+(float)(m_slider.GetPos()-LastPos)*(SliUnit),theApp.ParamWin->ViewVar);
CString str;
if(MyCSet->IsDataValid())
{
str.Format("%5.3f",Curve->ExpensiveCompute(0.0f,theApp.ParamWin->ViewVar));
m_numedit.SetWindowText(str);
}
else
{
stream.Rewind();
MyCSet->Curve->Load(&stream, gosFX::CurrentGFXVersion);
}
theApp.CurveWin->m_wndView.ReDraw();
if(Curve->IsComplex())
CheckDlgButton(IDC_USEVAR,Curve->GetSeedFlagIfComplex());
UpdateData(FALSE);
UpdateCurve();
}
CDynaPanel::OnHScroll(nSBCode, nPos, pScrollBar);
}
}
}
BOOL DVPanel::OnInitDialog()
{
CDynaPanel::OnInitDialog();
m_slider.SetRange(0,200);
m_slider.SetPos(100);
if(MyCSet->Curve->IsComplex())
{
m_varbut.ShowWindow(SW_SHOW);
CheckDlgButton(IDC_USEVAR,MyCSet->Curve->GetSeedFlagIfComplex());
}
else
{
m_varbut.ShowWindow(SW_HIDE);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void DVPanel::OnLButtonDown(UINT nFlags, CPoint point)
{
CDynaPanel::OnLButtonDown(nFlags, point);
}
void DVPanel::OnReleasedcaptureSlider(NMHDR* pNMHDR, LRESULT* pResult)
{
LastPos=-1;
m_slider.SetPos(100);
// UpdateControl();
if(MyCSet->Curve)
{
Check_Object(MyCSet->Curve);
BaseCap=MyCSet->Curve->ExpensiveCompute(0.0f,theApp.ParamWin->ViewVar);
}
*pResult = 0;
}
void DVPanel::OnChangeNum()
{
if(RecurseGaurd==true) return;
theApp.Modified=true;
if(LastPos==-1)
{
CString str;
m_numedit.GetWindowText(str);
m_slider.SetPos(100);
gosFX::Curve *Curve=MyCSet->Curve->GetSubCurve(theApp.ParamWin->ViewVar?1:0);
if(Curve)
{
Stuff::DynamicMemoryStream stream;
if(MyCSet->Curve)
MyCSet->Curve->Save(&stream);
Check_Object(Curve);
Curve->TranslateTo((float)atof(str),theApp.ParamWin->ViewVar);
stream.Rewind();
if(!MyCSet->IsDataValid())
{
str.Format("%5.3f",LastNum);
RecurseGaurd=true;
m_numedit.SetWindowText(str);
RecurseGaurd=false;
MyCSet->Curve->Load(&stream, gosFX::CurrentGFXVersion);
if(!MyCSet->IsDataValid())
STOP(("Curve %s Cannot Be fixed",(LPCSTR)MyCSet->Name));
}
theApp.CurveWin->m_wndView.ReDraw();
}
}
{
CString str;
m_numedit.GetWindowText(str);
LastNum=(float)atof(str);
}
}
void DVPanel::OnKillfocusNum()
{
UpdateControl();
}
void DVPanel::OnUsevar()
{
UpdateData(TRUE);
bool newcheckstate=(IsDlgButtonChecked(IDC_USEVAR)==0)?false:true;
MyCSet->Curve->SetSeedFlagIfComplex(newcheckstate);
if(!MyCSet->IsDataValid())
{
newcheckstate=!newcheckstate;
CheckDlgButton(IDC_USEVAR,newcheckstate?1:0);
MyCSet->Curve->SetSeedFlagIfComplex(newcheckstate);
}
}