Esempio n. 1
0
 private void browseMegaMolButton_Click(object sender, EventArgs e)
 {
     Util.ApplicationSearchDialog asd = new Util.ApplicationSearchDialog();
     asd.FileName = textBoxApp.Text;
     if (asd.ShowDialog(this) == DialogResult.OK)
     {
         textBoxApp.Text = asd.FileName;
     }
 }
        /// <summary>
        /// Creates the startup checks to be performed. Startup checks require
        /// the main form to be created and visible.
        /// </summary>
        /// <returns>Array of startup checks</returns>
        private static StartupCheck[] MakeStartupCheckList()
        {
            List <StartupCheck> chks = new List <StartupCheck>();

            chks.Add(new StartupCheck()
            {
                Title       = "MegaMol Console",
                Description = "Test if the path to the MegaMol Console front end binary is known.",
                DoEvaluate  = new Func <StartupCheck, bool>((StartupCheck sc) => {
                    sc.EvaluateComment = Properties.Settings.Default.MegaMolBin;
                    return(!String.IsNullOrWhiteSpace(Properties.Settings.Default.MegaMolBin));
                }),
                DoFix = new Action <StartupCheck, IWin32Window>((StartupCheck sc, IWin32Window w) => {
                    ApplicationSearchDialog asd = new ApplicationSearchDialog();
                    asd.FileName = Properties.Settings.Default.MegaMolBin;
                    if (asd.ShowDialog(w) == DialogResult.OK)
                    {
                        Properties.Settings.Default.MegaMolBin = asd.FileName;
                        sc.EvaluateComment = asd.FileName;
                        Properties.Settings.Default.Save();
                    }
                })
            });
            chks.Add(new StartupCheck()
            {
                Title       = "MegaMol Config File",
                Description = "There is a MegaMol Config file ready to load.",
                DoEvaluate  = new Func <StartupCheck, bool>((StartupCheck sc) => {
                    List <string> paths = new List <string>();
                    string path         = Environment.GetEnvironmentVariable("MEGAMOLCONFIG");
                    if (!string.IsNullOrWhiteSpace(path))
                    {
                        if (System.IO.Directory.Exists(path))
                        {
                            paths.Add(path);
                        }
                        else if (System.IO.File.Exists(path))
                        {
                            sc.EvaluateComment = path; // config file
                            return(true);
                        }
                    }
                    path = Properties.Settings.Default.MegaMolBin;
                    if (!string.IsNullOrWhiteSpace(path))
                    {
                        path = System.IO.Path.GetDirectoryName(path);
                        if (System.IO.Directory.Exists(path))
                        {
                            paths.Add(path);
                        }
                    }
                    path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                    if (System.IO.Directory.Exists(path))
                    {
                        paths.Add(path);
                        path = System.IO.Path.Combine(path, ".megamol");
                        if (System.IO.Directory.Exists(path))
                        {
                            paths.Add(path);
                        }
                    }
                    if (Properties.Settings.Default.UseApplicationDirectoryAsWorkingDirectory)
                    {
                        path = Properties.Settings.Default.WorkingDirectory;
                        if (!string.IsNullOrWhiteSpace(path))
                        {
                            path = System.IO.Path.GetDirectoryName(path);
                            if (System.IO.Directory.Exists(path))
                            {
                                paths.Add(path);
                            }
                        }
                    }
                    string[] filenames = new string[] { "megamolconfig.lua",
                                                        "megamolconfig.xml", "megamol.cfg", ".megamolconfig.xml", ".megamol.cfg" };
                    foreach (string p in paths)
                    {
                        foreach (string f in filenames)
                        {
                            string file = System.IO.Path.Combine(p, f);
                            if (System.IO.File.Exists(file))
                            {
                                sc.EvaluateComment = file;
                                return(true);
                            }
                        }
                    }
                    return(false);
                }),
                DoFix = new Action <StartupCheck, IWin32Window>((StartupCheck sc, IWin32Window w) => {
                    SaveFileDialog sfd = new SaveFileDialog();
                    sfd.DefaultExt     = "cfg";
                    sfd.Filter         = "Config Files|*.cfg|Xml Files|*.xml|All Files|*.*";
                    sfd.Title          = "Write MegaMol Config File...";

                    string path = Environment.GetEnvironmentVariable("MEGAMOLCONFIG");
                    if (!string.IsNullOrWhiteSpace(path))
                    {
                        if (System.IO.Directory.Exists(path))
                        {
                            sfd.FileName = System.IO.Path.Combine(path, "megamol.cfg");
                        }
                        else if (System.IO.File.Exists(path))
                        {
                            sfd.FileName = path;
                        }
                    }
                    path = Properties.Settings.Default.MegaMolBin;
                    if (string.IsNullOrWhiteSpace(sfd.FileName) && !string.IsNullOrWhiteSpace(path))
                    {
                        sfd.FileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(path), "megamol.cfg");
                    }

                    try {
                        path = System.IO.Path.GetDirectoryName(sfd.FileName);
                        if (System.IO.Directory.Exists(path))
                        {
                            sfd.InitialDirectory = path;
                        }
                    } catch {}

                    if (sfd.ShowDialog() == DialogResult.OK)
                    {
                        path = sfd.FileName;
                        if (System.IO.File.Exists(path))
                        {
                            if (MessageBox.Show("File \"" + path + "\" will be overwritten. Continue?", Application.ProductName, MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK)
                            {
                                return;
                            }
                        }
                        path = System.IO.Path.GetFileName(sfd.FileName);
                        if (string.IsNullOrWhiteSpace(path))
                        {
                            MessageBox.Show("You must specify a file name", Application.ProductName);
                            return;
                        }
                        if (path.Equals("megamol", StringComparison.CurrentCultureIgnoreCase) ||
                            path.Equals(".megamol", StringComparison.CurrentCultureIgnoreCase))
                        {
                            sfd.FileName = System.IO.Path.ChangeExtension(sfd.FileName, "cfg");
                            path         = System.IO.Path.GetFileName(sfd.FileName);
                        }
                        else if (path.Equals("megamolconfig", StringComparison.CurrentCultureIgnoreCase) ||
                                 path.Equals(".megamolconfig", StringComparison.CurrentCultureIgnoreCase))
                        {
                            sfd.FileName = System.IO.Path.ChangeExtension(sfd.FileName, "xml");
                            path         = System.IO.Path.GetFileName(sfd.FileName);
                        }
                        if (!path.Equals("megamol.cfg", StringComparison.CurrentCultureIgnoreCase) &&
                            !path.Equals(".megamol.cfg", StringComparison.CurrentCultureIgnoreCase) &&
                            !path.Equals("megamolconfig.xml", StringComparison.CurrentCultureIgnoreCase) &&
                            !path.Equals(".megamolconfig.xml", StringComparison.CurrentCultureIgnoreCase) &&
                            !sfd.FileName.Equals(Environment.GetEnvironmentVariable("MEGAMOLCONFIG")))
                        {
                            if (MessageBox.Show("Non-standard MegaMol config file \"" + path + "\" might not work. Continue?", Application.ProductName, MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) != DialogResult.OK)
                            {
                                return;
                            }
                        }

                        try {
                            System.IO.File.WriteAllBytes(sfd.FileName, Properties.Resources.megamol);
                            sc.EvaluateComment = sfd.FileName;
                        } catch (Exception ex) {
                            sc.EvaluateComment = ex.ToString();
                        }
                    }
                })
            });
            chks.Add(new StartupCheck()
            {
                Title       = "Core and Plugins State",
                Description = "A state file is loaded which contains all Modules and Calls in the Core and the known plugins",
                DoEvaluate  = new Func <StartupCheck, bool>((StartupCheck sc) => {
                    List <Data.PluginFile> plgs = Program.MainForm.Plugins;
                    int pc = 0, mc = 0, cc = 0;

                    if ((plgs != null) && (plgs.Count > 0))
                    {
                        foreach (Data.PluginFile p in plgs)
                        {
                            pc++;
                            if (p.Modules != null)
                            {
                                mc += p.Modules.Length;
                            }
                            if (p.Calls != null)
                            {
                                cc += p.Calls.Length;
                            }
                        }
                    }
                    sc.EvaluateComment = pc.ToString() + " Plugins with " + mc.ToString() + " Modules and " + cc.ToString() + " Calls";

                    return((pc + mc + cc) > 0);
                }),
                DoFix = new Action <StartupCheck, IWin32Window>((StartupCheck sc, IWin32Window w) => {
                    Analyze.AnalyzerDialog ad = new Analyze.AnalyzerDialog();

                    ad.MegaMolPath      = Properties.Settings.Default.MegaMolBin;
                    ad.WorkingDirectory = Properties.Settings.Default.WorkingDirectory;

                    if (ad.ShowDialog(w) == DialogResult.OK)
                    {
                        Properties.Settings.Default.MegaMolBin = ad.MegaMolPath;
                        Properties.Settings.Default.Save();

                        Program.MainForm.SetPlugins(ad.Plugins, ad.SaveAfterOk);
                    }
                })
            });
            if (Environment.OSVersion.Platform == PlatformID.Win32NT)
            {
                chks.Add(new StartupCheck()
                {
                    Title       = "Register *.mmprj File Type",
                    Description = "The MMPRJ file type is registered.",
                    DoEvaluate  = new Func <StartupCheck, bool>((StartupCheck sc) => {
                        string[] types    = Microsoft.Win32.Registry.ClassesRoot.GetSubKeyNames();
                        sc.NeedsElevation = SG.Utilities.Forms.Elevation.IsElevationRequired && !SG.Utilities.Forms.Elevation.IsElevated;
                        foreach (string t in types)
                        {
                            if (t.Equals(".mmprj", StringComparison.InvariantCultureIgnoreCase))
                            {
                                return(true);
                            }
                        }
                        return(false);
                    }),
                    DoFix = new Action <StartupCheck, IWin32Window>((StartupCheck sc, IWin32Window w) => {
                        if (SG.Utilities.Forms.Elevation.IsElevationRequired && !SG.Utilities.Forms.Elevation.IsElevated)
                        {
                            if (SG.Utilities.Forms.Elevation.RestartElevated("?#REG " + Application.ExecutablePath + " " + w.Handle.ToString()) == int.MinValue)
                            {
                                MessageBox.Show("Failed to start elevated Process. Most likely a security conflict.",
                                                Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                        else
                        {
                            FileTypeRegistration.Register(w, Application.ExecutablePath);
                        }
                    })
                });
            }
            return(chks.ToArray());
        }