mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-28 21:05:53 +01:00
333 lines
10 KiB
C++
333 lines
10 KiB
C++
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
the Free Software Foundation
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
|
|
|
#include "stdafx.h"
|
|
#include "SeriousSkaStudio.h"
|
|
#include "MainFrm.h"
|
|
#include "resource.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef new
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
#define LOAD_BAR_STATE( WName, HName, bar, dx, dy) \
|
|
bar.m_Size.cx = (AfxGetApp()->GetProfileInt(_T("General"),_T(WName),dx)); \
|
|
bar.m_Size.cy = (AfxGetApp()->GetProfileInt(_T("General"),_T(HName),dy)); \
|
|
bar.CalcDynamicLayout(0, LM_HORZDOCK)
|
|
|
|
#define SAVE_BAR_STATE( WName, HName, bar) \
|
|
AfxGetApp()->WriteProfileInt( _T("General"),_T(WName), bar.m_Size.cx); \
|
|
AfxGetApp()->WriteProfileInt( _T("General"),_T(HName), bar.m_Size.cy)
|
|
|
|
#define STD_TREEVIEW_WIDTH 230
|
|
#define STD_TREEVIEW_HEIGHT 550
|
|
|
|
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
|
|
|
|
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
|
|
//{{AFX_MSG_MAP(CMainFrame)
|
|
ON_WM_CREATE()
|
|
ON_WM_ACTIVATEAPP()
|
|
ON_COMMAND(ID_VIEW_TREEVIEW, OnViewTreeview)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_TREEVIEW, OnUpdateViewTreeview)
|
|
ON_WM_CLOSE()
|
|
ON_WM_SIZE()
|
|
ON_COMMAND(ID_VIEW_TOOLBAR, OnViewToolbar)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateViewToolbar)
|
|
ON_COMMAND(ID_FILE_CREATE_TEXTURE, OnFileCreateTexture)
|
|
ON_BN_CLICKED(IDC_BT_CLOSE, OnBtClose)
|
|
ON_BN_CLICKED(IDC_BT_CLEAR, OnBtClear)
|
|
ON_COMMAND(ID_VIEW_ERRORLIST, OnViewErrorlist)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_ERRORLIST, OnUpdateViewErrorlist)
|
|
//}}AFX_MSG_MAP
|
|
// Global help commands
|
|
ON_COMMAND(ID_HELP_FINDER, CMDIFrameWnd::OnHelpFinder)
|
|
ON_COMMAND(ID_HELP, CMDIFrameWnd::OnHelp)
|
|
ON_COMMAND(ID_CONTEXT_HELP, CMDIFrameWnd::OnContextHelp)
|
|
ON_COMMAND(ID_DEFAULT_HELP, CMDIFrameWnd::OnHelpFinder)
|
|
END_MESSAGE_MAP()
|
|
|
|
static UINT indicators[] =
|
|
{
|
|
ID_STATUS_BAR_TEXT,
|
|
ID_SEPARATOR,
|
|
ID_INDICATOR_CAPS,
|
|
ID_INDICATOR_NUM,
|
|
ID_INDICATOR_SCRL,
|
|
};
|
|
|
|
#define STD_DRAGBAR_WIDTH 230
|
|
#define STD_DRAGBAR_HEIGHT 230
|
|
|
|
CMainFrame::CMainFrame()
|
|
{
|
|
}
|
|
CMainFrame::~CMainFrame()
|
|
{
|
|
}
|
|
|
|
BOOL _bApplicationActive = TRUE;
|
|
void CMainFrame::OnActivateApp(BOOL bActive, DWORD hTask)
|
|
{
|
|
_bApplicationActive = bActive;
|
|
CMDIFrameWnd::OnActivateApp(bActive, hTask);
|
|
}
|
|
|
|
// create main frame
|
|
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
// set same styles for use with all toolbars
|
|
CRect rectDummy(0,0,0,0);
|
|
DWORD dwToolBarStyles = TBSTYLE_FLAT | WS_CHILD | WS_VISIBLE | CBRS_SIZE_DYNAMIC |
|
|
CBRS_TOP | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_GRIPPER;
|
|
|
|
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
// subclass mdiclient
|
|
if (!m_wndMDIClient.SubclassWindow(m_hWndMDIClient)) {
|
|
TRACE ("Failed to subclass MDI client window\n");
|
|
return (-1);
|
|
}
|
|
// create toolbar IDR_MAINFRAME
|
|
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, dwToolBarStyles, rectDummy, IDW_TOOLBAR_MAINFRAME) ||
|
|
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
|
|
{
|
|
TRACE0("Failed to create toolbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
// create toolbar IDR_NAVIGATION
|
|
if( (!m_wndNavigationToolBar.CreateEx(this, TBSTYLE_FLAT, dwToolBarStyles, rectDummy,IDW_TOOLBAR_NAVIGATION)) ||
|
|
(!m_wndNavigationToolBar.LoadToolBar(IDR_NAVIGATION)) )
|
|
{
|
|
TRACE0("Failed to create FX toolbar\n");
|
|
return -1; // fail to create fx tool bar
|
|
}
|
|
// create toolbar IDR_MANAGE
|
|
if (!m_wndToolBarManage.CreateEx(this, TBSTYLE_FLAT, dwToolBarStyles, rectDummy,IDW_TOOLBAR_MANAGE) ||
|
|
!m_wndToolBarManage.LoadToolBar(IDR_MANAGE))
|
|
{
|
|
TRACE0("Failed to create toolbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
// create status bar
|
|
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
|
|
}
|
|
|
|
EnableDocking(CBRS_ALIGN_ANY);
|
|
// enable docking for toolbars
|
|
m_wndToolBar.EnableDocking(CBRS_ALIGN_TOP);
|
|
m_wndNavigationToolBar.EnableDocking(CBRS_ALIGN_TOP);
|
|
m_wndToolBarManage.EnableDocking(CBRS_ALIGN_TOP);
|
|
// dock toolbars
|
|
DockControlBar(&m_wndToolBar);
|
|
DockControlBar(&m_wndNavigationToolBar);
|
|
DockControlBar(&m_wndToolBarManage);
|
|
|
|
|
|
// Set model instance stretch edit ctrl
|
|
m_wndNavigationToolBar.SetButtonInfo(STRETCH_BUTTON_INDEX, ID_MI_STRETCH, TBBS_SEPARATOR, 40);
|
|
CRect rcEditStretch;
|
|
m_wndNavigationToolBar.GetItemRect(STRETCH_BUTTON_INDEX, &rcEditStretch);
|
|
rcEditStretch.top = 2;
|
|
rcEditStretch.right -= 2;
|
|
rcEditStretch.bottom = rcEditStretch.top + 18;
|
|
if (!m_ctrlMIStretch.Create( WS_VISIBLE|WS_BORDER,
|
|
rcEditStretch, &m_wndNavigationToolBar, ID_MI_STRETCH) )
|
|
{
|
|
TRACE0("Failed to create model instance stretch edit control\n");
|
|
return FALSE;
|
|
}
|
|
|
|
m_ctrlMIStretch.SetWindowText(L"1");
|
|
|
|
// Initialize dialog bar m_dlgBarTreeView
|
|
if (!theApp.m_dlgBarTreeView.Create(this, IDD_TREEBAR,
|
|
CBRS_LEFT | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE | CBRS_SIZE_DYNAMIC,
|
|
ID_VIEW_TREEVIEW))
|
|
{
|
|
TRACE0("Failed to create dialog bar m_dlgBarTreeView\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
if(!theApp.m_dlgErrorList.Create(this,IDD_ERROR_LIST,
|
|
CBRS_BOTTOM/* | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_HIDE_INPLACE | CBRS_SIZE_DYNAMIC*/,
|
|
ID_VIEW_ERRORLIST)) {
|
|
TRACE0("Failed to create dialog bar m_dlgErrorList\n");
|
|
return -1; // fail to create
|
|
}
|
|
theApp.GetErrorList()->InsertColumn(0,L"Error");
|
|
theApp.GetErrorList()->SetImageList( &theApp.m_dlgBarTreeView.m_IconsImageList, LVSIL_SMALL);
|
|
// theApp.m_dlgErrorList.m_Size = theApp.m_dlgErrorList.m_sizeDefault;
|
|
// theApp.m_dlgErrorList.SetSplitterControlID(IDC_SPLITER_LOG_FRAME);
|
|
|
|
|
|
theApp.m_dlgBarTreeView.SetWindowText(L"Tree view");
|
|
theApp.m_dlgErrorList.SetWindowText(L"Log");
|
|
|
|
theApp.m_dlgBarTreeView.EnableDockingSides(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
|
|
// theApp.m_dlgErrorList.EnableDockingSides(CBRS_ALIGN_BOTTOM);
|
|
//theApp.m_dlgErrorList.dlg_ulEnabledDockingSides = CBRS_ALIGN_BOTTOM;
|
|
|
|
theApp.m_dlgBarTreeView.DockCtrlBar();
|
|
// theApp.m_dlgErrorList.DockCtrlBar();
|
|
// DockControlBar(&theApp.m_dlgErrorList);
|
|
|
|
// set size of panels in status bar
|
|
m_wndStatusBar.SetPaneInfo(0,ID_STATUS_BAR_TEXT,SBPS_NORMAL,600);
|
|
m_wndStatusBar.SetPaneInfo(1,ID_SEPARATOR,SBPS_STRETCH,100);
|
|
|
|
// try to load dialog width and height from reg.
|
|
LOAD_BAR_STATE("TreeView width", "TreeView height", theApp.m_dlgBarTreeView,
|
|
STD_TREEVIEW_WIDTH, STD_TREEVIEW_HEIGHT);
|
|
// try to load toolbars positions
|
|
LoadBarState(_T("General"));
|
|
|
|
theApp.bAppInitialized = TRUE;
|
|
return 0;
|
|
}
|
|
|
|
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
if( !CMDIFrameWnd::PreCreateWindow(cs) )
|
|
return FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CMainFrame::AssertValid() const
|
|
{
|
|
CMDIFrameWnd::AssertValid();
|
|
}
|
|
|
|
void CMainFrame::Dump(CDumpContext& dc) const
|
|
{
|
|
CMDIFrameWnd::Dump(dc);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
// Show/hide treeview
|
|
void CMainFrame::OnViewTreeview()
|
|
{
|
|
// OnBarCheck();
|
|
|
|
if(theApp.m_dlgBarTreeView.IsWindowVisible() )
|
|
{
|
|
ShowControlBar(&theApp.m_dlgBarTreeView, FALSE, FALSE);
|
|
theApp.m_dlgBarTreeView.SetFocus();
|
|
}
|
|
else
|
|
{
|
|
ShowControlBar(&theApp.m_dlgBarTreeView, TRUE, FALSE);
|
|
theApp.m_dlgBarTreeView.m_TreeCtrl.SetFocus();
|
|
}
|
|
}
|
|
// Update treeview check
|
|
void CMainFrame::OnUpdateViewTreeview(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(theApp.m_dlgBarTreeView.IsWindowVisible());
|
|
}
|
|
|
|
// Show/hide error dlg
|
|
void CMainFrame::OnViewErrorlist()
|
|
{
|
|
theApp.ShowErrorDlg(!theApp.IsErrorDlgVisible());
|
|
}
|
|
// Update error dlg
|
|
void CMainFrame::OnUpdateViewErrorlist(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->SetCheck(theApp.IsErrorDlgVisible());
|
|
}
|
|
|
|
// close main frame
|
|
void CMainFrame::OnClose()
|
|
{
|
|
// try to save all documents before closing them
|
|
POSITION pos = theApp.m_pdtDocTemplate->GetFirstDocPosition();
|
|
while (pos!=NULL)
|
|
{
|
|
CSeriousSkaStudioDoc *pmdCurrent = (CSeriousSkaStudioDoc *)theApp.m_pdtDocTemplate->GetNextDoc(pos);
|
|
if(!pmdCurrent->BeforeDocumentClose()) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
// save toolbars positions
|
|
SaveBarState(_T("General"));
|
|
// savedialog width and height in reg
|
|
SAVE_BAR_STATE("TreeView width", "TreeView height", theApp.m_dlgBarTreeView);
|
|
CMDIFrameWnd::OnClose();
|
|
}
|
|
// resize main frame
|
|
void CMainFrame::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CMDIFrameWnd::OnSize(nType, cx, cy);
|
|
m_wndStatusBar.SetPaneInfo(0,ID_STATUS_BAR_TEXT,SBPS_NORMAL,cx/1.5);
|
|
}
|
|
|
|
// show/hide toolbars
|
|
void CMainFrame::OnViewToolbar()
|
|
{
|
|
BOOL bVisible = ((m_wndToolBar.GetStyle() & WS_VISIBLE) != 0);
|
|
bVisible &= ((m_wndNavigationToolBar.GetStyle() & WS_VISIBLE) != 0);
|
|
bVisible &= ((m_wndToolBarManage.GetStyle() & WS_VISIBLE) != 0);
|
|
|
|
ShowControlBar(&m_wndToolBar, !bVisible, FALSE);
|
|
ShowControlBar(&m_wndNavigationToolBar, !bVisible, FALSE);
|
|
ShowControlBar(&m_wndToolBarManage, !bVisible, FALSE);
|
|
}
|
|
// update toolbars check
|
|
void CMainFrame::OnUpdateViewToolbar(CCmdUI* pCmdUI)
|
|
{
|
|
BOOL bVisible = ((m_wndToolBar.GetStyle() & WS_VISIBLE) != 0);
|
|
bVisible &= ((m_wndNavigationToolBar.GetStyle() & WS_VISIBLE) != 0);
|
|
bVisible &= ((m_wndToolBarManage.GetStyle() & WS_VISIBLE) != 0);
|
|
pCmdUI->SetCheck(bVisible);
|
|
}
|
|
|
|
CTString CMainFrame::CreateTexture()
|
|
{
|
|
// call create texture dialog
|
|
CTFileName fnCreated = _EngineGUI.CreateTexture();
|
|
return fnCreated;
|
|
}
|
|
|
|
void CMainFrame::OnFileCreateTexture()
|
|
{
|
|
CreateTexture();
|
|
}
|
|
|
|
void CMainFrame::OnBtClose()
|
|
{
|
|
theApp.ShowErrorDlg(FALSE);
|
|
}
|
|
|
|
void CMainFrame::OnBtClear()
|
|
{
|
|
theApp.GetErrorList()->DeleteAllItems();
|
|
OnBtClose();
|
|
}
|