Add support for click event node registration.

This commit is contained in:
Paulo Gustavo Veiga 2012-03-20 08:56:20 -03:00
parent da63f53fa8
commit f82f024fb7
5 changed files with 49 additions and 26 deletions

View File

@ -51,7 +51,7 @@
<mkdir dir="${basedir}/target/classes"/> <mkdir dir="${basedir}/target/classes"/>
<concat destfile="${basedir}/target/tmp/mindplot.js" append="false"> <concat destfile="${basedir}/target/tmp/mindplot.js" append="false">
<filelist dir="${basedir}/src/main/javascript/" files="header.js"/> <filelist dir="${basedir}/src/main/javascript/" files="header.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="TopicEditor.js"/> <filelist dir="${basedir}/src/main/javascript/" files="TopicEventDispatcher.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="model/IMindmap.js"/> <filelist dir="${basedir}/src/main/javascript/" files="model/IMindmap.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="model/Mindmap.js"/> <filelist dir="${basedir}/src/main/javascript/" files="model/Mindmap.js"/>
<filelist dir="${basedir}/src/main/javascript/" files="model/INodeModel.js"/> <filelist dir="${basedir}/src/main/javascript/" files="model/INodeModel.js"/>

View File

@ -61,7 +61,7 @@ mindplot.Designer = new Class({
// Set editor working area ... // Set editor working area ...
this.setViewPort(options.viewPort); this.setViewPort(options.viewPort);
mindplot.TopicEditor.configure(this.isReadOnly()); mindplot.TopicEventDispatcher.configure(this.isReadOnly());
}, },
/** /**
@ -71,6 +71,10 @@ mindplot.Designer = new Class({
mindplot.DesignerKeyboard.getInstance().deactivate(); mindplot.DesignerKeyboard.getInstance().deactivate();
this.deselectAll(); this.deselectAll();
}, },
/**
* Activates the keyboard events so you can enter text into forms
*/
activateKeyboard: function() { activateKeyboard: function() {
mindplot.DesignerKeyboard.getInstance().activate(); mindplot.DesignerKeyboard.getInstance().activate();
}, },
@ -85,8 +89,8 @@ mindplot.Designer = new Class({
}, },
addEvent: function(type, listener) { addEvent: function(type, listener) {
if (type == "editnode") { if (type == mindplot.TopicEvent.EDIT || type == mindplot.TopicEvent.CLICK) {
var editor = mindplot.TopicEditor.getInstance(); var editor = mindplot.TopicEventDispatcher.getInstance();
editor.addEvent(type, listener); editor.addEvent(type, listener);
} else { } else {
this.parent(type, listener); this.parent(type, listener);
@ -294,7 +298,7 @@ mindplot.Designer = new Class({
object.setOnFocus(false); object.setOnFocus(false);
}); });
}, },
/** /**
* Set the zoom of the map. * Set the zoom of the map.
* @param: zoom: number between 0.3 and 1.9 * @param: zoom: number between 0.3 and 1.9
@ -302,16 +306,13 @@ mindplot.Designer = new Class({
setZoom: function(zoom) { setZoom: function(zoom) {
if (zoom > 1.9 || zoom < 0.3) { if (zoom > 1.9 || zoom < 0.3) {
$notify("Zoom too high. Cannot apply zoom above 1.9 or below 0.3"); $notify("Zoom too high. Cannot apply zoom above 1.9 or below 0.3");
console.log("Tried to set zoom to " + zoom + " which is utside allowed range."); console.log("Tried to set zoom to " + zoom + " which is outside allowed range.");
return; return;
} }
this.getModel().setZoom(zoom); this.getModel().setZoom(zoom);
this._workspace.setZoom(zoom); this._workspace.setZoom(zoom);
}, },
zoomOut : function(factor) { zoomOut : function(factor) {
if (!factor) if (!factor)
factor = 1.2; factor = 1.2;

View File

@ -49,7 +49,7 @@ mindplot.Topic = new Class({
}); });
this.addEvent('dblclick', function (event) { this.addEvent('dblclick', function (event) {
this._getTopicEditor().show(this); this._getTopicEventDispatcher().show(this);
event.stopPropagation(true); event.stopPropagation(true);
}.bind(this)); }.bind(this));
}, },
@ -583,7 +583,7 @@ mindplot.Topic = new Class({
elem.addEvent('mouseout', outout); elem.addEvent('mouseout', outout);
// Focus events ... // Focus events ...
var mouseDown = function(event) { elem.addEvent('mousedown', function(event) {
var value = true; var value = true;
if ((event.meta && Browser.Platform.mac) || (event.control && !Browser.Platform.mac)) { if ((event.meta && Browser.Platform.mac) || (event.control && !Browser.Platform.mac)) {
value = !this.isOnFocus(); value = !this.isOnFocus();
@ -591,8 +591,10 @@ mindplot.Topic = new Class({
event.preventDefault(); event.preventDefault();
} }
topic.setOnFocus(value); topic.setOnFocus(value);
}.bind(this);
elem.addEvent('mousedown', mouseDown); var eventDispatcher = this._getTopicEventDispatcher();
eventDispatcher.process(mindplot.TopicEvent.CLICK, this);
}.bind(this));
}, },
areChildrenShrunken : function() { areChildrenShrunken : function() {
@ -658,7 +660,7 @@ mindplot.Topic = new Class({
}, },
showTextEditor : function(text) { showTextEditor : function(text) {
this._getTopicEditor().show(this, {text:text}); this._getTopicEventDispatcher().show(this, {text:text});
}, },
showNoteEditor : function() { showNoteEditor : function() {
@ -735,11 +737,11 @@ mindplot.Topic = new Class({
}, },
closeEditors : function() { closeEditors : function() {
this._getTopicEditor().close(true); this._getTopicEventDispatcher().close(true);
}, },
_getTopicEditor : function() { _getTopicEventDispatcher : function() {
return mindplot.TopicEditor.getInstance(); return mindplot.TopicEventDispatcher.getInstance();
}, },
/** /**
@ -1128,7 +1130,7 @@ mindplot.Topic = new Class({
} }
// If a drag node is create for it, let's hide the editor. // If a drag node is create for it, let's hide the editor.
this._getTopicEditor().close(); this._getTopicEventDispatcher().close();
return result; return result;
}, },

View File

@ -16,13 +16,13 @@
* limitations under the License. * limitations under the License.
*/ */
mindplot.TopicEditor = new Class({ mindplot.TopicEventDispatcher = new Class({
Extends: Events, Extends: Events,
Static: { Static: {
_instance: null, _instance: null,
configure: function(readOnly) { configure: function(readOnly) {
this._instance = new mindplot.TopicEditor(readOnly); this._instance = new mindplot.TopicEventDispatcher(readOnly);
}, },
getInstance : function() { getInstance : function() {
@ -44,6 +44,10 @@ mindplot.TopicEditor = new Class({
}, },
show : function(topic, options) { show : function(topic, options) {
this.process(mindplot.TopicEvent.EDIT, topic, options);
},
process : function(eventType, topic, options) {
// Close all previous open editor .... // Close all previous open editor ....
if (this.isVisible()) { if (this.isVisible()) {
@ -52,11 +56,11 @@ mindplot.TopicEditor = new Class({
// Open the new editor ... // Open the new editor ...
var model = topic.getModel(); var model = topic.getModel();
if (model.getShapeType() != mindplot.model.TopicShape.IMAGE && !this._readOnly) { if (model.getShapeType() != mindplot.model.TopicShape.IMAGE && !this._readOnly && eventType == mindplot.TopicEvent.EDIT) {
this._multilineEditor.show(topic, options ? options.text : null); this._multilineEditor.show(topic, options ? options.text : null);
this._activeEditor = this._multilineEditor; this._activeEditor = this._multilineEditor;
} else { } else {
this.fireEvent("editnode", {model:model,readOnly:this._readOnly}); this.fireEvent(eventType, {model:model,readOnly:this._readOnly});
} }
}, },
@ -65,3 +69,9 @@ mindplot.TopicEditor = new Class({
} }
}); });
mindplot.TopicEvent = {
EDIT : "editnode",
CLICK : "clicknode"
};

View File

@ -73,12 +73,22 @@
designer.addDraggedNode(event, node); designer.addDraggedNode(event, node);
}); });
designer.addEvent("editnode", function(event) { designer.addEvent(mindplot.TopicEvent.EDIT, function(event) {
var node = event.model; var node = event.model;
alert("Node Id:" + node.getId()); console.log("Event: edit");
alert("Node Metadata:" + node.getMetadata()); console.log("Node Id:" + node.getId());
alert("Is Read Only:" + event.readOnly); console.log("Node Metadata:" + node.getMetadata());
console.log("Is Read Only:" + event.readOnly);
});
designer.addEvent(mindplot.TopicEvent.CLICK, function(event) {
var node = event.model;
console.log("Event: click");
console.log("Node Id:" + node.getId());
console.log("Node Metadata:" + node.getMetadata());
console.log("Is Read Only:" + event.readOnly);
}); });
}); });
</script> </script>