For a online sortable version of the wishlist please look here.

    Purpose          : wish list.
    System           : TCM
    Version          : 2.20
    Version date     : Jan 20, 2003.
    Last Update      : Jan 16, 2003.
    Author           : Henk van de Zandschulp
    --------------------------------------------------------------

    MAXITEM = 347

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

    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.

    338(2). The menu entry to set and unset headers and footers is hard to find.
            Redesign the menu structure in order to give it a more visible position.

    343(2). Add small "Drawing Area Overview" Window to TCM editor windows
            (like the small "Desktop Windows" of some window managers at the
            bottom of the screen), showing the position of the visible area
            within the whole canvas.

    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.

    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.

    335(2). Add option to make 'mouse-sensitive parts' visible whenever the
            mouse is moved above an editable part of a shape.
            Show the editable part e.g. as a dashed rectangle and report the
            area selected in the status field (e.g. "rolename area selected").

    340(2). "Constraints on demand" : option to eliminate certain constraints during
            an edit session (see also

    342(2). When clicking inside an overlapping selection area of multiple elements
            it should be possible to select a specific element.

    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).

    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.

    339(2). TSTD: Allow multiple nodes with the same name.

    341(2). TSSD/TCBD: Read-direction arrow should be scalable.

    344(2). TSCD(/TEFD/TDFD): Add small "Navigation Window" showing the
            location of the current document within the hierarchy of documents
            (see also 343(2)).

    345(2). TCBD: Block of messages should be movable.

    346(2). TCBD: Empty message lines should be allowed.

    347(2). TSSD: When connecting a generalization arrow to a generalization
            junction the arrowpoint will disappear (turning the arrow into a
            straight line).
            Implement the same mechanism for connecting an aggregation line
            to a classbox or objecbox in TSSD.

    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.
    ---------------------------------

    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.

    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.
    ---------------------------------