@Override
	public void setValueAt(Object value, int row, AttributeTableModel model) {
		Node node = doc.tree.getEditingNode();
		String key = (String) model.keys.get(row);
		
		boolean readOnly = node.isReadOnly(key);
		
		Object oldValue = node.getAttribute(key);
		node.setAttribute(key, value);
		model.values.set(row, value);
		
		if (oldValue.equals(value)) {
			return;
		}
		
		// undo
		CompoundUndoable undoable = new CompoundUndoablePropertyChange(doc.tree);
		undoable.setName("Edit Node Attribute");
		Undoable primitive = new PrimitiveUndoableAttributeChange(node, key, oldValue, readOnly, key, value, readOnly);
		undoable.addPrimitive(primitive);
		doc.getUndoQueue().add(undoable);
		
		update(); // [md] Added so that modification date updates.
	}