diff --git a/.gitignore b/.gitignore index 2b6225d4..39415124 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ Test.MMManaged/obj Native/.vscode/settings.json Native/.ionide/symbolCache.db MMLaunch/obj +MMLaunch/bin .ionide/symbolCache.db .rustc_info.json Native/snaplib/target diff --git a/MMAll.dotnet.sln b/MMAll.dotnet.sln index 88547283..5f4de33c 100644 --- a/MMAll.dotnet.sln +++ b/MMAll.dotnet.sln @@ -9,26 +9,68 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "MMManaged.Engine.dotnet", " EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "MMTricks.dotnet", "MMTricks\MMTricks.dotnet.fsproj", "{AD894349-DD65-422F-80D1-0ED6F0052352}" EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "MMLaunch", "MMLaunch\MMLaunch.fsproj", "{3F2FB480-E609-4415-96A7-C4BE6DB13570}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Debug|x64.ActiveCfg = Debug|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Debug|x64.Build.0 = Debug|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Debug|x86.ActiveCfg = Debug|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Debug|x86.Build.0 = Debug|Any CPU {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Release|Any CPU.Build.0 = Release|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Release|x64.ActiveCfg = Release|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Release|x64.Build.0 = Release|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Release|x86.ActiveCfg = Release|Any CPU + {C6097DB3-F08B-4F18-9E9F-F87E4FE3C99B}.Release|x86.Build.0 = Release|Any CPU {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Debug|x64.ActiveCfg = Debug|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Debug|x64.Build.0 = Debug|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Debug|x86.ActiveCfg = Debug|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Debug|x86.Build.0 = Debug|Any CPU {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Release|Any CPU.ActiveCfg = Release|Any CPU {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Release|Any CPU.Build.0 = Release|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Release|x64.ActiveCfg = Release|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Release|x64.Build.0 = Release|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Release|x86.ActiveCfg = Release|Any CPU + {91E5FD7F-68BC-40F6-BFBE-549F0B82C671}.Release|x86.Build.0 = Release|Any CPU {AD894349-DD65-422F-80D1-0ED6F0052352}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {AD894349-DD65-422F-80D1-0ED6F0052352}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Debug|x64.ActiveCfg = Debug|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Debug|x64.Build.0 = Debug|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Debug|x86.ActiveCfg = Debug|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Debug|x86.Build.0 = Debug|Any CPU {AD894349-DD65-422F-80D1-0ED6F0052352}.Release|Any CPU.ActiveCfg = Release|Any CPU {AD894349-DD65-422F-80D1-0ED6F0052352}.Release|Any CPU.Build.0 = Release|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Release|x64.ActiveCfg = Release|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Release|x64.Build.0 = Release|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Release|x86.ActiveCfg = Release|Any CPU + {AD894349-DD65-422F-80D1-0ED6F0052352}.Release|x86.Build.0 = Release|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Debug|x64.ActiveCfg = Debug|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Debug|x64.Build.0 = Debug|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Debug|x86.ActiveCfg = Debug|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Debug|x86.Build.0 = Debug|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Release|Any CPU.Build.0 = Release|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Release|x64.ActiveCfg = Release|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Release|x64.Build.0 = Release|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Release|x86.ActiveCfg = Release|Any CPU + {3F2FB480-E609-4415-96A7-C4BE6DB13570}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE EndGlobalSection EndGlobal diff --git a/MMDotNet.sln b/MMDotNet.sln index 521b2a61..21ad84d8 100644 --- a/MMDotNet.sln +++ b/MMDotNet.sln @@ -20,10 +20,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution BlenderScripts\install.py = BlenderScripts\install.py EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfInteropSample", "MMLaunch\WpfInteropSample\WpfInteropSample.csproj", "{B7751FAB-AE42-457F-8D69-51BEE5DC080A}" -EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "MMLaunch", "MMLaunch\MMLaunch.fsproj", "{5FC4A84B-A153-4927-B6AA-015C78F6D03D}" -EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "MMView", "MMView\MMView.fsproj", "{404FA43F-143A-4EB1-AE53-24FC9F65A538}" EndProject Global @@ -40,34 +36,18 @@ Global {E87272E6-CE49-4D85-9E55-EAC6117D419A}.Release|Any CPU.ActiveCfg = Release|Any CPU {E87272E6-CE49-4D85-9E55-EAC6117D419A}.Release|Any CPU.Build.0 = Release|Any CPU {E87272E6-CE49-4D85-9E55-EAC6117D419A}.Release|x86.ActiveCfg = Release|Any CPU - {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Debug|x86.ActiveCfg = Debug|Any CPU - {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Release|Any CPU.Build.0 = Release|Any CPU - {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Release|x86.ActiveCfg = Release|Any CPU {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|Any CPU.Build.0 = Debug|Any CPU {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Debug|x86.ActiveCfg = Debug|Any CPU {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|Any CPU.ActiveCfg = Release|Any CPU {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|Any CPU.Build.0 = Release|Any CPU {A1B2C3D4-E5F6-7890-ABCD-EF1234567890}.Release|x86.ActiveCfg = Release|Any CPU - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Debug|x86.ActiveCfg = Debug|x86 - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Debug|x86.Build.0 = Debug|x86 - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Release|Any CPU.Build.0 = Release|Any CPU - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Release|x86.ActiveCfg = Release|x86 - {B7751FAB-AE42-457F-8D69-51BEE5DC080A}.Release|x86.Build.0 = Release|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Debug|Any CPU.ActiveCfg = Debug|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Debug|Any CPU.Build.0 = Debug|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Debug|x86.ActiveCfg = Debug|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Debug|x86.Build.0 = Debug|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Release|Any CPU.ActiveCfg = Release|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Release|Any CPU.Build.0 = Release|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Release|x86.ActiveCfg = Release|x86 - {5FC4A84B-A153-4927-B6AA-015C78F6D03D}.Release|x86.Build.0 = Release|x86 + {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Debug|x86.ActiveCfg = Debug|Any CPU + {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Release|Any CPU.Build.0 = Release|Any CPU + {0AAB4CB7-549E-46CF-A3B6-E853C5E381C8}.Release|x86.ActiveCfg = Release|Any CPU {404FA43F-143A-4EB1-AE53-24FC9F65A538}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {404FA43F-143A-4EB1-AE53-24FC9F65A538}.Debug|Any CPU.Build.0 = Debug|Any CPU {404FA43F-143A-4EB1-AE53-24FC9F65A538}.Debug|x86.ActiveCfg = Debug|x86 diff --git a/MMLaunch/App.axaml b/MMLaunch/App.axaml new file mode 100644 index 00000000..4831259d --- /dev/null +++ b/MMLaunch/App.axaml @@ -0,0 +1,8 @@ + + + + + diff --git a/MMLaunch/App.axaml.fs b/MMLaunch/App.axaml.fs new file mode 100644 index 00000000..771968f0 --- /dev/null +++ b/MMLaunch/App.axaml.fs @@ -0,0 +1,19 @@ +namespace MMLaunch + +open Avalonia +open Avalonia.Controls.ApplicationLifetimes +open Avalonia.Markup.Xaml + +type App() = + inherit Application() + + override this.Initialize() = + AvaloniaXamlLoader.Load(this) + + override this.OnFrameworkInitializationCompleted() = + match this.ApplicationLifetime with + | :? IClassicDesktopStyleApplicationLifetime as desktop -> + desktop.MainWindow <- MainWindow() + | _ -> () + + base.OnFrameworkInitializationCompleted() diff --git a/MMLaunch/App.config b/MMLaunch/App.config deleted file mode 100644 index e1a25799..00000000 --- a/MMLaunch/App.config +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/MMLaunch/App.fs b/MMLaunch/App.fs deleted file mode 100644 index df840628..00000000 --- a/MMLaunch/App.fs +++ /dev/null @@ -1,11 +0,0 @@ -module main - -open System -open FsXaml - -type App = XAML<"App.xaml"> - -[] -[] -let main argv = - App().Root.Run() \ No newline at end of file diff --git a/MMLaunch/App.xaml b/MMLaunch/App.xaml deleted file mode 100644 index f61c4ba3..00000000 --- a/MMLaunch/App.xaml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/MMLaunch/AssemblyInfo.fs b/MMLaunch/AssemblyInfo.fs deleted file mode 100644 index 625be1eb..00000000 --- a/MMLaunch/AssemblyInfo.fs +++ /dev/null @@ -1,14 +0,0 @@ -namespace System -open System.Reflection -open System.Runtime.InteropServices - -[] -[] -[] -[] -[] -[] -do () - -module internal AssemblyVersionInformation = - let [] Version = "1.2.0.0" diff --git a/MMLaunch/BlenderUtil.fs b/MMLaunch/BlenderUtil.fs index 24b671f7..d8015c04 100644 --- a/MMLaunch/BlenderUtil.fs +++ b/MMLaunch/BlenderUtil.fs @@ -63,7 +63,7 @@ module BlenderUtil = if key = null then failwith "can't open reg key" let bKey = key.OpenSubKey SubKey - if bKey = null then failwith "can't open blender key" + if bKey = null then failwith "can't open blender registry key" let v = bKey.GetValue(name,defVal) if v = null then failwith "name not found" @@ -163,9 +163,14 @@ module BlenderUtil = let rawMsg = sprintf "\n\nTried to run: %s\n\nStdout:\n%s\n\nStderr:\n%s" cmd rawOut "" failwithf "No addon paths detected; install script may not be compatible with this version of blender:%s" rawMsg - let isWritable (p:string) = + let isWritable (p:string) = + // Try to write a probe file. Directory.GetAccessControl from + // .NET Framework no longer ships in core; this is a portable + // equivalent. try - Directory.GetAccessControl(p) |> ignore + let probe = Path.Combine(p, ".mmlaunch_probe_" + System.Guid.NewGuid().ToString("N")) + File.WriteAllText(probe, "") + File.Delete(probe) true with | _ -> false diff --git a/MMLaunch/BlenderWindow.axaml b/MMLaunch/BlenderWindow.axaml new file mode 100644 index 00000000..530b61e6 --- /dev/null +++ b/MMLaunch/BlenderWindow.axaml @@ -0,0 +1,25 @@ + + + + + + +