Configurable Scenery Editor
Graphs in GT can only be built programmatically, either using Mondrian or directly in Bloc. An interactive editor would be useful not only for creating diagrams such as Mindmaps, but also other kinds of graphs, such as UML diagrams, roadmaps for Lepiter databases, and executable diagrams such as finite state automata, Petri nets, and attributed graph grammars. The idea is to have a generic graph editor that can be easily configured with to style the nodes and edges and their behavior. Styles could be specified in a Grammar of Graphics fashion.
Approach: extend the GtScenery prototype to become an interactive editor for graphs of various kinds of objects.
Steps:
Most of these features are now present in some basic form.
- Add interactivity to GtScenery to enable editing of items and connections
- Add support for new kinds of sceneries: mindmaps, UML class diagrams, Lepiter roadmaps
- Add storeString support so that sceneries can be saved as methods
- Enable individual item and connection types (stencils) to customize the contextual edit menus
Backlog
-
Add dedicated InspectorStencils for examples, slides, sceneries, and scripter instances
-
Add Explanation-like dynamic links between parts of items and their explanations (needed for sceneries in Lepiter pages to explain parts of GT itself)
-
Add a dropdown dialog to set the storage method for a scenery
-
Extend mindmaps with collapsing subtrees, background colors and grouping bubbles
-
Improve support for class diagrams — spawn related classes, generate connections, mine examples and connections (extend
AssociationMinerprototype) -
Add more examples for class items and AssociationMiner
-
Extend support for validity checks — highlight invalidated connections, or alternatively only generate valid connections for semantic sceneries
-
Enable layouts being applied to just a subgraph (e.g., a subtree) of a scebery)
-
Create a scenery slide?
-
Define an API for items to query a scenery for the presence of other items and connections
-
Need a way (an event?) for an item to get a handle on its enclosing scenery
-
Change the spawning API so only new items and connections are spawned (i.e., if a requested item, such as a Lepiter page or a class item already exists, don;t spawn a copy)
-
Add support for CSS-like styling of items?
-
Add undo and redo support
-
Add support to store sceneries as JSON files (storeStrings won't scale well to large sceneries)
-
Create a scenery snippet?
-
Update the internal FAQ pages to be consistent with the latest version.
-
FIX strange bug: circle Shape changes dimension if dragged after being inspected
-
FIX UML inheritance arrowheads are pixellated
-
FIX when resizing a text item, it doesn't update as you drag
-
FIX text items don't properly resize after changing font size
-
FIX layouts to respect edited positions -- if you reposition nodes of a tree, and then apply a tree layout, nodes will jumo back to their old positions
TG suggests to build on the existing GtScenery prototype.
It might be worth taking a look at Obsidian's Canvas for some inspiration - it's quite nice.
https://obsidian.md/canvas