Added keyboard support info
diff --git a/developers/faq.html b/developers/faq.html
index f9ea2b4..1c4e41b 100644
--- a/developers/faq.html
+++ b/developers/faq.html
@@ -4,35 +4,43 @@
<ol>
<h4>
- <li>Is it possible to separate the diagram data from the domain
- data?
+ <li>Is it possible to separate the diagram data from the domain
+ data?
</h4>
- <p>Yes, and it is also recommended to do so. Simply use the
- standard EMF mechanisms to store the domain objects in an EMF resource
- of your choice. The tutorial follows the very simple approach to store
- both the diagram and domain objects inside the same resource, this is
- definitely not the way to go for building your own tool. Have a look at
- this <a
- href="http://www.eclipse.org/forums/index.php?t=msg&th=172247&start=0&S=acb08c1bf425f0ccb0106fb3a46a4bad">
- forum entry</a> to see how it can be changed for the tutorial.</p>
+ <p>
+ Yes, and it is also recommended to do so. Simply use the standard EMF
+ mechanisms to store the domain objects in an EMF resource of your
+ choice. The tutorial follows the very simple approach to store both
+ the diagram and domain objects inside the same resource, this is
+ definitely not the way to go for building your own tool. Have a look
+ at this <a
+ href="http://www.eclipse.org/forums/index.php?t=msg&th=172247&start=0&S=acb08c1bf425f0ccb0106fb3a46a4bad">
+ forum entry</a> to see how it can be changed for the tutorial.
+ </p>
<h4>
- <li>Is it possible to integrate an arbitrary automatic layouter
- with Graphiti?
+ <li>Is it possible to integrate an arbitrary automatic layouter
+ with Graphiti?
</h4>
- <p>Yes, indeed. Use a Custom Feature to do so. The following <a
- href="resources/TutorialLayoutDiagramFeature.java">snippet</a> shows
- how a layouter can be integrated into the Graphiti tutorial. In the
- snippet, we use a layouter which comes with GEF. Note, that this
- requires a direct dependency to Draw2D. Your Feature Provider has to
- deliver the Layout Feature as a Custom Feature. Then the action will be
- available via the context menu.</p>
+ <p>
+ Yes, indeed. Use a Custom Feature to do so. The following <a
+ href="resources/TutorialLayoutDiagramFeature.java">snippet</a> shows
+ how a layouter can be integrated into the Graphiti tutorial. In the
+ snippet, we use a layouter which comes with GEF. Note, that this
+ requires a direct dependency to Draw2D. Your Feature Provider has to
+ deliver the Layout Feature as a Custom Feature. Then the action will
+ be available via the context menu.
+ </p>
<h4>
- <li>How do i build an editable property sheet?
+ <li>How do i build an editable property sheet?
</h4>
<p>We use the non-editable property sheet in the examples.common
- and examples.tutorial plugins of the Graphiti project as a touchstone.
+ and examples.tutorial plugins of the Graphiti project as a touchstone.
+
+
+
+
@@ -46,43 +54,143 @@
<ol>
<li>Study the extension point <code>org.eclipse.ui.views.properties.tabbed.propertyContributor</code>.
- See the <code>org.eclipse.graphiti.examples.common.property</code>
- package as reference.</li>
+ See the <code>org.eclipse.graphiti.examples.common.property</code>
+ package as reference.
+ </li>
<li>Study the extension point <code>org.eclipse.ui.views.properties.tabbed.propertySections</code>.
- See the <code>org.eclipse.graphiti.examples.tutorial.property</code>
- package as reference.</li>
+ See the <code>org.eclipse.graphiti.examples.tutorial.property</code>
+ package as reference.
+ </li>
<li>In the class <code>TutorialEClassSection</code> from the
- tutorial plug-in set the <code>nameText</code> field as editable and
- add a <code>ModifyListener</code> to the <code>nameText</code> field
- as shown in the <a href="resources/ModifyListener.txt">snippet</a>.</li>
+ tutorial plug-in set the <code>nameText</code> field as editable and
+ add a <code>ModifyListener</code> to the <code>nameText</code> field
+ as shown in the <a href="resources/ModifyListener.txt">snippet</a>.
+ </li>
</ol>
</p>
<h4>
- <li>How do i build structured menus on context buttons?
+ <li>How do i build structured menus on context buttons?
</h4>
- <p>If you want a compact context button pad you might consider
- organizing your context buttons into sub-menus. Use <code>ContextButtonEntry</code>'s
- method <code>addContextButtonMenuEntry</code> to add sub-entries to the
- context menu entry. If a menu entry has sub-entries this is visualized
- by a small triangle in the lower right corner of the entry
- representation and left-clicking opens the sub-menu.</p>
+ <p>
+ If you want a compact context button pad you might consider organizing
+ your context buttons into sub-menus. Use
+ <code>ContextButtonEntry</code>
+ 's method
+ <code>addContextButtonMenuEntry</code>
+ to add sub-entries to the context menu entry. If a menu entry has
+ sub-entries this is visualized by a small triangle in the lower right
+ corner of the entry representation and left-clicking opens the
+ sub-menu.
+ </p>
<h4>
- <li>Why does pressing F2 to enable direct editing only work if the
- mouse cursor is placed over the shape?
+ <li>Why does pressing F2 to enable direct editing only work if
+ the mouse cursor is placed over the shape?
</h4>
<p>In general it is possible to invoke direct editing for a
- selected shape by pressing F2. Since the selected object may contain
- more than one editable object (e.g. two text fields) or the hierarchy
- may not be clear, the Graphiti framework may not be able to
- automatically determine which field should be edited. As a last resort
- the framework tries to use the shape the mouse cursor is placed upon.</p>
- <p>But you can help the framework out by overriding the method
- getLocationInfo in your ToolBehaviorProvider. This method is called
- upon pressing F2 and can return a LocationInfo object stating which
- text object shall be edited. Here's a <a
- href="resources/GetLocationInfo.java">short example implementation</a>
- for the tutorial.</p>
+ selected shape by pressing F2. Since the selected object may contain
+ more than one editable object (e.g. two text fields) or the hierarchy
+ may not be clear, the Graphiti framework may not be able to
+ automatically determine which field should be edited. As a last resort
+ the framework tries to use the shape the mouse cursor is placed upon.</p>
+ <p>
+ But you can help the framework out by overriding the method
+ getLocationInfo in your ToolBehaviorProvider. This method is called
+ upon pressing F2 and can return a LocationInfo object stating which
+ text object shall be edited. Here's a <a
+ href="resources/GetLocationInfo.java">short example
+ implementation</a> for the tutorial.
+ </p>
+
+
+ <h4>
+ <li>How do I work in a diagram using the keyboard only?
+ </h4>
+ <p>Graphiti supports triggering all kinds of operations using the
+ keyboard, basically all the keyboard bindings are reused from what GEF
+ offers in this respect. Here is a list of the most commonly used
+ shortcuts:</p>
+ <table>
+ <tr>
+ <th>Action</th>
+ <th>Key</th>
+ </tr>
+ <tr>
+ <td>Navigate left</td>
+ <td>Left arrow</td>
+ <tr>
+ <td>Navigate right</td>
+ <td>Right arrow</td>
+ </tr>
+ <tr>
+ <td>Navigate down</td>
+ <td>Down arrow</td>
+ </tr>
+ <tr>
+ <td>Navigate up</td>
+ <td>Up arrow</td>
+ </tr>
+ <tr>
+ <td>Navigate into a container</td>
+ <td>Alt+Down arrow with the container selected</td>
+ </tr>
+ <tr>
+ <td>Navigate out of a container</td>
+ <td>Alt+Up arrow</td>
+ </tr>
+ <tr>
+ <td>Cycle through selection handles</td>
+ <td>Press the period key with a part selected</td>
+ </tr>
+ <tr>
+ <td>Move a component</td>
+ <td>Cycle once to the Move handle using the period key. Use
+ navigation keys to move. Press Enter to accept new location. Press
+ Escape to cancel the move</td>
+ </tr>
+ <tr>
+ <td>Resize a component</td>
+ <td>Cycle to desired resize handle using the period key. Use
+ navigation keys to resize. Press Enter to accept new size. Press
+ Escape to cancel the resize</td>
+ </tr>
+ <tr>
+ <td>Cycle through connections</td>
+ <td>slash or backslash while on an element with connections</td>
+ </tr>
+ <tr>
+ <td>Select multiple</td>
+ <td>Hold down Ctrl. Use navigation keys to navigate to
+ additional components. Press Space to select additional components.</td>
+ </tr>
+ <tr>
+ <td>Select in sequence</td>
+ <td>Hold down Shift, use navigation keys to select additional
+ components</td>
+ </tr>
+ <tr>
+ <td>Go from editor to palette</td>
+ <td>Shift + Tab</td>
+ </tr>
+ <tr>
+ <td>Go from palette to editor</td>
+ <td>Tab (currently only works with active selection tool)</td>
+ </tr>
+ <tr>
+ <td>Create selected palette element</td>
+ <td>RETURN</td>
+ </tr>
+ <tr>
+ <td>Create relation between elements</td>
+ <td>Apply multi selection to the elements with SPACE. Navigate
+ to palette with Shift + Tab and create the desired relation with
+ RETURN</td>
+ </tr>
+ </table>
+ <p>
+ More keybindings can be found e.g. <a
+ href="http://eclipse-ruminations.blogspot.com/2009/03/keyboard-shortcuts-and-accessibility-in.html">here</a>.
+ </p>
</ol>
\ No newline at end of file