Skip to content

Playtime: Introduce action and toolbar button "Show/hide custom Playtime" #1348

@helgoboss

Description

@helgoboss

Most settings are instance-specific

It's always a challenge to decide whether a specific setting should be global (immediately affect all Playtime instances), global template-like (affect all new Playtime instances) or just instance-specific (affect only this Helgobox instance).

For Playtime, I decided to make most settings instance-specific. Only settings related to appearance and performance are global (all settings reachable via settings button in the window toolbar). The clear advantage of this decision is that users can very accurately restore a specific project and it will behave pretty much exactly the way they saved it before.

However, sometimes users want particular settings to apply to all Playtime instances.

Track templates to the rescue

That's where REAPER track templates come into play:

  1. Create a Playtime instance as usual
  2. Modify the instance settings to suit your needs
  3. Right-click the Playtime track and other tracks (if desired) and save all of it as a REAPER track template, named "Playtime" for example.
  4. In new projects, you can now right-click the track control panel and insert the "Playtime" track template.
  5. Done! You immediately get a fresh Playtime instance with your favorite settings.

An action to make this approach more streamlined

The downside of this approach is that you can't use the beloved "Show/hide Playtime" button to add Playtime, because this one will create a Playtime default instance (not your track template).

That's why I want to provide a second action and corresponding button "Show/hide Playtime (from template)" which does the same but loads a track template "Playtime" if Playtime is not yet in the project. If desired, a user can also map the popular shortcut Ctrl/Cmd+Shift+P to this action instead of the normal one.

Alternative solutions

I think this solution strikes a good balance between convenience and flexibility. Here are a few others that I have shortly considered, but I think they are not as good.

Make certain settings global

The problem with that approach is that it is often hard to predict which settings a user would like to be global or instance-specific. In some usage scenario, it would be good if a particular setting is global, in others it would be good if it's instance-specific. There's just not the one answer for that!

Example: Just look at appearance-related settings, e.g. the app theme. This is a global setting and it sounds reasonable at first. But given that you can fire up multiple instances of Playtime within one project, I sometimes wished it would be an instance-specific setting.

Override system

Another possibility would be to allow each setting to have a global default, and then making it possible to override the setting on a per-instance basis. While this sounds very flexible, it also introduces a lot of complexity. How should this be presented in the user interface so that it's easy to understand and manage for the user?

Example: My JetBrains IDE has such an override system, but even I (a tech-savvy user) can't intuitively understand it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestplaytimeRelated to Playtime

    Projects

    Status

    Done

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions