mirror of
https://github.com/sotam0316/drawNET_test.git
synced 2026-04-25 03:58:38 +09:00
56 lines
2.2 KiB
JavaScript
56 lines
2.2 KiB
JavaScript
import { state } from '../../state.js';
|
|
|
|
export function initSelectionEvents() {
|
|
if (!state.graph) return;
|
|
|
|
state.graph.on('cell:selected', ({ cell }) => {
|
|
if (cell.isNode()) {
|
|
if (!state.selectionOrder.includes(cell.id)) {
|
|
state.selectionOrder.push(cell.id);
|
|
}
|
|
} else if (cell.isEdge()) {
|
|
// Add vertices tool for manual routing control (unless locked)
|
|
if (!cell.getData()?.locked) {
|
|
cell.addTools([{ name: 'vertices' }]);
|
|
}
|
|
|
|
// ADD S/T labels for clear identification of Start and Target
|
|
const currentLabels = cell.getLabels() || [];
|
|
cell.setLabels([
|
|
...currentLabels,
|
|
{ id: 'selection-source-label', position: { distance: 0.05 }, attrs: { text: { text: 'S', fill: '#10b981', fontSize: 10, fontWeight: 'bold' }, rect: { fill: '#ffffff', stroke: '#10b981', strokeWidth: 1, rx: 2, ry: 2 } } },
|
|
{ id: 'selection-target-label', position: { distance: 0.95 }, attrs: { text: { text: 'T', fill: '#ef4444', fontSize: 10, fontWeight: 'bold' }, rect: { fill: '#ffffff', stroke: '#ef4444', strokeWidth: 1, rx: 2, ry: 2 } } }
|
|
]);
|
|
}
|
|
});
|
|
|
|
state.graph.on('cell:unselected', ({ cell }) => {
|
|
const isLocked = cell.getData()?.locked;
|
|
|
|
if (cell.isEdge()) {
|
|
if (!isLocked) {
|
|
cell.removeTools();
|
|
} else {
|
|
// Keep boundary if locked, but remove selection-only tools if any
|
|
cell.removeTools(['vertices']);
|
|
}
|
|
|
|
// Remove selection labels safely
|
|
const labels = cell.getLabels() || [];
|
|
const filteredLabels = labels.filter(l =>
|
|
l.id !== 'selection-source-label' && l.id !== 'selection-target-label'
|
|
);
|
|
cell.setLabels(filteredLabels);
|
|
} else if (cell.isNode()) {
|
|
if (!isLocked) {
|
|
cell.removeTools();
|
|
}
|
|
}
|
|
state.selectionOrder = state.selectionOrder.filter(id => id !== cell.id);
|
|
});
|
|
|
|
state.graph.on('blank:click', () => {
|
|
state.selectionOrder = [];
|
|
});
|
|
}
|