/* * Copyright [2021] [wisemapping] * * Licensed under WiseMapping Public License, Version 1.0 (the "License"). * It is basically the Apache License, Version 2.0 (the "License") plus the * "powered by wisemapping" text requirement on every single page; * you may not use this file except in compliance with the License. * You may obtain a copy of the license at * * http://www.wisemapping.org/license * * 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 React from 'react'; import BrushOutlinedIcon from '@mui/icons-material/BrushOutlined'; import FontDownloadOutlinedIcon from '@mui/icons-material/FontDownloadOutlined'; import TextIncreaseOutlinedIcon from '@mui/icons-material/TextIncreaseOutlined'; import TextDecreaseOutlinedIcon from '@mui/icons-material/TextDecreaseOutlined'; import FormatBoldOutlinedIcon from '@mui/icons-material/FormatBoldOutlined'; import SettingsEthernetIcon from '@mui/icons-material/SettingsEthernet'; import FormatItalicIcon from '@mui/icons-material/FormatItalic'; import NoteOutlinedIcon from '@mui/icons-material/NoteOutlined'; import LinkOutlinedIcon from '@mui/icons-material/LinkOutlined'; import ZoomOutOutlinedIcon from '@mui/icons-material/ZoomOutOutlined'; import ZoomInOutlinedIcon from '@mui/icons-material/ZoomInOutlined'; import CenterFocusStrongOutlinedIcon from '@mui/icons-material/CenterFocusStrongOutlined'; import SentimentSatisfiedAltIcon from '@mui/icons-material/SentimentSatisfiedAlt'; import CircleOutlinedIcon from '@mui/icons-material/CircleOutlined'; import SquareOutlinedIcon from '@mui/icons-material/SquareOutlined'; import CheckBoxOutlineBlankOutlinedIcon from '@mui/icons-material/CheckBoxOutlineBlankOutlined'; import HorizontalRuleOutlinedIcon from '@mui/icons-material/HorizontalRuleOutlined'; import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline'; import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined'; import Box from '@mui/material/Box'; import Palette from '@mui/icons-material/Square'; import SquareOutlined from '@mui/icons-material/SquareOutlined'; import { $msg } from '@wisemapping/mindplot'; import ActionConfig from '../../classes/action/action-config'; import { SwitchValueDirection } from './ToolbarValueModelBuilder'; import NodePropertyValueModelBuilder from '../../classes/model/node-property-builder'; import Typography from '@mui/material/Typography'; import KeyboardOutlined from '@mui/icons-material/KeyboardOutlined'; import ColorPicker from '../action-widget/pane/color-picker'; import KeyboardShorcutsHelp from '../action-widget/pane/keyboard-shortcut-help'; import TopicLink from '../action-widget/pane/topic-link'; import TopicNote from '../action-widget/pane/topic-note'; import IconPicker from '../action-widget/pane/icon-picker'; import FontFamilySelector from '../action-widget/button/font-family-selector'; import Capability from '../../classes/action/capability'; import Editor from '../../classes/model/editor'; /** * * @param designer designer to aply changes * @returns configuration for @wisemapping/editor priAppbarmary toolbar */ export function buildEditorPanelConfig(model: Editor): ActionConfig[] { const toolbarValueModelBuilder = new NodePropertyValueModelBuilder(model.getDesigner()); /** * submenu to manipulate node color and shape */ const colorAndShapeToolbarConfiguration: ActionConfig = { icon: , tooltip: $msg('TOPIC_SHAPE'), options: [ { icon: , tooltip: $msg('TOPIC_SHAPE_RECTANGLE'), onClick: () => toolbarValueModelBuilder.getTopicShapeModel().setValue('rectagle'), selected: () => toolbarValueModelBuilder.getTopicShapeModel().getValue() === 'rectagle', }, { icon: , tooltip: $msg('TOPIC_SHAPE_ROUNDED'), onClick: () => toolbarValueModelBuilder.getTopicShapeModel().setValue('rounded rectagle'), selected: () => toolbarValueModelBuilder.getTopicShapeModel().getValue() === 'rounded rectagle', }, { icon: , tooltip: $msg('TOPIC_SHAPE_LINE'), onClick: () => toolbarValueModelBuilder.getTopicShapeModel().setValue('line'), selected: () => toolbarValueModelBuilder.getTopicShapeModel().getValue() === 'line', }, { icon: , tooltip: $msg('TOPIC_SHAPE_ELLIPSE'), onClick: () => toolbarValueModelBuilder.getTopicShapeModel().setValue('elipse'), selected: () => toolbarValueModelBuilder.getTopicShapeModel().getValue() === 'elipse', }, null, { icon: () => ( ), tooltip: $msg('TOPIC_COLOR'), options: [ { render: (closeModal) => { return ( ); }, }, ], }, { icon: () => ( ), tooltip: $msg('TOPIC_BORDER_COLOR'), options: [ { render: (closeModal) => { return ( ); }, }, ], }, ], disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; /** * submenu to manipulate node font */ const fontFormatToolbarConfiguration: ActionConfig = { icon: , tooltip: $msg('FONT_FORMAT'), options: [ { render: () => ( ), }, null, { icon: , tooltip: $msg('FONT_INCREASE'), onClick: () => toolbarValueModelBuilder.getFontSizeModel().switchValue(SwitchValueDirection.up), }, { icon: , tooltip: $msg('FONT_DECREASE'), onClick: () => toolbarValueModelBuilder.getFontSizeModel().switchValue(SwitchValueDirection.down), }, null, { icon: , tooltip: $msg('FONT_BOLD') + ' (' + $msg('CTRL') + ' + B)', onClick: toolbarValueModelBuilder.fontWeigthModel().switchValue, selected: () => toolbarValueModelBuilder.fontWeigthModel().getValue() === 'bold', }, { icon: , tooltip: $msg('FONT_ITALIC') + ' (' + $msg('CTRL') + ' + I)', onClick: toolbarValueModelBuilder.getFontStyleModel().switchValue, selected: () => toolbarValueModelBuilder.getFontStyleModel().getValue() === 'italic', }, { icon: () => ( ), tooltip: $msg('FONT_COLOR'), options: [ { render: (closeModal) => { return ( ); }, }, ], }, ], disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; /** * button to show relation pivot */ const addRelationConfiguration: ActionConfig = { icon: , tooltip: $msg('TOPIC_RELATIONSHIP'), onClick: (e) => { designer.showRelPivot(e); }, disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; /** * tool for node link edition */ const editLinkUrlConfiguration: ActionConfig = { icon: , tooltip: $msg('TOPIC_LINK'), useClickToClose: true, options: [ { render: (closeModal) => ( ), }, ], disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; /** * tool for node note edition */ const editNoteConfiguration: ActionConfig = { icon: , tooltip: $msg('TOPIC_NOTE'), useClickToClose: true, options: [ { tooltip: 'Node note', render: (closeModal) => ( ), }, ], disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; /** * tool for emoji selection */ const editIconConfiguration: ActionConfig = { icon: , tooltip: $msg('TOPIC_ICON'), options: [ { tooltip: 'Node icon', render: (closeModal) => ( ), }, ], disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; const addNodeToolbarConfiguration = { icon: , tooltip: $msg('TOPIC_ADD'), onClick: () => designer.createSiblingForSelectedNode(), disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; const deleteNodeToolbarConfiguration = { icon: , tooltip: $msg('TOPIC_DELETE'), onClick: () => designer.deleteSelectedEntities(), disabled: () => designer.getModel().filterSelectedTopics().length === 0, }; return [ addNodeToolbarConfiguration, deleteNodeToolbarConfiguration, colorAndShapeToolbarConfiguration, fontFormatToolbarConfiguration, editIconConfiguration, editNoteConfiguration, editLinkUrlConfiguration, addRelationConfiguration, ]; } export function buildZoomToolbarConfig(model: Editor, capability: Capability): ActionConfig[] { return [ { icon: , tooltip: $msg('CENTER_POSITION'), onClick: () => { model.getDesigner().zoomToFit(); }, disabled: () => !model?.isMapLoadded(), }, { // zoom value candidate, neds to fixit render: () => ( % {!model?.isMapLoadded() ? 100 : Math.floor((1 / designer.getWorkSpace()?.getZoom()) * 100)} ), disabled: () => !model?.isMapLoadded(), }, { icon: , tooltip: $msg('ZOOM_IN'), onClick: () => { model.getDesigner().zoomIn(); }, disabled: () => !model?.isMapLoadded(), }, { icon: , tooltip: $msg('ZOOM_OUT'), onClick: () => { model.getDesigner().zoomOut(); }, disabled: () => !model?.isMapLoadded(), }, { icon: , tooltip: $msg('KEYBOARD_SHOTCUTS'), visible: !capability.isHidden('keyboard-shortcuts'), options: [ { render: () => , }, ], }, ]; }