DragonNest/Client/EtUITool/MainFrm.cpp

556 lines
17 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "EtUI.h"
#include "EtUITool.h"
#include "DockingPaneAdobeTheme.h"
#include "MainFrm.h"
#include "EtUIToolDoc.h"
#include "EtUIToolView.h"
#include "PaneDefine.h"
#include "LayoutView.h"
#include "DummyView.h"
#include "GlobalValue.h"
#include "PropertiesDlg.h"
#include "../../Common/EtResManager/EtResourceMng.h"
#include "../../Common/EtStringManager/EtUIXML.h"
#include "EtUIMan.h"
#include "EtUIControl.h"
#include "FontSetDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
ON_MESSAGE(XTPWM_DOCKINGPANE_NOTIFY, OnDockingPaneNotify)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVEALLTEMPLATE, &CMainFrame::OnUpdateFileSavealltemplate)
ON_COMMAND(ID_FILE_SAVEALLTEMPLATE, &CMainFrame::OnFileSavealltemplate)
ON_COMMAND(ID_UI_SAVE, &CMainFrame::OnFileSave)
ON_COMMAND(ID_UI_SAVE_AS, &CMainFrame::OnFileSaveAs)
ON_COMMAND(ID_UI_OPEN, &CMainFrame::OnFileOpen)
ON_COMMAND(ID_UI_NEW, &CMainFrame::OnFileNew)
ON_COMMAND(ID_FILE_SETPROPERTYFOLDER, &CMainFrame::OnFileSetpropertyfolder)
ON_COMMAND(ID_FORMAT_SETFONT, &CMainFrame::OnFormatSetfont)
ON_COMMAND(ID_FILE_LOAD_XML, &CMainFrame::OnFileLoadXml)
ON_COMMAND(ID_FILE_CREATE_INI_FILE, &CMainFrame::OnFileCreateIniFile)
ON_UPDATE_COMMAND_UI(ID_FILE_CREATE_INI_FILE, &CMainFrame::OnUpdateFileCreateIniFile)
ON_WM_KEYDOWN()
ON_COMMAND(ID_VIEW_TEMPLATE_ON_LAYOUTVIEW, &CMainFrame::OnViewTemplateOnLayoutview)
ON_UPDATE_COMMAND_UI(ID_VIEW_TEMPLATE_ON_LAYOUTVIEW, &CMainFrame::OnUpdateViewTemplateOnLayoutview)
ON_COMMAND(ID_FILE_SAVE_DIALOG_INFO, &CMainFrame::OnFileSaveDialogInfo)
ON_COMMAND(ID_SAVE_CUSTOMUI, &CMainFrame::OnSaveCustomui)
ON_COMMAND(ID_SAVE_ALLUI, &CMainFrame::OnSaveAllui)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
CString CMainFrame::m_szShaderFolder = _T("");
CString CMainFrame::m_szResourceFolder = _T("");
CString CMainFrame::m_szUITemplateFolder = _T("");
CMainFrame::CMainFrame()
{
#ifdef _DEBUG
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
//_CrtMemDumpAllObjectsSince(0);
//CrtSetBreakAlloc(206865);
#endif //_DEBUG
m_nCreateINIFile = 0;
m_nTemplateOnLayoutView = 0;
m_pResMng = new CEtResourceMng( false );
char szStr1[2048] = {0};
char szStr2[2048] = {0};
char szStr3[2048] = {0};
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "ShaderFolder", szStr1, 2048 );
if( strlen(szStr1) == 0 ) m_szShaderFolder = "\\\\eye-ad\\ToolData\\SharedEffect";
else m_szShaderFolder = szStr1;
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "ResourceFolder", szStr2, 2048 );
if( strlen(szStr2) == 0 ) m_szResourceFolder = "\\\\eye-ad\\ToolData\\Resource";
else m_szResourceFolder = szStr2;
GetRegistryString( HKEY_CURRENT_USER, REG_SUBKEY, "UITemplateFolder", szStr3, 2048 );
if( strlen(szStr3) == 0 ) m_szUITemplateFolder = "\\\\eye-ad\\ToolData\\UITemplate";
else m_szUITemplateFolder = szStr3;
GetCurrentDirectory( 2048, szStr1 );
strcat_s( szStr1, "\\" );
CEtResourceMng::GetInstance().RemoveResourcePath( szStr1 );
if( strlen( szStr1 ) == 0 || strlen( szStr2 ) == 0 || strlen( szStr3 ) == 0 )
{
CPropertiesDlg Dlg;
Dlg.m_bDisableCancel = true;
Dlg.m_szShaderFolder = GetShaderFolder();
Dlg.m_szResourceFolder = GetResourceFolder();
Dlg.m_szUITemplateFolder = GetUITemplateFolder();
if( Dlg.DoModal() == IDOK )
{
if( GetShaderFolder() != Dlg.m_szShaderFolder )
ChangeShaderFolder( Dlg.m_szShaderFolder );
if( GetResourceFolder() != Dlg.m_szResourceFolder )
ChangeResourceFolder( Dlg.m_szResourceFolder );
if( GetUITemplateFolder() != Dlg.m_szUITemplateFolder )
ChangeUITemplateFolder( Dlg.m_szUITemplateFolder );
}
}
else
{
CEtResourceMng::GetInstance().AddResourcePath( m_szShaderFolder, true );
CEtResourceMng::GetInstance().AddResourcePath( m_szResourceFolder, true );
CEtResourceMng::GetInstance().AddResourcePath( m_szUITemplateFolder, true );
}
}
CMainFrame::~CMainFrame()
{
SAFE_DELETE( m_pResMng );
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
m_wndStatusBar.SetPaneInfo( 0, ID_SEPARATOR, SBPS_STRETCH, 0 );
m_wndStatusBar.SetPaneInfo( 1, ID_SEPARATOR, SBPS_NORMAL, 250 );
if ( !InitCommandBars() )
{
return -1;
}
// Init Thema
XTPPaintManager()->SetTheme(xtpThemeVisualStudio2008);//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;
// 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;
}
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; i<nCount; i++ ) {
CXTPDockingPane *pDockPane = NULL;
nIconList[i] = g_PaneList[i].nPaneID;
if( g_PaneList[i].nDockPaneID != -1 ) pDockPane = g_PaneList[g_PaneList[i].nDockPaneID].pThis;
if( (int)g_PaneList[i].Direction == -1 ) {
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 ) );
XTPDockingPaneManager()->FloatPane( 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 );
}
}
// <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ƴ<EFBFBD><C6B3>´<EFBFBD>.
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; i<nCount; i++ ) {
if( g_PaneList[i].bShow == FALSE ) {
XTPDockingPaneManager()->ClosePane( g_PaneList[i].nPaneID );
}
else {
XTPDockingPaneManager()->ShowPane( g_PaneList[i].nPaneID );
}
}
return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.cx = 1276 + 341;
cs.cy = 949;
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return TRUE;
}
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 );
}
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
CFrameWnd::Dump(dc);
}
#endif //_DEBUG
// CMainFrame message handlers
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;
}
void CMainFrame::SetPaneText( int nID, CString &szText )
{
m_wndStatusBar.SetPaneText( nID, szText );
}
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;
}
void CMainFrame::OnUpdateFileSavealltemplate(CCmdUI *pCmdUI)
{
pCmdUI->Enable();
}
void CMainFrame::OnFileSavealltemplate()
{
CTemplatePaneView *pView;
pView = ( CTemplatePaneView * )GetPaneWnd( TEMPLATE_PANE );
if( pView )
{
pView->SaveAllTemplate();
}
}
BOOL CMainFrame::IsPaneClosed( int nID )
{
return XTPDockingPaneManager()->IsPaneClosed( nID );
}
void CMainFrame::OnFileSave()
{
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
pLayoutView->OnFileSave();
}
void CMainFrame::OnFileSaveAs()
{
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
pLayoutView->OnFileSaveAs();
}
void CMainFrame::OnFileOpen()
{
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
pLayoutView->OnFileOpen();
}
void CMainFrame::OnFileNew()
{
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
pLayoutView->OnFileNew();
}
void CMainFrame::OnFileSetpropertyfolder()
{
CPropertiesDlg Dlg;
Dlg.m_szShaderFolder = GetShaderFolder();
Dlg.m_szResourceFolder = GetResourceFolder();
Dlg.m_szUITemplateFolder = GetUITemplateFolder();
if( Dlg.DoModal() == IDOK )
{
if( GetShaderFolder() != Dlg.m_szShaderFolder )
ChangeShaderFolder( Dlg.m_szShaderFolder );
if( GetResourceFolder() != Dlg.m_szResourceFolder )
ChangeResourceFolder( Dlg.m_szResourceFolder );
if( GetUITemplateFolder() != Dlg.m_szUITemplateFolder )
ChangeUITemplateFolder( Dlg.m_szUITemplateFolder );
}
}
void CMainFrame::OnFormatSetfont()
{
// Note : <20><>Ʈ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> ȣ<><C8A3>
//
CFontSetDlg FontSetDlg;
if( FontSetDlg.DoModal() == IDOK )
{
}
}
void CMainFrame::OnFileLoadXml()
{
if( EtInterface::xml::IsValid() )
{
if( EtInterface::xml::GetXML()->LoadXML( "uistring.xml", CEtUIXML::idCategory1 ) )
{
MessageBox( "UI String XML Loading Succeeded!" );
}
}
}
void CMainFrame::OnFileCreateIniFile()
{
m_nCreateINIFile = !m_nCreateINIFile;
}
void CMainFrame::OnUpdateFileCreateIniFile(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nCreateINIFile);
}
void CMainFrame::ChangeShaderFolder( const char *szFullPath )
{
CEtResourceMng::GetInstance().RemoveResourcePath( m_szShaderFolder );
m_szShaderFolder = szFullPath;
CEtResourceMng::GetInstance().AddResourcePath( m_szShaderFolder, true );
}
void CMainFrame::ChangeResourceFolder( const char *szFullPath )
{
CEtResourceMng::GetInstance().RemoveResourcePath( m_szResourceFolder );
m_szResourceFolder = szFullPath;
CEtResourceMng::GetInstance().AddResourcePath( m_szResourceFolder, true );
}
void CMainFrame::ChangeUITemplateFolder( const char *szFullPath )
{
CEtResourceMng::GetInstance().RemoveResourcePath( m_szUITemplateFolder );
m_szResourceFolder = szFullPath;
CEtResourceMng::GetInstance().AddResourcePath( m_szUITemplateFolder, true );
}
void CMainFrame::OnViewTemplateOnLayoutview()
{
m_nTemplateOnLayoutView = !m_nTemplateOnLayoutView;
((CEtUIToolView*)(CGlobalValue::GetInstance().m_pCurView))->GetDummyView()->EnableTemplateOnLayoutView( m_nTemplateOnLayoutView ? true : false );
}
void CMainFrame::OnUpdateViewTemplateOnLayoutview(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(m_nTemplateOnLayoutView);
}
void CMainFrame::OnFileSaveDialogInfo()
{
TCHAR szFilter[] = _T( "Eternity UI Dialog Info File (*.txt)|*.txt|All Files (*.*)|*.*||" );
CFileDialog FileDlg( FALSE, _T("txt"), _T("*.txt"), OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ENABLESIZING | OFN_NOCHANGEDIR, szFilter, this );
if( FileDlg.DoModal() == IDOK )
{
FILE *fp(NULL);
errno_t err;
if( (err = fopen_s( &fp, FileDlg.m_ofn.lpstrFile, "wt" )) != 0 )
{
CDebugSet::ToLogFile( "CMainFrame::OnFileSaveDialogInfo, The file %s was not opened!", FileDlg.m_ofn.lpstrFile );
return;
}
if( fp )
{
fprintf ( fp, "--------------------------------------------------------------\n" );
fprintf ( fp, "\tID\t\t\tType\n" );
fprintf ( fp, "--------------------------------------------------------------\n" );
fprintf ( fp, "\n" );
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
CEtUIDialog &layoutDialog = pLayoutView->GetDialog();
std::vector<CEtUIControl*>&vecControl = layoutDialog.GetControlList();
SUIControlProperty *pProperty(NULL);
for( int i=0; i<(int)vecControl.size(); ++i )
{
pProperty = vecControl[i]->GetProperty();
if( !pProperty )
{
CDebugSet::ToLogFile( "CMainFrame::OnFileSaveDialogInfo, pProperty is NULL!" );
continue;
}
fprintf ( fp, "\t%s\t\t", pProperty->szUIName );
fprintf ( fp, "%s\n", CONTROL_TYPE_2_STRING(pProperty->UIType) );
}
fclose(fp);
}
else
{
CDebugSet::ToLogFile( "CMainFrame::OnFileSaveDialogInfo, File pointer is NULL!" );
return;
}
}
}
const char* CMainFrame::CONTROL_TYPE_2_STRING( UI_CONTROL_TYPE typeControl )
{
switch( typeControl )
{
case UI_CONTROL_STATIC: return "Static";
case UI_CONTROL_BUTTON: return "Button";
case UI_CONTROL_CHECKBOX: return "CheckBox";
case UI_CONTROL_RADIOBUTTON: return "RadioButton";
case UI_CONTROL_COMBOBOX: return "ComboBox";
case UI_CONTROL_SLIDER: return "Slider";
case UI_CONTROL_EDITBOX: return "EditBox";
case UI_CONTROL_IMEEDITBOX: return "IMEEditBox";
case UI_CONTROL_LISTBOX: return "ListBox";
case UI_CONTROL_SCROLLBAR: return "ScrollBar";
case UI_CONTROL_PROGRESSBAR: return "ProgressBar";
case UI_CONTROL_CUSTOM: return "Custom";
case UI_CONTROL_TEXTBOX: return "TextBox";
case UI_CONTROL_TEXTURECONTROL: return "TextureControl";
case UI_CONTROL_HTMLTEXTBOX: return "HTMLTextBox";
case UI_CONTROL_TREECONTROL: return "TreeControl";
case UI_CONTROL_QUESTTREECONTROL: return "QuestTreeControl";
case UI_CONTROL_ANIMATION: return "Animation";
case UI_CONTROL_LINE_EDITBOX: return "LineEditBox";
case UI_CONTROL_LINE_IMEEDITBOX: return "LineIMEEditBox";
case UI_CONTROL_MOVIECONTROL: return "MovieControl";
case UI_CONTROL_LISTBOXEX: return "ListBoxEx";
default: return "Invalid Control Type";
}
return NULL;
}
void CMainFrame::OnSaveCustomui()
{
// TODO: Add your command handler code here
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
pLayoutView->SaveCustomUI();
}
void CMainFrame::OnSaveAllui()
{
// TODO: Add your command handler code here
CLayoutView *pLayoutView;
pLayoutView = ( CLayoutView * )( ( CEtUIToolView * )( CGlobalValue::GetInstance().m_pCurView ) )->GetTabView( CDummyView::LAYOUT_VIEW );
pLayoutView->SaveAllUI();
}