/// <summary>method: SendToBack
        /// method to resequence arrayList so selected shape is
        /// drawn first
        /// </summary>
        /// <param name="aShape"></param>
        public void SendToBack(AnyShape aShape)
        {
            // first shape drawn is at the back
            // temp arrayList to resort shapes so selected shape is drawn first
            ArrayList sortList = new ArrayList();
            // find index of shape to be drawn first
            int max = shapeList.IndexOf(aShape);

            // first shape i.e. shape to send to back
            sortList.Add(aShape);
            // copy to sortList in correct sequence
            for (int i = 0; i < max; i++)
            {
                sortList.Add(shapeList[i]);
            }

            // copy sortList back to shapeList
            for (int i = 0; i < sortList.Count; i++)
            {
                shapeList[i] = sortList[i];
            }
            UpdateViews();
        }
        /// <summary>method: BringToFront
        /// method to resequence arrayList so selected shape is
        /// drawn last
        /// </summary>
        /// <param name="aShape"></param>
        public void BringToFront(AnyShape aShape)
        {
            // last shape drawn is at the front
            // temp arrayList to resort shapes so selected shape is drawn last
            ArrayList sortList = new ArrayList(shapeList);
            // find index of shape to be drawn last
            int max = shapeList.IndexOf(aShape);
            // find length of shapeList array
            int length = shapeList.Count;

            // copy shapeList to sortList excluding selected shape
            for (int i = max + 1; i < length; i++)
            {
                sortList[i - 1] = shapeList[i];
            }
            // last shape i.e. shape to bring to front
            sortList[length - 1] = shapeList[max];
            // copy sortList back to shapeList
            for (int i = 0; i < sortList.Count; i++)
            {
                shapeList[i] = sortList[i];
            }
            UpdateViews();
        }
 /// <summary>method: UpdateShape
 /// update views
 /// </summary>
 /// <param name="aShape"></param>
 public void UpdateShape(AnyShape aShape)
 {
     UpdateViews();
 }
 /// <summary>method: DeleteShape
 /// delete shape and update views
 /// </summary>
 /// <param name="aShape"></param>
 public void DeleteShape(AnyShape aShape)
 {
     shapeList.Remove(aShape);
     UpdateViews();
 }
 /// <summary>method: AddShape
 /// add shape to the model and update views
 /// </summary>
 /// <param name="aShape"></param>
 public void AddShape(AnyShape aShape)
 {
     shapeList.Add(aShape);
     UpdateViews();
 }