client/js/renderer/tempedge.js
changeset 284 fa8035885814
child 293 fba23fde14ba
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/js/renderer/tempedge.js	Mon May 05 17:43:37 2014 +0200
@@ -0,0 +1,99 @@
+"use strict";
+
+define(['jquery', 'underscore', 'requtils', 'renderer/baserepresentation'], function ($, _, requtils, BaseRepresentation) {
+    
+    var Utils = requtils.getUtils();
+
+    /* TempEdge Class Begin */
+
+    //var TempEdge = Renderer.TempEdge = Utils.inherit(Renderer._BaseRepresentation);
+    var TempEdge = Utils.inherit(BaseRepresentation);
+
+    _(TempEdge.prototype).extend({
+        _init: function() {
+            this.renderer.edge_layer.activate();
+            this.type = "Temp-edge";
+
+            var _color = (this.project.get("users").get(this.renkan.current_user) || Utils._USER_PLACEHOLDER(this.renkan)).get("color");
+            this.line = new paper.Path();
+            this.line.strokeColor = _color;
+            this.line.dashArray = [4, 2];
+            this.line.strokeWidth = this.options.selected_edge_stroke_width;
+            this.line.add([0,0],[0,0]);
+            this.line.__representation = this;
+            this.arrow = new paper.Path();
+            this.arrow.fillColor = _color;
+            this.arrow.add(
+                    [ 0, 0 ],
+                    [ this.options.edge_arrow_length, this.options.edge_arrow_width / 2 ],
+                    [ 0, this.options.edge_arrow_width ]
+            );
+            this.arrow.__representation = this;
+            this.arrow_angle = 0;
+        },
+        redraw: function() {
+            var _p0 = this.from_representation.paper_coords,
+            _p1 = this.end_pos,
+            _a = _p1.subtract(_p0).angle,
+            _c = _p0.add(_p1).divide(2);
+            this.line.segments[0].point = _p0;
+            this.line.segments[1].point = _p1;
+            this.arrow.rotate(_a - this.arrow_angle);
+            this.arrow.position = _c;
+            this.arrow_angle = _a;
+        },
+        paperShift: function(_delta) {
+            if (!this.renderer.isEditable()) {
+                this.renderer.removeRepresentation(_this);
+                paper.view.draw();
+                return;
+            }
+            this.end_pos = this.end_pos.add(_delta);
+            var _hitResult = paper.project.hitTest(this.end_pos);
+            this.renderer.findTarget(_hitResult);
+            this.redraw();
+        },
+        mouseup: function(_event, _isTouch) {
+            var _hitResult = paper.project.hitTest(_event.point),
+            _model = this.from_representation.model,
+            _endDrag = true;
+            if (_hitResult && typeof _hitResult.item.__representation !== "undefined") {
+                var _target = _hitResult.item.__representation;
+                if (_target.type.substr(0,4) === "Node") {
+                    var _destmodel = _target.model || _target.source_representation.model;
+                    if (_model !== _destmodel) {
+                        var _data = {
+                                id: Utils.getUID('edge'),
+                                created_by: this.renkan.current_user,
+                                from: _model,
+                                to: _destmodel
+                        };
+                        if (this.renderer.isEditable()) {
+                            this.project.addEdge(_data);
+                        }
+                    }
+                }
+
+                if (_model === _target.model || (_target.source_representation && _target.source_representation.model === _model)) {
+                    _endDrag = false;
+                    this.renderer.is_dragging = true;
+                }
+            }
+            if (_endDrag) {
+                this.renderer.click_target = null;
+                this.renderer.is_dragging = false;
+                this.renderer.removeRepresentation(this);
+                paper.view.draw();
+            }
+        },
+        destroy: function() {
+            this.arrow.remove();
+            this.line.remove();
+        }
+    });
+
+    /* TempEdge Class End */
+    
+    return TempEdge;
+
+})