Files
enviPy-bayer/static/js/ketcher2/script/ui/action/tools.js
2025-06-23 20:13:54 +02:00

143 lines
3.4 KiB
JavaScript

/****************************************************************************
* Copyright 2017 EPAM Systems
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
import { bond as bondSchema } from '../structschema';
import { toBondType } from '../structconv';
const toolActions = {
"select-lasso": {
title: "Lasso Selection",
shortcut: "Escape",
action: { tool: 'select', opts: 'lasso' }
},
"select-rectangle": {
title: "Rectangle Selection",
shortcut: "Escape",
action: { tool: 'select', opts: 'rectangle' }
},
"select-fragment": {
title: "Fragment Selection",
shortcut: "Escape",
action: { tool: 'select', opts: 'fragment' }
},
"erase": {
title: "Erase",
shortcut: ["Delete", "Backspace"],
action: { tool: 'eraser', opts: 1 } // TODO last selector mode is better
},
"chain": {
title: "Chain",
action: { tool: 'chain' }
},
"chiral-flag": {
title: "Chiral Flag",
action: { tool: 'chiralFlag' },
selected: editor => editor.struct().isChiral
},
"charge-plus": {
shortcut: "5",
title: "Charge Plus",
action: { tool: 'charge', opts: 1 }
},
"charge-minus": {
shortcut: "5",
title: "Charge Minus",
action: { tool: 'charge', opts: -1 }
},
"transform-rotate": {
shortcut: "Alt+r",
title: "Rotate Tool",
action: { tool: 'rotate' }
},
"transform-flip-h": {
shortcut: "Alt+h",
title: "Horizontal Flip",
action: { tool: 'rotate', opts: 'horizontal' }
},
"transform-flip-v": {
shortcut: "Alt+v",
title: "Vertical Flip",
action: { tool: 'rotate', opts: 'vertical' }
},
"sgroup": {
shortcut: "Mod+g",
title: "S-Group",
action: { tool: 'sgroup' }
},
"sgroup-data": {
shortcut: "Mod+g",
title: "Data S-Group",
action: { tool: 'sgroup', opts: 'DAT' }
},
"reaction-arrow": {
title: "Reaction Arrow Tool",
action: { tool: 'reactionarrow' }
},
"reaction-plus": {
title: "Reaction Plus Tool",
action: { tool: 'reactionplus' }
},
"reaction-map": {
title: "Reaction Mapping Tool",
action: { tool: 'reactionmap' }
},
"reaction-unmap": {
title: "Reaction Unmapping Tool",
action: { tool: 'reactionunmap' }
},
"rgroup-label": {
shortcut: "Mod+r",
title: "R-Group Label Tool",
action: { tool: 'rgroupatom' }
},
"rgroup-fragment": {
shortcut: ["Mod+Shift+r", "Mod+r"],
title: "R-Group Fragment Tool",
action: { tool: 'rgroupfragment' }
},
"rgroup-attpoints": {
shortcut: "Mod+r",
title: "Attachment Point Tool",
action: { tool: 'apoint' }
},
};
const bondCuts = {
"single": "1",
"double": "2",
"triple": "3",
"up": "1",
"down": "1",
"updown": "1",
"crossed": "2",
"any": "0",
"aromatic": "4",
};
const typeSchema = bondSchema.properties.type;
export default typeSchema.enum.reduce((res, type, i) => {
res[`bond-${type}`] = {
title: `${typeSchema.enumNames[i]} Bond`,
shortcut: bondCuts[type],
action: {
tool: 'bond',
opts: toBondType(type)
}
};
return res;
}, toolActions);