public void removeCommand(String s)
        {
            // Remove from list view
            foreach (ListViewItem i in lvCommands.Items)
            {
                if (i.Text == s)
                {
                    lvCommands.Items.Remove(i);
                }
            }

            // Remove from List CVO commands
            //foreach (CommandVO cvo in commands)
            int selectedIndex = -1;

            for (int i = 0; i < commands.Count; i++)
            {
                CommandVO cvo    = commands[i];
                string    speech = cvo.speech;
                if (speech == s)
                {
                    selectedIndex = i;
                    //commands.Remove(cvo);
                }
            }
            if (selectedIndex > -1)
            {
                commands.RemoveAt(selectedIndex);
            }

            ui.profileHandler.save();
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        public void processCommand(String command)
        {
            //ui.log("CommandHandler.processCommand(s:" + command + ")");

            CommandVO cvo = ui.grammarHandler.getCommandVO(command);

            String commandType = "";

            if (cvo.autoType.Length > 0)
            {
                commandType = "auto type";
            }
            else if (cvo.clipboard.Length > 0)
            {
                commandType = "clipboard";
            }
            else if (cvo.multiKey.Length > 0)
            {
                commandType = "multi key";
            }
            else
            {
                commandType = "application";
            }

            Console.WriteLine("Command Type = " + commandType);



            switch (commandType)
            {
            case "clipboard":
                new ProcessClipboardCommand(cvo);
                break;

                /*
                 * case "move left":
                 *  SendKeys.Send("{LEFT}");
                 *  break;
                 * case "move right":
                 *  SendKeys.Send("{RIGHT}");
                 *  break;
                 * case "move up":
                 *  SendKeys.Send("{UP}");
                 *  break;
                 * case "move down":
                 *  SendKeys.Send("{DOWN}");
                 *  break;
                 * case "press alt":
                 *  SendKeys.Send("%");
                 *  break;
                 * case "press f":
                 *  SendKeys.Send("f");
                 *  break;
                 */
            }
        }
        public CommandVO getCommandVO(String speech)
        {
            CommandVO cvo = null;

            foreach (CommandVO c in commands)
            {
                if (speech == c.speech)
                {
                    cvo = c;
                }
            }

            return(cvo);
        }
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        public ProcessClipboardCommand(CommandVO c)
        {
            cvo = c;
            Clipboard.SetText(cvo.clipboard);
            Console.WriteLine("cvo.clipboard = " + cvo.clipboard);
            Console.WriteLine("cvo.clipboardAutoPaste = " + cvo.clipboardAutoPaste.ToString());

            IntPtr handle = GetActiveWindow();

            //int iHandle = FindWindow(null, "Untitled - Notepad");
            //SetForegroundWindow(iHandle);

            if (cvo.clipboardAutoPaste)
            {
                //SendKeys.Send(cvo.clipboard);
                SendKeys.Send("^{v}");
            }
            //SendKeys.Send("{ENTER}");
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            ui.log("FormClipboard.btnSave_Click()");

            if (commandRejected)
            {
                return;
            }



            if (tbSpeech.Text.Length == 0)
            {
                MessageBox.Show("Please enter a speech command!");
                this.ActiveControl = tbSpeech;
                return;
            }

            //MessageBox.Show("Value = " + nudKeyDuration.Value.ToString());
            //MessageBox.Show(float.Parse(nudKeyDuration.Value.ToString()).ToString());

            CommandVO newCommand = new CommandVO();

            newCommand.method    = "clipboard";
            newCommand.speech    = tbSpeech.Text;
            newCommand.clipboard = rtClipboard.Text;
            //newCommand.duration = float.Parse(nudKeyDuration.Value.ToString());
            newCommand.duration           = 0;
            newCommand.clipboardAutoPaste = cbAutoPaste.Checked;

            ui.grammarHandler.addCommand(newCommand);


            exitToMain = true;
            this.Close();

            ui.profileHandler.save();
        }
        public void loadCommands(XmlNodeList arg, String profileName)
        {
            ui.log("GrammarHandler.loadCommands(xmlNodeList)");
            xmlCommands = arg;

            if (xmlCommands.Count == 0)
            {
                //MessageBox.Show("Please add some commands")
                lvCommands.Clear();
                ui.setStatus("Profile is empty, please createa some commands!");
                return;
            }

            if (commands != null)
            {
                commands.Clear();
            }



            // Reset
            //ui.recognizer.sre.Dispose();
            clear();


            // Configure ListView
            lvCommands.Clear();
            lvCommands.View      = View.Details;
            lvCommands.GridLines = true;
            lvCommands.Sorting   = SortOrder.Ascending;
            lvCommands.Columns.Add("Command", 500, HorizontalAlignment.Left);
            lvCommands.Columns.Add("Type", 146, HorizontalAlignment.Left);


            int cnt = 0;


            //Console.WriteLine("##### " + xmlCommands.Count);

            ui.log("---------------");
            foreach (XmlNode node in xmlCommands)
            {
                String speech = node.ChildNodes[0].InnerText.ToString();
                if (speech != "")
                {
                    cnt++;
                    speechCommands.Add(node.ChildNodes[0].InnerText.ToString());

                    //Console.WriteLine(command.InnerXml.ToString());
                    //Console.WriteLine(node.ChildNodes[0].InnerText);
                    //ui.log(node.ChildNodes[0].InnerText.ToString());

                    CommandVO command = new CommandVO();

                    command.method          = node.Attributes[0].InnerText.ToString();
                    command.haltOnAppChange = intStringToBoolean(node.Attributes[1].InnerText.ToString());
                    command.duration        = float.Parse(node.Attributes[2].InnerText.ToString());

                    command.speech    = node.ChildNodes[0].InnerText;
                    command.window    = node.ChildNodes[1].InnerText;
                    command.autoType  = node.ChildNodes[2].InnerText;
                    command.clipboard = node.ChildNodes[3].InnerText;
                    //Console.WriteLine("node.ChildNodes[3].Attributes[0].ToString() = " + node.ChildNodes[3].Attributes[0].Value.ToString());
                    command.clipboardAutoPaste = intStringToBoolean(node.ChildNodes[3].Attributes[0].Value.ToString());
                    command.multiKey           = node.ChildNodes[4].InnerText;
                    command.multiKeyCtrl       = intStringToBoolean(node.ChildNodes[4].Attributes[0].Value.ToString());
                    command.multiKeyAlt        = intStringToBoolean(node.ChildNodes[4].Attributes[1].Value.ToString());
                    command.multiKeyShift      = intStringToBoolean(node.ChildNodes[4].Attributes[2].Value.ToString());

                    ListViewItem listViewItem = new ListViewItem(command.speech);
                    listViewItem.SubItems.Add(command.method);
                    lvCommands.Items.Add(listViewItem);

                    commands.Add(command);

                    //ui.log(command.speech + ": " + "\t" + "method:" + command.method.ToString() + "\t" + "haltOnAppChange:" + command.haltOnAppChange.ToString() + "\t" + "+delay:" + command.delay.ToString());
                    ui.log("Command added: [" + command.speech + "]");
                    //ui.log("command.clipboard: [\n" + command.clipboard + "\n]");

                    //Server.UrlDecode
                }
            }
            ui.log("---------------");


            ui.stopListening();

            gb = new GrammarBuilder(speechCommands);
            g  = new Grammar(gb);
            ui.recognizer.sre.LoadGrammar(g);
            ui.recognizer.sre.RecognizeAsync(RecognizeMode.Multiple);


            ui.setStatus(cnt.ToString() + " commands loaded and ready!");


            EventHandler handler = grammarLoaded;

            if (null != handler)
            {
                handler(this, EventArgs.Empty);
            }
        }
 public void addCommand(CommandVO cvo)
 {
     commands.Add(cvo);
 }