293 lines
7.7 KiB
C++
293 lines
7.7 KiB
C++
|
|
// drawdoc.cpp : implementation of the CDrawDoc 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 "drawcli.h"
|
||
|
|
|
||
|
|
#include "drawdoc.h"
|
||
|
|
#include "drawvw.h"
|
||
|
|
#include "drawobj.h"
|
||
|
|
#include "cntritem.h"
|
||
|
|
#include "summpage.h"
|
||
|
|
#include "statpage.h"
|
||
|
|
|
||
|
|
#ifdef _DEBUG
|
||
|
|
#undef THIS_FILE
|
||
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
||
|
|
#endif
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CDrawDoc
|
||
|
|
|
||
|
|
IMPLEMENT_DYNCREATE(CDrawDoc, COleDocument)
|
||
|
|
|
||
|
|
BEGIN_MESSAGE_MAP(CDrawDoc, COleDocument)
|
||
|
|
//{{AFX_MSG_MAP(CDrawDoc)
|
||
|
|
ON_COMMAND(ID_VIEW_PAPERCOLOR, OnViewPaperColor)
|
||
|
|
ON_COMMAND(ID_FILE_SUMMARYINFO, OnFileSummaryInfo)
|
||
|
|
//}}AFX_MSG_MAP
|
||
|
|
// Enable default OLE container implementation
|
||
|
|
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, COleDocument::OnUpdatePasteMenu)
|
||
|
|
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_LINK, COleDocument::OnUpdatePasteLinkMenu)
|
||
|
|
ON_UPDATE_COMMAND_UI(ID_OLE_EDIT_LINKS, COleDocument::OnUpdateEditLinksMenu)
|
||
|
|
ON_COMMAND(ID_OLE_EDIT_LINKS, COleDocument::OnEditLinks)
|
||
|
|
ON_UPDATE_COMMAND_UI(ID_OLE_VERB_FIRST, COleDocument::OnUpdateObjectVerbMenu)
|
||
|
|
// MAPI support
|
||
|
|
ON_COMMAND(ID_FILE_SEND_MAIL, OnFileSendMail)
|
||
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_SEND_MAIL, OnUpdateFileSendMail)
|
||
|
|
END_MESSAGE_MAP()
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CDrawDoc construction/destruction
|
||
|
|
|
||
|
|
CDrawDoc::CDrawDoc()
|
||
|
|
{
|
||
|
|
EnableCompoundFile();
|
||
|
|
|
||
|
|
m_nMapMode = MM_ANISOTROPIC;
|
||
|
|
m_paperColor = RGB(255, 255, 255);
|
||
|
|
m_pSummInfo = NULL;
|
||
|
|
ComputePageSize();
|
||
|
|
}
|
||
|
|
|
||
|
|
CDrawDoc::~CDrawDoc()
|
||
|
|
{
|
||
|
|
POSITION pos = m_objects.GetHeadPosition();
|
||
|
|
while (pos != NULL)
|
||
|
|
delete m_objects.GetNext(pos);
|
||
|
|
delete m_pSummInfo;
|
||
|
|
}
|
||
|
|
|
||
|
|
BOOL CDrawDoc::OnNewDocument()
|
||
|
|
{
|
||
|
|
if (!COleDocument::OnNewDocument())
|
||
|
|
return FALSE;
|
||
|
|
|
||
|
|
// reinitialization code
|
||
|
|
// (SDI documents will reuse this document)
|
||
|
|
if(m_pSummInfo != NULL)
|
||
|
|
delete m_pSummInfo;
|
||
|
|
m_pSummInfo = new CSummInfo;
|
||
|
|
// Title, Subject, Author, Keywords default to empty string
|
||
|
|
// Comments, Template, SavedBy default to empty string
|
||
|
|
// LastSave, LastPrint, EditTime, RevNum default to 0
|
||
|
|
m_pSummInfo->StartEditTimeCount();
|
||
|
|
m_pSummInfo->RecordCreateDate();
|
||
|
|
m_pSummInfo->SetNumPages(1);
|
||
|
|
// NumWords, NumChars default to 0
|
||
|
|
m_pSummInfo->SetAppname( _T("DrawCli") );
|
||
|
|
// Security defaults to 0
|
||
|
|
return TRUE;
|
||
|
|
}
|
||
|
|
|
||
|
|
BOOL CDrawDoc::OnOpenDocument(LPCTSTR lpszPathName)
|
||
|
|
{
|
||
|
|
if( m_pSummInfo != NULL)
|
||
|
|
delete m_pSummInfo;
|
||
|
|
m_pSummInfo = new CSummInfo;
|
||
|
|
m_pSummInfo->StartEditTimeCount();
|
||
|
|
return COleDocument::OnOpenDocument(lpszPathName);
|
||
|
|
}
|
||
|
|
|
||
|
|
BOOL CDrawDoc::OnSaveDocument(LPCTSTR lpszPathName)
|
||
|
|
{
|
||
|
|
m_pSummInfo->RecordSaveDate();
|
||
|
|
m_pSummInfo->IncrRevNum();
|
||
|
|
m_pSummInfo->SetLastAuthor(m_pSummInfo->GetAuthor());
|
||
|
|
m_pSummInfo->AddCountToEditTime();
|
||
|
|
m_pSummInfo->StartEditTimeCount();
|
||
|
|
return COleDocument::OnSaveDocument(lpszPathName);
|
||
|
|
}
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CDrawDoc serialization
|
||
|
|
|
||
|
|
void CDrawDoc::Serialize(CArchive& ar)
|
||
|
|
{
|
||
|
|
if (ar.IsStoring())
|
||
|
|
{
|
||
|
|
ar << m_paperColor;
|
||
|
|
m_objects.Serialize(ar);
|
||
|
|
m_pSummInfo->WriteToStorage(m_lpRootStg);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
ar >> m_paperColor;
|
||
|
|
m_objects.Serialize(ar);
|
||
|
|
m_pSummInfo->ReadFromStorage(m_lpRootStg);
|
||
|
|
}
|
||
|
|
|
||
|
|
// By calling the base class COleDocument, we enable serialization
|
||
|
|
// of the container document's COleClientItem objects automatically.
|
||
|
|
COleDocument::Serialize(ar);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CDrawDoc implementation
|
||
|
|
|
||
|
|
void CDrawDoc::Draw(CDC* pDC, CDrawView* pView)
|
||
|
|
{
|
||
|
|
POSITION pos = m_objects.GetHeadPosition();
|
||
|
|
while (pos != NULL)
|
||
|
|
{
|
||
|
|
CDrawObj* pObj = m_objects.GetNext(pos);
|
||
|
|
pObj->Draw(pDC);
|
||
|
|
if (pView->m_bActive && !pDC->IsPrinting() && pView->IsSelected(pObj))
|
||
|
|
pObj->DrawTracker(pDC, CDrawObj::selected);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void CDrawDoc::Add(CDrawObj* pObj)
|
||
|
|
{
|
||
|
|
m_objects.AddTail(pObj);
|
||
|
|
pObj->m_pDocument = this;
|
||
|
|
SetModifiedFlag();
|
||
|
|
}
|
||
|
|
|
||
|
|
void CDrawDoc::Remove(CDrawObj* pObj)
|
||
|
|
{
|
||
|
|
// Find and remove from document
|
||
|
|
POSITION pos = m_objects.Find(pObj);
|
||
|
|
if (pos != NULL)
|
||
|
|
m_objects.RemoveAt(pos);
|
||
|
|
// set document modified flag
|
||
|
|
SetModifiedFlag();
|
||
|
|
|
||
|
|
// call remove for each view so that the view can remove from m_selection
|
||
|
|
pos = GetFirstViewPosition();
|
||
|
|
while (pos != NULL)
|
||
|
|
((CDrawView*)GetNextView(pos))->Remove(pObj);
|
||
|
|
}
|
||
|
|
|
||
|
|
// point is in logical coordinates
|
||
|
|
CDrawObj* CDrawDoc::ObjectAt(const CPoint& point)
|
||
|
|
{
|
||
|
|
CRect rect(point, CSize(1, 1));
|
||
|
|
POSITION pos = m_objects.GetTailPosition();
|
||
|
|
while (pos != NULL)
|
||
|
|
{
|
||
|
|
CDrawObj* pObj = m_objects.GetPrev(pos);
|
||
|
|
if (pObj->Intersects(rect))
|
||
|
|
return pObj;
|
||
|
|
}
|
||
|
|
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
void CDrawDoc::ComputePageSize()
|
||
|
|
{
|
||
|
|
CSize new_size(850, 1100); // 8.5" x 11" default
|
||
|
|
|
||
|
|
CPrintDialog dlg(FALSE);
|
||
|
|
if (AfxGetApp()->GetPrinterDeviceDefaults(&dlg.m_pd))
|
||
|
|
{
|
||
|
|
// GetPrinterDC returns a HDC so attach it
|
||
|
|
CDC dc;
|
||
|
|
HDC hDC= dlg.CreatePrinterDC();
|
||
|
|
ASSERT(hDC != NULL);
|
||
|
|
dc.Attach(hDC);
|
||
|
|
|
||
|
|
// Get the size of the page in loenglish
|
||
|
|
new_size.cx = MulDiv(dc.GetDeviceCaps(HORZSIZE), 1000, 254);
|
||
|
|
new_size.cy = MulDiv(dc.GetDeviceCaps(VERTSIZE), 1000, 254);
|
||
|
|
}
|
||
|
|
|
||
|
|
// if size changed then iterate over views and reset
|
||
|
|
if (new_size != m_size)
|
||
|
|
{
|
||
|
|
m_size = new_size;
|
||
|
|
POSITION pos = GetFirstViewPosition();
|
||
|
|
while (pos != NULL)
|
||
|
|
((CDrawView*)GetNextView(pos))->SetPageSize(m_size);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void CDrawDoc::OnViewPaperColor()
|
||
|
|
{
|
||
|
|
CColorDialog dlg;
|
||
|
|
if (dlg.DoModal() != IDOK)
|
||
|
|
return;
|
||
|
|
|
||
|
|
m_paperColor = dlg.GetColor();
|
||
|
|
SetModifiedFlag();
|
||
|
|
UpdateAllViews(NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CDrawDoc diagnostics
|
||
|
|
|
||
|
|
#ifdef _DEBUG
|
||
|
|
void CDrawDoc::AssertValid() const
|
||
|
|
{
|
||
|
|
COleDocument::AssertValid();
|
||
|
|
}
|
||
|
|
|
||
|
|
void CDrawDoc::Dump(CDumpContext& dc) const
|
||
|
|
{
|
||
|
|
COleDocument::Dump(dc);
|
||
|
|
}
|
||
|
|
#endif //_DEBUG
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
// CDrawDoc commands
|
||
|
|
|
||
|
|
void CDrawDoc::OnFileSummaryInfo()
|
||
|
|
{
|
||
|
|
ASSERT_VALID(this);
|
||
|
|
|
||
|
|
CPropertySheet sheet( _T("Document Properties") );
|
||
|
|
CSummPage summ;
|
||
|
|
CStatPage stat;
|
||
|
|
sheet.AddPage( &summ );
|
||
|
|
sheet.AddPage( &stat );
|
||
|
|
|
||
|
|
summ.m_strAppname = m_pSummInfo->GetAppname();
|
||
|
|
summ.m_strTitle = m_pSummInfo->GetTitle();
|
||
|
|
summ.m_strSubj = m_pSummInfo->GetSubject();
|
||
|
|
summ.m_strAuthor = m_pSummInfo->GetAuthor();
|
||
|
|
summ.m_strKeywd = m_pSummInfo->GetKeywords();
|
||
|
|
summ.m_strCmt = m_pSummInfo->GetComments();
|
||
|
|
summ.m_strTempl = m_pSummInfo->GetTemplate();
|
||
|
|
|
||
|
|
stat.m_strSavedBy = m_pSummInfo->GetLastAuthor();
|
||
|
|
stat.m_strRevNum = m_pSummInfo->GetRevNum();
|
||
|
|
stat.m_strEditTime = m_pSummInfo->GetEditTime();
|
||
|
|
stat.m_strLastPrint = m_pSummInfo->GetLastPrintDate();
|
||
|
|
stat.m_strCreateDate = m_pSummInfo->GetCreateDate();
|
||
|
|
stat.m_strLastSave = m_pSummInfo->GetLastSaveDate();
|
||
|
|
stat.m_strNumPages = m_pSummInfo->GetNumPages();
|
||
|
|
stat.m_strNumWords = m_pSummInfo->GetNumWords();
|
||
|
|
stat.m_strNumChars = m_pSummInfo->GetNumChars();
|
||
|
|
stat.m_strSecurity = m_pSummInfo->GetSecurity();
|
||
|
|
|
||
|
|
if (sheet.DoModal() != IDOK)
|
||
|
|
return;
|
||
|
|
|
||
|
|
m_pSummInfo->SetAuthor(summ.m_strAuthor);
|
||
|
|
m_pSummInfo->SetKeywords(summ.m_strKeywd);
|
||
|
|
m_pSummInfo->SetSubject(summ.m_strSubj);
|
||
|
|
m_pSummInfo->SetComments(summ.m_strCmt);
|
||
|
|
m_pSummInfo->SetTemplate(summ.m_strTempl);
|
||
|
|
m_pSummInfo->SetTitle(summ.m_strTitle);
|
||
|
|
|
||
|
|
SetModifiedFlag();
|
||
|
|
}
|