void CScreenEditView::DoScreenObjectBitmapPropertiesDlg(void)
{
	CScreenObjectBitmapPropertiesDlg sobDialog;
	CFEManDoc* pDoc = GetDocument();
	Screen *pWorkScreen = pDoc->GetFirstSelectedScreen();
	ScreenObjectBitmap *sob = (ScreenObjectBitmap *)pWorkScreen->GetFirstSelectedScreenObject();

	// Set up the dialog info.
	sobDialog.contentVisible = (sob->GetContentType() == ScreenObjectBitmap::CT_NORMAL);

	if(sob->GetMyUserInfo())
	{
		sobDialog.userInfo = new char [strlen(sob->GetMyUserInfo()) + 1];
		strcpy(sobDialog.userInfo, sob->GetMyUserInfo());
	}

	if(sobDialog.DoModal() == IDOK)
	{
		// Update all the info.
		sob->SetContentType((sobDialog.contentVisible ? ScreenObjectBitmap::CT_NORMAL : ScreenObjectBitmap::CT_NONE));

		sob->SetMyUserInfo(sobDialog.userInfo);
	}	

	delete [] sobDialog.userInfo;
}
void CScreenEditView::DoScreenObjectRectPropertiesDlg(void)
{
	CScreenObjectRectPropertiesDlg sorDialog;
	CFEManDoc* pDoc = GetDocument();
	Screen *pWorkScreen = pDoc->GetFirstSelectedScreen();
	ScreenObjectRect *sor = (ScreenObjectRect *)pWorkScreen->GetFirstSelectedScreenObject();

	// Set up the dialog info.
	sorDialog.borderColor = sor->GetBorderColor();
	sorDialog.contentColor = sor->GetContentColor();

	sorDialog.borderVisible = (sor->GetBorderType() == ScreenObjectRect::BT_NORMAL);
	sorDialog.contentVisible = (sor->GetContentType() == ScreenObjectRect::CT_NORMAL);

	sorDialog.borderWidth = sor->GetBorderWidth();

	sorDialog.contentWidth = sor->GetContentWidth();
	sorDialog.contentHeight = sor->GetContentHeight();

	if(sor->GetMyUserInfo())
	{
		sorDialog.userInfo = new char [strlen(sor->GetMyUserInfo()) + 1];
		strcpy(sorDialog.userInfo, sor->GetMyUserInfo());
	}
	
	if(sorDialog.DoModal() == IDOK)
	{
		// Update all the info.
		sor->SetBorderColor(sorDialog.borderColor);
		sor->SetContentColor(sorDialog.contentColor);

		sor->SetBorderType((sorDialog.borderVisible ? ScreenObjectRect::BT_NORMAL : ScreenObjectRect::BT_NONE));
		sor->SetContentType((sorDialog.contentVisible ? ScreenObjectRect::CT_NORMAL : ScreenObjectRect::CT_NONE));

		sor->SetBorderWidth(sorDialog.borderWidth);

		sor->SetContentWidth(sorDialog.contentWidth);
		sor->SetContentHeight(sorDialog.contentHeight);

		sor->SetMyUserInfo(sorDialog.userInfo);
	}	

	delete [] sorDialog.userInfo;
}
BOOL CScreenEditView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	CFEManDoc* pDoc = GetDocument();
	Screen *pWorkScreen;
	ScreenObject *pWorkObject;

	if(pDoc->GetNumSelectedScreenIcons() != 1)
		return(CView::OnSetCursor(pWnd, nHitTest, message));

	pWorkScreen = pDoc->GetFirstSelectedScreen();

	pWorkObject = pWorkScreen->GetFirstSelectedScreenObject();

	if(pWorkObject)
	{
		//ChooseMouseCursor();

		return(TRUE);
	}
	
	return(CView::OnSetCursor(pWnd, nHitTest, message));
}
void CScreenEditView::OnSosSizetocontent()
{
	CFEManDoc* pDoc = GetDocument();

	Screen *pWorkScreen = pDoc->GetFirstSelectedScreen();

	ScreenObject *pWorkObject = pWorkScreen->GetFirstSelectedScreenObject();

	while(pWorkObject)
	{
		if(pWorkObject->GetType() == ScreenObject::SOT_SCREENOBJECTSTRING)
		{
			CDC *pDC = GetDC();
			ScreenObjectString *sos = (ScreenObjectString *)pWorkObject;

			sos->SetStringBounds(pDC);
		}

		pWorkObject = (ScreenObject *)pWorkObject->GetNext();
	}

	Invalidate();
}
void CScreenEditView::DoScreenObjectStringPropertiesDlg(void)
{
	CStringObjectStringPropertiesDlg sosDialog;
	CFEManDoc* pDoc = GetDocument();
	Screen *pWorkScreen = pDoc->GetFirstSelectedScreen();
	ScreenObjectString *sos = (ScreenObjectString *)pWorkScreen->GetFirstSelectedScreenObject();
    unsigned long index;

	// Set up the dialog info.
	sosDialog.contentVisible = sos->GetContentType();
	
	sosDialog.myFont = *sos->GetMyFont();
	
    for (index = 0; index < NUMBER_LANGUAGES; index++)
    {
        if (sos->GetMyString(index) == NULL)
        {
            sosDialog.myString[index] = NULL;
        }
        else
        {
        	sosDialog.myString[index] = new char [strlen(sos->GetMyString(index)) + 1];
        	strcpy(sosDialog.myString[index], sos->GetMyString(index));
        }
    }

	sosDialog.textColor = sos->GetTextColor();
	sosDialog.textBackground = sos->GetTextBackground();

	sosDialog.autoSizeToContent = sos->GetAutoSizeToContent();

    sosDialog.justification = sos->GetJustification();

	if(sos->GetMyUserInfo())
	{
		sosDialog.userInfo = new char [strlen(sos->GetMyUserInfo()) + 1];
		strcpy(sosDialog.userInfo, sos->GetMyUserInfo());
	}

	if(sosDialog.DoModal() == IDOK)
	{
		// Update all the info.
		sos->SetContentType(sosDialog.contentVisible);

		sos->SetMyFont(&sosDialog.myFont);

        for (index = 0; index < NUMBER_LANGUAGES; index++)
        {
    		sos->SetMyString(sosDialog.myString[index], index);
        	delete [] sosDialog.myString[index];
        }

        sos->SetJustification(sosDialog.justification);

		sos->SetTextColor(sosDialog.textColor);
		sos->SetTextBackground(sosDialog.textBackground);

		sos->SetAutoSizeToContent(sosDialog.autoSizeToContent);

		sos->SetMyUserInfo(sosDialog.userInfo);
	}	


	delete [] sosDialog.userInfo;
}
void CScreenEditView::OnMouseMove(UINT nFlags, CPoint point)
{
	CFEManDoc* pDoc = GetDocument();
	Screen *pWorkScreen;

	// Only draw the screen object if there is one screen selected.
	if(pDoc->GetNumSelectedScreenIcons() != 1)
		return;

	CPoint gridPoint, tempPoint;
	unsigned long xRes, yRes;

	if(pDoc->gridActive)
	{
		tempPoint.x = point.x - DEFAULT_SCREEN_OFFSET_X;
		tempPoint.y = point.y - DEFAULT_SCREEN_OFFSET_Y;

		xRes = tempPoint.x / pDoc->gridSpacing;
		yRes = tempPoint.y / pDoc->gridSpacing;

		gridPoint.x = pDoc->gridSpacing * xRes;
		gridPoint.y = pDoc->gridSpacing * yRes;

		gridPoint.x += DEFAULT_SCREEN_OFFSET_X;
		gridPoint.y += DEFAULT_SCREEN_OFFSET_Y;
	}
	else
	{
		gridPoint = point;
	}

	pWorkScreen = pDoc->GetFirstSelectedScreen();
	
	switch(lButtonStatus)
	{
	case LBS_NORMAL:		// Nothing special.
		// Nothing to do with the left button.
		ChooseMouseCursor(&point);
		break;

	case LBS_WINDOWCLICK:	// Clicked on a window.
		// Track the selection window.

		// Update the current selection rectangle to stretch from the last left click
		// position to the current mouse position.

		selectionWindow.right = point.x;
		selectionWindow.bottom = point.y;

		// Let the document select all the screens within this rect.
		pWorkScreen->SelectScreenObjectsInRect(&selectionWindow);

		// Make sure we redraw this box.
		Invalidate();
		break;
	
	case LBS_SCREENOBJECTCLICK:	// Clicked on a screen object.
		// Move all selected objects.
		
		if(pDoc->gridActive)
		{
			pWorkScreen->SetExplicitScreensObjectPosition(&gridPoint);
		}
		else
		{
			pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &gridPoint);
		}

		// Make sure we only move the difference.
		lastLeftClick = gridPoint; // I'm cheating.  So sue me.  I'm fired.

		Invalidate();
		break;

	case LBS_IN_GIZMO_TOP_LEFT:
	case LBS_IN_GIZMO_TOP_MIDDLE:
	case LBS_IN_GIZMO_TOP_RIGHT:
	case LBS_IN_GIZMO_MIDDLE_LEFT:
	case LBS_IN_GIZMO_MIDDLE_RIGHT:
	case LBS_IN_GIZMO_BOTTOM_LEFT:
	case LBS_IN_GIZMO_BOTTOM_MIDDLE:
	case LBS_IN_GIZMO_BOTTOM_RIGHT:
		// Only get these if only one screen object selected.
		ScreenObject *so = (ScreenObject *)pWorkScreen->GetFirstSelectedScreenObject();

		so->Resize(&lastLeftClick, &gridPoint, lButtonStatus);

		// Make sure we only move the difference.
		lastLeftClick = gridPoint; // I'm cheating.  So sue me.  I'm fired.

		Invalidate();
		break;
	}
}
void CScreenEditView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	CFEManDoc* pDoc = GetDocument();
	CPoint workPoint = lastLeftClick;
	unsigned long moveDist = 0;
	Screen *pWorkScreen;
	ScreenObject *pWorkObject;

	// Only draw the screen object if there is one screen selected.
	if(pDoc->GetNumSelectedScreenIcons() != 1)
		return;

	pWorkScreen = pDoc->GetFirstSelectedScreen();
	
	if(pDoc->gridActive)
	{
		moveDist = pDoc->gridSpacing;
	}
	else
	{
		moveDist = 1;
	}

	switch(nChar)
	{
	case VK_LEFT:
		workPoint.x -= moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_RIGHT:
		workPoint.x += moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_UP:
		workPoint.y -= moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_DOWN:
		workPoint.y += moveDist;
		pWorkScreen->RelocateSelectedScreensObjects(&lastLeftClick, &workPoint);
		lastLeftClick = workPoint;
		break;

	case VK_TAB:
		pWorkObject = pWorkScreen->GetFirstSelectedScreenObject();

		if(pWorkObject)
		{
			pWorkObject = pWorkScreen->GetFirstSelectedScreenObject();

			pWorkObject = (ScreenObject *)pWorkObject->GetNext();

			pWorkScreen->ClearAllSelectedScreenObjects();

			if(pWorkObject)
			{
				pWorkScreen->SelectScreenObject(pWorkObject);
			}
			else
			{
				pWorkScreen->SelectScreenObject(pWorkScreen->GetFirstScreenObject());
			}
		}
		else
		{
			pWorkScreen->SelectScreenObject(pWorkScreen->GetFirstScreenObject());
		}
		break;
	}

	Invalidate();

	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}