Settings no longer revert to defaults if a property is invalid, rather that property is just ignored. This will make changing settings cleaner for users, as newer versions won't wipe their settings anymore.
Settings now store a version property, which can be used to adjust values in the future if the version is outdated.
Added missing value validating to newer settings.
Resetting settings to default will now preserve scan and export paths.
Fixed scanner current file progress bar initially starting at full.
Renamed -scanbin command line option to -databin, and added -scanbin command line option that reads .bin files the same way .iso files are read. No UI option yet.
Fixed errors during scanning failing to put the PreviewForm out of the scanning state.
Fixed progress bars not updating their position to max when the scan is finished, this was due to Vista introducing animation to the progress bar value changing, there's a hack that can be used to instantly change the value.
Animation object tree view items no longer have checkboxes.
ScannerForm and ExportModelsForm Show functions now return the options instead of a boolean. The options must be used by the caller to execute the scan/export action. This is useful, since PreviewForm now wants to get the DrawAllToVRAM option for scanning without help from Program.
Major optimizations for scanning
ScanThread now uses MTA ApparentmentState.
Scanning a file normally now wraps the scanner in a stream that remembers its own position, since asking for and changing the position of a file stream is expensive.
Scanning interactions with the form are now done through a progressCallback. Because of this, Program now has no attachments to PreviewForm besides the fact that it creates it during Initialize.
Progress callbacks now store the most recent report and add results to populate. The report updating and populating are done on a timer, with populating being very infrequent to reduce constant UI lag. These can be adjusted as advanced settings in the settings.json file (stored in seconds).
Tree View item children are now populated via lazy loading. The necessary information is stored in tags.
Tree View and Image List View items are now always added via AddRange (when possible), this removes the need for Begin/EndUpdate (which can actually slow things down a bit...).
Optimized BinCDStream.Seek a bit, since apparently that's a very performance critical method (changes with scanning BFF models could change time from 2m8s to 3m8s).
MOD, PMD, and TMD parsers now store re-usable array fields for vertices and such, this reduces the strain on the garbage collector from constantly collecting large arrays for every file or failed file. Note that it's now very important to make sure you compare against the actual count, and not the length of these arrays.
Major optimizations for scanning