Workspaces

Between sessions, Finsemble will save and relaunch with all windows with the same position. Components that are logically integrated are reloaded with the same content. End users can save multiple workspace layouts and easily switch between groups of applications for different tasks.

In other words, a workspace is simply a collection of windows that persist between sessions.

What types of windows live in the workspace?

The easiest way to understand what is and isn't stored in the workspace is to ask yourself this question: "Does the component need to exist across multiple workspaces?" If the answer is "Yes," then it is not stored in the workspace. Menus, toolbars, dialogs, and chat windows are not stored in the workspace.

In the diagram below, the red components are application-level components. They're workspace independent. The blue components are part of the workspace and will restore at the proper place when a new session is started. Workspace

Why is there a distinction between window and component?

We only allow one component per window. Despite the one to one relationship, windows have very different concerns from components. The window shouldn't concern itself with the symbol on the chart, and the chart shouldn't concern itself with where it is placed on the screen. The disctinction speeds up debugging—you don't need to look in the component to figure out an issue with the window's state.


Set default workspaces

You define default workspaces by adding them to the config. By default in Finsemble seed, they are defined by finsemble-seed/configs/application/workspaces.json.

Workspaces defined by the config are persistent. If an end user deletes them locally, they will be recreated from the config the next time Finsemble restarts.

To add workspaces to your config:

  • Create the desired workspace in Finsemble.
  • Export the workspace.
    • You can export the workspace using the Preferences menu. The Workspaces section contains tools allowing an end user to export a workspace configuration.
    • You can also export the workspace using the Workspace Client: WorkspaceClient.export.
  • Add the exported workspace's configuration to finsemble-seed/configs/application/workspaces.json under "workspaces" as an array.

For example, each object in the array below represents a workspace:

"workspaces" : [
	{ … },
	{ … }
]

Active workspace

The current workspace that is open is called the active workspace. The active workspace is actually a copy of the stored workspace. For example, if "Workspace 1" is open, the active workspace is a copy of "Workspace 1."

If you make changes to the active workspace, those changes are not made to Workspace 1 until you save the changes.

The active workspace is stored by the Storage Client using the topic "finsemble.workspace.cache". We recommend not using remote storage for this data because the active workspace is constantly being written. Every change an end user makes to window position, a component's saved state, groups formed and disbanded, etc., constantly update the active workspace. A remote store will degrade performance and use bandwidth.

When saved, all workspaces are stored by the Storage Client using the "finsemble.workspace" topic.

The Config Reference details the topics of the Storage Client and lists their default values.


check   A workspace is a collection of windows whose state and position persist between sessions.
 

Further reading

For more information, check out the Workspace API Documentation.

Understanding how the Finsemble application handles start-up will provide additional context. The Build Process tutorial can be found here.

To learn how components link and share data, proceed on to Linking.