You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
6.0 KiB
C++
291 lines
6.0 KiB
C++
//////////////////////////////////////////////////////////////////////////////
|
|
//Îļþ ActionBackupItem.cpp
|
|
//Ö÷Òª¹¦ÄÜ:
|
|
//
|
|
//³ÌÐò±àд: 2006-12-07
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "StdAfx.h"
|
|
#include "ActionBackupItem.h"
|
|
#include "SigmaDoc.h"
|
|
#include "SigmaView.h"
|
|
#include ".\actionbackupitem.h"
|
|
#include "ItemEditCurveInName.h"
|
|
#include "Visitor.h"
|
|
|
|
NAction::CActionBackupItem::CActionBackupItem()
|
|
: CActionItem(nullptr, 0)
|
|
{
|
|
}
|
|
|
|
CActionBackupItem::CActionBackupItem(CSigmaDoc * ppDoc, UINT actionType)
|
|
: CActionItem(ppDoc, actionType)
|
|
{
|
|
}
|
|
|
|
CActionBackupItem::CActionBackupItem(CSigmaDoc * ppDoc, UINT actionType, const CPositionList& list)
|
|
: CActionItem(ppDoc, actionType)
|
|
{
|
|
Backup(list);
|
|
}
|
|
|
|
CActionBackupItem::~CActionBackupItem(void)
|
|
{
|
|
}
|
|
|
|
void CActionBackupItem::Undo(void)
|
|
{
|
|
CActionItem::Undo();
|
|
DoOperation(&BackupEntry::pOldOne);
|
|
}
|
|
|
|
void CActionBackupItem::Redo(void)
|
|
{
|
|
CActionItem::Redo();
|
|
DoOperation(&BackupEntry::pNewOne);
|
|
}
|
|
|
|
void CActionBackupItem::DoOperation(std::unique_ptr<COne> BackupEntry::* member)
|
|
{
|
|
CRect8 rect(1e300,-1e300,-1e300,1e300);
|
|
|
|
for (const BackupEntry& entry : m_entries)
|
|
{
|
|
COne* pOne = GetDoc()->GetDraw()->GetOneById(entry.id);
|
|
const std::unique_ptr<COne>& pActionOne = entry.*member;
|
|
|
|
if (pOne != nullptr && pActionOne != nullptr)
|
|
{
|
|
pOne->GetRange(rect);
|
|
pActionOne->GetRange(rect);
|
|
|
|
*pOne = *pActionOne;
|
|
}
|
|
}
|
|
|
|
Invalidate(rect);
|
|
}
|
|
|
|
void CActionBackupItem::Backup(const CPositionList& list)
|
|
{
|
|
Clear(value);
|
|
|
|
POSITION pos=list.GetHeadPosition();
|
|
POSITION pt;
|
|
while(pos)
|
|
{
|
|
pt=list.GetNext(pos);
|
|
Backup(pt);
|
|
}
|
|
}
|
|
|
|
void CActionBackupItem::Backup(POSITION pos)
|
|
{
|
|
if(pos==NULL) return;
|
|
COne* pOne=GetDoc()->GetDraw()->GetAt(pos);
|
|
Backup(pOne);
|
|
}
|
|
|
|
void NAction::CActionBackupItem::BackupNew()
|
|
{
|
|
for (auto& entry : m_entries)
|
|
{
|
|
COne* pOne = GetDoc()->GetDraw()->GetOneById(entry.id);
|
|
if (pOne != nullptr)
|
|
{
|
|
entry.pNewOne = std::make_unique<COne>();
|
|
*entry.pNewOne = *pOne;
|
|
}
|
|
}
|
|
}
|
|
|
|
void NAction::CActionBackupItem::accept(CActionVisitor& visitor)
|
|
{
|
|
visitor.visit(*this);
|
|
}
|
|
|
|
void NAction::CActionBackupItem::Backup(COne* pOne)
|
|
{
|
|
COne* pBakOne=new COne;
|
|
*pBakOne=*pOne;
|
|
Backup(pBakOne, pOne);
|
|
}
|
|
|
|
void NAction::CActionBackupItem::Backup(COne* pBakOne, COne* pOne)
|
|
{
|
|
BackupEntry entry;
|
|
entry.id = pOne->GetId();
|
|
entry.pOldOne.reset(pBakOne);
|
|
|
|
m_entries.push_back(std::move(entry));
|
|
}
|
|
|
|
int NAction::CActionBackupItem::BackupAllElements(void)
|
|
{
|
|
CPtrList* pl=GetDoc()->GetDraw()->GetValueList();
|
|
POSITION pos=pl->GetHeadPosition();
|
|
while(pos)
|
|
{
|
|
Backup(pos);
|
|
pl->GetNext(pos);
|
|
}
|
|
return (int)GetDoc()->GetDraw()->GetCount();
|
|
}
|
|
|
|
int NAction::CActionBackupItem::GetCount(void)
|
|
{
|
|
return static_cast<int>(m_entries.size());
|
|
}
|
|
|
|
void NAction::CActionBackupItem::RemoveBackupTail(void)
|
|
{
|
|
if (m_entries.size() > 0)
|
|
{
|
|
m_entries.pop_back();
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
NAction::CActionBackupProjectionItem::CActionBackupProjectionItem()
|
|
: CActionItem(nullptr, 0)
|
|
{
|
|
}
|
|
|
|
CActionBackupProjectionItem::CActionBackupProjectionItem(CSigmaDoc * ppDoc, UINT actionType)
|
|
: CActionItem(ppDoc, actionType)
|
|
{
|
|
m_strOldProjection=_T("");
|
|
m_strNewProjection=_T("");
|
|
}
|
|
|
|
CActionBackupProjectionItem::CActionBackupProjectionItem(CSigmaDoc * ppDoc, UINT actionType, CString strOldPro, CString strNewPro)
|
|
: CActionItem(ppDoc, actionType)
|
|
{
|
|
m_strOldProjection=strOldPro;
|
|
m_strNewProjection=strNewPro;
|
|
}
|
|
|
|
CActionBackupProjectionItem::~CActionBackupProjectionItem(void)
|
|
{
|
|
}
|
|
|
|
void CActionBackupProjectionItem::Undo()
|
|
{
|
|
CActionItem::Undo();
|
|
|
|
GetDoc()->GetDraw()->SetProjection(m_strOldProjection);
|
|
GetDoc()->Invalidate();
|
|
}
|
|
|
|
void CActionBackupProjectionItem::Redo()
|
|
{
|
|
CActionItem::Redo();
|
|
|
|
GetDoc()->GetDraw()->SetProjection(m_strNewProjection);
|
|
GetDoc()->Invalidate();
|
|
}
|
|
|
|
void NAction::CActionBackupProjectionItem::accept(CActionVisitor& visitor)
|
|
{
|
|
visitor.visit(*this);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
NAction::CActionBackupXYItem::CActionBackupXYItem()
|
|
: CActionItem(nullptr, 0)
|
|
{
|
|
}
|
|
|
|
CActionBackupXYItem::CActionBackupXYItem(CSigmaDoc * ppDoc, UINT actionType)
|
|
: CActionItem(ppDoc, actionType)
|
|
{
|
|
m_pPrevXY = NULL;
|
|
//m_pPrevXY=GetDoc()->m_pDraw;
|
|
//GetDoc()->m_pDraw=new CXy;
|
|
//*(GetDoc()->m_pDraw)=*m_pPrevXY;
|
|
//ResetTreeLayerPtr();
|
|
}
|
|
|
|
CActionBackupXYItem::~CActionBackupXYItem()
|
|
{
|
|
if(m_pPrevXY) delete m_pPrevXY;
|
|
m_pPrevXY=NULL;
|
|
}
|
|
|
|
void CActionBackupXYItem::Undo()
|
|
{
|
|
CActionItem::Undo();
|
|
/*
|
|
CXy* pTempXY=GetDoc()->m_pDraw;
|
|
GetDoc()->m_pDraw=m_pPrevXY;
|
|
m_pPrevXY=pTempXY;
|
|
ResetTreeLayerPtr();
|
|
*/
|
|
|
|
GetDoc()->Invalidate();
|
|
}
|
|
|
|
void CActionBackupXYItem::Redo()
|
|
{
|
|
CActionItem::Redo();
|
|
/*
|
|
CXy* pTempXY=GetDoc()->m_pDraw;
|
|
GetDoc()->m_pDraw=m_pPrevXY;
|
|
m_pPrevXY=pTempXY;
|
|
ResetTreeLayerPtr();
|
|
|
|
GetDoc()->Invalidate();
|
|
*/
|
|
}
|
|
|
|
void NAction::CActionBackupXYItem::ResetTreeLayerPtr(void)
|
|
{
|
|
/*
|
|
CMainFrame* pmf = (CMainFrame*)GetDoc()->GetMainFrame();
|
|
if(pmf && pmf->m_pPaneLayerManager!=NULL)
|
|
pmf->m_pPaneLayerManager->LoadTree(GetDoc()->GetDraw(), FALSE);
|
|
*/
|
|
}
|
|
|
|
void NAction::CActionBackupXYItem::accept(CActionVisitor& visitor)
|
|
{
|
|
visitor.visit(*this);
|
|
}
|
|
|
|
NAction::CAtionBackupEditCurveInName::CAtionBackupEditCurveInName()
|
|
: CActionBackupItem(nullptr, 0)
|
|
{
|
|
}
|
|
|
|
CAtionBackupEditCurveInName::CAtionBackupEditCurveInName(CSigmaDoc * ppDoc, UINT actionType, const CPositionList& list)
|
|
:CActionBackupItem(ppDoc, actionType, list)
|
|
{
|
|
}
|
|
|
|
void CAtionBackupEditCurveInName::Undo(void)
|
|
{
|
|
CActionBackupItem::Undo();
|
|
CItemEditCurveInName * pItem = dynamic_cast<CItemEditCurveInName *>(GetDoc()->GetItem());
|
|
if (pItem == 0)
|
|
return;
|
|
CDC * pDC = GetDoc()->GetView()->GetScreenDC();
|
|
pItem->BeginEdit(pDC);
|
|
}
|
|
|
|
void CAtionBackupEditCurveInName::Redo(void)
|
|
{
|
|
CActionBackupItem::Redo();
|
|
CItemEditCurveInName * pItem = dynamic_cast<CItemEditCurveInName *>(GetDoc()->GetItem());
|
|
if (pItem == 0)
|
|
return;
|
|
CDC * pDC = GetDoc()->GetView()->GetScreenDC();
|
|
pItem->BeginEdit(pDC);
|
|
}
|
|
|
|
void NAction::CAtionBackupEditCurveInName::accept(CActionVisitor& visitor)
|
|
{
|
|
visitor.visit(*this);
|
|
}
|