Files
FC1/Editor/ShadersDialog.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

195 lines
4.4 KiB
C++

// ShadersDialog.cpp : implementation file
//
#include "stdafx.h"
#include "ShadersDialog.h"
#include "ShaderEnum.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShadersDialog dialog
CShadersDialog::CShadersDialog(const CString &selection, CWnd* pParent /*=NULL*/)
: CXTResizeDialog(CShadersDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CShadersDialog)
m_selection = _T("");
//}}AFX_DATA_INIT
m_sel = selection;
m_brush.CreateSolidBrush( RGB(0xE0,0xE0,0xE0) );
}
void CShadersDialog::DoDataExchange(CDataExchange* pDX)
{
CXTResizeDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CShadersDialog)
DDX_Control(pDX, IDC_SHADERS, m_shaders);
DDX_Control(pDX, IDC_TEXT, m_shaderText);
DDX_Control(pDX, IDC_SAVE, m_saveButton);
DDX_LBString(pDX, IDC_SHADERS, m_selection);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CShadersDialog, CXTResizeDialog)
//{{AFX_MSG_MAP(CShadersDialog)
ON_LBN_SELCHANGE(IDC_SHADERS, OnSelchangeShaders)
ON_LBN_DBLCLK(IDC_SHADERS, OnDblclkShaders)
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_EDIT, OnBnClickedEdit)
ON_BN_CLICKED(IDC_SAVE, OnBnClickedSave)
ON_EN_CHANGE(IDC_TEXT, OnEnChangeText)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CShadersDialog message handlers
void CShadersDialog::OnSelchangeShaders()
{
// When shader changes.
// Edit shader file.
int sel = m_shaders.GetCurSel();
if (sel != LB_ERR)
{
CString file = GetIEditor()->GetShaderEnum()->GetShaderFile( sel );
file.Replace( '/','\\' );
m_shaderText.LoadFile( file );
// Just loaded file.. Not savable.
m_saveButton.EnableWindow(FALSE);
CString shaderName;
m_shaders.GetText( sel,shaderName );
shaderName = CString("\'") + shaderName + "\'";
m_shaderText.SetSel(0,-1);
CString text = m_shaderText.GetSelText();
int pos = text.Find( shaderName );
if (pos >= 0)
{
m_shaderText.SetSel( pos,pos+strlen(shaderName) );
}
else
{
m_shaderText.SetSel(0,0);
}
}
}
BOOL CShadersDialog::OnInitDialog()
{
CXTResizeDialog::OnInitDialog();
CWaitCursor wait;
m_shaders.ResetContent();
// Fill with shaders.
CShaderEnum *shaderEnum = GetIEditor()->GetShaderEnum();
int numShaders = shaderEnum->EnumShaders();
for (int i = 0; i < numShaders; i++)
{
m_shaders.AddString( shaderEnum->GetShader(i) );
}
/*
if (numShaders > 0)
{
int i = m_shaders.FindString(m_sel);
if (i != LB_ERR)
m_shaders.SetCurSel( i );
}
*/
m_selection = m_sel;
UpdateData(FALSE);
SetResize( IDOK,SZ_VERREPOS(1) );
SetResize( IDCANCEL,SZ_VERREPOS(1) );
SetResize( IDC_LINE,CXTResizeRect(0,1,1,1) );
SetResize( IDC_SHADERS,SZ_VERRESIZE(1) );
SetResize( IDC_TEXT,SZ_RESIZE(1) );
SetResize( IDC_SAVE,SZ_REPOS(1) );
SetResize( IDC_EDIT,SZ_REPOS(1) );
SetMinSize( CSize(260,200) );
AutoLoadPlacement( "Dialogs\\Shaders" );
OnSelchangeShaders();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CShadersDialog::OnDblclkShaders()
{
// Same as IDOK.
UpdateData(TRUE);
EndDialog(IDOK);
}
HBRUSH CShadersDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CXTResizeDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (nCtlColor == CTLCOLOR_LISTBOX && pWnd == &m_shaders)
{
// Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT);
hbr = m_brush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CShadersDialog::OnBnClickedEdit()
{
// Edit shader file.
int sel = m_shaders.GetCurSel();
if (sel != LB_ERR)
{
CShaderEnum *shaderEnum = GetIEditor()->GetShaderEnum();
CString file = shaderEnum->GetShaderFile( sel );
CFileUtil::EditTextFile( file,CFileUtil::FILE_TYPE_SHADER );
}
}
//////////////////////////////////////////////////////////////////////////
void CShadersDialog::OnBnClickedSave()
{
if (m_shaderText.IsModified())
{
m_shaderText.SaveFile( m_shaderText.GetFilename() );
m_shaderText.Parse();
if (m_shaderText.IsModified())
{
m_saveButton.EnableWindow(TRUE);
}
else
{
m_saveButton.EnableWindow(FALSE);
}
}
}
//////////////////////////////////////////////////////////////////////////
void CShadersDialog::OnEnChangeText()
{
m_shaderText.OnChange();
// File can be saved.
m_saveButton.EnableWindow(TRUE);
}