Started to work on getting the profile images directly
into the imagelistview rather than doing it via files.
Wasn't a fan of doing icons by file but it was the fastest
way to getting things going. Now going to try and sort
it out so I feel a bit bettter about the code.
Simplified the ApplyingChangingForm size positioning
and made the messages a bit less technical. Also added
in a submessage so that can explain things a bit better
in the future if we need to.
Finished the rework of the DisplayProfilesForm so
that the correct states are kept throughout the
lifecycle of the display profile. It handles changes
to current display profile, and seems to work fine.
Future improvements will be to make the
imagelistview use bitmaps in memory rather than
the images on disk, but that will be done under
another branch.
Display Profile Form now works and handles all the
adding, removing of the display profiles. I've fixed
the comparison (Equals/Contains) for the various
forms so that profile.equals() works well. This fixed
IsActive and IsAvailable as well.
The existing comparisons didn't work well, and my earlier
changes didn't help at all. Decided to recreate them from
Microsoft's latest documentation. Nearly completed it but
need to finish off SurroundTopoly and do proper testing.
The DisplayProfilesForm is mostly working, but it doesnt
cope with invalid profiles yet. This is where the profile
was set in a different configuration of screens, but those
screens have physically or OS level changed, meaning the
profile can't be used. This is handled in the Profile.IsPossible
function, and currently that appears to be broken. It needs
fixing.
Nearly have it working. It now saves, loads and renames
the display profiles. Need to fix up the delete, apply buttons
and make it remove the old ilv images when we rename
profiles.
It seemed to me that it would make more sense to
separate tht two main tasks completely and have them
independent from each other in the program. So I
created a new MainForm that opens up either a
'Setup Display Profiles' or 'Setup Game Shortcuts'
window depending on what the user clicks.
The idea is that Display Profile setup only happens
when the app is first installed, and after that it's just
the game shortcut that gets updated.
Also created a first attempt at a new HeliosPlus Icon.
The icons were way too low res due to the use
of the built-in windows fileextracticon which only
extracts the 32x32 icon. This was making the list
of games look pretty bad. Fixed it now so it extracts
the PNG where possible. Also adjusted the extraction
so that the files are all extracted when the Shortcut form
is loaded.
Also fixed the commandline options that result in
a Steam game being run, so that they now work. Also
fixed up the names of the extracted icons and made the
suggested naming of the shortcut more reliable and
less likely to include usable characters.
The current Icon Library is old and I haven't been
using it properly :). I need to use something different
and the IconExtractor library is still being updated
whereas the IconLib.Unofficial isn't any longer.
Had to adjust both the order and structure of the command
line so that the shortcuts would work, and wouldn't make
people crazy! And adjusted the shortcut creator to make sure
it generated correct shortcuts. Still a lot of edge cases sitting
in there so need some good testing.
Also disabled the CreateShortcut option, as it doesn't really
work with the future combined list of multiple game library
families.
So the main command line options now are:
- SwitchProfile permanent ... = swaps to a new display profile
- SwitchProfile exe ... = temp swaps to profile and runs an exe
- SwitchProfile steam ... = temp swaps to profile and runs a steam game
- SwitchProfile uplay ... = temp swaps to profile and runs a uplay game
- EditProfile ... = goes straight to the edit display profile screen
- <none> = starts up the graphical UI.
Added in a binary VDF reader to find and figure out all
of the Game Icons, Exe locations, Names, Ids and
Install Dirs all from the local file syste,m. It makes the
shortcuts populate within 1 second, rather than the
60 seconds it was taking beforehand. Users should
love the newfound responsiveness.
Renamed app to HeliosPlus namespace so that the updated
changes don't interfere with HeliosDisplayManagement if
that is also installed. The fact that I've changed so much of
the app means that my changes would be unlikely to be
accepted by Soroush, so I'm best to release this work in a
similar way to other projects like Notepad++, by keeping
the same root name, and adding a plus.
I've also changed the Shortcut form to put all the games
in a single list to reduce the number of clicks a user has to
do in order for them to create a shortcut. I have begun to
prepare the form so that it will support multiple game
libraries, but now I am at a point that I need to fix the Steam
and Uplay game detection mechanisms so that they report
the correct information for the lv_games list view.
The programme compiles with the commandline changes
and the changes to the shortcut form, including aligning
the shortcut generation with the new command line.
The Uplay skeleton has been disabled for now as I'm
concentrating on getting the commandline args working
and fixing the annoying errors in the way the MainForm
and the ShortcutForm work. Probably have a couple more
days work to fix that.
Changed to use natemcmaster's CommandLineUtils library to provide
flexbility for command structure, and enable the use of custom
validators which allow us to make sure that the command line options
provided are accurate. This removes the need for all the individual
exceptions being thrown across the main application.
Also started the modification of the CreateShortcut Form to make
it easier to use and more self explanatory.
And finally started the integration of Uplay into the application so
that users can use Uplay as well as Steam to select their games.
Converted back to CommandLineParser as there is better ability to
format the Help Text for error messages generated by additional checks
we're now performing after the commandline options have already been
parsed.
Added ability to use profile name within speech
marks instead of profile ID if the user wants. Added
initial set of checks to warn the user when the
command line options are in an incompatible
state (wrong options used together).
Migrated to the latest .Net Framework (v4.8) and changed to
System.CommandLine.DragonFruit for the parameter processing
as CommandLineParser completely altered their required
programme structure which meant something had to change.
Figured using Microsoft's own poduct would be best.