} // end mouseClickInstallAction

        private void mouseClickUninstallAction(object sender, MouseButtonEventArgs e)
        {
            try {
                if (e.ChangedButton == MouseButton.Left)
                {
                    if (Common.checkForToSDirectory(tosAMProgramSettings.tosRootDir) == false)
                    {
                        MessageBox.Show("Please set a valid ToS Program directory."); return;
                    }
                    if (Common.checkForToSProcess())
                    {
                        MessageBox.Show("Cannot uninstall addons while ToS is running.", "ToS Running", MessageBoxButton.OK, MessageBoxImage.Exclamation); return;
                    }
                    Image             i             = (Image)sender;
                    addonDisplayData  addon         = (addonDisplayData)i.DataContext;
                    addonDataFromRepo selectedAddon = listOfAllAddons.FirstOrDefault(x => x.whichRepo == addon.whichRepo && x.Name == addon.name);
                    if (selectedAddon != null)
                    {
                        MessageBoxResult mbr = MessageBox.Show("Delete Addon?", "Uninstall", MessageBoxButton.YesNo);
                        if (mbr == MessageBoxResult.Yes)
                        {
                            MessageBoxResult mb = MessageBox.Show($"Remove associated addon directory?{Environment.NewLine}Addon-specific settings are stored here, so if you plan on reinstalling, select 'No'", "Addon directory", MessageBoxButton.YesNo);
                            AddonManagement  am = new AddonManagement()
                            {
                                addonData = selectedAddon, installedAddonData = listOfInstalledAddons, rootDir = tosAMProgramSettings.tosRootDir, addonInstallerOverrides = listOfAddonOverrides
                            };
                            bool deleteAddonResultBool = am.deleteInstalledAddon(mb == MessageBoxResult.Yes ? true : false);
                            if (!deleteAddonResultBool)
                            {
                                MessageBox.Show("Apparently, there was an error while attempting to delete the addon.. :<"); return;
                            }
                            bool updateListResultBool = am.updateInstalledAddonList(1);
                            if (!updateListResultBool)
                            {
                                MessageBox.Show("Apparently, there was an error while attempting to update the installed addon list.. :<"); return;
                            }
                            listOfInstalledAddons = am.installedAddonData;
                            saveInstalledAddonDataToFile();
                            statusBar1TextBlock.Text = "Uninstall Complete";
                        }
                    }
                }
            } catch (Exception ex) {
                Common.showError("Mouse Click Install Action Error", ex);
            } finally {
                displayActiveGrid();
            }
        } // end mouseClickUninstallAction
 private void FindExistingAddons_Click(object sender, RoutedEventArgs e)
 {
     try {
         if (Common.checkForToSDirectory(tosAMProgramSettings.tosRootDir) == false)
         {
             MessageBox.Show("Please set a valid ToS Program directory."); return;
         }
         MessageBoxResult mb = MessageBox.Show("This will attempt to find addons that were previously installed manually or through another manager and update the installed addon list.  Proceed?", "Find Existing Addons", MessageBoxButton.YesNo, MessageBoxImage.Information);
         if (mb == MessageBoxResult.Yes)
         {
             string[]        fileList = System.IO.Directory.GetFiles($"{tosAMProgramSettings.tosRootDir}/data/", "_*.ipf");
             AddonManagement am       = new AddonManagement();
             int             z        = 0;
             foreach (string q in fileList)
             {
                 System.IO.FileInfo fI            = new System.IO.FileInfo(q);
                 string[]           fileNameSplit = fI.Name.Split('-'); // 0 will be root of the filename, with _ at the start.  1 will be the unicode char.  2 will be version + ".ipf"
                 string             fN            = fileNameSplit[0].Replace("_", "");
                 string             fV            = fileNameSplit[2].Replace(".ipf", "");
                 if (listOfInstalledAddons.FirstOrDefault(x => x.addonFilename == fN && x.addonVersion == fV) == null)   // Addon is not installed from this manager.
                 {
                     addonDataFromRepo foundAddon = listOfAllAddons.FirstOrDefault(i => i.File == fN && i.Unicode == fileNameSplit[1] && i.FileVersion == fV);
                     if (foundAddon != null)
                     {
                         am.installedAddonData = listOfInstalledAddons; am.addonData = foundAddon;
                         am.updateInstalledAddonList(0);
                         listOfInstalledAddons = am.installedAddonData;
                     }
                 }
                 z++;
             }
             if (z > 0)
             {
                 saveInstalledAddonDataToFile();
                 displayActiveGrid();
                 MessageBox.Show($"Found {z} existing addons and added them to the list of installed addons", "Found Addons", MessageBoxButton.OK, MessageBoxImage.Information);
             }
             else
             {
                 MessageBox.Show("We did not find any additional addons", "No Addons Discovered", MessageBoxButton.OK, MessageBoxImage.Information);
             }
         }
     } catch (Exception ex) {
         Common.showError("Allow Automatic Update Check Changed Error", ex);
     }
 }
        } // end ActionButton_Click

        private async void UpdateButton_Click(object sender, RoutedEventArgs e)
        {
            try {
                actionButton.IsEnabled = false;
                closeButton.IsEnabled  = false;
                updateButton.IsEnabled = false;
                AddonManagement am = new AddonManagement()
                {
                    addonData = addonData, installedAddonData = installedAddonData, rootDir = rootDir
                };
                // Going to just use the same functionality as the install button (for now)
                Progress <taskProgressMsg> progressMessages = new Progress <taskProgressMsg>(updateForTaskProgress);
                bool downloadResultBool = await Task.Run(() => am.downloadAndSaveAddon(progressMessages, webConnector));

                if (!downloadResultBool)
                {
                    MessageBox.Show("Apparently, there was an error while attempting to download the addon.. :<"); return;
                }
                statusBar1TextBlock.Text = "Updating installed addon list...";
                bool updateListResultBoolStage1 = am.updateInstalledAddonList(1); // Remove old record.
                bool updateListResultBoolStage2 = am.updateInstalledAddonList(0);
                if (!updateListResultBoolStage1 || !updateListResultBoolStage2)
                {
                    MessageBox.Show("Apparently, there was an error while attempting to update the installed addon list.. :<"); return;
                }
                actionButton.Content     = "Uninstall"; actionButton.Background = Brushes.LightSalmon;
                statusBar1TextBlock.Text = "Updatge Complete";
                updateButton.Visibility  = Visibility.Hidden;
            } catch (Exception ex) {
                Common.showError("Update Button Error", ex);
            } finally {
                actionButton.IsEnabled = true;
                closeButton.IsEnabled  = true;
                updateButton.IsEnabled = true;
            }
        } // end Updatebutton_Click
        } // end AddonInfoWindow_loaded

        private async void ActionButton_Click(object sender, RoutedEventArgs e)
        {
            try {
                actionButton.IsEnabled = false;
                closeButton.IsEnabled  = false;
                updateButton.IsEnabled = false;
                AddonManagement am = new AddonManagement()
                {
                    addonData = addonData, installedAddonData = installedAddonData, rootDir = rootDir, addonInstallerOverrides = addonInstallerOverrides
                };
                // Which action to perform?
                if (actionButton.Content.ToString() == "Install")
                {
                    Progress <taskProgressMsg> progressMessages = new Progress <taskProgressMsg>(updateForTaskProgress); // Will contain the progress messages from each function.
                    bool downloadResultBool = await am.downloadAndSaveAddon(progressMessages, webConnector);

                    if (!downloadResultBool)
                    {
                        MessageBox.Show("Apparently, there was an error while attempting to download the addon.. :<"); return;
                    }
                    statusBar1TextBlock.Text = "Updating installed addon list...";
                    bool updateListResultBool = am.updateInstalledAddonList(0);
                    if (!updateListResultBool)
                    {
                        MessageBox.Show("Apparently, there was an error while attempting to update the installed addon list.. :<"); return;
                    }
                    actionButton.Content     = "Uninstall"; actionButton.Background = Brushes.LightSalmon;
                    statusBar1TextBlock.Text = "Install Complete";
                }
                else if (actionButton.Content.ToString() == "Uninstall")
                {
                    if (Common.checkForToSProcess())
                    {
                        MessageBox.Show("Cannot uninstall addons while ToS is running.", "ToS Running", MessageBoxButton.OK, MessageBoxImage.Exclamation); return;
                    }
                    MessageBoxResult mb = MessageBox.Show($"Remove associated addon directory?{Environment.NewLine}Addon-specific settings are stored here, so if you plan on reinstalling, select 'No'", "Addon directory", MessageBoxButton.YesNoCancel);
                    if (mb == MessageBoxResult.Cancel)
                    {
                        return;
                    }
                    bool deleteAddonResultBool = am.deleteInstalledAddon(mb == MessageBoxResult.Yes ? true : false);
                    if (!deleteAddonResultBool)
                    {
                        MessageBox.Show("Apparently, there was an error while attempting to delete the addon.. :<"); return;
                    }
                    bool updateListResultBool = am.updateInstalledAddonList(1);
                    if (!updateListResultBool)
                    {
                        MessageBox.Show("Apparently, there was an error while attempting to update the installed addon list.. :<"); return;
                    }
                    actionButton.Content     = "Install"; actionButton.Background = Brushes.LightGreen;
                    statusBar1TextBlock.Text = "Uninstall Complete";
                }
            } catch (Exception ex) {
                Common.showError("Action Button Error", ex);
            } finally {
                actionButton.IsEnabled = true;
                closeButton.IsEnabled  = true;
                updateButton.IsEnabled = true;
            }
        } // end ActionButton_Click
        } // end mouseClickInfoAction

        private async void mouseClickInstallAction(object sender, MouseButtonEventArgs e)
        {
            try {
                if (e.ChangedButton == MouseButton.Left)
                {
                    if (Common.checkForToSDirectory(tosAMProgramSettings.tosRootDir) == false)
                    {
                        MessageBox.Show("Please set a valid ToS Program directory."); return;
                    }
                    Image             i             = (Image)sender;
                    addonDisplayData  addon         = (addonDisplayData)i.DataContext;
                    addonDataFromRepo selectedAddon = listOfAllAddons.FirstOrDefault(x => x.whichRepo == addon.whichRepo && x.Name == addon.name);
                    if (selectedAddon != null)
                    {
                        AddonManagement am = new AddonManagement()
                        {
                            addonData = selectedAddon, installedAddonData = listOfInstalledAddons, rootDir = tosAMProgramSettings.tosRootDir, addonInstallerOverrides = listOfAddonOverrides
                        };
                        installedAddons iA            = listOfInstalledAddons.FirstOrDefault(x => x.addonRepo == addon.whichRepo && x.addonName == addon.name);
                        bool            allowContinue = false;
                        if (iA != null)   // Allow Update from here as well.
                        {
                            if (MessageBox.Show("Update Addon?", "Update", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                            {
                                allowContinue = true;
                                bool updateListResultBool = am.updateInstalledAddonList(1); // Remove the addon from the installed list.
                                if (!updateListResultBool)
                                {
                                    MessageBox.Show("Apparently, there was an error while attempting to update the installed addon list.. :<"); return;
                                }
                            }
                        }
                        else
                        {
                            if (MessageBox.Show("Install Addon?", "Install", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                            {
                                allowContinue = true;
                            }
                        }
                        if (allowContinue)
                        {
                            Progress <taskProgressMsg> progressMessages = new Progress <taskProgressMsg>(updateForTaskProgress);
                            bool downloadResultBool = await am.downloadAndSaveAddon(progressMessages, webConnector);

                            if (!downloadResultBool)
                            {
                                MessageBox.Show("Apparently, there was an error while attempting to download the addon.. :<"); return;
                            }
                            statusBar1TextBlock.Text = "Updating installed addon list...";
                            bool updateListResultBool = am.updateInstalledAddonList(0);
                            if (!updateListResultBool)
                            {
                                MessageBox.Show("Apparently, there was an error while attempting to update the installed addon list.. :<"); return;
                            }
                            listOfInstalledAddons = am.installedAddonData;
                            saveInstalledAddonDataToFile();
                            statusBar1TextBlock.Text = "Install Complete";
                        }
                    }
                }
            } catch (Exception ex) {
                Common.showError("Mouse Click Install Action Error", ex);
            } finally {
                displayActiveGrid();
            }
        } // end mouseClickInstallAction