Beispiel #1
0
        public static void Main(string[] sargs)
        {
            Thread.CurrentThread.CurrentUICulture = Culture;
            CommandArgs args = new CommandArgs (sargs);

            if (args.styles) Application.EnableVisualStyles ();

            // Damn .NET text rendering
            Application.SetCompatibleTextRenderingDefault(false);

            Directory.SetCurrentDirectory (System.IO.Path.GetDirectoryName (Application.ExecutablePath));

            Localizations = new LocalizationInterface ();
            try {
                string [] langfiles = Directory.GetFiles ("MGE3", "*.lng");
                foreach (string langfile in langfiles) {
                    Localizations.Add (langfile);
                }
            } catch { };
            Localizations.Add(new LocalizationInterface.Localization((Form)null));    // Adds truncated variant of default localization.
            String language = DefaultLocalization.Language;
            bool autoLanguage = true;
            try {
                INIFile MGEini = new INIFile (iniFileName, new INIFile.INIVariableDef [] { INIFile.iniDefEmpty, MainForm.iniLanguage, MainForm.iniAutoLang });
                language = MGEini.getKeyString ("Language");
                autoLanguage = (MGEini.getKeyValue ("AutoLang") == 1);
            } catch { }
            Localizations.Current = language;
            Localizations.ApplyStrings("", strings);

            if (args.mutex && !MutexCheck.PerformCheck ()) {
                MessageBox.Show (strings ["MGEguiRunning"], strings ["Error"]);
                return;
            }
            Process [] morrowind = Process.GetProcessesByName ("Morrowind");
            foreach (Process p in morrowind) {
                MessageBox.Show (strings ["MWRunning"], strings ["Error"]);
                return;
            }

            if (!File.Exists ("./morrowind.exe") || !File.Exists ("./morrowind.ini") || !Directory.Exists ("data files")) {
                MessageBox.Show (strings ["NotMWDir"], strings ["Error"]);
                return;
            }
            if (!Directory.Exists ("MGE3") || !File.Exists ("./MGE3/MGEfuncs.dll") || !File.Exists ("./d3d8.dll") ||
               !File.Exists ("./dinput8.dll")) {
                MessageBox.Show (strings ["MGEMissing"], strings ["Error"]);
                return;
            }
            //Morrowind version info
            try {
                FileVersionInfo MorrowVersion = FileVersionInfo.GetVersionInfo ("Morrowind.exe");
                if (MorrowVersion.ProductPrivatePart != 722 && MorrowVersion.ProductPrivatePart != 1029 && MorrowVersion.ProductPrivatePart != 1875 && MorrowVersion.ProductPrivatePart != 1820)
                {
                    MessageBox.Show (strings ["MWIncompat"], strings ["Error"]);
                    return;
                }
            } catch {
                MessageBox.Show (strings ["MWCorrupt"], strings ["Error"]);
                return;
            }
            //Check for dsound.dll
            if (File.Exists ("dsound.dll") && new System.IO.FileInfo ("dsound.dll").Length == 16384) {
                try {
                    File.Delete ("dsound.dll");
                } catch {
                    MessageBox.Show (strings ["DSound"], strings ["Error"]);
                    return;
                }
            }

            runDir = System.Windows.Forms.Application.StartupPath;
            //check if MW registry keys exist
            RegistryKey key = Statics.reg_key_bethesda.OpenSubKey(Statics.reg_morrowind);
            if (key != null) { key.Close(); key = null;
            } else {
                MessageBox.Show (strings ["MWRegistry"], strings ["Error"]);
                return;
            }

            //mendres: Check if MGE needs administrator privileges.
            try {
                key = Statics.reg_key_bethesda.OpenSubKey(Statics.reg_morrowind, true);
            } catch (System.Security.SecurityException) {
                MessageBox.Show(strings["MgeAccess"], strings["Error"]);
                return;
            }
            if (key != null) { key.Close(); key = null; }

            //Create the data files directories MGE uses
            if (!Directory.Exists (@"data files\shaders")) {
                Directory.CreateDirectory (@"data files\shaders");
            }
            if (!Directory.Exists (@"data files\MGE meshes")) {
                Directory.CreateDirectory (@"data files\MGE meshes");
            }
            if (!Directory.Exists (@"data files\Textures\MGE")) {
                Directory.CreateDirectory (@"data files\Textures\MGE");
            }
            if (!Directory.Exists (@"data files\MGE videos")) {
                Directory.CreateDirectory (@"data files\MGE videos");
            }
            if (!Directory.Exists (@"data files\shaders\default")) {
                Directory.CreateDirectory (@"data files\shaders\default");
            }
            if (!Directory.Exists (@"data files\shaders\water")) {
                Directory.CreateDirectory (@"data files\shaders\water");
            }
            //Create some structures
            for (int i = 0; i < MACROS; i++) {
                Macros [i] = new Macro ();
            }
            for (int i = 0; i < TRIGGERS; i++) {
                Triggers [i] = new Trigger ();
            }
            DXMain.GetDeviceCaps ();
            bool GUIchecker = !lightversion;
            while (GUIchecker != lightversion) {
                GUIchecker = lightversion;
                if (lightversion) {
                    mfl = new MainFormLight(autoLanguage);
                    Application.Run(mfl);
                } else {
                    mf = new MainForm (autoLanguage);
                    Application.Run (mf);
                }
            }
        }
