Project Overview
The CharGer Conceptual Graph Editor is a free, Java-based development environment for conceptual graph editing and acquisition. It supports editing and saving of conceptual graphs and repertory grids. See the manual for further information.

The entire project is called CharGer, which includes the CharGer conceptual graph editor, and the Conceptual Requirements Acquisition and Formation Tool (CRAFT) subsystem.
 
ENHANCEMENTS DONE:
version 3.5b "Cold Snap"
        Improved memory efficiency and plugged many memory leaks (thanks to David Phillips!)
        Converted CharGer's graphics all to Graphics2D to use floating point valued points instead of int.
        Improved appearance making things a bit sharper and drawing actors and relations better with arcs.
        FindClippingPoint for an ACTOR now takes into account that the actual boundary
                is 1/2 the way from the usual clipping point (on the rect) to the center.
        Provided options for black-and-white and also grayscale (both in "Change Color.." and on the Preferences panel)
        Changed activation mechanism to account for actors with varying numbers of arguments
version 3.4b "Valentine"
        Removed preferences item to set kind of image file being copy/pasted, since it never worked anyway.
        Changed the set of graphics formats available for export (thanks to freehep.org)
            Vector graphics formats: EPS, PDF, SVG and EMF
            Raster (bitmap) graphics formats: GIF and PNG
        "lookup" actor (and dbfind) can have any number of output concepts associated with a single lookup key.
        Changed preferences files' suffixes to .PREF so they won't conflict with Windows profile (.PRF) files
        Improved stability during editing and file saving.
        Some built-in graph metrics can be displayed in a text window.
        CharGer now requires Java 1.5 or greater.
        Restricts undo/redo to 10 levels only, due to its memory consumption.
        Handles certain XML-special characters correctly.
        Copy/Paste now lets you paste a graph into another application as an image.
version 3.3b "Hurricane"
        The copying of co-referents is now only enabled if actors are enabled in Preferences
        Negation via "cuts" are now supported.
        Improved button icons in the toolbox on the editing window.
        Added the ability to draw "cuts" (i.e., negated contexts)
        Improved robustness when saving graph files
        Concept type should have option of multiple wordnet senses; e.g., "workflow_log"
        Zooming scale shows as a percentage in the top border of the drawing window.
        Handle graphs in knowledge summary.
        A "summarize what is known" option has been implemented, to form a crude English version of
                everything in open graphs and grids.
        Types can be gathered from graphs and repertory grids and then added automatically to a type hierarchy.
        A Wordnet synset (word-sense) entry can be added to any node.
        RepGrid : if a term (or sub-term) has already had a meaning chosen in a previous query, then 
                suggest it as the default.
        If rep grid element duplicates an existing one, should just use the previous one.
version 3.2b
        CharGer can now auto-detect the kind of file being read, whether CG or CGX
        Repertory grid can be edited and diadic elicitation is supported.
        Repertory grid can be exported to Burmeister (*.CXT) file
        Footer option (on by default) for printing graphs and grids.
        Repertory grid can be printed
        "Duplicate" command added to graph edit menu, bypassing clipboard.
        CGX (conceptual graphs in XML) now being used as an internal storage format.
        Wordnet interface available in an elementary way.
version 3.1b
        Repertory Grid interface installed through the CRAFT tool window.
        Trigger and autonomous actors can now be constructed, either through the plugin interface (see manual)
                or as built-ins.
        Find and find-again commands for node labels has been implemented.
        GraphUpdater updates referents across co-referent links when concept referents change
        Added a color option to set a default black-and-white color scheme.
        Added a display option to draw outlines for all nodes (useful when doing black and white)
        Changing cursor appearance when it's over a context border, since they're so hard to select.
