1435 lines
32 KiB
C++
1435 lines
32 KiB
C++
//
|
||
// DRAWOBJ.CPP
|
||
// Drawing objects: point, openpolyline, closepolyline, ellipse
|
||
//
|
||
// Copyright Microsoft 1998-
|
||
//
|
||
#include "precomp.h"
|
||
#include "NMWbObj.h"
|
||
|
||
WorkspaceObj* g_pCurrentWorkspace;
|
||
WorkspaceObj* g_pConferenceWorkspace;
|
||
|
||
//
|
||
// Created from UI
|
||
//
|
||
WorkspaceObj::WorkspaceObj ( void )
|
||
{
|
||
|
||
ResetAttrib();
|
||
|
||
SetOwnerID(g_MyMemberID);
|
||
|
||
SetType(workspaceCreatePDU_chosen);
|
||
|
||
//
|
||
// Workspace Identifier
|
||
//
|
||
SetWorkspaceHandle(0);
|
||
|
||
//
|
||
// Application Roster Instance
|
||
//
|
||
m_appRosterInstance = g_pNMWBOBJ->m_instanceNumber;
|
||
|
||
//
|
||
// Is Wokspace synchronized
|
||
//
|
||
m_bsynchronized = TRUE;
|
||
|
||
//
|
||
// Does workspace accept keyboard events
|
||
//
|
||
m_acceptKeyboardEvents = FALSE;
|
||
|
||
//
|
||
// Does workspace accept mouse events
|
||
//
|
||
m_acceptPointingDeviceEvents = FALSE;
|
||
|
||
SetViewState(focus_chosen);
|
||
|
||
SetUpdatesEnabled(!g_pDraw->IsLocked());
|
||
|
||
//
|
||
// Workspace max width and height
|
||
//
|
||
m_workspaceSize.x = DRAW_WIDTH; // Max width
|
||
m_workspaceSize.y = DRAW_HEIGHT; // Max height in Draw.hpp
|
||
|
||
RECT rect;
|
||
rect.top = 0;
|
||
rect.left = 0;
|
||
rect.right = m_workspaceSize.x;
|
||
rect.bottom = m_workspaceSize.y;
|
||
SetRect(&rect);
|
||
}
|
||
|
||
|
||
//
|
||
// Created from Remote
|
||
//
|
||
WorkspaceObj::WorkspaceObj (WorkspaceCreatePDU * pWorkspaceCreatePDU, BOOL bForcedResend)
|
||
{
|
||
|
||
ResetAttrib();
|
||
SetType(workspaceCreatePDU_chosen);
|
||
|
||
SetUpdatesEnabled(TRUE);
|
||
|
||
//
|
||
// Workspace Identifier
|
||
//
|
||
SetWorkspaceHandle(GetWorkspaceIdentifier(&pWorkspaceCreatePDU->workspaceIdentifier));
|
||
SetThisObjectHandle(GetWorkspaceHandle());
|
||
|
||
#ifdef _DEBUG
|
||
|
||
//
|
||
// Application Roster Instance
|
||
//
|
||
m_appRosterInstance = pWorkspaceCreatePDU->appRosterInstance;
|
||
TRACE_DEBUG(("m_appRosterInstance = %d", m_appRosterInstance));
|
||
|
||
//
|
||
// Is Wokspace synchronized
|
||
//
|
||
m_bsynchronized = pWorkspaceCreatePDU->synchronized;
|
||
TRACE_DEBUG(("m_bsynchronized = %d", m_bsynchronized));
|
||
|
||
//
|
||
// Does workspace accept keyboard events
|
||
//
|
||
m_acceptKeyboardEvents = pWorkspaceCreatePDU->acceptKeyboardEvents;
|
||
TRACE_DEBUG(("m_acceptKeyboardEvents = %d", m_acceptKeyboardEvents));
|
||
|
||
//
|
||
// Does workspace accept mouse events
|
||
//
|
||
m_acceptPointingDeviceEvents = pWorkspaceCreatePDU->acceptPointingDeviceEvents;
|
||
TRACE_DEBUG(("m_acceptPointingDeviceEvents = %d", m_acceptPointingDeviceEvents));
|
||
|
||
//
|
||
// List of nodes that can access workspace
|
||
//
|
||
if(pWorkspaceCreatePDU->bit_mask & protectedPlaneAccessList_present)
|
||
{
|
||
WorkspaceCreatePDU_protectedPlaneAccessList_Element *pNode;
|
||
pNode = pWorkspaceCreatePDU->protectedPlaneAccessList;
|
||
do
|
||
{
|
||
BYTE * pByte;
|
||
DBG_SAVE_FILE_LINE
|
||
pByte = new BYTE[1];
|
||
*pByte = (UCHAR)pNode->value;
|
||
m_protectedPlaneAccessList.AddTail(pByte);
|
||
pNode = pNode->next;
|
||
}while (pNode);
|
||
|
||
}
|
||
|
||
//
|
||
// Workspace max width and height
|
||
//
|
||
m_workspaceSize.x = pWorkspaceCreatePDU->workspaceSize.width;
|
||
m_workspaceSize.y = pWorkspaceCreatePDU->workspaceSize.height;
|
||
TRACE_DEBUG(("m_workspaceSize(x,y) = (%d, %d)", m_workspaceSize.x, m_workspaceSize.y));
|
||
|
||
RECT rect;
|
||
rect.top = 0;
|
||
rect.left = 0;
|
||
rect.right = m_workspaceSize.x;
|
||
rect.bottom = m_workspaceSize.y;
|
||
SetRect(&rect);
|
||
|
||
//
|
||
// Workspace attributes
|
||
//
|
||
if(pWorkspaceCreatePDU->bit_mask & workspaceAttributes_present)
|
||
{
|
||
GetWorkSpaceAttrib(pWorkspaceCreatePDU->workspaceAttributes);
|
||
}
|
||
|
||
//
|
||
// Workspace plane parameters
|
||
//
|
||
GetWorkSpacePlaneParam(pWorkspaceCreatePDU->planeParameters);
|
||
|
||
|
||
//
|
||
// Workspace view parameters
|
||
//
|
||
if(pWorkspaceCreatePDU->bit_mask & viewParameters_present)
|
||
{
|
||
m_viewHandle = pWorkspaceCreatePDU->viewParameters->value.viewHandle;
|
||
TRACE_DEBUG(("View Handle = %d", m_viewHandle));
|
||
|
||
if(pWorkspaceCreatePDU->viewParameters->value.bit_mask & viewAttributes_present)
|
||
{
|
||
GetWorkSpaceViewParam(pWorkspaceCreatePDU->viewParameters->value.viewAttributes);
|
||
}
|
||
}
|
||
|
||
#endif // 0
|
||
|
||
//
|
||
// Add it to the list of workspaces
|
||
//
|
||
AddNewWorkspace(this, bForcedResend);
|
||
|
||
}
|
||
|
||
|
||
|
||
WorkspaceObj::~WorkspaceObj( void )
|
||
{
|
||
RemoveObjectFromResendList(this);
|
||
RemoveObjectFromRequestHandleList(this);
|
||
|
||
//
|
||
// Tell other nodes that we are gone
|
||
//
|
||
if(WasDeletedLocally())
|
||
{
|
||
OnObjectDelete();
|
||
}
|
||
|
||
//
|
||
// Delete all the objects in this workspace
|
||
//
|
||
T126Obj * pObj;
|
||
while ((pObj = (T126Obj *)m_T126ObjectsInWorkspace.RemoveTail()) != NULL)
|
||
{
|
||
pObj->SetMyWorkspace(NULL);
|
||
delete pObj;
|
||
g_numberOfObjects--;
|
||
}
|
||
|
||
g_numberOfWorkspaces--;
|
||
}
|
||
|
||
|
||
void WorkspaceObj::WorkspaceEditObj ( WorkspaceEditPDU * pWorkspaceEditPDU )
|
||
{
|
||
|
||
//
|
||
// Workspace view parameters
|
||
//
|
||
if(pWorkspaceEditPDU->bit_mask & viewEdits_present)
|
||
{
|
||
GetWorkSpaceViewEditParam(pWorkspaceEditPDU->viewEdits);
|
||
}
|
||
|
||
if(HasUpatesEnabledStateChanged())
|
||
{
|
||
if(GetUpdatesEnabled())
|
||
{
|
||
g_pMain->UnlockDrawingArea();
|
||
}
|
||
else
|
||
{
|
||
g_pMain->LockDrawingArea();
|
||
}
|
||
|
||
g_pMain->UpdatePageButtons();
|
||
}
|
||
|
||
if(HasViewStateChanged() &&
|
||
pWorkspaceEditPDU->viewEdits &&
|
||
pWorkspaceEditPDU->viewEdits->value.action.choice == editView_chosen)
|
||
{
|
||
if(g_pDraw->IsSynced())
|
||
{
|
||
g_pMain->GotoPage(this, FALSE);
|
||
}
|
||
|
||
g_pConferenceWorkspace = this;
|
||
}
|
||
|
||
ResetAttrib();
|
||
|
||
#ifdef _DEBUG
|
||
//
|
||
// Workspace attributes
|
||
//
|
||
if(pWorkspaceEditPDU->bit_mask & WorkspaceEditPDU_attributeEdits_present)
|
||
{
|
||
GetWorkSpaceAttrib((WorkspaceCreatePDU_workspaceAttributes *)pWorkspaceEditPDU->attributeEdits);
|
||
}
|
||
|
||
//
|
||
// Workspace plane parameters
|
||
//
|
||
if(pWorkspaceEditPDU->bit_mask & planeEdits_present)
|
||
{
|
||
GetWorkSpacePlaneParam((WorkspaceCreatePDU_planeParameters *)pWorkspaceEditPDU->planeEdits);
|
||
}
|
||
|
||
#endif // 0
|
||
}
|
||
|
||
UINT WorkspaceObj::GetWorkspaceIdentifier(WorkspaceIdentifier *workspaceIdentifier)
|
||
{
|
||
|
||
TRACE_DEBUG(("GetWorkspaceIdentifier choice = %d", workspaceIdentifier->choice));
|
||
switch(workspaceIdentifier->choice)
|
||
{
|
||
case(activeWorkspace_chosen):
|
||
{
|
||
TRACE_MSG(("activeWorkspace = %d", workspaceIdentifier->u.activeWorkspace));
|
||
return(workspaceIdentifier->u.activeWorkspace);
|
||
break;
|
||
}
|
||
// case(archiveWorkspace_chosen):
|
||
// {
|
||
// break;
|
||
// }
|
||
default:
|
||
{
|
||
ERROR_OUT(("Invalid workspaceIdentifier choice"));
|
||
break;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
|
||
void WorkspaceObj::CreateWorkspaceCreatePDU(WorkspaceCreatePDU * pWorkspaceCreatePDU)
|
||
{
|
||
|
||
pWorkspaceCreatePDU->bit_mask = 0;
|
||
//
|
||
// Workspace Identifier, we have to ask GCC for an active unique workspace handle
|
||
//
|
||
pWorkspaceCreatePDU->workspaceIdentifier.choice = activeWorkspace_chosen;
|
||
pWorkspaceCreatePDU->workspaceIdentifier.u.activeWorkspace = GetWorkspaceHandle();
|
||
|
||
//
|
||
// Application Roster Instance
|
||
//
|
||
pWorkspaceCreatePDU->appRosterInstance = (ASN1uint16_t)g_pNMWBOBJ->m_instanceNumber;
|
||
|
||
//
|
||
// Is Wokspace synchronized
|
||
//
|
||
pWorkspaceCreatePDU->synchronized = (ASN1bool_t)m_bsynchronized;
|
||
|
||
//
|
||
// Does workspace accept keyboard events
|
||
//
|
||
pWorkspaceCreatePDU->acceptKeyboardEvents = (ASN1bool_t)m_acceptKeyboardEvents;
|
||
|
||
//
|
||
// Does workspace accept mouse events
|
||
//
|
||
pWorkspaceCreatePDU->acceptPointingDeviceEvents = (ASN1bool_t)m_acceptPointingDeviceEvents;
|
||
|
||
//
|
||
// Workspace max width and height
|
||
//
|
||
pWorkspaceCreatePDU->workspaceSize.width = (USHORT)m_workspaceSize.x;
|
||
pWorkspaceCreatePDU->workspaceSize.height = (USHORT)m_workspaceSize.y;
|
||
|
||
|
||
//
|
||
// Workspace plane parameters
|
||
//
|
||
PWorkspaceCreatePDU_planeParameters planeParameters;
|
||
PWorkspaceCreatePDU_planeParameters_Seq_usage usage;
|
||
PWorkspaceCreatePDU_planeParameters_Seq_usage pFirstUsage;
|
||
|
||
//
|
||
// Do the plane parameters
|
||
//
|
||
DBG_SAVE_FILE_LINE
|
||
planeParameters = (PWorkspaceCreatePDU_planeParameters)new BYTE[sizeof(WorkspaceCreatePDU_planeParameters)];
|
||
pWorkspaceCreatePDU->planeParameters = planeParameters;
|
||
planeParameters->value.bit_mask = planeAttributes_present;
|
||
planeParameters->value.editable = TRUE;
|
||
planeParameters->next = NULL;
|
||
|
||
DBG_SAVE_FILE_LINE
|
||
PWorkspaceCreatePDU_planeParameters_Seq_planeAttributes pPlaneAttrib;
|
||
pPlaneAttrib = (PWorkspaceCreatePDU_planeParameters_Seq_planeAttributes) new BYTE[sizeof(WorkspaceCreatePDU_planeParameters_Seq_planeAttributes)];
|
||
pPlaneAttrib->value.choice = protection_chosen;
|
||
pPlaneAttrib->value.u.protection.protectedplane = FALSE;
|
||
pPlaneAttrib->next = NULL;
|
||
|
||
planeParameters->value.planeAttributes = pPlaneAttrib;
|
||
|
||
DBG_SAVE_FILE_LINE
|
||
usage = (PWorkspaceCreatePDU_planeParameters_Seq_usage) new BYTE[sizeof(WorkspaceCreatePDU_planeParameters_Seq_usage)];
|
||
pFirstUsage = usage;
|
||
planeParameters->value.usage = usage;
|
||
usage->value.choice = image_chosen;
|
||
|
||
DBG_SAVE_FILE_LINE
|
||
usage = (PWorkspaceCreatePDU_planeParameters_Seq_usage) new BYTE[sizeof(WorkspaceCreatePDU_planeParameters_Seq_usage)];
|
||
planeParameters->value.usage->next = usage;
|
||
usage->value.choice = annotation_chosen;
|
||
usage->next = NULL;
|
||
|
||
//
|
||
// Do the plane parameters 2nd time
|
||
//
|
||
DBG_SAVE_FILE_LINE
|
||
planeParameters->next = (PWorkspaceCreatePDU_planeParameters)new BYTE[sizeof(WorkspaceCreatePDU_planeParameters)];
|
||
planeParameters = planeParameters->next;
|
||
planeParameters->value.bit_mask = planeAttributes_present;
|
||
planeParameters->value.editable = TRUE;
|
||
planeParameters->value.usage = pFirstUsage;
|
||
planeParameters->next = NULL;
|
||
planeParameters->value.planeAttributes = pPlaneAttrib;
|
||
|
||
//
|
||
// Do it hte 3rd time
|
||
//
|
||
planeParameters->next = (PWorkspaceCreatePDU_planeParameters)new BYTE[sizeof(WorkspaceCreatePDU_planeParameters)];
|
||
planeParameters = planeParameters->next;
|
||
planeParameters->value.bit_mask = planeAttributes_present;
|
||
planeParameters->value.editable = TRUE;
|
||
planeParameters->value.usage = pFirstUsage;
|
||
planeParameters->next = NULL;
|
||
planeParameters->value.planeAttributes = pPlaneAttrib;
|
||
|
||
|
||
pWorkspaceCreatePDU->viewParameters = NULL;
|
||
}
|
||
|
||
void WorkspaceObj::CreateWorkspaceDeletePDU(WorkspaceDeletePDU *pWorkspaceDeletePDU)
|
||
{
|
||
pWorkspaceDeletePDU->bit_mask = 0;
|
||
pWorkspaceDeletePDU->workspaceIdentifier.choice = activeWorkspace_chosen;
|
||
pWorkspaceDeletePDU->workspaceIdentifier.u.activeWorkspace = GetWorkspaceHandle();
|
||
pWorkspaceDeletePDU->reason.choice = userInitiated_chosen;
|
||
}
|
||
|
||
void WorkspaceObj::CreateWorkspaceEditPDU(WorkspaceEditPDU *pWorkspaceEditPDU)
|
||
{
|
||
pWorkspaceEditPDU->bit_mask = 0;
|
||
pWorkspaceEditPDU->workspaceIdentifier.choice = activeWorkspace_chosen;
|
||
pWorkspaceEditPDU->workspaceIdentifier.u.activeWorkspace = GetWorkspaceHandle();
|
||
|
||
PWorkspaceEditPDU_viewEdits_Set_action_editView pEditView = NULL;
|
||
pWorkspaceEditPDU->viewEdits = NULL;
|
||
|
||
if(HasUpatesEnabledStateChanged() || HasViewStateChanged())
|
||
{
|
||
pWorkspaceEditPDU->bit_mask |= viewEdits_present;
|
||
DBG_SAVE_FILE_LINE
|
||
pWorkspaceEditPDU->viewEdits = (PWorkspaceEditPDU_viewEdits)new BYTE[sizeof(WorkspaceEditPDU_viewEdits)];
|
||
pWorkspaceEditPDU->viewEdits->next = NULL;
|
||
pWorkspaceEditPDU->viewEdits->value.viewHandle = m_viewHandle;
|
||
pWorkspaceEditPDU->viewEdits->value.action.choice = (ASN1choice_t)m_viewActionChoice;
|
||
pWorkspaceEditPDU->viewEdits->value.action.u.editView = NULL;
|
||
}
|
||
|
||
if(HasUpatesEnabledStateChanged())
|
||
{
|
||
DBG_SAVE_FILE_LINE
|
||
pEditView = (PWorkspaceEditPDU_viewEdits_Set_action_editView) new BYTE[sizeof (WorkspaceEditPDU_viewEdits_Set_action_editView)];
|
||
pEditView->next = NULL;
|
||
pEditView->value.choice = updatesEnabled_chosen;
|
||
pEditView->value.u.updatesEnabled = (ASN1bool_t)GetUpdatesEnabled();
|
||
pWorkspaceEditPDU->viewEdits->value.action.u.editView = pEditView;
|
||
}
|
||
|
||
|
||
if(HasViewStateChanged())
|
||
{
|
||
DBG_SAVE_FILE_LINE
|
||
pEditView = (PWorkspaceEditPDU_viewEdits_Set_action_editView) new BYTE[sizeof (WorkspaceEditPDU_viewEdits_Set_action_editView)];
|
||
pEditView->next = pWorkspaceEditPDU->viewEdits->value.action.u.editView;
|
||
pEditView->value.choice = WorkspaceViewAttribute_viewState_chosen;
|
||
pEditView->value.u.viewState.choice = (ASN1choice_t)GetViewState();
|
||
pWorkspaceEditPDU->viewEdits->value.action.u.editView = pEditView;
|
||
}
|
||
}
|
||
|
||
|
||
void WorkspaceObj::RemoveT126Object(T126Obj *pObj)
|
||
{
|
||
|
||
//
|
||
// The contents of the wb just changed
|
||
//
|
||
g_bContentsChanged = TRUE;
|
||
|
||
//
|
||
// Remove it from the List Of objcets in the workspace
|
||
//
|
||
WBPOSITION pos = m_T126ObjectsInWorkspace.GetPosition(pObj);
|
||
|
||
m_T126ObjectsInWorkspace.RemoveAt(pos);
|
||
|
||
//
|
||
// Erase the drawing
|
||
//
|
||
pObj->DrawRect();
|
||
pObj->UnselectDrawingObject();
|
||
|
||
pObj->UnDraw();
|
||
|
||
//
|
||
// Put the object in the trash, don't delete it locally
|
||
// but tell the other nodes to delete it
|
||
//
|
||
g_numberOfObjects--;
|
||
|
||
g_pDraw->DeleteSelection();
|
||
|
||
if(pObj != g_pMain->m_pLocalRemotePointer && pObj->WasDeletedLocally())
|
||
{
|
||
pObj->SetMyPosition(NULL);
|
||
g_pTrash->AddTail( pObj );
|
||
pObj->OnObjectDelete();
|
||
}
|
||
else
|
||
{
|
||
delete pObj;
|
||
}
|
||
}
|
||
|
||
|
||
T126Obj* WorkspaceObj::FindObjectInWorkspace(UINT objectHandle)
|
||
{
|
||
T126Obj* pObj;
|
||
|
||
WBPOSITION pos;
|
||
pos = m_T126ObjectsInWorkspace.GetTailPosition();
|
||
while (pos != NULL)
|
||
{
|
||
pObj = (T126Obj*)m_T126ObjectsInWorkspace.GetPrevious(pos);
|
||
|
||
if(pObj && pObj->GetThisObjectHandle() == objectHandle)
|
||
{
|
||
return pObj;
|
||
}
|
||
}
|
||
|
||
return NULL;
|
||
}
|
||
|
||
|
||
BOOL WorkspaceObj::IsObjectInWorkspace(T126Obj* pObjToFind)
|
||
{
|
||
T126Obj* pObj;
|
||
|
||
WBPOSITION pos;
|
||
pos = m_T126ObjectsInWorkspace.GetHeadPosition();
|
||
while (pos != NULL)
|
||
{
|
||
pObj = (T126Obj*)m_T126ObjectsInWorkspace.GetNext(pos);
|
||
if(pObj == pObjToFind)
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
BOOL IsWorkspaceListed(T126Obj * pWorkspaceObj)
|
||
{
|
||
T126Obj * pObj;
|
||
|
||
WBPOSITION pos;
|
||
pos = g_pListOfWorkspaces->GetHeadPosition();
|
||
while (pos != NULL)
|
||
{
|
||
pObj =(T126Obj *) g_pListOfWorkspaces->GetNext(pos);
|
||
|
||
if(pObj == pWorkspaceObj)
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
|
||
return FALSE;
|
||
}
|
||
|
||
//
|
||
// Add new workspace
|
||
//
|
||
void AddNewWorkspace(WorkspaceObj * pWorkspaceObj, BOOL bForcedResend)
|
||
{
|
||
g_bContentsChanged = TRUE;
|
||
|
||
//
|
||
// Add it to the list of workspace objects
|
||
//
|
||
if(g_pConferenceWorkspace)
|
||
{
|
||
WBPOSITION pos = g_pConferenceWorkspace->GetMyPosition();
|
||
pWorkspaceObj->SetMyPosition(g_pListOfWorkspaces->AddAt(pWorkspaceObj, pos));
|
||
}
|
||
else
|
||
{
|
||
pWorkspaceObj->SetMyPosition(g_pListOfWorkspaces->AddTail(pWorkspaceObj));
|
||
|
||
g_pConferenceWorkspace = pWorkspaceObj;
|
||
g_pCurrentWorkspace = pWorkspaceObj;
|
||
if(!g_pDraw->IsSynced())
|
||
{
|
||
g_pMain->OnSync();
|
||
}
|
||
}
|
||
|
||
g_numberOfWorkspaces++;
|
||
|
||
if(g_pDraw->IsSynced())
|
||
{
|
||
g_pMain->GotoPage(pWorkspaceObj, bForcedResend);
|
||
}
|
||
//
|
||
// We are not synced but update the page butons anyway
|
||
//
|
||
else
|
||
{
|
||
g_pConferenceWorkspace = pWorkspaceObj;
|
||
g_pMain->UpdatePageButtons();
|
||
}
|
||
}
|
||
|
||
BitmapObj * WorkspaceObj::RectHitRemotePointer(LPRECT hitRect, int penThickness , WBPOSITION pos)
|
||
{
|
||
if(pos == NULL)
|
||
{
|
||
pos = m_T126ObjectsInWorkspace.GetTailPosition();
|
||
}
|
||
else
|
||
{
|
||
m_T126ObjectsInWorkspace.GetPrevious(pos);
|
||
}
|
||
|
||
T126Obj* pPointer = (T126Obj*)m_T126ObjectsInWorkspace.GetFromPosition(pos);
|
||
|
||
RECT pointerRect;
|
||
RECT intersectRect;
|
||
|
||
while(pos && pPointer && pPointer->GraphicTool() == TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
pPointer->GetRect(&pointerRect);
|
||
::InflateRect(&pointerRect, penThickness , penThickness);
|
||
NormalizeRect(&pointerRect);
|
||
NormalizeRect(hitRect);
|
||
if(IntersectRect(&intersectRect, &pointerRect, hitRect))
|
||
{
|
||
return (BitmapObj *)pPointer;
|
||
}
|
||
pPointer = (T126Obj*) m_T126ObjectsInWorkspace.GetPrevious(pos);
|
||
}
|
||
return NULL;
|
||
}
|
||
|
||
|
||
void WorkspaceObj::AddTail(T126Obj * pObj)
|
||
{
|
||
//
|
||
// The contents of the wb just changed
|
||
//
|
||
g_bContentsChanged = TRUE;
|
||
|
||
pObj->SetMyWorkspace(this);
|
||
T126Obj* pPointer = (T126Obj*)m_T126ObjectsInWorkspace.GetTail();
|
||
|
||
//
|
||
// Add the local remote pointer in the tail position
|
||
// and other type of objects before all the remote pointers
|
||
//
|
||
if(!(pObj->GraphicTool() == TOOLTYPE_REMOTEPOINTER && pObj->IAmTheOwner()) &&
|
||
pPointer && pPointer->GraphicTool() == TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
WBPOSITION pos = m_T126ObjectsInWorkspace.GetTailPosition();
|
||
WBPOSITION insertPos = NULL;
|
||
|
||
//
|
||
// Find the first object that is not a remote pointer
|
||
//
|
||
while(pPointer->GraphicTool() == TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
insertPos = pos;
|
||
if(pos == NULL)
|
||
{
|
||
break;
|
||
}
|
||
pPointer = (T126Obj*) m_T126ObjectsInWorkspace.GetPrevious(pos);
|
||
}
|
||
|
||
if(insertPos)
|
||
{
|
||
pObj->SetMyPosition(m_T126ObjectsInWorkspace.AddAt(pObj, insertPos));
|
||
}
|
||
else
|
||
{
|
||
pObj->SetMyPosition(m_T126ObjectsInWorkspace.AddHead(pObj));
|
||
}
|
||
|
||
//
|
||
// Make sure we repaint the area, if there was a handle it could be under it
|
||
//
|
||
if(pObj->GraphicTool() == TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
((BitmapObj*)pObj)->CreateSaveBitmap();
|
||
}
|
||
|
||
RECT rect;
|
||
pObj->GetBoundsRect(&rect);
|
||
g_pDraw->InvalidateSurfaceRect(&rect,TRUE);
|
||
|
||
}
|
||
else
|
||
{
|
||
pObj->SetMyPosition(m_T126ObjectsInWorkspace.AddTail(pObj));
|
||
}
|
||
}
|
||
|
||
|
||
WorkspaceObj* RemoveWorkspace(WorkspaceObj * pWorkspaceObj)
|
||
{
|
||
WorkspaceObj * pWrkspc;
|
||
|
||
g_bContentsChanged = TRUE;
|
||
|
||
WBPOSITION pos = pWorkspaceObj->GetMyPosition();
|
||
WBPOSITION prevPos = pos;
|
||
|
||
g_pListOfWorkspaces->GetPrevious(prevPos);
|
||
|
||
g_pListOfWorkspaces->RemoveAt(pos);
|
||
|
||
//
|
||
// We just removed the first page
|
||
//
|
||
if(prevPos == NULL)
|
||
{
|
||
pWrkspc = (WorkspaceObj *)g_pListOfWorkspaces->GetHead();
|
||
}
|
||
else
|
||
{
|
||
pWrkspc = (WorkspaceObj *)g_pListOfWorkspaces->GetPrevious(prevPos);
|
||
}
|
||
|
||
//
|
||
// The current workspace is pointing to the deleted object
|
||
//
|
||
if(g_pCurrentWorkspace == pWorkspaceObj)
|
||
{
|
||
::InvalidateRect(g_pDraw->m_hwnd, NULL, TRUE);
|
||
|
||
|
||
//
|
||
// If we were drawing/selecting or dragging something, finish now
|
||
//
|
||
g_pDraw->OnLButtonUp(0,0,0);
|
||
|
||
//
|
||
// If we are deleting the current workspace and we have the text editor active
|
||
//
|
||
if (g_pDraw->TextEditActive())
|
||
{
|
||
//
|
||
// Finish the text
|
||
//
|
||
g_pDraw->EndTextEntry(FALSE);
|
||
}
|
||
|
||
g_pCurrentWorkspace = NULL;
|
||
}
|
||
|
||
if(g_pConferenceWorkspace == pWorkspaceObj)
|
||
{
|
||
g_pConferenceWorkspace = NULL;
|
||
|
||
}
|
||
|
||
delete pWorkspaceObj;
|
||
|
||
return pWrkspc;
|
||
}
|
||
|
||
UINT WorkspaceObj::EnumerateObjectsInWorkspace(void)
|
||
{
|
||
UINT objects = 0;
|
||
WBPOSITION pos;
|
||
T126Obj* pObj;
|
||
|
||
pos = GetHeadPosition();
|
||
while(pos)
|
||
{
|
||
pObj = GetNextObject(pos);
|
||
if(pObj && pObj->GraphicTool() != TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
objects++;
|
||
}
|
||
}
|
||
return objects;
|
||
}
|
||
|
||
|
||
void ResendAllObjects(void)
|
||
{
|
||
//
|
||
// Resend all objects
|
||
//
|
||
WBPOSITION pos;
|
||
WBPOSITION posObj;
|
||
WorkspaceObj* pWorkspace;
|
||
WorkspaceObj* pCurrentWorkspace;
|
||
|
||
pCurrentWorkspace = g_pCurrentWorkspace;
|
||
|
||
T126Obj* pObj;
|
||
pos = g_pListOfWorkspaces->GetHeadPosition();
|
||
while(pos)
|
||
{
|
||
pWorkspace = (WorkspaceObj*)g_pListOfWorkspaces->GetNext(pos);
|
||
if(pWorkspace)
|
||
{
|
||
pWorkspace->SetAllAttribs();
|
||
pWorkspace->SendNewObjectToT126Apps();
|
||
posObj = pWorkspace->GetHeadPosition();
|
||
while(posObj)
|
||
{
|
||
pObj = pWorkspace->GetNextObject(posObj);
|
||
if(pObj)
|
||
{
|
||
pObj->ClearSelectionFlags();
|
||
pObj->SetAllAttribs();
|
||
pObj->SendNewObjectToT126Apps();
|
||
|
||
//
|
||
// Lines need to be saved in various pdus with 256 points in each pdu
|
||
//
|
||
if(pObj->GraphicTool() == TOOLTYPE_PEN || pObj->GraphicTool() == TOOLTYPE_HIGHLIGHT)
|
||
{
|
||
int nPoints = ((DrawObj*)pObj)->m_points->GetSize();
|
||
int size = MAX_POINT_LIST_VALUES + 1;
|
||
if(nPoints > (MAX_POINT_LIST_VALUES + 1))
|
||
{
|
||
while(size != nPoints)
|
||
{
|
||
if(nPoints > (size + MAX_POINT_LIST_VALUES + 1))
|
||
{
|
||
size += MAX_POINT_LIST_VALUES + 1;
|
||
}
|
||
else
|
||
{
|
||
size = nPoints;
|
||
}
|
||
|
||
//
|
||
// Move to the next 256 points
|
||
//
|
||
|
||
((DrawObj*)pObj)->m_points->SetSize(size - 1);
|
||
|
||
//
|
||
// Send the next 256 points
|
||
//
|
||
pObj->ResetAttrib();
|
||
((DrawObj*)pObj)->ChangedPointList();
|
||
pObj->OnObjectEdit();
|
||
}
|
||
((DrawObj*)pObj)->m_points->SetSize(size);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Syncronize page
|
||
//
|
||
if(g_pCurrentWorkspace)
|
||
{
|
||
g_pMain->GotoPage(g_pCurrentWorkspace);
|
||
g_pCurrentWorkspace->SetViewState(focus_chosen);
|
||
g_pCurrentWorkspace->SetViewActionChoice(editView_chosen);
|
||
g_pCurrentWorkspace->OnObjectEdit();
|
||
}
|
||
}
|
||
|
||
void RemoveObjectFromRequestHandleList(T126Obj * pObjRequest)
|
||
{
|
||
T126Obj* pObj;
|
||
WBPOSITION pos;
|
||
WBPOSITION prevPos;
|
||
pos = g_pListOfObjectsThatRequestedHandles->GetHeadPosition();
|
||
while (pos != NULL)
|
||
{
|
||
prevPos = pos;
|
||
pObj = (T126Obj*)g_pListOfObjectsThatRequestedHandles->GetNext(pos);
|
||
if(pObj == pObjRequest)
|
||
{
|
||
g_pListOfObjectsThatRequestedHandles->RemoveAt(prevPos);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
UINT GetSIPDUObjectHandle(SIPDU * sipdu)
|
||
{
|
||
UINT ObjectHandle = 0;
|
||
|
||
switch(sipdu->choice)
|
||
{
|
||
case bitmapAbortPDU_chosen:
|
||
ObjectHandle = sipdu->u.bitmapAbortPDU.bitmapHandle;
|
||
break;
|
||
|
||
case bitmapCheckpointPDU_chosen:
|
||
ObjectHandle = sipdu->u.bitmapCheckpointPDU.bitmapHandle;
|
||
break;
|
||
|
||
case bitmapCreatePDU_chosen:
|
||
ObjectHandle = sipdu->u.bitmapCreatePDU.bitmapHandle;
|
||
break;
|
||
|
||
case bitmapCreateContinuePDU_chosen:
|
||
ObjectHandle = sipdu->u.bitmapCreateContinuePDU.bitmapHandle;
|
||
break;
|
||
|
||
case bitmapDeletePDU_chosen:
|
||
ObjectHandle = sipdu->u.bitmapDeletePDU.bitmapHandle;
|
||
break;
|
||
|
||
case bitmapEditPDU_chosen:
|
||
ObjectHandle = sipdu->u.bitmapEditPDU.bitmapHandle;
|
||
break;
|
||
|
||
case drawingCreatePDU_chosen:
|
||
ObjectHandle = sipdu->u.drawingCreatePDU.drawingHandle;
|
||
break;
|
||
|
||
case drawingDeletePDU_chosen:
|
||
ObjectHandle = sipdu->u.drawingDeletePDU.drawingHandle;
|
||
break;
|
||
|
||
case drawingEditPDU_chosen:
|
||
ObjectHandle = sipdu->u.drawingEditPDU.drawingHandle;
|
||
break;
|
||
|
||
case siNonStandardPDU_chosen:
|
||
ObjectHandle = ((TEXTPDU_HEADER*) sipdu->u.siNonStandardPDU.nonStandardTransaction.data.value)->textHandle;
|
||
break;
|
||
|
||
case workspaceCreatePDU_chosen:
|
||
ObjectHandle = WorkspaceObj::GetWorkspaceIdentifier(&sipdu->u.workspaceCreatePDU.workspaceIdentifier);
|
||
break;
|
||
|
||
case workspaceCreateAcknowledgePDU_chosen:
|
||
ObjectHandle = WorkspaceObj::GetWorkspaceIdentifier(&sipdu->u.workspaceCreateAcknowledgePDU.workspaceIdentifier);
|
||
break;
|
||
|
||
case workspaceDeletePDU_chosen:
|
||
ObjectHandle = WorkspaceObj::GetWorkspaceIdentifier(&sipdu->u.workspaceDeletePDU.workspaceIdentifier);
|
||
break;
|
||
|
||
case workspaceEditPDU_chosen:
|
||
ObjectHandle = WorkspaceObj::GetWorkspaceIdentifier(&sipdu->u.workspaceEditPDU.workspaceIdentifier);
|
||
break;
|
||
|
||
case workspacePlaneCopyPDU_chosen:
|
||
ObjectHandle = WorkspaceObj::GetWorkspaceIdentifier(&sipdu->u.workspacePlaneCopyPDU.sourceWorkspaceIdentifier);
|
||
break;
|
||
|
||
case workspaceReadyPDU_chosen:
|
||
ObjectHandle = WorkspaceObj::GetWorkspaceIdentifier(&sipdu->u.workspaceReadyPDU.workspaceIdentifier);
|
||
break;
|
||
|
||
}
|
||
|
||
return ObjectHandle;
|
||
|
||
|
||
}
|
||
|
||
|
||
BOOL RemoveObjectFromResendList(T126Obj * pObjRequest)
|
||
{
|
||
BOOL bRemoved = FALSE;
|
||
SIPDU* pPDU;
|
||
WBPOSITION pos;
|
||
WBPOSITION prevPos;
|
||
|
||
UINT objectHandle = pObjRequest->GetThisObjectHandle();
|
||
pos = g_pRetrySendList->GetHeadPosition();
|
||
while (pos != NULL)
|
||
{
|
||
prevPos = pos;
|
||
pPDU = (SIPDU*)g_pRetrySendList->GetNext(pos);
|
||
if(GetSIPDUObjectHandle(pPDU) == objectHandle)
|
||
{
|
||
g_pRetrySendList->RemoveAt(prevPos);
|
||
SIPDUCleanUp(pPDU);
|
||
bRemoved = TRUE;
|
||
}
|
||
}
|
||
|
||
return bRemoved;
|
||
}
|
||
|
||
|
||
|
||
|
||
void RemoveRemotePointer(MEMBER_ID nMemberID)
|
||
{
|
||
//
|
||
// Resend all objects
|
||
//
|
||
WBPOSITION pos;
|
||
WBPOSITION posObj;
|
||
WorkspaceObj* pWorkspace;
|
||
ULONG ownerID;
|
||
T126Obj* pObj;
|
||
pos = g_pListOfWorkspaces->GetHeadPosition();
|
||
while(pos)
|
||
{
|
||
pWorkspace = (WorkspaceObj*)g_pListOfWorkspaces->GetNext(pos);
|
||
if(pWorkspace)
|
||
{
|
||
posObj = pWorkspace->GetHeadPosition();
|
||
while(posObj)
|
||
{
|
||
pObj = pWorkspace->GetNextObject(posObj);
|
||
if(pObj && pObj->GraphicTool() == TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
ownerID = GET_NODE_ID_FROM_MEMBER_ID(pObj->GetOwnerID());
|
||
|
||
TRACE_DEBUG(("RemoveRemotePointer ownerID=%x member that left =%x " , ownerID, nMemberID));
|
||
|
||
|
||
if(ownerID != g_MyMemberID)
|
||
{
|
||
if(nMemberID)
|
||
{
|
||
if(nMemberID == ownerID)
|
||
{
|
||
pWorkspace->RemoveT126Object(pObj);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
pWorkspace->RemoveT126Object(pObj);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//
|
||
// Syncronize page
|
||
//
|
||
if(g_pCurrentWorkspace)
|
||
{
|
||
g_pCurrentWorkspace->SetViewActionChoice(editView_chosen);
|
||
g_pCurrentWorkspace->OnObjectEdit();
|
||
}
|
||
}
|
||
|
||
|
||
BOOL IsThereAnythingInAnyWorkspace(void)
|
||
{
|
||
WBPOSITION pos;
|
||
WBPOSITION posObj;
|
||
WorkspaceObj* pWorkspace;
|
||
T126Obj* pObj;
|
||
pos = g_pListOfWorkspaces->GetHeadPosition();
|
||
while(pos)
|
||
{
|
||
pWorkspace = (WorkspaceObj*)g_pListOfWorkspaces->GetNext(pos);
|
||
if(pWorkspace)
|
||
{
|
||
posObj = pWorkspace->GetHeadPosition();
|
||
while(posObj)
|
||
{
|
||
pObj = pWorkspace->GetNextObject(posObj);
|
||
if(pObj)
|
||
{
|
||
if(pObj->GraphicTool() != TOOLTYPE_REMOTEPOINTER)
|
||
{
|
||
return TRUE;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return FALSE;
|
||
}
|
||
|
||
|
||
|
||
//
|
||
// UI Edited the Workspace Object
|
||
//
|
||
void WorkspaceObj::OnObjectEdit(void)
|
||
{
|
||
|
||
g_bContentsChanged = TRUE;
|
||
|
||
//
|
||
// If we are not synced don't bug the other nodes
|
||
//
|
||
if(!g_pDraw->IsSynced())
|
||
{
|
||
return;
|
||
}
|
||
|
||
SIPDU *sipdu = NULL;
|
||
DBG_SAVE_FILE_LINE
|
||
sipdu = (SIPDU *) new BYTE[sizeof(SIPDU)];
|
||
if(!sipdu)
|
||
{
|
||
TRACE_MSG(("Failed to create sipdu"));
|
||
::PostMessage(g_pMain->m_hwnd, WM_USER_DISPLAY_ERROR, WBFE_RC_WINDOWS, 0);
|
||
return;
|
||
}
|
||
|
||
sipdu->choice = workspaceEditPDU_chosen;
|
||
CreateWorkspaceEditPDU(&sipdu->u.workspaceEditPDU);
|
||
T120Error rc = SendT126PDU(sipdu);
|
||
if(rc == T120_NO_ERROR)
|
||
{
|
||
SIPDUCleanUp(sipdu);
|
||
ResetAttrib();
|
||
}
|
||
}
|
||
|
||
//
|
||
// UI Deleted the Workspace Object
|
||
//
|
||
void WorkspaceObj::OnObjectDelete(void)
|
||
{
|
||
SIPDU *sipdu = NULL;
|
||
DBG_SAVE_FILE_LINE
|
||
sipdu = (SIPDU *) new BYTE[sizeof(SIPDU)];
|
||
if(sipdu)
|
||
{
|
||
sipdu->choice = workspaceDeletePDU_chosen;
|
||
CreateWorkspaceDeletePDU(&sipdu->u.workspaceDeletePDU);
|
||
T120Error rc = SendT126PDU(sipdu);
|
||
if(rc == T120_NO_ERROR)
|
||
{
|
||
SIPDUCleanUp(sipdu);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TRACE_MSG(("Failed to create sipdu"));
|
||
::PostMessage(g_pMain->m_hwnd, WM_USER_DISPLAY_ERROR, WBFE_RC_WINDOWS, 0);
|
||
}
|
||
}
|
||
|
||
void WorkspaceObj::GetEncodedCreatePDU(ASN1_BUF *pBuf)
|
||
{
|
||
SIPDU *sipdu = NULL;
|
||
sipdu = (SIPDU *) new BYTE[sizeof(SIPDU)];
|
||
if(sipdu)
|
||
{
|
||
sipdu->choice = workspaceCreatePDU_chosen;
|
||
CreateWorkspaceCreatePDU(&sipdu->u.workspaceCreatePDU);
|
||
ASN1_BUF encodedPDU;
|
||
g_pCoder->Encode(sipdu, pBuf);
|
||
delete sipdu->u.workspaceCreatePDU.planeParameters->value.usage;
|
||
delete sipdu->u.workspaceCreatePDU.planeParameters;
|
||
delete sipdu;
|
||
}
|
||
else
|
||
{
|
||
TRACE_MSG(("Failed to create sipdu"));
|
||
::PostMessage(g_pMain->m_hwnd, WM_USER_DISPLAY_ERROR, WBFE_RC_WINDOWS, 0);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void SendWorkspaceRefreshPDU(BOOL bImtheRefresher)
|
||
{
|
||
SIPDU *sipdu = NULL;
|
||
DBG_SAVE_FILE_LINE
|
||
sipdu = (SIPDU *) new BYTE[sizeof(SIPDU)];
|
||
if(sipdu)
|
||
{
|
||
sipdu->choice = workspaceRefreshStatusPDU_chosen;
|
||
sipdu->u.workspaceRefreshStatusPDU.bit_mask = 0;
|
||
sipdu->u.workspaceRefreshStatusPDU.refreshStatus = (ASN1bool_t)bImtheRefresher;
|
||
T120Error rc = SendT126PDU(sipdu);
|
||
if(rc == T120_NO_ERROR)
|
||
{
|
||
SIPDUCleanUp(sipdu);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
TRACE_MSG(("Failed to create sipdu"));
|
||
::PostMessage(g_pMain->m_hwnd, WM_USER_DISPLAY_ERROR, WBFE_RC_WINDOWS, 0);
|
||
}
|
||
|
||
}
|
||
|
||
//
|
||
// UI Created a new Workspace Object
|
||
//
|
||
void WorkspaceObj::SendNewObjectToT126Apps(void)
|
||
{
|
||
SIPDU *sipdu = NULL;
|
||
DBG_SAVE_FILE_LINE
|
||
sipdu = (SIPDU *) new BYTE[sizeof(SIPDU)];
|
||
if(sipdu)
|
||
{
|
||
sipdu->choice = workspaceCreatePDU_chosen;
|
||
CreateWorkspaceCreatePDU(&sipdu->u.workspaceCreatePDU);
|
||
TRACE_DEBUG(("Sending Workspace >> Workspace handle = %d", sipdu->u.workspaceCreatePDU.workspaceIdentifier.u.activeWorkspace ));
|
||
T120Error rc = SendT126PDU(sipdu);
|
||
if(rc == T120_NO_ERROR)
|
||
{
|
||
SIPDUCleanUp(sipdu);
|
||
}
|
||
|
||
SetAllAttribs();
|
||
SetViewActionChoice(createNewView_chosen);
|
||
SetViewState(focus_chosen);
|
||
OnObjectEdit();
|
||
}
|
||
else
|
||
{
|
||
TRACE_MSG(("Failed to create sipdu"));
|
||
::PostMessage(g_pMain->m_hwnd, WM_USER_DISPLAY_ERROR, WBFE_RC_WINDOWS, 0);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void WorkspaceObj::GetWorkSpaceViewEditParam(PWorkspaceEditPDU_viewEdits pViewEdits)
|
||
{
|
||
m_viewHandle = pViewEdits->value.viewHandle;
|
||
TRACE_DEBUG(("GetWorkSpaceViewEditParam View Handle = %d", m_viewHandle));
|
||
TRACE_DEBUG(("GetWorkSpaceViewEditParam View Choice = %d", pViewEdits->value.action.choice));
|
||
|
||
switch(pViewEdits->value.action.choice)
|
||
{
|
||
case(createNewView_chosen):
|
||
{
|
||
GetWorkSpaceViewParam((PWorkspaceCreatePDU_viewParameters_Set_viewAttributes)pViewEdits->value.action.u.createNewView);
|
||
}
|
||
break;
|
||
|
||
case(editView_chosen):
|
||
{
|
||
GetWorkSpaceViewParam((PWorkspaceCreatePDU_viewParameters_Set_viewAttributes)pViewEdits->value.action.u.editView);
|
||
}
|
||
break;
|
||
|
||
case(deleteView_chosen):
|
||
{
|
||
;
|
||
}
|
||
break;
|
||
|
||
// case(nonStandardAction_chosen):
|
||
// {
|
||
// }
|
||
// break;
|
||
|
||
default:
|
||
WARNING_OUT(("Invalid workspace view attribute"));
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
void WorkspaceObj::GetWorkSpaceViewParam(PWorkspaceCreatePDU_viewParameters_Set_viewAttributes pViewAttributes)
|
||
{
|
||
|
||
PWorkspaceCreatePDU_viewParameters_Set_viewAttributes attributes;
|
||
attributes = pViewAttributes;
|
||
while(attributes)
|
||
{
|
||
switch(attributes->value.choice)
|
||
{
|
||
case (viewRegion_chosen):
|
||
{
|
||
|
||
switch(attributes->value.u.viewRegion.choice)
|
||
{
|
||
case(fullWorkspace_chosen):
|
||
{
|
||
m_viewRegion.top = 0;
|
||
m_viewRegion.left = 0;
|
||
m_viewRegion.bottom = m_workspaceSize.x;
|
||
m_viewRegion.right = m_workspaceSize.y;
|
||
TRACE_DEBUG(("fullWorkspace_chosen View Region = (%d, %d)(%d, %d)",
|
||
m_viewRegion.top,
|
||
m_viewRegion.left,
|
||
m_viewRegion.bottom,
|
||
m_viewRegion.right));
|
||
|
||
}
|
||
case(partialWorkspace_chosen):
|
||
{
|
||
m_viewRegion.top = attributes->value.u.viewRegion.u.partialWorkspace.upperLeft.yCoordinate;
|
||
m_viewRegion.left = attributes->value.u.viewRegion.u.partialWorkspace.upperLeft.xCoordinate;
|
||
m_viewRegion.bottom = attributes->value.u.viewRegion.u.partialWorkspace.upperLeft.yCoordinate;
|
||
m_viewRegion.right = attributes->value.u.viewRegion.u.partialWorkspace.upperLeft.xCoordinate;
|
||
TRACE_DEBUG(("partialWorkspace_chosen View Region = (%d, %d)(%d, %d)",
|
||
m_viewRegion.top,
|
||
m_viewRegion.left,
|
||
m_viewRegion.bottom,
|
||
m_viewRegion.right));
|
||
}
|
||
break;
|
||
default:
|
||
ERROR_OUT(("Invalid view region choice"));
|
||
break;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case (WorkspaceViewAttribute_viewState_chosen):
|
||
{
|
||
SetViewState(attributes->value.u.viewState.choice);
|
||
TRACE_DEBUG(("View state = %d", attributes->value.u.viewState.choice));
|
||
}
|
||
break;
|
||
|
||
case (updatesEnabled_chosen):
|
||
{
|
||
SetUpdatesEnabled(attributes->value.u.updatesEnabled);
|
||
if(!m_bUpdatesEnabled)
|
||
{
|
||
g_pNMWBOBJ->m_LockerID = GetOwnerID();
|
||
}
|
||
|
||
TRACE_DEBUG(("Updates enabled = %d", m_bUpdatesEnabled));
|
||
}
|
||
break;
|
||
|
||
// case (sourceDisplayIndicator_chosen):
|
||
// {
|
||
// JOSEF what we do with these??????
|
||
// attributes->value.u.sourceDisplayIndicator.displayAspectRatio;
|
||
// attributes->value.u.sourceDisplayIndicator.horizontalSizeRatio;
|
||
// attributes->value.u.sourceDisplayIndicator.horizontalPosition;
|
||
// attributes->value.u.sourceDisplayIndicator.verticalPosition;
|
||
//
|
||
// }
|
||
// break;
|
||
|
||
default:
|
||
WARNING_OUT(("Invalid workspace view attribute"));
|
||
break;
|
||
}
|
||
attributes = attributes->next;
|
||
}
|
||
}
|
||
|
||
|
||
//
|
||
// JOSEF The following is not used but is part of the standard
|
||
// It is removed because we don't need it now
|
||
// We may need to add it for interop in the future
|
||
//
|
||
#ifdef _DEBUG
|
||
|
||
void WorkspaceObj::SetBackGroundColor(COLORREF rgb)
|
||
{
|
||
m_backgroundColor.rgbtRed = GetRValue(rgb);
|
||
m_backgroundColor.rgbtGreen = GetGValue(rgb);
|
||
m_backgroundColor.rgbtBlue = GetBValue(rgb);
|
||
}
|
||
|
||
|
||
|
||
|
||
void WorkspaceObj::GetWorkSpaceAttrib(PWorkspaceCreatePDU_workspaceAttributes pWorkspaceAttributes)
|
||
{
|
||
|
||
PWorkspaceCreatePDU_workspaceAttributes attributes;
|
||
attributes = pWorkspaceAttributes;
|
||
COLORREF rgb;
|
||
while(attributes)
|
||
{
|
||
switch(attributes->value.choice)
|
||
{
|
||
case(backgroundColor_chosen):
|
||
{
|
||
switch(attributes->value.u.backgroundColor.choice)
|
||
{
|
||
// case(workspacePaletteIndex_chosen):
|
||
// {
|
||
// ASN1uint16_t workspacePaletteIndex = ((attributes->value.u.backgroundColor).u).workspacePaletteIndex;
|
||
// break;
|
||
// }
|
||
case(rgbTrueColor_chosen):
|
||
{
|
||
rgb = RGB(attributes->value.u.backgroundColor.u.rgbTrueColor.r,
|
||
attributes->value.u.backgroundColor.u.rgbTrueColor.g,
|
||
attributes->value.u.backgroundColor.u.rgbTrueColor.b);
|
||
SetBackGroundColor(rgb);
|
||
TRACE_DEBUG(("Attribute penColor (r,g,b)=(%d, %d,%d)",
|
||
attributes->value.u.backgroundColor.u.rgbTrueColor.r,
|
||
attributes->value.u.backgroundColor.u.rgbTrueColor.g,
|
||
attributes->value.u.backgroundColor.u.rgbTrueColor.b));
|
||
break;
|
||
}
|
||
case(transparent_chosen):
|
||
{
|
||
SetBackGroundColor(0);
|
||
TRACE_DEBUG(("Backgroundcolor transparent"));
|
||
break;
|
||
}
|
||
default:
|
||
ERROR_OUT(("Invalid backgroundColor choice"));
|
||
break;
|
||
}
|
||
break;
|
||
}
|
||
|
||
case(preserve_chosen):
|
||
{
|
||
m_bPreserve = attributes->value.u.preserve;
|
||
TRACE_DEBUG(("m_bPreserve %d", m_bPreserve));
|
||
}
|
||
break;
|
||
}
|
||
|
||
attributes = attributes->next;
|
||
}
|
||
|
||
}
|
||
|
||
void WorkspaceObj::GetWorkSpacePlaneParam(PWorkspaceCreatePDU_planeParameters pPlaneParameters)
|
||
{
|
||
|
||
TRACE_DEBUG(("GetWorkSpacePlaneParam NYI"));
|
||
|
||
;
|
||
}
|
||
#endif // 0
|
||
|
||
|
||
|
||
void TogleLockInAllWorkspaces(BOOL bLock, BOOL bResend)
|
||
{
|
||
WorkspaceObj * pWorkspace;
|
||
WBPOSITION pos = g_pListOfWorkspaces->GetHeadPosition();
|
||
while (pos)
|
||
{
|
||
pWorkspace = (WorkspaceObj *) g_pListOfWorkspaces->GetNext(pos);
|
||
|
||
pWorkspace->SetUpdatesEnabled(!bLock);
|
||
if(bResend)
|
||
{
|
||
pWorkspace->SetViewActionChoice(editView_chosen);
|
||
pWorkspace->OnObjectEdit();
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|