Add Project-Specific Settings (And Export Metadata!) #7865
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Basically, we have no way to store project properties. And that's okay for the most part, but for things like metadata or (in the future, the ticks per bar), we have no place to store them.
Usually for settings like that you would use
ConfigManager::inst()->value()
, and it would store it in the lmmsrc file, and maybe let the user see/edit the settings in theSetupDialog
.So, I decided to implement a
ProjectProperties
class analogous toConfigManager
, but it saves to the project file instead of the lmmsrc file. Also, I added aProjectPropertiesDialog
analogous to theSetupDialog
to let the user edit them.I copied a lot of code from
ConfigManager
andSetupDialog
, so they do act/look quite similar. (AlsoProjectPropertiesDialog
is kind of a mess)Images
To demo the functionality, I've added a way to edit the export metadata of the song. (And yes, this is functional when exporting wav, ogg, flac, and mp3, so now you can edit your audio metadata from within LMMS!)
Note, I'm not done with the UI! It looks really bad right now but I want to improve it (I would love feedback)
Usage
Anytime you want to access/save a project-specific setting, just put
at the top of your file, and then do
to access a value, and
to set it.
The settings will be saved to the project file whenever the user saves the project.