private void RemoveButton_Click(object sender, RoutedEventArgs e)
        {
            Visualization item  = (Visualization)visualizationGrid.SelectedItem;
            int           index = visualizationGrid.SelectedIndex;

            VisualizationList.RemoveAt(index);

            // Keep selection at same index, unless we just removed the item at the end.
            if (index == VisualizationList.Count)
            {
                index--;
            }
            if (index >= 0)
            {
                visualizationGrid.SelectedIndex = index;
            }

            RemovedSerials.Add(item.SerialNumber);

            // Update any animations in this set.  Animations in other sets will be updated later.
            // (This is a bit awkward because we can't modify VisualizationList while iterating
            // through it, and there's no simple "replace entry" operation on an observable
            // collection.  Fortunately we don't do this often and the data sets are small.)
            List <VisualizationAnimation> needsUpdate = new List <VisualizationAnimation>();

            foreach (Visualization vis in VisualizationList)
            {
                if (vis is VisualizationAnimation)
                {
                    VisualizationAnimation visAnim = (VisualizationAnimation)vis;
                    if (visAnim.ContainsSerial(item.SerialNumber))
                    {
                        needsUpdate.Add(visAnim);
                    }
                }
            }
            foreach (VisualizationAnimation visAnim in needsUpdate)
            {
                VisualizationAnimation newAnim;
                if (VisualizationAnimation.StripEntries(visAnim,
                                                        new List <int>(1)
                {
                    item.SerialNumber
                }, out newAnim))
                {
                    if (newAnim.Count == 0)
                    {
                        VisualizationList.Remove(visAnim);
                    }
                    else
                    {
                        newAnim.GenerateImage(CreateEditedSetList());
                        index = VisualizationList.IndexOf(visAnim);
                        VisualizationList.Remove(visAnim);
                        VisualizationList.Insert(index, newAnim);
                    }
                }
            }
        }
        private void DownButton_Click(object sender, RoutedEventArgs e)
        {
            Visualization item  = (Visualization)visualizationGrid.SelectedItem;
            int           index = visualizationGrid.SelectedIndex;

            Debug.Assert(index >= 0 && index < VisualizationList.Count - 1);
            VisualizationList.RemoveAt(index);
            VisualizationList.Insert(index + 1, item);
            visualizationGrid.SelectedIndex = index + 1;
            visualizationGrid.ScrollIntoView(item);
        }
        private void NewBitmapAnimationButton_Click(object sender, RoutedEventArgs e)
        {
            EditBitmapAnimation dlg = new EditBitmapAnimation(this, mOffset,
                                                              CreateEditedSetList(), null);

            if (dlg.ShowDialog() != true)
            {
                return;
            }
            VisualizationList.Add(dlg.NewAnim);
            visualizationGrid.SelectedIndex = VisualizationList.Count - 1;

            okButton.Focus();
        }
        private void EditSelectedItem()
        {
            if (!IsEditEnabled)
            {
                // can get called here by a double-click
                return;
            }
            Visualization item = (Visualization)visualizationGrid.SelectedItem;
            Visualization newVis;

            if (item is VisualizationAnimation)
            {
                EditBitmapAnimation dlg = new EditBitmapAnimation(this, mOffset,
                                                                  CreateEditedSetList(), (VisualizationAnimation)item);
                if (dlg.ShowDialog() != true)
                {
                    return;
                }
                newVis = dlg.NewAnim;
            }
            else
            {
                EditVisualization dlg = new EditVisualization(this, mProject, mFormatter, mOffset,
                                                              CreateEditedSetList(), item);
                if (dlg.ShowDialog() != true)
                {
                    return;
                }
                newVis = dlg.NewVis;
            }

            int index = VisualizationList.IndexOf(item);

            VisualizationList.Remove(item);
            VisualizationList.Insert(index, newVis);
            visualizationGrid.SelectedIndex = index;

            okButton.Focus();
        }
        public EditVisualizationSet(Window owner, DisasmProject project, Formatter formatter,
                                    VisualizationSet curSet, int offset)
        {
            InitializeComponent();
            Owner       = owner;
            DataContext = this;

            mProject   = project;
            mFormatter = formatter;
            mOrigSet   = curSet;
            mOffset    = offset;

            RemovedSerials = new List <int>();

            if (curSet != null)
            {
                // Populate the data grid ItemsSource.
                foreach (Visualization vis in curSet)
                {
                    VisualizationList.Add(vis);
                }
            }
            if (VisualizationList.Count > 0)
            {
                visualizationGrid.SelectedIndex = 0;
            }

            // Check to see if we have any relevant plugins.  If not, disable New/Edit.
            Dictionary <string, IPlugin> plugins = project.GetActivePlugins();

            foreach (IPlugin chkPlug in plugins.Values)
            {
                if (chkPlug is IPlugin_Visualizer)
                {
                    HasVisPlugins = true;
                    break;
                }
            }
        }