storybuilder-org / StoryCAD

StoryBuilder - CAD Software for Fiction Writers
https://storybuilder.org/
GNU General Public License v3.0
14 stars 8 forks source link

Add a Structure tab to the Problem Page. #757

Open terrycox opened 2 months ago

terrycox commented 2 months ago

Presently StoryCAD's Masterplots, Dramatic Situations, and Stock Scenes plotting tools insert Scenes after the current node to indicate story structure. This has several issues. The first is that dragging these inserted nodes elsewhere in the Story Explorer tree loses the relationship that was created when it was inserted. The second is that it doesn't fully reveal the hierarchical/recursive nature of a story's structure: the story problem can have complication and sequence subproblems, and those can have their own subproblems; at any point in this hierarchy, scenes can also be placed, until finally at the leaves the structure is entirely a set of scenes. A third problem is that a MasterPlots or Dramatic situation scene contains instructions or advice to the user, and these are placed in the Notes tab but are not clearly visible to the user.

I propose adding a new 'Structure' tab to the Problems Page, which addresses these issues. The tab would hold a repeating element such as a Listview, which contains the direct children of the Problem, which are either other Problem or Scene story elements. Invoking the plotting tools would insert their output as a list of nodes into the Structure control rather than as nodes in the Story Explorer tree. A row in the list would consist of three columns: the label, the notes that describe that story beat, and the Problem or Scene story element itself (as it's GUID but displaying its name. A list of problems or scenes (either a column on the page or a popup) can be used to allow drag and drop of selection to add a story element to a row.

In addition to adding a story structure from the plotting tools, it might also be possible to add a Problem or Scene by inserting rather than updating a row. The label might be assigned a value of 'unspecified' or such.

A Problem or Scene could be added to multiple rows. A scene can serve multiple purposes: it can advance the plot, reveal character, etc. These can be different story beats in a structure chart. That's also true for Problem story elements: a sequence, for instance, is just that.

It's possible that adding subproblems to subproblems could update not only the parent Problem's Structure tab but also show on that story element's parent's Structure tab, and percolate up all the way to the Story Problem, revealing the entire story structure.

There may be better controls for this than a Listview, and we should check the WinUI Gallery for them.

terrycox commented 2 months ago

Some additional thoughts:

A Scene can also have a structure tab. It wouldn't have any structural children and couldn't be a child of another Scene, but it could have multiple Problem parents.

Speaking of which, a Problem might or might not allow multiple parent StoryElements, but it can certainly have various 'structure' slots on one Problem. The data structure of a structure relationship needs to be clarified. It's relative to the node it's on, like a Relationship. It's a different kind of relationship.

I need to clear/remove logic to undo a mapping.

Node deletion needs to check these relationships. I ought to verify that it checks for Character relationships as well.

Save/load processing (StoryReader/StoryWriter).

The other control possibilities are ItemsView and ItemsRepeater. ListView has drag and drop ability, though.