    Purpose          : wish list.
    System           : TCM
    Version          : 2.01
    Last Update	     : Feb 12, 2001.
    Authors          : Frank Dehne / Henk van de Zandschulp
    --------------------------------------------------------------

    MAXITEM = 334

    --------------------------------------------------------------

    Every wish has a sequence number and every wish is annotated with
    a priority 0, 1, 2 or 3.  These priorities mean:

    (0): is done. These are listed in the file Wishlist.done in
         the order by which they are done.

    (1): should _not_ be done, with explanation why.

    (2): should be done (low priority).

    (3): should be done (high priority).

    Wishes with a 2 or 3 are real wishes. These wishes are in one of the
    following categories:

    A. Distribution and porting of TCM.
    B. New editors.
    C. Features for existing editors. These have the sub-categories:
       C1. For all editors.
       C2. Only for table editors.
       C3. Only for diagram editors.
       C4. For specific diagram editors.
       C5. Only for tree editors.
    D. Implementation.
    E. Documentation.

    Wishes labeled 0 and 1 can be found in the file WishList.done.

    A. Distribution.
    ----------------------------------

    233(2) Make compilations for other Unixes such as HPUX, IRIX, AIX and OSF/1.

    239(3) Send announcement to every site/newsgroup that has info about TCM
       (or should have info about TCM) that TCM 2.0 exists:
    	news:comp.os.linux.announce
    	http://www.slashdot.org
    	http://www.linuxtoday.com

        already listed, send update:
    	http://www.icewalkers.com
    	http://SAL.KachinaTech.COM
    	http://www.appwatch.com
    	http://www.freshmeat.net
    	http://www.lesstif.org
    	http://www.linuxapps.com
    	http://www.fokus.gmd.de/linux/linux-softw-xappl.html
    	http://stommel.tamu.edu/~baum/linuxlist/linuxlist
    	http://www.execpc.com/lsm/LSM
    	http://www.linuxlinks.com

        to be listed:
    	http://www.software-engineer.org
    	http://www.objectsbydesign.com/tools/umltools_byPrice.html
    	http://www.linuxberg.com
    	http://download.cnet.com

    B. Building new editors.
    --------------------------------------
    * worked out further some place else in a requirements & design document *

    Building UML editors:

    - Static Structure Diagrams (TSSD)

    - Use-case Diagrams (TUCD)

    - State Charts (TSCD)

    - Activity Diagrams (TACD)

    - Collaboration Diagrams (TCBD)

    - Sequence Diagram (TSQD)

    - Component Diagram (TCPD)

    - Deployment Diagram (TDPD)

    C. Updates and extensions to existing editors.
    --------------------------------------------------------

    C1. For all editors
    --------------------------------------------------------

    007(2). The user can save a configuration file from TCM. Configuration
       changes will be stored in this personal file (.tcmrc) and these will
       be loaded automatically on startup of an editor.

    082(2). Tasks which only can be performed with the use of the mouse should
       also be performable by a keystroke (or a combination of keystrokes).

    088(2). Show/Save/Print the annotations of all (selected) shapes or cells
       at once (show in text-window, save/print apart from the drawing).

    139(2) Add extra entries to the configuration file tcm.conf for the
       user interface colors and fonts (instead of the separate file with
       X resources).

    169(2). Possibility to change the page margin width/height on printing
       (set the minimal distance between the diagram or table and the page boundary).

    186(2). Testing on name equivalence: ignore white spaces (space, tab, newline)
       at the beginning and the end of a name. Every sequence of more than one
       white space is equivalent to a single space. Uses implementation item 252.

    191(2). Combine all printer options in one dialogue window (instead of all
       these different menu items). I.e. printer name, #copies, print command (and
       other related commands), tumbled, duplex, banner etc. in one
       PrinterOptionDialog.

    194(2). Printing from a text dialog uses the external programm text2ps. This
       should be replaced by something more powerful, for the options of text2ps
       are rather limited (e.g. no support for colors, fonts or alignment).
       Uses implementation item 253.

    195(2). All coordinates should be floats (real numbers) instead of integers.

    210(2). Make the menu under button-3 context-sensitive in the editor. In the
      "background" the current Edit menu should be displayed, but clicking button-3
      above a shape/cell, only a relevant set of commands for this particular
      shape or cell should be displayed.

    220(2). Specify colors also by red-green-blue value (instead of by color name)
      in the color chooser. Colors will also be written in the TCM files as
      "#RRGGBB" (because not every possible color has a name). Users can then
      specify a color by three sliders in the color chooser dialog (in addition
      to the current method of choosing colors from a fixed list of color names).
      The preview immediately shows the color associated with the slider values.

    221(2). Implement bubble-help labels with multiple lines of text (now
      we have only single lines).

    229(2). Undo/Redo for Load and New. This means also that Load and New
       become command classes.

    306(2). Undo/Redo for Update Node/Edge/Cell annotation.

    243(2). Implement drag and drop of shapes and subjects (extension of the
       cut-paste buffer) between two different editor processes (now it only
       works within the same editor process). It should at least work for
       editors of the same type and also for editors with similar subjects
       such the two tree editors and between the different table editors.

    244(2). Make a prototype of some simple code-generator from a TCM-file. It's
       a set of extendable parser+generator classes for the TCM file format that
       can be extended by other users with specific needs.
       Possible languages to generate are XML, HTML, C++, Java, SQL, ASCII.

    249(2). Set text font, text color and text alignment in the text edit
       window (= the text window used for outline editing).

    270(2). Read the fonts that can be used in TCM from a font definition file.
        This makes it possible to extend TCM with Palatino, Lucida and
        others that are not available on every system.

    280(2). File locking mechanism. A document file that is being edited by
        some editor can only loaded read-only by another editor process
        (overriding should still be possible and removing the lock too).

    284(2). New print option: print current (chosen) page in the drawing
        area or print all the pages in the drawing area.

    289(2). Cut+paste of (parts) of text labels via the Motif cut-paste buffer
        (just like you can do within the motif textfields such as the document
         name).

    290(2). Connection of TCM with BSCW (groupware) system.

    291(2). Startup online HTML user manual pages in Netscape from the
        TCM editor.

    300(2). Export to Fig format 3.2 instead of the older 3.1 format.

    296(2). Add possibility to export diagrams in XML format.

    308(2). All editors should be expanded with the UML Notebox symbol, which can
    		be connected to all Nodes and Edges by means of a Dashed Line.

    309(2). Add option to transform the Inline Editor into a Form Editor, adjusted
    		to the Shapetype being edited. Default this option will be "Inline
    		Editor", but can be set to "Form Editor" when needed.
    		Every shape has at least a comment field. Some examples :
    		For a relationship line, the following fields can be specified :
    			Name / RoleName1 / Constraint1 /  RoleName2 / Constraint2 / Comment
    		For a class, the following fields can be specified :
    			Name / Multiplicity / Stereotype /  Properties /
    			Attributes (list) / Services (list) / Operations (list) /
    			Signal receptions (list) / Comment
    		Each editable field should have a corresponding Liteclue help text
    		assigned to it.

    310(2). Add possibility to export diagrams in GIF/JPG/TIFF/PDF format.

    311(2). TCM preferences file should be editable from within TCM.

    312(2). TCM preferences should be adjustable online within a single TCM session.

    313(2). Add possibility to merge all selected duplicate nodes into
    		one (== first selected) node.

    314(2). Show duplicate nodes with a number in their upper left corner,
    		e.g. "(3)" or :"(3/5)" instead of "*".

    315(2).	Option "Document | View Source" should always be possible. The source
    		being viewed should reflect the state of the current document being
    		edited, not just the state of the version last saved to disk.

    C2. Changes regarding all table editors.
    ----------------------------------------

    029(2). Span a rectangle of two or more selected adjacent cells to one
       large cell. The text will be aligned as if only a single cell exists.
       The text of the left-upper cell remains visible. The other cells will
       not be displayed.

    030(2). Unspan a spanned cell.

    031(2). Hide all text protruding ('sticking out') from a cell (when
       autoresizing is off). Some mark (e.g. a small arrow or scrollbar) should
       be added to the cell, indicating that the cell contains more text than
       could be displayed.

    032(2). Add a caption text at the bottom of a table.

    034(2). Row and column numbers should remain visable when a table is scrolled.
       Currently only numbers at the first and last row/column are displayed.

    136(2). Outer left column and uppermost row remain visable, even after
        scrolling (row/column numbers as well as row 0 and column 0 itselves).

    143(2). In the outline editor the text part of the edit window should be
        about the same width as the cell itself. In this way you can anticipate
        whether your changes will eventual result in a table resize or not.

    145(2). Fixed column width (only autoresize of row height).
        As an option all text protruding will be hidden (see 031) or the
        text height will be adjusted, eventually using some kind of text
        abbreviation algorithm.

    146(2). Fixed row height (only autoresize of column width).
        As an option all text protruding will be hidden (see 031) or the
        text width will be adjusted, eventually using some kind of text
        abbreviation algorithm.

    147(2). Pack table operation: apply autoresize to all rows and columns.

    150(2). Horizontal table split (the right part of the table will be placed
        below the left part of the table). As an option the left column can be
        copied completely too.

    151(2). Vertical table split (the bottom part of the table will be placed
        to the rigth of the upper part of the table). As an option the upper
        row can be copied too.

    152(2). Optional double text entry (with a slash) in cell(0,0).

    162(2). Table mirror-operation in diagonal running from the left top to the
       right bottom of the table.

    164(2). Implement fill colors for table cells.

    197(2). Implement line colors for line pieces.

    217(2). Implement text colors for cell texts.

    228(2). Underlined texts in table file format.

    264(2). Hide selected rows or columns (without deleting them).

    265(2). Show bitmap/pixmap (read-in from a file) in the table cells
       instead of text.

    267(2). Make the drawing area so that it only shows the table.
       It's not necessary to show much "white space" like in the
       diagram editors.

    287(2). Move/copy multiple cell texts in one command (instead of
      the awkward cut/copy+paste).

    299(2). Export TCM tables as HTML tables.

    307(2). Implement correct behavior when the number of rows or columns
      is 0 (by user commands or because this number is written into file).

    316(2).	Add option to print additional table description.

    C3. Changes regarding all diagram editors.
    ------------------------------------------

    035(2). Show all relevant attributes of a subject (entitytype, data process,
       relationship etc.) in a separate window, in which all attributes can be
       edited. (Now you don't have to 'aim' at the attributes of a line by trial
       and error before hitting for example the cardinality constraint you want
       to edit). This is an extension to the outline editor (which can edit only
       one attribute (=textshape) at a time).

    036(2). Extension to 035 in which you can select some referred subject (eg.
       the nodes of a edge, or the parent in a taxonomy). By clicking this
       in the edit window, a new edit-window will be opened for the referred
       subject subsequently.

    043(2). Whenever two lines lead to the same node (rectangle or ellipse-shaped),
       the nearest side will be preferred, even if the other side is longer or
       connecting to that side would result in a better line distribution.
       Adjust this in such a manner that the side selected can be connected to
       and results in a wide spaced line distribution between the two nodes.

    044(2). After appending a diagram, nodes with the same type and the same
       name should be shown as duplicates.

    045(2). Set defaults in the config file tcm.conf, i.e. per editor and per node
       shape type or line type the following attributes:
    	type name, subject type name, default size, bitmap icon, line color,
            text color, text font, text alignment, fill color (only node shapes),
            line width, text underlining, fixed name, has index label (only
            node shapes). This is an extension to 006.

    047(2). Annotations should be made visible as a comment text in the diagram,
       possibly connected to the subject with a dotted line.

    061(2). Possibility to show duplicate lines (with a '*' notation).

    204(2). Bezier-curves with more than two points.

    242(2). Don't let lines cut through their (name) labels. Leave a little gap
       around the name label.

    248(2). If 246 is implemented: Store separate font for each textshape. E.g. the
      list of attributes can have a different font/point size than the name
      textshape of the node.

    268(2). Set defaults within the editor per node shape type or line: node
      shape size, line color, text color, text font, text alignment,
      fill color and line width.

    272(2). Change the default position of the text shapes within
       a node shape. Each textshape gets some relative position inside
       the node shape such as TopLeft or BottomRight.

    273(2). Distribute node shapes command: selected nodes are positioned
       with equal distances.

    278(2). Selection operation to select the shapes of all nodes/edges
      of a certain type.

    279(2). Operation to make all the shapes in the selection invisible
       (generalization of Show-isa and Hide value types in TERD).

    282(2). Operation to make all shapes that represent a certain node
      or edge type invisible (such as "Hide All DataStores" etc.)

    283(2). User can specify which node shape types can have an
      index number label and which don't.

    285(2). Printer option in all hierarchic diagram editors: Print
      current level or print all levels.

    286(2). Extra command in context sensitive menu of a single
      shape: copy+paste in a single command to make a quick copy without
      affecting the cut-paste buffer.

    294(2). "Move nodeshape label"-option. Possibility to move labels within e.g.
      a box. See also 295(2).

    295(2). "Sticky label"-option. When set, after moving an line or one of its
      connecting nodeshapes, the label does not return to its default position.
      Instead, a new position will be determined based on its relative position
      to the original line or nodeshape.

    297(2). Always display duplication asterisks within the nodeshape boundary.

    298(2). Improve line distribution of edges that connect the two
      same nodes. See for an example $TCM_HOME/doc/specs/line-distribution.gd.
      A possible algorithm is given (in Dutch) in
      $TCM_HOME/doc/specs/line-distribution.txt.

    304(2). Allow lines to be connected to Bezier-curves.

    317(2). After appending a diagram, show all nodes with the same name as
    		duplicates (only when duplicate names are not allowed).

    318(2). Add option : Show only the nodes having a connection to the selection.

    319(2). Add option : Show all "mouse-sensitive" parts of a selected shape.

    320(2). Future wish : conversion between different diagram types.

    C4. Changes regarding a specific diagram editor.
    ------------------------------------------------

    042(2). TERD: Replace an entity type node by a relationship node, or
       vice versa. Idem dito for entity type <-> value type.

    048(3). TCRD/TSSD/TSTD: move attribute/operation to another position
       in the same box or arrow. Uses implementation item 246.

    049(2). TCRD/TSSD/TSTD: move attribute/operation to another box or
       arrow. Uses implementation item 246.

    050(2). TCRD/TSSD: optional syntax check of attribute declarations:
        'name' or 'name:type' (in check document?). Uses impl. item 252.

    051(2). TCRD/TSSD: optional syntax check of action declarations: 'name' or
            'name(type1,...,typen)'. Uses impl. item 252.

    056(3). TERD/TCRD/TSSD: add SubjectAreas / Packages (structure simular to
      hierarchic DFDs). Will be implemented as a special node type.
      This node type will be represented as an ordinary box (closed state) or
      as a huge box enclosing other shapes (open state).
      Uses implementation items 177 and 254.

    057(3). TERD/TCRD/TSSD: Show/hide contents of a selected subject area /
       Package, i.e. go from closed state to open state. Uses implementation
       items 254 and 256.

    059(2). TERD/TCRD/TSSD: Contents of subject area/package can be printed
       per page. Uses implementation item 257.

    060(3). TERD/TCRD/TSSD: for every specialisation (static or dynamic) a
       so-called ``specialisation-attribute'' with a finite number of possible
       values exactly corresponding to the subclasses. For example a
       specialisation-attribute ``contract type'' of an employee having the
       values ``temporary'' and ``permanent'', being two dynamic subclasses of
       employee. The specialisation-attribute must be visible within the diagram.

    063(2). TCRD: role class (player) (Discussed in course material Wieringa).

    089(2). TERD/TCRD/TSSD: single document inheritance check for
       attributes/operations/components. An attribute/operation/component
       should not be added to a class whenever a superclass or subclass does
       already contain an attribute/operation/component with the same name
       (mind the specialisation of an attribute: so only a warning will be given).
       (remark: has already been implemented in CSOD).

    157(2). TERD/TCRD: Show contents of one subject area only (hide the rest).
       Uses implementation item 257.

    163(2). TGD: Bitmaps or pixmaps as shape type (a box with a small bitmap
       or pixmap that can be read-in from a file). Bitmaps are black-and-white,
       pixmaps are colored.

    200(3). TSTD: Optional syntax check for transition labels. Uses impl. 252.

    201(3). TSSD: Optional syntax check for constraints. Uses impl. 252.

    207(3). TSSD: show generalization/aggregations as a 'tree'.
      Add a special view-mode, similar to the tree-editors, in which the lines
      are neatly drawn. In order to achieve this, the view-mode should be added
      as a functionality to libdiagram and the drawing algorithmes should be
      adapted to all cases possible (within the tree-editors not all cases
      behave correctly).

    208(3). TGD: add two option menus at the edge buttons to select every
       possible combination of line end types (~= arrowpoints).

    227(2). TDFD,TEFD: Show/save/print minispecs (and other data-process
       attributes) of all/selected data-processes at once. Similar to 088.

    245(3). TDFD,TEFD: Implement hierarchic DFDs. Implementation based on 177.

    247(3). TCRD/TSSD/TSTD: attributes/operations can occupy more than 1 line.
       Uses implementation item 246.

    321(2). TEFD/TDFD: Show external entity as rectangle (instead of square).

    322(2). TEFD/TDFD: Allow bi-directional arrow between Data Process and
    		External Entity

    323(2). TEFD/TDFD: Option "create/edit indices" should be changed into
    		"view indices", allowing us to show or hide the indices. Indices
    		will always be created, but they can only be edited when visible.

    324(2). TGD: Add Double ClassBox and Triple ClassBox icons.

    326(2). TSSD: Enlarge Taxonomy Junction circle. Current circle is too small.

    326(2). TSSD: Add multiplicity constraint in upper right corner

    327(2). TSSD: Allow empty lines in attribute and operation lists.

    328(2). TESD: Allow Participation Link to be drawn in both directions.
    		Rolename/Constraint can only be edited at Entity Type part of link.

    329(2). TCPD/TDPD: Lower part in Component box should be "reachable".

    330(2). TCPD/TDPD: To be merged into a new IMplementation Diagram editor: TIMD.

    331(2). TIMD: (see 330 above): Add ClassBoxes to nodes icons.

    332(2). TATD: Remove constraint on duplicate statenames.

    C5 Changes for Tree editors.
    ----------------------------------

    068(2). Represent tree-structure as an indented list in a text editor.
       - With lines / without lines.
       - With numbers / without numbers
    	(number is 1.location in tree, 2.unique id, or 3.user-assigned id).

    069(2). Function refinement tree:
       Indented list of function + annotation (meaning, permissions, source,
       date, author etc).

    159(2). Conversion between trees in tree-structure and indented lists.

    333(2). TGTT: Add possibility to duplicate nodes.

    334(2). TGTT: Check for cycles with regards to duplicate nodes (See 333).

    D. Implementation.
    ---------------------------------

    177(3). Implement hierarchic graph structure and operations in libdiagram in
       such a way that TGD, TERD, T{D,E}FD en TSCD can be extended to hierarchic
       editors.

    235(3). Zoom in to a node in hierarchic editor (if there is no subdiagram,
      create one). This operation shows only one level (subdiagram) at the time.

    236(3). Zoom out to a node, i.e. show diagram of parent node. This operation
      shows one level (subdiagram) at the time.

    237(3). Go to diagram (including goto toplevel). I.e. show diagram with index
      nr. X. Shows one level (subdiagram).

    238(3). Automatic indexing (numbering) of nodes in hierarchic diagram.

    269(3). Implement mechanism to select only one handle of a line.
       I.e. when you select one line then you should click an extra time on one
       of the line handles to make it the "most selected handle". Show this for
       instance by making the handle bigger than the others.

    070(2). Make Imakefile file for generating Makefiles for diverse
       platforms (with xmkmf like under linux). Or use GNU autoconf/automake/
       autoheader programs.

    230(2). Implement Load, Save, New and Quit as distinct command classes.

    235(2). Make libeditor (in particular class Config) independent from the
       specific config items. This avoids recompilation each time a new config
       item is added or changed. And also, libeditor should not contain the
       options of each specific editor, as libeditor does not rely on specific
       editors.

    240(3). Look for bugs/memory leeks with purify so TCM 2.0 has no such bugs.

    241(2). Remove class Code (all shape and subject codes and names) and
      Toolkit (all editor codes and names) from libglobal.so and put it into a
      distinct place. The rest of libglobal.so is totally application independent,
      but these two classes aren't. Perhaps best thing is to put all codes
      and names in a config file that's read in upon startup.

    246(3). Implement the lists of text shapes in a class box or in a
      transition arrow as 1 single text shape with multiple lines. This
      makes layout and editing much more simple, as well as implementing
      labels (attributes, actions etc.) that occupy more than one line.

    258(3). Add optional little arrow (direction) to the name of a line.
      (can be used in UML static structure and collaboration diagrams).
      Direction = {None, fromNode, toNode}.

    250(2). Implement RoundedDoubleBox shape type in libdiagram (a DoubleBox
      with rounded corners).

    252(3). Implement all text syntax checks with flex/bison mini-parsers, just
      like is done for CSOD and CED.

    253(3). Generate PostScript from TextViewDialog/TextEditDialog by
      using PSGrafport, instead of text2ps.

    254(2). Implement CompositeNodeShape in libdiagram. That is a node shape type
      that has a number of node shapes as children and visually encloses
      these node shapes. This can be used to implement the
      representation of subject areas (ER) and sequential composite
      states (state charts).

    255(2). Implement PartitionedNodeShape in libdiagram. That is a node
        shape that is partitioned in a number of compartments (>= 1) with
        vertical or horizontal boundary lines. Each compartment contains a number
        of node shapes. CompositeNodeShape is_a PartitionedNodeShape
        (with 1 compartment). PartitionedNodeShape can be used to implement
        concurrent composite states in state charts.

    256(2). Implement operations on CompositeNodeShapes and PartitionedNodeShapes
        to show/hide the shapes that it encloses (so called Expand and Collapse
        operations).

    257(2). Implement possibility to show only a single CompositeNodeShapes or
         PartitionedNodeShape and it's contents. So it can be saved or printed
         separately.

    263(2). Implement MultiBox (is_a Box). That is two boxes on top of
        eachother. Used for representing UML multiboxes.

    288(2). Each TextShape has as attribute the relative position in or near
       the parent shape. The possible values are: Top, Bottom, Left, Right, Center,
       TopLeft, TopRight, BottomLeft, BottomRight. Specific shape types have
       a member CalcPosition(TextShape): Point that calculate the exact positon
       of the Textshape given the specific shape's boundary and the size of the
       textshape. This functionality now exists in TCM but it's very ad-hoc.
       Also, implement the duplication asterisk as a textshape.

    E. Documentation.
    ---------------------------------