sprotty
Version:
A next-gen framework for graphical views
130 lines • 5.92 kB
JavaScript
;
/********************************************************************************
* Copyright (c) 2018 TypeFox 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 __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 });
exports.getEditableLabel = exports.EditLabelKeyListener = exports.EditLabelMouseListener = exports.ApplyLabelEditCommand = exports.ResolvedLabelEdit = exports.isApplyLabelEditAction = exports.isEditLabelAction = exports.EditLabelAction = void 0;
const inversify_1 = require("inversify");
const actions_1 = require("sprotty-protocol/lib/actions");
const command_1 = require("../../base/commands/command");
const types_1 = require("../../base/types");
const mouse_tool_1 = require("../../base/views/mouse-tool");
const key_tool_1 = require("../../base/views/key-tool");
const keyboard_1 = require("../../utils/keyboard");
const model_1 = require("../select/model");
const iterable_1 = require("../../utils/iterable");
const model_2 = require("./model");
var EditLabelAction;
(function (EditLabelAction) {
EditLabelAction.KIND = 'EditLabel';
function create(labelId) {
return {
kind: EditLabelAction.KIND,
labelId
};
}
EditLabelAction.create = create;
})(EditLabelAction || (exports.EditLabelAction = EditLabelAction = {}));
function isEditLabelAction(element) {
return (0, actions_1.isAction)(element) && element.kind === EditLabelAction.KIND && 'labelId' in element;
}
exports.isEditLabelAction = isEditLabelAction;
function isApplyLabelEditAction(element) {
return (0, actions_1.isAction)(element) && element.kind === actions_1.ApplyLabelEditAction.KIND && 'labelId' in element && 'text' in element;
}
exports.isApplyLabelEditAction = isApplyLabelEditAction;
class ResolvedLabelEdit {
}
exports.ResolvedLabelEdit = ResolvedLabelEdit;
let ApplyLabelEditCommand = class ApplyLabelEditCommand extends command_1.Command {
constructor(action) {
super();
this.action = action;
}
execute(context) {
const index = context.root.index;
const label = index.getById(this.action.labelId);
if (label && (0, model_2.isEditableLabel)(label)) {
this.resolvedLabelEdit = { label, oldLabel: label.text, newLabel: this.action.text };
label.text = this.action.text;
}
return context.root;
}
undo(context) {
if (this.resolvedLabelEdit) {
this.resolvedLabelEdit.label.text = this.resolvedLabelEdit.oldLabel;
}
return context.root;
}
redo(context) {
if (this.resolvedLabelEdit) {
this.resolvedLabelEdit.label.text = this.resolvedLabelEdit.newLabel;
}
return context.root;
}
};
exports.ApplyLabelEditCommand = ApplyLabelEditCommand;
ApplyLabelEditCommand.KIND = actions_1.ApplyLabelEditAction.KIND;
exports.ApplyLabelEditCommand = ApplyLabelEditCommand = __decorate([
__param(0, (0, inversify_1.inject)(types_1.TYPES.Action)),
__metadata("design:paramtypes", [Object])
], ApplyLabelEditCommand);
class EditLabelMouseListener extends mouse_tool_1.MouseListener {
doubleClick(target, event) {
const editableLabel = getEditableLabel(target);
if (editableLabel) {
return [EditLabelAction.create(editableLabel.id)];
}
return [];
}
}
exports.EditLabelMouseListener = EditLabelMouseListener;
class EditLabelKeyListener extends key_tool_1.KeyListener {
keyDown(element, event) {
if ((0, keyboard_1.matchesKeystroke)(event, 'F2')) {
const editableLabels = (0, iterable_1.toArray)(element.index.all()
.filter(e => (0, model_1.isSelectable)(e) && e.selected)).map(getEditableLabel)
.filter((e) => e !== undefined);
if (editableLabels.length === 1) {
return [EditLabelAction.create(editableLabels[0].id)];
}
}
return [];
}
}
exports.EditLabelKeyListener = EditLabelKeyListener;
function getEditableLabel(element) {
if ((0, model_2.isEditableLabel)(element)) {
return element;
}
else if ((0, model_2.isWithEditableLabel)(element) && element.editableLabel) {
return element.editableLabel;
}
return undefined;
}
exports.getEditableLabel = getEditableLabel;
//# sourceMappingURL=edit-label.js.map