diff --git a/AboutForm.resx b/AboutForm.resx index 38771a4..5b28ab9 100644 --- a/AboutForm.resx +++ b/AboutForm.resx @@ -125,7 +125,7 @@ Special thanks to: -- Neodymium -- tgascoigne -- CamxxCore -- -- Tadden -- Gramz -- Kai -- Vertigo -- HL -- Pouaichh -- -- Dilapidated -- dav90 -- Neos7 -- Jevi -- sollaholla -- --- The .White team -- CP -- Kilian -- +-- The .White team -- CP -- Kilian -- PNWParksFan -- diff --git a/App.config b/App.config index e08b7b2..408ceae 100644 --- a/App.config +++ b/App.config @@ -193,6 +193,9 @@ False + + True + \ No newline at end of file diff --git a/BinarySearchForm.cs b/BinarySearchForm.cs index 3e66f5e..134b926 100644 --- a/BinarySearchForm.cs +++ b/BinarySearchForm.cs @@ -43,7 +43,7 @@ namespace CodeWalker { GTA5Keys.LoadFromPath(Settings.Default.GTAFolder, Settings.Default.Key); RpfMan = new RpfManager(); - RpfMan.Init(Settings.Default.GTAFolder, UpdateStatus, UpdateStatus, false, false); + RpfMan.Init(GTAFolder.CurrentGTAFolder, UpdateStatus, UpdateStatus, false, false); RPFScanComplete(); }); } diff --git a/BrowseForm.Designer.cs b/BrowseForm.Designer.cs index 6d53b64..9c9c3f7 100644 --- a/BrowseForm.Designer.cs +++ b/BrowseForm.Designer.cs @@ -128,9 +128,9 @@ // this.FolderTextBox.Location = new System.Drawing.Point(90, 6); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(251, 20); this.FolderTextBox.TabIndex = 1; - this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); // // ScanButton // diff --git a/BrowseForm.cs b/BrowseForm.cs index 73945b5..3939dbc 100644 --- a/BrowseForm.cs +++ b/BrowseForm.cs @@ -55,7 +55,7 @@ namespace CodeWalker } } - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; DataHexLineCombo.Text = "16"; DataTextBox.SetTabStopWidth(3); @@ -82,19 +82,10 @@ namespace CodeWalker } } - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - } - private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; } private void ScanButton_Click(object sender, EventArgs e) diff --git a/CodeWalker Explorer.bat b/CodeWalker Explorer.cmd similarity index 100% rename from CodeWalker Explorer.bat rename to CodeWalker Explorer.cmd diff --git a/CodeWalker Menu.cmd b/CodeWalker Menu.cmd new file mode 100644 index 0000000..bfd5f75 --- /dev/null +++ b/CodeWalker Menu.cmd @@ -0,0 +1 @@ +start codewalker menu \ No newline at end of file diff --git a/CodeWalker.csproj b/CodeWalker.csproj index 2f5eec3..00ef6e7 100644 --- a/CodeWalker.csproj +++ b/CodeWalker.csproj @@ -390,6 +390,7 @@ TextInputForm.cs + diff --git a/ExploreForm.cs b/ExploreForm.cs index 6562514..a5ea79e 100644 --- a/ExploreForm.cs +++ b/ExploreForm.cs @@ -59,7 +59,10 @@ namespace CodeWalker InitFileTypes(); - if (!EnsureGTAFolder()) + // This is probably not necessary now that the GTA folder is checked + // in the Program.cs when the game is initiated, but we will leave it + // here for now to make sure + if(!GTAFolder.UpdateGTAFolder(true)) { Close(); return; @@ -241,45 +244,7 @@ namespace CodeWalker } } - private bool EnsureGTAFolder() - { - string fldr = Settings.Default.GTAFolder; - if (string.IsNullOrEmpty(fldr) || !Directory.Exists(fldr)) - { - if (!ChangeGTAFolder()) - { - return false; - } - fldr = Settings.Default.GTAFolder; - } - if (!Directory.Exists(fldr)) - { - MessageBox.Show("The specified folder does not exist:\n" + fldr); - return false; - } - if (!File.Exists(fldr + "\\gta5.exe")) - { - MessageBox.Show("GTA5.exe not found in folder:\n" + fldr); - return false; - } - Settings.Default.GTAFolder = fldr; //seems ok, save it for later - return true; - } - private bool ChangeGTAFolder() - { - SelectFolderForm f = new SelectFolderForm(); - f.ShowDialog(); - if (f.Result == DialogResult.OK) - { - Settings.Default.GTAFolder = f.SelectedFolder; - return true; - } - else - { - return false; - } - } - + public void UpdateStatus(string text) { @@ -313,13 +278,6 @@ namespace CodeWalker } - public static string GetRootPath() - { - var path = Settings.Default.GTAFolder; - return path.EndsWith("\\") ? path : path + "\\"; - } - - public void Navigate(MainTreeFolder f) { if (!Ready) return; @@ -596,15 +554,14 @@ namespace CodeWalker ClearMainTreeView(); - var path = Settings.Default.GTAFolder; - var replpath = path.EndsWith("\\") ? path : path + "\\"; + string fullPath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); - string[] allfiles = Directory.GetFiles(path, "*", SearchOption.AllDirectories); + string[] allfiles = Directory.GetFiles(GTAFolder.CurrentGTAFolder, "*", SearchOption.AllDirectories); Dictionary nodes = new Dictionary(); MainTreeFolder root = new MainTreeFolder(); - root.FullPath = GetRootPath(); + root.FullPath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); root.Path = ""; root.Name = "GTA V"; RootFolder = root; @@ -613,7 +570,7 @@ namespace CodeWalker foreach (var filepath in allfiles) { - var relpath = filepath.Replace(replpath, ""); + var relpath = filepath.Replace(fullPath, ""); var filepathl = filepath.ToLowerInvariant(); UpdateStatus("Scanning " + relpath + "..."); @@ -629,7 +586,7 @@ namespace CodeWalker var exists = nodes.TryGetValue(parentpath, out node); if (!exists) { - node = CreateRootDirTreeFolder(parentname, parentpath, replpath + parentpath); + node = CreateRootDirTreeFolder(parentname, parentpath, fullPath + parentpath); nodes[parentpath] = node; } if (parentnode == null) @@ -703,7 +660,7 @@ namespace CodeWalker } private void RecurseMainTreeViewRPF(MainTreeFolder f, List allRpfs) { - var rootpath = GetRootPath(); + var rootpath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); var fld = f.RpfFolder; if (fld != null) @@ -2026,7 +1983,7 @@ namespace CodeWalker string relpath = (CurrentFolder.Path ?? "") + "\\" + fname; - var rootpath = GetRootPath(); + var rootpath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); string fullpath = rootpath + relpath; RpfDirectoryEntry newdir = null; @@ -2103,7 +2060,7 @@ namespace CodeWalker else { //adding a new RPF in the filesystem - newrpf = RpfFile.CreateNew(Settings.Default.GTAFolder, relpath, encryption); + newrpf = RpfFile.CreateNew(GTAFolder.CurrentGTAFolder, relpath, encryption); } } catch (Exception ex) @@ -2115,7 +2072,7 @@ namespace CodeWalker if (newrpf != null) { - var node = CreateRpfTreeFolder(newrpf, newrpf.Path, GetRootPath() + newrpf.Path); + var node = CreateRpfTreeFolder(newrpf, newrpf.Path, GTAFolder.GetCurrentGTAFolderWithTrailingSlash() + newrpf.Path); RecurseMainTreeViewRPF(node, AllRpfs); AddNewFolderTreeNode(node); } @@ -2284,7 +2241,7 @@ namespace CodeWalker if (newrpf != null) { //an RPF file was imported. add its structure to the UI! - var rootpath = GetRootPath(); + var rootpath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); var tnf = CreateRpfTreeFolder(newrpf, newrpf.Path, rootpath + newrpf.Path); if (CurrentFolder.Children != null) { @@ -2324,7 +2281,7 @@ namespace CodeWalker { if (MainListView.SelectedIndices.Count == 0) { - Clipboard.SetText(CurrentFolder?.FullPath ?? GetRootPath()); + Clipboard.SetText(CurrentFolder?.FullPath ?? GTAFolder.GetCurrentGTAFolderWithTrailingSlash()); } else if (MainListView.SelectedIndices.Count == 1) { @@ -2985,7 +2942,7 @@ namespace CodeWalker private void TreeContextWinExplorerMenu_Click(object sender, EventArgs e) { var folder = MainTreeView.SelectedNode?.Tag as MainTreeFolder; - var path = folder?.FullPath ?? GetRootPath(); + var path = folder?.FullPath ?? GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); ShowInExplorer(path); } @@ -3288,7 +3245,7 @@ namespace CodeWalker if (ListItems == null) { ListItems = new List(); - var rootpath = ExploreForm.GetRootPath(); + var rootpath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); if (Children != null) { @@ -3350,7 +3307,7 @@ namespace CodeWalker resultcount++; } - var rootpath = ExploreForm.GetRootPath(); + var rootpath = GTAFolder.GetCurrentGTAFolderWithTrailingSlash(); if (Files != null) { diff --git a/ExtractKeysForm.Designer.cs b/ExtractKeysForm.Designer.cs index df85296..6daed46 100644 --- a/ExtractKeysForm.Designer.cs +++ b/ExtractKeysForm.Designer.cs @@ -77,9 +77,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.FolderTextBox.Location = new System.Drawing.Point(98, 25); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(345, 20); this.FolderTextBox.TabIndex = 57; - this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); // // StatusLabel // diff --git a/ExtractKeysForm.cs b/ExtractKeysForm.cs index ff34e46..ade5291 100644 --- a/ExtractKeysForm.cs +++ b/ExtractKeysForm.cs @@ -26,7 +26,7 @@ namespace CodeWalker private void ExtractKeysForm_Load(object sender, EventArgs e) { - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; try { @@ -41,20 +41,11 @@ namespace CodeWalker } } - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - ExeTextBox.Text = FolderTextBox.Text + "\\" + "GTA5.exe"; - } - private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; + ExeTextBox.Text = GTAFolder.CurrentGTAFolder + @"\GTA5.exe"; } private void ExeBrowseButton_Click(object sender, EventArgs e) diff --git a/ExtractRawForm.Designer.cs b/ExtractRawForm.Designer.cs index 2c14b15..cffa243 100644 --- a/ExtractRawForm.Designer.cs +++ b/ExtractRawForm.Designer.cs @@ -127,9 +127,9 @@ // this.FolderTextBox.Location = new System.Drawing.Point(91, 12); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(251, 20); this.FolderTextBox.TabIndex = 64; - this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); // // label2 // diff --git a/ExtractRawForm.cs b/ExtractRawForm.cs index f5a2a52..72cfd48 100644 --- a/ExtractRawForm.cs +++ b/ExtractRawForm.cs @@ -26,7 +26,7 @@ namespace CodeWalker private void ExtractRawForm_Load(object sender, EventArgs e) { - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; OutputFolderTextBox.Text = Settings.Default.ExtractedRawFilesFolder; try @@ -58,11 +58,6 @@ namespace CodeWalker catch { } } - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - } - private void OutputFolderTextBox_TextChanged(object sender, EventArgs e) { Settings.Default.ExtractedRawFilesFolder = OutputFolderTextBox.Text; @@ -70,12 +65,8 @@ namespace CodeWalker private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; } private void OutputFolderBrowseButton_Click(object sender, EventArgs e) diff --git a/ExtractScriptsForm.Designer.cs b/ExtractScriptsForm.Designer.cs index 9d8accd..62ce428 100644 --- a/ExtractScriptsForm.Designer.cs +++ b/ExtractScriptsForm.Designer.cs @@ -188,9 +188,9 @@ // this.FolderTextBox.Location = new System.Drawing.Point(98, 26); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(251, 20); this.FolderTextBox.TabIndex = 42; - this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); // // ExtractScriptsForm // diff --git a/ExtractScriptsForm.cs b/ExtractScriptsForm.cs index 72df445..b0fbcd7 100644 --- a/ExtractScriptsForm.cs +++ b/ExtractScriptsForm.cs @@ -28,7 +28,7 @@ namespace CodeWalker private void ExtractForm_Load(object sender, EventArgs e) { DumpTextBox.Text = Settings.Default.GTAExeDumpFile; - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; OutputFolderTextBox.Text = Settings.Default.CompiledScriptFolder; try @@ -49,11 +49,6 @@ namespace CodeWalker Settings.Default.GTAExeDumpFile = DumpTextBox.Text; } - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - } - private void OutputFolderTextBox_TextChanged(object sender, EventArgs e) { Settings.Default.CompiledScriptFolder = OutputFolderTextBox.Text; @@ -61,12 +56,8 @@ namespace CodeWalker private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; } private void OutputFolderBrowseButton_Click(object sender, EventArgs e) diff --git a/ExtractShadersForm.Designer.cs b/ExtractShadersForm.Designer.cs index 02e997f..0cd2d4a 100644 --- a/ExtractShadersForm.Designer.cs +++ b/ExtractShadersForm.Designer.cs @@ -127,6 +127,7 @@ // this.FolderTextBox.Location = new System.Drawing.Point(93, 12); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(251, 20); this.FolderTextBox.TabIndex = 64; this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); diff --git a/ExtractShadersForm.cs b/ExtractShadersForm.cs index ebf430d..6d9b8a8 100644 --- a/ExtractShadersForm.cs +++ b/ExtractShadersForm.cs @@ -26,7 +26,7 @@ namespace CodeWalker private void ExtractShadersForm_Load(object sender, EventArgs e) { - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; OutputFolderTextBox.Text = Settings.Default.ExtractedShadersFolder; try @@ -41,10 +41,7 @@ namespace CodeWalker } } - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - } + private void FolderTextBox_TextChanged(object sender, EventArgs e){} private void OutputFolderTextBox_TextChanged(object sender, EventArgs e) { @@ -53,12 +50,8 @@ namespace CodeWalker private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; } private void OutputFolderBrowseButton_Click(object sender, EventArgs e) diff --git a/ExtractTexForm.Designer.cs b/ExtractTexForm.Designer.cs index 1599947..b79ae82 100644 --- a/ExtractTexForm.Designer.cs +++ b/ExtractTexForm.Designer.cs @@ -118,9 +118,9 @@ // this.FolderTextBox.Location = new System.Drawing.Point(90, 6); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(251, 20); this.FolderTextBox.TabIndex = 55; - this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); // // AbortButton // diff --git a/ExtractTexForm.cs b/ExtractTexForm.cs index af70027..1f386af 100644 --- a/ExtractTexForm.cs +++ b/ExtractTexForm.cs @@ -27,7 +27,7 @@ namespace CodeWalker private void ExtractTexForm_Load(object sender, EventArgs e) { - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; OutputFolderTextBox.Text = Settings.Default.ExtractedTexturesFolder; try @@ -42,11 +42,6 @@ namespace CodeWalker } } - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - } - private void OutputFolderTextBox_TextChanged(object sender, EventArgs e) { Settings.Default.ExtractedTexturesFolder = OutputFolderTextBox.Text; @@ -54,12 +49,8 @@ namespace CodeWalker private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; } private void OutputFolderBrowseButton_Click(object sender, EventArgs e) diff --git a/ExtractTexForm.resx b/ExtractTexForm.resx index bd12579..1431f6b 100644 --- a/ExtractTexForm.resx +++ b/ExtractTexForm.resx @@ -117,9 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 17, 17 - diff --git a/Forms/MetaForm.cs b/Forms/MetaForm.cs index 9118e7c..17e8fe2 100644 --- a/Forms/MetaForm.cs +++ b/Forms/MetaForm.cs @@ -149,7 +149,7 @@ namespace CodeWalker.Forms { if (string.IsNullOrEmpty(FileName)) saveAs = true; if (string.IsNullOrEmpty(FilePath)) saveAs = true; - else if ((FilePath.ToLowerInvariant().StartsWith(Settings.Default.GTAFolder.ToLowerInvariant()))) saveAs = true; + else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; if (!File.Exists(FilePath)) saveAs = true; var fn = FilePath; diff --git a/Forms/ModelForm.cs b/Forms/ModelForm.cs index e5f2e1b..7d75d3c 100644 --- a/Forms/ModelForm.cs +++ b/Forms/ModelForm.cs @@ -137,38 +137,11 @@ namespace CodeWalker.Forms MouseWheel += ModelForm_MouseWheel; - string fldr = Settings.Default.GTAFolder; - if (string.IsNullOrEmpty(fldr) || !Directory.Exists(fldr)) + if (!GTAFolder.UpdateGTAFolder(true)) { - SelectFolderForm f = new SelectFolderForm(); - f.ShowDialog(); - if (f.Result == DialogResult.OK) - { - fldr = f.SelectedFolder; - } - else - { - Close(); - return; - } - } - if (!Directory.Exists(fldr)) - { - MessageBox.Show("The specified folder does not exist:\n" + fldr); Close(); return; } - if (!File.Exists(fldr + "\\gta5.exe")) - { - MessageBox.Show("GTA5.exe not found in folder:\n" + fldr); - Close(); - return; - } - - Settings.Default.GTAFolder = fldr; //seems ok, save it for later - - - MetaName[] texsamplers = RenderableGeometry.GetTextureSamplerList(); foreach (var texsampler in texsamplers) diff --git a/Forms/TextForm.cs b/Forms/TextForm.cs index 90ffb49..484dbcd 100644 --- a/Forms/TextForm.cs +++ b/Forms/TextForm.cs @@ -130,7 +130,7 @@ namespace CodeWalker.Forms { if (string.IsNullOrEmpty(FileName)) saveAs = true; if (string.IsNullOrEmpty(FilePath)) saveAs = true; - else if ((FilePath.ToLowerInvariant().StartsWith(Settings.Default.GTAFolder.ToLowerInvariant()))) saveAs = true; + else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; if (!File.Exists(FilePath)) saveAs = true; var fn = FilePath; diff --git a/Forms/XmlForm.cs b/Forms/XmlForm.cs index 529d1ef..d814453 100644 --- a/Forms/XmlForm.cs +++ b/Forms/XmlForm.cs @@ -155,7 +155,7 @@ namespace CodeWalker.Forms { if (string.IsNullOrEmpty(FileName)) saveAs = true; if (string.IsNullOrEmpty(FilePath)) saveAs = true; - else if ((FilePath.ToLowerInvariant().StartsWith(Settings.Default.GTAFolder.ToLowerInvariant()))) saveAs = true; + else if ((FilePath.ToLowerInvariant().StartsWith(GTAFolder.CurrentGTAFolder.ToLowerInvariant()))) saveAs = true; if (!File.Exists(FilePath)) saveAs = true; var fn = FilePath; diff --git a/GameFiles/GameFileCache.cs b/GameFiles/GameFileCache.cs index 53e5483..e42d12e 100644 --- a/GameFiles/GameFileCache.cs +++ b/GameFiles/GameFileCache.cs @@ -121,7 +121,7 @@ namespace CodeWalker.GameFiles RpfMan = new RpfManager(); RpfMan.ExcludePaths = GetExcludePaths(); RpfMan.EnableMods = EnableMods; - RpfMan.Init(Settings.Default.GTAFolder, UpdateStatus, ErrorLog);//, true); + RpfMan.Init(GTAFolder.CurrentGTAFolder, UpdateStatus, ErrorLog);//, true); //RE test area! //DecodeRelFiles(); diff --git a/JenkIndForm.cs b/JenkIndForm.cs index ec0cd96..5467899 100644 --- a/JenkIndForm.cs +++ b/JenkIndForm.cs @@ -36,7 +36,7 @@ namespace CodeWalker { Task.Run(() => { - GTA5Keys.LoadFromPath(Settings.Default.GTAFolder, Settings.Default.Key); + GTA5Keys.LoadFromPath(GTAFolder.CurrentGTAFolder, Settings.Default.Key); GameFileCache gfc = new GameFileCache(); gfc.DoFullStringIndex = true; gfc.Init(UpdateStatus, UpdateStatus); diff --git a/Program.cs b/Program.cs index 6de659b..141a1dd 100644 --- a/Program.cs +++ b/Program.cs @@ -36,11 +36,18 @@ namespace CodeWalker Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); + + // Always check the GTA folder first thing + if (!GTAFolder.UpdateGTAFolder(Properties.Settings.Default.RememberGTAFolder)) + { + MessageBox.Show("Could not load CodeWalker because no valid GTA 5 folder was selected. CodeWalker will now exit.", "GTA 5 Folder Not Found", MessageBoxButtons.OK, MessageBoxIcon.Stop); + return; + } #if !DEBUG try { #endif - if (menumode) + if (menumode) { Application.Run(new MenuForm()); } diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index a9e64f2..76621d0 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -12,7 +12,7 @@ namespace CodeWalker.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -698,5 +698,17 @@ namespace CodeWalker.Properties { this["MouseInvert"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("True")] + public bool RememberGTAFolder { + get { + return ((bool)(this["RememberGTAFolder"])); + } + set { + this["RememberGTAFolder"] = value; + } + } } } diff --git a/Properties/Settings.settings b/Properties/Settings.settings index 903cc47..f2aa187 100644 --- a/Properties/Settings.settings +++ b/Properties/Settings.settings @@ -183,5 +183,8 @@ False + + True + \ No newline at end of file diff --git a/SelectFolderForm.Designer.cs b/SelectFolderForm.Designer.cs index a23879e..af38e99 100644 --- a/SelectFolderForm.Designer.cs +++ b/SelectFolderForm.Designer.cs @@ -35,6 +35,7 @@ this.FolderTextBox = new System.Windows.Forms.TextBox(); this.FolderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); this.CancelButt = new System.Windows.Forms.Button(); + this.RememberFolderCheckbox = new System.Windows.Forms.CheckBox(); this.SuspendLayout(); // // OkButton @@ -81,6 +82,7 @@ // CancelButt // this.CancelButt.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.CancelButt.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.CancelButt.Location = new System.Drawing.Point(238, 78); this.CancelButt.Name = "CancelButt"; this.CancelButt.Size = new System.Drawing.Size(75, 23); @@ -89,17 +91,33 @@ this.CancelButt.UseVisualStyleBackColor = true; this.CancelButt.Click += new System.EventHandler(this.CancelButton_Click); // + // RememberFolderCheckbox + // + this.RememberFolderCheckbox.AutoSize = true; + this.RememberFolderCheckbox.Location = new System.Drawing.Point(12, 82); + this.RememberFolderCheckbox.Name = "RememberFolderCheckbox"; + this.RememberFolderCheckbox.Size = new System.Drawing.Size(134, 17); + this.RememberFolderCheckbox.TabIndex = 66; + this.RememberFolderCheckbox.Text = "Remember GTA Folder"; + this.RememberFolderCheckbox.UseVisualStyleBackColor = true; + this.RememberFolderCheckbox.CheckedChanged += new System.EventHandler(this.RememberFolderCheckbox_CheckedChanged); + // // SelectFolderForm // + this.AcceptButton = this.OkButton; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.CancelButt; this.ClientSize = new System.Drawing.Size(406, 113); + this.Controls.Add(this.RememberFolderCheckbox); this.Controls.Add(this.CancelButt); this.Controls.Add(this.OkButton); this.Controls.Add(this.label1); this.Controls.Add(this.FolderBrowseButton); this.Controls.Add(this.FolderTextBox); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; this.MinimumSize = new System.Drawing.Size(422, 152); this.Name = "SelectFolderForm"; this.Text = "Select GTAV folder - CodeWalker by dexyfex"; @@ -117,5 +135,6 @@ private System.Windows.Forms.TextBox FolderTextBox; private System.Windows.Forms.FolderBrowserDialog FolderBrowserDialog; private System.Windows.Forms.Button CancelButt; + private System.Windows.Forms.CheckBox RememberFolderCheckbox; } } \ No newline at end of file diff --git a/SelectFolderForm.cs b/SelectFolderForm.cs index 45c69c2..4a243fb 100644 --- a/SelectFolderForm.cs +++ b/SelectFolderForm.cs @@ -25,7 +25,8 @@ namespace CodeWalker private void SelectFolderForm_Load(object sender, EventArgs e) { - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; + RememberFolderCheckbox.Checked = Settings.Default.RememberGTAFolder; } private void FolderBrowseButton_Click(object sender, EventArgs e) @@ -50,18 +51,19 @@ namespace CodeWalker private void OkButton_Click(object sender, EventArgs e) { - if (!Directory.Exists(SelectedFolder)) + if(!GTAFolder.ValidateGTAFolder(SelectedFolder, out string failReason)) { - MessageBox.Show("The folder \"" + SelectedFolder + "\" does not exist, or cannot be accessed. Please select another."); - return; - } - if (!File.Exists(SelectedFolder + "\\gta5.exe")) - { - MessageBox.Show("GTA5.exe not found in folder:\n" + SelectedFolder); + MessageBox.Show("The selected folder could not be used:\n\n" + failReason, "Invalid GTA Folder", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } + Result = DialogResult.OK; Close(); } + + private void RememberFolderCheckbox_CheckedChanged(object sender, EventArgs e) + { + Settings.Default.RememberGTAFolder = RememberFolderCheckbox.Checked; + } } } diff --git a/SettingsForm.Designer.cs b/SettingsForm.Designer.cs index a5abb2e..e8526bc 100644 --- a/SettingsForm.Designer.cs +++ b/SettingsForm.Designer.cs @@ -32,6 +32,7 @@ this.MainTabControl = new System.Windows.Forms.TabControl(); this.ControlsTabPage = new System.Windows.Forms.TabPage(); this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.MouseInvertCheckBox = new System.Windows.Forms.CheckBox(); this.label4 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); @@ -79,8 +80,6 @@ this.DoneButton = new System.Windows.Forms.Button(); this.SaveButton = new System.Windows.Forms.Button(); this.ResetButton = new System.Windows.Forms.Button(); - this.FolderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); - this.MouseInvertCheckBox = new System.Windows.Forms.CheckBox(); this.MainTabControl.SuspendLayout(); this.ControlsTabPage.SuspendLayout(); this.groupBox2.SuspendLayout(); @@ -140,6 +139,17 @@ this.groupBox2.TabStop = false; this.groupBox2.Text = "Mouse settings"; // + // MouseInvertCheckBox + // + this.MouseInvertCheckBox.AutoSize = true; + this.MouseInvertCheckBox.Location = new System.Drawing.Point(240, 55); + this.MouseInvertCheckBox.Name = "MouseInvertCheckBox"; + this.MouseInvertCheckBox.Size = new System.Drawing.Size(118, 17); + this.MouseInvertCheckBox.TabIndex = 9; + this.MouseInvertCheckBox.Text = "Invert mouse Y axis"; + this.MouseInvertCheckBox.UseVisualStyleBackColor = true; + this.MouseInvertCheckBox.CheckedChanged += new System.EventHandler(this.MouseInvertCheckBox_CheckedChanged); + // // label4 // this.label4.AutoSize = true; @@ -739,9 +749,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.FolderTextBox.Location = new System.Drawing.Point(110, 28); this.FolderTextBox.Name = "FolderTextBox"; + this.FolderTextBox.ReadOnly = true; this.FolderTextBox.Size = new System.Drawing.Size(303, 20); this.FolderTextBox.TabIndex = 48; - this.FolderTextBox.TextChanged += new System.EventHandler(this.FolderTextBox_TextChanged); // // label5 // @@ -785,17 +795,6 @@ this.ResetButton.UseVisualStyleBackColor = true; this.ResetButton.Click += new System.EventHandler(this.ResetButton_Click); // - // MouseInvertCheckBox - // - this.MouseInvertCheckBox.AutoSize = true; - this.MouseInvertCheckBox.Location = new System.Drawing.Point(240, 55); - this.MouseInvertCheckBox.Name = "MouseInvertCheckBox"; - this.MouseInvertCheckBox.Size = new System.Drawing.Size(118, 17); - this.MouseInvertCheckBox.TabIndex = 9; - this.MouseInvertCheckBox.Text = "Invert mouse Y axis"; - this.MouseInvertCheckBox.UseVisualStyleBackColor = true; - this.MouseInvertCheckBox.CheckedChanged += new System.EventHandler(this.MouseInvertCheckBox_CheckedChanged); - // // SettingsForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -857,7 +856,6 @@ private System.Windows.Forms.Label label6; private System.Windows.Forms.Button FolderBrowseButton; private System.Windows.Forms.TextBox FolderTextBox; - private System.Windows.Forms.FolderBrowserDialog FolderBrowserDialog; private System.Windows.Forms.Label label8; private System.Windows.Forms.NumericUpDown ShadowCascadesUpDown; private System.Windows.Forms.Label label7; diff --git a/SettingsForm.cs b/SettingsForm.cs index 65f52d1..d9cc47c 100644 --- a/SettingsForm.cs +++ b/SettingsForm.cs @@ -71,7 +71,7 @@ namespace CodeWalker } private void LoadAdvancedSettings() { - FolderTextBox.Text = Settings.Default.GTAFolder; + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; ExcludeFoldersTextBox.Text = Settings.Default.ExcludeFolders; ShadowCascadesUpDown.Value = Settings.Default.ShadowCascades; CacheSizeUpDown.Value = Math.Min(Math.Max(Settings.Default.CacheSize / 1048576, CacheSizeUpDown.Minimum), CacheSizeUpDown.Maximum); @@ -270,21 +270,10 @@ namespace CodeWalker } } - - - private void FolderTextBox_TextChanged(object sender, EventArgs e) - { - Settings.Default.GTAFolder = FolderTextBox.Text; - } - private void FolderBrowseButton_Click(object sender, EventArgs e) { - FolderBrowserDialog.SelectedPath = Settings.Default.GTAFolder; - DialogResult res = FolderBrowserDialog.ShowDialog(); - if (res == DialogResult.OK) - { - FolderTextBox.Text = FolderBrowserDialog.SelectedPath; - } + GTAFolder.UpdateGTAFolder(false); + FolderTextBox.Text = GTAFolder.CurrentGTAFolder; } private void ExcludeFoldersTextBox_TextChanged(object sender, EventArgs e) diff --git a/SettingsForm.resx b/SettingsForm.resx index bd12579..1431f6b 100644 --- a/SettingsForm.resx +++ b/SettingsForm.resx @@ -117,9 +117,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 17, 17 - diff --git a/Utils/GTAFolder.cs b/Utils/GTAFolder.cs new file mode 100644 index 0000000..38c489a --- /dev/null +++ b/Utils/GTAFolder.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.IO; +using System.Windows.Forms; +using CodeWalker.Properties; + +namespace CodeWalker +{ + public static class GTAFolder + { + public static string CurrentGTAFolder { get; private set; } = Settings.Default.GTAFolder; + + public static bool ValidateGTAFolder(string folder, out string failReason) + { + failReason = ""; + + if(string.IsNullOrWhiteSpace(folder)) + { + failReason = "No folder specified"; + return false; + } + + if(!Directory.Exists(folder)) + { + failReason = $"Folder \"{folder}\" does not exist"; + return false; + } + + if(!File.Exists(folder + @"\gta5.exe")) + { + failReason = $"GTA5.exe not found in folder \"{folder}\""; + return false; + } + + return true; + } + + public static bool ValidateGTAFolder(string folder) => ValidateGTAFolder(folder, out string reason); + + public static bool IsCurrentGTAFolderValid() => ValidateGTAFolder(CurrentGTAFolder); + + public static bool UpdateGTAFolder(bool UseCurrentIfValid = false) + { + if(UseCurrentIfValid && IsCurrentGTAFolderValid()) + { + return true; + } + + string origFolder = CurrentGTAFolder; + string folder = CurrentGTAFolder; + SelectFolderForm f = new SelectFolderForm(); + f.ShowDialog(); + if(f.Result == DialogResult.OK && Directory.Exists(f.SelectedFolder)) + { + folder = f.SelectedFolder; + } + + string failReason; + if(ValidateGTAFolder(folder, out failReason)) + { + SetGTAFolder(folder); + if(folder != origFolder) + { + MessageBox.Show($"Successfully changed GTA Folder to \"{folder}\"", "Set GTA Folder", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + return true; + } else + { + var tryAgain = MessageBox.Show($"Folder \"{folder}\" is not a valid GTA folder:\n\n{failReason}\n\nDo you want to try choosing a different folder?", "Unable to set GTA Folder", MessageBoxButtons.RetryCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); + if(tryAgain == DialogResult.Retry) + { + return UpdateGTAFolder(false); + } else + { + return false; + } + } + } + + public static bool SetGTAFolder(string folder) + { + if(ValidateGTAFolder(folder)) + { + CurrentGTAFolder = folder; + Settings.Default.GTAFolder = folder; + return true; + } + + return false; + } + + public static string GetCurrentGTAFolderWithTrailingSlash() =>CurrentGTAFolder.EndsWith(@"\") ? CurrentGTAFolder : CurrentGTAFolder + @"\"; + + } +} diff --git a/WorldForm.cs b/WorldForm.cs index 2ce6175..9843e68 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -226,38 +226,11 @@ namespace CodeWalker MouseWheel += WorldForm_MouseWheel; - string fldr = Settings.Default.GTAFolder; - if (string.IsNullOrEmpty(fldr) || !Directory.Exists(fldr)) + if (!GTAFolder.UpdateGTAFolder(true)) { - SelectFolderForm f = new SelectFolderForm(); - f.ShowDialog(); - if (f.Result == DialogResult.OK) - { - fldr = f.SelectedFolder; - } - else - { - //MessageBox.Show("No GTAV folder was chosen. CodeWalker will now exit."); - Close(); - return; - } - } - - if (!Directory.Exists(fldr)) - { - MessageBox.Show("The specified folder does not exist:\n" + fldr); Close(); return; } - if (!File.Exists(fldr + "\\gta5.exe")) - { - MessageBox.Show("GTA5.exe not found in folder:\n" + fldr); - Close(); - return; - } - - Settings.Default.GTAFolder = fldr; //seems ok, save it for later - Widget.Position = new Vector3(1.0f, 10.0f, 100.0f); Widget.Rotation = Quaternion.Identity; @@ -3889,7 +3862,7 @@ namespace CodeWalker try { - GTA5Keys.LoadFromPath(Settings.Default.GTAFolder, Settings.Default.Key); + GTA5Keys.LoadFromPath(GTAFolder.CurrentGTAFolder, Settings.Default.Key); //save the key for later if it's not saved already. not really ideal to have this in this thread if (string.IsNullOrEmpty(Settings.Default.Key) && (GTA5Keys.PC_AES_KEY != null))