├── .gitignore
├── .vs
├── FMM2
│ ├── FileContentIndex
│ │ ├── 4b38bdc1-08b8-441e-bd06-888cf80339e7.vsidx
│ │ ├── fc81a063-62a5-4872-85d2-a720ca8650e5.vsidx
│ │ └── read.lock
│ ├── v14
│ │ └── .suo
│ ├── v15
│ │ └── .suo
│ └── v17
│ │ └── .suo
├── ProjectSettings.json
├── VSWorkspaceState.json
└── slnx.sqlite
├── FMM2.sln
├── FMM2
├── About.xaml
├── About.xaml.cs
├── App.config
├── App.xaml
├── App.xaml.cs
├── Converters.cs
├── DLLExtractor.cs
├── FMM.ico
├── FMM.png
├── FMM2 - Shortcut.lnk
├── FMM2.csproj
├── FMM2.csproj.user
├── INIFileParser.dll
├── ListView
│ ├── DragAdorner.cs
│ ├── ListViewDragDropManager.cs
│ ├── MouseUtilities.cs
│ └── Task.cs
├── List_ContextMenu.cs
├── List_SelectionChanged.cs
├── List_Sort.cs
├── LoadFMMLanguage.cs
├── MainWindow.xaml
├── MainWindow.xaml.cs
├── Menu.cs
├── Newtonsoft.Json.dll
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── REBKFs3.png
├── SharpPlink-Win32.svnExe
├── SharpSvn.UI.dll
├── SharpSvn.dll
├── Worker_BackupCreate.cs
├── Worker_BackupRestore.cs
├── Worker_DownloadMaps.cs
├── Worker_DownloadMods.cs
├── Worker_InstallMods.cs
├── Worker_PopulateDLMaps.cs
├── Worker_PopulateDLMods.cs
├── Worker_PopulateMyGametypes.cs
├── Worker_PopulateMyMaps.cs
├── Worker_PopulateMyMods.cs
├── Worker_PopulateServers.cs
├── WrappingStream.cs
├── bin
│ └── x86
│ │ └── Release
│ │ ├── FMM.exe.config
│ │ └── FMM.pdb
├── fmmclose.png
├── fmmdown.png
├── fmmup.png
├── gametypes
│ ├── assault.png
│ ├── ctf.png
│ ├── forge.png
│ ├── infection.png
│ ├── juggernaut.png
│ ├── koth.png
│ ├── none.png
│ ├── oddball.png
│ ├── slayer.png
│ ├── territories.png
│ ├── undefined.png
│ ├── vip.png
│ └── zombiez.png
├── maps
│ ├── bunkerworld.png
│ ├── chill.png
│ ├── cyberdyne.png
│ ├── deadlock.png
│ ├── flatgrass.png
│ ├── guardian.png
│ ├── hangem-high.png
│ ├── lockout.png
│ ├── mainmenu.png
│ ├── riverworld.png
│ ├── s3d_avalanche.png
│ ├── s3d_edge.png
│ ├── s3d_reactor.png
│ ├── s3d_turf.png
│ ├── shrine.png
│ ├── station.png
│ ├── unknown.png
│ └── zanzibar.png
├── obj
│ ├── Debug
│ │ ├── App.g.cs
│ │ ├── App.g.i.cs
│ │ ├── CoreCompileInputs.cache
│ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── FMM.exe
│ │ ├── FMM.g.resources
│ │ ├── FMM.pdb
│ │ ├── FMM2.Properties.Resources.resources
│ │ ├── FMM2.csproj.FileListAbsolute.txt
│ │ ├── FMM2.csproj.GenerateResource.Cache
│ │ ├── FMM2.csprojResolveAssemblyReference.cache
│ │ ├── FMM2.exe
│ │ ├── FMM2.g.resources
│ │ ├── FMM2.pdb
│ │ ├── FMM2_Content.g.i.cs
│ │ ├── FMM2_MarkupCompile.cache
│ │ ├── FMM2_MarkupCompile.i.cache
│ │ ├── FMM2_MarkupCompile.i.lref
│ │ ├── FMM2_MarkupCompile.lref
│ │ ├── FMM_MarkupCompile.cache
│ │ ├── FMM_MarkupCompile.i.cache
│ │ ├── FMM_MarkupCompile.lref
│ │ ├── GeneratedInternalTypeHelper.g.i.cs
│ │ ├── MainWindow.baml
│ │ ├── MainWindow.g.cs
│ │ ├── MainWindow.g.i.cs
│ │ ├── TempPE
│ │ │ └── Properties.Resources.Designer.cs.dll
│ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ ├── Release
│ │ ├── App.g.cs
│ │ ├── App.g.i.cs
│ │ ├── CoreCompileInputs.cache
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── FMM2.csproj.FileListAbsolute.txt
│ │ ├── FMM2_MarkupCompile.cache
│ │ ├── FMM2_MarkupCompile.i.cache
│ │ ├── FMM2_MarkupCompile.i.lref
│ │ ├── FMM2_MarkupCompile.lref
│ │ ├── FMM_MarkupCompile.cache
│ │ ├── FMM_MarkupCompile.lref
│ │ ├── GeneratedInternalTypeHelper.g.i.cs
│ │ ├── MainWindow.g.cs
│ │ ├── MainWindow.g.i.cs
│ │ ├── TempPE
│ │ │ └── Properties.Resources.Designer.cs.dll
│ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ └── x86
│ │ ├── Debug
│ │ ├── App.g.i.cs
│ │ ├── Common.cs
│ │ ├── CoreCompileInputs.cache
│ │ ├── Costura
│ │ │ ├── 2FB0BE100DE03680FC4309C9FA5A29E69397A980.costura.newtonsoft.json.dll.compressed
│ │ │ ├── 3E35FDE8B97E0E1BA73DCF4C55F70A0609D11C2D.costura.inifileparser.dll.compressed
│ │ │ ├── 5E879DA30B015A69B824E12808C5FD476A23D50D.costura.sharpsvn.ui.dll.compressed
│ │ │ ├── 5EA773A4A02CE0AE8DFAF05FC7794ACB5320041F.costura.sharpsvn.dll.compressed
│ │ │ ├── 6B0BB36B0DAC1D7F67D19E9B6676751D15B24084.costura.sharpsvn.pdb.compressed
│ │ │ └── 852659B586A38F74DF16E1A6084920BA3712C66F.costura.sharpsvn.ui.pdb.compressed
│ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── FMM.exe
│ │ ├── FMM.exe.tmp
│ │ ├── FMM.g.resources
│ │ ├── FMM.pdb
│ │ ├── FMM.pdb.tmp
│ │ ├── FMM2.Properties.Resources.resources
│ │ ├── FMM2.csproj.FileListAbsolute.txt
│ │ ├── FMM2.csproj.GenerateResource.Cache
│ │ ├── FMM2_MarkupCompile.i.cache
│ │ ├── FMM2_MarkupCompile.i.lref
│ │ ├── FMM_Content.g.i.cs
│ │ ├── FMM_MarkupCompile.cache
│ │ ├── FMM_MarkupCompile.i.cache
│ │ ├── FMM_MarkupCompile.lref
│ │ ├── GeneratedInternalTypeHelper.g.cs
│ │ ├── GeneratedInternalTypeHelper.g.i.cs
│ │ ├── ILTemplate.cs
│ │ ├── MainWindow.baml
│ │ ├── MainWindow.g.cs
│ │ ├── MainWindow.g.i.cs
│ │ ├── TempPE
│ │ │ └── Properties.Resources.Designer.cs.dll
│ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
│ │ └── Release
│ │ ├── .NETFramework,Version=v4.8.AssemblyAttributes.cs
│ │ ├── About.baml
│ │ ├── About.g.cs
│ │ ├── About.g.i.cs
│ │ ├── App.g.cs
│ │ ├── App.g.i.cs
│ │ ├── Common.cs
│ │ ├── CoreCompileInputs.cache
│ │ ├── Costura
│ │ ├── 2FB0BE100DE03680FC4309C9FA5A29E69397A980.costura.newtonsoft.json.dll.compressed
│ │ ├── 3E35FDE8B97E0E1BA73DCF4C55F70A0609D11C2D.costura.inifileparser.dll.compressed
│ │ ├── 5E879DA30B015A69B824E12808C5FD476A23D50D.costura.sharpsvn.ui.dll.compressed
│ │ ├── 5EA773A4A02CE0AE8DFAF05FC7794ACB5320041F.costura.sharpsvn.dll.compressed
│ │ ├── 6B0BB36B0DAC1D7F67D19E9B6676751D15B24084.costura.sharpsvn.pdb.compressed
│ │ └── 852659B586A38F74DF16E1A6084920BA3712C66F.costura.sharpsvn.ui.pdb.compressed
│ │ ├── DesignTimeResolveAssemblyReferences.cache
│ │ ├── DesignTimeResolveAssemblyReferencesInput.cache
│ │ ├── FMM.exe
│ │ ├── FMM.exe.tmp
│ │ ├── FMM.g.resources
│ │ ├── FMM.pdb
│ │ ├── FMM.pdb.tmp
│ │ ├── FMM2.Properties.Resources.resources
│ │ ├── FMM2.csproj.AssemblyReference.cache
│ │ ├── FMM2.csproj.CoreCompileInputs.cache
│ │ ├── FMM2.csproj.FileListAbsolute.txt
│ │ ├── FMM2.csproj.GenerateResource.Cache
│ │ ├── FMM2.csproj.SuggestedBindingRedirects.cache
│ │ ├── FMM2.csprojResolveAssemblyReference.cache
│ │ ├── FMM_Content.g.i.cs
│ │ ├── FMM_MarkupCompile.cache
│ │ ├── FMM_MarkupCompile.i.cache
│ │ ├── FMM_MarkupCompile.lref
│ │ ├── GeneratedInternalTypeHelper.g.cs
│ │ ├── GeneratedInternalTypeHelper.g.i.cs
│ │ ├── ILTemplate.cs
│ │ ├── MainWindow.baml
│ │ ├── MainWindow.g.cs
│ │ ├── MainWindow.g.i.cs
│ │ ├── TempPE
│ │ └── Properties.Resources.Designer.cs.dll
│ │ ├── TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
│ │ ├── TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
│ │ └── TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
└── packages.config
├── LICENSE
├── README.md
└── packages
├── Newtonsoft.Json.10.0.3
├── LICENSE.md
├── Newtonsoft.Json.10.0.3.nupkg
├── lib
│ ├── net20
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ ├── net35
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ ├── net40
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ ├── net45
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ ├── netstandard1.0
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ ├── netstandard1.3
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ ├── portable-net40+sl5+win8+wp8+wpa81
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
│ └── portable-net45+win8+wp8+wpa81
│ │ ├── Newtonsoft.Json.dll
│ │ └── Newtonsoft.Json.xml
└── tools
│ └── install.ps1
├── SharpSvn.1.9-x86.1.9005.3940.224
├── SharpSvn.1.9-x86.1.9005.3940.224.nupkg
└── lib
│ ├── net20
│ ├── SharpPlink-Win32.pdb
│ ├── SharpPlink-Win32.svnExe
│ ├── SharpSvn-DB44-20-win32.svnDll
│ ├── SharpSvn.UI.dll
│ ├── SharpSvn.UI.pdb
│ ├── SharpSvn.UI.xml
│ ├── SharpSvn.dll
│ ├── SharpSvn.pdb
│ └── SharpSvn.xml
│ └── net40
│ ├── SharpPlink-Win32.pdb
│ ├── SharpPlink-Win32.svnExe
│ ├── SharpSvn-DB44-20-win32.svnDll
│ ├── SharpSvn.UI.dll
│ ├── SharpSvn.UI.pdb
│ ├── SharpSvn.UI.xml
│ ├── SharpSvn.dll
│ ├── SharpSvn.pdb
│ └── SharpSvn.xml
└── ini-parser.2.4.0
├── ini-parser.2.4.0.nupkg
└── lib
└── net20
├── INIFileParser.dll
├── INIFileParser.dll.mdb
└── INIFileParser.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | ################################################################################
2 | # This .gitignore file was automatically created by Microsoft(R) Visual Studio.
3 | ################################################################################
4 |
5 | /FMM2/bin/x86/Debug
6 | /FMM2/obj/x86/Debug
7 |
--------------------------------------------------------------------------------
/.vs/FMM2/FileContentIndex/4b38bdc1-08b8-441e-bd06-888cf80339e7.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/FMM2/FileContentIndex/4b38bdc1-08b8-441e-bd06-888cf80339e7.vsidx
--------------------------------------------------------------------------------
/.vs/FMM2/FileContentIndex/fc81a063-62a5-4872-85d2-a720ca8650e5.vsidx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/FMM2/FileContentIndex/fc81a063-62a5-4872-85d2-a720ca8650e5.vsidx
--------------------------------------------------------------------------------
/.vs/FMM2/FileContentIndex/read.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/FMM2/FileContentIndex/read.lock
--------------------------------------------------------------------------------
/.vs/FMM2/v14/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/FMM2/v14/.suo
--------------------------------------------------------------------------------
/.vs/FMM2/v15/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/FMM2/v15/.suo
--------------------------------------------------------------------------------
/.vs/FMM2/v17/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/FMM2/v17/.suo
--------------------------------------------------------------------------------
/.vs/ProjectSettings.json:
--------------------------------------------------------------------------------
1 | {
2 | "CurrentProjectSetting": null
3 | }
--------------------------------------------------------------------------------
/.vs/VSWorkspaceState.json:
--------------------------------------------------------------------------------
1 | {
2 | "ExpandedNodes": [
3 | ""
4 | ],
5 | "SelectedNode": "\\FMM2.sln",
6 | "PreviewInSolutionExplorer": false
7 | }
--------------------------------------------------------------------------------
/.vs/slnx.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/.vs/slnx.sqlite
--------------------------------------------------------------------------------
/FMM2.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Blend for Visual Studio 15
4 | VisualStudioVersion = 15.0.26228.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FMM2", "FMM2\FMM2.csproj", "{C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Debug|x86 = Debug|x86
12 | Release|Any CPU = Release|Any CPU
13 | Release|x86 = Release|x86
14 | EndGlobalSection
15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
16 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Debug|Any CPU.Build.0 = Debug|Any CPU
18 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Debug|x86.ActiveCfg = Debug|x86
19 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Debug|x86.Build.0 = Debug|x86
20 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Release|Any CPU.ActiveCfg = Release|Any CPU
21 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Release|Any CPU.Build.0 = Release|Any CPU
22 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Release|x86.ActiveCfg = Release|x86
23 | {C620A1B9-1F46-4AFD-B386-FF58B5A4B84D}.Release|x86.Build.0 = Release|x86
24 | EndGlobalSection
25 | GlobalSection(SolutionProperties) = preSolution
26 | HideSolutionNode = FALSE
27 | EndGlobalSection
28 | EndGlobal
29 |
--------------------------------------------------------------------------------
/FMM2/About.xaml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/FMM2/About.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using System.Windows;
7 | using System.Windows.Controls;
8 | using System.Windows.Data;
9 | using System.Windows.Documents;
10 | using System.Windows.Input;
11 | using System.Windows.Media;
12 | using System.Windows.Media.Imaging;
13 | using System.Windows.Shapes;
14 |
15 | namespace FMM2
16 | {
17 | ///
18 | /// Interaction logic for About.xaml
19 | ///
20 | public partial class About : Window
21 | {
22 | public About()
23 | {
24 | InitializeComponent();
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/FMM2/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/FMM2/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/FMM2/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Configuration;
4 | using System.Data;
5 | using System.Linq;
6 | using System.Threading.Tasks;
7 | using System.Windows;
8 |
9 | namespace FMM2
10 | {
11 | ///
12 | /// Interaction logic for App.xaml
13 | ///
14 | public partial class App : Application
15 | {
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/FMM2/Converters.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Globalization;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using System.Windows;
9 | using System.Windows.Data;
10 |
11 | namespace FMM2
12 | {
13 | public class SwitchConverter : IMultiValueConverter
14 | {
15 | public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
16 | {
17 | if (values[0] != null)
18 | {
19 | return values[0];
20 | }
21 | if (values[1] != null)
22 | {
23 | return values[1];
24 | }
25 | return "";
26 | }
27 |
28 | public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
29 | {
30 | throw new NotSupportedException();
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/FMM2/DLLExtractor.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Reflection;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using System.Windows;
9 |
10 | namespace FMM2
11 | {
12 | public partial class MainWindow : Window
13 | {
14 | public static byte[] ExtractResource(Assembly assembly, string resourceName)
15 | {
16 | if (assembly == null)
17 | {
18 | return null;
19 | }
20 |
21 | using (Stream resFilestream = assembly.GetManifestResourceStream(resourceName))
22 | {
23 | if (resFilestream == null)
24 | {
25 | MessageBox.Show(string.Join(",",assembly.GetManifestResourceNames()));
26 | return null;
27 | }
28 |
29 | byte[] bytes = new byte[resFilestream.Length];
30 | resFilestream.Read(bytes, 0, bytes.Length);
31 |
32 | return bytes;
33 | }
34 | }
35 |
36 | private void ExtractDLLs()
37 | {
38 | if (File.Exists(Path.Combine("FMM", "lib", "SharpSvn.dll")))
39 | {
40 | File.Delete(Path.Combine("FMM", "lib", "SharpSvn.dll"));
41 | }
42 |
43 | if (File.Exists(Path.Combine("FMM", "lib", "SharpSvn.UI.dll")))
44 | {
45 | File.Delete(Path.Combine("FMM", "lib", "SharpSvn.UI.dll"));
46 | }
47 | if (File.Exists(Path.Combine("FMM", "lib", "Newtonsoft.Json.dll")))
48 | {
49 | File.Delete(Path.Combine("FMM", "lib", "Newtonsoft.Json.dll"));
50 | }
51 | if (File.Exists(Path.Combine("FMM", "lib", "INIFileParser.dll")))
52 | {
53 | File.Delete(Path.Combine("FMM", "lib", "INIFileParser.dll"));
54 | }
55 | Directory.CreateDirectory(Path.Combine("FMM", "lib"));
56 | File.WriteAllBytes(Path.Combine("FMM", "lib", "SharpSvn.dll"), ExtractResource(Assembly.GetExecutingAssembly(), "FMM2.SharpSvn.dll"));
57 | File.WriteAllBytes(Path.Combine("FMM", "lib", "SharpSvn.UI.dll"), ExtractResource(Assembly.GetExecutingAssembly(), "FMM2.SharpSvn.UI.dll"));
58 | File.WriteAllBytes(Path.Combine("FMM", "lib", "Newtonsoft.Json.dll"), ExtractResource(Assembly.GetExecutingAssembly(), "FMM2.Newtonsoft.Json.dll"));
59 | File.WriteAllBytes(Path.Combine("FMM", "lib", "INIFileParser.dll"), ExtractResource(Assembly.GetExecutingAssembly(), "FMM2.INIFileParser.dll"));
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/FMM2/FMM.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/FMM2/FMM.ico
--------------------------------------------------------------------------------
/FMM2/FMM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/FMM2/FMM.png
--------------------------------------------------------------------------------
/FMM2/FMM2 - Shortcut.lnk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/FMM2/FMM2 - Shortcut.lnk
--------------------------------------------------------------------------------
/FMM2/FMM2.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ShowAllFiles
5 |
6 |
--------------------------------------------------------------------------------
/FMM2/INIFileParser.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Clef-0/FMM/cdfb41f01e7c8010ff8ef3b0608df384a6e7b083/FMM2/INIFileParser.dll
--------------------------------------------------------------------------------
/FMM2/ListView/DragAdorner.cs:
--------------------------------------------------------------------------------
1 | // Copyright (C) Josh Smith - January 2007
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Text;
5 | using System.Windows.Documents;
6 | using System.Windows;
7 | using System.Windows.Media;
8 | using System.Windows.Shapes;
9 | using System.Windows.Media.Animation;
10 | using System.Windows.Controls;
11 |
12 | namespace WPF.JoshSmith.Adorners
13 | {
14 | ///
15 | /// Renders a visual which can follow the mouse cursor,
16 | /// such as during a drag-and-drop operation.
17 | ///
18 | public class DragAdorner : Adorner
19 | {
20 | #region Data
21 |
22 | private Rectangle child = null;
23 | private double offsetLeft = 0;
24 | private double offsetTop = 0;
25 |
26 | #endregion // Data
27 |
28 | #region Constructor
29 |
30 | ///
31 | /// Initializes a new instance of DragVisualAdorner.
32 | ///
33 | /// The element being adorned.
34 | /// The size of the adorner.
35 | /// A brush to with which to paint the adorner.
36 | public DragAdorner( UIElement adornedElement, Size size, Brush brush )
37 | : base( adornedElement )
38 | {
39 | Rectangle rect = new Rectangle();
40 | rect.Fill = brush;
41 | rect.Width = size.Width;
42 | rect.Height = size.Height;
43 | rect.IsHitTestVisible = false;
44 | this.child = rect;
45 | }
46 |
47 | #endregion // Constructor
48 |
49 | #region Public Interface
50 |
51 | #region GetDesiredTransform
52 |
53 | ///
54 | /// Override.
55 | ///
56 | ///
57 | ///
58 | public override GeneralTransform GetDesiredTransform( GeneralTransform transform )
59 | {
60 | GeneralTransformGroup result = new GeneralTransformGroup();
61 | result.Children.Add( base.GetDesiredTransform( transform ) );
62 | result.Children.Add( new TranslateTransform( this.offsetLeft, this.offsetTop ) );
63 | return result;
64 | }
65 |
66 | #endregion // GetDesiredTransform
67 |
68 | #region OffsetLeft
69 |
70 | ///
71 | /// Gets/sets the horizontal offset of the adorner.
72 | ///
73 | public double OffsetLeft
74 | {
75 | get { return this.offsetLeft; }
76 | set
77 | {
78 | this.offsetLeft = value;
79 | UpdateLocation();
80 | }
81 | }
82 |
83 | #endregion // OffsetLeft
84 |
85 | #region SetOffsets
86 |
87 | ///
88 | /// Updates the location of the adorner in one atomic operation.
89 | ///
90 | ///
91 | ///
92 | public void SetOffsets( double left, double top )
93 | {
94 | this.offsetLeft = left;
95 | this.offsetTop = top;
96 | this.UpdateLocation();
97 | }
98 |
99 | #endregion // SetOffsets
100 |
101 | #region OffsetTop
102 |
103 | ///
104 | /// Gets/sets the vertical offset of the adorner.
105 | ///
106 | public double OffsetTop
107 | {
108 | get { return this.offsetTop; }
109 | set
110 | {
111 | this.offsetTop = value;
112 | UpdateLocation();
113 | }
114 | }
115 |
116 | #endregion // OffsetTop
117 |
118 | #endregion // Public Interface
119 |
120 | #region Protected Overrides
121 |
122 | ///
123 | /// Override.
124 | ///
125 | ///
126 | ///
127 | protected override Size MeasureOverride( Size constraint )
128 | {
129 | this.child.Measure( constraint );
130 | return this.child.DesiredSize;
131 | }
132 |
133 | ///
134 | /// Override.
135 | ///
136 | ///
137 | ///
138 | protected override Size ArrangeOverride( Size finalSize )
139 | {
140 | this.child.Arrange( new Rect( finalSize ) );
141 | return finalSize;
142 | }
143 |
144 | ///
145 | /// Override.
146 | ///
147 | ///
148 | ///
149 | protected override Visual GetVisualChild( int index )
150 | {
151 | return this.child;
152 | }
153 |
154 | ///
155 | /// Override. Always returns 1.
156 | ///
157 | protected override int VisualChildrenCount
158 | {
159 | get { return 1; }
160 | }
161 |
162 | #endregion // Protected Overrides
163 |
164 | #region Private Helpers
165 |
166 | private void UpdateLocation()
167 | {
168 | AdornerLayer adornerLayer = this.Parent as AdornerLayer;
169 | if( adornerLayer != null )
170 | adornerLayer.Update( this.AdornedElement );
171 | }
172 |
173 | #endregion // Private Helpers
174 | }
175 | }
--------------------------------------------------------------------------------
/FMM2/ListView/MouseUtilities.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 | using System.Runtime.InteropServices;
5 | using System.Windows;
6 | using System.Windows.Media;
7 |
8 | namespace WPF.JoshSmith.Controls.Utilities
9 | {
10 | ///
11 | /// Provides access to the mouse location by calling unmanaged code.
12 | ///
13 | ///
14 | /// This class was written by Dan Crevier (Microsoft).
15 | /// http://blogs.msdn.com/llobo/archive/2006/09/06/Scrolling-Scrollviewer-on-Mouse-Drag-at-the-boundaries.aspx
16 | ///
17 | public class MouseUtilities
18 | {
19 | [StructLayout( LayoutKind.Sequential )]
20 | private struct Win32Point
21 | {
22 | public Int32 X;
23 | public Int32 Y;
24 | };
25 |
26 | [DllImport( "user32.dll" )]
27 | private static extern bool GetCursorPos( ref Win32Point pt );
28 |
29 | [DllImport( "user32.dll" )]
30 | private static extern bool ScreenToClient( IntPtr hwnd, ref Win32Point pt );
31 |
32 | ///
33 | /// Returns the mouse cursor location. This method is necessary during
34 | /// a drag-drop operation because the WPF mechanisms for retrieving the
35 | /// cursor coordinates are unreliable.
36 | ///
37 | /// The Visual to which the mouse coordinates will be relative.
38 | public static Point GetMousePosition( Visual relativeTo )
39 | {
40 | Win32Point mouse = new Win32Point();
41 | GetCursorPos( ref mouse );
42 |
43 | // Using PointFromScreen instead of Dan Crevier's code (commented out below)
44 | // is a bug fix created by William J. Roberts. Read his comments about the fix
45 | // here: http://www.codeproject.com/useritems/ListViewDragDropManager.asp?msg=1911611#xx1911611xx
46 | return relativeTo.PointFromScreen( new Point( (double)mouse.X, (double)mouse.Y ) );
47 |
48 | #region Commented Out
49 | //System.Windows.Interop.HwndSource presentationSource =
50 | // (System.Windows.Interop.HwndSource)PresentationSource.FromVisual( relativeTo );
51 | //ScreenToClient( presentationSource.Handle, ref mouse );
52 | //GeneralTransform transform = relativeTo.TransformToAncestor( presentationSource.RootVisual );
53 | //Point offset = transform.Transform( new Point( 0, 0 ) );
54 | //return new Point( mouse.X - offset.X, mouse.Y - offset.Y );
55 | #endregion // Commented Out
56 | }
57 | }
58 | }
--------------------------------------------------------------------------------
/FMM2/ListView/Task.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.ObjectModel;
3 |
4 | namespace ListViewDragDropManagerDemo
5 | {
6 | enum TaskDuration
7 | {
8 | Unknown,
9 | VeryShort,
10 | Short,
11 | Medium,
12 | Long,
13 | VeryLong
14 | }
15 |
16 | class Task
17 | {
18 | public static ObservableCollection CreateTasks()
19 | {
20 | ObservableCollection list = new ObservableCollection();
21 |
22 | list.Add( new Task( TaskDuration.VeryShort, "Take out trash", "The trash can is full again.", false ) );
23 | list.Add( new Task( TaskDuration.Short, "Clean the bathroom", "It's my turn to scrub the tub. :(", true ) );
24 | list.Add( new Task( TaskDuration.Medium, "Write CodeProject article", "Need to write a CP article about ListViewDragDropManager.", true ) );
25 | //list.Add( null ); // Test what happens when there is a null item in the ListView.
26 | list.Add( new Task( TaskDuration.VeryLong, "Learn 3D programming", "Learn how to create slick UIs using the WPF 3D APIs.", false ) );
27 | list.Add( new Task( TaskDuration.Unknown, "Get in touch with Tom", "It's been a while since I've spoken with him.", false ) );
28 |
29 | return list;
30 | }
31 |
32 | TaskDuration duration;
33 | string name;
34 | string description;
35 | bool finished;
36 |
37 | public Task( TaskDuration duration, string name, string description, bool finished )
38 | {
39 | this.duration = duration;
40 | this.name = name;
41 | this.description = description;
42 | this.finished = finished;
43 | }
44 |
45 | public bool Finished
46 | {
47 | get { return this.finished; }
48 | set { this.finished = value; }
49 | }
50 |
51 | public TaskDuration Duration
52 | {
53 | get { return this.duration; }
54 | }
55 |
56 | public string Name
57 | {
58 | get { return this.name; }
59 | }
60 |
61 | public string Description
62 | {
63 | get { return this.description; }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/FMM2/List_ContextMenu.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.ObjectModel;
4 | using System.Diagnostics;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows;
10 | using System.Windows.Controls;
11 |
12 | namespace FMM2
13 | {
14 | public partial class MainWindow : Window
15 | {
16 | private void itemLocationOpen_Click(object sender, EventArgs e)
17 | {
18 | //if (mainTabs.SelectedIndex == 0) //mods
19 | //{
20 | string loc = "";
21 | if (modsTabs.SelectedIndex == 0)
22 | {
23 | loc = Path.GetDirectoryName(((Mod)myModsList.SelectedItem).Location);
24 | }
25 | if (loc != "" && Directory.Exists(loc))
26 | {
27 | Process.Start(loc);
28 | }
29 | //}
30 | //else if (mainTabs.SelectedIndex == 1) //maps
31 | //{
32 | //}
33 | //else if (mainTabs.SelectedIndex == 2) //gametypes
34 | //{
35 | // //TODO
36 | //}
37 | //else if (mainTabs.SelectedIndex == 3) //medals
38 | //{
39 | // //TODO
40 | //}
41 | //else if (mainTabs.SelectedIndex == 4) //server browser
42 | //{
43 | //}
44 | }
45 |
46 | private void itemMark_Click(object sender, EventArgs e)
47 | {
48 | //if (mainTabs.SelectedIndex == 0) //mods
49 | //{
50 | if (modsTabs.SelectedIndex == 0)
51 | {
52 | ((Mod)myModsList.SelectedItem).IsChecked = !((Mod)myModsList.SelectedItem).IsChecked;
53 | }
54 | else if (modsTabs.SelectedIndex == 1)
55 | {
56 | ((Mod)downloadableModsList.SelectedItem).IsChecked = !((Mod)downloadableModsList.SelectedItem).IsChecked;
57 | }
58 | //}
59 | //else if (mainTabs.SelectedIndex == 1) //maps
60 | //{
61 | // if (mapsTabs.SelectedIndex == 0)
62 | // {
63 | // ((FMMFile)myMapsList.SelectedItem).IsChecked = !((FMMFile)myMapsList.SelectedItem).IsChecked;
64 | // }
65 | // else if (mapsTabs.SelectedIndex == 1)
66 | // {
67 | // ((FMMFile)downloadableMapsList.SelectedItem).IsChecked = !((FMMFile)downloadableMapsList.SelectedItem).IsChecked;
68 | // }
69 | //}
70 | //else if (mainTabs.SelectedIndex == 2) //gametypes
71 | //{
72 | // if (gametypesTabs.SelectedIndex == 0)
73 | // {
74 | // ((FMMFile)myGametypesList.SelectedItem).IsChecked = !((FMMFile)myGametypesList.SelectedItem).IsChecked;
75 | // }
76 | // else if (gametypesTabs.SelectedIndex == 1)
77 | // {
78 | // ((FMMFile)downloadableGametypesList.SelectedItem).IsChecked = !((FMMFile)downloadableGametypesList.SelectedItem).IsChecked;
79 | // }
80 | //}
81 | //else if (mainTabs.SelectedIndex == 3) //medals
82 | //{
83 | // //TODO
84 | //}
85 | //else if (mainTabs.SelectedIndex == 4) //server browser
86 | //{
87 | //}
88 | }
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/FMM2/List_Sort.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.ObjectModel;
4 | using System.Collections.Specialized;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Text;
8 | using System.Threading.Tasks;
9 | using System.Windows;
10 | using System.Windows.Controls;
11 | using System.Windows.Data;
12 | using System.Windows.Documents;
13 | using System.Windows.Input;
14 | using System.Windows.Media;
15 | using System.Windows.Media.Imaging;
16 | using System.Windows.Navigation;
17 | using IniParser;
18 | using IniParser.Model;
19 | using WPF.JoshSmith.ServiceProviders.UI;
20 | using System.ComponentModel;
21 | using System.Net;
22 | using System.Net.Http;
23 | using Newtonsoft.Json.Linq;
24 |
25 | namespace FMM2
26 | {
27 | public partial class MainWindow : Window
28 | {
29 | private void listViewHeaderClicked(ListView list, object colOC, RoutedEventArgs e) where T : CollectionItem
30 | {
31 | GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;
32 | ListSortDirection direction;
33 |
34 |
35 | if (headerClicked != null)
36 | {
37 | if (headerClicked.Role != GridViewColumnHeaderRole.Padding)
38 | {
39 | if (true)
40 | {
41 | if (headerClicked != _lastHeaderClicked)
42 | {
43 | direction = ListSortDirection.Ascending;
44 | }
45 | else
46 | {
47 | if (_lastDirection == ListSortDirection.Ascending)
48 | {
49 | direction = ListSortDirection.Descending;
50 | }
51 | else
52 | {
53 | direction = ListSortDirection.Ascending;
54 | }
55 | }
56 |
57 | string header = headerClicked.Column.Header as string;
58 |
59 | listViewSort(list, colOC, header, direction);
60 |
61 | _lastHeaderClicked = headerClicked;
62 | _lastDirection = direction;
63 | }
64 | }
65 | }
66 | }
67 |
68 | private bool returnTrue(object x)
69 | {
70 | return true;
71 | }
72 |
73 | private void listViewSort(ListView list, object colOC, string sortBy, ListSortDirection direction) where T : CollectionItem
74 | {
75 | if (sortBy != null)
76 | {
77 | ICollectionView dataView = CollectionViewSource.GetDefaultView(list.ItemsSource);
78 | Predicate