Exemple #1
0
        public static void CreateContextMenu(int i, Neuron n, ContextMenu cm)
        {
            cmCancelled = false;

            labelChanged     = false;
            modelChanged     = false;
            enabledChanged   = false;
            historyChanged   = false;
            synapsesChanged  = false;
            chargeChanged    = false;
            leakRateChanged  = false;
            axonDelayChanged = false;

            n = MainWindow.theNeuronArray.AddSynapses(n);
            cm.SetValue(NeuronIDProperty, n.Id);
            cm.Closed         += Cm_Closed;
            cm.Opened         += Cm_Opened;
            cm.PreviewKeyDown += Cm_PreviewKeyDown;
            cmCancelled        = false;
            cm.StaysOpen       = true;

            //The neuron label
            StackPanel sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };

            sp.Children.Add(new Label {
                Content = "ID: " + n.id + "   Label: ", VerticalAlignment = VerticalAlignment.Center, Padding = new Thickness(0)
            });
            TextBox tb = Utils.ContextMenuTextBox(n.Label, "Label", 150);

            tb.TextChanged += Tb_TextChanged;
            sp.Children.Add(tb);
            sp.Children.Add(new Label {
                Content = "Warning:\rDuplicate Label", FontSize = 8, Name = "DupWarn", Visibility = Visibility.Hidden
            });
            //            cm.Items.Add(sp);
            //MenuItem mi = new MenuItem { StaysOpenOnClick = true, Header = new TextBox { Text = "Harry" } };
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = sp
            });

            //The neuron model
            sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };
            sp.Children.Add(new Label {
                Content = "Model: ", Padding = new Thickness(0)
            });
            ComboBox cb = new ComboBox()
            {
                Width = 100, Name = "Model"
            };

            for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++)
            {
                Neuron.modelType model = (Neuron.modelType)index;
                cb.Items.Add(new ListBoxItem()
                {
                    Content = model.ToString(),
                    ToolTip = Neuron.modelToolTip[index],
                    Width   = 100,
                });
            }
            cb.SelectedIndex     = (int)n.Model;
            cb.SelectionChanged += Cb_SelectionChanged;
            sp.Children.Add(cb);
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = sp
            });

            cm.Items.Add(new Separator());

            MenuItem mi             = new MenuItem();
            CheckBox cbShowSynapses = new CheckBox
            {
                IsChecked = (n.leakRate > 0) || float.IsPositiveInfinity(1.0f / n.leakRate),
                Content   = "Enabled",
                Name      = "Enabled",
            };

            cbShowSynapses.Checked   += CbCheckedChanged;
            cbShowSynapses.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbShowSynapses
            });

            cbShowSynapses = new CheckBox
            {
                IsChecked = MainWindow.arrayView.IsShowingSnapses(n.id),
                Content   = "Show Synapses",
                Name      = "Synapses",
            };
            cbShowSynapses.Checked   += CbCheckedChanged;
            cbShowSynapses.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbShowSynapses
            });

            mi = new MenuItem();
            CheckBox cbHistory = new CheckBox
            {
                IsChecked = FiringHistory.NeuronIsInFiringHistory(n.id),
                Content   = "Record Firing History",
                Name      = "History",
            };

            cbHistory.Checked   += CbCheckedChanged;
            cbHistory.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbHistory
            });

            mi        = new MenuItem();
            mi.Header = "Synapses Out";
            foreach (Synapse s in n.Synapses)
            {
                string   targetLabel     = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label;
                MenuItem synapseMenuItem = new MenuItem()
                {
                    Header = s.targetNeuron.ToString().PadLeft(8) + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New")
                };
                synapseMenuItem.Click += Mi_Click;
                synapseMenuItem.PreviewMouseRightButtonDown += SynapseMenuItem_PreviewMouseRightButtonDown;
                synapseMenuItem.ToolTip = "L-click -> target neuron, R-Click -> edit synapse";
                mi.Items.Add(synapseMenuItem);
            }
            cm.Items.Add(mi);

            mi        = new MenuItem();
            mi.Header = "Synapses In";
            foreach (Synapse s in n.SynapsesFrom)
            {
                string   targetLabel     = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label;
                MenuItem synapseMenuItem = new MenuItem()
                {
                    Header = s.targetNeuron.ToString().PadLeft(8) + " " + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New")
                };
                synapseMenuItem.Click += Mi_Click;
                synapseMenuItem.PreviewMouseRightButtonDown += SynapseFromMenuItem_PreviewMouseRightButtonDown1;
                synapseMenuItem.ToolTip = "L-click -> source neuron, R-Click -> edit synapse";
                mi.Items.Add(synapseMenuItem);;
            }
            cm.Items.Add(mi);

            mi = new MenuItem {
                Header = "Paste Here"
            };
            if (MainWindow.myClipBoard == null)
            {
                mi.IsEnabled = false;
            }
            mi.Click += Mi_Click;
            cm.Items.Add(mi);
            mi = new MenuItem {
                Header = "Move Here"
            };
            if (MainWindow.arrayView.theSelection.selectedRectangles.Count == 0)
            {
                mi.IsEnabled = false;
            }
            mi.Click += Mi_Click;
            cm.Items.Add(mi);


            mi        = new MenuItem();
            mi.Header = "Connect Multiple Synapses";
            mi.Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "From Selection to Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "From Here to Selection"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Mutual Suppression"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            cm.Items.Add(mi);

            if (NeuronInSelection(n.id))
            {
                cbShowSynapses = new CheckBox
                {
                    IsChecked = true,
                    Content   = "Apply changes to all neurons in selection",
                    Name      = "ApplyToSelection",
                };
                cbShowSynapses.Checked   += CbCheckedChanged;
                cbShowSynapses.Unchecked += CbCheckedChanged;
                cm.Items.Add(new MenuItem {
                    StaysOpenOnClick = true, Header = cbShowSynapses
                });
            }


            sp = new StackPanel {
                Orientation = Orientation.Horizontal
            };
            Button b0 = new Button {
                Content = "OK", Width = 100, Height = 25, Margin = new Thickness(10)
            };

            b0.Click += B0_Click;
            sp.Children.Add(b0);
            b0 = new Button {
                Content = "Cancel", Width = 100, Height = 25, Margin = new Thickness(10)
            };
            b0.Click += B0_Click;
            sp.Children.Add(b0);

            cm.Items.Add(new MenuItem {
                Header = sp, StaysOpenOnClick = true
            });

            SetCustomCMItems(cm, n, n.model);
        }
