summaryrefslogtreecommitdiff
path: root/src/js/io/mxDefaultToolbarCodec.js
diff options
context:
space:
mode:
authoradhitya2016-04-11 15:10:54 +0000
committeradhitya2016-04-11 15:10:54 +0000
commit92f3207b50a1caca07df5c5b238212af3358905b (patch)
tree38c92f9649c6f1016d2ef70fa2fd33c86b437cba /src/js/io/mxDefaultToolbarCodec.js
parentab5fb6e125d82fdd5818aea3ce370c43c2293ddd (diff)
downloadxcos-on-web-92f3207b50a1caca07df5c5b238212af3358905b.tar.gz
xcos-on-web-92f3207b50a1caca07df5c5b238212af3358905b.tar.bz2
xcos-on-web-92f3207b50a1caca07df5c5b238212af3358905b.zip
Revert last two commits - Keyboard shortcuts are not working
Diffstat (limited to 'src/js/io/mxDefaultToolbarCodec.js')
-rw-r--r--src/js/io/mxDefaultToolbarCodec.js301
1 files changed, 301 insertions, 0 deletions
diff --git a/src/js/io/mxDefaultToolbarCodec.js b/src/js/io/mxDefaultToolbarCodec.js
new file mode 100644
index 0000000..6698b9b
--- /dev/null
+++ b/src/js/io/mxDefaultToolbarCodec.js
@@ -0,0 +1,301 @@
+/**
+ * $Id: mxDefaultToolbarCodec.js,v 1.22 2012-04-11 07:00:52 gaudenz Exp $
+ * Copyright (c) 2006-2010, JGraph Ltd
+ */
+mxCodecRegistry.register(function()
+{
+ /**
+ * Class: mxDefaultToolbarCodec
+ *
+ * Custom codec for configuring <mxDefaultToolbar>s. This class is created
+ * and registered dynamically at load time and used implicitely via
+ * <mxCodec> and the <mxCodecRegistry>. This codec only reads configuration
+ * data for existing toolbars handlers, it does not encode or create toolbars.
+ */
+ var codec = new mxObjectCodec(new mxDefaultToolbar());
+
+ /**
+ * Function: encode
+ *
+ * Returns null.
+ */
+ codec.encode = function(enc, obj)
+ {
+ return null;
+ };
+
+ /**
+ * Function: decode
+ *
+ * Reads a sequence of the following child nodes
+ * and attributes:
+ *
+ * Child Nodes:
+ *
+ * add - Adds a new item to the toolbar. See below for attributes.
+ * separator - Adds a vertical separator. No attributes.
+ * hr - Adds a horizontal separator. No attributes.
+ * br - Adds a linefeed. No attributes.
+ *
+ * Attributes:
+ *
+ * as - Resource key for the label.
+ * action - Name of the action to execute in enclosing editor.
+ * mode - Modename (see below).
+ * template - Template name for cell insertion.
+ * style - Optional style to override the template style.
+ * icon - Icon (relative/absolute URL).
+ * pressedIcon - Optional icon for pressed state (relative/absolute URL).
+ * id - Optional ID to be used for the created DOM element.
+ * toggle - Optional 0 or 1 to disable toggling of the element. Default is
+ * 1 (true).
+ *
+ * The action, mode and template attributes are mutually exclusive. The
+ * style can only be used with the template attribute. The add node may
+ * contain another sequence of add nodes with as and action attributes
+ * to create a combo box in the toolbar. If the icon is specified then
+ * a list of the child node is expected to have its template attribute
+ * set and the action is ignored instead.
+ *
+ * Nodes with a specified template may define a function to be used for
+ * inserting the cloned template into the graph. Here is an example of such
+ * a node:
+ *
+ * (code)
+ * <add as="Swimlane" template="swimlane" icon="images/swimlane.gif"><![CDATA[
+ * function (editor, cell, evt, targetCell)
+ * {
+ * var pt = mxUtils.convertPoint(
+ * editor.graph.container, mxEvent.getClientX(evt),
+ * mxEvent.getClientY(evt));
+ * return editor.addVertex(targetCell, cell, pt.x, pt.y);
+ * }
+ * ]]></add>
+ * (end)
+ *
+ * In the above function, editor is the enclosing <mxEditor> instance, cell
+ * is the clone of the template, evt is the mouse event that represents the
+ * drop and targetCell is the cell under the mousepointer where the drop
+ * occurred. The targetCell is retrieved using <mxGraph.getCellAt>.
+ *
+ * Futhermore, nodes with the mode attribute may define a function to
+ * be executed upon selection of the respective toolbar icon. In the
+ * example below, the default edge style is set when this specific
+ * connect-mode is activated:
+ *
+ * (code)
+ * <add as="connect" mode="connect"><![CDATA[
+ * function (editor)
+ * {
+ * if (editor.defaultEdge != null)
+ * {
+ * editor.defaultEdge.style = 'straightEdge';
+ * }
+ * }
+ * ]]></add>
+ * (end)
+ *
+ * Modes:
+ *
+ * select - Left mouse button used for rubberband- & cell-selection.
+ * connect - Allows connecting vertices by inserting new edges.
+ * pan - Disables selection and switches to panning on the left button.
+ *
+ * Example:
+ *
+ * To add items to the toolbar:
+ *
+ * (code)
+ * <mxDefaultToolbar as="toolbar">
+ * <add as="save" action="save" icon="images/save.gif"/>
+ * <br/><hr/>
+ * <add as="select" mode="select" icon="images/select.gif"/>
+ * <add as="connect" mode="connect" icon="images/connect.gif"/>
+ * </mxDefaultToolbar>
+ * (end)
+ */
+ codec.decode = function(dec, node, into)
+ {
+ if (into != null)
+ {
+ var editor = into.editor;
+ node = node.firstChild;
+
+ while (node != null)
+ {
+ if (node.nodeType == mxConstants.NODETYPE_ELEMENT)
+ {
+ if (!this.processInclude(dec, node, into))
+ {
+ if (node.nodeName == 'separator')
+ {
+ into.addSeparator();
+ }
+ else if (node.nodeName == 'br')
+ {
+ into.toolbar.addBreak();
+ }
+ else if (node.nodeName == 'hr')
+ {
+ into.toolbar.addLine();
+ }
+ else if (node.nodeName == 'add')
+ {
+ var as = node.getAttribute('as');
+ as = mxResources.get(as) || as;
+ var icon = node.getAttribute('icon');
+ var pressedIcon = node.getAttribute('pressedIcon');
+ var action = node.getAttribute('action');
+ var mode = node.getAttribute('mode');
+ var template = node.getAttribute('template');
+ var toggle = node.getAttribute('toggle') != '0';
+ var text = mxUtils.getTextContent(node);
+ var elt = null;
+
+ if (action != null)
+ {
+ elt = into.addItem(as, icon, action, pressedIcon);
+ }
+ else if (mode != null)
+ {
+ var funct = mxUtils.eval(text);
+ elt = into.addMode(as, icon, mode, pressedIcon, funct);
+ }
+ else if (template != null || (text != null && text.length > 0))
+ {
+ var cell = editor.templates[template];
+ var style = node.getAttribute('style');
+
+ if (cell != null && style != null)
+ {
+ cell = cell.clone();
+ cell.setStyle(style);
+ }
+
+ var insertFunction = null;
+
+ if (text != null && text.length > 0)
+ {
+ insertFunction = mxUtils.eval(text);
+ }
+
+ elt = into.addPrototype(as, icon, cell, pressedIcon, insertFunction, toggle);
+ }
+ else
+ {
+ var children = mxUtils.getChildNodes(node);
+
+ if (children.length > 0)
+ {
+ if (icon == null)
+ {
+ var combo = into.addActionCombo(as);
+
+ for (var i=0; i<children.length; i++)
+ {
+ var child = children[i];
+
+ if (child.nodeName == 'separator')
+ {
+ into.addOption(combo, '---');
+ }
+ else if (child.nodeName == 'add')
+ {
+ var lab = child.getAttribute('as');
+ var act = child.getAttribute('action');
+ into.addActionOption(combo, lab, act);
+ }
+ }
+ }
+ else
+ {
+ var select = null;
+ var create = function()
+ {
+ var template = editor.templates[select.value];
+
+ if (template != null)
+ {
+ var clone = template.clone();
+ var style = select.options[select.selectedIndex].cellStyle;
+
+ if (style != null)
+ {
+ clone.setStyle(style);
+ }
+
+ return clone;
+ }
+ else
+ {
+ mxLog.warn('Template '+template+' not found');
+ }
+
+ return null;
+ };
+
+ var img = into.addPrototype(as, icon, create, null, null, toggle);
+ select = into.addCombo();
+
+ // Selects the toolbar icon if a selection change
+ // is made in the corresponding combobox.
+ mxEvent.addListener(select, 'change', function()
+ {
+ into.toolbar.selectMode(img, function(evt)
+ {
+ var pt = mxUtils.convertPoint(editor.graph.container,
+ mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+
+ return editor.addVertex(null, funct(), pt.x, pt.y);
+ });
+
+ into.toolbar.noReset = false;
+ });
+
+ // Adds the entries to the combobox
+ for (var i=0; i<children.length; i++)
+ {
+ var child = children[i];
+
+ if (child.nodeName == 'separator')
+ {
+ into.addOption(select, '---');
+ }
+ else if (child.nodeName == 'add')
+ {
+ var lab = child.getAttribute('as');
+ var tmp = child.getAttribute('template');
+ var option = into.addOption(select, lab, tmp || template);
+ option.cellStyle = child.getAttribute('style');
+ }
+ }
+
+ }
+ }
+ }
+
+ // Assigns an ID to the created element to access it later.
+ if (elt != null)
+ {
+ var id = node.getAttribute('id');
+
+ if (id != null && id.length > 0)
+ {
+ elt.setAttribute('id', id);
+ }
+ }
+ }
+ }
+ }
+
+ node = node.nextSibling;
+ }
+ }
+
+ return into;
+ };
+
+ // Returns the codec into the registry
+ return codec;
+
+}());