// EventEditView_CreateModifyParameter.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "EtActionTool.h" #include "EventEditView_CreateModifyParameter.h" #include "resource.h" #include "UnionValueProperty.h" // CEventEditView_CreateModifyParameter IMPLEMENT_DYNCREATE(CEventEditView_CreateModifyParameter, CFormView) CEventEditView_CreateModifyParameter::CEventEditView_CreateModifyParameter() : CFormView(CEventEditView_CreateModifyParameter::IDD) , m_szParamName(_T("")) , m_szParamDesc(_T("")) , m_fValueMin(0) , m_fValueMax(0) , m_szValueData(_T("")) { m_bActivate = false; m_pmemDC = NULL; m_pdcBitmap = NULL; } CEventEditView_CreateModifyParameter::~CEventEditView_CreateModifyParameter() { DeleteMemDC(); } void CEventEditView_CreateModifyParameter::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO1, m_ValueType); DDX_Text(pDX, IDC_EDIT1, m_szParamName); DDX_Text(pDX, IDC_EDIT5, m_szParamDesc); DDX_Text(pDX, IDC_EDIT2, m_fValueMin); DDX_Text(pDX, IDC_EDIT3, m_fValueMax); DDX_Text(pDX, IDC_EDIT4, m_szValueData); } BEGIN_MESSAGE_MAP(CEventEditView_CreateModifyParameter, CFormView) ON_WM_PAINT() ON_WM_SIZE() ON_CBN_SELCHANGE(IDC_COMBO1, &CEventEditView_CreateModifyParameter::OnCbnSelchangeCombo1) ON_EN_CHANGE(IDC_EDIT1, &CEventEditView_CreateModifyParameter::OnEnChangeEdit1) END_MESSAGE_MAP() // CEventEditView_CreateModifyParameter Áø´ÜÀÔ´Ï´Ù. #ifdef _DEBUG void CEventEditView_CreateModifyParameter::AssertValid() const { CFormView::AssertValid(); } #ifndef _WIN32_WCE void CEventEditView_CreateModifyParameter::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif #endif //_DEBUG // CEventEditView_CreateModifyParameter ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. void CEventEditView_CreateModifyParameter::PreProcess() { m_szParamName = s_pCurrentPropertyVariable->GetDescription(); if( s_pCurrentPropertyVariable->GetSubDescription() ) m_szParamDesc = _GetSubStrByCount( 0, (char*)s_pCurrentPropertyVariable->GetSubDescription() ); else m_szParamDesc.Empty(); int nCurSel = 0; switch( s_pCurrentPropertyVariable->GetType() ) { case CUnionValueProperty::Integer: nCurSel = 0; if( s_pCurrentPropertyVariable->GetSubDescription() ) { if( _GetSubStrByCount( 3, (char*)s_pCurrentPropertyVariable->GetSubDescription() ) ) { m_fValueMin = (float)( (int)atoi( _GetSubStrByCount( 1, (char*)s_pCurrentPropertyVariable->GetSubDescription() ) ) ); m_fValueMax = (float)( (int)atoi( _GetSubStrByCount( 2, (char*)s_pCurrentPropertyVariable->GetSubDescription() ) ) ); nCurSel = 1; } } break; case CUnionValueProperty::Float: nCurSel = 4; if( s_pCurrentPropertyVariable->GetSubDescription() ) { if( _GetSubStrByCount( 3, (char*)s_pCurrentPropertyVariable->GetSubDescription() ) ) { m_fValueMin = (float)atof( _GetSubStrByCount( 1, (char*)s_pCurrentPropertyVariable->GetSubDescription() ) ); m_fValueMax = (float)atof( _GetSubStrByCount( 2, (char*)s_pCurrentPropertyVariable->GetSubDescription() ) ); nCurSel = 5; } } break; case CUnionValueProperty::Color: nCurSel = 2; break; case CUnionValueProperty::Integer_Combo: if( s_pCurrentPropertyVariable->GetSubDescription() ) { m_szValueData.Empty(); for( int i=0; ; i++ ) { const char *pStr = _GetSubStrByCount( 1+i, (char*)s_pCurrentPropertyVariable->GetSubDescription() ); if( pStr == NULL ) break; else if( i > 0 ) m_szValueData += "|"; m_szValueData += pStr; } } else m_szValueData.Empty(); nCurSel = 3; break; case CUnionValueProperty::Vector3: nCurSel = 7; break; case CUnionValueProperty::Vector2: nCurSel = 6; break; case CUnionValueProperty::Vector4: nCurSel = 8; break; case CUnionValueProperty::Vector4Color: nCurSel = 9; break; case CUnionValueProperty::Boolean: nCurSel = 10; break; case CUnionValueProperty::String: nCurSel = 11; break; case CUnionValueProperty::String_FileOpen: if( s_pCurrentPropertyVariable->GetSubDescription() ) { m_szValueData.Empty(); for( int i=0; ; i++ ) { const char *pStr = _GetSubStrByCount( 1+i, (char*)s_pCurrentPropertyVariable->GetSubDescription() ); if( pStr == NULL ) break; else if( i > 0 ) m_szValueData += "|"; m_szValueData += pStr; } } else m_szValueData.Empty(); nCurSel = 12; break; case CUnionValueProperty::Pointer: if( s_pCurrentPropertyVariable->GetSubDescription() ) { m_szValueData.Empty(); for( int i=0; ; i++ ) { const char *pStr = _GetSubStrByCount( 1+i, (char*)s_pCurrentPropertyVariable->GetSubDescription() ); if( pStr == NULL ) break; else if( i > 0 ) m_szValueData += "|"; m_szValueData += pStr; } } else m_szValueData.Empty(); nCurSel = 13; break; } m_ValueType.SetCurSel( nCurSel ); EnableAdditionalControl( nCurSel ); UpdateData( FALSE ); } bool CEventEditView_CreateModifyParameter::PostProcess() { UpdateData(); if( m_szParamName.IsEmpty() ) { MessageBox( "À̸§À» ÀÔ·ÂÇØ ÁÖ¼¼¿ä~", "¿¡·¯", MB_OK ); return false; } if( m_szParamDesc.IsEmpty() ) { MessageBox( "ºÎ¿¬¼³¸íÀ» ÀÔ·ÂÇØ ÁÖ¼¼¿ä", "¿¡·¯", MB_OK ); return false; } bool bImpossibleChar = false; for( int i=0; i 'z' ) { bImpossibleChar = true; break; } } if( bImpossibleChar ) { MessageBox( "À̸§¿¡ »ç¿ë ºÒ°¡´ÉÇÑ ¹®ÀÚ°¡ ÀÖ½À´Ï´Ù.", "¿¡·¯", MB_OK ); return false; } /* bImpossibleChar = false; for( int i=0; i 'z' ) { bImpossibleChar = true; break; } } if( bImpossibleChar ) { MessageBox( "ºÎ¿¬¼³¸í¿¡ »ç¿ë ºÒ°¡´ÉÇÑ ¹®ÀÚ°¡ ÀÖ½À´Ï´Ù.", "¿¡·¯", MB_OK ); return false; } */ if( s_pCurrentSignalItem->IsExistParameter( m_szParamName, s_szCurrentPropertyName ) == true ) { MessageBox( "Áߺ¹µÇ´Â À̸§ÀÌ ÀÖ½À´Ï´Ù.", "¿¡·¯", MB_OK ); return false; } switch( m_ValueType.GetCurSel() ) { case 1: { bool bFlag = true; if( (int)m_fValueMin >= (int)m_fValueMax ) bFlag = false; if( (int)m_fValueMin < INT_MIN ) bFlag = false; if( (int)m_fValueMin > INT_MAX ) bFlag = false; if( bFlag == false ) { MessageBox( "ÃÖ´ë ÃÖ¼Ò°ªÀ» ¼³Á¤ÇØ ÁÖ¼¼¿ä.", "¿¡·¯", MB_OK ); return false; } } break; case 3: { bool bFlag = true; if( m_szValueData.IsEmpty() ) bFlag = false; if( bFlag == true ) { int nCount = 0; const char *pPtr; for( int i=0; ; i++ ) { pPtr = _GetSubStrByCount( i, m_szValueData.GetBuffer() ); if( pPtr == NULL ) break; nCount++; } if( nCount < 2 ) bFlag = false; } if( bFlag == false ) { MessageBox( "ÄÞº¸¹Ú½º ½ºÆ®¸µÀ» ÀÔ·ÂÇØ ÁÖ¼¼¿ä", "¿¡·¯", MB_OK ); return false; } } break; case 5: { bool bFlag = true; if( m_fValueMin >= m_fValueMax ) bFlag = false; // if( m_fValueMin < FLT_MIN ) bFlag = false; // if( m_fValueMax > FLT_MAX ) bFlag = false; if( bFlag == false ) { MessageBox( "ÃÖ´ë ÃÖ¼Ò°ªÀ» ¼³Á¤ÇØ ÁÖ¼¼¿ä.", "¿¡·¯", MB_OK ); return false; } } break; } switch( m_ValueType.GetCurSel() ) { case 0: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Integer ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 1: { s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Integer ); CString szStr; szStr.Format( "%s|%d|%d|1", m_szParamDesc, (int)m_fValueMin, (int)m_fValueMax ); s_pCurrentPropertyVariable->SetSubDescription( szStr.GetBuffer(), true ); } break; case 2: { s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Color ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); } break; case 3: { s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Integer_Combo ); CString szStr; szStr.Format( "%s|%s", m_szParamDesc, m_szValueData ); s_pCurrentPropertyVariable->SetSubDescription( szStr.GetBuffer(), true ); } break; case 4: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Float ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 5: { s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Float ); CString szStr; szStr.Format( "%s|%.f|%.f|0.0001f", m_szParamDesc, m_fValueMin, m_fValueMax ); s_pCurrentPropertyVariable->SetSubDescription( szStr.GetBuffer(), true ); } break; case 6: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Vector2 ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 7: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Vector3 ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 8: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Vector4 ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 9: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Vector4Color ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 10: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Boolean ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 11: s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::String ); s_pCurrentPropertyVariable->SetSubDescription( m_szParamDesc.GetBuffer(), true ); break; case 12: { s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::String_FileOpen ); CString szStr; szStr.Format( "%s|%s", m_szParamDesc, m_szValueData ); s_pCurrentPropertyVariable->SetSubDescription( szStr.GetBuffer(), true ); } break; case 13: { s_pCurrentPropertyVariable->ChangeType( CUnionValueProperty::Pointer ); CString szStr; szStr.Format( "%s|%s", m_szParamDesc, m_szValueData ); s_pCurrentPropertyVariable->SetSubDescription( szStr.GetBuffer(), true ); } break; } s_pCurrentPropertyVariable->SetDescription( m_szParamName ); return true; } void CEventEditView_CreateModifyParameter::OnInitialUpdate() { __super::OnInitialUpdate(); // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if( m_bActivate == true ) return; m_bActivate = true; m_ValueType.AddString( "INT" ); m_ValueType.AddString( "INT - min,max" ); m_ValueType.AddString( "INT - color" ); m_ValueType.AddString( "INT - combo" ); m_ValueType.AddString( "FLOAT" ); m_ValueType.AddString( "FLOAT - min,max" ); m_ValueType.AddString( "VECTOR2" ); m_ValueType.AddString( "VECTOR3" ); m_ValueType.AddString( "VECTOR4" ); m_ValueType.AddString( "VECTOR4 - color" ); m_ValueType.AddString( "BOOL" ); m_ValueType.AddString( "STRING" ); m_ValueType.AddString( "STRING - FileFind" ); m_ValueType.AddString( "Custom Define" ); m_ValueType.SetCurSel(0); EnableAdditionalControl( -1 ); } void CEventEditView_CreateModifyParameter::CreateMemDC() { if( m_pdcBitmap || m_pmemDC ) return; m_pmemDC = new CDC; m_pdcBitmap = new CBitmap; CRect rcRect = CRect( 0, 0, 210, 110 ); CDC *pDC = GetDC(); m_pmemDC->CreateCompatibleDC( pDC ); m_pdcBitmap->CreateCompatibleBitmap( pDC, rcRect.Width(), rcRect.Height() ); ReleaseDC( pDC ); } void CEventEditView_CreateModifyParameter::DeleteMemDC() { if( m_pdcBitmap ) { m_pdcBitmap->DeleteObject(); SAFE_DELETE( m_pdcBitmap ); } if( m_pmemDC ) { m_pmemDC->DeleteDC(); SAFE_DELETE( m_pmemDC ); } } void CEventEditView_CreateModifyParameter::OnPaint() { CPaintDC dc(this); // device context for painting CreateMemDC(); CRect rcRect = CRect( 0, 0, 210, 110 ); CBitmap *pOldBitmap; pOldBitmap = m_pmemDC->SelectObject( m_pdcBitmap ); // ¹è°æÃ¼¿ì±¸ m_pmemDC->FillSolidRect( &rcRect, RGB(247, 243, 233) ); // Ä«Å×°í¸® »ö ä¿öÁÖ°í CRect rcCategory = CRect( 0, 0, 15, 110 ); m_pmemDC->FillSolidRect( &rcCategory, RGB(182, 210, 189) ); rcCategory = CRect( 0, 0, 210, 15 ); m_pmemDC->FillSolidRect( &rcCategory, RGB(182, 210, 189) ); // Ä«Å×ÄÚ¸® °¡·ÎÁÙ rcCategory = CRect( 0, 15, 210, 30 ); for( int i=0; i<7; i++ ) { m_pmemDC->Draw3dRect( &rcCategory, RGB(182, 210, 189), RGB(182, 210, 189) ); rcCategory.top += 28; rcCategory.bottom += 28; } // Ä«Å×°í¸® ¼¼·ÎÁÙ rcCategory = CRect( 100, 0, 210, 111 ); m_pmemDC->Draw3dRect( &rcCategory, RGB(182, 210, 189), RGB(182, 210, 189) ); // º¸±â½ÈÀº°Å Áö¿öÁÖ°í rcCategory = CRect( 209, 15, 210, 110 ); m_pmemDC->Draw3dRect( &rcCategory, RGB(247, 243, 233), RGB(247, 243, 233) ); // ±Û¾¾½áÁØ´Ù. m_pmemDC->SetBkMode( TRANSPARENT ); m_pmemDC->SelectStockObject( DEFAULT_GUI_FONT ); rcCategory = CRect( 15, 2, 210, 15 ); m_pmemDC->SetTextColor( RGB(100,100,100) ); m_pmemDC->DrawText( "Parameter", &rcCategory, DT_SINGLELINE | DT_LEFT | DT_VCENTER ); rcCategory = CRect( 20, 17, 100, 29 ); m_pmemDC->SetTextColor( RGB(50,50,50) ); m_pmemDC->DrawText( m_szParamName, &rcCategory, DT_SINGLELINE | DT_LEFT | DT_VCENTER ); rcCategory = CRect( 105, 17, 200, 29 ); CString szValue; switch( m_ValueType.GetCurSel() ) { case 0: szValue = "0"; break; case 4: szValue = "0.000"; break; case 1: case 5: { CRect rcTemp = CRect( 150, 17, 210, 28 ); m_pmemDC->Draw3dRect( &rcTemp, RGB(0, 0, 0), RGB(255,255,255) ); rcTemp.DeflateRect( 1, 1, 1, 1 ); m_pmemDC->FillSolidRect( &rcTemp, RGB( 255,255,255 ) ); rcTemp.DeflateRect( 1, 1, 40, 1 ); m_pmemDC->FillSolidRect( &rcTemp, RGB( 80, 80, 80 ) ); if( m_ValueType.GetCurSel() == 1 ) szValue = "0"; else szValue = "0.000"; } break; case 2: case 9: { CRect rcTemp = CRect( 104, 17, 127, 28 ); m_pmemDC->Draw3dRect( &rcTemp, RGB(0, 0, 0), RGB(0,0,0) ); rcTemp.DeflateRect( 1, 1, 1, 1 ); m_pmemDC->FillSolidRect( &rcTemp, RGB( 255,0,0 ) ); rcCategory.left += 28; if( m_ValueType.GetCurSel() == 2 ) szValue = "255; 0; 0"; else szValue = "1.00; 0.00; 0.00; 1.00"; } break; case 6: szValue = "0.50; 0.30"; break; case 7: szValue = "0.50; 0.30; 0.70"; break; case 8: szValue = "0.50; 0.30; 0.70; 0.90"; break; case 10: szValue = "True"; break; case 11: szValue = "Hello World!"; break; case 12: { CRect rcTemp = CRect( 196, 17, 210, 28 ); m_pmemDC->Draw3dRect( &rcTemp, RGB(255,255,255), RGB(0,0,0) ); rcTemp.DeflateRect( 1, 1, 1, 1 ); m_pmemDC->FillSolidRect( &rcTemp, RGB( 180,180,180 ) ); m_pmemDC->SetTextColor( RGB(0,0,0) ); rcTemp.DeflateRect( 1, 1, 1, 1 ); m_pmemDC->DrawText( "...", &rcTemp, DT_SINGLELINE | DT_CENTER | DT_VCENTER ); szValue = "Eternity.skn"; } break; case 3: { CRect rcTemp = CRect( 105, 29, 208, 100 ); m_pmemDC->Draw3dRect( &rcTemp, RGB(0,0,0), RGB(255,255,255) ); rcTemp.DeflateRect( 1, 1, 1, 1 ); m_pmemDC->FillSolidRect( &rcTemp, RGB( 255,255,255) ); char *szTemp[] = { "Stand", "Run", "Walk", "Die", "Down" }; rcTemp = CRect( 107, 30, 208, 41 ); for( int i=0; i<5; i++ ) { m_pmemDC->SetTextColor( RGB(50,50,50) ); m_pmemDC->DrawText( szTemp[i], &rcTemp, DT_SINGLELINE | DT_LEFT | DT_VCENTER ); rcTemp.top += 13; rcTemp.bottom += 13; } szValue = "Attack"; } break; case 13: szValue = "Custom Defeine"; break; } m_pmemDC->SetTextColor( RGB(50,50,50) ); m_pmemDC->DrawText( szValue, &rcCategory, DT_SINGLELINE | DT_LEFT | DT_VCENTER ); CRect rcStatic, rcWnd; CPoint cPoint; CWnd *pStatic = GetDlgItem( IDC_STATIC_PREVIEW ); pStatic->GetWindowRect( &rcStatic ); GetWindowRect( &rcWnd ); cPoint.x = rcStatic.left - rcWnd.left; cPoint.y = rcStatic.top - rcWnd.top; cPoint += CPoint( 15, 25 ); dc.BitBlt( cPoint.x, cPoint.y, rcRect.Width(), rcRect.Height(), m_pmemDC, 0, 0, SRCCOPY ); m_pmemDC->SelectObject(pOldBitmap); } void CEventEditView_CreateModifyParameter::OnSize(UINT nType, int cx, int cy) { __super::OnSize(nType, cx, cy); DeleteMemDC(); CreateMemDC(); } void CEventEditView_CreateModifyParameter::EnableAdditionalControl( int nCurSel ) { std::vector nVecEnableList; if( nCurSel > -1 ) EnableAdditionalControl( -1 ); switch( nCurSel ) { case -1: nVecEnableList.push_back( IDC_STATIC_ADDITIONAL ); nVecEnableList.push_back( IDC_STATIC_MIN ); nVecEnableList.push_back( IDC_STATIC_MAX ); nVecEnableList.push_back( IDC_STATIC_DATA ); nVecEnableList.push_back( IDC_EDIT2 ); nVecEnableList.push_back( IDC_EDIT3 ); nVecEnableList.push_back( IDC_EDIT4 ); break; case 1: case 5: nVecEnableList.push_back( IDC_STATIC_ADDITIONAL ); nVecEnableList.push_back( IDC_STATIC_MIN ); nVecEnableList.push_back( IDC_STATIC_MAX ); nVecEnableList.push_back( IDC_EDIT2 ); nVecEnableList.push_back( IDC_EDIT3 ); break; case 3: case 12: nVecEnableList.push_back( IDC_STATIC_ADDITIONAL ); nVecEnableList.push_back( IDC_STATIC_DATA ); nVecEnableList.push_back( IDC_EDIT4 ); break; case 13: nVecEnableList.push_back( IDC_STATIC_ADDITIONAL ); nVecEnableList.push_back( IDC_STATIC_DATA ); nVecEnableList.push_back( IDC_EDIT4 ); break; } for( DWORD i=0; iShowWindow( ( nCurSel == -1 ) ? SW_HIDE : SW_SHOW ); } } void CEventEditView_CreateModifyParameter::OnCbnSelchangeCombo1() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. EnableAdditionalControl( m_ValueType.GetCurSel() ); UpdateData(); Invalidate( FALSE ); } void CEventEditView_CreateModifyParameter::OnEnChangeEdit1() { UpdateData(); Invalidate( FALSE ); } BOOL CEventEditView_CreateModifyParameter::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class return FALSE; // return __super::PreTranslateMessage(pMsg); }