Since Qt 6.7, type annotations are enforced at runtime.
Typing the `sourceSaveDialog` as Dialog (or Platform.FileDialog) breaks the value received by the function and its behavior.
* API
Instead of having a single `load` function that exposes in its API
some elements only applicable to initializing a graph from a templates,
split it into 2 distinct functions: `load` and `initFromTemplate`.
Apply those changes to users of the API (UI, CLI), and simplify Graph
wrapper classes to better align with those concepts.
* Deserialization
Reduce the cognitive complexity of the deserizalization process
by splitting it into more atomic functions, while maintaining the
current behavior.
Remove dynamic tooltip for cut/copy actions that displays all
selected node names:
- This inline textual information is hard to process as a user.
- Avoid binding to and iteration over the selection.
Prior to this commit, even if the current graph had never been saved,
we ended up going through the "save current file" use case rather than
the "save as" because the `saveAction` button was always enabled.
This led to the callback being fired before the "save as" dialog had
been closed.
All the actions, file dialogs and message dialogs that are specific to
the application are removed from `main.qml` and placed instead in
`Application.qml`.
Only elements and functions related to the main window remain in
`main.qml`. As such, the `ensureSaved` and `ensureNotComputing` functions,
used when closing the main window, remain in `main.qml`.
Message dialogs that may be opened by these functions however are moved
to `Application.qml` as they are application-specific and can't be opened
on the homepage.
Application dialogs that may need to be called when triggering the closure
of the main window are aliased from `Application.qml` to remain callable
through the `StackView`.