237 lines
5.6 KiB
C++
237 lines
5.6 KiB
C++
// CommandBarsDesignerDoc.cpp : implementation of the CCommandBarsDesignerDoc class
|
|
//
|
|
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
|
|
// (c)1998-2008 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
#include "CommandBarsDesigner.h"
|
|
|
|
#include "CommandBarsDesignerDoc.h"
|
|
#include "CommandBarsDesignerView.h"
|
|
|
|
#include "EmbeddedFrame.h"
|
|
#include "MainFrm.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
const UINT WM_FILEDATA_RENDER = RegisterWindowMessage(_T("XCB File Data Render"));
|
|
const UINT m_cfFormat = RegisterClipboardFormat(_T("XCB File Data"));
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCommandBarsDesignerDoc
|
|
|
|
IMPLEMENT_DYNCREATE(CCommandBarsDesignerDoc, CDocument)
|
|
|
|
BEGIN_MESSAGE_MAP(CCommandBarsDesignerDoc, CDocument)
|
|
//{{AFX_MSG_MAP(CCommandBarsDesignerDoc)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
// DO NOT EDIT what you see in these blocks of generated code!
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
BEGIN_DISPATCH_MAP(CCommandBarsDesignerDoc, CDocument)
|
|
//{{AFX_DISPATCH_MAP(CCommandBarsDesignerDoc)
|
|
DISP_FUNCTION(CCommandBarsDesignerDoc, "OnEdit", OnEdit, VT_BOOL, VTS_HANDLE)
|
|
//}}AFX_DISPATCH_MAP
|
|
END_DISPATCH_MAP()
|
|
|
|
// Note: we add support for IID_ICommandBarsDesigner to support typesafe binding
|
|
// from VBA. This IID must match the GUID that is attached to the
|
|
// dispinterface in the .ODL file.
|
|
|
|
// {157FA069-D75C-4E71-A537-7C86F65FB7E9}
|
|
static const IID IID_ICommandBarsDesigner =
|
|
{ 0x157fa069, 0xd75c, 0x4e71, { 0xa5, 0x37, 0x7c, 0x86, 0xf6, 0x5f, 0xb7, 0xe9 } };
|
|
|
|
BEGIN_INTERFACE_MAP(CCommandBarsDesignerDoc, CDocument)
|
|
INTERFACE_PART(CCommandBarsDesignerDoc, IID_ICommandBarsDesigner, Dispatch)
|
|
END_INTERFACE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCommandBarsDesignerDoc construction/destruction
|
|
|
|
CCommandBarsDesignerDoc::CCommandBarsDesignerDoc()
|
|
{
|
|
m_hwndEdit = 0;
|
|
|
|
EnableAutomation();
|
|
|
|
AfxOleLockApp();
|
|
}
|
|
|
|
CCommandBarsDesignerDoc::~CCommandBarsDesignerDoc()
|
|
{
|
|
AfxOleUnlockApp();
|
|
}
|
|
|
|
BOOL CCommandBarsDesignerDoc::OnNewDocument()
|
|
{
|
|
if (!CDocument::OnNewDocument())
|
|
return FALSE;
|
|
|
|
// TODO: add reinitialization code here
|
|
// (SDI documents will reuse this document)
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCommandBarsDesignerDoc serialization
|
|
|
|
void CCommandBarsDesignerDoc::Serialize(CArchive& ar)
|
|
{
|
|
|
|
POSITION pos = GetFirstViewPosition();
|
|
if (pos)
|
|
{
|
|
CCommandBarsDesignerView* pView = (CCommandBarsDesignerView*)GetNextView(pos);
|
|
ASSERT(pView);
|
|
pView->Serialize(ar);
|
|
}
|
|
|
|
if (ar.IsStoring())
|
|
{
|
|
// TODO: add storing code here
|
|
}
|
|
else
|
|
{
|
|
// TODO: add loading code here
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCommandBarsDesignerDoc diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CCommandBarsDesignerDoc::AssertValid() const
|
|
{
|
|
CDocument::AssertValid();
|
|
}
|
|
|
|
void CCommandBarsDesignerDoc::Dump(CDumpContext& dc) const
|
|
{
|
|
CDocument::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CCommandBarsDesignerDoc commands
|
|
|
|
BOOL CCommandBarsDesignerDoc::OnEdit(HWND hWnd)
|
|
{
|
|
ASSERT(m_bEmbedded);
|
|
|
|
m_hwndEdit = hWnd;
|
|
|
|
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
|
|
pMainFrame->ShowWindow(SW_SHOW);
|
|
pMainFrame->UpdateWindow();
|
|
|
|
POSITION pos = GetFirstViewPosition();
|
|
CCommandBarsDesignerView* pView = (CCommandBarsDesignerView*)GetNextView(pos);
|
|
pView->GetParent()->ShowWindow(SW_SHOWMAXIMIZED);
|
|
|
|
if (!OpenClipboard(hWnd))
|
|
return FALSE;
|
|
|
|
if (::IsClipboardFormatAvailable(m_cfFormat))
|
|
{
|
|
HGLOBAL hGlobal = GetClipboardData (m_cfFormat);
|
|
LPVOID pData = GlobalLock(hGlobal);
|
|
|
|
CMemFile file((BYTE*)pData + sizeof(DWORD), *(DWORD*)pData);
|
|
CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);
|
|
Serialize(ar);
|
|
|
|
GlobalUnlock(hGlobal);
|
|
}
|
|
else
|
|
{
|
|
pView->GetEmbeddedFrame()->Clear();
|
|
}
|
|
::CloseClipboard();
|
|
|
|
pView->OnInitialUpdate();
|
|
pMainFrame->RefreshPanes(TRUE);
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL CCommandBarsDesignerDoc::DoFileSave()
|
|
{
|
|
if (m_bEmbedded)
|
|
{
|
|
ASSERT(m_hwndEdit);
|
|
|
|
m_bModified = FALSE;
|
|
|
|
CMemFile file;
|
|
CArchive ar(&file, CArchive::store);
|
|
|
|
Serialize(ar);
|
|
|
|
ar.Flush();
|
|
DWORD dwSize = (DWORD)file.GetPosition();
|
|
BYTE* pFileData = file.Detach();
|
|
|
|
HGLOBAL hDesignerData = GlobalAlloc(GMEM_FIXED, dwSize + sizeof(DWORD));
|
|
|
|
LPVOID pData = GlobalLock(hDesignerData);
|
|
*((DWORD*)pData) = dwSize;
|
|
|
|
memcpy((BYTE*)pData + sizeof(DWORD), pFileData, dwSize);
|
|
GlobalUnlock(hDesignerData);
|
|
|
|
ar.Abort();
|
|
file.Close();
|
|
|
|
if (!::OpenClipboard (0))
|
|
return TRUE;
|
|
|
|
if (!::EmptyClipboard ())
|
|
{
|
|
::CloseClipboard ();
|
|
return TRUE;
|
|
}
|
|
|
|
UINT uFormat = RegisterClipboardFormat(_T("XCB File Data"));
|
|
SetClipboardData(uFormat, hDesignerData);
|
|
|
|
::CloseClipboard();
|
|
|
|
SendMessage(m_hwndEdit, WM_FILEDATA_RENDER, 0, 0);
|
|
|
|
if (AfxGetMainWnd() && AfxGetMainWnd()->GetSafeHwnd())
|
|
{
|
|
AfxGetMainWnd()->PostMessage(WM_CLOSE);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
return CDocument::DoFileSave();
|
|
|
|
}
|