Skip to content

Commit

Permalink
increase and decrease charge and render[#80 state:committed]
Browse files Browse the repository at this point in the history
  • Loading branch information
novakps committed Oct 13, 2010
1 parent fe445ff commit 4dfcc28
Show file tree
Hide file tree
Showing 3 changed files with 209 additions and 146 deletions.
222 changes: 133 additions & 89 deletions build/kemia-whitespace-only.js
Original file line number Diff line number Diff line change
Expand Up @@ -3425,7 +3425,7 @@ kemia.view.AtomRenderer.prototype.highlightOn = function(atom, opt_color, opt_gr
};
kemia.view.AtomRenderer.prototype.compoundSymbol = function(atom) {
var retval = {text:"", justification:"center", superscript:"", subscript:""};
if(atom.symbol != "C" || atom.countBonds() <= 1) {
if(atom.symbol != "C" || atom.countBonds() < 1 || atom.charge) {
var hydrogen_count = atom.hydrogenCount();
if(hydrogen_count == 0) {
retval.text = atom.symbol
Expand Down Expand Up @@ -15993,11 +15993,13 @@ kemia.controller.plugins.Move.prototype.execCommandInternal = function(command,
kemia.controller.plugins.Move.prototype.handleMouseMove = function(e) {
if((this.isActive[kemia.controller.plugins.Move.COMMAND.MOVE] || this.isActive[kemia.controller.plugins.Move.COMMAND.ROTATE]) && !this.isDragging) {
var target = this.editorObject.findTarget(e);
this.editorObject.clearSelected();
this.editorObject.getOriginalElement().style.cursor = "default";
if(e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup.clear()
}if(this.isActive[kemia.controller.plugins.Move.COMMAND.ROTATE]) {
if(target instanceof kemia.model.Molecule) {
this.editorObject.addSelected(target);
this.editorObject.getOriginalElement().style.cursor = kemia.controller.plugins.Move.ROTATE_CURSOR_STYLE;
if(!e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup = this.highlightMolecule(target)
Expand All @@ -16007,6 +16009,7 @@ kemia.controller.plugins.Move.prototype.handleMouseMove = function(e) {
}
}else {
if(target instanceof kemia.model.Atom) {
this.editorObject.addSelected(target);
this.editorObject.getOriginalElement().style.cursor = "move";
if(!e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup = this.highlightAtom(target)
Expand All @@ -16015,6 +16018,7 @@ kemia.controller.plugins.Move.prototype.handleMouseMove = function(e) {
}return true
}else {
if(target instanceof kemia.model.Bond) {
this.editorObject.addSelected(target);
this.editorObject.getOriginalElement().style.cursor = "move";
if(!e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup = this.highlightBond(target)
Expand All @@ -16023,6 +16027,7 @@ kemia.controller.plugins.Move.prototype.handleMouseMove = function(e) {
}return true
}else {
if(target instanceof kemia.model.Molecule) {
this.editorObject.addSelected(target);
this.editorObject.getOriginalElement().style.cursor = "move";
if(!e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup = this.highlightMolecule(target)
Expand All @@ -16031,6 +16036,7 @@ kemia.controller.plugins.Move.prototype.handleMouseMove = function(e) {
}return true
}else {
if(target instanceof kemia.model.Arrow) {
this.editorObject.addSelected(target);
if(!e.shiftKey) {
this.editorObject.getOriginalElement().style.cursor = "move";
if(!e.currentTarget.highlightGroup) {
Expand All @@ -16041,6 +16047,7 @@ kemia.controller.plugins.Move.prototype.handleMouseMove = function(e) {
}
}else {
if(target instanceof kemia.model.Plus) {
this.editorObject.addSelected(target);
if(!e.shiftKey) {
this.editorObject.getOriginalElement().style.cursor = "move";
if(!e.currentTarget.highlightGroup) {
Expand Down Expand Up @@ -16642,28 +16649,26 @@ kemia.controller.plugins.BondEdit.BOND_TYPES = [{caption:"Single", order:kemia.m
stereo:kemia.model.Bond.STEREO.UP}, {caption:"Single Down", order:kemia.model.Bond.ORDER.SINGLE, stereo:kemia.model.Bond.STEREO.DOWN}, {caption:"Single Up or Down", order:kemia.model.Bond.ORDER.SINGLE, stereo:kemia.model.Bond.STEREO.UP_OR_DOWN}];
kemia.controller.plugins.BondEdit.prototype.logger = goog.debug.Logger.getLogger("kemia.controller.plugins.BondEdit");
kemia.controller.plugins.BondEdit.prototype.handleKeyboardShortcut = function(e) {
if(this.bond_type) {
var id = e.identifier;
var shortcut = goog.array.find(kemia.controller.plugins.BondEdit.SHORTCUTS, function(obj) {
return obj.id == e.identifier
});
if(shortcut) {
goog.array.forEach(this.editorObject.getSelected(), function(target) {
var repeat = parseInt(shortcut.id);
if(target instanceof kemia.model.Atom) {
var attachment_atom = target;
this.editorObject.dispatchBeforeChange();
for(var i = 0;i < repeat;i++) {
var new_bond = this.addBondToAtom(attachment_atom);
if(new_bond) {
attachment_atom = new_bond.otherAtom(attachment_atom)
}
}this.editorObject.setModelsSilently(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
}return true
}, this)
}
var id = e.identifier;
var shortcut = goog.array.find(kemia.controller.plugins.BondEdit.SHORTCUTS, function(obj) {
return obj.id == e.identifier
});
if(shortcut) {
goog.array.forEach(this.editorObject.getSelected(), function(target) {
var repeat = parseInt(shortcut.id);
if(target instanceof kemia.model.Atom) {
var attachment_atom = target;
this.editorObject.dispatchBeforeChange();
for(var i = 0;i < repeat;i++) {
var new_bond = this.addBondToAtom(attachment_atom, {order:kemia.model.Bond.ORDER.SINGLE, stereo:kemia.model.Bond.STEREO.NOT_STEREO});
if(new_bond) {
attachment_atom = new_bond.otherAtom(attachment_atom)
}
}this.editorObject.setModelsSilently(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
}return true
}, this)
}
};
kemia.controller.plugins.BondEdit.prototype.handleMouseMove = function(e) {
Expand Down Expand Up @@ -16702,7 +16707,7 @@ kemia.controller.plugins.BondEdit.prototype.handleMouseDown = function(e) {
goog.array.forEach(selected, function(target) {
if(target instanceof kemia.model.Atom) {
this.editorObject.dispatchBeforeChange();
this.addBondToAtom(target);
this.addBondToAtom(target, this.bond_type);
this.editorObject.setModelsSilently(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
Expand Down Expand Up @@ -16745,7 +16750,7 @@ kemia.controller.plugins.BondEdit.prototype.createMolecule = function(pos) {
var atom = new kemia.model.Atom("C", coord.x, coord.y);
var molecule = new kemia.model.Molecule;
molecule.addAtom(atom);
this.addBondToAtom(atom);
this.addBondToAtom(atom, this.bond_type);
if(this.editorObject.getModels().length > 0) {
var model = this.editorObject.getModels()[0];
if(model instanceof kemia.model.Reaction) {
Expand Down Expand Up @@ -16781,63 +16786,66 @@ kemia.controller.plugins.BondEdit.prototype.replaceBond = function(bond) {
molecule.removeBond(bond);
molecule.addBond(new_bond)
};
kemia.controller.plugins.BondEdit.prototype.addBondToAtom = function(atom) {
if(this.bond_type) {
var new_angle;
var bonds = atom.bonds.getValues();
if(bonds.length == 0) {
new_angle = 0
kemia.controller.plugins.BondEdit.prototype.addBondToAtom = function(atom, bond_type) {
var new_angle;
var bonds = atom.bonds.getValues();
var bond_length = 1.25;
if(bonds.length) {
bond_length = goog.array.reduce(bonds, function(r, b) {
return r + goog.math.Coordinate.distance(b.source.coord, b.target.coord)
}, 0) / bonds.length
}if(bonds.length == 0) {
new_angle = 0
}else {
if(bonds.length == 1) {
var other_atom = bonds[0].otherAtom(atom);
var existing_angle = goog.math.angle(atom.coord.x, atom.coord.y, other_atom.coord.x, other_atom.coord.y);
var other_angles_diff = goog.array.map(other_atom.bonds.getValues(), function(b) {
var not_other = b.otherAtom(other_atom);
if(not_other != atom) {
return goog.math.angleDifference(existing_angle, goog.math.angle(other_atom.coord.x, other_atom.coord.y, not_other.coord.x, not_other.coord.y))
}
});
goog.array.sort(other_angles_diff);
var min_angle = other_angles_diff[0];
if(min_angle > 0) {
new_angle = existing_angle - 120
}else {
new_angle = existing_angle + 120
}
}else {
if(bonds.length == 1) {
var other_atom = bonds[0].otherAtom(atom);
var existing_angle = goog.math.angle(atom.coord.x, atom.coord.y, other_atom.coord.x, other_atom.coord.y);
var other_angles_diff = goog.array.map(other_atom.bonds.getValues(), function(b) {
var not_other = b.otherAtom(other_atom);
if(not_other != atom) {
return goog.math.angleDifference(existing_angle, goog.math.angle(other_atom.coord.x, other_atom.coord.y, not_other.coord.x, not_other.coord.y))
}
if(bonds.length == 2) {
var angles = goog.array.map(bonds, function(bond) {
var other_atom = bond.otherAtom(atom);
return goog.math.angle(atom.coord.x, atom.coord.y, other_atom.coord.x, other_atom.coord.y)
});
goog.array.sort(other_angles_diff);
var min_angle = other_angles_diff[0];
if(min_angle > 0) {
new_angle = existing_angle - 120
var diff = goog.math.angleDifference(angles[0], angles[1]);
if(Math.abs(diff) < 180) {
diff = 180 + diff / 2
}else {
new_angle = existing_angle + 120
}
diff = diff / 2
}new_angle = angles[0] + diff
}else {
if(bonds.length == 2) {
var angles = goog.array.map(bonds, function(bond) {
var other_atom = bond.otherAtom(atom);
if(bonds.length == 3) {
goog.array.sort(bonds, function(b1, b2) {
return goog.array.defaultCompare(b1.otherAtom(atom).bonds.getValues().length, b2.otherAtom(atom).bonds.getValues().length)
});
var insert_between = goog.array.slice(bonds, 0, 2);
var angles = goog.array.map(insert_between, function(b) {
var other_atom = b.otherAtom(atom);
return goog.math.angle(atom.coord.x, atom.coord.y, other_atom.coord.x, other_atom.coord.y)
});
var diff = goog.math.angleDifference(angles[0], angles[1]);
if(Math.abs(diff) < 180) {
diff = 180 + diff / 2
}else {
diff = diff / 2
}new_angle = angles[0] + diff
}else {
if(bonds.length == 3) {
goog.array.sort(bonds, function(b1, b2) {
return goog.array.defaultCompare(b1.otherAtom(atom).bonds.getValues().length, b2.otherAtom(atom).bonds.getValues().length)
});
var insert_between = goog.array.slice(bonds, 0, 2);
var angles = goog.array.map(insert_between, function(b) {
var other_atom = b.otherAtom(atom);
return goog.math.angle(atom.coord.x, atom.coord.y, other_atom.coord.x, other_atom.coord.y)
});
new_angle = angles[0] + goog.math.angleDifference(angles[0], angles[1]) / 2
}
new_angle = angles[0] + goog.math.angleDifference(angles[0], angles[1]) / 2
}
}
}if(new_angle != undefined) {
var new_atom = new kemia.model.Atom("C", atom.coord.x + goog.math.angleDx(new_angle, 1.25), atom.coord.y + goog.math.angleDy(new_angle, 1.25));
var new_bond = new kemia.model.Bond(atom, new_atom, this.bond_type.order, this.bond_type.stereo);
var molecule = atom.molecule;
molecule.addAtom(new_atom);
molecule.addBond(new_bond);
return new_bond
}
}if(new_angle != undefined) {
var new_atom = new kemia.model.Atom("C", atom.coord.x + goog.math.angleDx(new_angle, bond_length), atom.coord.y + goog.math.angleDy(new_angle, bond_length));
var new_bond = new kemia.model.Bond(atom, new_atom, bond_type.order, bond_type.stereo);
var molecule = atom.molecule;
molecule.addAtom(new_atom);
molecule.addBond(new_bond);
return new_bond
}
};
kemia.controller.plugins.BondEdit.prototype.highlightAtom = function(atom, opt_group) {
Expand All @@ -16858,6 +16866,8 @@ kemia.controller.plugins.BondEdit.prototype.queryCommandValue = function(command
goog.provide("kemia.controller.plugins.AtomEdit");
goog.require("kemia.controller.Plugin");
goog.require("goog.debug.Logger");
goog.require("goog.ui.KeyboardShortcutHandler");
goog.require("goog.events.KeyCodes");
kemia.controller.plugins.AtomEdit = function() {
kemia.controller.Plugin.call(this)
};
Expand All @@ -16868,7 +16878,7 @@ kemia.controller.plugins.AtomEdit.prototype.isSupportedCommand = function(comman
return command == kemia.controller.plugins.AtomEdit.COMMAND
};
kemia.controller.plugins.AtomEdit.prototype.getTrogClassId = goog.functions.constant(kemia.controller.plugins.AtomEdit.COMMAND);
kemia.controller.plugins.AtomEdit.SHORTCUTS = [{id:"C", key:"c"}, {id:"N", key:"n"}, {id:"S", key:"s"}, {id:"P", key:"p"}, {id:"O", key:"o"}];
kemia.controller.plugins.AtomEdit.SHORTCUTS = [{id:"H", key:"h"}, {id:"C", key:"c"}, {id:"N", key:"n"}, {id:"S", key:"s"}, {id:"P", key:"p"}, {id:"O", key:"o"}, {id:"F", key:"f"}, {id:"Cl", key:"cl"}, {id:"+", key:[goog.events.KeyCodes.EQUALS, goog.ui.KeyboardShortcutHandler.Modifiers.SHIFT]}, {id:"-", key:goog.events.KeyCodes.DASH}];
kemia.controller.plugins.AtomEdit.prototype.getKeyboardShortcuts = function() {
return kemia.controller.plugins.AtomEdit.SHORTCUTS
};
Expand All @@ -16883,10 +16893,36 @@ kemia.controller.plugins.AtomEdit.prototype.handleKeyboardShortcut = function(e)
try {
var id = e.identifier;
var shortcut = goog.array.find(kemia.controller.plugins.AtomEdit.SHORTCUTS, function(obj) {
return obj.id == e.identifier
return obj.id == id
});
if(shortcut) {
this.symbol = shortcut.id;
goog.array.forEach(this.editorObject.getSelected(), function(target) {
if(target instanceof kemia.model.Atom) {
var atom = target;
if("+" == shortcut.id) {
this.editorObject.dispatchBeforeChange();
atom.charge++;
this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange()
}else {
if("-" == shortcut.id) {
this.editorObject.dispatchBeforeChange();
atom.charge--;
this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange()
}else {
var symbol = shortcut.id;
if(symbol != atom.symbol) {
this.editorObject.dispatchBeforeChange();
this.setAtomSymbol(symbol, atom);
this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
}
}
}
}
}, this);
return true
}
}catch(e) {
Expand All @@ -16895,11 +16931,13 @@ kemia.controller.plugins.AtomEdit.prototype.handleKeyboardShortcut = function(e)
};
kemia.controller.plugins.AtomEdit.prototype.handleMouseMove = function(e) {
if(this.symbol) {
this.editorObject.clearSelected();
this.editorObject.getOriginalElement().style.cursor = "default";
var target = this.editorObject.findTarget(e);
if(e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup.clear()
}if(target instanceof kemia.model.Atom) {
this.editorObject.addSelected(target);
this.editorObject.getOriginalElement().style.cursor = "pointer";
if(!e.currentTarget.highlightGroup) {
e.currentTarget.highlightGroup = this.highlightAtom(target)
Expand All @@ -16910,28 +16948,34 @@ kemia.controller.plugins.AtomEdit.prototype.handleMouseMove = function(e) {
}return false
};
kemia.controller.plugins.AtomEdit.prototype.handleMouseDown = function(e) {
var target = this.editorObject.findTarget(e);
if(target instanceof kemia.model.Atom) {
var atom = target;
if(this.symbol && this.symbol != atom.symbol) {
this.editorObject.dispatchBeforeChange();
this.setAtomSymbol(e, atom);
if(this.symbol) {
var selected = this.editorObject.getSelected();
if(selected.length) {
goog.array.forEach(selected, function(target) {
if(target instanceof kemia.model.Atom) {
var atom = target;
if(this.symbol && this.symbol != atom.symbol) {
this.editorObject.dispatchBeforeChange();
this.setAtomSymbol(this.symbol, atom);
this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
}
}
}, this)
}else {
this.createMolecule(kemia.controller.ReactionEditor.getMouseCoords(e));
this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
}
}if(target == undefined && this.symbol) {
this.createMolecule(kemia.controller.ReactionEditor.getMouseCoords(e));
this.editorObject.setModels(this.editorObject.getModels());
this.editorObject.dispatchChange();
return true
}return false
};
kemia.controller.plugins.AtomEdit.prototype.highlightAtom = function(atom, opt_group) {
return this.editorObject.reactionRenderer.moleculeRenderer.atomRenderer.highlightOn(atom, "purple", opt_group)
};
kemia.controller.plugins.AtomEdit.prototype.setAtomSymbol = function(e, atom) {
var new_atom = new kemia.model.Atom(this.symbol, atom.coord.x, atom.coord.y);
kemia.controller.plugins.AtomEdit.prototype.setAtomSymbol = function(symbol, atom) {
var new_atom = new kemia.model.Atom(symbol, atom.coord.x, atom.coord.y);
var molecule = atom.molecule;
goog.array.forEach(atom.bonds.getValues(), function(bond) {
var new_bond = bond.clone();
Expand Down

0 comments on commit 4dfcc28

Please sign in to comment.