719 lines
19 KiB
C++
719 lines
19 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/>.
|
||
|
|
||
|
/* Copyright, 2000 Nevrax Ltd.
|
||
|
*
|
||
|
* This file is part of NEVRAX NEL.
|
||
|
* NEVRAX NEL is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2, or (at your option)
|
||
|
* any later version.
|
||
|
|
||
|
* NEVRAX NEL 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 NEVRAX NEL; see the file COPYING. If not, write to the
|
||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||
|
* MA 02111-1307, USA.
|
||
|
*/
|
||
|
|
||
|
//
|
||
|
|
||
|
#include "stdafx.h"
|
||
|
#include "georges_edit.h"
|
||
|
|
||
|
#include "georges_edit_doc.h"
|
||
|
#include "georges_edit_view.h"
|
||
|
#include "left_view.h"
|
||
|
|
||
|
using namespace NLGEORGES;
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CGeorgesEditView
|
||
|
|
||
|
IMPLEMENT_DYNCREATE(CGeorgesEditView, CScrollView)
|
||
|
|
||
|
BEGIN_MESSAGE_MAP(CGeorgesEditView, CScrollView)
|
||
|
//{{AFX_MSG_MAP(CGeorgesEditView)
|
||
|
ON_WM_SIZE()
|
||
|
ON_WM_SETFOCUS()
|
||
|
ON_COMMAND(ID_OPEN_SELECTED, OnOpenSelected)
|
||
|
ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
|
||
|
ON_COMMAND(ID_EDIT_CUT, OnEditCut)
|
||
|
ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
|
||
|
ON_WM_MOUSEWHEEL()
|
||
|
ON_WM_KEYDOWN()
|
||
|
ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
|
||
|
ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo)
|
||
|
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
|
||
|
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
|
||
|
ON_COMMAND(ID_EDIT_FETCH1, OnEditFetch1)
|
||
|
ON_COMMAND(ID_EDIT_FETCH2, OnEditFetch2)
|
||
|
ON_COMMAND(ID_EDIT_FETCH3, OnEditFetch3)
|
||
|
ON_COMMAND(ID_EDIT_FETCH4, OnEditFetch4)
|
||
|
ON_COMMAND(ID_EDIT_HOLD1, OnEditHold1)
|
||
|
ON_COMMAND(ID_EDIT_HOLD2, OnEditHold2)
|
||
|
ON_COMMAND(ID_EDIT_HOLD3, OnEditHold3)
|
||
|
ON_COMMAND(ID_EDIT_HOLD4, OnEditHold4)
|
||
|
//}}AFX_MSG_MAP
|
||
|
END_MESSAGE_MAP()
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CGeorgesEditView construction/destruction
|
||
|
|
||
|
CGeorgesEditView::CGeorgesEditView()
|
||
|
{
|
||
|
VirtualWidth = 100;
|
||
|
VirtualHeight = 100;
|
||
|
}
|
||
|
|
||
|
CGeorgesEditView::~CGeorgesEditView()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
BOOL CGeorgesEditView::PreCreateWindow(CREATESTRUCT& cs)
|
||
|
{
|
||
|
// TODO: Modify the Window class or styles here by modifying
|
||
|
// the CREATESTRUCT cs
|
||
|
|
||
|
return CScrollView::PreCreateWindow(cs);
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CGeorgesEditView drawing
|
||
|
|
||
|
void CGeorgesEditView::OnDraw(CDC* pDC)
|
||
|
{
|
||
|
CGeorgesEditDoc* pDoc = GetDocument();
|
||
|
ASSERT_VALID(pDoc);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnInitialUpdate()
|
||
|
{
|
||
|
CScrollView::OnInitialUpdate();
|
||
|
|
||
|
// its list control through a call to GetListCtrl().
|
||
|
CGeorgesEditDoc* pDoc = GetDocument();
|
||
|
|
||
|
// Save modified state
|
||
|
pDoc->NoModification = true;
|
||
|
|
||
|
SIZE size;
|
||
|
size.cx = VirtualWidth;
|
||
|
size.cy = VirtualHeight;
|
||
|
SetScrollSizes (MM_TEXT, size);
|
||
|
|
||
|
RECT rect;
|
||
|
GetClientRect (&rect);
|
||
|
|
||
|
// Create the tab
|
||
|
TabCtrl.Create (WS_VISIBLE, rect, this, 0);
|
||
|
TabCtrl.SetImageList (&(theApp.ImageList.ImageList));
|
||
|
TabCtrl.SetWindowPos (NULL, 0, 0, std::max ((int)VirtualWidth, (int)(rect.right-rect.left)), std::max ((int)VirtualHeight, (int)(rect.bottom-rect.top)), SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Update the tab
|
||
|
updateTab ();
|
||
|
|
||
|
// Create the type dialog
|
||
|
RECT tabClient;
|
||
|
TabCtrl.GetClientRect (&tabClient);
|
||
|
TypeDialog.View = this;
|
||
|
TypeDialog.Create (CBaseDialog::IDD, &TabCtrl);
|
||
|
TypeDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin, tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Create the header dialog
|
||
|
HeaderDialog.View = this;
|
||
|
HeaderDialog.Create (CBaseDialog::IDD, &TabCtrl);
|
||
|
HeaderDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin, tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Create the dfn dialog
|
||
|
DfnDialog.View = this;
|
||
|
DfnDialog.Create (CBaseDialog::IDD, &TabCtrl);
|
||
|
DfnDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin, tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Create the dfn dialog
|
||
|
FormDialog.View = this;
|
||
|
FormDialog.Create (CBaseDialog::IDD, &TabCtrl);
|
||
|
FormDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin, tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Set tab font
|
||
|
CFont* font = TypeDialog.GetFont ();
|
||
|
TabCtrl.SetFont (font);
|
||
|
TabCtrl.ShowWindow (SW_SHOW);
|
||
|
|
||
|
// Update document
|
||
|
updateDocument ();
|
||
|
|
||
|
// Save modified state
|
||
|
pDoc->NoModification = false;
|
||
|
|
||
|
// Is it a form ?
|
||
|
theApp.onNewDocView (pDoc);
|
||
|
|
||
|
// Notify the doc plugin
|
||
|
uint i;
|
||
|
CGeorgesEditDocSub *selection = pDoc->getSelectedObject ();
|
||
|
for (i=0; i<pDoc->PluginArray.size (); i++)
|
||
|
{
|
||
|
// Activate / desactivate plugin
|
||
|
pDoc->PluginArray[i].PluginInterface->onNodeChanged ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CGeorgesEditView diagnostics
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
void CGeorgesEditView::AssertValid() const
|
||
|
{
|
||
|
CScrollView::AssertValid();
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::Dump(CDumpContext& dc) const
|
||
|
{
|
||
|
CScrollView::Dump(dc);
|
||
|
}
|
||
|
|
||
|
CGeorgesEditDoc* CGeorgesEditView::GetDocument() // non-debug version is inline
|
||
|
{
|
||
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGeorgesEditDocType)) ||
|
||
|
m_pDocument->IsKindOf(RUNTIME_CLASS(CGeorgesEditDocDfn)) ||
|
||
|
m_pDocument->IsKindOf(RUNTIME_CLASS(CGeorgesEditDocForm)));
|
||
|
return (CGeorgesEditDoc*)m_pDocument;
|
||
|
}
|
||
|
#endif //_DEBUG
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CGeorgesEditView message handlers
|
||
|
void CGeorgesEditView::OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct)
|
||
|
{
|
||
|
//TODO: add code to react to the user changing the view style of your window
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnSize(UINT nType, int cx, int cy)
|
||
|
{
|
||
|
CScrollView::OnSize(nType, cx, cy);
|
||
|
|
||
|
UpdateData ();
|
||
|
|
||
|
if (IsWindow (TabCtrl))
|
||
|
{
|
||
|
CPoint currentPos = GetDeviceScrollPosition ();
|
||
|
|
||
|
RECT rect;
|
||
|
GetClientRect (&rect);
|
||
|
|
||
|
if (IsWindow (TypeDialog) && TypeDialog.IsWindowVisible ())
|
||
|
{
|
||
|
TypeDialog.resizeWidgets ();
|
||
|
}
|
||
|
|
||
|
// Resize header dialog
|
||
|
if (IsWindow (HeaderDialog) && HeaderDialog.IsWindowVisible ())
|
||
|
{
|
||
|
HeaderDialog.resizeWidgets ();
|
||
|
}
|
||
|
|
||
|
// Resize dfn dialog
|
||
|
if (IsWindow (DfnDialog) && DfnDialog.IsWindowVisible ())
|
||
|
{
|
||
|
DfnDialog.resizeWidgets ();
|
||
|
}
|
||
|
|
||
|
// Resize dfn dialog
|
||
|
if (IsWindow (FormDialog) && FormDialog.IsWindowVisible ())
|
||
|
{
|
||
|
FormDialog.resizeWidgets ();
|
||
|
}
|
||
|
|
||
|
// Create the tab
|
||
|
TabCtrl.SetWindowPos (NULL, -currentPos.x, -currentPos.y, std::max ((int)VirtualWidth, (int)(rect.right-rect.left)), std::max ((int)VirtualHeight, (int)(rect.bottom-rect.top)), SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Resize type dialog
|
||
|
RECT tabClient;
|
||
|
TabCtrl.GetClientRect (&tabClient);
|
||
|
|
||
|
// Resize type dialog
|
||
|
if (IsWindow (TypeDialog))
|
||
|
{
|
||
|
TypeDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin,
|
||
|
tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
}
|
||
|
|
||
|
// Resize header dialog
|
||
|
if (IsWindow (HeaderDialog))
|
||
|
{
|
||
|
HeaderDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin,
|
||
|
tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
}
|
||
|
|
||
|
// Resize dfn dialog
|
||
|
if (IsWindow (DfnDialog))
|
||
|
DfnDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin,
|
||
|
tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
|
||
|
// Resize dfn dialog
|
||
|
if (IsWindow (FormDialog))
|
||
|
FormDialog.SetWindowPos (NULL, WidgetLeftMargin, WidgetTopMargin, tabClient.right - tabClient.left - WidgetLeftMargin - WidgetRightMargin,
|
||
|
tabClient.bottom - tabClient.top - WidgetTopMargin - WidgetBottomMargin, SWP_NOZORDER|SWP_NOOWNERZORDER);
|
||
|
}
|
||
|
|
||
|
UpdateData (FALSE);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
|
||
|
{
|
||
|
// Not me ?
|
||
|
if (pSender != this)
|
||
|
{
|
||
|
// Update
|
||
|
updateTab ();
|
||
|
updateDocument ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::updateTab ()
|
||
|
{
|
||
|
if (IsWindow (TabCtrl))
|
||
|
{
|
||
|
// Clear the tab
|
||
|
TabCtrl.DeleteAllItems ();
|
||
|
|
||
|
CGeorgesEditDoc *doc = GetDocument();
|
||
|
if (doc)
|
||
|
{
|
||
|
// Current selection
|
||
|
CGeorgesEditDocSub *subObject = doc->getSelectedObject ();
|
||
|
if (subObject)
|
||
|
{
|
||
|
// Get parent
|
||
|
CGeorgesEditDocSub *parent = subObject->getParent ();
|
||
|
if (parent)
|
||
|
{
|
||
|
// For each subobject
|
||
|
int tabSelected = -1;
|
||
|
for (uint i=0; i<parent->getChildrenCount(); i++)
|
||
|
{
|
||
|
// Init the tab
|
||
|
CGeorgesEditDocSub *child = parent->getChild (i);
|
||
|
int image = child->getItemImage (doc);
|
||
|
TabCtrl.InsertItem (i, child->getName ().c_str(), image);
|
||
|
|
||
|
// This is the selection ?
|
||
|
if (subObject == child)
|
||
|
tabSelected = i;
|
||
|
}
|
||
|
|
||
|
// Should be found
|
||
|
nlassert (tabSelected!=-1)
|
||
|
TabCtrl.SetCurSel (tabSelected);
|
||
|
|
||
|
UpdateData (FALSE);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::updateDocument ()
|
||
|
{
|
||
|
if (IsWindow (TabCtrl) && IsWindow (DfnDialog) && IsWindow (TypeDialog) && IsWindow (FormDialog) && IsWindow (HeaderDialog) )
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = GetDocument();
|
||
|
if (doc)
|
||
|
{
|
||
|
// Hide all the window
|
||
|
TypeDialog.ShowWindow (SW_HIDE);
|
||
|
HeaderDialog.ShowWindow (SW_HIDE);
|
||
|
DfnDialog.ShowWindow (SW_HIDE);
|
||
|
FormDialog.ShowWindow (SW_HIDE);
|
||
|
|
||
|
// Current selection
|
||
|
CGeorgesEditDocSub *subObject = doc->getSelectedObject ();
|
||
|
if (subObject)
|
||
|
{
|
||
|
switch (subObject->getType ())
|
||
|
{
|
||
|
case CGeorgesEditDocSub::Type:
|
||
|
{
|
||
|
// Get the document
|
||
|
TypeDialog.getFromDocument (*doc->getTypePtr ());
|
||
|
|
||
|
// Show the window
|
||
|
TypeDialog.resizeWidgets ();
|
||
|
TypeDialog.ShowWindow (SW_SHOW);
|
||
|
}
|
||
|
break;
|
||
|
case CGeorgesEditDocSub::Header:
|
||
|
{
|
||
|
// Get the document
|
||
|
HeaderDialog.getFromDocument (*doc->getHeaderPtr ());
|
||
|
|
||
|
// Show the window
|
||
|
HeaderDialog.resizeWidgets ();
|
||
|
HeaderDialog.ShowWindow (SW_SHOW);
|
||
|
}
|
||
|
break;
|
||
|
case CGeorgesEditDocSub::Dfn:
|
||
|
{
|
||
|
// Get the document
|
||
|
DfnDialog.getFromDocument (*doc->getDfnPtr ());
|
||
|
|
||
|
// Show the window
|
||
|
DfnDialog.resizeWidgets ();
|
||
|
DfnDialog.ShowWindow (SW_SHOW);
|
||
|
}
|
||
|
break;
|
||
|
case CGeorgesEditDocSub::Form:
|
||
|
{
|
||
|
// Get the document
|
||
|
FormDialog.getFromDocument ();
|
||
|
|
||
|
// Show the window
|
||
|
FormDialog.resizeWidgets ();
|
||
|
FormDialog.ShowWindow (SW_SHOW);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL CGeorgesEditView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
|
||
|
{
|
||
|
LPNMHDR pnmh = (LPNMHDR) lParam;
|
||
|
switch (pnmh->code)
|
||
|
{
|
||
|
case TCN_SELCHANGE:
|
||
|
{
|
||
|
UpdateData ();
|
||
|
|
||
|
// Get the document
|
||
|
CGeorgesEditDoc *doc = GetDocument();
|
||
|
if (doc)
|
||
|
{
|
||
|
// Current selection
|
||
|
CGeorgesEditDocSub *subObject = doc->getSelectedObject ();
|
||
|
if (subObject)
|
||
|
{
|
||
|
// Get parent
|
||
|
CGeorgesEditDocSub *parent = subObject->getParent ();
|
||
|
if (parent)
|
||
|
{
|
||
|
// Get the child
|
||
|
CGeorgesEditDocSub *child = parent->getChild (TabCtrl.GetCurSel ());
|
||
|
|
||
|
// Sub selection changed
|
||
|
CLeftView* pView = doc->getLeftView ();
|
||
|
doc->changeSubSelection (child, pView);
|
||
|
TabCtrl.SetFocus ();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
return CScrollView::OnNotify(wParam, lParam, pResult);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnSetFocus(CWnd* pOldWnd)
|
||
|
{
|
||
|
CScrollView::OnSetFocus(pOldWnd);
|
||
|
|
||
|
TabCtrl.UpdateData ();
|
||
|
if ( (TabCtrl.GetItemCount ()) && (pOldWnd != &TabCtrl) )
|
||
|
{
|
||
|
TabCtrl.SetFocus ();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (TypeDialog.IsWindowVisible ())
|
||
|
TypeDialog.SetFocus ();
|
||
|
if (HeaderDialog.IsWindowVisible ())
|
||
|
HeaderDialog.SetFocus ();
|
||
|
if (DfnDialog.IsWindowVisible ())
|
||
|
DfnDialog.SetFocus ();
|
||
|
if (FormDialog.IsWindowVisible ())
|
||
|
FormDialog.SetFocus ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL CGeorgesEditView::PreTranslateMessage(MSG* pMsg)
|
||
|
{
|
||
|
if (theApp.m_pMainWnd->PreTranslateMessage(pMsg))
|
||
|
return TRUE;
|
||
|
|
||
|
if ((pMsg->message == WM_KEYDOWN) && ((int) pMsg->wParam == VK_TAB) )
|
||
|
{
|
||
|
// Shift ?
|
||
|
if (GetAsyncKeyState (VK_SHIFT) & (1<<15))
|
||
|
setFocusLeftView ();
|
||
|
else
|
||
|
SetFocus ();
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
return CScrollView::PreTranslateMessage(pMsg);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnOpenSelected()
|
||
|
{
|
||
|
if (HeaderDialog.IsWindowVisible ())
|
||
|
{
|
||
|
HeaderDialog.onOpenSelected ();
|
||
|
}
|
||
|
if (TypeDialog.IsWindowVisible ())
|
||
|
{
|
||
|
TypeDialog.onOpenSelected ();
|
||
|
}
|
||
|
if (DfnDialog.IsWindowVisible ())
|
||
|
{
|
||
|
DfnDialog.onOpenSelected ();
|
||
|
}
|
||
|
if (FormDialog.IsWindowVisible ())
|
||
|
{
|
||
|
FormDialog.onOpenSelected ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::setFocusLastWidget ()
|
||
|
{
|
||
|
if (HeaderDialog.IsWindowVisible ())
|
||
|
{
|
||
|
HeaderDialog.setFocusLastWidget ();
|
||
|
}
|
||
|
if (TypeDialog.IsWindowVisible ())
|
||
|
{
|
||
|
TypeDialog.setFocusLastWidget ();
|
||
|
}
|
||
|
if (DfnDialog.IsWindowVisible ())
|
||
|
{
|
||
|
DfnDialog.setFocusLastWidget ();
|
||
|
}
|
||
|
if (FormDialog.IsWindowVisible ())
|
||
|
{
|
||
|
FormDialog.setFocusLastWidget ();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool CGeorgesEditView::isFocusable () const
|
||
|
{
|
||
|
return (HeaderDialog.IsWindowVisible () || TypeDialog.IsWindowVisible () || DfnDialog.IsWindowVisible () || FormDialog.IsWindowVisible ());
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::setFocusLeftView ()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
CLeftView* pView = doc->getLeftView ();
|
||
|
doc->switchToView (pView);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
LRESULT CGeorgesEditView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{
|
||
|
// When this message arrive, update the view
|
||
|
if (message == WM_UPDATE_ALL_VIEWS)
|
||
|
GetDocument ()->UpdateAllViews (NULL);
|
||
|
|
||
|
return CScrollView::WindowProc(message, wParam, lParam);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditCopy()
|
||
|
{
|
||
|
CWnd *focus = GetFocus ();
|
||
|
if (focus)
|
||
|
focus->SendMessage (WM_COPY);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditCut()
|
||
|
{
|
||
|
CWnd *focus = GetFocus ();
|
||
|
if (focus)
|
||
|
focus->SendMessage (WM_CUT);
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditPaste()
|
||
|
{
|
||
|
CWnd *focus = GetFocus ();
|
||
|
if (focus)
|
||
|
focus->SendMessage (WM_PASTE);
|
||
|
}
|
||
|
/*
|
||
|
void CGeorgesEditView::OnEditUndo()
|
||
|
{
|
||
|
CWnd *focus = GetFocus ();
|
||
|
if (focus)
|
||
|
focus->SendMessage (WM_UNDO);
|
||
|
}
|
||
|
*/
|
||
|
void CGeorgesEditView::setViewSize (uint width, uint height)
|
||
|
{
|
||
|
VirtualWidth = width;
|
||
|
VirtualHeight = height;
|
||
|
SIZE size;
|
||
|
size.cx = VirtualWidth;
|
||
|
size.cy = VirtualHeight;
|
||
|
SetScrollSizes (MM_TEXT, size);
|
||
|
}
|
||
|
|
||
|
BOOL CGeorgesEditView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
|
||
|
{
|
||
|
int nMapMode;
|
||
|
SIZE sizeTotal;
|
||
|
SIZE sizePage;
|
||
|
SIZE sizeLine;
|
||
|
GetDeviceScrollSizes( nMapMode, sizeTotal, sizePage, sizeLine );
|
||
|
|
||
|
RECT rect;
|
||
|
GetClientRect (&rect);
|
||
|
if (rect.bottom < sizeTotal.cy)
|
||
|
{
|
||
|
CPoint currentPos = GetDeviceScrollPosition ();
|
||
|
currentPos.y -= zDelta;
|
||
|
ScrollToPosition( currentPos );
|
||
|
}
|
||
|
|
||
|
return CScrollView::OnMouseWheel(nFlags, zDelta, pt);
|
||
|
}
|
||
|
|
||
|
|
||
|
void CGeorgesEditView::OnEditRedo()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
doc->OnEditRedo();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnUpdateEditRedo(CCmdUI* pCmdUI)
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnUpdateEditRedo(pCmdUI) ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditUndo()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditUndo();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnUpdateEditUndo(CCmdUI* pCmdUI)
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnUpdateEditUndo(pCmdUI) ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditFetch1()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditFetch1();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditFetch2()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditFetch2();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditFetch3()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditFetch3();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditFetch4()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditFetch4();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditHold1()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditHold1();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditHold2()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditHold2();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditHold3()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditHold3();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void CGeorgesEditView::OnEditHold4()
|
||
|
{
|
||
|
CGeorgesEditDoc *doc = (CGeorgesEditDoc*)GetDocument( );
|
||
|
if (doc)
|
||
|
{
|
||
|
if (doc->isForm ())
|
||
|
((CGeorgesEditDocForm*)doc)->OnEditHold4();
|
||
|
}
|
||
|
}
|