// SingleView.cpp

#include "stdafx.h"
#include "Single.h"

#include "SingleDoc.h"
#include "SingleView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

// Объекты класса CSingleView могут создаваться динамически
IMPLEMENT_DYNCREATE(CSingleView, CView)

// Таблица сообщений класса CSingleView
BEGIN_MESSAGE_MAP(CSingleView, CView)
	//{{AFX_MSG_MAP(CSingleView)
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	//}}AFX_MSG_MAP
	// Стандартные команды предназначенные для печати документа
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////////////////////////////
// Конструктор класса CSingleView 
CSingleView::CSingleView()
{
	// TODO:
}

// Деструктор класса CSingleView 
CSingleView::~CSingleView()
{
}

// Метод PreCreateWindow класса CSingleView
BOOL CSingleView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Здесь вы можете внести изменения в структуру cs

	// Вызов метода PreCreateWindow базового класса CView
	return CView::PreCreateWindow(cs);
}

//////////////////////////////////////////////////////////////
// Метод OnDraw класса окна просмотра
void CSingleView::OnDraw(CDC* pDC)
{
	CSingleDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: 

	int i;
	for (i=0; i<pDoc->arrayFig.GetSize(); i++)
	{
		if(pDoc->arrayFig[i].cType == 'E')
			pDC->Ellipse(pDoc->arrayFig[i].xyFigCenter.x-10,
							pDoc->arrayFig[i].xyFigCenter.y-10,
							pDoc->arrayFig[i].xyFigCenter.x+10,
							pDoc->arrayFig[i].xyFigCenter.y+10);

		else if (pDoc->arrayFig[i].cType == 'R')
			pDC->Rectangle(pDoc->arrayFig[i].xyFigCenter.x-10,
							pDoc->arrayFig[i].xyFigCenter.y-10,
							pDoc->arrayFig[i].xyFigCenter.x+10,
							pDoc->arrayFig[i].xyFigCenter.y+10);
	}
}

/////////////////////////////////////////////////////////////////////////////////////////////////////
// Методы используемые для печати документов

// Метод OnPreparePrinting класса CSingleView
BOOL CSingleView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// Выполняется обработка по умолчанию
	return DoPreparePrinting(pInfo);
}

// Метод OnBeginPrinting класса CSingleView
void CSingleView::OnBeginPrinting(CDC* /*pDC*/, 
	CPrintInfo* /*pInfo*/)
{
	// TODO: здесь можно выполнить дополнительную инициализацию 
	// перед печатью документа
}

// Метод OnEndPrinting класса CSingleView
void CSingleView::OnEndPrinting(CDC* /*pDC*/, 
	CPrintInfo* /*pInfo*/)
{
	// TODO: здесь можно выполнить действия после печати
	// документа
}

/////////////////////////////////////////////////////////////////////////////////////////////////
// Отладочная версия приложения
#ifdef _DEBUG

////////////////////////////////////////////////////////////////////////////////////////////////
// Диагностические методы класса CSingleView 

// Метод AssertValid класса CSingleView
void CSingleView::AssertValid() const
{
	CView::AssertValid();
}

// Метод Dump класса CSingleView
void CSingleView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

// Метод GetDocument класса CSingleView
CSingleDoc* CSingleView::GetDocument()
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSingleDoc)));
	return (CSingleDoc*)m_pDocument;
}
#endif //_DEBUG

//////////////////////////////////////////////////////////////
// Метод OnLButtonDown класса CSingleView 
// Обрабатывает сообщения левой кнопки мыши
void CSingleView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// Получаем указатель на документ (объект класса CSingleDoc)
	CSingleDoc* pDoc = GetDocument();

	// Проверяем указатель pDoc
	ASSERT_VALID(pDoc);

	// Отображаем на экране окружность
	CClientDC dc(this);
	dc.Ellipse(point.x-10, point.y-10, 
		point.x+10,point.y+10);

	// Сохраняем характеристики окружности
	CFigure	OneFigure;
	OneFigure.xyFigCenter = point;
	OneFigure.cType = 'E';

	// Добавляем к массиву, определяющему документ, новый 
	// элемент
	pDoc->arrayFig.Add(OneFigure);

	// Устанавливаем флаг изменения документа
	pDoc->SetModifiedFlag();

	// Вызываем метод OnLButtonDown базового класса CView
	CView::OnLButtonDown(nFlags, point);
}

//////////////////////////////////////////////////////////////
// Метод OnRButtonDown класса CSingleView 
// Обрабатывает сообщения правой кнопки мыши
void CSingleView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// Получаем указатель на документ (объект класса CSingleDoc)
	CSingleDoc* pDoc = GetDocument();

	// Проверяем указатель pDoc
	ASSERT_VALID(pDoc);

	// Отображаем на экране квадрат
	CClientDC dc(this);
	dc.Rectangle(point.x-10, point.y-10, 
				point.x+10,point.y+10);

	// Сохраняем характеристики квадрата
	CFigure	OneFigure;
	OneFigure.xyFigCenter = point;
	OneFigure.cType = 'R';

	// Добавляем к массиву, определяющему документ, новый 
	// элемент
	pDoc->arrayFig.Add(OneFigure);

	// Устанавливаем флаг изменения документа
	pDoc->SetModifiedFlag();

	// Вызываем метод OnRButtonDown базового класса CView
	CView::OnRButtonDown(nFlags, point);
}
