tralph3 / Steam-Metadata-Editor

An easy to use GUI that edits the metadata of your Steam Apps
GNU General Public License v3.0
170 stars 19 forks source link

Complete app rewrite with GTK GUI #50

Open tralph3 opened 3 months ago

tralph3 commented 3 months ago

Hi all. This is not yet ready for merge, but it is quite close to completion and I wanted to share the progress so far.

When I initially wrote SME I wasn't very skilled in software development. I don't think I'm that good today either, but I'm better off than I was back then, that's for sure.

Instead of dropping everything into a single gigantic file, the rewrite is a more modular and structured program, which will hopefully pay off in the long run when something breaks.

Instead of having to dig through spaghetti code, I'll have to dig through modular spaghetti code, which is an improvement.

I have also separated the logic for the parsing (encoding and decoding) of the appinfo file, and included one for text VDF files which allows me to easily retrieve the installation paths of the apps.

Those modules are also unit tested! Hopefully that'll add some robustness to this thing.

The GUI itself contains more logic than I would like, but most of it is about extracting and setting data into text fields, the data itself is held and managed by the "models", and the GUI just asks the models for data, or tells the model to save some data.

There's also a very simple but serviceable event system which the GUI uses to react to user events.

And one of the best things of the rewrite is that I've ditched Tkinter completely. Now it's written entirely in GTK4 with some libadwaita components here and there.

GTK4 feels much smoother and looks much nicer.

I have decided to continue with the idea of mimicking somewhat the Steam theme, instead of using the system's theme, since it's not a program that you'll be using that much. If there's enough demand maybe I ditch this, don't know.

I do realize however, that introducing a GTK GUI means introducing a dependency on GTK.

Whereas before SME worked with Python only (since it ships with Tkinter), now it also needs GTK.

I doubt this will be an issue to most, but when I merge this I'll make a release of the last Tkinter version in case anyone happens to need it. It will be unmaintained tho.

Here's a preview of how the new GUI looks like: image

Tell me what you think. I'll just leave a checklist here of what's yet to be done: