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