Beispiel #2
0
        public static void Main(string[] sargs)
        {
            Thread.CurrentThread.CurrentUICulture = Culture;
            CommandArgs args = new CommandArgs (sargs);

            if (args.styles) Application.EnableVisualStyles ();

            // Damn .NET text rendering
            Application.SetCompatibleTextRenderingDefault(false);

            Directory.SetCurrentDirectory (System.IO.Path.GetDirectoryName (Application.ExecutablePath));

            Localizations = new LocalizationInterface ();
            try {
                string [] langfiles = Directory.GetFiles ("MGE3", "*.lng");
                foreach (string langfile in langfiles) {
                    Localizations.Add (langfile);
                }
            } catch { };
            string language = "English (default)";
            bool autoLanguage = true;
            try {
                INIFile MGEini = new INIFile (iniFileName, new INIFile.INIVariableDef [] { INIFile.iniDefEmpty, MainForm.iniLanguage, MainForm.iniAutoLang });
                language = MGEini.getKeyString ("Language");
                autoLanguage = (MGEini.getKeyValue ("AutoLang") == 1);
            } catch { }
            Localizations.Current = language;
            Localizations.ApplyStrings("", strings);

            if (args.mutex && !MutexCheck.PerformCheck ()) {
                MessageBox.Show (strings ["MGEguiRunning"], strings ["Error"]);
                return;
            }
            Process [] morrowind = Process.GetProcessesByName ("Morrowind");
            foreach (Process p in morrowind) {
                MessageBox.Show (strings ["MWRunning"], strings ["Error"]);
                return;
            }

            if (!File.Exists ("./morrowind.exe") || !File.Exists ("./morrowind.ini") || !Directory.Exists ("data files")) {
                MessageBox.Show (strings ["NotMWDir"], strings ["Error"]);
                return;
            }
            if (!Directory.Exists ("MGE3") || !File.Exists ("./MGE3/MGEfuncs.dll") || !File.Exists ("./d3d8.dll") ||
               !File.Exists ("./dinput8.dll")) {
                MessageBox.Show (strings ["MGEMissing"], strings ["Error"]);
                return;
            }
            //Morrowind version info
            try {
                FileVersionInfo MorrowVersion = FileVersionInfo.GetVersionInfo ("Morrowind.exe");
                if (MorrowVersion.FileMajorPart != 1 || MorrowVersion.FileMinorPart < 6) {
                    MessageBox.Show (strings ["MWIncompat"], strings ["Error"]);
                    return;
                }
            } catch {
                MessageBox.Show (strings ["MWCorrupt"], strings ["Error"]);
                return;
            }

            runDir = System.Windows.Forms.Application.StartupPath;
            //check if MW registry keys exist
            if (Registry.LocalMachine.OpenSubKey (reg_mw) == null) {
                MessageBox.Show (strings ["MWRegistry"], strings ["Error"]);
                return;
            }

            //Create some structures
            for (int i = 0; i < MACROS; i++) {
                Macros [i] = new Macro ();
            }
            for (int i = 0; i < TRIGGERS; i++) {
                Triggers [i] = new Trigger ();
            }
            DXMain.GetDeviceCaps ();
            mf = new MainForm (autoLanguage);
            Application.Run (mf);
        }
