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



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:

        already listed, send update:

        to be listed:

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 

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

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

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 and put it into a 
        distinct place. The rest of 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 

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

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.