549 lines
13 KiB
C++
549 lines
13 KiB
C++
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
// Copyright (C) 2010 Winch Gate Property Limited
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero General Public License as
|
|
// published by the Free Software Foundation, either version 3 of the
|
|
// License, or (at your option) any later version.
|
|
//
|
|
// 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 Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#include "stdafx.h"
|
|
#include "georges_edit.h"
|
|
#include "georges_edit_view.h"
|
|
#include "georges_edit_doc.h"
|
|
#include "settings_dialog.h"
|
|
#include "child_frm.h"
|
|
|
|
#include "main_frm.h"
|
|
|
|
#include "nel/misc/debug.h"
|
|
|
|
using namespace NLMISC;
|
|
using namespace std;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame
|
|
|
|
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
|
|
|
|
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)
|
|
//{{AFX_MSG_MAP(CMainFrame)
|
|
ON_WM_CREATE()
|
|
ON_COMMAND(ID_VIEW_SETTINGS, OnSettings)
|
|
ON_WM_CLOSE()
|
|
ON_COMMAND(ID_VIEW_DOCKINGDIALOGBAR, OnViewDockingdialogbar)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_DOCKINGDIALOGBAR, OnUpdateViewDockingdialogbar)
|
|
ON_WM_SIZE()
|
|
ON_COMMAND(ID_VIEW_OUTPUT_CONSOLE, OnViewOutputConsole)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_OUTPUT_CONSOLE, OnUpdateViewOutputConsole)
|
|
ON_COMMAND(ID_VIEW_GOTO_FILE_BROWSER, OnViewGotoFileBrowser)
|
|
ON_COMMAND(ID_VIEW_GOTO_OUTPUT_CONSOLE, OnViewGotoOutputConsole)
|
|
ON_COMMAND(ID_MODULES_0, OnModules0)
|
|
ON_UPDATE_COMMAND_UI(ID_MODULES_0, OnUpdateModules0)
|
|
ON_COMMAND(ID_MODULES_1, OnModules1)
|
|
ON_UPDATE_COMMAND_UI(ID_MODULES_1, OnUpdateModules1)
|
|
ON_COMMAND(ID_MODULES_2, OnModules2)
|
|
ON_UPDATE_COMMAND_UI(ID_MODULES_2, OnUpdateModules2)
|
|
ON_COMMAND(ID_MODULES_3, OnModules3)
|
|
ON_UPDATE_COMMAND_UI(ID_MODULES_3, OnUpdateModules3)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_SETTINGS, OnUpdateViewSettings)
|
|
ON_COMMAND(ID_BROWSER_SORTED_BY_TYPE, OnBrowserSortedByType)
|
|
ON_WM_KEYDOWN()
|
|
ON_UPDATE_COMMAND_UI(ID_BROWSER_SORTED_BY_TYPE, OnUpdateBrowserSortedByType)
|
|
//}}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_SEPARATOR, // status line indicator
|
|
ID_INDICATOR_CAPS,
|
|
ID_INDICATOR_NUM,
|
|
ID_INDICATOR_SCRL,
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame construction/destruction
|
|
|
|
CMainFrame::CMainFrame()
|
|
{
|
|
// m_bAutoMenuEnable = FALSE;
|
|
m_bDontClose = false;
|
|
BrowserSortedByType = false;
|
|
}
|
|
|
|
CMainFrame::~CMainFrame()
|
|
{
|
|
ErrorLog->removeDisplayer (&Displayer);
|
|
WarningLog->removeDisplayer (&Displayer);
|
|
InfoLog->removeDisplayer (&Displayer);
|
|
DebugLog->removeDisplayer (&Displayer);
|
|
AssertLog->removeDisplayer (&Displayer);
|
|
}
|
|
|
|
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
if (!m_wndToolBar.Create(this) ||
|
|
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
|
|
{
|
|
TRACE0("Failed to create toolbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
// Icon bar
|
|
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
|
|
CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
|
|
|
|
// Dockable
|
|
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
|
|
EnableDocking(CBRS_ALIGN_ANY);
|
|
DockControlBar(&m_wndToolBar);
|
|
|
|
// Create the file browser
|
|
if (!FileBrowser.Create(this, &FileBrowserDlg, CString("File browser"), IDD_FILE_BROWSER))
|
|
{
|
|
TRACE0("Failed to create dialogbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
// Docking bar
|
|
ShowControlBar (&FileBrowser, TRUE, FALSE);
|
|
FileBrowser.SetBarStyle (FileBrowser.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);
|
|
FileBrowser.EnableDocking (CBRS_ALIGN_ANY);
|
|
DockControlBar (&FileBrowser);
|
|
|
|
// Menu file browser
|
|
CMenu *menu = GetMenu();
|
|
menu->CheckMenuItem(ID_VIEW_DOCKINGDIALOGBAR, MF_CHECKED);
|
|
|
|
// Create the output console
|
|
if (!OutputConsole.Create(this, &OutputConsoleDlg, CString("Output"), IDD_OUTPUT_CONSOLE))
|
|
{
|
|
TRACE0("Failed to create dialogbar\n");
|
|
return -1; // fail to create
|
|
}
|
|
|
|
// Docking bar
|
|
ShowControlBar (&OutputConsole, TRUE, FALSE);
|
|
OutputConsole.SetBarStyle (OutputConsole.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC);
|
|
OutputConsole.EnableDocking (CBRS_ALIGN_ANY);
|
|
DockControlBar (&OutputConsole, AFX_IDW_DOCKBAR_BOTTOM);
|
|
|
|
// Menu file browser
|
|
menu = GetMenu();
|
|
menu->CheckMenuItem(ID_VIEW_OUTPUT_CONSOLE, MF_CHECKED);
|
|
|
|
// Init displayer
|
|
ErrorLog->addDisplayer (&Displayer);
|
|
WarningLog->addDisplayer (&Displayer);
|
|
InfoLog->addDisplayer (&Displayer);
|
|
DebugLog->addDisplayer (&Displayer);
|
|
AssertLog->addDisplayer (&Displayer);
|
|
|
|
// JC: added LoadBarState
|
|
LoadBarState("Georges");
|
|
|
|
return 0;
|
|
}
|
|
|
|
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
if( !CMDIFrameWnd::PreCreateWindow(cs) )
|
|
return FALSE;
|
|
|
|
if (createX != -1)
|
|
cs.x = createX;
|
|
if (createY != -1)
|
|
cs.y = createY;
|
|
if (createCX != -1)
|
|
cs.cx = createCX;
|
|
if (createCY != -1)
|
|
cs.cy = createCY;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CMainFrame::AssertValid() const
|
|
{
|
|
CMDIFrameWnd::AssertValid();
|
|
}
|
|
|
|
void CMainFrame::Dump(CDumpContext& dc) const
|
|
{
|
|
CMDIFrameWnd::Dump(dc);
|
|
}
|
|
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMainFrame message handlers
|
|
|
|
|
|
|
|
void CMainFrame::OnSettings()
|
|
{
|
|
if (theApp.Superuser)
|
|
{
|
|
CSettingsDialog dialog (this);
|
|
dialog.DoModal ();
|
|
theApp.OnViewRefresh ();
|
|
}
|
|
}
|
|
|
|
bool CMainFrame::dataToClipboard (UINT format, void *data, uint len)
|
|
{
|
|
// Open the clipboard
|
|
if (OpenClipboard ())
|
|
{
|
|
if (data)
|
|
{
|
|
// Alloc a global memory
|
|
HGLOBAL hData = GlobalAlloc (GMEM_MOVEABLE|GMEM_DDESHARE, len);
|
|
if (hData)
|
|
{
|
|
// Copy the string
|
|
LPVOID dataPtr = GlobalLock (hData);
|
|
nlverify (dataPtr);
|
|
memcpy (dataPtr, data, len);
|
|
|
|
// Release the pointer
|
|
GlobalUnlock (hData);
|
|
|
|
// Set the clipboard
|
|
nlverify (SetClipboardData (format, hData));
|
|
|
|
// Close the clipboard
|
|
CloseClipboard ();
|
|
|
|
// Ok
|
|
return true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Empty the clipboard
|
|
nlverify (EmptyClipboard());
|
|
}
|
|
|
|
|
|
// Close the clipboard
|
|
CloseClipboard ();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool CMainFrame::dataFromClipboard (UINT format, void *data)
|
|
{
|
|
// Open the clipboard
|
|
if (OpenClipboard ())
|
|
{
|
|
// Get the clipboard data
|
|
HANDLE hData = GetClipboardData (format);
|
|
if (hData)
|
|
{
|
|
DWORD len = GlobalSize (hData);
|
|
|
|
// Get the string
|
|
LPVOID dataPtr = GlobalLock (hData);
|
|
nlverify (dataPtr);
|
|
|
|
// Copy the string
|
|
memcpy (data, dataPtr, len);
|
|
|
|
// Close the clipboard
|
|
CloseClipboard ();
|
|
|
|
// Ok
|
|
return true;
|
|
}
|
|
|
|
// Close the clipboard
|
|
CloseClipboard ();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool CMainFrame::clipboardSize (UINT format, uint &size)
|
|
{
|
|
// Open the clipboard
|
|
if (OpenClipboard ())
|
|
{
|
|
// Get the clipboard data
|
|
HANDLE hData = GetClipboardData (format);
|
|
if (hData)
|
|
{
|
|
size = GlobalSize (hData);
|
|
|
|
// Close the clipboard
|
|
CloseClipboard ();
|
|
|
|
// Ok
|
|
return true;
|
|
}
|
|
else
|
|
size = 0;
|
|
|
|
// Close the clipboard
|
|
CloseClipboard ();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void CMainFrame::OnClose()
|
|
{
|
|
if (m_bDontClose) return;
|
|
|
|
if (theApp.SaveAllModified())
|
|
{
|
|
// JC: added save bar state
|
|
SaveBarState("Georges");
|
|
// Save state
|
|
theApp.saveState ();
|
|
|
|
theApp.CloseAllDocuments (TRUE);
|
|
|
|
// Release plugins
|
|
theApp.releasePlugins ();
|
|
|
|
PostQuitMessage(0);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnViewDockingdialogbar()
|
|
{
|
|
CMenu *menu = GetMenu();
|
|
if(menu->GetMenuState(ID_VIEW_DOCKINGDIALOGBAR, MF_BYCOMMAND) & MF_CHECKED)
|
|
{
|
|
ShowControlBar (&FileBrowser, FALSE, FALSE);
|
|
}
|
|
else
|
|
{
|
|
ShowControlBar (&FileBrowser, TRUE, FALSE);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewDockingdialogbar(CCmdUI* pCmdUI)
|
|
{
|
|
if(FileBrowser.IsVisible())
|
|
pCmdUI->SetCheck(TRUE);
|
|
else
|
|
pCmdUI->SetCheck(FALSE);
|
|
}
|
|
|
|
void CMainFrame::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CMDIFrameWnd::OnSize(nType, cx, cy);
|
|
|
|
RecalcLayout ();
|
|
}
|
|
|
|
void CMainFrame::OnViewOutputConsole()
|
|
{
|
|
CMenu *menu = GetMenu();
|
|
if(menu->GetMenuState(ID_VIEW_OUTPUT_CONSOLE, MF_BYCOMMAND) & MF_CHECKED)
|
|
{
|
|
ShowControlBar (&OutputConsole, FALSE, FALSE);
|
|
}
|
|
else
|
|
{
|
|
ShowControlBar (&OutputConsole, TRUE, FALSE);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewOutputConsole(CCmdUI* pCmdUI)
|
|
{
|
|
if(OutputConsole.IsVisible())
|
|
pCmdUI->SetCheck(TRUE);
|
|
else
|
|
pCmdUI->SetCheck(FALSE);
|
|
}
|
|
|
|
void CMainFrame::outputConsoleString (const char *message)
|
|
{
|
|
OutputConsoleDlg.outputString (message);
|
|
}
|
|
|
|
void CMainFrame::OnViewGotoFileBrowser()
|
|
{
|
|
ShowControlBar (&FileBrowser, TRUE, FALSE);
|
|
FileBrowserDlg.SetFocus ();
|
|
}
|
|
|
|
void CMainFrame::OnViewGotoOutputConsole()
|
|
{
|
|
ShowControlBar (&OutputConsole, TRUE, FALSE);
|
|
OutputConsoleDlg.SetFocus ();
|
|
}
|
|
|
|
void CMainFrame::showOutputConsole (bool show)
|
|
{
|
|
ShowControlBar (&OutputConsole, show?TRUE:FALSE, FALSE);
|
|
}
|
|
|
|
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
|
|
{
|
|
// For each plugins
|
|
uint i;
|
|
for (i=0; i<theApp.PluginArray.size (); i++)
|
|
if (theApp.PluginArray[i].Activated && theApp.PluginArray[i].PluginInterface->pretranslateMessage (pMsg))
|
|
return TRUE;
|
|
|
|
return CMDIFrameWnd::PreTranslateMessage(pMsg);
|
|
}
|
|
|
|
void CMainFrame::OnModules0()
|
|
{
|
|
theApp.PluginArray[0].Activated ^= true;
|
|
theApp.PluginArray[0].PluginInterface->activate (theApp.PluginArray[0].Activated);
|
|
CChildFrame *pChild = (CChildFrame*)MDIGetActive ();
|
|
if (pChild)
|
|
{
|
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc *)pChild->GetActiveDocument();
|
|
doc->onActivateView (true);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateModules0(CCmdUI* pCmdUI)
|
|
{
|
|
if (theApp.PluginArray.size () > 0)
|
|
{
|
|
pCmdUI->Enable ();
|
|
string name;
|
|
theApp.PluginArray[0].PluginInterface->getPluginName (name);
|
|
pCmdUI->SetText (name.c_str ());
|
|
pCmdUI->SetCheck (theApp.PluginArray[0].Activated);
|
|
}
|
|
else
|
|
{
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnModules1()
|
|
{
|
|
theApp.PluginArray[1].Activated ^= true;
|
|
theApp.PluginArray[1].PluginInterface->activate (theApp.PluginArray[1].Activated);
|
|
CChildFrame *pChild = (CChildFrame*)MDIGetActive ();
|
|
if (pChild)
|
|
{
|
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc *)pChild->GetActiveDocument();
|
|
doc->onActivateView (true);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateModules1(CCmdUI* pCmdUI)
|
|
{
|
|
if (theApp.PluginArray.size () > 1)
|
|
{
|
|
pCmdUI->Enable ();
|
|
string name;
|
|
theApp.PluginArray[1].PluginInterface->getPluginName (name);
|
|
pCmdUI->SetText (name.c_str ());
|
|
pCmdUI->SetCheck (theApp.PluginArray[1].Activated);
|
|
}
|
|
else
|
|
{
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnModules2()
|
|
{
|
|
theApp.PluginArray[2].Activated ^= true;
|
|
theApp.PluginArray[2].PluginInterface->activate (theApp.PluginArray[2].Activated);
|
|
CChildFrame *pChild = (CChildFrame*)MDIGetActive ();
|
|
if (pChild)
|
|
{
|
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc *)pChild->GetActiveDocument();
|
|
doc->onActivateView (true);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateModules2(CCmdUI* pCmdUI)
|
|
{
|
|
if (theApp.PluginArray.size () > 2)
|
|
{
|
|
pCmdUI->Enable ();
|
|
string name;
|
|
theApp.PluginArray[2].PluginInterface->getPluginName (name);
|
|
pCmdUI->SetText (name.c_str ());
|
|
pCmdUI->SetCheck (theApp.PluginArray[2].Activated);
|
|
}
|
|
else
|
|
{
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnModules3()
|
|
{
|
|
theApp.PluginArray[3].Activated ^= true;
|
|
theApp.PluginArray[3].PluginInterface->activate (theApp.PluginArray[3].Activated);
|
|
CChildFrame *pChild = (CChildFrame*)MDIGetActive ();
|
|
if (pChild)
|
|
{
|
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc *)pChild->GetActiveDocument();
|
|
doc->onActivateView (true);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateModules3(CCmdUI* pCmdUI)
|
|
{
|
|
if (theApp.PluginArray.size () > 3)
|
|
{
|
|
pCmdUI->Enable ();
|
|
string name;
|
|
theApp.PluginArray[3].PluginInterface->getPluginName (name);
|
|
pCmdUI->SetText (name.c_str ());
|
|
pCmdUI->SetCheck (theApp.PluginArray[3].Activated);
|
|
}
|
|
else
|
|
{
|
|
pCmdUI->Enable (FALSE);
|
|
}
|
|
}
|
|
|
|
void CMainFrame::OnUpdateViewSettings(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable (theApp.Superuser);
|
|
}
|
|
|
|
void CMainFrame::OnBrowserSortedByType()
|
|
{
|
|
BrowserSortedByType ^= true;
|
|
FileBrowserDlg.setSortedByType (BrowserSortedByType);
|
|
}
|
|
|
|
void CMainFrame::OnUpdateBrowserSortedByType(CCmdUI* pCmdUI)
|
|
{
|
|
if(BrowserSortedByType)
|
|
pCmdUI->SetCheck(TRUE);
|
|
else
|
|
pCmdUI->SetCheck(FALSE);
|
|
}
|