Requirements

This page will try to list some of our initial requirements for Shrapnel. It's a rather chaotic and unordered list, but it's at least better than nothing.
  • It should be a C# control
  • All drawing should be anti-aliased
  • Two types of visual elements should be supported:
    • Nodes (with any number of connectors on them)
    • Cables (from one connector to another connector)
  • A user should be able to define himself how everything is drawn
  • All keys/mouse behaviour should be customizable
  • It should be possible to display a grid
  • The view should support:
    • Panning
    • Zooming in and out
    • Zoom to extent
  • The interaction should consist of:
    • Selecting elements (both cables and nodes)
      • Through area selection
      • Selection set manipulation through ctrl/shift keys
      • Select all / deselect support
    • Moving nodes around (by dragging)
    • Deleting nodes
    • Adding nodes
    • Copying/Cutting/Pasting nodes
  • It should be possible to attach a "user object" to any element (either node or cable)
  • It should be possible to serialize and deserialize the whole workspace, while preserving the user objects

Based on this list of requirements we made a Rough system design.

Last edited Dec 23, 2008 at 7:47 PM by Gloei, version 2

Comments

Gloei Dec 25, 2008 at 6:39 PM 
Okay, I've created new issues for everything on your list that still has to be done.

WalterTamboer Dec 23, 2008 at 8:10 PM 
- It should be a C# control
- All drawing should be anti-aliased
- Two types of visual elements should be supported:
Nodes (with any number of connectors on them)
Cables (from one connector to another connector)

Issue: Add support for drawing nodes.
Issue: Add support for drawing cables.
Issue: We should create a plan to categorize connectors. There should be input and output connectors but maybe we want different kinds such as in Epic's Kismet.
Issue: Add support to determine if the user clicked on a cable, a node or a connector.
Issue: Add support to let a cable connect from a connector to another connector.
- A user should be able to define himself how everything is drawn
Issue: Add support for themes? This can be done in multiple ways. Do we always want to change the functionallity of nodes? In that case we can just derive from classes else we should create a ThemeBla something. We should make a plan for this.

- All keys/mouse behaviour should be customizable
- We should make a plan to do this. We probably want some Action Mapping approach?

- It should be possible to display a grid
- Issue: The grid should support the zooming.

- The view should support:
Panning
Zooming in and out
Zoom to extent

Issue: Add support for panning. Panning will probably be done by moving the mouse while a key is held (ctrl?).
Issue: Add support for zooming. Zooming will probably be done by the scroll wheel and a key/mouse combination (holding ctrl and moving the mouse up or down for example).
Issue: Add support for zooming to extent.

- The interaction should consist of:
Selecting elements (both cables and nodes)
Through area selection
Selection set manipulation through ctrl/shift keys
Select all / deselect support
Moving nodes around (by dragging)
Deleting nodes
Adding nodes
Copying/Cutting/Pasting nodes

Issue: Support for drawing a selection rectangle.
Issue: Support for determining which elements are selected (the ones in the selection rectangle).
Issue: Support for moving groups of elements such as the selected elements.
Issue: Support for deleting the selected elements.
Issue: Support for selecting everything on the workspace.
Issue: Support for deselecting everything on the workspace.
Issue: Support for duplicating nodes. This function can than also be used for copy pasting.
Issue: Support for cutting nodes.
Issue: Support for copying nodes. See duplication.
Issue: Support for pasting nodes.
- It should be possible to attach a "user object" to any element (either node or cable)
Issue: See above.
- It should be possible to serialize and deserialize the whole workspace, while preserving the user objects
Issue: See above.