Wish List time

Replacing or allow customizing the scrollbars would be very nice. there is a sample code in code project of how to do it in .net

I 2nd, 3rd, or 4th WPF with DataBinding support. Think what could be done then!

Can I put in a request for more functionality to assist with loading and saving goobjects!

Especially being able to write a whole map with formatting and assocaited properties (such as the points on a GoLink GoStroke object)
I'm not sure the best means for this !

Responses to the past few items:

I’m surprised people want indexed access to the collections of links connected at a port or at a node, or of all of the nodes or all of the links of a layer or of a document. I don’t see how this could work, because as soon as someone removed an object, all saved indices would be invalid. Insertion of objects might cause problems too.

(But there is indexed access to the children of a GoGroup.)

Standard ContextMenus (or ContextMenuStrips if .NET 2.0) do work for GoView as a default. But usually you’ll want to construct custom context menus for individual objects, which is why the mechanism is as general as it is. Most GoContextMenus also work in both WinForms and WebForms. Could you describe exactly how we could avoid what you are calling “hand-waving”?

Here’s the code for ContextMenus for the ColoredNode sample in Demo1:

[code] public override GoContextMenu GetContextMenu(GoView view) {
GoContextMenu cm = new GoContextMenu(view);
if (view.CanInsertObjects()) {
cm.MenuItems.Add(new MenuItem(“Add Top Port”, new EventHandler(this.AddTopPort_Command)));
cm.MenuItems.Add(new MenuItem(“Add Bottom Port”, new EventHandler(this.AddBottomPort_Command)));
return cm;

// The GoView.Edit... methods start and finish their own transactions.
// Here, we need to do it explicitly.
private void AddTopPort_Command(Object sender, EventArgs e) {
  GoGeneralNodePort p = MakePort(true);
  this.Document.FinishTransaction("Add Top Port");

private void AddBottomPort_Command(Object sender, EventArgs e) {
  GoGeneralNodePort p = MakePort(false);
  this.Document.FinishTransaction("Add Bottom Port");

You can easily replace the scrollbars that GoView uses by setting the GoView.HorizontalScrollBar and .VerticalScrollBar properties.

We’re working on WPF controls. Yes, data binding is pretty neat in WPF.
But you can certainly use GoDiagram in the meantime, as our two new samples show: WPFinGoView and WPFusingGoView.

For most applications where you want to use XML and you have some control over the format of the saved diagram, you could use GoXmlBindingTransformer to declaratively bind GoDocuments/GoObjects and their properties with XML elements and their attributes. Many of the sample applications have been upgraded to make use of GoXmlBindingTransformer. Saving/restoring the points of a link stroke is merely a matter of binding the “Points” property.

How about more explicit and uniform events when a Document is changed, or allowing the programmer to increase or decrease the verbosity of the events somehow?

A great deal of our dev time is interpreting what the user just did by listening to DocumentChanged, so that we can update our model and redraw the UI. This is made complex by certain interactions that don’t have the event pattern that we would expect; for instance, objects inside SubGraphs have different change behaviors than objects outside SubGraphs.

I’m not exactly sure how you’d solve this, but if I could go in and change something so that events are tailored to our model input, that would eliminate a large class of bugs for us.

Otherwise, GoDiagram is a great product that fits our needs perfectly.

A Client Side Object Model to use with javascript and Ajax would be great. Another great thing would be a javascript rendering engine of the diagrams.

Support for at least one of the rich dynamic frameworks (flash, silverlight, either one works for me). Don't need WPF since I use the Web Diagram.
Clients have requested smooth scrolling across large graphs. Either a google maps approach of breaking into tiles would be fine or a flash-based canvas.
Layout algorithm taking advantage of multi-cores/parallel frameworks.

I see a few Silverlight requests. This is number 1 on my wish list. I love this product but we need to have a Silverlight (and WPF) version. I think even minimal GoView functionality would be a good start.


It would be nice to see auto-routed links avoiding each other simply to the extent that multiple lines coming from say a UML type node, being routed around something have some variation on their bend location, such that they don’t all merge into a single vertical line.

I second this suggestion.