/**
 * Copyright (c) 2011-2018 by Andrew Mustun. All rights reserved.
 * 
 * This file is part of the QCAD project.
 *
 * QCAD is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * QCAD is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with QCAD.
 */

//! [main]
//! [include]
include("scripts/EAction.js");
//! [include]

//! [constructor]
/**
 * \class ExThreePoints
 * \ingroup ecma_misc_examples_draw
 */
function ExThreePoints(guiAction) {
    EAction.call(this, guiAction);
}
//! [constructor]

//! [State]
ExThreePoints.State = {
    SettingPosition : 0
};
//! [State]

//! [inheritance]
ExThreePoints.prototype = new EAction();
//! [inheritance]

//! [setState]
ExThreePoints.prototype.setState = function(state) {
    EAction.prototype.setState.call(this, state);

    // set crosshair cursor for choosing the coordinate:
    this.setCrosshairCursor();

    // we are interested in coordinates the user clicks 
    // (as opposed to entities):
    this.getDocumentInterface().setClickMode(RAction.PickCoordinate);

    // status bar user information:
    var appWin = RMainWindowQt.getMainWindow();
    var tr = qsTr("Position");
    this.setLeftMouseTip(tr);
    this.setCommandPrompt(tr);
    this.setRightMouseTip(EAction.trCancel);

    // show the snap toolbar, so the user can choose an alternative 
    // snap tool if desired:
    EAction.showSnapTools();
};
//! [setState]

//! [beginEvent]
ExThreePoints.prototype.beginEvent = function() {
    EAction.prototype.beginEvent.call(this);

    this.setState(ExThreePoints.State.SettingPosition);
};
//! [beginEvent]

//! [coordinateEvent]
ExThreePoints.prototype.coordinateEvent = function(event) {
    // the exact position that was clicked or 
    // entered by the user:
    var pos = event.getModelPosition();

    // move relative zero point to that position:
    this.getDocumentInterface().setRelativeZero(pos);

    // create an operation for adding objects:
    var op = new RAddObjectsOperation();
    for (var i=0; i<3; i++) {
        // create a point entity and add it to the operation:
        var point = new RPointEntity(
            this.getDocument(),
            new RPointData(new RVector(pos.x + i, pos.y))
        );
        op.addObject(point);
    }

    // apply the operation to the current drawing:
    this.getDocumentInterface().applyOperation(op);
};
//! [coordinateEvent]

//! [init]
ExThreePoints.init = function(basePath) {
    var action = new RGuiAction(qsTr("Three Points"), RMainWindowQt.getMainWindow());
    action.setRequiresDocument(true);
    action.setScriptFile(basePath + "/ExThreePoints.js");
    action.setStatusTip(qsTr("Draw three points"));
    action.setDefaultShortcut(new QKeySequence("p,3"));
    action.setDefaultCommands(["point3"]);
    action.setGroupSortOrder(73100);
    action.setSortOrder(400);
    action.setWidgetNames(["DrawExamplesMenu"]);
};
//! [init]
//! [main]
