|
|
#include "StdAfx.h"
|
|
|
|
|
|
#include "WellPoleDoc.h"
|
|
|
#include "WellPoleView.h"
|
|
|
#include "WellPoleLib/WellBaseObj.h"
|
|
|
#include "ItemNestBase.h"
|
|
|
#include "DrawUndoManager.h"
|
|
|
#include "ActionModifiedItem.h"
|
|
|
|
|
|
namespace NItem
|
|
|
{
|
|
|
|
|
|
CItemNestBase::CItemNestBase(CSigmaDoc* ppDoc)
|
|
|
: CItemSelect(ppDoc)
|
|
|
{
|
|
|
m_bInEdit = TRUE;
|
|
|
m_pItemSelected = NULL;
|
|
|
m_bLDown = FALSE;
|
|
|
m_bDrag = FALSE;
|
|
|
nDragHandle = 0;
|
|
|
|
|
|
selectMode = CItemNestBase::selnone;
|
|
|
|
|
|
m_bNestItem = TRUE;
|
|
|
}
|
|
|
|
|
|
|
|
|
CItemNestBase::~CItemNestBase(void)
|
|
|
{
|
|
|
if(m_pItemSelected != NULL)
|
|
|
delete m_pItemSelected;
|
|
|
m_pItemSelected = NULL;
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::DrawHandle(CXyDC *pDC)
|
|
|
{//本函数在OnDraw函数中执行,画到显示缓冲中,因此需要使用传入的DC,
|
|
|
if(GetDrawObj() != NULL)
|
|
|
{
|
|
|
CWellBaseObj* pObj = GetDrawObj();
|
|
|
CRect rect = pDC->GetScreen(pObj->GetRect());
|
|
|
rect.InflateRect(2,2,3,3);
|
|
|
DrawFocusRect(rect,pDC->GetDC());
|
|
|
rect.DeflateRect(1,1,1,1);
|
|
|
DrawFocusRect(rect,pDC->GetDC());
|
|
|
rect.InflateRect(2,2,2,2);
|
|
|
DrawFocusRect(rect,pDC->GetDC());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::DrawFocusRect(CRect rect, CDC *pInDC)
|
|
|
{
|
|
|
//GetView()->DocToClient(rect);
|
|
|
rect.NormalizeRect();
|
|
|
|
|
|
if (pInDC == NULL)
|
|
|
{
|
|
|
CDC *pDC = GetView()->GetDc();
|
|
|
pDC->DrawFocusRect(rect);
|
|
|
//GetView()->ReleaseDC(pDC);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
CDC *pDC = pInDC;
|
|
|
pDC->SetMapMode(MM_TEXT);
|
|
|
pDC->DrawFocusRect(rect);
|
|
|
|
|
|
//GetView()->PrepareDC(pDC);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::DrawHandle(CXyDC *pDC, const CPoint2D &point)
|
|
|
{
|
|
|
CRect rt=GetDoc()->m_itemTracker.GetHandleRectFocus(pDC->GetSX(point.x0),pDC->GetSY(point.y0));
|
|
|
GetDoc()->m_itemTracker.DrawHandle(pDC->GetDC(),rt,TRACKER_SOLID|TRACKER_RECT);
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::MoveHandle(int nHandle, CPoint point, CRect& rect)
|
|
|
{
|
|
|
switch (nHandle)
|
|
|
{
|
|
|
default:
|
|
|
ASSERT(FALSE);
|
|
|
|
|
|
case 1:
|
|
|
rect.left = point.x;
|
|
|
rect.top = point.y;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 2:
|
|
|
rect.top = point.y;
|
|
|
break;
|
|
|
|
|
|
case 3:
|
|
|
rect.right = point.x;
|
|
|
rect.top = point.y;
|
|
|
break;
|
|
|
|
|
|
case 4:
|
|
|
rect.right = point.x;
|
|
|
break;
|
|
|
|
|
|
case 5:
|
|
|
rect.right = point.x;
|
|
|
rect.bottom = point.y;
|
|
|
break;
|
|
|
|
|
|
case 6:
|
|
|
rect.bottom = point.y;
|
|
|
break;
|
|
|
|
|
|
case 7:
|
|
|
rect.left = point.x;
|
|
|
rect.bottom = point.y;
|
|
|
break;
|
|
|
|
|
|
case 8:
|
|
|
rect.left = point.x;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
BOOL CItemNestBase::OnSetCursor(CPoint pt, int& handle)
|
|
|
{
|
|
|
handle = -1;
|
|
|
//if(GetItem() == this)
|
|
|
// return CItemSelect::OnSetCursor(pt,handle);
|
|
|
////else
|
|
|
//// return GetItem()->OnSetCursor(pt,handle);
|
|
|
return FALSE;
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::SetItem(CItem* pItem)
|
|
|
{
|
|
|
if(m_pItemSelected != NULL)
|
|
|
{
|
|
|
if(m_pItemSelected->GetItem() != m_pItemSelected)
|
|
|
m_pItemSelected->DeleteItem();
|
|
|
else
|
|
|
{
|
|
|
delete m_pItemSelected;
|
|
|
m_pItemSelected = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
m_pItemSelected = pItem;
|
|
|
}
|
|
|
|
|
|
CItem* CItemNestBase::GetItem()
|
|
|
{
|
|
|
if(m_pItemSelected != NULL)
|
|
|
return m_pItemSelected->GetItem();
|
|
|
else
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::DeleteItem()
|
|
|
{
|
|
|
if(m_pItemSelected != NULL)
|
|
|
{
|
|
|
if(m_pItemSelected->GetItem() != m_pItemSelected)
|
|
|
m_pItemSelected->DeleteItem();
|
|
|
else
|
|
|
{
|
|
|
delete m_pItemSelected;
|
|
|
m_pItemSelected = NULL;
|
|
|
}
|
|
|
|
|
|
//GetDoc()->GetTracker().Clear();
|
|
|
}
|
|
|
m_selection.RemoveAll();
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::Redo(void)
|
|
|
{
|
|
|
DeleteItem();
|
|
|
if(m_pItemSelected != NULL)
|
|
|
delete m_pItemSelected;
|
|
|
m_pItemSelected = NULL;
|
|
|
|
|
|
//GetDrawUndoManager()->Redo(GetDoc());
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::Undo(void)
|
|
|
{
|
|
|
DeleteItem();
|
|
|
if(m_pItemSelected != NULL)
|
|
|
delete m_pItemSelected;
|
|
|
m_pItemSelected = NULL;
|
|
|
|
|
|
//GetDrawUndoManager()->Undo(GetDoc());
|
|
|
}
|
|
|
|
|
|
void CItemNestBase::SetReUnDoAction(BOOL bNoSaveData, UINT actionType)
|
|
|
{
|
|
|
CPositionList list;
|
|
|
POSITION pos = GetPos();
|
|
|
|
|
|
if(NULL != pos)
|
|
|
{
|
|
|
list.AddTail(pos);
|
|
|
(GetDoc())->SetActionItem(new CActionModifiedItem(GetDoc(), actionType, list));
|
|
|
GetDoc()->Modified(TRUE);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}; |