Exemple #2
0
        public static void CreateContextMenu(int i, Neuron n, ContextMenu cm)
        {
            cm.SetValue(NeuronIDProperty, n.Id);
            cm.Closed  += Cm_Closed;
            cmCancelled = false;
            StackPanel sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };

            sp.Children.Add(new Label {
                Content = "Charge: ", Padding = new Thickness(0)
            });
            if (n.Model != Neuron.modelType.FloatValue)
            {
                sp.Children.Add(new TextBox {
                    Text = n.LastCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center
                });
            }
            else
            {
                sp.Children.Add(new TextBox {
                    Text = n.CurrentCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center
                });
            }
            cm.Items.Add(sp);
            if (n.Model == Neuron.modelType.LIF)
            {
                sp = new StackPanel {
                    Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
                };
                sp.Children.Add(new Label {
                    Content = "Leak Rate: ", Padding = new Thickness(0)
                });
                sp.Children.Add(new TextBox {
                    Text = n.LeakRate.ToString("f4"), Width = 60, Name = "LeakRate", VerticalAlignment = VerticalAlignment.Center
                });
                cm.Items.Add(sp);
            }

            MenuItem mi = new MenuItem();

            mi.Header = "Neuron ID: " + n.Id;
            cm.Items.Add(mi);
            cm.Items.Add(new Separator());
            mi        = new MenuItem();
            mi.Header = "Always Fire";
            mi.Click += Mi_Click;
            cm.Items.Add(mi);
            mi        = new MenuItem();
            mi.Header = "Paste Here";
            mi.Click += Mi_Click;
            cm.Items.Add(mi);
            mi        = new MenuItem();
            mi.Header = "Clipboard";
            mi.Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Paste Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Move Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Connect to Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Connect from Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Select as Target"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            cm.Items.Add(mi);
            sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };
            sp.Children.Add(new Label {
                Content = "Label: ", Padding = new Thickness(0)
            });
            sp.Children.Add(new TextBox {
                Text = n.Label, Width = 150, Name = "Label", VerticalAlignment = VerticalAlignment.Center
            });
            cm.Items.Add(sp);

            sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };
            sp.Children.Add(new Label {
                Content = "Model: ", Padding = new Thickness(0)
            });
            ComboBox cb = new ComboBox()
            {
                Width = 100
            };

            for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++)
            {
                Neuron.modelType model = (Neuron.modelType)index;
                cb.Items.Add(new ListBoxItem()
                {
                    Content = model.ToString(),
                    ToolTip = Neuron.modelToolTip[index],
                    Width   = 100,
                });
            }
            cb.SelectedIndex     = (int)n.Model;
            cb.SelectionChanged += Cb_SelectionChanged;
            sp.Children.Add(cb);
            cm.Items.Add(sp);
            CheckBox cbHistory = new CheckBox
            {
                IsChecked = n.KeepHistory,
                Content   = "Record Firing History",
                Name      = "History",
            };

            cbHistory.Checked   += CbHistory_Checked;
            cbHistory.Unchecked += CbHistory_Checked;
            cm.Items.Add(cbHistory);

            mi        = new MenuItem();
            mi.Header = "Synapses";
            mi.Click += Mi_Click;
            if (n.synapses == null)
            {
                n.synapses = new List <Synapse>();
            }
            foreach (Synapse s in n.synapses)
            {
                mi.Items.Add(new MenuItem()
                {
                    Header = s.targetNeuron + " " + s.Weight
                });
            }

            cm.Items.Add(mi);

            mi        = new MenuItem();
            mi.Header = "Synapses In";
            mi.Click += Mi_Click;
            if (n.synapsesFrom == null)
            {
                n.synapsesFrom = new List <Synapse>();
            }
            foreach (Synapse s in n.synapsesFrom)
            {
                mi.Items.Add(new MenuItem()
                {
                    Header = s.targetNeuron + " " + s.Weight
                });
            }
            cm.Items.Add(mi);
        }
