// MainFrm.cpp : CMainFrame Ŭ·¡½ºÀÇ ±¸Çö // #include "stdafx.h" #include "EtWorldPainter.h" #include "DockingPaneAdobeTheme.h" #include "FileServer.h" #include "MainFrm.h" #include "PaneDefine.h" #include "InputDevice.h" #include "ActionCommander.h" #include "TdDummyActor.h" #include "CreateGridDlg.h" #include "DeleteGridDlg.h" #include "EnviControl.h" #include "PropertiesDlg.h" #include "UserMessage.h" #include "MoveToGridDlg.h" #include "EtResourceMng.h" #include "MakeMinimapDlg.h" #include "CreateEventAreaDlg.h" #include "CreatePropPropertyDlg.h" #include "ExportPropInfoDlg.h" #include "EventSignalManager.h" #include "PropSignalManager.h" #include "TEtWorld.h" #include "TEtWorldGrid.h" #include "TEtWorldSector.h" #include "../../Common/BugReporter/BugReporter.h" #include "PreLogoDlg.h" #include "RenderBase.h" #include "EtWorldPainterDoc.h" #include "EtWorldPainterView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CInputDevice g_InputDevice; // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CXTPFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CXTPFrameWnd) ON_WM_CREATE() ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify) ON_WM_DESTROY() ON_WM_CLOSE() ON_WM_KEYDOWN() ON_UPDATE_COMMAND_UI(ID_PROJECT_CONNECT, &CMainFrame::OnUpdateProjectConnect) ON_UPDATE_COMMAND_UI(ID_PROJECT_DISCONNECT, &CMainFrame::OnUpdateProjectDisconnect) ON_UPDATE_COMMAND_UI(ID_PROJECT_SAVE, &CMainFrame::OnUpdateProjectSave) ON_UPDATE_COMMAND_UI(ID_PROJECT_SETTING, &CMainFrame::OnUpdateProjectSetting) ON_UPDATE_COMMAND_UI(ID_UNDO, &CMainFrame::OnUpdateUndo) ON_UPDATE_COMMAND_UI(ID_REDO, &CMainFrame::OnUpdateRedo) ON_XTP_EXECUTE(ID_UNDO, OnUndo) ON_NOTIFY(XTP_LBN_SELCHANGE, ID_UNDO, OnUndoSelChange) ON_NOTIFY(XTP_LBN_POPUP, ID_UNDO, OnUndoPoup) ON_XTP_EXECUTE(ID_REDO, OnRedo) ON_NOTIFY(XTP_LBN_SELCHANGE, ID_REDO, OnRedoSelChange) ON_NOTIFY(XTP_LBN_POPUP, ID_REDO, OnRedoPoup) ON_COMMAND(ID_UNDOACCEL, &CMainFrame::OnUndoAccel) ON_COMMAND(ID_REDOACCEL, &CMainFrame::OnRedoAccel) ON_COMMAND(ID_TOGGLESIMUL, &CMainFrame::OnToggleSimul) ON_COMMAND(ID_ADDBRUSHSIZE, &CMainFrame::OnIncreaseBrushSize) ON_COMMAND(ID_MINUSBRUSHSIZE, &CMainFrame::OnDecreaseBrushSize) ON_COMMAND(ID_ATTR_1, &CMainFrame::OnAttr1) ON_COMMAND(ID_ATTR_2, &CMainFrame::OnAttr2) ON_COMMAND(ID_ATTR_3, &CMainFrame::OnAttr3) ON_COMMAND(ID_ATTR_4, &CMainFrame::OnAttr4) ON_COMMAND(ID_VIEW_TOGGLETOPVIEW, &CMainFrame::OnToggleTopView) ON_UPDATE_COMMAND_UI(ID_VIEW_TOGGLETOPVIEW, &CMainFrame::OnUpdateToggleTopView) ON_XTP_CREATECONTROL() ON_UPDATE_COMMAND_UI(ID_SIMUL_RUN, &CMainFrame::OnUpdateSimulRun) ON_UPDATE_COMMAND_UI(ID_SIMUL_STOP, &CMainFrame::OnUpdateSimulStop) ON_COMMAND(ID_SIMUL_RUN, &CMainFrame::OnSimulRun) ON_COMMAND(ID_SIMUL_STOP, &CMainFrame::OnSimulStop) ON_COMMAND(ID_GRID_CREATEGRID, &CMainFrame::OnGridCreategrid) ON_COMMAND(ID_GRID_DELETEGRID, &CMainFrame::OnGridDeletegrid) ON_COMMAND(ID_GRID_MOVEGRID, &CMainFrame::OnGridMovegrid) ON_UPDATE_COMMAND_UI(ID_GRID_CREATEGRID, &CMainFrame::OnUpdateGridCreategrid) ON_UPDATE_COMMAND_UI(ID_GRID_DELETEGRID, &CMainFrame::OnUpdateGridDeletegrid) ON_UPDATE_COMMAND_UI(ID_GRID_MOVEGRID, &CMainFrame::OnUpdateGridMovegrid) ON_COMMAND(ID_PROPERTIES_DIRECTORYSETTING, &CMainFrame::OnPropertiesDirectorysetting) ON_UPDATE_COMMAND_UI(ID_PROPERTIES_EVENTSETTING, &CMainFrame::OnUpdatePropertiesEventSetting) ON_COMMAND(ID_PROPERTIES_EVENTSETTING, &CMainFrame::OnPropertiesEventSetting) ON_UPDATE_COMMAND_UI(ID_TOOLS_MAKEMINIMAP, &CMainFrame::OnUpdateToolsMakeMinimap) ON_COMMAND(ID_TOOLS_MAKEMINIMAP, &CMainFrame::OnToolsMakeMinimap) ON_UPDATE_COMMAND_UI(ID_TOOLS_SAVELIGHTMAP, &CMainFrame::OnUpdateToolsSaveCurrentLightmap) ON_COMMAND(ID_TOOLS_SAVELIGHTMAP, &CMainFrame::OnToolsSaveCurrentLightmap) ON_UPDATE_COMMAND_UI(ID_PROPERTIES_PROPPROPERTYSETTING, &CMainFrame::OnUpdatePropertiesPropPropertySetting) ON_COMMAND(ID_PROPERTIES_PROPPROPERTYSETTING, &CMainFrame::OnPropertiesPropPropertySetting) ON_UPDATE_COMMAND_UI(ID_TOOLS_EXPORTTERRAINTO3DSMAXSCRIPTDATA, &CMainFrame::OnUpdateToolsExportTerrainto3dsmaxscriptdata) ON_UPDATE_COMMAND_UI(ID_TOOLS_EXPORTPROPINFOTO3DSMAXSCRIPTDATA, &CMainFrame::OnUpdateToolsExportPropInfoto3dsmaxscriptdata) ON_COMMAND(ID_TOOLS_EXPORTTERRAINTO3DSMAXSCRIPTDATA, &CMainFrame::OnToolsExportTerrainto3dsmaxscriptdata) ON_COMMAND(ID_TOOLS_EXPORTPROPINFOTO3DSMAXSCRIPTDATA, &CMainFrame::OnToolsExportPropInfoto3dsmaxscriptdata) ON_COMMAND(ID_VIEW_CAMERA_LIGHT, &CMainFrame::OnViewCameraLight) ON_UPDATE_COMMAND_UI(ID_VIEW_CAMERA_LIGHT, &CMainFrame::OnUpdateViewCameraLight) END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // »óÅ Á٠ǥ½Ã±â ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; // CMainFrame »ý¼º/¼Ò¸ê CMainFrame::CMainFrame() { // TODO: ¿©±â¿¡ ¸â¹ö ÃʱâÈ­ Äڵ带 Ãß°¡ÇÕ´Ï´Ù. m_bUndoRedoAccel = true; m_pResMng = new CEtResourceMng( false ); CEtResourceMng::GetInstance().AddResourcePath( ".\\Plugins" ); } CMainFrame::~CMainFrame() { SAFE_DELETE( m_pResMng ); } int CMainFrame::OnCreateControl(LPCREATECONTROLSTRUCT lpCreateControl) { switch( lpCreateControl->nID ) { case ID_UNDO: case ID_REDO: { CXTPControlPopup* pButtonUndo = CXTPControlPopup::CreateControlPopup(xtpControlSplitButtonPopup); CXTPPopupToolBar* pUndoBar = CXTPPopupToolBar::CreatePopupToolBar(GetCommandBars()); pUndoBar->EnableCustomization(FALSE); pUndoBar->SetBorders(CRect(2, 2, 2, 2)); pUndoBar->DisableShadow(); CXTPControlListBox* pControlListBox = (CXTPControlListBox*)pUndoBar->GetControls()->Add(new CXTPControlListBox(), lpCreateControl->nID); pControlListBox->SetWidth(200); pControlListBox->SetLinesMinMax(1, 6); pControlListBox->SetMultiplSel(TRUE); CXTPControlStatic* pControlListBoxInfo = (CXTPControlStatic*)pUndoBar->GetControls()->Add(new CXTPControlStatic(), lpCreateControl->nID); pControlListBoxInfo->SetWidth(200); pButtonUndo->SetCommandBar(pUndoBar); pUndoBar->InternalRelease(); lpCreateControl->pControl = pButtonUndo; } return TRUE; } return FALSE; } int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CXTPFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("»óÅ ǥ½ÃÁÙÀ» ¸¸µéÁö ¸øÇß½À´Ï´Ù.\n"); return -1; // ¸¸µéÁö ¸øÇß½À´Ï´Ù. } if (!InitCommandBars()) return -1; AfxInitRichEdit(); AfxInitRichEdit2(); // »óÅ ¹Ù¿¡ Ãß°¡ÇҰ͵é. // Progress m_ProgressBar.Create(WS_CHILD|WS_VISIBLE|PBS_SMOOTH, CRect(0,0,0,0), &m_wndStatusBar, 0); m_wndStatusBar.AddIndicator( ID_INDICATOR_PROG, 1 ); int nIndex = m_wndStatusBar.CommandToIndex( ID_INDICATOR_PROG ); m_wndStatusBar.SetPaneWidth(nIndex, 120); m_wndStatusBar.SetPaneStyle(nIndex, m_wndStatusBar.GetPaneStyle(nIndex) | SBPS_NOBORDERS); m_wndStatusBar.AddControl(&m_ProgressBar, ID_INDICATOR_PROG, FALSE); ///////////////////////// // Init Thema XTPPaintManager()->SetTheme( xtpThemeNativeWinXP ); XTP_COMMANDBARS_ICONSINFO* pIconsInfo = XTPPaintManager()->GetIconsInfo(); pIconsInfo->bUseDisabledIcons = TRUE; pIconsInfo->bOfficeStyleDisabledIcons = TRUE; CXTPCommandBars* pCommandBars = GetCommandBars(); CXTPCommandBar* pMenuBar = pCommandBars->SetMenu(_T("Menu Bar"), IDR_MAINFRAME); CXTPToolBar *pCommandBar, *pActionBar,*pSimulBar; // XTPImageManager()->SetMaskColor(RGB(0, 255, 0)); if (!(pCommandBar = (CXTPToolBar*)pCommandBars->Add(_T("Standard"), xtpBarTop)) || !pCommandBar->LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; } if (!(pActionBar = (CXTPToolBar*)pCommandBars->Add(_T("Action"), xtpBarTop)) || !pActionBar->LoadToolBar(IDR_ACTIONTOOLBAR)) { TRACE0("Failed to create toolbar\n"); return -1; } DockRightOf(pActionBar, pCommandBar); if (!(pSimulBar = (CXTPToolBar*)pCommandBars->Add(_T("Simulation"), xtpBarTop)) || !pSimulBar->LoadToolBar(IDR_SIMULATION)) { TRACE0("Failed to create toolbar\n"); return -1; } DockRightOf(pSimulBar, pActionBar); CGlobalValue::GetInstance().UpdateInitDesc( "Initialize DockingPaneManager.." ); XTPDockingPaneManager()->InstallDockingPanes(this); // XTPDockingPaneManager()->SetTheme( xtpPaneThemeNativeWinXP ); //NativeWinXP m_paneManager.SetCustomTheme(new CDockingPaneAdobeTheme); m_paneManager.UseSplitterTracker(FALSE); m_paneManager.SetDockingContext(new CDockingPaneAdobeContext); m_paneManager.SetDefaultPaneOptions(xtpPaneNoCloseable); int nCount = sizeof(g_PaneList) / sizeof(PaneCreateStruct); int *nIconList = new int[nCount]; for( int i=0; iFloatPane( g_PaneList[i].pThis, CRect( g_PaneList[i].nLeft, g_PaneList[i].nTop, g_PaneList[i].nRight, g_PaneList[i].nBottom ) ); } else g_PaneList[i].pThis = CreatePane( g_PaneList[i].nPaneID, g_PaneList[i].pClass, CString(g_PaneList[i].szName), g_PaneList[i].Direction, pDockPane, &CRect( g_PaneList[i].nLeft, g_PaneList[i].nTop, g_PaneList[i].nRight, g_PaneList[i].nBottom ) ); if( g_PaneList[i].nAttachPaneID != -1 ) { XTPDockingPaneManager()->AttachPane( g_PaneList[i].pThis, g_PaneList[g_PaneList[i].nAttachPaneID].pThis ); XTPDockingPaneManager()->ShowPane( g_PaneList[g_PaneList[i].nAttachPaneID].pThis ); } } // ÀÏ´Ü ¾ÆÀÌÄÜ ¸·¾Æ³õ´Â´Ù. delete []nIconList; #ifndef _DEBUG LoadCommandBars(_T("EtWorldPainterCommandBars")); CXTPDockingPaneLayout layoutNormal(&m_paneManager); if (layoutNormal.Load(_T("EtWorldPainterLayout"))) m_paneManager.SetLayout(&layoutNormal); #endif //_DEBUG for( int i=0; iClosePane( g_PaneList[i].nPaneID ); } else { XTPDockingPaneManager()->ShowPane( g_PaneList[i].nPaneID ); } } // Etc Initialize CInputDevice::GetInstance().Initialize( GetSafeHwnd(), CInputDevice::MOUSE | CInputDevice::KEYBOARD ); CFileServer::GetInstance().Initialize(); XTPDockingPaneManager()->ShowPane( GRID_PANE ); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CXTPFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: CREATESTRUCT cs¸¦ ¼öÁ¤ÇÏ¿© ¿©±â¿¡¼­ // Window Ŭ·¡½º ¶Ç´Â ½ºÅ¸ÀÏÀ» ¼öÁ¤ÇÕ´Ï´Ù. return TRUE; } // CMainFrame Áø´Ü #ifdef _DEBUG void CMainFrame::AssertValid() const { CXTPFrameWnd::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CXTPFrameWnd::Dump(dc); } #endif //_DEBUG // CMainFrame ¸Þ½ÃÁö 󸮱â CXTPDockingPane* CMainFrame::CreatePane( int nID, CRuntimeClass* pNewViewClass, CString strFormat, XTPDockingPaneDirection direction, CXTPDockingPane* pNeighbour, CRect *pRect ) { CRect Rect; if( pRect == NULL ) Rect = CRect( 0, 0, 200, 200 ); else Rect = *pRect; CXTPDockingPane* pwndPane = m_paneManager.CreatePane( nID, Rect, direction, pNeighbour); CString strTitle; strTitle.Format(strFormat, nID); pwndPane->SetTitle(strTitle); CFrameWnd* pFrame = new CFrameWnd; CCreateContext context; context.m_pNewViewClass = pNewViewClass; context.m_pCurrentDoc = NULL; DWORD dwStyle; dwStyle = WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|WS_CLIPSIBLINGS; pFrame->Create(NULL, NULL, dwStyle, CRect(0, 0, 0, 0), this, NULL, 0, &context); pFrame->ModifyStyleEx( WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE | WS_EX_OVERLAPPEDWINDOW, 0 ); pFrame->SendMessageToDescendants(WM_INITIALUPDATE, 0, 0, TRUE, TRUE); m_mapPanes.SetAt(nID, pFrame); return pwndPane; } LRESULT CMainFrame::OnDockingPaneNotify(WPARAM wParam, LPARAM lParam) { if (wParam == XTP_DPN_SHOWWINDOW) { // get a pointer to the docking pane being shown. CXTPDockingPane* pPane = (CXTPDockingPane*)lParam; if (!pPane->IsValid()) { CWnd* pWnd = NULL; if (m_mapPanes.Lookup(pPane->GetID(), pWnd)) { pPane->Attach(pWnd); } } return TRUE; // handled } if (wParam == XTP_DPN_CLOSEPANE) { CXTPDockingPane* pPane = (CXTPDockingPane*)lParam; CWnd* pWnd =NULL; if (!m_mapPanes.Lookup(pPane->GetID(), pWnd)) return FALSE; return TRUE; } return FALSE; } CWnd *CMainFrame::GetPaneFrame( int nID ) { if( XTPDockingPaneManager() == NULL ) return NULL; if( XTPDockingPaneManager()->GetSite() == NULL ) return NULL; CXTPDockingPane* pPane = XTPDockingPaneManager()->FindPane( nID ); if( pPane == NULL ) return NULL; CWnd *pWnd = NULL; if (!m_mapPanes.Lookup(pPane->GetID(), pWnd) ) return NULL; CFrameWnd* pFrame = DYNAMIC_DOWNCAST(CFrameWnd, pWnd); return (CWnd*)pFrame->GetWindow( GW_CHILD ); // return pWnd; } int CMainFrame::GetFocusPaneID() { int nCount = sizeof(g_PaneList) / sizeof(PaneCreateStruct); for( int i=0; iFindPane( g_PaneList[i].nPaneID ); if( pPane->IsFocus() ) return g_PaneList[i].nPaneID; } return -1; } void CMainFrame::OnDestroy() { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CXTPFrameWnd::OnDestroy(); } void CMainFrame::OnClose() { #ifndef _DEBUG SaveCommandBars(_T("EtWorldPainterCommandBars")); CXTPDockingPaneLayout layoutNormal(&m_paneManager); m_paneManager.GetLayout(&layoutNormal); layoutNormal.Save(_T("EtWorldPainterLayout")); #endif //_DEBUG if( CGlobalValue::GetInstance().CheckSaveMessage( GetSafeHwnd(), true ) == false ) return; /* CEtWorldPainterView *pView = (CEtWorldPainterView *)CGlobalValue::GetInstance().m_pParentView; pView->SelectTabView(0); Sleep(1000); */ CWnd *pWnd = GetPaneWnd( SKINMNG_PANE ); ((CSkinManagerPaneView*)pWnd)->KillThread(); pWnd = GetPaneWnd( SOUNDMNG_PANE ); ((CSoundManagerPaneView*)pWnd)->KillThread(); pWnd = GetPaneWnd( TILEMNG_PANE ); ((CTileManagerPaneView*)pWnd)->KillThread(); CFileServer::GetInstance().Disconnect(); CXTPFrameWnd::OnClose(); } void CMainFrame::OnUpdateProjectConnect(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->Enable( !CFileServer::GetInstance().IsConnect() ); } void CMainFrame::OnUpdateProjectDisconnect(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->Enable( CFileServer::GetInstance().IsConnect() ); } void CMainFrame::OnUpdateProjectSave(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. bool bEnable = true; if( CGlobalValue::GetInstance().m_bModify ) { if( CGlobalValue::GetInstance().m_nVecModifyTabList.size() == 0 ) bEnable = false; else if( CGlobalValue::GetInstance().m_nVecModifyTabList.size() == 1 && CGlobalValue::GetInstance().m_nVecModifyTabList[0] == 0 ) bEnable = false; } else bEnable = false; pCmdUI->Enable( bEnable ); } void CMainFrame::OnUpdateProjectSetting(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->Enable( !CFileServer::GetInstance().IsConnect() ); } CActionCommander *CMainFrame::GetCurActionCmd() { CActionCommander *pCommander = NULL; switch( CGlobalValue::GetInstance().m_nActiveView ) { case 0: break; case CGlobalValue::BRUSH: pCommander = &s_BrushActionCommander; break; case CGlobalValue::PROP: pCommander = &s_PropActionCommander; break; case CGlobalValue::NAVIGATION: pCommander = &s_NaviActionCommander; break; case CGlobalValue::SOUND: pCommander = &s_SoundActionCommander; break; case CGlobalValue::EVENT: pCommander = &s_EventActionCommander; break; } return pCommander; } void CMainFrame::OnUpdateUndo(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) pCmdUI->Enable( FALSE ); else { pCmdUI->Enable( pCommander->IsCanUndo() ); } } void CMainFrame::OnUpdateRedo(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) pCmdUI->Enable( FALSE ); else { pCmdUI->Enable( pCommander->IsCanRedo() ); } } void CMainFrame::OnUndo(NMHDR* pNMHDR, LRESULT* pResult) { CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) return; int nCount = 0; if( pNMHDR == NULL ) nCount = 1; else { if (((NMXTPCONTROL*)pNMHDR)->pControl->GetType() == xtpControlSplitButtonPopup) nCount = 1; CXTPControlListBox* pControlListBox = DYNAMIC_DOWNCAST(CXTPControlListBox, ((NMXTPCONTROL*)pNMHDR)->pControl); if (pControlListBox) nCount = pControlListBox->GetListCtrl()->GetSelCount(); } for( int i=0; iUndo() == false ) { MessageBox( "¾ðµÎ ÇÒ ¼ö ¾ø»ï!!", "¿¡·¯", MB_OK ); } } } void CMainFrame::OnRedo(NMHDR* pNMHDR, LRESULT* pResult) { CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) return; int nCount = 0; if( pNMHDR == NULL ) nCount = 1; else { if (((NMXTPCONTROL*)pNMHDR)->pControl->GetType() == xtpControlSplitButtonPopup) nCount = 1; CXTPControlListBox* pControlListBox = DYNAMIC_DOWNCAST(CXTPControlListBox, ((NMXTPCONTROL*)pNMHDR)->pControl); if (pControlListBox) nCount = pControlListBox->GetListCtrl()->GetSelCount(); } for( int i=0; iRedo() == false ) { MessageBox( "¸®µÎ ÇÒ ¼ö ¾ø»ï!!", "¿¡·¯", MB_OK ); } } } void CMainFrame::OnUndoSelChange(NMHDR* pNMHDR, LRESULT* pRes) { CXTPControlListBox* pControlListBox = DYNAMIC_DOWNCAST(CXTPControlListBox, ((NMXTPCONTROL*)pNMHDR)->pControl); if (pControlListBox) { CXTPControlStatic* pInfo = FindInfoControl(pControlListBox); if (pInfo) { CString str; str.Format(_T("Undo %i Actions"), pControlListBox->GetListCtrl()->GetSelCount()); pInfo->SetCaption(str); pInfo->DelayRedrawParent(); } *pRes = 1; } } void CMainFrame::OnUndoPoup(NMHDR* pNMHDR, LRESULT* pRes) { CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) return; CXTPControlListBox* pControlListBox = DYNAMIC_DOWNCAST(CXTPControlListBox, ((NMXTPCONTROL*)pNMHDR)->pControl); if( pControlListBox ) { CListBox* pListBox = pControlListBox->GetListCtrl(); pListBox->ResetContent(); int nCount = pCommander->GetUndoCount(); for( int i=0; iAddString( pCommander->GetUndoDesc(i) ); } CXTPControlStatic* pInfo = FindInfoControl(pControlListBox); if (pInfo) { CString str; pInfo->SetCaption(_T("Undo 0 Actions")); pInfo->DelayRedrawParent(); } *pRes = 1; } } void CMainFrame::OnRedoSelChange(NMHDR* pNMHDR, LRESULT* pRes) { CXTPControlListBox* pControlListBox = DYNAMIC_DOWNCAST(CXTPControlListBox, ((NMXTPCONTROL*)pNMHDR)->pControl); if (pControlListBox) { CXTPControlStatic* pInfo = FindInfoControl(pControlListBox); if (pInfo) { CString str; str.Format(_T("Redo %i Actions"), pControlListBox->GetListCtrl()->GetSelCount()); pInfo->SetCaption(str); pInfo->DelayRedrawParent(); } *pRes = 1; } } void CMainFrame::OnRedoPoup(NMHDR* pNMHDR, LRESULT* pRes) { CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) return; CXTPControlListBox* pControlListBox = DYNAMIC_DOWNCAST(CXTPControlListBox, ((NMXTPCONTROL*)pNMHDR)->pControl); if( pControlListBox ) { CListBox* pListBox = pControlListBox->GetListCtrl(); pListBox->ResetContent(); int nCount = pCommander->GetRedoCount(); for( int i=0; iAddString( pCommander->GetRedoDesc(i) ); } CXTPControlStatic* pInfo = FindInfoControl(pControlListBox); if (pInfo) { CString str; pInfo->SetCaption(_T("Redo 0 Actions")); pInfo->DelayRedrawParent(); } *pRes = 1; } } CXTPControlStatic* CMainFrame::FindInfoControl(CXTPControlListBox* pControlListBox) { CXTPCommandBar* pCommandBar = pControlListBox->GetParent(); for (int i = 0; i < pCommandBar->GetControls()->GetCount(); i++) { CXTPControlStatic* pControlStatic = DYNAMIC_DOWNCAST(CXTPControlStatic, pCommandBar->GetControl(i)); if (pControlStatic && pControlStatic->GetID() == pControlListBox->GetID()) { return pControlStatic; } } return NULL; } // Accel ¿¡¼­ ¿À´Â ¸Þ¼¼Áö ON_MESSAGE ¿Í XTP ÀÇ ON_XTP_EXECUTE °¡ ȣȯµÇ¼­ µ¹¾Æ°¡ÁöÁö ¾Ê´Â´Ù. // ÇÏÁö¸¸ ´ÜÃà۰¡ ¾Æ´Ò °æ¿ì¿£ ¸Þ¼¼Áö°¡ Áߺ¹µÇ¾î µé¾î¿À±â ¶§¹®¿¡ ¹®Á¦°¡ »ý°Ü¼­ // Accel ¿ë ID ¸¦ µû·Î ¸¸µé°í µû·Î »©³õ±â·Î ÇÔ!! void CMainFrame::OnUndoAccel() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) return; if( !pCommander->IsCanUndo() ) return; OnUndo( NULL, NULL ); } void CMainFrame::OnRedoAccel() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CActionCommander *pCommander = GetCurActionCmd(); if( pCommander == NULL ) return; if( !pCommander->IsCanRedo() ) return; OnRedo( NULL, NULL ); } void CMainFrame::OnUpdateSimulRun(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. pCmdUI->SetCheck( CGlobalValue::GetInstance().m_bSimulation ); pCmdUI->Enable( CGlobalValue::GetInstance().m_bCanSimulation ); } void CMainFrame::OnUpdateSimulStop(CCmdUI *pCmdUI) { // TODO: ¿©±â¿¡ ¸í·É ¾÷µ¥ÀÌÆ® UI 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if( CGlobalValue::GetInstance().m_bCanSimulation == true && CGlobalValue::GetInstance().m_bSimulation == true ) { pCmdUI->SetCheck( FALSE ); pCmdUI->Enable( TRUE ); } else { pCmdUI->SetCheck( TRUE ); pCmdUI->Enable( FALSE ); } } void CMainFrame::OnSimulRun() { CTdDummyActor::GetInstance().BeginActor(); // if( CGlobalValue::GetInstance().m_bSimulation == true ) return; // CGlobalValue::GetInstance().m_bSimulation = true; } void CMainFrame::OnSimulStop() { CTdDummyActor::GetInstance().EndActor(); // CGlobalValue::GetInstance().m_bSimulation = false; } void CMainFrame::OnGridCreategrid() { // TODO: Add your command handler code here CFileServer::GetInstance().UpdateLoginList(); if( CFileServer::GetInstance().GetLoginUserList()->size() > 0 ) { if( MessageBox( "ÀÌ ÀÛ¾÷Àº ·Î±×ÀÎÇÑ À¯Àú°¡ ¾ø¾î¾ß ¾ÈÀüÇÕ´Ï´Ù.\n±×·¡µÎ °Á ¸¸µé·¡?", "¿¡·¯", MB_YESNO ) == IDNO ) return; } CCreateGridDlg Dlg; Dlg.DoModal(); CWnd *pWnd = GetPaneWnd( GRID_PANE ); if( pWnd ) SendMessage( UM_REFRESH_PANE_VIEW ); CGlobalValue::GetInstance().RefreshRender(); } void CMainFrame::OnGridDeletegrid() { // TODO: Add your command handler code here CFileServer::GetInstance().UpdateLoginList(); if( CFileServer::GetInstance().GetLoginUserList()->size() > 0 ) { if( MessageBox( "ÀÌ ÀÛ¾÷Àº ·Î±×ÀÎÇÑ À¯Àú°¡ ¾ø¾î¾ß ¾ÈÀüÇÕ´Ï´Ù.\n±×·¡µÎ °Á Áö¿ï·¡?", "¿¡·¯", MB_YESNO ) == IDNO ) return; } CDeleteGridDlg Dlg; if( Dlg.DoModal() != IDOK ) return; CWnd *pWnd = GetPaneWnd( GRID_PANE ); if( pWnd ) SendMessage( UM_REFRESH_PANE_VIEW ); CGlobalValue::GetInstance().RefreshRender(); } void CMainFrame::OnGridMovegrid() { // TODO: Add your command handler code here CFileServer::GetInstance().UpdateLoginList(); if( CFileServer::GetInstance().GetLoginUserList()->size() > 0 ) { if( MessageBox( "ÀÌ ÀÛ¾÷Àº ·Î±×ÀÎÇÑ À¯Àú°¡ ¾ø¾î¾ß ¾ÈÀüÇÕ´Ï´Ù.\n±×·¡µÎ °Á Çѹø ¿Å±æ·¡?", "¿¡·¯", MB_YESNO ) == IDNO ) return; } CMoveToGridDlg Dlg; if( Dlg.DoModal() != IDOK ) return; CWnd *pWnd = GetPaneWnd( GRID_PANE ); if( pWnd ) SendMessage( UM_REFRESH_PANE_VIEW ); CGlobalValue::GetInstance().RefreshRender(); } void CMainFrame::OnUpdateGridCreategrid(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView != CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnUpdateGridDeletegrid(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView != CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnUpdateGridMovegrid(CCmdUI *pCmdUI) { // TODO: Add your command update UI handler code here BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView != CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnPropertiesDirectorysetting() { // TODO: Add your command handler code here CPropertiesDlg Dlg; Dlg.DoModal(); } void CMainFrame::OnUpdatePropertiesEventSetting(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView != CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnPropertiesEventSetting() { if( CEventSignalManager::GetInstance().IsCanCheckOut() == false ) { MessageBox( "´Ù¸¥»ç¶÷ÀÌ ¼³Á¤À» º¯°æÁßÀÔ´Ï´Ù.", "¿¡·¯", MB_OK ); return; } if( CEventSignalManager::GetInstance().CheckOut() == false ) { MessageBox( "üũ¾Æ¿ô ½ÇÆÐ!!", "¿¡·¯", MB_OK ); return; } CCreateEventAreaDlg Dlg; Dlg.SetCurrentView( CEventEditWizardCommon::SELECT_EDIT_TYPE ); if( Dlg.DoModal() == IDOK ) { if( CEventSignalManager::GetInstance().Save() == false ) { MessageBox( "À̺¥Æ® ÆÄ¶ó¸ÞÅÍ Á¤º¸ ÀúÀå ½ÇÆÐ", "¿¡·¯", MB_OK ); } } if( CEventSignalManager::GetInstance().CheckIn() == false ) { MessageBox( "üũÀÎ ½ÇÆÐ!!", "¿¡·¯", MB_OK ); return; } } void CMainFrame::SetFocus( int nID ) { CXTPDockingPane* pPane = XTPDockingPaneManager()->FindPane( nID ); XTPDockingPaneManager()->ShowPane( pPane ); } void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if( nChar == VK_ESCAPE ) { } } void CMainFrame::OnUpdateToolsMakeMinimap(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView == CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnToolsMakeMinimap() { CMakeMinimapDlg Dlg(this); if( Dlg.DoModal() != IDOK ) return; } void CMainFrame::OnUpdateToolsSaveCurrentLightmap(CCmdUI *pCmdUI) { BOOL bEnable = FALSE; if( CFileServer::GetInstance().IsConnect() ) { if( CGlobalValue::GetInstance().m_nActiveView == CGlobalValue::PROP ) { bEnable = TRUE; } } pCmdUI->Enable( bEnable ); } void CMainFrame::OnToolsSaveCurrentLightmap() { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) return; pSector->SaveLightmap(); } void CMainFrame::OnUpdatePropertiesPropPropertySetting(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView != CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnPropertiesPropPropertySetting() { if( CPropSignalManager::GetInstance().IsCanCheckOut() == false ) { MessageBox( "´Ù¸¥»ç¶÷ÀÌ ¼³Á¤À» º¯°æÁßÀÔ´Ï´Ù.", "¿¡·¯", MB_OK ); return; } if( CPropSignalManager::GetInstance().CheckOut() == false ) { MessageBox( "üũ¾Æ¿ô ½ÇÆÐ!!", "¿¡·¯", MB_OK ); return; } CCreatePropPropertyDlg Dlg(this); Dlg.SetCurrentView( CPropEditWizardCommon::SELECT_EDIT_TYPE ); if( Dlg.DoModal() == IDOK ) { if( CPropSignalManager::GetInstance().Save() == false ) { MessageBox( "À̺¥Æ® ÆÄ¶ó¸ÞÅÍ Á¤º¸ ÀúÀå ½ÇÆÐ", "¿¡·¯", MB_OK ); } } if( CPropSignalManager::GetInstance().CheckIn() == false ) { MessageBox( "üũÀÎ ½ÇÆÐ!!", "¿¡·¯", MB_OK ); return; } } void CMainFrame::OnUpdateToolsExportTerrainto3dsmaxscriptdata(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView == CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnUpdateToolsExportPropInfoto3dsmaxscriptdata(CCmdUI *pCmdUI) { BOOL bEnable = TRUE; if( CFileServer::GetInstance().IsConnect() == false ) bEnable = FALSE; if( CGlobalValue::GetInstance().m_nActiveView == CGlobalValue::GRID ) bEnable = FALSE; pCmdUI->Enable( bEnable ); } void CMainFrame::OnToolsExportTerrainto3dsmaxscriptdata() { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) return; CString szFileList; TCHAR szFilter[] = _T( "3ds max Script File(*.ms)|*.ms||All Files (*.*)|*.*||" ); CFileDialog Dlg( FALSE, _T("ms"), _T("*.ms"), OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLESIZING, szFilter ); if( Dlg.DoModal() != IDOK ) return; bool bLoad = false; if( !pSector->IsLoaded() || !pSector->IsExistRWLevel( CTEtWorldSector::SRL_TERRAIN ) ) { pSector->LoadSector( CTEtWorldSector::SRL_TERRAIN ); bLoad = true; } if( pSector->ExportTerrainToMaxScript( Dlg.GetPathName() ) == false ) { MessageBox( "ÀͼöÆ÷Æ® ¿¡·¯³µÀ¸..", "¿¡·¯", MB_OK ); } if( bLoad ) { pSector->FreeSector( CTEtWorldSector::SRL_TERRAIN ); } } void CMainFrame::OnToolsExportPropInfoto3dsmaxscriptdata() { SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) return; CExportPropInfoDlg exportdlg; if( exportdlg.DoModal() != IDOK ) return; CString szFileList; TCHAR szFilter[] = _T( "3ds max Script File(*.ms)|*.ms||All Files (*.*)|*.*||" ); CFileDialog Dlg( FALSE, _T("ms"), _T("*.ms"), OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_ENABLESIZING, szFilter ); if( Dlg.DoModal() != IDOK ) return; bool bLoad = false; if( !pSector->IsLoaded() || !pSector->IsExistRWLevel( CTEtWorldSector::SRL_PROP ) ) { pSector->PropInfoFile( CTEtWorldSector::IFT_READ, true ); bLoad = true; } CString szStr = exportdlg.GetMaxFolder(); if( *szStr.GetBuffer() + szStr.GetLength() - 1 != '\\' ) szStr += "\\"; if( pSector->ExportPropInfoToMaxScript( Dlg.GetPathName(), szStr.GetBuffer() ) == false ) { MessageBox( "ÀͼöÆ÷Æ® ¿¡·¯³µÀ¸..", "¿¡·¯", MB_OK ); } if( bLoad ) { pSector->FreeSector( CTEtWorldSector::SRL_TERRAIN ); } } void CMainFrame::OnToggleSimul() { if( CGlobalValue::GetInstance().m_bSimulation ) CTdDummyActor::GetInstance().EndActor(); else CTdDummyActor::GetInstance().BeginActor(); CGlobalValue::GetInstance().RefreshRender(); } void CMainFrame::OnIncreaseBrushSize() { CGlobalValue::GetInstance().m_nBrushDiameter++; CWnd *pWnd = GetPaneWnd( BRUSH_PANE ); if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW ); CGlobalValue::GetInstance().RefreshRender(); } void CMainFrame::OnDecreaseBrushSize() { CGlobalValue::GetInstance().m_nBrushDiameter--; CWnd *pWnd = GetPaneWnd( BRUSH_PANE ); if( pWnd ) pWnd->SendMessage( UM_REFRESH_PANE_VIEW ); CGlobalValue::GetInstance().RefreshRender(); } void CMainFrame::OnAttr1() { switch( CGlobalValue::GetInstance().m_nActiveView ) { case CGlobalValue::BRUSH: { CWnd *pWnd = GetPaneWnd( LAYER_PANE ); if( pWnd ) pWnd->SendMessage( UM_LAYERPANE_CHANGE_LAYER, 1 ); } break; case CGlobalValue::NAVIGATION: CGlobalValue::GetInstance().m_cSelectAttribute = 0x01; break; } } void CMainFrame::OnAttr2() { switch( CGlobalValue::GetInstance().m_nActiveView ) { case CGlobalValue::BRUSH: { CWnd *pWnd = GetPaneWnd( LAYER_PANE ); if( pWnd ) pWnd->SendMessage( UM_LAYERPANE_CHANGE_LAYER, 2 ); } break; case CGlobalValue::NAVIGATION: CGlobalValue::GetInstance().m_cSelectAttribute = 0x02; break; } } void CMainFrame::OnAttr3() { switch( CGlobalValue::GetInstance().m_nActiveView ) { case CGlobalValue::BRUSH: { CWnd *pWnd = GetPaneWnd( LAYER_PANE ); if( pWnd ) pWnd->SendMessage( UM_LAYERPANE_CHANGE_LAYER, 3 ); } break; case CGlobalValue::NAVIGATION: CGlobalValue::GetInstance().m_cSelectAttribute = 0x04; break; } } void CMainFrame::OnAttr4() { switch( CGlobalValue::GetInstance().m_nActiveView ) { case CGlobalValue::BRUSH: { CWnd *pWnd = GetPaneWnd( LAYER_PANE ); if( pWnd ) pWnd->SendMessage( UM_LAYERPANE_CHANGE_LAYER, 4 ); } break; case CGlobalValue::NAVIGATION: CGlobalValue::GetInstance().m_cSelectAttribute = 0x08; break; } } void CMainFrame::OnToggleTopView() { if( !CRenderBase::IsActive() ) return; CRenderBase::GetInstance().ToggleCameraTopView(); } void CMainFrame::OnUpdateToggleTopView(CCmdUI *pCmdUI) { bool bEnable = true; if( !CFileServer::GetInstance().IsConnect() ) bEnable = false; if( CGlobalValue::GetInstance().m_nActiveView == 0 ) bEnable = false; pCmdUI->Enable( bEnable ); } void CMainFrame::OnViewCameraLight() { CTEtWorldSector::ms_IsFiltering = !CTEtWorldSector::ms_IsFiltering; CTEtWorldSector::InitFilteringNames(); if (CTEtWorldSector::ms_IsFiltering) { CTEtWorldSector::AddPropNameForFiltering("Light.skn"); CTEtWorldSector::AddPropNameForFiltering("Camera.skn"); } SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) return; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) return; switch( CGlobalValue::GetInstance().m_nActiveView ) { case CGlobalValue::PROP: case CGlobalValue::WATER: case CGlobalValue::NAVIGATION: case CGlobalValue::EVENT: case CGlobalValue::SOUND: case CGlobalValue::TRIGGER: case CGlobalValue::RDUNGEON: { pSector->ShowProp(true); CGlobalValue::GetInstance().RefreshRender(); } break; } } void CMainFrame::OnUpdateViewCameraLight(CCmdUI *pCmdUI) { bool bEnable = true; SectorIndex Sector = CGlobalValue::GetInstance().m_SelectGrid; if( Sector == -1 ) bEnable = false; CTEtWorldSector *pSector = CTEtWorld::GetInstance().GetSector( Sector ); if( !pSector ) bEnable = false; // if (CGlobalValue::PROP != CGlobalValue::GetInstance().m_nActiveView ) // bEnable = false; pCmdUI->Enable( bEnable ); pCmdUI->SetCheck( CTEtWorldSector::ms_IsFiltering ); }