/// <summary> /// Initializes the position of the slide based on location. /// </summary> /// <param name="slide">The slide instance.</param> /// <param name="isFirst">A property indicating whether the slide is the /// first to be managed.</param> private void InitializePosition(Slide slide, bool isFirst) { SlidePosition c = slide.Position; SlidePosition expected = isFirst ? SlidePosition.Normal : SlidePosition.Right; if (c != expected) { slide.Position = expected; } // CONSIDER: Need to modify all others as well? if (_slides.First != null && _slides.First.Value == slide) { _current = _slides.First; } }
/// <summary> /// Moves to a specific slide, moving the others to the appropriate /// direction on screen. /// </summary> /// <param name="slide">The slide to move to.</param> public void MoveTo(Slide slide) { LinkedListNode<Slide> sn = _slides.Find(slide); if (sn != null) { // Before LinkedListNode<Slide> otherNode = sn.Previous; while (otherNode != null) { otherNode.Value.Position = SlidePosition.Right; otherNode = otherNode.Previous; } // The slide slide.Position = SlidePosition.Normal; _current = sn; // After otherNode = sn.Next; while (otherNode != null) { otherNode.Value.Position = SlidePosition.Left; otherNode = otherNode.Next; } } }
/// <summary> /// Remove a slide from management. /// </summary> /// <param name="slide">The slide instance.</param> public void Remove(Slide slide) { _slides.Remove(slide); }
/// <summary> /// Inserts a slide as the first in the linked list. /// </summary> /// <param name="newSlide">The new slide instance.</param> /// <returns>Returns the linked list node.</returns> public LinkedListNode<Slide> InsertFirst(Slide newSlide) { LinkedListNode<Slide> node = _slides.AddFirst(newSlide); InitializePosition(newSlide, true); return node; }
/// <summary> /// Insert a slide after a provided linked list node. /// </summary> /// <param name="before">The node to insert after.</param> /// <param name="newSlide">The new slide to insert.</param> /// <returns>Returns the new linked list node.</returns> public LinkedListNode<Slide> InsertAfter(LinkedListNode<Slide> before, Slide newSlide) { LinkedListNode<Slide> newNode; if (before == null) { newNode = _slides.AddFirst(newSlide); } else { newNode = _slides.AddAfter(before, newSlide); } InitializePosition(newSlide, before == null); return newNode; }
/// <summary> /// Manages a new slide, inserting it after an existing slide node. /// </summary> /// <param name="before">The node to insert after.</param> /// <param name="newSlide">The new slide instance.</param> /// <returns>Returns the linked list node that is inserted.</returns> public LinkedListNode<Slide> InsertAfter(Slide before, Slide newSlide) { if (before == null) { return InsertFirst(newSlide); } LinkedListNode<Slide> node = _slides.Find(before); return InsertAfter(node, newSlide); }
/// <summary> /// Creates a new slide and inserts it into the slide manager, plus /// visual tree. /// </summary> /// <param name="header">The text header to use.</param> /// <param name="content">The content to inside the slide.</param> /// <returns>Returns the new Slide instance.</returns> private Slide CreateAndInsertSlide(string header, object content) { Slide slide = new Slide(); slide.Content = content; slide.Header = new ContentControl { Content = header, Style = (Style)Resources["TextHeaderContent"], }; Slides.Children.Add(slide); _slides.InsertFirst(slide); // Front return slide; }