Exemple #3
0
        public static void CreateContextMenu(int i, Neuron n, ContextMenu cm)
        {
            n = MainWindow.theNeuronArray.AddSynapses(n);
            cm.SetValue(NeuronIDProperty, n.Id);
            cm.Closed  += Cm_Closed;
            cmCancelled = false;
            StackPanel sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };

            sp.Children.Add(new Label {
                Content = "Charge: ", Padding = new Thickness(0)
            });
            if (n.Model == Neuron.modelType.FloatValue)
            {
                sp.Children.Add(new TextBox {
                    Text = n.CurrentCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center
                });
            }
            else if (n.model == Neuron.modelType.Color)
            {
                sp.Children.Add(new TextBox {
                    Text = n.LastChargeInt.ToString("X"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center
                });
            }
            else
            {
                sp.Children.Add(new TextBox {
                    Text = n.LastCharge.ToString("f2"), Width = 60, Name = "CurrentCharge", VerticalAlignment = VerticalAlignment.Center
                });
            }
            cm.Items.Add(sp);
            if (n.Model == Neuron.modelType.LIF || n.model == Neuron.modelType.Random)
            {
                sp = new StackPanel {
                    Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
                };
                sp.Children.Add(new Label {
                    Content = "Leak Rate: ", Padding = new Thickness(0)
                });
                sp.Children.Add(new TextBox {
                    Text = n.LeakRate.ToString("f4"), Width = 60, Name = "LeakRate", VerticalAlignment = VerticalAlignment.Center
                });
                cm.Items.Add(sp);
            }

            MenuItem mi = new MenuItem();

            mi.Header = "Neuron ID: " + n.Id;
            cm.Items.Add(mi);
            cm.Items.Add(new Separator());
            mi        = new MenuItem();
            mi.Header = "Always Fire";
            mi.Click += Mi_Click;
            cm.Items.Add(mi);
            mi        = new MenuItem();
            mi.Header = "Paste Here";
            mi.Click += Mi_Click;
            cm.Items.Add(mi);
            mi        = new MenuItem();
            mi.Header = "Clipboard";
            mi.Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Paste Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Move Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Connect to Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Connect from Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Select as Target"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            cm.Items.Add(mi);
            sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };
            sp.Children.Add(new Label {
                Content = "Label: ", Padding = new Thickness(0)
            });
            sp.Children.Add(new TextBox {
                Text = n.Label, Width = 150, Name = "Label", VerticalAlignment = VerticalAlignment.Center
            });
            cm.Items.Add(sp);

            sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };
            sp.Children.Add(new Label {
                Content = "Model: ", Padding = new Thickness(0)
            });
            ComboBox cb = new ComboBox()
            {
                Width = 100
            };

            for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++)
            {
                Neuron.modelType model = (Neuron.modelType)index;
                cb.Items.Add(new ListBoxItem()
                {
                    Content = model.ToString(),
                    ToolTip = Neuron.modelToolTip[index],
                    Width   = 100,
                });
            }
            cb.SelectedIndex     = (int)n.Model;
            cb.SelectionChanged += Cb_SelectionChanged;
            sp.Children.Add(cb);
            cm.Items.Add(sp);
            CheckBox cbHistory = new CheckBox
            {
                IsChecked = FiringHistory.NeuronIsInFiringHistory(n.id),
                Content   = "Record Firing History",
                Name      = "History",
            };

            cbHistory.Checked   += CbHistory_Checked;
            cbHistory.Unchecked += CbHistory_Checked;
            cm.Items.Add(cbHistory);

            mi        = new MenuItem();
            mi.Header = "Synapses";
            foreach (Synapse s in n.Synapses)
            {
                string   targetLabel     = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label;
                MenuItem synapseMenuItem = new MenuItem()
                {
                    Header = s.targetNeuron.ToString().PadLeft(8) + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New")
                };
                synapseMenuItem.Click += Mi_Click;
                synapseMenuItem.PreviewMouseRightButtonDown += SynapseMenuItem_PreviewMouseRightButtonDown;
                synapseMenuItem.ToolTip = "L-click -> target neuron, R-Click -> edit synapse";
                mi.Items.Add(synapseMenuItem);
            }
            cm.Items.Add(mi);

            mi        = new MenuItem();
            mi.Header = "Synapses In";
            foreach (Synapse s in n.SynapsesFrom)
            {
                string   targetLabel     = MainWindow.theNeuronArray.GetNeuron(s.targetNeuron).Label;
                MenuItem synapseMenuItem = new MenuItem()
                {
                    Header = s.targetNeuron.ToString().PadLeft(8) + " " + s.Weight.ToString("F3").PadLeft(9) + " " + targetLabel, FontFamily = new FontFamily("Courier New")
                };
                synapseMenuItem.Click += Mi_Click;
                synapseMenuItem.PreviewMouseRightButtonDown += SynapseFromMenuItem_PreviewMouseRightButtonDown1;
                synapseMenuItem.ToolTip = "L-click -> source neuron, R-Click -> edit synapse";
                mi.Items.Add(synapseMenuItem);;
            }
            cm.Items.Add(mi);
        }
        public static ContextMenu CreateContextMenu(int i, Neuron n, ContextMenu cm)
        {
            cmCancelled = false;

            labelChanged     = false;
            toolTipChanged   = false;
            modelChanged     = false;
            enabledChanged   = false;
            historyChanged   = false;
            synapsesChanged  = false;
            chargeChanged    = false;
            leakRateChanged  = false;
            axonDelayChanged = false;

            n = MainWindow.theNeuronArray.AddSynapses(n);
            cm.SetValue(NeuronIDProperty, n.Id);
            cm.Closed         += Cm_Closed;
            cm.Opened         += Cm_Opened;
            cm.PreviewKeyDown += Cm_PreviewKeyDown;
            cmCancelled        = false;
            cm.StaysOpen       = true;
            cm.Width           = 300;

            //The neuron label
            MenuItem mi1 = new MenuItem {
                Header = "ID: " + n.id, Padding = new Thickness(0)
            };

            cm.Items.Add(mi1);

            //apply to all in selection
            CheckBox cbApplyToSelection = new CheckBox
            {
                IsChecked = true,
                Content   = "Apply changes to all neurons in selection",
                Name      = "ApplyToSelection",
            };

            cbApplyToSelection.Checked   += CbCheckedChanged;
            cbApplyToSelection.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbApplyToSelection
            });
            if (MainWindow.arrayView.theSelection.selectedRectangles.Count > 0)
            {
                cbApplyToSelection.IsEnabled = true;
                cbApplyToSelection.IsChecked = NeuronInSelection(n.id);
            }
            else
            {
                cbApplyToSelection.IsChecked = false;
                cbApplyToSelection.IsEnabled = false;
            }

            //label
            StackPanel sp = new StackPanel {
                Orientation = Orientation.Horizontal,
            };

            sp.Children.Add(new Label {
                Content = "Label: ", Padding = new Thickness(0), VerticalAlignment = VerticalAlignment.Center,
            });;
            TextBox tb = Utils.ContextMenuTextBox(n.Label, "Label", 170);

            tb.TextChanged += Tb_TextChanged;
            sp.Children.Add(tb);
            sp.Children.Add(new Label {
                Content = "Warning: Duplicate Label", FontSize = 8, Name = "DupWarn", Visibility = Visibility.Hidden
            });
            mi1 = new MenuItem {
                StaysOpenOnClick = true, Header = sp
            };
            cm.Items.Add(mi1);

            //tooltip
            if (n.Label != "" || n.ToolTip != "") //add the tooltip textbox if needed
            {
                sp = new StackPanel {
                    Orientation = Orientation.Horizontal
                };
                sp.Children.Add(new Label {
                    Content = "Tooltip: ", VerticalAlignment = VerticalAlignment.Center, Padding = new Thickness(0)
                });
                tb              = Utils.ContextMenuTextBox(n.ToolTip, "ToolTip", 150);
                tb.TextChanged += Tb_TextChanged;
                sp.Children.Add(tb);
                cm.Items.Add(sp);
            }

            //The neuron model
            sp = new StackPanel {
                Orientation = Orientation.Horizontal, Margin = new Thickness(0, 3, 3, 3)
            };
            sp.Children.Add(new Label {
                Content = "Model: ", Padding = new Thickness(0)
            });
            ComboBox cb = new ComboBox()
            {
                Width = 80, Name = "Model"
            };

            for (int index = 0; index < Enum.GetValues(typeof(Neuron.modelType)).Length; index++)
            {
                Neuron.modelType model = (Neuron.modelType)index;
                cb.Items.Add(new ListBoxItem()
                {
                    Content = model.ToString(),
                    ToolTip = Neuron.modelToolTip[index],
                    Width   = 100,
                });
            }
            cb.SelectedIndex     = (int)n.Model;
            cb.SelectionChanged += Cb_SelectionChanged;
            sp.Children.Add(cb);
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = sp
            });

            cm.Items.Add(new Separator {
                Visibility = Visibility.Collapsed
            });
            cm.Items.Add(new Separator {
                Visibility = Visibility.Collapsed
            });


            MenuItem mi             = new MenuItem();
            CheckBox cbEnableNeuron = new CheckBox
            {
                IsChecked = (n.leakRate > 0) || float.IsPositiveInfinity(1.0f / n.leakRate),
                Content   = "Enabled",
                Name      = "Enabled",
            };

            cbEnableNeuron.Checked   += CbCheckedChanged;
            cbEnableNeuron.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbEnableNeuron
            });

            CheckBox cbShowSynapses = new CheckBox
            {
                IsChecked = MainWindow.arrayView.IsShowingSynapses(n.id),
                Content   = "Show Synapses",
                Name      = "Synapses",
            };

            cbShowSynapses.Checked   += CbCheckedChanged;
            cbShowSynapses.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbShowSynapses
            });

            mi = new MenuItem();
            CheckBox cbHistory = new CheckBox
            {
                IsChecked = FiringHistory.NeuronIsInFiringHistory(n.id),
                Content   = "Record Firing History",
                Name      = "History",
            };

            cbHistory.Checked   += CbCheckedChanged;
            cbHistory.Unchecked += CbCheckedChanged;
            cm.Items.Add(new MenuItem {
                StaysOpenOnClick = true, Header = cbHistory
            });

            mi = new MenuItem {
                Header = "Clear Synapses"
            };
            mi.Click += Mi_Click;
            cm.Items.Add(mi);

            cm.Items.Add(new Separator());
            cm.Items.Add(new Separator());

            mi        = new MenuItem();
            mi.Header = "Synapses Out";
            mi.Width  = 250;
            mi.HorizontalAlignment = HorizontalAlignment.Left;
            foreach (Synapse s in n.Synapses)
            {
                AddSynapseEntryToMenu(mi, s);
            }
            cm.Items.Add(mi);

            mi        = new MenuItem();
            mi.Header = "Synapses In";
            mi.Width  = 250;
            mi.HorizontalAlignment = HorizontalAlignment.Left;
            foreach (Synapse s in n.SynapsesFrom)
            {
                AddSynapseEntryToMenu(mi, s);
            }
            cm.Items.Add(mi);

            mi = new MenuItem {
                Header = "Paste Here"
            };
            if (!XmlFile.WindowsClipboardContainsNeuronArray())
            {
                mi.IsEnabled = false;
            }
            mi.Click += Mi_Click;
            cm.Items.Add(mi);

            mi = new MenuItem {
                Header = "Move Here"
            };
            if (MainWindow.arrayView.theSelection.selectedRectangles.Count == 0)
            {
                mi.IsEnabled = false;
            }
            mi.Click += Mi_Click;
            cm.Items.Add(mi);


            mi        = new MenuItem();
            mi.Header = "Connect Multiple Synapses";
            mi.Width  = 250;
            mi.HorizontalAlignment = HorizontalAlignment.Left;
            mi.Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "From Selection to Here"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "From Here to Selection"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            mi.Items.Add(new MenuItem()
            {
                Header = "Mutual Suppression"
            });
            ((MenuItem)mi.Items[mi.Items.Count - 1]).Click += Mi_Click;
            cm.Items.Add(mi);

            sp = new StackPanel {
                Orientation = Orientation.Horizontal
            };
            Button b0 = new Button {
                Content = "OK", Width = 100, Height = 25, Margin = new Thickness(10)
            };

            b0.Click += B0_Click;
            sp.Children.Add(b0);
            b0 = new Button {
                Content = "Cancel", Width = 100, Height = 25, Margin = new Thickness(10)
            };
            b0.Click += B0_Click;
            sp.Children.Add(b0);

            cm.Items.Add(new MenuItem {
                Header = sp, StaysOpenOnClick = true
            });

            SetCustomCMItems(cm, n, n.model);

            return(cm);
        }