"use strict";
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
/********************************************************************************
 * Copyright (c) 2019 EclipseSource and others.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the Eclipse
 * Public License v. 2.0 are satisfied: GNU General Public License, version 2
 * with the GNU Classpath Exception which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 ********************************************************************************/
var inversify_1 = require("inversify");
var menu_providers_1 = require("./menu-providers");
var mouse_tool_1 = require("../../base/views/mouse-tool");
var types_1 = require("../../base/types");
var model_1 = require("../select/model");
var smodel_utils_1 = require("../../base/model/smodel-utils");
var ContextMenuMouseListener = /** @class */ (function (_super) {
    __extends(ContextMenuMouseListener, _super);
    function ContextMenuMouseListener(contextMenuService, menuProvider) {
        var _this = _super.call(this) || this;
        _this.contextMenuService = contextMenuService;
        _this.menuProvider = menuProvider;
        return _this;
    }
    ContextMenuMouseListener.prototype.mouseDown = function (target, event) {
        if (event.button === 2 && this.contextMenuService && this.menuProvider) {
            var mousePosition_1 = { x: event.x, y: event.y };
            var isTargetSelected_1 = false;
            var selectableTarget_1 = smodel_utils_1.findParentByFeature(target, model_1.isSelectable);
            if (selectableTarget_1) {
                isTargetSelected_1 = selectableTarget_1.selected;
                selectableTarget_1.selected = true;
            }
            var restoreSelection_1 = function () { if (selectableTarget_1)
                selectableTarget_1.selected = isTargetSelected_1; };
            Promise.all([this.contextMenuService(), this.menuProvider.getItems(target.root, mousePosition_1)])
                .then(function (_a) {
                var menuService = _a[0], menuItems = _a[1];
                return menuService.show(menuItems, mousePosition_1, restoreSelection_1);
            });
        }
        return [];
    };
    ContextMenuMouseListener = __decorate([
        __param(0, inversify_1.inject(types_1.TYPES.IContextMenuServiceProvider)), __param(0, inversify_1.optional()),
        __param(1, inversify_1.inject(types_1.TYPES.IContextMenuProviderRegistry)), __param(1, inversify_1.optional()),
        __metadata("design:paramtypes", [Function, menu_providers_1.ContextMenuProviderRegistry])
    ], ContextMenuMouseListener);
    return ContextMenuMouseListener;
}(mouse_tool_1.MouseListener));
exports.ContextMenuMouseListener = ContextMenuMouseListener;
//# sourceMappingURL=mouse-listener.js.map