modules/ui/tools/adding_geometry.js (82 lines of code) (raw):
import { uiToolSegemented } from './segmented';
import { t } from '../../util/locale';
import { modeAddPoint } from '../../modes/add_point';
import { modeAddLine } from '../../modes/add_line';
import { modeAddArea } from '../../modes/add_area';
export function uiToolAddingGeometry(context) {
var tool = uiToolSegemented(context);
tool.id = 'adding_geometry';
tool.label = t('info_panels.measurement.geometry');
tool.iconName = 'iD-logo-features';
tool.iconClass = 'icon-30';
tool.key = t('toolbar.geometry.key');
var items = {
point: {
id: 'point',
icon: 'iD-icon-point',
label: t('modes.add_point.title'),
mode: modeAddPoint
},
vertex: {
id: 'vertex',
icon: 'iD-icon-vertex',
label: t('modes.add_point.title'),
mode: modeAddPoint
},
line: {
id: 'line',
icon: 'iD-icon-line',
label: t('modes.add_line.title'),
mode: modeAddLine
},
area: {
id: 'area',
icon: 'iD-icon-area',
label: t('modes.add_area.title'),
mode: modeAddArea
},
building: {
id: 'building',
icon: 'maki-building-15',
label: t('presets.presets.building.name'),
mode: modeAddArea
}
};
tool.chooseItem = function(item) {
var oldMode = context.mode();
oldMode.preset.setMostRecentAddGeometry(context, item.id);
var newMode = item.mode(context, {
button: oldMode.button,
preset: oldMode.preset,
geometry: item.id,
title: oldMode.title
});
context.enter(newMode);
};
tool.activeItem = function() {
return items[context.mode().geometry];
};
tool.loadItems = function() {
var mode = context.mode();
if (!mode.preset ||
(mode.id !== 'add-point' && mode.id !== 'add-line' && mode.id !== 'add-area') ||
mode.addedEntityIDs().length > 0) {
tool.items = [];
} else {
var geometries = context.mode().preset.geometry.slice().sort().reverse();
var vertexIndex = geometries.indexOf('vertex');
if (vertexIndex !== -1 && geometries.indexOf('point') !== -1) {
geometries.splice(vertexIndex, 1);
}
var areaIndex = geometries.indexOf('area');
if (areaIndex !== -1 && mode.preset.setTags(mode.defaultTags, 'area').building) {
geometries.splice(areaIndex, 1);
geometries.push('building');
}
tool.items = geometries.map(function(geom) {
return items[geom];
}).filter(Boolean);
}
};
return tool;
}