This sample demonstrates a diagram with rulers at its edges and indicators which display the mouse's position.
The rulers are implemented using Graduated Panels. The main element of each panel is sized according to the width/height of the viewport, with the Panel.graduatedMin and Panel.graduatedMax being set to the edges of the viewport.
Event listeners and Tool overrides are used to keep the rulers and indicators in sync as the viewport bounds change or the mouse moves around the diagram.
ViewportBoundsChangedlisteners are used to keep the rulers and indicators against the edge of the diagram and to update the min and max values of the rulers.
InitialLayoutCompletedlistener is used for initial placement after the diagram has positioned the rest of the nodes.
The rulers and the indicators are implemented using simple Parts, not Nodes, so that they are not treated as nodes by some layouts and so that they do not show up in the collection of Diagram.nodes. They are put in the "Grid" Layer so that any changes to them are not recorded by the UndoManager, because the "Grid" Layer has all of its Parts ignored by the UndoManager.