├── .github
└── FUNDING.yml
├── .gitignore
├── BindingListView
├── AggregateBindingListView.cs
├── BindingListView.cs
├── BindingListView.csproj
├── BindingListView.nuspec
├── CompositeItemFilter.cs
├── IItemFilter.cs
├── INotifyingEditableObject.cs
├── InvalidSourceListException.cs
├── MultiSourceIndexList.cs
├── ObjectView.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
└── ProvidedViewPropertyDescriptor.cs
├── CheckBoxComboBox
├── CheckBoxComboBox.Designer.cs
├── CheckBoxComboBox.cs
├── CheckBoxComboBox.csproj
├── GripBounds.cs
├── NativeMethods.cs
├── Popup.Designer.cs
├── Popup.cs
├── PopupComboBox.Designer.cs
├── PopupComboBox.cs
├── PopupComboBox.resx
├── Properties
│ └── AssemblyInfo.cs
└── Selection Wrappers
│ ├── ListSelectionWrapper.cs
│ └── ObjectSelectionWrapper.cs
├── DoomLauncher.sln
├── DoomLauncher
├── Adapters
│ ├── DataAccess.cs
│ ├── DbDataSourceAdapter.cs
│ ├── DirectoryDataSourceAdapter.cs
│ ├── GameLauncher.cs
│ ├── IdGamesDataAdapater.cs
│ ├── Launch
│ │ ├── ExtraParametersLaunchFeature.cs
│ │ ├── GameFilesLaunchFeature.cs
│ │ ├── ILaunchFeature.cs
│ │ ├── IWadLaunchFeature.cs
│ │ ├── LaunchParameters.cs
│ │ ├── LaunchResult.cs
│ │ ├── LoadSaveLaunchFeature.cs
│ │ ├── MapSkillLaunchFeature.cs
│ │ ├── PlayDemoLaunchFeature.cs
│ │ ├── RecordLaunchFeature.cs
│ │ ├── SourcePortExtraParametersLaunchFeature.cs
│ │ ├── StatisticsReaderLaunchFeature.cs
│ │ └── UtilityFilesLaunchFeature.cs
│ ├── MSSQLDataAdapter.cs
│ ├── PlaySession.cs
│ ├── SqliteDatabaseAdapter.cs
│ └── WadArchiveDataAdapter.cs
├── App.config
├── Archive
│ ├── ArchiveReader.cs
│ ├── Directory
│ │ ├── DirectoryArchiveEntry.cs
│ │ └── DirectoryArchiveReader.cs
│ ├── EmptyArchiveReader.cs
│ ├── FileArchiveReader.cs
│ ├── IArchiveEntry.cs
│ ├── IArchiveReader.cs
│ ├── Rar
│ │ ├── RarArchiveEntry.cs
│ │ └── RarArchiveReader.cs
│ ├── RecursiveArchiveReader.cs
│ ├── SevenZip
│ │ ├── SevenZipArchiveEntry.cs
│ │ └── SevenZipArchiveReader.cs
│ ├── Wad
│ │ ├── WadArchiveReader.cs
│ │ └── WadEntry.cs
│ └── Zip
│ │ ├── ZipArchiveReader.cs
│ │ └── ZipArchiveReaderEntry.cs
├── Config
│ ├── AppConfiguration.cs
│ ├── AppVersion.cs
│ ├── ColorTheme.cs
│ ├── ColorThemeType.cs
│ ├── ColumnConfig.cs
│ ├── ConfigType.cs
│ ├── DataCache.cs
│ ├── FileManagement.cs
│ ├── GameFileListEventArgs.cs
│ ├── IDirectoriesConfiguration.cs
│ ├── Icons.cs
│ ├── LauncherPath.cs
│ ├── ScreenFilter.cs
│ └── TagMapLookup.cs
├── Controls
│ ├── BasicFileView.cs
│ ├── CCheckBox.cs
│ ├── CComboBox.cs
│ ├── CDataGridView.cs
│ ├── CProgressBar.cs
│ ├── CRichTextBox.Designer.cs
│ ├── CRichTextBox.cs
│ ├── CTabControl.cs
│ ├── CheckBoxList.Designer.cs
│ ├── CheckBoxList.cs
│ ├── CheckBoxList.resx
│ ├── ColumnField.cs
│ ├── DownloadView.Designer.cs
│ ├── DownloadView.cs
│ ├── DownloadView.resx
│ ├── DownloadViewItem.Designer.cs
│ ├── DownloadViewItem.cs
│ ├── DownloadViewItem.resx
│ ├── FileType.cs
│ ├── FilesCtrl.Designer.cs
│ ├── FilesCtrl.cs
│ ├── FilesCtrl.resx
│ ├── FlowLayoutPanelDB.Designer.cs
│ ├── FlowLayoutPanelDB.cs
│ ├── FormButton.cs
│ ├── GameFileAssociationView.Designer.cs
│ ├── GameFileAssociationView.cs
│ ├── GameFileAssociationView.resx
│ ├── GameFileEdit.Designer.cs
│ ├── GameFileEdit.cs
│ ├── GameFileEdit.resx
│ ├── GameFileSummary.Designer.cs
│ ├── GameFileSummary.cs
│ ├── GameFileSummary.resx
│ ├── GameFileTile.Designer.cs
│ ├── GameFileTile.cs
│ ├── GameFileTile.resx
│ ├── GameFileTileBase.cs
│ ├── GameFileTileExpanded.Designer.cs
│ ├── GameFileTileExpanded.cs
│ ├── GameFileTileExpanded.resx
│ ├── GameFileTileViewControl.Designer.cs
│ ├── GameFileTileViewControl.cs
│ ├── GameFileTileViewControl.resx
│ ├── GameFileViewControl.Designer.cs
│ ├── GameFileViewControl.cs
│ ├── GameFileViewControl.resx
│ ├── GenericFileView.Designer.cs
│ ├── GenericFileView.cs
│ ├── GenericFileView.resx
│ ├── GlowButton.cs
│ ├── GrowLabel.Designer.cs
│ ├── GrowLabel.cs
│ ├── PagingControl.Designer.cs
│ ├── PagingControl.cs
│ ├── PagingControl.resx
│ ├── RatingControl.Designer.cs
│ ├── RatingControl.cs
│ ├── RatingControl.resx
│ ├── ScreenshotView.Designer.cs
│ ├── ScreenshotView.cs
│ ├── ScreenshotView.resx
│ ├── SearchControl.Designer.cs
│ ├── SearchControl.cs
│ ├── SearchControl.resx
│ ├── SlideShowPictureBox.Designer.cs
│ ├── SlideShowPictureBox.cs
│ ├── SlideShowPictureBox.resx
│ ├── SourcePortEdit.Designer.cs
│ ├── SourcePortEdit.cs
│ ├── SourcePortEdit.resx
│ ├── StatBar.cs
│ ├── StatisticsView.Designer.cs
│ ├── StatisticsView.cs
│ ├── StatisticsView.resx
│ ├── StatsControl.Designer.cs
│ ├── StatsControl.cs
│ ├── StatsControl.resx
│ ├── TableLayoutPanelDB.Designer.cs
│ ├── TableLayoutPanelDB.cs
│ ├── TagControl.Designer.cs
│ ├── TagControl.cs
│ ├── TagControl.resx
│ ├── TagEdit.Designer.cs
│ ├── TagEdit.cs
│ ├── TagEdit.resx
│ ├── TagSelectControl.Designer.cs
│ ├── TagSelectControl.cs
│ ├── TagSelectControl.resx
│ ├── TitleBarControl.Designer.cs
│ ├── TitleBarControl.cs
│ ├── TitleBarControl.resx
│ ├── UpdateControl.Designer.cs
│ ├── UpdateControl.cs
│ └── UpdateControl.resx
├── DataSources
│ ├── CleanupFile.cs
│ ├── ConfigurationData.cs
│ ├── CustomParam.cs
│ ├── FileData.cs
│ ├── GameFile.cs
│ ├── GameProfile.cs
│ ├── ITagDataSource.cs
│ ├── IWadData.cs
│ ├── IdGamesGameFile.cs
│ ├── NewFileData.cs
│ ├── PreviewImage.cs
│ ├── SettingsDataSource.cs
│ ├── SourcePortData.cs
│ ├── SourcePortLaunchType.cs
│ ├── StaticTagData.cs
│ ├── StatsData.cs
│ ├── TagData.cs
│ ├── TagMapping.cs
│ ├── WadArchiveFile.cs
│ └── WadArchiveGameFile.cs
├── Demo
│ ├── CldDemoParser.cs
│ ├── DemoUtil.cs
│ └── IDemoParser.cs
├── DoomLauncher.VisualElementsManifest.xml
├── DoomLauncher.csproj
├── DoomLauncher.ico
├── DoomLauncher.sqlite
├── DoomLauncherSmall.ico
├── Dpi
│ └── DpiScale.cs
├── Forms
│ ├── AboutBox.Designer.cs
│ ├── AboutBox.cs
│ ├── AboutBox.resx
│ ├── CumulativeStats.Designer.cs
│ ├── CumulativeStats.cs
│ ├── CumulativeStats.resx
│ ├── DirectoriesForm.Designer.cs
│ ├── DirectoriesForm.cs
│ ├── DirectoriesForm.resx
│ ├── FileDetailsEditForm.Designer.cs
│ ├── FileDetailsEditForm.cs
│ ├── FileDetailsEditForm.resx
│ ├── FileManagementSelect.Designer.cs
│ ├── FileManagementSelect.cs
│ ├── FileManagementSelect.resx
│ ├── FileSelectForm.Designer.cs
│ ├── FileSelectForm.cs
│ ├── FileSelectForm.resx
│ ├── FilterForm.Designer.cs
│ ├── FilterForm.cs
│ ├── FilterForm.resx
│ ├── FilterSettingsForm.Designer.cs
│ ├── FilterSettingsForm.cs
│ ├── FilterSettingsForm.resx
│ ├── GameFileEditForm.Designer.cs
│ ├── GameFileEditForm.cs
│ ├── GameFileEditForm.resx
│ ├── MainForm.Designer.cs
│ ├── MainForm.cs
│ ├── MainForm.resx
│ ├── MainForm_Config.cs
│ ├── MainForm_Init.cs
│ ├── MainForm_Meta.cs
│ ├── MainForm_Play.cs
│ ├── MainForm_Sync.cs
│ ├── MessageCheckBox.Designer.cs
│ ├── MessageCheckBox.cs
│ ├── MessageCheckBox.resx
│ ├── MetaDataForm.Designer.cs
│ ├── MetaDataForm.cs
│ ├── MetaDataForm.resx
│ ├── PlayForm.Designer.cs
│ ├── PlayForm.cs
│ ├── PlayForm.resx
│ ├── PlayRandomForm.Designer.cs
│ ├── PlayRandomForm.cs
│ ├── PlayRandomForm.resx
│ ├── ProgressBarForm.Designer.cs
│ ├── ProgressBarForm.cs
│ ├── ProgressBarForm.resx
│ ├── SaveInfo.Designer.cs
│ ├── SaveInfo.cs
│ ├── SaveInfo.resx
│ ├── ScreenshotEditForm.Designer.cs
│ ├── ScreenshotEditForm.cs
│ ├── ScreenshotEditForm.resx
│ ├── ScreenshotViewerForm.Designer.cs
│ ├── ScreenshotViewerForm.cs
│ ├── ScreenshotViewerForm.resx
│ ├── SettingsForm.Designer.cs
│ ├── SettingsForm.cs
│ ├── SettingsForm.resx
│ ├── SimpleFileSelectForm.Designer.cs
│ ├── SimpleFileSelectForm.cs
│ ├── SimpleFileSelectForm.resx
│ ├── SourcePortEditForm.Designer.cs
│ ├── SourcePortEditForm.cs
│ ├── SourcePortEditForm.resx
│ ├── SourcePortViewForm.Designer.cs
│ ├── SourcePortViewForm.cs
│ ├── SourcePortViewForm.resx
│ ├── SpecificFilesForm.Designer.cs
│ ├── SpecificFilesForm.cs
│ ├── SpecificFilesForm.resx
│ ├── SplashScreen.Designer.cs
│ ├── SplashScreen.cs
│ ├── SplashScreen.resx
│ ├── StatsInfo.Designer.cs
│ ├── StatsInfo.cs
│ ├── StatsInfo.resx
│ ├── SyncStatusForm.Designer.cs
│ ├── SyncStatusForm.cs
│ ├── SyncStatusForm.resx
│ ├── TagEditForm.Designer.cs
│ ├── TagEditForm.cs
│ ├── TagEditForm.resx
│ ├── TagForm.Designer.cs
│ ├── TagForm.cs
│ ├── TagForm.resx
│ ├── TagSelectForm.Designer.cs
│ ├── TagSelectForm.cs
│ ├── TagSelectForm.resx
│ ├── TextBoxForm.Designer.cs
│ ├── TextBoxForm.cs
│ ├── TextBoxForm.resx
│ ├── TxtGenerator.Designer.cs
│ ├── TxtGenerator.cs
│ ├── TxtGenerator.resx
│ ├── Welcome.Designer.cs
│ ├── Welcome.cs
│ └── Welcome.resx
├── GameFileView
│ ├── GameFileViewFactory.cs
│ └── GameFileViewType.cs
├── GameStores
│ ├── AutomaticGameStoreCheck.cs
│ ├── GameStoreFiles.cs
│ ├── StoreGame.cs
│ └── StoreGameLoader.cs
├── Handlers
│ ├── AddFileType.cs
│ ├── ArchiveUtil.cs
│ ├── AutoCompleteCombo.cs
│ ├── DemoHandler.cs
│ ├── DownloadHandler.cs
│ ├── FIleAddResults.cs
│ ├── FileLoadHandler.cs
│ ├── FileLoadHandlerLegacy.cs
│ ├── FileMapComparer.cs
│ ├── GameFileTileManager.cs
│ ├── GameProfileUtil.cs
│ ├── ImageExtensions.cs
│ ├── InvalidFile.cs
│ ├── LaunchData.cs
│ ├── MenuConstants.cs
│ ├── NativeMethods.cs
│ ├── NewFileDetector.cs
│ ├── PathExtensions.cs
│ ├── SaveGameHandler.cs
│ ├── ScreenshotHandler.cs
│ ├── Sync
│ │ ├── Doom64GameFileFragment.cs
│ │ ├── IGameFileFragment.cs
│ │ ├── IdGamesTextFileParser.cs
│ │ ├── IdGamesTextInfo.cs
│ │ ├── MapInfoUtil.cs
│ │ ├── MapStringGameFileFragment.cs
│ │ ├── SyncResult.cs
│ │ ├── TextFileGameFileFragment.cs
│ │ ├── TitlePicGameFileFragment.cs
│ │ └── TitlePicUtil.cs
│ ├── SyncFileData.cs
│ ├── SyncFileOption.cs
│ ├── SyncLibraryHandler.cs
│ ├── TabHandler.cs
│ ├── TabKeys.cs
│ ├── ThumbnailManager.cs
│ ├── ToolTipDisplayHandler.cs
│ ├── ToolTipGroup.cs
│ ├── ToolTipHandler.cs
│ ├── Util.cs
│ ├── UtilityHandler.cs
│ ├── VersionHandler.cs
│ └── VersionUpdateResults.cs
├── Help.docx
├── Help.pdf
├── Help.zip
├── IWad
│ └── IWadInfo.cs
├── Interfaces
│ ├── IConfigurationData.cs
│ ├── IConfigurationDataSourceAdapter.cs
│ ├── ICustomParam.cs
│ ├── IDataSourceAdapter.cs
│ ├── IDatabaseAdapter.cs
│ ├── IFileAssociationView.cs
│ ├── IFileData.cs
│ ├── IGameFile.cs
│ ├── IGameFileColumnView.cs
│ ├── IGameFileDataSourceAdapter.cs
│ ├── IGameFileDownloadable.cs
│ ├── IGameFileSortableView.cs
│ ├── IGameFileTile.cs
│ ├── IGameFileView.cs
│ ├── IGameProfile.cs
│ ├── IIWadData.cs
│ ├── IIWadDataSourceAdapter.cs
│ ├── INewFileDetector.cs
│ ├── ISettingsDataSource.cs
│ ├── ISourcePortData.cs
│ ├── IStatsData.cs
│ ├── IStatsDataSourceAdapter.cs
│ ├── ITabView.cs
│ ├── ITagData.cs
│ ├── ITagMapLookup.cs
│ └── ITagMapping.cs
├── LaunchArgs.cs
├── Program.Init.cs
├── Program.cs
├── ProgressBarType.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── RecentFileType.cs
├── Resources
│ ├── BackgroundImage.png
│ ├── Bars.png
│ ├── Delete.png
│ ├── DoomLauncherTile.png
│ ├── DownArrow.bmp
│ ├── DownArrow.png
│ ├── Edit.png
│ ├── Export.png
│ ├── ExportAll.png
│ ├── File.png
│ ├── FolderOpen.png
│ ├── PLAYPAL.LMP
│ ├── PMAPA0.png
│ ├── POSSL0.png
│ ├── Pin.png
│ ├── Play.png
│ ├── SOULB0.png
│ ├── Save.png
│ ├── Search.png
│ ├── StepBack.png
│ ├── Tags.png
│ ├── UpArrow.png
│ ├── Video.png
│ ├── arrow-down-solid.png
│ ├── bon2a_.png
│ ├── bon2a_extra.png
│ ├── bon2d.png
│ ├── bona.bmp
│ └── th.png
├── SaveGame
│ ├── DsgSaveGameReader.cs
│ ├── HelionSaveGameReader.cs
│ ├── ISaveGameReader.cs
│ └── ZDoomSaveGameReader.cs
├── Search
│ ├── GameFileFieldType.cs
│ ├── GameFileGetOptions.cs
│ ├── GameFileSearchField.cs
│ ├── GameFileSearchOp.cs
│ ├── IGameFileGetOptions.cs
│ └── OrderType.cs
├── SourcePort
│ ├── DoomsdaySourcePortFlavor.cs
│ ├── GenericSourcePortFlavor.cs
│ ├── HelionSourcePortFlavor.cs
│ ├── ISourcePortFlavor.cs
│ ├── LevelstatSourcePortFlavor.cs
│ ├── SpData.cs
│ ├── StatdumpSourcePortFlavor.cs
│ └── ZDoomSourcePortFlavor.cs
├── Statistics
│ ├── IStatisticsReader.cs
│ ├── LevelstatReader.cs
│ ├── MultiLineStatReader.cs
│ ├── NewStatisticsEventArgs.cs
│ ├── StatFileScanner.cs
│ ├── StatdumpReader.cs
│ └── ZDoomStatsReader.cs
├── Stylize
│ ├── CToolStripRenderer.cs
│ ├── DarkTheme.cs
│ ├── DefaultTheme.cs
│ ├── IThemeColors.cs
│ ├── ImmersiveDarkMode.cs
│ ├── StyledMessageBox.cs
│ └── Stylizer.cs
├── TabViews
│ ├── BasicTabViewCtrl.Designer.cs
│ ├── BasicTabViewCtrl.cs
│ ├── BasicTabViewCtrl.resx
│ ├── IWadTabViewCtrl.Designer.cs
│ ├── IWadTabViewCtrl.cs
│ ├── IdGamesTabViewCtrl.Designer.cs
│ ├── IdGamesTabViewCtrl.cs
│ ├── LocalTabViewCtrl.cs
│ ├── OptionsTabViewCtrl.Designer.cs
│ ├── OptionsTabViewCtrl.cs
│ ├── TagTabView.Designer.cs
│ ├── TagTabView.cs
│ └── UntaggedTabView.cs
├── TextFileParsers
│ └── ZdlParser.cs
├── TileImages
│ ├── DoomLauncherTile.png
│ ├── DoomLauncherTileSmall.png
│ ├── chexquest.png
│ ├── chexquest3.png
│ ├── doom.png
│ ├── doom2.png
│ ├── doom64.png
│ ├── hacx.png
│ ├── heretic.png
│ ├── hexen.png
│ ├── plutonia.png
│ ├── strife.png
│ └── tnt.png
├── Update
│ ├── ApplicationUpdate.cs
│ ├── ApplicationUpdateInfo.cs
│ └── ApplicationUpdater.cs
├── WindowsVersion
│ └── WindowsVersion.cs
├── app.manifest
└── packages.config
├── DoomLauncherRelease
├── App.config
├── DoomLauncherRelease.csproj
├── Program.cs
└── Properties
│ └── AssemblyInfo.cs
├── LICENSE
├── Newtonsoft.Json.dll
├── Newtonsoft.Json.xml
├── README.adoc
├── Setup
├── EnableLaunchApplication.js
└── Setup.vdproj
├── UnitTest
├── DoomLauncher.sqlite
├── Properties
│ └── AssemblyInfo.cs
├── Resources
│ ├── Directory.zip
│ ├── TestSteamInstall
│ │ └── config
│ │ │ └── libraryfolders.vdf
│ ├── TestSteamLibrary1
│ │ └── steamapps
│ │ │ ├── appmanifest_2280.acf
│ │ │ ├── appmanifest_2390.acf
│ │ │ └── common
│ │ │ ├── TestDoom
│ │ │ ├── base
│ │ │ │ └── doom.wad
│ │ │ └── rerelease
│ │ │ │ ├── doom2.wad
│ │ │ │ ├── id1.wad
│ │ │ │ ├── masterlevels.wad
│ │ │ │ ├── nerve.wad
│ │ │ │ ├── plutonia.wad
│ │ │ │ ├── sigil.wad
│ │ │ │ └── tnt.wad
│ │ │ └── TestHeretic
│ │ │ └── base
│ │ │ └── heretic.wad
│ ├── TestSteamLibrary2
│ │ └── steamapps
│ │ │ ├── appmanifest_2360.acf
│ │ │ ├── appmanifest_2390.acf
│ │ │ └── common
│ │ │ ├── TestHeretic
│ │ │ └── base
│ │ │ │ └── heretic.wad
│ │ │ └── TestHexen
│ │ │ └── base
│ │ │ └── hexen.wad
│ ├── archive.7z
│ ├── archive.rar
│ ├── archive.zip
│ ├── chocosave1.dsg
│ ├── invalid1.wad
│ ├── invalid2.wad
│ ├── joymaps1.zip
│ ├── mapinfo.zip
│ ├── mapinfo_doom64.zip
│ ├── pathtest.zip
│ ├── prboomsave1.dsg
│ ├── pyrrhic.zip
│ ├── pyrrhicmaps.zip
│ ├── simple.wad
│ ├── testpk3.pk3
│ ├── uroburos.zip
│ ├── zandemo.cld
│ ├── zdoomsave_v1.zds
│ ├── zdoomsave_v2.zds
│ ├── zdoomsave_v3.zds
│ ├── zdoomsave_v4.zds
│ └── zmapinfo.zip
├── TestInit.cs
├── Tests
│ ├── Helpers
│ │ ├── DirectoriesConfiguration.cs
│ │ ├── Tree.cs
│ │ ├── TreeEntry.cs
│ │ └── TreeReader.cs
│ ├── TestArchives.cs
│ ├── TestAutomaticSteamCheck.cs
│ ├── TestCldDemoParser.cs
│ ├── TestCnDoomStats.cs
│ ├── TestDirectoryAdapter.cs
│ ├── TestDirectoryArchive.cs
│ ├── TestDoom64GameFileFragment.cs
│ ├── TestDsgSave.cs
│ ├── TestFile.cs
│ ├── TestFileDetector.cs
│ ├── TestGameFile.cs
│ ├── TestGameFileTags.cs
│ ├── TestGameLauncher.cs
│ ├── TestGameProfile.cs
│ ├── TestGameProfileUtil.cs
│ ├── TestGameStoreFiles.cs
│ ├── TestIWad.cs
│ ├── TestIdGamesFileParser.cs
│ ├── TestIdGamesTextInfo.cs
│ ├── TestLaunchParameters.cs
│ ├── TestLauncherPath.cs
│ ├── TestLevelstat.cs
│ ├── TestLoadFiles.cs
│ ├── TestMapLumps.cs
│ ├── TestMapStringGameFileFragment.cs
│ ├── TestRecursiveArchiveReader.cs
│ ├── TestSourcePort.cs
│ ├── TestSpecificFiles.cs
│ ├── TestStatdump.cs
│ ├── TestStats.cs
│ ├── TestSteamLoader.cs
│ ├── TestSyncLibraryHandler.cs
│ ├── TestUpdateInfo.cs
│ ├── TestUtil.cs
│ ├── TestWadReader.cs
│ ├── TestZdlParser.cs
│ ├── TestZdoomSave.cs
│ └── TestZdoomStats.cs
├── UnitTest.csproj
├── app.config
└── packages.config
├── WadReader
├── DoomImage
│ ├── DoomImage.cs
│ ├── Palette.cs
│ └── PaletteReaders.cs
├── FileLump.cs
├── Properties
│ └── AssemblyInfo.cs
├── Util.cs
├── WadFileReader.cs
├── WadHeader.cs
├── WadReader.csproj
├── WadType.cs
└── packages.config
├── WpfControlLibrary
├── AssemblyInfo.cs
├── WpfComboBox.xaml
├── WpfComboBox.xaml.cs
└── WpfControlLibrary.csproj
└── appveyor.yml
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | otechie: # Replace with a single Otechie username
12 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
13 | custom: https://paypal.me/nstlaurent22
14 |
--------------------------------------------------------------------------------
/BindingListView/BindingListView.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | $id$
5 | $version$
6 | $title$
7 | $author$
8 | https://github.com/waynebloss/BindingListView/blob/master/license.txt
9 | https://github.com/waynebloss/BindingListView
10 | false
11 | $description$
12 | The BindingListView .NET library provides a type-safe, sortable, filterable, data-bindable view of one or more lists of objects. It is the business objects equivalent of using a DataView on a DataTable in ADO.NET. If you have a list of objects to display on a Windows Forms UI (e.g. in a DataGridView) and want to allow your user to sort and filter, then this is the library to use!
13 | Initial
14 | Copyright 2014
15 | .net IBindingListView winforms
16 |
17 |
--------------------------------------------------------------------------------
/BindingListView/CompositeItemFilter.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace Equin.ApplicationFramework
5 | {
6 | public class CompositeItemFilter : IItemFilter
7 | {
8 | private List> _filters;
9 |
10 | public CompositeItemFilter()
11 | {
12 | _filters = new List>();
13 | }
14 |
15 | public void AddFilter(IItemFilter filter)
16 | {
17 | _filters.Add(filter);
18 | }
19 |
20 | public void RemoveFilter(IItemFilter filter)
21 | {
22 | _filters.Remove(filter);
23 | }
24 |
25 | public bool Include(T item)
26 | {
27 | foreach (IItemFilter filter in _filters)
28 | {
29 | if (!filter.Include(item))
30 | {
31 | return false;
32 | }
33 | }
34 | return true;
35 | }
36 |
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/BindingListView/INotifyingEditableObject.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.ComponentModel;
3 |
4 | namespace Equin.ApplicationFramework
5 | {
6 | ///
7 | /// Extends by providing events to raise during edit state changes.
8 | ///
9 | internal interface INotifyingEditableObject : IEditableObject
10 | {
11 | ///
12 | /// An edit has started on the object.
13 | ///
14 | ///
15 | /// This event should be raised from BeginEdit().
16 | ///
17 | event EventHandler EditBegun;
18 | ///
19 | /// The editing of the object was cancelled.
20 | ///
21 | ///
22 | /// This event should be raised from CancelEdit().
23 | ///
24 | event EventHandler EditCancelled;
25 | ///
26 | /// The editing of the object was ended.
27 | ///
28 | ///
29 | /// This event should be raised from EndEdit().
30 | ///
31 | event EventHandler EditEnded;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/BindingListView/InvalidSourceListException.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace Equin.ApplicationFramework
6 | {
7 | [Serializable]
8 | public class InvalidSourceListException : Exception
9 | {
10 | public InvalidSourceListException()
11 | : base(Properties.Resources.InvalidSourceList)
12 | {
13 |
14 | }
15 |
16 | public InvalidSourceListException(string message)
17 | : base(message)
18 | {
19 |
20 | }
21 |
22 | public InvalidSourceListException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
23 | : base(info, context)
24 | {
25 |
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/BindingListView/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nstlaurent/DoomLauncher/1ef5a24c7428fc610aa57fa98afd5526594d4c7b/BindingListView/Properties/AssemblyInfo.cs
--------------------------------------------------------------------------------
/BindingListView/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Equin.ApplicationFramework.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.0.3.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/BindingListView/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CheckBoxComboBox/CheckBoxComboBox.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PresentationControls
2 | {
3 | partial class CheckBoxComboBox
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | [System.CodeDom.Compiler.GeneratedCode("Winform Designer", "VS2015 SP1")]
30 | private void InitializeComponent()
31 | {
32 | components = new System.ComponentModel.Container();
33 | }
34 |
35 | #endregion
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/CheckBoxComboBox/Popup.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PresentationControls
2 | {
3 | partial class Popup
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing)
17 | {
18 | if (components != null)
19 | {
20 | components.Dispose();
21 | }
22 | if (content != null)
23 | {
24 | System.Windows.Forms.Control _content = content;
25 | content = null;
26 | _content.Dispose();
27 | }
28 | }
29 | base.Dispose(disposing);
30 | }
31 |
32 | #region Component Designer generated code
33 |
34 | ///
35 | /// Required method for Designer support - do not modify
36 | /// the contents of this method with the code editor.
37 | ///
38 | [System.CodeDom.Compiler.GeneratedCode("Winform Designer", "VS2015 SP1")]
39 | private void InitializeComponent()
40 | {
41 | components = new System.ComponentModel.Container();
42 | }
43 |
44 | #endregion
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/CheckBoxComboBox/PopupComboBox.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace PresentationControls
2 | {
3 | partial class PopupComboBox
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing)
17 | {
18 | if (components != null)
19 | {
20 | components.Dispose();
21 | }
22 | if (dropDown != null)
23 | {
24 | dropDown.Dispose();
25 | }
26 | }
27 | base.Dispose(disposing);
28 | }
29 |
30 | #region Component Designer generated code
31 |
32 | ///
33 | /// Required method for Designer support - do not modify
34 | /// the contents of this method with the code editor.
35 | ///
36 | [System.CodeDom.Compiler.GeneratedCode("Winform Designer", "VS2015 SP1")]
37 | private void InitializeComponent()
38 | {
39 | this.SuspendLayout();
40 | //
41 | // PopupComboBox
42 | //
43 | this.ResumeLayout(false);
44 |
45 | }
46 |
47 | #endregion
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/CheckBoxComboBox/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.InteropServices;
3 |
4 | // General Information about an assembly is controlled through the following
5 | // set of attributes. Change these attribute values to modify the information
6 | // associated with an assembly.
7 | [assembly: AssemblyTitle("CheckBoxComboBox")]
8 | [assembly: AssemblyDescription("")]
9 | [assembly: AssemblyConfiguration("")]
10 | [assembly: AssemblyCompany("IT")]
11 | [assembly: AssemblyProduct("CheckBoxComboBox")]
12 | [assembly: AssemblyCopyright("Copyright © IT 2007")]
13 | [assembly: AssemblyTrademark("")]
14 | [assembly: AssemblyCulture("")]
15 |
16 | // Setting ComVisible to false makes the types in this assembly not visible
17 | // to COM components. If you need to access a type in this assembly from
18 | // COM, set the ComVisible attribute to true on that type.
19 | [assembly: ComVisible(false)]
20 |
21 | // The following GUID is for the ID of the typelib if this project is exposed to COM
22 | [assembly: Guid("0b11e2be-4211-4d2a-9102-6847a56d6fd8")]
23 |
24 | // Version information for an assembly consists of the following four values:
25 | //
26 | // Major Version
27 | // Minor Version
28 | // Build Number
29 | // Revision
30 | //
31 | // You can specify all the values or you can default the Build and Revision Numbers
32 | // by using the '*' as shown below:
33 | // [assembly: AssemblyVersion("1.0.*")]
34 | [assembly: AssemblyVersion("1.0.0.0")]
35 | [assembly: AssemblyFileVersion("1.0.0.0")]
36 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/ExtraParametersLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 |
4 | namespace DoomLauncher.Adapters.Launch
5 | {
6 | public class ExtraParametersLaunchFeature : ILaunchFeature
7 | {
8 | private readonly string _extraParameters; // Never null
9 | private readonly bool _extraParametersOnly;
10 |
11 | public ExtraParametersLaunchFeature(string extraParameters, bool extraParametersOnly)
12 | {
13 | _extraParameters = extraParameters ?? "";
14 | _extraParametersOnly = extraParametersOnly;
15 | }
16 |
17 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
18 | {
19 | if (_extraParametersOnly)
20 | return LaunchParameters.ExclusiveParam(_extraParameters);
21 | else
22 | return LaunchParameters.Param(_extraParameters);
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/ILaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 |
4 | namespace DoomLauncher.Adapters.Launch
5 | {
6 | public interface ILaunchFeature
7 | {
8 | LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories);
9 | }
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/LaunchResult.cs:
--------------------------------------------------------------------------------
1 |
2 | using static DoomLauncher.GameLauncher;
3 |
4 | namespace DoomLauncher.Adapters.Launch
5 | {
6 | public class LaunchResult
7 | {
8 | public GameLaunchInfo GameLaunchInfo { get; }
9 |
10 | public string ErrorMessage { get; }
11 |
12 | public bool Failed
13 | {
14 | get => !string.IsNullOrEmpty(ErrorMessage);
15 | }
16 |
17 | private LaunchResult(GameLaunchInfo gameLaunchInfo, string errorMessage)
18 | {
19 | GameLaunchInfo = gameLaunchInfo;
20 | ErrorMessage = errorMessage;
21 | }
22 |
23 | public static LaunchResult Success(GameLaunchInfo gameLaunchInfo) =>
24 | new LaunchResult(gameLaunchInfo, null);
25 |
26 | public static LaunchResult Failure(string errorMessage) =>
27 | new LaunchResult(null, errorMessage);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/LoadSaveLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 | using DoomLauncher.SourcePort;
4 |
5 | namespace DoomLauncher.Adapters.Launch
6 | {
7 | public class LoadSaveLaunchFeature : ILaunchFeature
8 | {
9 | private readonly string _loadSaveFile;
10 |
11 | public LoadSaveLaunchFeature(string loadSaveFile)
12 | {
13 | _loadSaveFile = loadSaveFile;
14 | }
15 |
16 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
17 | {
18 | if (!string.IsNullOrEmpty(_loadSaveFile) && sourcePort.GetFlavor().LoadSaveGameSupported())
19 | {
20 | var paramString = sourcePort.GetFlavor().LoadSaveParameter(new SpData(_loadSaveFile));
21 | return LaunchParameters.Param(paramString);
22 | }
23 | else
24 | return LaunchParameters.EMPTY;
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/MapSkillLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 | using DoomLauncher.SourcePort;
4 | using System.Text;
5 |
6 | namespace DoomLauncher.Adapters.Launch
7 | {
8 | public class MapSkillLaunchFeature : ILaunchFeature
9 | {
10 |
11 | private readonly string _map;
12 | private readonly string _skill;
13 |
14 | public MapSkillLaunchFeature(string map, string skill)
15 | {
16 | _map = map;
17 | _skill = skill;
18 | }
19 |
20 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
21 | {
22 | LaunchParameters result = LaunchParameters.EMPTY;
23 |
24 | if (_map != null)
25 | {
26 | var warpParam = LaunchParameters.Param(sourcePort.GetFlavor().WarpParameter(new SpData(_map)));
27 | result = warpParam;
28 |
29 | if (_skill != null)
30 | {
31 | var skillParam = LaunchParameters.Param(sourcePort.GetFlavor().SkillParameter(new SpData(_skill)));
32 | result = warpParam.Combine(skillParam);
33 | }
34 | }
35 |
36 | return result;
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/PlayDemoLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 | using DoomLauncher.SourcePort;
4 | using System;
5 | using System.IO;
6 |
7 | namespace DoomLauncher.Adapters.Launch
8 | {
9 | public class PlayDemoLaunchFeature : ILaunchFeature
10 | {
11 | private readonly string _playDemoFile;
12 |
13 | public PlayDemoLaunchFeature(string playDemoFile)
14 | {
15 | _playDemoFile = playDemoFile;
16 | }
17 |
18 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
19 | {
20 | FileInfo fi = new FileInfo(_playDemoFile);
21 |
22 | if (!fi.Exists)
23 | {
24 | return LaunchParameters.Failure($"Failed to find demo file {_playDemoFile}");
25 | }
26 | else
27 | {
28 | var paramString = sourcePort.GetFlavor().PlayDemoParameter(new SpData(_playDemoFile));
29 | return LaunchParameters.Param(paramString);
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/RecordLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 | using DoomLauncher.SourcePort;
4 | using System;
5 | using System.IO;
6 |
7 | namespace DoomLauncher.Adapters.Launch
8 | {
9 | public class RecordLaunchFeature : ILaunchFeature
10 | {
11 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
12 | {
13 | var recordedFileName = Path.Combine(directories.TempDirectory.GetFullPath(), Guid.NewGuid().ToString());
14 | var paramString = sourcePort.GetFlavor().RecordParameter(new SpData(recordedFileName));
15 |
16 | return LaunchParameters.Param(paramString).WithRecordedFileName(recordedFileName);
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/SourcePortExtraParametersLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 |
4 | namespace DoomLauncher.Adapters.Launch
5 | {
6 | public class SourcePortExtraParametersLaunchFeature : ILaunchFeature
7 | {
8 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
9 | {
10 | return LaunchParameters.Param(sourcePort.ExtraParameters);
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/Launch/StatisticsReaderLaunchFeature.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Config;
2 | using DoomLauncher.Interfaces;
3 | using System;
4 |
5 | namespace DoomLauncher.Adapters.Launch
6 | {
7 | public class StatisticsReaderLaunchFeature : ILaunchFeature
8 | {
9 | public LaunchParameters CreateParameter(IGameFile gameFile, ISourcePortData sourcePort, bool isGameFileIwad, IDirectoriesConfiguration directories)
10 | {
11 | IStatisticsReader statsReader = sourcePort.GetFlavor().CreateStatisticsReader(gameFile, Array.Empty());
12 | return LaunchParameters.Param(statsReader?.LaunchParameter);
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/MSSQLDataAdapter.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 | using System.Data.Common;
3 | using System.Data.SqlClient;
4 |
5 | namespace DoomLauncher
6 | {
7 | class MSSQLDataAdapter : IDatabaseAdapter
8 | {
9 | public DbConnection CreateConnection(string connectionString)
10 | {
11 | return new SqlConnection(connectionString);
12 | }
13 |
14 | public DbDataAdapter CreateAdapter()
15 | {
16 | return new SqlDataAdapter();
17 | }
18 |
19 | public DbParameter CreateParameter(string name, object value)
20 | {
21 | return new SqlParameter(name, value);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/PlaySession.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using static DoomLauncher.GameLauncher;
3 |
4 | namespace DoomLauncher.Adapters
5 | {
6 | public class PlaySession
7 | {
8 | public PlaySession(GameLaunchInfo launchInfo, IStatisticsReader statisticsReader, DateTime start)
9 | {
10 | GameLaunchInfo = launchInfo;
11 | StatisticsReader = statisticsReader;
12 | Start = start;
13 | }
14 |
15 | public GameLaunchInfo GameLaunchInfo { get; }
16 | public IStatisticsReader StatisticsReader { get; }
17 | public DateTime Start { get; set; }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/DoomLauncher/Adapters/SqliteDatabaseAdapter.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 | using System.Data.Common;
3 | using System.Data.SQLite;
4 |
5 | namespace DoomLauncher
6 | {
7 | public class SqliteDatabaseAdapter : IDatabaseAdapter
8 | {
9 | public DbConnection CreateConnection(string connectionString)
10 | {
11 | return new SQLiteConnection(connectionString);
12 | }
13 |
14 | public DbDataAdapter CreateAdapter()
15 | {
16 | return new SQLiteDataAdapter();
17 | }
18 |
19 | public DbParameter CreateParameter(string name, object value)
20 | {
21 | return new SQLiteParameter(name, value);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Directory/DirectoryArchiveEntry.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 |
3 | namespace DoomLauncher
4 | {
5 | internal class DirectoryArchiveEntry : AbstractArchiveEntry
6 | {
7 | private readonly FileInfo m_file;
8 |
9 | public DirectoryArchiveEntry(string file)
10 | {
11 | m_file = new FileInfo(file);
12 | }
13 |
14 | public override long Length => m_file.Length;
15 |
16 | public override string Name => m_file.Name;
17 |
18 | public override string FullName => m_file.FullName;
19 |
20 | public override bool ExtractRequired => false;
21 |
22 | public override bool IsDirectory => false;
23 |
24 | public override void ExtractToFile(string file, bool overwrite = false)
25 | {
26 | m_file.CopyTo(file, overwrite);
27 | }
28 |
29 | public override void Read(byte[] buffer, int offset, int length)
30 | {
31 | using (var fs = m_file.OpenRead())
32 | fs.Read(buffer, offset, length);
33 | }
34 |
35 | public override string GetNameWithoutExtension() => Name;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Directory/DirectoryArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.IO;
3 |
4 | namespace DoomLauncher
5 | {
6 | public class DirectoryArchiveReader : IArchiveReader
7 | {
8 | private readonly string m_directory;
9 | private readonly List m_entries = new List();
10 |
11 | public IEnumerable Entries => m_entries;
12 | public bool EntriesHaveExtensions => true;
13 |
14 | public DirectoryArchiveReader(string directory)
15 | {
16 | m_directory = directory;
17 | RecursivelyIterateDirectory(m_directory);
18 | }
19 |
20 | void RecursivelyIterateDirectory(string directory)
21 | {
22 | try
23 | {
24 | foreach (string dir in Directory.GetDirectories(directory))
25 | {
26 | foreach (string file in Directory.GetFiles(dir))
27 | m_entries.Add(new DirectoryArchiveEntry(file));
28 | RecursivelyIterateDirectory(dir);
29 | }
30 | }
31 | catch
32 | {
33 | }
34 | }
35 |
36 | public void Dispose()
37 | {
38 |
39 | }
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/EmptyArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace DoomLauncher
5 | {
6 | public class EmptyArchiveReader : IArchiveReader
7 | {
8 | public IEnumerable Entries => Array.Empty();
9 |
10 | public bool EntriesHaveExtensions => false;
11 |
12 | public void Dispose()
13 | {
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/IArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 |
4 | namespace DoomLauncher
5 | {
6 | public interface IArchiveReader : IDisposable
7 | {
8 | IEnumerable Entries { get; }
9 | bool EntriesHaveExtensions { get; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Rar/RarArchiveEntry.cs:
--------------------------------------------------------------------------------
1 | using SharpCompress.Archives;
2 | using System.IO;
3 |
4 | namespace DoomLauncher.Archive.Rar
5 | {
6 | public class RarArchiveEntry : AbstractArchiveEntry
7 | {
8 | private readonly SharpCompress.Archives.Rar.RarArchiveEntry m_entry;
9 |
10 | public RarArchiveEntry(SharpCompress.Archives.Rar.RarArchiveEntry entry)
11 | {
12 | m_entry = entry;
13 | }
14 |
15 | public override long Length => m_entry.Size;
16 |
17 | public override string Name => Path.GetFileName(m_entry.Key);
18 |
19 | public override string FullName => m_entry.Key;
20 |
21 | public override bool ExtractRequired => true;
22 |
23 | public override bool IsDirectory => m_entry.IsDirectory;
24 |
25 | public override void ExtractToFile(string file, bool overwrite = false)
26 | {
27 | if (!overwrite && File.Exists(file))
28 | return;
29 |
30 | m_entry.WriteToFile(file);
31 | }
32 |
33 | public override void Read(byte[] buffer, int offset, int length)
34 | {
35 | using (MemoryStream ms = new MemoryStream(buffer, offset, length))
36 | m_entry.WriteTo(ms);
37 | }
38 |
39 | public override bool Equals(object obj)
40 | {
41 | if (!(obj is IArchiveEntry entry))
42 | return false;
43 |
44 | return entry.FullName == FullName;
45 | }
46 |
47 | public override int GetHashCode()
48 | {
49 | return FullName.GetHashCode();
50 | }
51 |
52 | public override string GetNameWithoutExtension() => Path.GetFileNameWithoutExtension(Name);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Rar/RarArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using SharpCompress.Archives.Rar;
2 | using System.Collections.Generic;
3 |
4 | namespace DoomLauncher.Archive.Rar
5 | {
6 | internal class RarArchiveReader : IArchiveReader
7 | {
8 | private readonly RarArchive m_archive;
9 |
10 | public RarArchiveReader(string file)
11 | {
12 | m_archive = RarArchive.Open(file);
13 | }
14 |
15 | public IEnumerable Entries
16 | {
17 | get
18 | {
19 | foreach (var entry in m_archive.Entries)
20 | yield return new RarArchiveEntry(entry);
21 | }
22 | }
23 |
24 | public bool EntriesHaveExtensions => true;
25 |
26 | public void Dispose()
27 | {
28 | m_archive.Dispose();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/SevenZip/SevenZipArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using SevenZip;
2 | using System.Collections.Generic;
3 | using System.IO;
4 |
5 | namespace DoomLauncher.Archive.SevenZip
6 | {
7 | public class SevenZipArchiveReader : IArchiveReader
8 | {
9 | private readonly SevenZipExtractor m_extractor;
10 | private readonly MemoryStreamManager m_streamManager = new MemoryStreamManager();
11 |
12 | public SevenZipArchiveReader(string file, string sevenZipInteropLibrary)
13 | {
14 | SevenZipBase.SetLibraryPath(sevenZipInteropLibrary);
15 | m_extractor = new SevenZipExtractor(file);
16 | }
17 |
18 | public IEnumerable Entries
19 | {
20 | get
21 | {
22 | foreach (var entry in m_extractor.ArchiveFileData)
23 | yield return new SevenZipArchiveEntry(m_extractor, entry, m_streamManager);
24 | }
25 | }
26 |
27 | public bool EntriesHaveExtensions => true;
28 |
29 | public void Dispose()
30 | {
31 | m_extractor.Dispose();
32 | foreach (var stream in m_streamManager.Streams)
33 | stream.Dispose();
34 | }
35 | }
36 |
37 | public class MemoryStreamManager
38 | {
39 | public List Streams = new List();
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Wad/WadArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.IO;
3 | using WadReader;
4 |
5 | namespace DoomLauncher
6 | {
7 | internal class WadArchiveReader : IArchiveReader
8 | {
9 | private readonly FileStream m_fs;
10 | private readonly List m_entries = new List();
11 |
12 | public IEnumerable Entries => m_entries;
13 | public bool EntriesHaveExtensions => false;
14 | public readonly bool IsValid;
15 | public readonly string Filename;
16 |
17 | public WadArchiveReader(string file)
18 | {
19 | Filename = file;
20 | m_fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
21 | WadFileReader wadReader = new WadFileReader(m_fs);
22 | IsValid = wadReader.IsValid;
23 | var lumps = wadReader.ReadLumps();
24 | foreach (var lump in lumps)
25 | m_entries.Add(new WadEntry(m_fs, lump));
26 | }
27 |
28 | public void Dispose()
29 | {
30 | m_fs.Dispose();
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Wad/WadEntry.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using WadReader;
3 |
4 | namespace DoomLauncher
5 | {
6 | public class WadEntry : AbstractArchiveEntry
7 | {
8 | private readonly FileStream m_fs;
9 | private readonly FileLump m_lump;
10 |
11 | public override long Length => m_lump.Length;
12 |
13 | public override string Name { get; }
14 |
15 | public override string FullName => Name;
16 |
17 | public override bool ExtractRequired => false;
18 |
19 | public override bool IsDirectory => false;
20 |
21 | public WadEntry(FileStream fs, FileLump lump)
22 | {
23 | m_fs = fs;
24 | m_lump = lump;
25 | Name = lump.Name;
26 | }
27 |
28 | public override void ExtractToFile(string file, bool overwrite = false)
29 | {
30 | File.WriteAllBytes(file, m_lump.ReadData(m_fs));
31 | }
32 |
33 | public override void Read(byte[] buffer, int offset, int length)
34 | {
35 | m_lump.ReadData(m_fs, buffer, offset, length);
36 | }
37 |
38 | public override string GetNameWithoutExtension() => Name;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Zip/ZipArchiveReader.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.IO.Compression;
5 |
6 | namespace DoomLauncher
7 | {
8 | public class ZipArchiveReader : IArchiveReader
9 | {
10 | private readonly ZipArchive m_archive;
11 |
12 | public bool EntriesHaveExtensions => true;
13 |
14 | public ZipArchiveReader(string file)
15 | {
16 | var stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
17 | try
18 | {
19 | m_archive = new ZipArchive(stream);
20 | }
21 | catch (Exception ex)
22 | {
23 | stream.Dispose();
24 | throw ex;
25 | }
26 | }
27 |
28 | public IEnumerable Entries
29 | {
30 | get
31 | {
32 | foreach (var entry in m_archive.Entries)
33 | yield return new ZipArchiveReaderEntry(entry);
34 | }
35 | }
36 |
37 | public void Dispose()
38 | {
39 | Dispose(true);
40 | GC.SuppressFinalize(this);
41 | }
42 |
43 | protected virtual void Dispose(bool disposing)
44 | {
45 | m_archive.Dispose();
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/DoomLauncher/Archive/Zip/ZipArchiveReaderEntry.cs:
--------------------------------------------------------------------------------
1 | using System.IO;
2 | using System.IO.Compression;
3 |
4 | namespace DoomLauncher
5 | {
6 | class ZipArchiveReaderEntry : AbstractArchiveEntry
7 | {
8 | private readonly ZipArchiveEntry m_entry;
9 |
10 | public ZipArchiveReaderEntry(ZipArchiveEntry zipArchiveEntry)
11 | {
12 | m_entry = zipArchiveEntry;
13 | }
14 |
15 | public override long Length => m_entry.Length;
16 |
17 | public override void Read(byte[] buffer, int offset, int length)
18 | {
19 | m_entry.Open().Read(buffer, offset, length);
20 | }
21 |
22 | public override string Name => m_entry.Name;
23 | public override string FullName => m_entry.FullName;
24 |
25 | public override bool ExtractRequired => true;
26 |
27 | public override bool IsDirectory => m_entry.FullName.EndsWith("/");
28 |
29 | public override void ExtractToFile(string file, bool overwrite = false)
30 | {
31 | m_entry.ExtractToFile(file, overwrite);
32 | }
33 |
34 | public override bool Equals(object obj)
35 | {
36 | if (!(obj is IArchiveEntry entry))
37 | return false;
38 |
39 | return entry.FullName == FullName;
40 | }
41 |
42 | public override int GetHashCode()
43 | {
44 | return FullName.GetHashCode();
45 | }
46 |
47 | public override string GetNameWithoutExtension() => Path.GetFileNameWithoutExtension(Name);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/AppVersion.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum AppVersion
4 | {
5 | Unknown,
6 | Version_1_0_0,
7 | Version_1_1_0,
8 | Version_1_2_0,
9 | Version_2_1_0,
10 | Version_2_2_0,
11 | Version_2_2_1,
12 | Version_2_3_0,
13 | Version_2_4_0,
14 | Version_2_4_1,
15 | Version_2_6_0,
16 | Version_2_6_3,
17 | Version_2_6_3_1,
18 | Version_2_6_3_2,
19 | Version_2_6_4_1,
20 | Version_2_6_4_1_Update1,
21 | Version_2_7_0_0,
22 | Version_2_8_0_0,
23 | Version_2_8_0_0_1,
24 | Version_3_1_0,
25 | Version_3_2_0,
26 | Version_3_2_0_Update1,
27 | Version_3_2_0_Update2,
28 | Version_3_2_0_Update3,
29 | Version_3_3_0,
30 | Version_3_3_1,
31 | Version_3_3_2,
32 | Version_3_4_0,
33 | Version_3_4_0_Update1,
34 | Version_3_5_2,
35 | Version_3_5_2_Update1,
36 | Version_3_5_2_Update2,
37 | Version_3_5_3_Update1,
38 | Version_3_5_3_Update2,
39 | Version_3_5_3_Update3,
40 | Version_3_7_0,
41 | Version_3_7_0_Update1,
42 | Version_3_7_4,
43 | Version_3_7_7,
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/ColorTheme.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public static class ColorTheme
4 | {
5 | public static IThemeColors Current { get; set; } = new DefaultTheme();
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/ColorThemeType.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher.Config
2 | {
3 | public enum ColorThemeType
4 | {
5 | Default,
6 | Dark,
7 | System
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/ColumnConfig.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 |
6 | public class ColumnConfig
7 | {
8 | public ColumnConfig() { }
9 | public ColumnConfig(string parent, string column, int width, SortOrder sort)
10 | {
11 | Parent = parent;
12 | Column = column;
13 | Width = width;
14 | Sort = sort;
15 | }
16 |
17 | public string Parent { get; set; }
18 | public string Column { get; set; }
19 | public int Width { get; set; }
20 | public SortOrder Sort { get; set; }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/ConfigType.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum ConfigType
4 | {
5 | DefaultSourcePort,
6 | DefaultIWad,
7 | DefaultSkill,
8 | AutoSearch,
9 | FileManagement,
10 | GameFileViewType,
11 | VisibleViews,
12 | ColorThemeType
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/FileManagement.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum FileManagement
4 | {
5 | Managed,
6 | Unmanaged,
7 | Prompt,
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/GameFileListEventArgs.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 | using System.Collections.Generic;
3 |
4 | namespace DoomLauncher
5 | {
6 | public class GameFileListEventArgs
7 | {
8 | public IEnumerable GameFiles { get; set; }
9 |
10 | public GameFileListEventArgs(IEnumerable gameFiles)
11 | {
12 | GameFiles = gameFiles;
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/IDirectoriesConfiguration.cs:
--------------------------------------------------------------------------------
1 |
2 | namespace DoomLauncher.Config
3 | {
4 | public interface IDirectoriesConfiguration
5 | {
6 | LauncherPath GameFileDirectory { get; }
7 | LauncherPath ScreenshotDirectory { get; }
8 | LauncherPath SaveGameDirectory { get; }
9 | LauncherPath TempDirectory { get; }
10 | LauncherPath DemoDirectory { get; }
11 | LauncherPath ThumbnailDirectory { get; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/DoomLauncher/Config/ScreenFilter.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum ScreenFilterType
4 | {
5 | Ellipse,
6 | Scanline
7 | }
8 |
9 | public class ScreenFilter
10 | {
11 | public ScreenFilterType Type { get; set; }
12 | public float Opacity { get; set; }
13 | public int LineThickness { get; set; }
14 | public int BlockSize { get; set; }
15 | public float SpacingX { get; set; }
16 | public float SpacingY { get; set; }
17 | public bool Stagger { get; set; }
18 | public int ScanlineSpacing { get; set; }
19 | public bool VerticalScanlines { get; set; }
20 | public bool HorizontalScanlines { get; set; }
21 | public bool Enabled { get; set; }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/CDataGridView.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 | class CDataGridView : DataGridView
6 | {
7 | public CDataGridView()
8 | {
9 | DoubleBuffered = true;
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/CRichTextBox.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher.Controls
2 | {
3 | partial class CRichTextBox
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | components = new System.ComponentModel.Container();
32 | }
33 |
34 | #endregion
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/CRichTextBox.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 | using System.Windows.Forms;
4 |
5 | namespace DoomLauncher.Controls
6 | {
7 | public partial class CRichTextBox : RichTextBox
8 | {
9 | public CRichTextBox()
10 | {
11 | InitializeComponent();
12 | WarnLinkClick = true;
13 | LinkClicked += CRichTextBox_LinkClicked;
14 | }
15 |
16 | public bool WarnLinkClick { get; set; }
17 |
18 | private void CRichTextBox_LinkClicked(object sender, LinkClickedEventArgs e)
19 | {
20 | if (ShouldNavigate(e))
21 | Process.Start(e.LinkText);
22 | }
23 |
24 | private bool ShouldNavigate(LinkClickedEventArgs e)
25 | {
26 | if (WarnLinkClick)
27 | {
28 | return MessageBox.Show(this, string.Format("You are about to navigate to:{1}{0} {1}{1}Continue?", e.LinkText, Environment.NewLine),
29 | "Navigate", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK;
30 | }
31 |
32 | return true;
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/ColumnField.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public class ColumnField
4 | {
5 | public ColumnField(string datakey, string title)
6 | {
7 | DataKey = datakey;
8 | Title = title;
9 | }
10 |
11 | public string DataKey { get; set; }
12 | public string Title { get; set; }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/DownloadViewItem.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace DoomLauncher
5 | {
6 | public partial class DownloadViewItem : UserControl
7 | {
8 | public event EventHandler Cancelled;
9 |
10 | public DownloadViewItem()
11 | {
12 | InitializeComponent();
13 |
14 | Stylizer.StylizeControl(this, DesignMode);
15 | }
16 |
17 | public object Key
18 | {
19 | get;
20 | set;
21 | }
22 |
23 | public string DisplayText
24 | {
25 | get { return lblText.Text; }
26 | set { lblText.Text = value; }
27 | }
28 |
29 | public int ProgressValue
30 | {
31 | get { return progressBar.Value; }
32 | set { progressBar.Value = value; }
33 | }
34 |
35 | public bool CancelVisible
36 | {
37 | get { return btnCancel.Visible; }
38 | set { btnCancel.Visible = value; }
39 | }
40 |
41 | private void btnCancel_Click(object sender, EventArgs e)
42 | {
43 | Cancelled?.Invoke(this, new EventArgs());
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/FileType.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum FileType
4 | {
5 | Unknown = 0,
6 | Screenshot = 1,
7 | Demo = 2,
8 | SaveGame = 3,
9 | Thumbnail = 4,
10 | TileImage = 5,
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/FlowLayoutPanelDB.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | partial class FlowLayoutPanelDB
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | components = new System.ComponentModel.Container();
32 | //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
33 | }
34 |
35 | #endregion
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/FlowLayoutPanelDB.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 | public partial class FlowLayoutPanelDB : FlowLayoutPanel
6 | {
7 | public bool CaptureArrowKeys { get; set; } = false;
8 |
9 | public FlowLayoutPanelDB()
10 | {
11 | SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
12 | }
13 |
14 | protected override bool IsInputKey(Keys keyData)
15 | {
16 | if (CaptureArrowKeys)
17 | {
18 | switch (keyData)
19 | {
20 | case Keys.Up:
21 | case Keys.Down:
22 | case Keys.Left:
23 | case Keys.Right:
24 | return true;
25 | case Keys.Shift | Keys.Up:
26 | case Keys.Shift | Keys.Down:
27 | case Keys.Shift | Keys.Left:
28 | case Keys.Shift | Keys.Right:
29 | return true;
30 | }
31 | }
32 |
33 | return base.IsInputKey(keyData);
34 | }
35 |
36 | protected override CreateParams CreateParams
37 | {
38 | get
39 | {
40 | CreateParams cp = base.CreateParams;
41 | cp.ExStyle |= 0x02000000; // WS_CLIPCHILDREN
42 | return cp;
43 | }
44 | }
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/FormButton.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 | public class FormButton : Button
6 | {
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/GameFileTileBase.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Drawing;
5 | using System.Windows.Forms;
6 |
7 | namespace DoomLauncher
8 | {
9 | public abstract class GameFileTileBase : UserControl, IGameFileTile
10 | {
11 | public abstract event MouseEventHandler TileClick;
12 | public abstract event EventHandler TileDoubleClick;
13 |
14 | public abstract int ImageWidth { get; protected set; }
15 | public abstract IGameFile GameFile { get; protected set; }
16 | public abstract bool Selected { get; protected set; }
17 |
18 | public abstract void ClearData();
19 | public abstract void SetData(IGameFile gameFile, IEnumerable tags);
20 | public abstract void SetImageLocation(string file);
21 | public abstract void SetImage(Image image);
22 | public abstract void SetSelected(bool set);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/GrowLabel.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | partial class GrowLabel
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | [System.CodeDom.Compiler.GeneratedCode("Winform Designer", "VS2015 SP1")]
30 | private void InitializeComponent()
31 | {
32 | components = new System.ComponentModel.Container();
33 | }
34 |
35 | #endregion
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/GrowLabel.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Drawing;
3 | using System.IO;
4 | using System.Windows.Forms;
5 |
6 | namespace DoomLauncher
7 | {
8 | public partial class GrowLabel : Label
9 | {
10 | private bool mGrowing;
11 |
12 | public GrowLabel()
13 | {
14 | AutoSize = false;
15 | IsPath = false;
16 | }
17 |
18 | public bool IsPath { get; set; }
19 |
20 | private void ResizeLabel()
21 | {
22 | if (mGrowing)
23 | return;
24 |
25 | try
26 | {
27 | mGrowing = true;
28 | Size sz = new Size(Width, int.MaxValue);
29 | string text = Text;
30 |
31 | if (IsPath)
32 | text = Text.Replace(Path.DirectorySeparatorChar, ' ').Replace(Path.AltDirectorySeparatorChar, ' ');
33 |
34 | sz = TextRenderer.MeasureText(text, Font, sz, TextFormatFlags.WordBreak);
35 | Height = sz.Height;
36 | }
37 | finally
38 | {
39 | mGrowing = false;
40 | }
41 | }
42 |
43 | protected override void OnTextChanged(EventArgs e)
44 | {
45 | base.OnTextChanged(e);
46 | ResizeLabel();
47 | }
48 |
49 | protected override void OnFontChanged(EventArgs e)
50 | {
51 | base.OnFontChanged(e);
52 | ResizeLabel();
53 | }
54 |
55 | protected override void OnSizeChanged(EventArgs e)
56 | {
57 | base.OnSizeChanged(e);
58 | ResizeLabel();
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/TableLayoutPanelDB.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | partial class TableLayoutPanelDB
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Component Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | [System.CodeDom.Compiler.GeneratedCode("Winform Designer", "VS2015 SP1")]
30 | private void InitializeComponent()
31 | {
32 | components = new System.ComponentModel.Container();
33 | }
34 |
35 | #endregion
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/DoomLauncher/Controls/TableLayoutPanelDB.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 | public partial class TableLayoutPanelDB : TableLayoutPanel
6 | {
7 | public TableLayoutPanelDB()
8 | {
9 | SetStyle(ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
10 | }
11 |
12 | protected override CreateParams CreateParams
13 | {
14 | get
15 | {
16 | CreateParams cp = base.CreateParams;
17 | cp.ExStyle |= 0x02000000; // WS_CLIPCHILDREN
18 | return cp;
19 | }
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/CleanupFile.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher.DataSources
2 | {
3 | public class CleanupFile
4 | {
5 | public int CleanupFileID { get; set; }
6 | public string FileName { get; set; }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/ConfigurationData.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 |
3 | namespace DoomLauncher.DataSources
4 | {
5 | class ConfigurationData : IConfigurationData
6 | {
7 | public ConfigurationData()
8 | {
9 | AvailableValues = string.Empty;
10 | Value = string.Empty;
11 | }
12 |
13 | public int ConfigID { get; set; }
14 | public string Name { get; set; }
15 | public string Value { get; set; }
16 | public string AvailableValues { get; set; }
17 | public bool UserCanModify { get; set; }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/CustomParam.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public class CustomParamDataSource : ICustomParam
4 | {
5 | public int CustomParamID { get; set; }
6 | public string FileName { get; set; }
7 | public string Parameter { get; set; }
8 | public int GameFileID { get; set; }
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/ITagDataSource.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | namespace DoomLauncher.Interfaces
8 | {
9 | public interface ITagDataSource
10 | {
11 | int TagID { get; set; }
12 | string Name { get; set; }
13 | bool HasTab { get; set; }
14 | bool HasColor { get; set; }
15 | int? Color { get; set; }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/IWadData.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 |
3 | namespace DoomLauncher
4 | {
5 | public class IWadData : IIWadData
6 | {
7 | public int IWadID { get; set; }
8 | public string Name { get; set; }
9 | public string FileName { get; set; }
10 | public int? GameFileID { get; set; }
11 |
12 | public override bool Equals(object obj)
13 | {
14 | IIWadData iwad = obj as IIWadData;
15 |
16 | if (iwad != null)
17 | {
18 | return iwad.FileName == FileName;
19 | }
20 |
21 | return false;
22 | }
23 |
24 | public override int GetHashCode()
25 | {
26 | return FileName.GetHashCode();
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/NewFileData.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public class NewFileData
4 | {
5 | public int SourcePortID { get; set; }
6 | public string Description { get; set; }
7 | public string UserTitle { get; set; }
8 | public string UserDescription { get; set; }
9 | public string Map { get; set; }
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/PreviewImage.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public class PreviewImage
4 | {
5 | public PreviewImage(string path, string title)
6 | {
7 | Path = path;
8 | Title = title;
9 | }
10 |
11 | public string Path { get; set; }
12 | public string Title { get; set; }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/SettingsDataSource.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | namespace DoomLauncher.DataSources
9 | {
10 | class SettingsDataSource : ISettingsDataSource
11 | {
12 | public int GameFileID { get; set; }
13 | public int SettingsID { get; set; }
14 | public string SettingsName { get; set; }
15 | public string SettingsMap { get; set; }
16 | public string SettingsSkill { get; set; }
17 | public string SettingsExtraParams { get; set; }
18 | public string SettingsFiles { get; set; }
19 | public string SettingsSpecificFiles { get; set; }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/SourcePortLaunchType.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum SourcePortLaunchType
4 | {
5 | SourcePort,
6 | Utility,
7 | Doom64
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/StaticTagData.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.DataSources;
2 |
3 | namespace DoomLauncher
4 | {
5 | class StaticTagData : TagData
6 | {
7 | public static string GetFavoriteName(string name) => string.Concat("● ", name);
8 |
9 | public override string FavoriteName => GetFavoriteName(Name);
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/TagData.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 |
3 | namespace DoomLauncher.DataSources
4 | {
5 | public class TagData : ITagData
6 | {
7 | public static readonly string FavoriteChar = "★";
8 |
9 | public int TagID { get; set; }
10 | public string Name { get; set; }
11 | public bool HasTab { get; set; }
12 | public bool HasColor { get; set; }
13 | public int? Color { get; set; }
14 | public bool ExcludeFromOtherTabs { get; set; }
15 | public bool Favorite { get; set; }
16 |
17 | public virtual string FavoriteName => Favorite ? string.Concat(FavoriteChar, " ", Name) : Name;
18 |
19 | public override bool Equals(object obj)
20 | {
21 | if (obj is ITagData tag)
22 | return tag.TagID == TagID;
23 |
24 | return false;
25 | }
26 |
27 | public override int GetHashCode()
28 | {
29 | return TagID;
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/TagMapping.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 |
3 | namespace DoomLauncher.DataSources
4 | {
5 | public class TagMapping : ITagMapping
6 | {
7 | public int TagID { get; set; }
8 | public int FileID { get; set; }
9 |
10 | public override bool Equals(object obj)
11 | {
12 | ITagMapping mapping = obj as ITagMapping;
13 |
14 | if (mapping != null)
15 | {
16 | return mapping.FileID == this.FileID && mapping.TagID == this.TagID;
17 | }
18 |
19 | return false;
20 | }
21 |
22 | public override int GetHashCode()
23 | {
24 | return string.Format("{0},{1}", FileID, TagID).GetHashCode();
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/WadArchiveFile.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher.DataSources
2 | {
3 | class WadArchiveFile : FileData
4 | {
5 | public override bool IsUrl { get { return true; } }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/DoomLauncher/DataSources/WadArchiveGameFile.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using System.Collections.Generic;
3 |
4 | namespace DoomLauncher.DataSources
5 | {
6 | class WadArchiveGameFile : GameFile
7 | {
8 | public override string FileName
9 | {
10 | get
11 | {
12 | if (filenames != null && filenames.Length > 0)
13 | return filenames[0];
14 | return null;
15 | }
16 | set
17 | {
18 | if (filenames == null)
19 | filenames = new string[1];
20 | filenames[0] = value;
21 | }
22 | }
23 | [JsonProperty("extra")]
24 | public override string Title { get; set; }
25 | [JsonProperty("size")]
26 | public override int FileSizeBytes { get; set; }
27 | [JsonProperty("type")]
28 | public string type { get; set; }
29 | [JsonProperty("port")]
30 | public string port { get; set; }
31 | [JsonProperty("links")]
32 | public string[] links { get; set; }
33 | [JsonProperty("filenames")]
34 | public string[] filenames { get; set; }
35 | [JsonProperty("screenshots")]
36 | public Dictionary screenshots { get; set; }
37 | public override string LastDirectory => string.Empty;
38 | }
39 |
40 | class ScreenshotItem
41 | {
42 | [JsonProperty("name")]
43 | public string name { get; set; }
44 | [JsonProperty("value")]
45 | public string value { get; set; }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/DoomLauncher/Demo/DemoUtil.cs:
--------------------------------------------------------------------------------
1 | using System.Linq;
2 |
3 | namespace DoomLauncher.Demo
4 | {
5 | public static class DemoUtil
6 | {
7 | public static IDemoParser GetDemoParser(string demoFile)
8 | {
9 | IDemoParser[] parsers = new IDemoParser[]
10 | {
11 | new CldDemoParser(demoFile)
12 | };
13 |
14 | return parsers.FirstOrDefault(x => x.CanParse());
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/DoomLauncher/Demo/IDemoParser.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher.Demo
2 | {
3 | public interface IDemoParser
4 | {
5 | bool CanParse();
6 | string[] GetRequiredFiles();
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DoomLauncher/DoomLauncher.VisualElementsManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
--------------------------------------------------------------------------------
/DoomLauncher/DoomLauncher.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nstlaurent/DoomLauncher/1ef5a24c7428fc610aa57fa98afd5526594d4c7b/DoomLauncher/DoomLauncher.ico
--------------------------------------------------------------------------------
/DoomLauncher/DoomLauncher.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nstlaurent/DoomLauncher/1ef5a24c7428fc610aa57fa98afd5526594d4c7b/DoomLauncher/DoomLauncher.sqlite
--------------------------------------------------------------------------------
/DoomLauncher/DoomLauncherSmall.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nstlaurent/DoomLauncher/1ef5a24c7428fc610aa57fa98afd5526594d4c7b/DoomLauncher/DoomLauncherSmall.ico
--------------------------------------------------------------------------------
/DoomLauncher/Dpi/DpiScale.cs:
--------------------------------------------------------------------------------
1 | using System.Drawing;
2 | using System.Windows.Forms;
3 |
4 | namespace DoomLauncher
5 | {
6 | public class DpiScale
7 | {
8 | public DpiScale(Graphics g)
9 | {
10 | DpiScaleX = g.DpiX / 96.0f;
11 | DpiScaleY = g.DpiY / 96.0f;
12 | }
13 |
14 | public DpiScale(float scaleX, float scaleY)
15 | {
16 | DpiScaleX = scaleX;
17 | DpiScaleY = scaleY;
18 | }
19 |
20 | public int ScaleIntY(int height) => (int)(height * DpiScaleY);
21 | public int ScaleIntX(int width) => (int)(width * DpiScaleY);
22 |
23 | public float ScaleFloatY(float height) => height * DpiScaleY;
24 | public float ScaleFloatX(float width) => width * DpiScaleX;
25 |
26 | public readonly float DpiScaleX;
27 | public readonly float DpiScaleY;
28 |
29 | public void ScaleControl(Control control)
30 | {
31 | control.Width = ScaleIntX(control.Width);
32 | control.Height = ScaleIntY(control.Height);
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/DirectoriesForm.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Windows.Forms;
4 |
5 | namespace DoomLauncher.Forms
6 | {
7 | public partial class DirectoriesForm : Form
8 | {
9 | public DirectoriesForm()
10 | {
11 | InitializeComponent();
12 | lstDirectories.HeaderStyle = ColumnHeaderStyle.None;
13 | lstDirectories.Columns[0].Width = lstDirectories.Width;
14 | Icons.DpiScale = new DpiScale(CreateGraphics());
15 | btnAdd.Image = Icons.File;
16 | btnDelete.Image = Icons.Delete;
17 |
18 | Stylizer.Stylize(this, DesignMode);
19 | }
20 |
21 | public void SetDirectories(string[] directories)
22 | {
23 | Array.ForEach(directories, x => lstDirectories.Items.Add(x));
24 | }
25 |
26 | public List GetDirectories()
27 | {
28 | List ret = new List();
29 |
30 | foreach (ListViewItem item in lstDirectories.Items)
31 | ret.Add(item.Text);
32 |
33 | return ret;
34 | }
35 |
36 | private void btnAdd_Click(object sender, EventArgs e)
37 | {
38 | FolderBrowserDialog dialog = new FolderBrowserDialog();
39 |
40 | if (dialog.ShowDialog(this) == DialogResult.OK)
41 | {
42 | lstDirectories.Items.Add(dialog.SelectedPath);
43 | }
44 | }
45 |
46 | private void btnDelete_Click(object sender, EventArgs e)
47 | {
48 | if (lstDirectories.SelectedItems.Count > 0)
49 | lstDirectories.Items.Remove(lstDirectories.SelectedItems[0]);
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/FileManagementSelect.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher.Forms
4 | {
5 | public partial class FileManagementSelect : Form
6 | {
7 | public FileManagementSelect()
8 | {
9 | InitializeComponent();
10 | cmbFileManagement.DataSource = new string[] { "Managed", "Unmanaged" };
11 |
12 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
13 | }
14 |
15 | public FileManagement GetSelectedFileManagement()
16 | {
17 | if (cmbFileManagement.SelectedIndex == 0)
18 | return FileManagement.Managed;
19 |
20 | return FileManagement.Unmanaged;
21 | }
22 |
23 | private void BtnOK_Click(object sender, System.EventArgs e)
24 | {
25 | Close();
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/FilterForm.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher.Forms
2 | {
3 | partial class FilterForm
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | m_pen.Dispose();
20 | }
21 | base.Dispose(disposing);
22 | }
23 |
24 | #region Windows Form Designer generated code
25 |
26 | ///
27 | /// Required method for Designer support - do not modify
28 | /// the contents of this method with the code editor.
29 | ///
30 | private void InitializeComponent()
31 | {
32 | this.SuspendLayout();
33 | //
34 | // CrtFilterForm
35 | //
36 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
37 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
38 | this.ClientSize = new System.Drawing.Size(800, 450);
39 | this.Name = "CrtFilterForm";
40 | this.Text = "CrtFilterForm";
41 | this.ResumeLayout(false);
42 |
43 | }
44 |
45 | #endregion
46 | }
47 | }
--------------------------------------------------------------------------------
/DoomLauncher/Forms/MetaDataForm.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 | public partial class MetaDataForm : Form
6 | {
7 | public MetaDataForm()
8 | {
9 | InitializeComponent();
10 | gameFileEdit1.SetShowCheckBoxes(true);
11 | gameFileEdit1.SetShowMaps(false);
12 |
13 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
14 | }
15 |
16 | public GameFileEdit GameFileEdit
17 | {
18 | get { return gameFileEdit1; }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/SaveInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher.Forms
4 | {
5 | public partial class SaveInfo : Form
6 | {
7 | public SaveInfo()
8 | {
9 | InitializeComponent();
10 |
11 | pbInfo1.Image = DoomLauncher.Properties.Resources.bon2b;
12 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
13 | }
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/SimpleFileSelectForm.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.Linq;
3 | using System.Windows.Forms;
4 |
5 | namespace DoomLauncher
6 | {
7 | public partial class SimpleFileSelectForm : Form
8 | {
9 | public SimpleFileSelectForm()
10 | {
11 | InitializeComponent();
12 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
13 | }
14 |
15 | public void Initialize(IEnumerable files)
16 | {
17 | foreach (string file in files)
18 | lstFiles.Items.Add(file);
19 |
20 | if (files.Count() > 0)
21 | lstFiles.SelectedItem = files.First();
22 | }
23 |
24 | public string SelectedFile
25 | {
26 | get
27 | {
28 | if (lstFiles.SelectedItems.Count > 0)
29 | return (string)lstFiles.SelectedItems[0];
30 |
31 | return null;
32 | }
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/SplashScreen.cs:
--------------------------------------------------------------------------------
1 | using System.Drawing;
2 | using System.Windows.Forms;
3 |
4 | namespace DoomLauncher
5 | {
6 | public partial class SplashScreen : Form
7 | {
8 | public SplashScreen()
9 | {
10 | SetStyle(ControlStyles.SupportsTransparentBackColor, true);
11 | BackColor = Color.Transparent;
12 | TransparencyKey = Color.Magenta;
13 | InitializeComponent();
14 | }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/StatsInfo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Windows.Forms;
3 |
4 | namespace DoomLauncher
5 | {
6 | public partial class StatsInfo : Form
7 | {
8 | public StatsInfo()
9 | {
10 | InitializeComponent();
11 |
12 | pbInfo1.Image = DoomLauncher.Properties.Resources.bon2b;
13 |
14 | lblZdoom.Text = "For all ZDoom based ports. Uses save games to parse statistics. This means statistics cannot be read for the last level of an episode. " +
15 | "Items and skill level are not available for ZDoom, Zandronum, and GZDoom pre-3.5.0. Statistics will be recorded when the game is saved or when an auto save is generated.";
16 | lblBoom.Text = "Uses the -levelstat parameter and parses the generated levelstat.txt. All statistics will be recorded when the game has exited.";
17 | lblChocolate.Text = "Uses the -statdump parameter and parses the generated stats.txt. All statistics will be recorded when the game has exited. ExM8 maps are only generated by CNDoom.";
18 |
19 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
20 | }
21 |
22 | private void btnOK_Click(object sender, EventArgs e)
23 | {
24 | Close();
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/TagEditForm.cs:
--------------------------------------------------------------------------------
1 | using System.Windows.Forms;
2 |
3 | namespace DoomLauncher
4 | {
5 | public partial class TagEditForm : Form
6 | {
7 | private TagEdit m_tagEdit;
8 |
9 | public TagEditForm()
10 | {
11 | InitializeComponent();
12 |
13 | m_tagEdit = new TagEdit();
14 | m_tagEdit.Dock = DockStyle.Fill;
15 | tblMain.Controls.Add(m_tagEdit, 0, 1);
16 |
17 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
18 | }
19 |
20 | public TagEdit TagEditControl
21 | {
22 | get { return m_tagEdit; }
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/TagForm.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Interfaces;
2 | using System.Windows.Forms;
3 |
4 | namespace DoomLauncher
5 | {
6 | public partial class TagForm : Form
7 | {
8 | private readonly TagControl m_tabCtrl;
9 |
10 | public TagForm()
11 | {
12 | InitializeComponent();
13 |
14 | m_tabCtrl = new TagControl();
15 | m_tabCtrl.Dock = DockStyle.Fill;
16 | tblMain.Controls.Add(m_tabCtrl, 0, 1);
17 |
18 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
19 | }
20 |
21 | public void Init(IDataSourceAdapter adapter)
22 | {
23 | m_tabCtrl.Init(adapter);
24 | }
25 |
26 | public TagControl TagControl
27 | {
28 | get { return m_tabCtrl; }
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/TagSelectForm.cs:
--------------------------------------------------------------------------------
1 | using DoomLauncher.Controls;
2 | using System;
3 | using System.Windows.Forms;
4 |
5 | namespace DoomLauncher
6 | {
7 | public partial class TagSelectForm : Form
8 | {
9 | public TagSelectForm()
10 | {
11 | InitializeComponent();
12 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
13 | }
14 |
15 | public TagSelectControl TagSelectControl => tagSelectControl;
16 |
17 | protected override void OnShown(EventArgs e)
18 | {
19 | // DataGridViews make no sense sometimes, the checks are being cleared between setting/show so reset the DataSource here
20 | base.OnShown(e);
21 | TagSelectControl.SetCheckedTags();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/DoomLauncher/Forms/Welcome.cs:
--------------------------------------------------------------------------------
1 | using System.Diagnostics;
2 | using System.Drawing;
3 | using System.Windows.Forms;
4 |
5 | namespace DoomLauncher.Forms
6 | {
7 | public partial class Welcome : Form
8 | {
9 | public Welcome()
10 | {
11 | InitializeComponent();
12 | Stylizer.Stylize(this, DesignMode, StylizerOptions.SetupTitleBar);
13 | lblInfo.BackColor = Color.Transparent;
14 | lblWelcome.BackColor = Color.Transparent;
15 | lblInfo.ForeColor = Color.White;
16 | lblWelcome.ForeColor = Color.White;
17 | lnkHelp.LinkColor = Color.White;
18 | }
19 |
20 | private void lnkHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
21 | {
22 | try
23 | {
24 | Process.Start("Help.pdf");
25 | }
26 | catch
27 | {
28 | MessageBox.Show(this, "Could not open the help file. Did you copy all the files to your Doom Launcher folder correctly?", "Help Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
29 | }
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/DoomLauncher/GameFileView/GameFileViewType.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | public enum GameFileViewType
4 | {
5 | GridView,
6 | TileView,
7 | TileViewCondensed
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/DoomLauncher/Handlers/AddFileType.cs:
--------------------------------------------------------------------------------
1 | namespace DoomLauncher
2 | {
3 | enum AddFileType
4 | {
5 | GameFile,
6 | IWad
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/DoomLauncher/Handlers/AutoCompleteCombo.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Reflection;
5 | using System.Windows.Forms;
6 |
7 | namespace DoomLauncher.Handlers
8 | {
9 | public static class AutoCompleteCombo
10 | {
11 | public static void SetAutoCompleteCustomSource(ComboBox cmb, IEnumerable