AIMS/DrawGraph/Graph/StockPointList.cs
2022-08-23 21:12:59 +08:00

172 lines
5.6 KiB
C#

//============================================================================
//PointPairList Class
//Copyright ?2006 John Champion
//
//This library is free software; you can redistribute it and/or
//modify it under the terms of the GNU Lesser General Public
//License as published by the Free Software Foundation; either
//version 2.1 of the License, or (at your option) any later version.
//
//This library 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
//Lesser General Public License for more details.
//
//You should have received a copy of the GNU Lesser General Public
//License along with this library; if not, write to the Free Software
//Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//=============================================================================
using System;
using System.Drawing;
using System.Collections.Generic;
namespace DrawGraph
{
/// <summary>
/// A collection class containing a list of <see cref="StockPt"/> objects
/// that define the set of points to be displayed on the curve.
/// </summary>
///
/// <author> John Champion based on code by Jerry Vos</author>
/// <version> $Revision: 3.4 $ $Date: 2007/02/18 05:51:54 $ </version>
[Serializable]
public class StockPointList : List<StockPt>, IPointList, IPointListEdit
{
#region Properties
/// <summary>
/// Indexer to access the specified <see cref="StockPt"/> object by
/// its ordinal position in the list.
/// </summary>
/// <param name="index">The ordinal position (zero-based) of the
/// <see cref="StockPt"/> object to be accessed.</param>
/// <value>A <see cref="StockPt"/> object reference.</value>
public new PointPair this[int index]
{
get { return base[index]; }
set { base[index] = new StockPt( value ); }
}
#endregion
#region Constructors
/// <summary>
/// Default constructor for the collection class
/// </summary>
public StockPointList()
{
}
/// <summary>
/// The Copy Constructor
/// </summary>
/// <param name="rhs">The StockPointList from which to copy</param>
public StockPointList( StockPointList rhs )
{
for ( int i = 0; i < rhs.Count; i++ )
{
StockPt pt = new StockPt( rhs[i] );
this.Add( pt );
}
}
/// <summary>
/// Implement the <see cref="ICloneable" /> interface in a typesafe manner by just
/// calling the typed version of <see cref="Clone" />
/// </summary>
/// <returns>A deep copy of this object</returns>
object ICloneable.Clone()
{
return this.Clone();
}
/// <summary>
/// Typesafe, deep-copy clone method.
/// </summary>
/// <returns>A new, independent copy of this class</returns>
public StockPointList Clone()
{
return new StockPointList( this );
}
#endregion
#region Methods
/// <summary>
/// Add a <see cref="StockPt"/> object to the collection at the end of the list.
/// </summary>
/// <param name="point">The <see cref="StockPt"/> object to
/// be added</param>
new public void Add( StockPt point )
{
base.Add( new StockPt( point ) );
}
/// <summary>
/// Add a <see cref="PointPair"/> object to the collection at the end of the list.
/// </summary>
/// <param name="point">The <see cref="PointPair"/> object to be added</param>
public void Add( PointPair point )
{
// throw new ArgumentException( "Error: Only the StockPt type can be added to StockPointList" +
// ". An ordinary PointPair is not allowed" );
base.Add( new StockPt( point ) );
}
/// <summary>
/// Add a <see cref="StockPt"/> object to the collection at the end of the list using
/// the specified values. The unspecified values (low, open, close) are all set to
/// <see cref="PointPairBase.Missing" />.
/// </summary>
/// <param name="date">An <see cref="XDate" /> value</param>
/// <param name="high">The high value for the day</param>
/// <returns>The zero-based ordinal index where the point was added in the list.</returns>
public void Add( double date, double high )
{
Add( new StockPt( date, high, PointPair.Missing, PointPair.Missing,
PointPair.Missing, PointPair.Missing ) );
}
/// <summary>
/// Add a single point to the <see cref="PointPairList"/> from values of type double.
/// </summary>
/// <param name="date">An <see cref="XDate" /> value</param>
/// <param name="high">The high value for the day</param>
/// <param name="low">The low value for the day</param>
/// <param name="open">The opening value for the day</param>
/// <param name="close">The closing value for the day</param>
/// <param name="vol">The trading volume for the day</param>
/// <returns>The zero-based ordinal index where the point was added in the list.</returns>
public void Add( double date, double high, double low, double open, double close, double vol )
{
StockPt point = new StockPt( date, high, low, open, close, vol );
Add( point );
}
/// <summary>
/// Access the <see cref="StockPt" /> at the specified ordinal index.
/// </summary>
/// <remarks>
/// To be compatible with the <see cref="IPointList" /> interface, the
/// <see cref="StockPointList" /> must implement an index that returns a
/// <see cref="PointPair" /> rather than a <see cref="StockPt" />. This method
/// will return the actual <see cref="StockPt" /> at the specified position.
/// </remarks>
/// <param name="index">The ordinal position (zero-based) in the list</param>
/// <returns>The specified <see cref="StockPt" />.
/// </returns>
public StockPt GetAt( int index )
{
return base[index];
}
#endregion
}
}