void subCancel_Click(object sender, EventArgs e)
        {
            string     appName = getParent(sender).Text.Split(' ').First();
            LLAppTimer timer   = LLApplicationsManager.ApplicationTimers.Where(x => x.App.Name == appName).First();

            LLApplicationsManager.ApplicationTimers.Remove(timer);
            timer.Pause();  //By pausing, the timer is disposed. Unless Resume() is called, this is effectively a "cancel" operation.
            contextMenu.MenuItems.Remove(getParent(sender));
        }
        private void updateContextMenuItem(LLAppTimer x)
        {
            try
            {
                //look for existing menu item
                MenuItem menuItem = null;
                foreach (MenuItem m in contextMenu.MenuItems)
                {
                    if (m.Text.StartsWith(x.App.Name))
                    {
                        menuItem = m;
                        break;
                    }
                }

                //get seconds remaining
                double seconds = x.GetSecondsRemaining();

                //if the menu item already exists, just update it, otherwise add it
                if (menuItem != null)
                {
                    //if there are no seconds remaining, remove it from the list, otherwise update the time.
                    if (seconds < 0)
                    {
                        contextMenu.MenuItems.Remove(menuItem);
                    }
                    else
                    {
                        string txt = "";
                        txt = x.App.Name + " in " + TimeSpan.FromSeconds(seconds).ToString().Substring(3, 5);
                        if (menuItem.Tag == "Paused")
                        {
                            txt += " (Paused)";
                        }
                        menuItem.Text = txt;
                    }
                }
                else
                {
                    if (seconds > 0 && !x.Started)
                    {
                        MenuItem m = new MenuItem(x.App.Name + " in " + TimeSpan.FromSeconds(x.GetSecondsRemaining()).ToString().Substring(3, 5));

                        MenuItem subPause   = new MenuItem("Pause/Resume");
                        MenuItem subExecute = new MenuItem("Execute");
                        MenuItem subCancel  = new MenuItem("Cancel");

                        subPause.Click   += new EventHandler(subPause_Click);
                        subExecute.Click += new EventHandler(subExecute_Click);
                        subCancel.Click  += new EventHandler(subCancel_Click);

                        m.MenuItems.Add(subPause);
                        m.MenuItems.Add(subExecute);
                        m.MenuItems.Add(subCancel);

                        contextMenu.MenuItems.Add(m);
                        m.Click += new EventHandler(m_Click);
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogError("There was an error creating the LaunchPad context menu. " + ex.ToString());
            }
        }