 
   ###*
   @method
+    Add editor
+  @param {Editor} editor
+    Editor instance
+  @param {number} [position=null]
+    Position to be added (if null, append to last)
+  @return {boolean}
+    Result (true if successfully added)
+  ###
+  addEditor: (editor, position) ->
+    return false if @_editors.indexOf(editor) >= 0
+    last = @_editors.length
+    position = last unless position?
+    position = Math.max(Math.min(position, last), 0)
+    @_editors.splice(last, 0, editor)
+    @dispatchEvent({type: "addeditor", editor: editor, position: position})
+    return true
+
+  ###*
+  @method
+    Remove editor
+  @param {Editor} editor
+    Editor instance
+  @return {boolean}
+    Result (true if successfully removed)
+  ###
+  removeEditor: (editor) ->
+    position = @_editors.indexOf(editor)
+    return false if position < 0
+    @_editors.splice(position, 1)
+    @_dispatchEvent({type: "removeeditor", editor: editor, position: position})
+    return true
+
+  ###*
+  @method
     Build sketch
   @param {boolean} [force=false]
     Force build all files

  @event("additem")

  ###*
  @event addItem
    SketchItem added
  @param {Object} event
    Event object
  @param {Sketch} event.target

  @event("boardchange")

  ###*
  @event additem
    SketchItem added
  @param {Object} event
    Event object
