
     =====                                 =====
     =====     KEEP IT SIMPLE & STUPID     =====
     =====                                 =====

Scope:
  crystal-facet-uml shall draw the needed diagram types for system and software architecture.
  Only features that are expected to be needed by many projects shall be included.
  For missing features, the following extension mechanisms exist: tagges values, stereotypes, comments may show constraints.

ideas for future versions:
  @gui
  [ ] performance optimization: redraw only when shown(=visible) items have changed;
      do not redraw 3 times when changing 3 attributes simultaneously. (especially at undo/redo)
  [ ] do not redraw twice, once for deactivating a tool and again for activating another
      (this is still the case in 1.61.2)
  [ ] show a progress bar while exporting diagrams (especially for png mode)
  [ ] auto-save when losing focus; auto-reload when gaining focus (git support)
  [ ] kill -SIGTERM should save the latest changes - at least flush the database to disk
  [ ] allow creating diagrams before choosing a filename
  [ ] a "saveAs" command should allow to copy the current db
  [ ] inserting (paste) messages _and_ actors to sequence charts does not work because the actor gets a new lifeline
  [ ] while pressing the mouse button, the status bar shall not change size -> otherwise pressed element moves around
  [?] to pink-mark several objects - require shift key
  [ ] In Nav-View, show the first sentence of the Diagram-Description for better orientation.
  [ ] In Nav+Search view, no linebreaks are introduced to long words in titles
  @pencil
! [ ] activity bars on lifelines missing
  [ ] Asynchronous calls shall be slightly diagonal
  [ ] Compartments overlap with contained elements. E.g. at classifiers. Containments should be a compartment.
      --> needs a conceptual change:
      layout_visible_classifier_t has no attribute for size of contained features yet.
  [ ] sequence diagrams need if/loop-boxes
  [ ] activity diagrams need swimlanes/partition
  [?] more relationship types needed: one-way x--> and no x--x dependency (non-navigateable ends)
  [?] more relationship types needed: one-way x--> and no x--x association (maybe x is a feature?)
  [?] check dot notation at opposite relationship ends
  [ ] A "contains" relationship towards features shall not influence the grid-layouting.
      check data_visible_set.c data_visible_set_private_update_containment_cache()
  [?] allow arbitrary compartment sequences for features, e.g. tag - operation - property
  [ ] relationship ends at packages or use-cases or choices are sometimes unluckily positioned.
      A simple solution is to consider the type of the classifier when determining the weight for non-centered ends.
  [ ] A comment should only show the first paragraph. Or - like an svg-path - define other delimiters
  [ ] A comment should consider CJK linebreaks - like the json export (or should pango do this?)
  [ ] An image should show an svg-<path> without a stereotype (needed to easier recognize already known diagrams)
  [ ] An image should have a bigger icon
  [ ] A List-diagram should show symbols on the left, titles on the right. Deviate from the typical classifier layout
  [ ] A stereotype could define a background pattern and a color - additionally to the icon based on svg paths
  [ ] If a diagram shows only one parent and all other elements are children, maximize the parent
      (to support the sysml concept of "a diagram explains exactly one element")
  @io
  [ ] export formats: enhance xmi standard compliance
  [ ] xmi export is not spec-compliant for uml:Port, provided and required Interfaces
  [ ] xmi export: improve error message if exported file exists and is read-only
  [ ] uuid are preserved at json import. It is not checked if these uuids are unique in _all_ tables.
  [ ] uuids shall be converted to lower case at import
  [ ] json import: check if the input bytes are valid utf8 characters
  [ ] add test case for opening non-cfuJ files
  [ ] json export: skip empty entries: key, description and order of lifelines, classifiers without features
  @data
  [ ] some diagrams exist for completeness only - but do not contain important information. These shall be greyed out.
      --> use the "display_flags" field of "diagrams"
  [ ] links unclear:
      interactionuse-to-fragment(diag); --> use a DATA_FEATURE_TYPE_LINK
  [?] DATA_CLASSIFIER_TYPE_INTERACTION should exist as element, not be faked from a diagram
      --> see self_architecture.cfuJ / D0018
  [?] relationship ends don't have roles nor multiplicities nor dot-notation
      --> document the limitation (or is it a usability-feature?)
  [ ] introduce a TABLE diagram type showing tagged values to do resource and risk calculations
  [ ] as sysml2 preparation: clarify what things are definitions an what are usages. E.g. all part-types should be instances.
  @ctrl
      Note: There must not be model elements that are not visible. a) One cannot review, b) unclear significance.
  [ ] delete features immediately when they become invisible in all diagrams (lifelines work since 1.52.0)
      (rationale: the xmi+json export find them)
  [ ] delete relationships immediately when they become invisible in all diagrams (partly works since 1.27.3)
      (rationale: the xmi+json export find them)
  @u8stream
  [ ] universal_array_index_sorter shall provide an iterator interface
  @main
  [ ] prevent slow start (>20sec); This is a general problem for gtk applications.
      Possibly crystal-facet-uml searches and waits for a non-existing accessibility service?
      To fix, start with following environment variable set: GTK_A11Y=none ./crystal-facet-uml
  @test_fw
  @documentation

ideas for a version 2
  - support rust in application code
  - serve the html rendered version via cgi to an http server
  - gtk5 support (no GdkPixBuf anymore)
  - re-format the json format, putting more focus on contents and less on cfu data structures
    "diagramelements" -> "elements";
    "diagram_type" -> "type_id"
    "list_order" -> "order"
    "main_type" -> "type_id"
    "classifier_name" -> "node_name"
    "from_classifier_name" -> "from_name"
    "from_feature_key" -> "from_port"
    "from_node" -> "from"
    "to_classifier_name" -> "to_name"
    "to_feature_key" -> "to_port"
    "to_node" -> "to"
  - sysml2 support


