Inheritance: INotifyPropertyChanged
        private void testButtonClick(object sender, RoutedEventArgs e)
        {
            // Splice the new script in to the existing scripts
            Dictionary<string, Script> newScripts = new Dictionary<string, Script>(scripts);
            Script testScript = new Script(ScriptName, ScriptDescription, false, ScriptValue);
            newScripts.Remove(ScriptName);
            newScripts.Add(ScriptName, testScript);

            SpeechResponder responder = new SpeechResponder();
            responder.Start();

            // See if we have a sample
            Event sampleEvent;
            object sample = Events.SampleByName(script.Name);
            if (sample == null)
            {
                sampleEvent = null;
            }
            else if (sample.GetType() == typeof(string))
            {
                // It's as tring so a journal entry.  Parse it
                sampleEvent = JournalMonitor.ParseJournalEntry((string)sample);
            }
            else if (sample.GetType() == typeof(Event))
            {
                // It's a direct event
                sampleEvent = (Event)sample;
            }
            else
            {
                Logging.Warn("Unknown sample type " + sample.GetType());
                sampleEvent = null;
            }

            ScriptResolver scriptResolver = new ScriptResolver(newScripts);
            responder.Say(scriptResolver, ScriptName, sampleEvent, 3, false);
        }
        private void acceptButtonClick(object sender, RoutedEventArgs e)
        {
            if (script != null)
            {
                // Updated an existing script so remove it from the list
                scripts.Remove(script.Name);
            }
            script = new Script(scriptName, scriptDescription, script == null ? false : script.Responder, scriptValue);
            scripts.Add(script.Name, script);

            DialogResult = true;
            this.Close();
        }
        private void newScriptClicked(object sender, RoutedEventArgs e)
        {
            string baseName = "New function";
            string scriptName = baseName;
            int i = 2;
            while (Personality.Scripts.ContainsKey(scriptName))
            {
                scriptName = baseName + " " + i++;
            }
            Script script = new Script(scriptName, null, false, null);
            Personality.Scripts.Add(script.Name, script);

            // Now fire up an edit
            EditScriptWindow editScriptWindow = new EditScriptWindow(Personality.Scripts, script.Name);
            if (editScriptWindow.ShowDialog() == true)
            {
                Personality.ToFile();
                EDDI.Instance.Reload("Speech responder");
            }
            else
            {
                Personality.Scripts.Remove(script.Name);
            }
            scriptsData.Items.Refresh();
        }