version 3.0b
        CharGer now fully dependent on JDK 1.4.1 or above (if that's an enhancement ...)
        Zooming now operational
        Export works to PNG, JPG, BMP, PSD (Photoshop) and TGA files. (some disabled as of v3.4b5)
        Actor animation has been improved.
        User can adjust colors on any node and also establish a new default color scheme.
        Editing of labels has been changed to accommodate zooming and scrolling.
        Change internal representation to allow for varying colors
version 2.6b
        File processing and naming improved.
        actor plug-in interface developed, and simple actor plug-ins implemented
        internal changes to use more standard JDK classes and removing un-needed charger classes.
        default preferences now kept in the .jar file 
        modality (graph purpose) labels are now off by default
version 2.5b
        changes made to file structure: default preferences and gifs are in the jar file (or class hierarchy)
        user can now optioanlly access all local fonts, not just a select few
        Page Setup... menu item added
        several printing enhancements and bug fixes
version 2.4b
        coreferent links are correctly imported from CGIF (2.4a04)
        drawing area automatically enlarges to enclose graph (2.4a02)
        relation labels are defined similarly to type labels.
        relation hierarchies use relation labels, rather than tied to actual relations (2.4a03)
        coreferent links are shown correctly as dashed lines (2.4a03)
version 2.3b
        A natural language paraphrase feature, to araphrase a graph in English (other languages on the way)
        CG operations: match, join on selected concept
        "Unlimited" undo/redo levels
        Adjustable parameters for the matching scheme applied to joins and matching
version 2.2b
        A number of editing checks with improved error messages
+	Import the CGIF format
        Put graph information in Notio comment
        Added many preferences to the preferences panel
        Make Generic menu option, for removing referents of selected nodes.
        
version 2.1b
        Optimize redraw during drags by presetting the selected node set before dragging.
                Currently searches linearly through all graph objects at each redraw (ugh!)
        Use the arrow keys to make small adjustments in the positioning of selected 
                        Concepts, Relations, and Actors icons.
        An undo facility!
                Implemented as a complete save of prev graph as a string.
        Save icons as static Image variables in EditFrame to eliminate file reads.
        Shortcut keys to invoke editing tools.
version 2.0b
        Some font flexibility in displaying editor frames.
        Cut/Copy/Paste/Clear implemented.   		
        A remove-context facility
        When first selecting a node (clicking) it should be marked as selected???
        Short-cut keys for editing modes, e.g., "c" "r" ">" "-" "<" etc.
        Put all the button controls on a panel that's added to this frame
        Auto resizing of CanvasPanel when frame window is re-sized.
        UPDATED many things to accommodate the new (and completely different) AWT model in Java 1.1
        Arrowhead point should lie slightly toward its destination; looks like a job for Trig!
        Have drag operations first identify what's being dragged, and then carry that shape along with it.
        Saving and retrieving graphs
        Save to a file
        Read from a file
        Parse text label referent for type, etc.
        Make edges thicker width
        Selection of a group of objects
        Font flexibility.
        Contexts
        Double-click on a node allow one to edit its legend
        Arrows should be clipped at the edge of concepts and relations as well as contexts.
        Printing contents of an EditFrame
        scrolling the canvas (pretty much)
        Put a small circle at midpt of GEdges so user can delete them too.
        PRINTING: No dots on edges; i.e., draw with boolean as whether it's editable 
        When dragging, show in the status line what's being dragged.
        Toolbar icons
        Uses File Dialog instead of silly text business for handling input/output.
        Numbered relation/actor arcs supported	
        When entering an edit frame, if it's loaded, select is default,
        Export the CGIF format
        classes encapsulated in a Java package "charger" and internal class names adjusted
        Alignment of objects
        Have each graph frame run in its own thread
ENHANCEMENTS PLANNED:
        It would be nice if undo/redo were able to maintain all internal connections (e.g., to
                actors) so that it's safer to have actors running along with an undo.
        Wordnet preferences file (from the JWNL package) should be bundled as an input stream, so that the
                user doesn't have to deal with it. Provide a CharGer preference showing the dictionary path location.
        Repeated pastes should act like duplicate and continue to be offset.
        Referent fields can also contain things like *r != *s, etc.
        Two-word phrases can be placed in a type hierarchy automatically.
        knowledge summary: actors like displaybar should be on a "don't show" list.
        CraftWindow: Some way for the user to know what overall arity of a relation is, even though they're only
                shown binary combinations.
        Dragging to a context should insert ALL of the selection into that context; currently everything
                (except for objects which are themselves already in a context)
                is dragged the same way, with nodes inserted in whatever context they land in.
        Find should have an "ignore case" and "full word" option.
        Internationalization of code; i.e., all strings stored as Unicode identifiers (crude but effective)
        A resize-context facility
        A search-and-replace facility for text labels (in the View menu)
        Consistency checking on types and relations
                a "validate graph" button that checks for consistency up to this point
        Before adding a new node, make sure it won't overlap the bounds of another node.
        Shift double-click will allow a second edit-legend mode: one constrained to a list.
        Type definitions mechanisms
        Relation definitions mechanisms
        Actors defined in terms of other actors
        Schema definition in terms of lambda abstraction
        Definition of individuals and whether they conform to a type.
        A "note" facility that is added onto a comment.
        A "commit" operation that adds this graph to a knowledge base.
        Many iterations occur through all graph objects -- a faster iterator (one pass) would be nice
        Use a mouse-click or other user event to single step through activation
BUGS IDENTIFIED:
        If a graph with embedded Wordnet senses is opened without Wordnet being available, then the sense and offset
                information will be lost, possibly resulting in corruption since the offset is set to 0.
        Duplicate attributes in a repgrid need to be caught and not repeated
        Under LINUX, windows may not be getting the same windowActivated events as under OS X. 
                In particular, the craft window doesn't automatically refresh with all the tuples.
        Graph objects shouldn't be able to be placed in a negative part of the canvas (e.g., x= -5, etc.)
        Occasionally a knowledge source doesn't get forgotten, but since its window is gone, getAllGraphs
                craps out. Need to find out if it happens in getAllGrids too.
        Knowledge summary window should be closed automatically by somebody.
        Transcript java won't log an answer without exception
        Changing a cell value in a rep grid doesn't get logged to the transcript.
        after using the arrow keys to move things on the canvas, the canvas doesn't have the keyboard
                focus anymore.
        updateGEdge is really messed up -- it shouldn't have to reconstruct the edge every 
                time it's called!
        Starting up a graph should involve checking *every* actor, not just triggers.
        Performing "undo" or "redo" on a graph disconnects any plugins that are currently executing.
                Old plug-ins remain and a new instance of the plugin is created by the new actors.
        Disabling actors doesn't disable any actor's timers. Disable actors should dispose of any actor 
                instances that have been created.
        Deleting an edge should invoke the updating routines on its ends.
        
BUGS FIXED:
version 3.4b
        
version 3.3b
        Sometimes writing to a file was interrupted, resulting in trashing the file and leaving it zero length.
            This was solved by writing first to a temp file and renaming.
        Labels on concepts, relations, etc. are now XML-safe: symbols &, <, >, ", and ' are quoted.
        Lines of identity drawn across context boundaries are no longer corrupted if drawn in the "wrong" direction.
        Undo was corrupting contexts if any of the context's enclosed concepts had a referent, because setting a referent
                (even initially) caused resizing of the context, sometimes with a default concept rectangle.
                Fixed by providing an option to setReferent telling it not to resize.
        Duplicate (and possibly paste) didn't paste all links, apparent problem in parsing the paste.
                problem was caused by failure to include links in the copy!
        Sentence in CraftWindow seemed to think c2 is always output, even if it's not. Sentence was re-worded.
        There is a paste/duplicate bug when pasting/duplicating a context:
                paste/dup results in a context that is apparently being unioned with a default 0,0,50,30 rectangle.
                Undo seems to solve the problem: after that, the same paste with the same clipboard works correctly.
                Undo's parse must be fixing a problem with who the outermost graph is?
                Problem was caused by the undo command creating a new graph that was not explicitly attached to
                        its owner frame anymore, resulting in problems because un-attached graphs do not get re-sized.
        Repgrid acquiring senses: if first term is already defined, then suceeding terms do not seem to
                have their appropriate initial (previous) values - i.e., they are defined from scratch.
        Repgrid acquiring senses: if look-for-existing-default part is cancelled, then acquisition reverts to
                the longest phrase first part, which may cause some terms to be queried twice.
version 3.2b
        An arrow that crosses context boundaries (e.g., to an actor) doesn't get moved when either of its ends
                is moved. Seems to be logically intact, but just is drawn wrong. 
                Perhaps related to problems with id's etc. in parseOneObject.
                Doesn't seem to happen with corefs, just actors.
                Caused by switching an arrow's owner to a less-deeply nested graph: the detaching process
                        erroneously called disconnectObject which detached the link's ends.
        Wordnet XML form seems to have "null" for the term label instead of the term itself. Occurs during parsing.
                Fixed by removing attempt to validate wordnet descriptor right when it's input.
        MAJOR: arrows that link things at the same nesting level may be stored before both of their ends.
                Option 1: on input, keep a list of id's not found and resolve when we're done
                CHOOSE: Option 2: on output, defer saving any arrow whose ends haven't yet been saved (easier)
        Craft window won't find subgraphs in nested contexts if there is no subgraph at the outer level
        Preferences panel doesn't show preview objects anymore FIXED by looking in charger.obj package
        Rep grid window doesn't allow editing of element or attribute labels once they're entered. FIXED
        Rep grid window seems to think it needs saving even when it hasn't been changed.  FIXED by
                remembering to set default closing action to none.
        Not a bug: find looks for substrings too, so "proposition" matches a search string "sit"
version 3.1b
        Closing an EditFrame now removes it from the EditFrameList.
        Updating a concept's referent due to changing a coreferent link now produces correct
                loops when the updated concept is the output of an actor. Solved not by marking, but
                by stopping when referents settle down and don't change.
        Autonomous changes to a graph (i.e., those not the result of user editing) do not get 
                detected as a graph change for purposes of auto-save, etc.
        Coref links are now updated before actor firing links.
        Changed Enumerations to Iterator, except for where external classes require it.
version 3.0b
        Saving a file over an existing one is now caught.
        Numerous focus errors seem to be fixed by JDK 1.4.1 as well as adjustments in code.
version 2.4b
        Fixed a problem whereby Copying a context with its contents caused the contents to be
                erroneously duplicated.
version 2.3b
        Fixed a problem in using "Save" -- correct directory is now selected.
version 2.2b
        Sometimes the canvas panel no longer listens to keystrokes/presses.   	
        Moving a context that is (a) nested and (b) has nested contexts, calculates its bounds
                        before making its rectangle, resulting in stretched contexts. 
                        Fixed by creating a new setCenterOnly method that ignores adjustments
version 2.1b
        Dragging while shift down doesn't alter selection.
        Closing the Hub invokes a CloseOutAll even though there aren't any windows open.
        Clicking on a window's close button will close it -- "Cancel" is equivalent to "Don't Save"
                        fixed by changing the defaultClose parameters.
        When moving an object out of a context, the context re-sizes as though the object were still
                where it was before moving; makes for a lot of empty space.
        Making a context where one component is already a context gets interpreted as an
                "overlapping context". 
        Making a context should cause its enclosing graph to re-size itself (since it might also
                be a context). Such an algorithm should proceed recursively outward, just in case.
        Changing Dim for a context doesn't preserve center, instead preserves the upper left corner.
        Editing context's name will now force a re-size if the label is too wide.
        Moving a context doesn't work if the context has contexts nested in it.
                Fixed by noting that the center point (destination) of a moved context may in fact lie
                        within one of its components.
        Save dialog: saving a file under a different name should rename the graph in the edit frame
        Filenames are case-sensitive; open doesn't find ".CG" files because it's only looking for
                lowercase. Also, file list sorting is case sensitive, making Windows filenames show
                up differently.
        Mouseclicked doesn't know that mousepressed happened; in the case of selections, thinks
                things were already selected (because mousepressed selected them) and thus unselects.
        Using cmd-delete doesn't delete all the selection. Problem with live enumerations' original
                list getting altered during the enumerating.
        Editing text in an editing window uses global default font information, not the original
                information used in setting up the frame. Each edit frame should have its own font info.
        Dragging a concept out of a context broke its actor links, even when allow links is enabled.
        Select All doesn't seem to enable the menus correctly.
        New Graph should just be "New" , have VK_N shortcut, and should set itself as current frame.
        When cutting/Copying, an arrow seems to go with the selection -- vectorizeSelection should
                have an option so that it only includes arrows with both ends in its selection.
                                Fixed. invoke a "trim" function so that non-terminated lines go away.
        Actor name choice menu doesn't disappear.
version 2.0b
        When an actor graph is created with the database tool, activation isn't animated.
                Fixed. The graph thought it had no ownerframe.
        Moving a node inside a context causes failures -- either it doesn't know what context
                the moved node should be in, or the "dot" on the arrow become HUGE, etc.
                sometimes it thinks the node is in the outer context.
         Tool tips are covered up by the canvas (fixed by making most components known to Swing)
         Fonts are set correctly, but node sizes not refreshed and text edit boxes still too thin.
         Scroll pane resizes correctly, but its viewport seems to have the right size for the 
                previous re-size, whatever that was. (fixed by using revalidate on the ScrollPane)
        Editing a label with the "abc" tool positions the text edit box right where it should be;
                but using double-click positions the text to the right and below; should be the same.
        Editing a context's name causes name to then appear in the center, instead of in corner.
         (repaint automatically repositions it later).
        Arrows to actors are cut across contexts, regardless of what preferences are set.
                seems to cut 1st, 3rd, 5th, arrow as stored in myedges
        makeArrowPoints has a problem with an edge pointing straight up or down
        Clear All seems to be disabled... since toolbars implemented
        BUG: text editing field does not lengthen to accommodate a longer original label
        when edge is connected to a context, Arrow's draw seems to act like the context is wider
                than it actually is. Fixed by re-writing the geometry.
                BUG: Clear-graph button that wipes out the current window contents does not work
           fixed in v0.4.
        When trying to make a context inside another one, makeContext craps out at
                        Graph contextG = new Graph( ownedBy );	 because ownedBy is null
                        FIXED by treating top level graph as special.
        Selecting a context currently means selecting its contents automatically. This works well
        for deleting, but not for moving, since the contents appear to be moved outside of the
        context (i.e., its original rect). Also it appears the context itself is trying to be
        made its own owner, resulting in fatal recursion...
        related to this is that when a nested context is moved with its outer context, the
                nested context keeps its old upper left point but gets re-sized. seems to be caused by
                the fact that the nested context's contents are NOT themselves selected...  
                Fixed by rewriting the way nested contexts were identified.
        Moving a context out of an enclosing one doesn't detach it! Just expands the rectangle!
                Moving a plain node out of an enclosing context seems to work normally.
        Can't edit the name of a context; probably hard-wired into the code. FIXED v1.1
        creating a context with no dominating concepts (i.e., in the outer graph) doesn't work
        IOManager has a problem with original positioning of a context.
                Turned out to be that context was getting sized to its text label like a gnode.
        BUG: when resizing a GNode, all edges connecting it need also to be re-calculated
                        decided to let each edge use its toObj and fromObj centers, rather than figure
                        out a bunch of trig functions...
        Exception in thread "AWT-macos" java.lang.ClassCastException: Arrow: cannot cast to GNode
                v0.4 solved by understanding that an edge might be selected by user when dragging.
        Selection rectangle disappears after being drawn.
        BUG: Root graph is marked as isSelected whenever?? any object is selected
        Makecontext will try to make a "nested" context if a context by itself is selected
        When dragging one object in a selection group, only that object's outline shows 
                during the drag. See comments in code.
        When dragging an object, object should keep its position relative to the cursor;
                currently the object always is positioned with its center at the cursor.
        When extending a selection, the selection rectangle only encloses the extended part, so
                making a context includes all the selection, but sets its rectangle to just the extended
                part. This means that making a context may have to set its own rectangle.
           
PROBLEMS NOTED:
                The EditManager actually performs the actions for the buttons on the EditFrame, while the 
                        CanvasPanel performs the drawing for the EditFrame. This means that many
                        parameters are shared between EditFrame, EditManager, and CanvasPanel.
                Filename vs. graph name: since a .CGX file has in it a graph name, should that become
                        the name of the graph and its window, or should the file name itself be the name?
                        For now, we will use the graph name in the file.
                Objects' positions are all absolute, even if they are in a context. Positions of objects
                        that are in a context should be relative to the context bounds itself.
                When selecting a group, the edges don't show up as selected. This is mostly for
                        efficiency, since to draw one during a drag would mean accessing both end objects.
        
PROBLEMS FIXED:
                In a few cases, the GraphObject field myKind is used; in all others, the 
                        getSuperclass method is used.