Beispiel #3
0
 public MainForm(LocalizationInterface.Localization Language, bool AutoLang)
 {
     InitializeComponent ();
     //Attach dud context menus to combo boxes
     cmbAntiAlias.ContextMenu = DudMenu;
     cmbAnisoLevel.ContextMenu = DudMenu;
     cmbFogMode.ContextMenu = DudMenu;
     cmbMipFilter.ContextMenu = DudMenu;
     cmbScaleFilter.ContextMenu = DudMenu;
     cmbVWait.ContextMenu = DudMenu;
     cmbZBuffer.ContextMenu = DudMenu;
     cmbSShotFormat.ContextMenu = DudMenu;
     cmbTipReadSpd.ContextMenu = DudMenu;
     cmbMsgsLocale.ContextMenu = DudMenu;
     cmbUILanguage.ContextMenu = DudMenu;
     // Save default tabpage tooltips
     foreach (TabPage page in tabControl.TabPages) tabpage_tooltips.Add (page, page.ToolTipText);
     //Set initial directories
     this.OpenFileDialog.InitialDirectory = this.SaveFileDialog.InitialDirectory = Statics.runDir + "\\MGE3";
     this.OpenTangentMesh.InitialDirectory = Statics.runDir + "\\Data files\\MGE meshes";
     //Title
     Text = "Morrowind Graphics Extender (" + Statics.versionString + ")";
     // Set default tooltip text reading speed
     try {
         Statics.tipReadSpeed = (int)(1000 / double.Parse (cmbTipReadSpd.Text));
     } catch {
         Statics.tipReadSpeed = (int)(1000 / double.Parse (cmbTipReadSpd.Text.Replace(".", System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator)));
     }
     // set a handler for each control which sets tooltip popup timeout dependent on tooltip text length
     Control [] controls = Statics.GetChildControls (this);
     foreach (Control control in controls) {
         if (!(control is ComboBox || control is TextBox || control is NumericUpDown) || control.Name == "tbSShotDir") default_text.Add (control, control.Text);
         control.MouseHover += new EventHandler (TooltipTimeoutHandler);
     }
     //Save control text
     clearedSSDir = tbSShotDir.Text;
     //Get available UI localizations and set UI language
     cmbUILanguage.Items.AddRange (Statics.Localizations.Languages);
     if (AutoLang) cbUILangAuto.Checked = true;
     else if (Language != null) cmbUILanguage.SelectedIndex = cmbUILanguage.FindStringExact (Language.Language);
     SetTooltips ();
     //Store default locations
     gbMainSettingsLocation = gbMainSettings.Location;
     gbMainUILocation = gbMainUI.Location;
     gbMainUILocation.Y -= this.Size.Height;
     //Load settings
     LoadSettings ();
     RegistryKey key = null;
     try {
         key = Statics.reg_key_bethesda.OpenSubKey(Statics.reg_morrowind);
         uint width, height;
         try {
             width = (uint)(int)key.GetValue ("Screen Width");
             height = (uint)(int)key.GetValue ("Screen Height");
         } catch {
             MessageBox.Show (strings ["RegScrRes"].text, Statics.strings ["Error"].text);
             width = 640;
             height = 480;
         }
         tbResolution.Text = width.ToString () + " x " + height.ToString ();
         CalcAspectRatio ((int)width, (int)height);
         try {
             cbWindowed.Checked = !Convert.ToBoolean (((byte [])key.GetValue ("Fullscreen")) [0]);
         } catch {
             MessageBox.Show (strings ["RegWinMode"].text, Statics.strings ["Error"].text);
             cbWindowed.Checked = false;
         }
         key.Close ();
     } catch { if (key != null) { key.Close(); key = null; } }
 }