/*============================================================================= Project: SharpImage Module: siFormSelectDirectedSeed.cs Language: C# Author: Dan Mueller Date: $Date: 2007-07-06 10:57:00 +1000 (Fri, 06 Jul 2007) $ Revision: $Revision: 2 $ Copyright (c) Queensland University of Technology (QUT) 2007. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =============================================================================*/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using SharpImage.Rendering; namespace SharpImage.Forms { public partial class siFormSelectDirectedSeed : siFormTool { private siDirectedSeedSelector m_DirectedSeedSelector; public siFormSelectDirectedSeed(siRenderer renderer) : base(renderer) { InitializeComponent(); // Add Form handlers this.FormClosed += new FormClosedEventHandler(FormDirectedSeed_FormClosed); // Add Actor this.m_DirectedSeedSelector = new siDirectedSeedSelector(this.Renderer); this.DirectedSeedSelector.DirectedSeedAdded += new siDirectedSeedSelector.siDirectedSeedHandler(DirectedSeedSelector_SeedAdded); this.DirectedSeedSelector.DirectedSeedSelected += new siDirectedSeedSelector.siDirectedSeedHandler(DirectedSeedSelector_SeedSelected); this.DirectedSeedSelector.Modified += new siActor.siActorHandler(DirectedSeedSelector_Modified); this.Renderer.AddActorToFront(this.DirectedSeedSelector); } /// /// Gets the siDirectedSeedSelector Actor associated with this form. /// public siDirectedSeedSelector DirectedSeedSelector { get { return this.m_DirectedSeedSelector; } } /// /// Gets the list of directed seeds from the siDirectedSeedSelector actor. /// public List DirectedSeeds { get { return this.m_DirectedSeedSelector.DirectedSeeds; } } void FormDirectedSeed_FormClosed(object sender, FormClosedEventArgs e) { // Remove renderer handlers this.Renderer.RemoveActor(this.DirectedSeedSelector); this.DirectedSeedSelector.DirectedSeedAdded -= new siDirectedSeedSelector.siDirectedSeedHandler(DirectedSeedSelector_SeedSelected); this.DirectedSeedSelector.DirectedSeedSelected -= new siDirectedSeedSelector.siDirectedSeedHandler(DirectedSeedSelector_SeedAdded); } void DirectedSeedSelector_SeedSelected(siDirectedSeedSelector sender, siDirectedSeed direction) { foreach (ListViewItem item in this.listSeeds.Items) { if (item.Tag as siDirectedSeed == direction) item.Selected = true; else item.Selected = false; } } void DirectedSeedSelector_SeedAdded(siDirectedSeedSelector sender, siDirectedSeed directedSeed) { // Add directed seed to the list ListViewItem newItem = new ListViewItem(directedSeed.Seed.ToString()); newItem.Tag = directedSeed; newItem.SubItems.Add(directedSeed.Direction.ToString()); this.listSeeds.Items.Add(newItem); newItem.Selected = true; } void DirectedSeedSelector_Modified(siActor sender) { siDirectedSeed selected = (sender as siDirectedSeedSelector).SelectedDirectedSeed; foreach (ListViewItem item in this.listSeeds.Items) { if (item.Tag == selected) { item.SubItems[1].Text = selected.Direction.ToString(); break; } } } private void cmdClear_Click(object sender, EventArgs e) { this.DirectedSeedSelector.ClearDirectedSeeds(); this.listSeeds.Items.Clear(); } protected override void OnContinue(object sender, ContinueEventArgs e) { if (this.DirectedSeeds.Count >= 1) base.OnContinue(sender, e); else { string caption = "No directed seeds were selected"; string text = "No directed seeds were selected. At least one directed seed must be chosen."; this.ParentApplication.ShowMessageBox(text, caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); e.SuppressContinue = true; return; } } private void menuItemRemove_Click(object sender, EventArgs e) { this.RemoveSelectedDirectedSeed(); } private void listSeeds_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back || e.KeyCode == Keys.D) this.RemoveSelectedDirectedSeed(); } private void RemoveSelectedDirectedSeed() { siDirectedSeed directedSeed = this.listSeeds.SelectedItems[0].Tag as siDirectedSeed; this.DirectedSeeds.Remove(directedSeed); this.listSeeds.Items.Remove(this.listSeeds.SelectedItems[0]); this.listSeeds.SelectedIndices.Clear(); if (this.listSeeds.SelectedItems.Count == 0) this.DirectedSeedSelector.SelectDirectedSeed(null); } private void listSeeds_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { if (e.IsSelected) this.DirectedSeedSelector.SelectDirectedSeed(e.Item.Tag as siDirectedSeed); else this.DirectedSeedSelector.SelectDirectedSeed(null); } } }