reman3/Rayman_X/cpa/tempgrp/Owp/src/NtwMod.cpp

553 lines
15 KiB
C++

//ROMTEAM Networks (Gabriela Dumitrascu 15/03/98)
/*
///////////////////////////////////////////////////////////////////////////////////////////////////
// Description : NtwMod.hpp
//
// Modification classes
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// inherit from CPA_Modif
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// Creation date: 98-03-15 Author: CPA2 Gabriela Dumitrascu
///////////////////////////////////////////////////////////////////////////////////////////////////
// Modification date: Author:
///////////////////////////////////////////////////////////////////////////////////////////////////
*/
#include "stdafx.h"
#include "acp_base.h"
#include "resource.h"
#include "incdpt.h"
#include "incitf.h"
#include "incgam.h"
#include "incai.h"
#include "WPObj.hpp"
//ANNECY Shaitan Nettoyage (12/05/98) {
/*
#include "WayObj.hpp"
#include "LinkObj.hpp"
*/
//ENDANNECY Shaitan Nettoyage }
#include "Inter.hpp"
#include "NtwMod.hpp"
#include "NtwDia.hpp"
#include "x:\cpa\main\inc\_editid.h"
ModifGraph::ModifGraph(Graph *poGraph, unsigned short type) : CPA_Modif (type,"",FALSE)
{
m_poGraph = poGraph;
m_hOldGraph = WPG_fn_hCreate("", "");
WPG_fn_vCopy(m_hOldGraph, m_poGraph->GetEngineStruct());
m_hNewGraph = NULL;
switch (type)
{
case GRAPH_INSERT_GRAPH:
SetName("Insert graph");
break;
case GRAPH_DELETE_GRAPH:
SetName("Delete graph");
break;
case GRAPH_INSERT_NODE:
SetName("Insert node");
break;
case GRAPH_DELETE_NODE:
SetName("Delete node");
break;
case GRAPH_INSERT_ARC:
SetName("Insert arc");
break;
case GRAPH_DELETE_ARC:
SetName("Delete arc");
break;
}
}
void ModifGraph::ModifSave()
{
m_hNewGraph = WPG_fn_hCreate("", "");
WPG_fn_vCopy(m_hNewGraph, m_poGraph->GetEngineStruct());
}
BOOL ModifGraph::Do (void)
{
WPG_fn_vCopy(m_poGraph->GetEngineStruct(), m_hNewGraph);
m_poGraph->fn_vNotifySave();
m_poGraph->fn_pGetDialog()->fn_vRefreshDialog();
return TRUE;
}
BOOL ModifGraph::Undo (void)
{
WPG_fn_vCopy(m_poGraph->GetEngineStruct(), m_hOldGraph);
m_poGraph->fn_vNotifySave();
m_poGraph->fn_pGetDialog()->fn_vRefreshDialog();
return TRUE;
}
//ENDROMTEAM Networks (Gabriela Dumitrascu)
// Shaitan Correction {
/*===========================================================================
Delete Graph
===========================================================================*/
DeleteGraph::DeleteGraph (Graph *pGraph)
: CPA_Modif (GRAPH_DELETE_GRAPH, "Delete Graph", FALSE)
{
// register parameters
m_pGraph = pGraph;
// init flag
m_bDeleted = FALSE;
m_bFirstTime = TRUE;
}
DeleteGraph::~DeleteGraph (void)
{
}
BOOL DeleteGraph::Do (void)
{
// update editor
POSITION DeletePos = Graph::ms_oListOfGraph.Find(m_pGraph);
Graph::ms_oListOfGraph.RemoveAt(DeletePos);
// update engine
SCR_tdst_Link_Value *pValue = SCR_fnp_st_Link_SearchValue(WPG_fnp_Graph_GetLinkTable(), (unsigned long) m_pGraph->GetEngineStruct());
if (pValue)
{
SCR_fn_v_Link_DeleteEntry(WPG_fnp_Graph_GetLinkTable(), pValue);
}
// update flag
m_pGraph->fn_vNotifyUnSave();
m_bDeleted = TRUE;
// update interface
Graph::fn_pGetDialog()->fn_vRefreshGraphList(NULL);
Graph::GetInterface()->fn_vSelectGraph(NULL);
m_bFirstTime = FALSE;
return TRUE;
}
BOOL DeleteGraph::Undo (void)
{
// update editor
Graph::ms_oListOfGraph.AddTail(m_pGraph);
// update engine
SCR_tdst_Link_Value *pValue = SCR_fnp_st_Link_SearchValue(WPG_fnp_Graph_GetLinkTable(), (unsigned long) m_pGraph->GetEngineStruct());
if (!pValue)
{
WPG_fn_vAddGlobalGraph(m_pGraph->GetEngineStruct());
}
// update flag
m_pGraph->fn_vNotifyRestore();
m_bDeleted = FALSE;
// update interface
Graph::fn_pGetDialog()->fn_vRefreshGraphList(NULL);
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
return TRUE;
}
/*===========================================================================
Delete Graph
===========================================================================*/
RenameGraph::RenameGraph (Graph *pGraph, CString csNewName)
: CPA_Modif (GRAPH_RENAME_GRAPH, "Rename Graph", FALSE)
{
// register parameters
m_pGraph = pGraph;
m_csOldName = pGraph->GetName();
m_csNewName = csNewName,
// init flag
m_bFirstTime = TRUE;
}
RenameGraph::~RenameGraph (void)
{
}
BOOL RenameGraph::Do (void)
{
// update editor
m_pGraph->fn_eRename(m_csNewName);
m_csNewName = m_pGraph->GetName();
// update engine structure
WPG_fn_vSetNameOfGraph(m_pGraph->GetEngineStruct(), m_pGraph->GetName());
// update link table
SCR_tdst_Link_Value *pValue = SCR_fnp_st_Link_SearchValue(WPG_fnp_Graph_GetLinkTable(), (unsigned long) m_pGraph->GetEngineStruct());
if (pValue)
{
SCR_fn_v_Link_DeleteEntry(WPG_fnp_Graph_GetLinkTable(), pValue);
WPG_fn_vAddGlobalGraph(m_pGraph->GetEngineStruct());
}
// update interface
if (!m_bFirstTime)
{
Graph::fn_pGetDialog()->fn_vRefreshGraphList(m_pGraph);
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
}
m_bFirstTime = FALSE;
return TRUE;
}
BOOL RenameGraph::Undo (void)
{
// update editor
BOOL bIsLoadingWorld = Graph::GetInterface()->GetInterface()->fn_bIsLoadingWorld();
Graph::GetInterface()->GetInterface()->SetLoadingWorld(TRUE);
m_pGraph->fn_eRename(m_csOldName);
Graph::GetInterface()->GetInterface()->SetLoadingWorld(bIsLoadingWorld);
// update engine structure
WPG_fn_vSetNameOfGraph(m_pGraph->GetEngineStruct(), m_pGraph->GetName());
// update link table
SCR_tdst_Link_Value *pValue = SCR_fnp_st_Link_SearchValue(WPG_fnp_Graph_GetLinkTable(), (unsigned long) m_pGraph->GetEngineStruct());
if (pValue)
{
SCR_fn_v_Link_DeleteEntry(WPG_fnp_Graph_GetLinkTable(), pValue);
WPG_fn_vAddGlobalGraph(m_pGraph->GetEngineStruct());
}
// update interface
Graph::fn_pGetDialog()->fn_vRefreshGraphList(m_pGraph);
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
return TRUE;
}
/*===========================================================================
Insert Node
===========================================================================*/
InsertNode::InsertNode (Graph *pGraph, WayPoint *pNode, BOOL pBlock)
: CPA_Modif (GRAPH_INSERT_NODE, "Insert Node", pBlock)
{
// register parameters
m_pGraph = pGraph;
m_pNode = pNode;
// init flag
m_bInserted = FALSE;
m_bFirstTime = TRUE;
}
InsertNode::~InsertNode (void)
{
}
BOOL InsertNode::Do (void)
{
// update engine
WPG_fn_lAddWayPointIfNotExists(m_pGraph->GetEngineStruct(), m_pNode->GetStruct(), 0L); //BART
// update flag
m_pGraph->fn_vNotifySave();
m_bInserted = TRUE;
// update interface
if (!m_bFirstTime)
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(m_pNode);
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshNodeList(m_pGraph, m_pNode);
m_bFirstTime = FALSE;
return TRUE;
}
BOOL InsertNode::Undo (void)
{
// update engine
WPG_fn_lRemoveWayPoint(m_pGraph->GetEngineStruct(), m_pNode->GetStruct());
// update flag
m_pGraph->fn_vNotifySave();
m_bInserted = FALSE;
// update interface
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(NULL);
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshNodeList(m_pGraph, NULL);
return TRUE;
}
/*===========================================================================
Delete Node
===========================================================================*/
DeleteNode::DeleteNode (Graph *pGraph, WayPoint *pNode, BOOL pBlock)
: CPA_Modif (GRAPH_DELETE_NODE, "Delete Node", pBlock)
{
// register parameters
m_pGraph = pGraph;
m_pNode = pNode;
// register connections
m_pGraph->GetConnectionsToWaypoint(pNode, 0, &m_lstConnections);
// init flag
m_bDeleted = FALSE;
m_bFirstTime = TRUE;
}
DeleteNode::~DeleteNode (void)
{
if (m_bDeleted)
{
while (m_lstConnections.GetCount() > 0)
delete(m_lstConnections.RemoveTail());
}
}
BOOL DeleteNode::Do (void)
{
CPA_SuperObject *pConnection;
WP_tdhGraphNode hNode, hNextNode;
WP_tdhWayPoint hWayPoint;
POSITION pos;
int iNode;
// update engine
hWayPoint = m_pNode->GetStruct();
LST2_M_DynamicForEachMovingElementOf(&m_pGraph->GetEngineStruct()->m_hListOfNode, hNode, hNextNode, iNode)
{
WPG_fn_lRemoveArcFromWayPoint(m_pGraph->GetEngineStruct(), hNode->m_hWayPoint, hWayPoint);
}
WPG_fn_lRemoveWayPoint(m_pGraph->GetEngineStruct(), hWayPoint);
// update editor connections
for (pConnection = m_lstConnections.GetHeadElement(pos); pConnection;
pConnection = m_lstConnections.GetNextElement(pos))
m_pGraph->fn_vRemoveGraphicConnection(pConnection);
// update flag
m_pGraph->fn_vNotifySave();
m_bDeleted = TRUE;
// update interface
m_pNode->GetRealGraphic()->SetLocalColor(E_lc_NoColor);
m_pNode->GetSymbolicalGraphic()->SetLocalColor(E_lc_NoColor);
if (!m_bFirstTime)
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(NULL);
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshNodeList(m_pGraph, NULL);
m_bFirstTime = FALSE;
return TRUE;
}
BOOL DeleteNode::Undo (void)
{
CPA_SuperObject *pConnection;
WP_tdhGraphNode hSrcNode, hDstNode;
Connection *pLinkObject;
POSITION pos;
int iSrcNode, iDstNode;
// update engine
WPG_fn_lAddWayPointIfNotExists(m_pGraph->GetEngineStruct(), m_pNode->GetStruct(), 0L); //BART
for (pConnection = m_lstConnections.GetHeadElement(pos); pConnection;
pConnection = m_lstConnections.GetNextElement(pos))
{
pLinkObject = (Connection *) pConnection->GetObject();
iSrcNode = m_pGraph->fn_iGetNodeOfWayPoint(pLinkObject->GetSrcWayPoint()->GetStruct());
hSrcNode = m_pGraph->fn_hGetNode(iSrcNode);
iDstNode = m_pGraph->fn_iGetNodeOfWayPoint(pLinkObject->GetDstWayPoint()->GetStruct());
hDstNode = m_pGraph->fn_hGetNode(iDstNode);
WPG_fn_vAddArc(hSrcNode, hDstNode, pLinkObject->GetWeight(), pLinkObject->GetCapacity());
}
// update editor
for (pConnection = m_lstConnections.GetHeadElement(pos); pConnection;
pConnection = m_lstConnections.GetNextElement(pos))
m_pGraph->fn_vAddGraphicConnection(pConnection);
// update flag
m_pGraph->fn_vNotifySave();
m_bDeleted = FALSE;
// update interface
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(m_pNode);
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshNodeList(m_pGraph, m_pNode);
return TRUE;
}
/*===========================================================================
Insert Connection
===========================================================================*/
InsertConnection::InsertConnection (Graph *pGraph, WayPoint *pSrcWaypoint, WayPoint *pDstWaypoint, BOOL bUpdate, BOOL pBlock)
: CPA_Modif (GRAPH_INSERT_ARC, "Insert Connection", pBlock)
{
int iSrcNode, iDstNode;
// register parameters
m_pGraph = pGraph;
m_pSrcWaypoint = pSrcWaypoint;
m_pDstWaypoint = pDstWaypoint;
m_pArrow = NULL;
// register engine parameters
iSrcNode = m_pGraph->fn_iGetNodeOfWayPoint(m_pSrcWaypoint->GetStruct());
m_hSrcNode = m_pGraph->fn_hGetNode(iSrcNode);
iDstNode = m_pGraph->fn_iGetNodeOfWayPoint(m_pDstWaypoint->GetStruct());
m_hDstNode = m_pGraph->fn_hGetNode(iDstNode);
// init flag
m_bUpdate = bUpdate;
m_bInserted = FALSE;
m_bFirstTime = TRUE;
}
InsertConnection::~InsertConnection (void)
{
// if necessary, delete graphic connection
if (!m_bInserted)
delete m_pArrow;
}
BOOL InsertConnection::Do (void)
{
// update engine data
WPG_fn_vAddArc(m_hSrcNode, m_hDstNode, 0, 0);
// update graphic connection
if (!m_pArrow)
m_pArrow = m_pGraph->GetInterface()->fn_pCreateConnectionGraphicObject(m_pGraph, m_pSrcWaypoint, m_pDstWaypoint, 0, 0);
m_pGraph->fn_vAddGraphicConnection(m_pArrow);
// update flag
m_pGraph->fn_vNotifySave();
m_bInserted = TRUE;
// update interface
if (!m_bFirstTime)
{
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(m_pSrcWaypoint);
Graph::fn_pGetDialog()->fn_vRefreshConnectList(m_pGraph, m_pSrcWaypoint, m_pDstWaypoint);
}
else if (m_bUpdate)
Graph::fn_pGetDialog()->fn_vRefreshConnectList(m_pGraph, m_pSrcWaypoint, m_pDstWaypoint);
Graph::GetInterface()->fn_vUpdateConnections();
m_bFirstTime = FALSE;
return TRUE;
}
BOOL InsertConnection::Undo (void)
{
// update graphic connection
m_pGraph->fn_vRemoveGraphicConnection(m_pArrow);
// update engine data
WPG_fn_vRemoveArc(m_hSrcNode, m_hDstNode);
// update flag
m_pGraph->fn_vNotifySave();
m_bInserted = FALSE;
// update dialog
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(m_pSrcWaypoint);
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshConnectList(m_pGraph, m_pSrcWaypoint, NULL);
return TRUE;
}
/*===========================================================================
Delete Connection
===========================================================================*/
DeleteConnection::DeleteConnection (Graph *pGraph, WayPoint *pSrcWaypoint, WayPoint *pDstWaypoint, BOOL pBlock)
: CPA_Modif (GRAPH_DELETE_ARC, "Delete Connection", pBlock)
{
int iSrcNode, iDstNode;
// register parameters
m_pGraph = pGraph;
m_pSrcWaypoint = pSrcWaypoint;
m_pDstWaypoint = pDstWaypoint;
m_pArrow = m_pGraph->GetGraphicConnection(m_pSrcWaypoint, m_pDstWaypoint);
// register engine parameters
iSrcNode = m_pGraph->fn_iGetNodeOfWayPoint(m_pSrcWaypoint->GetStruct());
m_hSrcNode = m_pGraph->fn_hGetNode(iSrcNode);
iDstNode = m_pGraph->fn_iGetNodeOfWayPoint(m_pDstWaypoint->GetStruct());
m_hDstNode = m_pGraph->fn_hGetNode(iDstNode);
// init flag
m_bDeleted = FALSE;
m_bFirstTime = TRUE;
}
DeleteConnection::~DeleteConnection (void)
{
// if necessary, delete graphic connection
if (m_bDeleted)
delete m_pArrow;
}
BOOL DeleteConnection::Do (void)
{
// update graphic connection
m_pGraph->fn_vRemoveGraphicConnection(m_pArrow);
// update engine data
WPG_fn_vRemoveArc(m_hSrcNode, m_hDstNode);
// update flag
m_pGraph->fn_vNotifySave();
m_bDeleted = TRUE;
// update dialog
if (!m_bFirstTime)
{
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(m_pSrcWaypoint);
}
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshConnectList(m_pGraph, m_pSrcWaypoint, NULL);
m_bFirstTime = FALSE;
return TRUE;
}
BOOL DeleteConnection::Undo (void)
{
Connection *pLinkObject = (Connection *) m_pArrow->GetObject();
// update engine data
WPG_fn_vAddArc(m_hSrcNode, m_hDstNode, pLinkObject->GetWeight(), pLinkObject->GetCapacity());
// update graphic connection
m_pGraph->fn_vAddGraphicConnection(m_pArrow);
// update flag
m_pGraph->fn_vNotifySave();
m_bDeleted = FALSE;
// update dialog
Graph::GetInterface()->fn_vSelectGraph(m_pGraph);
Graph::GetInterface()->fn_vSetDisplayedWaypoint(m_pSrcWaypoint);
Graph::GetInterface()->fn_vUpdateConnections();
Graph::fn_pGetDialog()->fn_vRefreshConnectList(m_pGraph, m_pSrcWaypoint, m_pDstWaypoint);
return TRUE;
}
//End Shaitan Correction }