diff --git a/VadereGui/resources/messages.properties b/VadereGui/resources/messages.properties index 43cffb67292eff743b5cab79b6036d1c9d6928a4..e2e3fa88c4faef16e6f4b283e5e801ec1e03b62d 100644 --- a/VadereGui/resources/messages.properties +++ b/VadereGui/resources/messages.properties @@ -340,6 +340,7 @@ Tab.Event.title=Events Tab.OutputProcessors.title=Data output Tab.TopographyCreator.title=Topography creator Tab.PostVisualization.title=Post-Visualization +TextView.Button.LoadPresettings=Load presettings # Info Panel at bottom of Topography creator InfoPanel.ScenarioSize.label=Scenario Size diff --git a/VadereGui/resources/messages_de_DE.properties b/VadereGui/resources/messages_de_DE.properties index bf98ab6acc21d1cd437ebe2d37f49a7e5f9b54d8..daf52410d048ff2efd9905805231061e123a0a6a 100644 --- a/VadereGui/resources/messages_de_DE.properties +++ b/VadereGui/resources/messages_de_DE.properties @@ -334,6 +334,7 @@ Tab.Event.title=Events Tab.OutputProcessors.title=Datenausgabe Tab.TopographyCreator.title=Topographie-Designer Tab.PostVisualization.title=Post-Visualisierung +TextView.Button.LoadPresettings=Voreinstellungen laden # Info Panel at bottom of Topography creator InfoPanel.ScenarioSize.label=Szenariogr\u00f6\u00dfe diff --git a/VadereGui/src/org/vadere/gui/projectview/view/TextView.java b/VadereGui/src/org/vadere/gui/projectview/view/TextView.java index 17faef9f252852a60ceeb2eee483ceca592e24a6..bb779889f382b507106c771ebb776cab26f242e9 100644 --- a/VadereGui/src/org/vadere/gui/projectview/view/TextView.java +++ b/VadereGui/src/org/vadere/gui/projectview/view/TextView.java @@ -14,6 +14,7 @@ import org.vadere.simulator.projects.dataprocessing.DataProcessingJsonManager; import org.vadere.simulator.projects.io.JsonConverter; import org.vadere.state.attributes.ModelDefinition; import org.vadere.state.events.json.EventInfoStore; +import org.vadere.state.events.presettings.EventPresettings; import org.vadere.state.scenario.Topography; import org.vadere.state.util.StateJsonConverter; import org.vadere.util.io.IOUtils; @@ -110,15 +111,18 @@ public class TextView extends JPanel implements IJsonView { add(panelTop, BorderLayout.NORTH); panelTop.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); + generatePresettingsMenu(attributeType); + JButton btnSaveToFile = new JButton(Messages.getString("TextFileView.btnSaveToFile.text")); btnSaveToFile.addActionListener(saveToFileActionListener); btnSaveToFile.setIcon(new ImageIcon(Resources.class.getResource("/icons/floppy.gif"))); + panelTop.add(btnSaveToFile); btnLoadFromFile = new JButton(Messages.getString("TextView.btnLoadFromFile.text")); btnLoadFromFile.setIcon(new ImageIcon(Resources.class.getResource("/icons/floppy.gif"))); panelTop.add(btnLoadFromFile); - jsonValidIndicator = new JsonValidIndicator(); + jsonValidIndicator = new JsonValidIndicator(); panelTop.add(jsonValidIndicator); JScrollPane scrollPane = new JScrollPane(); add(scrollPane, BorderLayout.CENTER); @@ -205,6 +209,35 @@ public class TextView extends JPanel implements IJsonView { jsonValidIndicator.setValid(); } + private void generatePresettingsMenu(final AttributeType attributeType) { + if (attributeType == AttributeType.EVENT) { + JMenuBar presetMenuBar = new JMenuBar(); + JMenu mnPresetMenu = new JMenu(Messages.getString("TextView.Button.LoadPresettings")); + presetMenuBar.add(mnPresetMenu); + + EventPresettings.PRESETTINGS_MAP.forEach( + (clazz, jsonString) -> mnPresetMenu.add(new JMenuItem(new AbstractAction(clazz.getSimpleName()) { + private static final long serialVersionUID = 1L; + + @Override + public void actionPerformed(ActionEvent e) { + if (JOptionPane.showConfirmDialog(ProjectView.getMainWindow(), + Messages.getString("Tab.Model.confirmLoadTemplate.text"), + Messages.getString("Tab.Model.confirmLoadTemplate.title"), + JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) { + try { + txtrTextfiletextarea.setText(jsonString); + } catch (Exception e1) { + e1.printStackTrace(); + } + } + } + }))); + + panelTop.add(presetMenuBar); + } + } + @Override public void setVadereScenario(Scenario scenario) { // in order to avoid passing the exception upwards. might not be the best solution try { diff --git a/VadereState/src/org/vadere/state/events/presettings/EventPresettings.java b/VadereState/src/org/vadere/state/events/presettings/EventPresettings.java new file mode 100644 index 0000000000000000000000000000000000000000..c278799731f0db7417f6c4241944b58e13245db3 --- /dev/null +++ b/VadereState/src/org/vadere/state/events/presettings/EventPresettings.java @@ -0,0 +1,64 @@ +package org.vadere.state.events.presettings; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.vadere.state.events.json.EventInfo; +import org.vadere.state.events.json.EventInfoStore; +import org.vadere.state.events.types.*; +import org.vadere.state.util.JacksonObjectMapper; +import org.vadere.util.geometry.shapes.VRectangle; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Provide JSON presettings for commonly used events. + * + * This class can be used as helper for GUI elements. + */ +public class EventPresettings { + /** Map an event class (e.g., BangEvent) to a JSON string. */ + public static Map PRESETTINGS_MAP; + + // Static initializer for "PRESETTINGS_MAP". + static { + PRESETTINGS_MAP = new HashMap<>(); + + Event[] eventsToUse = new Event[] { + new BangEvent(), + new WaitEvent(), + new WaitInAreaEvent(0, new VRectangle(0, 0, 10, 10)), + }; + + for (Event event : eventsToUse) { + // Container for a timeframe and the corresponding events. + EventInfo eventInfo = new EventInfo(); + + List events = new ArrayList<>(); + events.add(event); + + eventInfo.setEventTimeframe(new EventTimeframe(0, 10, false, 0)); + eventInfo.setEvents(events); + + // Container for multiple event infos. + List eventInfos = new ArrayList<>(); + eventInfos.add(eventInfo); + + EventInfoStore eventInfoStore = new EventInfoStore(); + eventInfoStore.setEventInfos(eventInfos); + + try { + ObjectMapper mapper = new JacksonObjectMapper(); + // String jsonDataString = mapper.writeValueAsString(eventInfoStore); + String jsonDataString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(eventInfoStore); + + PRESETTINGS_MAP.put(event.getClass(), jsonDataString); + } catch (IOException e) { + e.printStackTrace(); + } + + } + } +}