/******************************************************************************
 * DiagnosticImage.cs 
 * 
 * <Copyright and License> 
 * 
 * This file is part of GODS, a package for annotating medical images. 
 * 
 * Copyright (C) 2004 
 * Xuedong Chen 
 * Heri Mariwa 
 * Kimmy (Hsiang-ling) Lin 
 * Rui Yu 
 * 
 * This program is free software; you can redistribute it and/or 
 * modify it under the terms of the GNU General Public License 
 * as published by the Free Software Foundation; either version 2 
 * of the License, or (at your option) any later version. 
 * 
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
 * GNU General Public License for more details. 
 * 
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 
 *  
 * For further questions about this file, please send email to 
 * gods@cs.umb.edu or visit us at http://gods.sourceforge.net.  
 ******************************************************************************/

using System;
using System.Drawing;
using System.Collections;

namespace GODS
{
	using MarkData;

	/// <summary>
	/// DiagnosticImage is abstract class for all kinds of diagnostic image
	/// For Breast sketch, mammogram and others, implemetation is required.
	/// 
	/// 
	/// GODS Team 2004
	/// </summary>
	public abstract class DiagnosticImage
	{
		private Bitmap realImage;
		private string latestSummary;

		public DiagnosticImage(Bitmap image)
		{
			this.realImage = image;
		}

		/// <summary>
		/// getter and setter for actural Image
		/// </summary>
		public Image RealImage
		{
			get
			{
				return realImage;
			}
		}

		// Constructed everytime a summary is build, thus always the latest.
		// Save the effort to reconstruct the summary when saving the annotation
		// to the database.
		protected internal string LatestSummary
		{
			get
			{
				return this.latestSummary;
			}
			set
			{
				this.latestSummary = value;
			}
		}

		/// <summary>
		/// abstract function require each subclass to implement it.
		/// Based on different image, which knows what to update
		/// </summary>
		/// <param name="curPoint"></param>
		/// <param name="mark"></param>
		//public abstract void UpdateMark(Point curPoint, Mark mark);

		public abstract ArrayList buildSummary(ArrayList marks);

		public abstract void saveAnnoImage(string path, ArrayList marks);
	}
}
