package ui;
import helpers.ApplicationSettings;
import helpers.Broadcaster;
import interfaces.CurrentLayerChangedListener;
import interfaces.ProjectChangedListener;
import java.awt.Adjustable;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.File;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JSplitPane;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import javax.swing.WindowConstants;
import roadnetwork.RoadNetwork;
import simulation.SimulationExporter;
import simulation.VehicleType;
import trafficdefinition.ActivityBasedTrafficDefinitionLayer;
import trafficdefinition.RandomTrafficDefinitionLayer;
import trafficdefinition.TrafficDefinitionLayer;
import trafficdefinition.UserDefinedTrafficDefinitionLayer;
import ui.dialogs.DlgExportSimulation;
import ui.dialogs.DlgManageJobTypes;
import ui.dialogs.DlgManageVehicleTypes;
import ui.dialogs.DlgNewProject;
import ui.dialogs.DlgRandomLayerProperties;
import ui.dialogs.DlgSelectTypes;
import ui.dialogs.DlgSettings;
import ui.filefilters.ProjectFileFilter;
import ui.filefilters.TDLFileFilter;
import classes.Layer;
import classes.Project;
import classes.ProjectElement;
import classes.TypeSelection;
import enums.EditingMode;
import enums.SelectionType;
import enums.ToolType;
/**
* The application's main window
*/
public class MainWindow extends JFrame implements CurrentLayerChangedListener, WindowListener, ProjectChangedListener {
private static final long serialVersionUID = 1L;
private JToggleButton btnAddSelection = null;
private JToggleButton btnCreateAccident = null;
private JToggleButton btnCreateArea = null;
private JToggleButton btnCreateAreaFlow = null;
private JToggleButton btnCreateFlowEdgeToEdge = null;
private JToggleButton btnCreateHotSpot = null;
private JToggleButton btnCreateSchool = null;
private JButton btnDelete = null;
private JToggleButton btnNewSelection = null;
private JToggleButton btnPan = null;
private JToggleButton btnRemoveSelection = null;
private JToggleButton btnSelect = null;
private JButton btnUndelete = null;
private JToggleButton btnZoom = null;
/**
* The currently selected traffic layer
*/
private TrafficDefinitionLayer currentTrafficLayer = null; // @jve:decl-index=0:
private JPanel jContentPane = null;
private Display mapDisplay = null;
private JMenu mnuFile = null;
private JMenuItem mnuitmClose = null;
private JCheckBoxMenuItem mnuitmDeletedMapElements = null;
private JCheckBoxMenuItem mnuitmDrawAllTrafficLayers = null;
private JMenuItem mnuitmExit = null;
private JMenuItem mnuitmExportSimulation = null;
private JMenuItem mnuitmSelectActivityBasedVehicleTypes = null;
private JMenuItem mnuitmJobTypes = null;
private JMenuItem mnuitmLayerSelectVehicleTypes = null;
private JMenuItem mnuitmLayerProperties = null;
private JMenuItem mnuitmNew = null;
private JMenuItem mnuitmOpen = null;
private JMenuItem mnuitmPurgeDeleted = null;
private JMenuItem mnuitmSave = null;
private JMenuItem mnuitmSaveAs = null;
private JMenuItem mnuitmExportTDL = null;
private JMenuItem mnuitmSelectAll = null;
private JMenuItem mnuitmSelectInverse = null;
private JMenuItem mnuitmSelectNone = null;
private JMenuItem mnuitmSettings = null;
private JMenuItem mnuitmVehicleTypes = null;
private JMenuItem mnuitmZoomToFit = null;
private JMenuItem mnuitmHelpAbout = null;
private JMenuBar mnuMain = null;
private JMenu mnuSelect = null;
private JMenu mnuSimulation = null;
private JMenu mnuHelp = null;
private JMenu mnuTrafficLayer = null;
private JMenu mnuView = null;
private PnlLayers pnlLayers = null;
private PnlProperties pnlProperties = null;
private JPanel pnlScrollDisplay = null;
/**
* The currently loaded project
*/
private Project project = null;
private JScrollBar scrlMapHorizontal = null;
private JScrollBar scrlMapVertical = null;
private ButtonGroup SelectionTypeGroup = new ButtonGroup();
private JSplitPane splitPane = null;
private JSplitPane splitPaneRight = null;
private JToolBar tlbTools = null;
private ButtonGroup ToolGroup = new ButtonGroup();
/**
* This is the default constructor
*/
public MainWindow() {
super();
// Initialize controls
initialize();
// Disable the toolbar
SetToolbarEnabled(false);
// Add event listeners
Broadcaster.addProjectChangedListener(this);
addWindowListener(this);
pnlLayers.addCurrentLayerChangedListener(this);
pnlLayers.addCurrentLayerChangedListener(pnlProperties);
pnlLayers.addCurrentLayerChangedListener(mapDisplay);
Broadcaster.addProjectChangedListener(pnlProperties);
pnlProperties.setMapDisplay(mapDisplay);
}
public void CurrentLayerChanged(Layer<? extends ProjectElement> newCurrentLayer) {
// Update the editing mode based on the new current layer
if (newCurrentLayer instanceof RoadNetwork) {
setEditingMode(EditingMode.Map);
currentTrafficLayer = null;
} else if (newCurrentLayer instanceof UserDefinedTrafficDefinitionLayer) {
setEditingMode(EditingMode.UserDefinedTraffic);
currentTrafficLayer = (TrafficDefinitionLayer) newCurrentLayer;
} else if (newCurrentLayer instanceof ActivityBasedTrafficDefinitionLayer) {
setEditingMode(EditingMode.ActivityBasedTraffic);
currentTrafficLayer = (TrafficDefinitionLayer) newCurrentLayer;
} else if (newCurrentLayer instanceof RandomTrafficDefinitionLayer) {
setEditingMode(EditingMode.RandomTraffic);
currentTrafficLayer = (TrafficDefinitionLayer) newCurrentLayer;
}
}
public void ProjectChanged(Project p) {
project = p;
// If the project has been closed
if (project == null) {
// Disable controls
mnuitmClose.setEnabled(false);
mnuitmSave.setEnabled(false);
mnuitmSaveAs.setEnabled(false);
mnuitmExportTDL.setEnabled(false);
mnuitmPurgeDeleted.setEnabled(false);
mnuSelect.setEnabled(false);
mnuView.setEnabled(false);
mnuTrafficLayer.setEnabled(false);
mnuSimulation.setEnabled(false);
SetToolbarEnabled(false);
scrlMapVertical.setEnabled(false);
scrlMapHorizontal.setEnabled(false);
// Reset title and selection mode
setTitle("SUMO Traffic Generator");
btnNewSelection.setSelected(true);
currentTrafficLayer = null;
}
// If the project has been opened
else {
// Enable controls
mnuitmClose.setEnabled(true);
mnuitmSave.setEnabled(true);
mnuitmSaveAs.setEnabled(true);
mnuitmExportTDL.setEnabled(true);
mnuitmPurgeDeleted.setEnabled(true);
mnuSelect.setEnabled(true);
mnuView.setEnabled(true);
mnuSimulation.setEnabled(true);
scrlMapVertical.setEnabled(true);
scrlMapHorizontal.setEnabled(true);
SetToolbarEnabled(true);
// Update title
setTitle("SUMO Traffic Generator" + " - " + project.getFileName());
// Set the editing mode to road network and initialize the tool to
// the pan tool
setEditingMode(EditingMode.Map);
getMapDisplay().setTool(ToolType.Pan);
}
}
/**
* Sets the current editing mode. Depending on the mode, different controls
* are enabled / disabled
*
* @param newMode
*/
public void setEditingMode(EditingMode newMode) {
switch (newMode) {
case Map:
btnCreateFlowEdgeToEdge.setEnabled(false);
btnCreateAreaFlow.setEnabled(false);
btnCreateArea.setEnabled(false);
btnCreateHotSpot.setEnabled(false);
btnCreateAccident.setEnabled(false);
btnCreateSchool.setEnabled(false);
btnUndelete.setEnabled(true);
mnuTrafficLayer.setEnabled(false);
break;
case UserDefinedTraffic:
btnCreateFlowEdgeToEdge.setEnabled(true);
btnCreateAreaFlow.setEnabled(true);
btnCreateHotSpot.setEnabled(true);
btnCreateAccident.setEnabled(true);
btnCreateSchool.setEnabled(false);
btnCreateArea.setEnabled(false);
btnUndelete.setEnabled(false);
mnuTrafficLayer.setEnabled(false);
break;
case ActivityBasedTraffic:
btnCreateFlowEdgeToEdge.setEnabled(false);
btnCreateAreaFlow.setEnabled(false);
btnCreateHotSpot.setEnabled(false);
btnCreateAccident.setEnabled(false);
btnCreateSchool.setEnabled(true);
btnCreateArea.setEnabled(true);
btnUndelete.setEnabled(false);
mnuTrafficLayer.setEnabled(false);
break;
case RandomTraffic:
btnCreateFlowEdgeToEdge.setEnabled(false);
btnCreateAreaFlow.setEnabled(false);
btnCreateArea.setEnabled(false);
btnCreateHotSpot.setEnabled(false);
btnCreateAccident.setEnabled(false);
btnCreateSchool.setEnabled(false);
btnUndelete.setEnabled(false);
mnuTrafficLayer.setEnabled(true);
break;
}
// Default tool
btnPan.setSelected(true);
getMapDisplay().setTool(ToolType.Pan);
}
public void windowActivated(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
Exit();
}
public void windowDeactivated(WindowEvent e) {
}
public void windowDeiconified(WindowEvent e) {
}
public void windowIconified(WindowEvent e) {
}
public void windowOpened(WindowEvent e) {
}
/**
* Closes the currently open project
*
* @return JOptionPane.OK_OPTION if the project was closed,
* JOptionPane.CANCEL_OPTION if the user cancelled the operation
*/
private int CloseProject() {
// Ask the user to save any changes she might have made
switch (JOptionPane.showConfirmDialog(this, "Would you like to save your changes?")) {
case JOptionPane.YES_OPTION:
SaveProject();
case JOptionPane.NO_OPTION:
break;
// If the user pressed the cancel button or closed the message box then
// return a cancel message
case JOptionPane.CANCEL_OPTION:
case JOptionPane.CLOSED_OPTION:
return JOptionPane.CANCEL_OPTION;
}
// Close the project
project.Close();
// Notify any registered listeners that the project has been closed
Broadcaster.NotifyProjectChanged(null);
return JOptionPane.OK_OPTION;
}
/**
* Exits the application
*
*/
private void Exit() {
// If there was a loaded project, close it
if (project != null) {
if (CloseProject() == JOptionPane.CANCEL_OPTION) {
return;
}
}
System.exit(0);
}
/**
* This method initializes btnAddSelection
* @return javax.swing.JToggleButton
* @uml.property name="btnAddSelection"
*/
private JToggleButton getBtnAddSelection() {
if (btnAddSelection == null) {
btnAddSelection = new JToggleButton();
btnAddSelection.setIcon(new ImageIcon(getClass().getResource("/resources/icons/selectionadd.png")));
btnAddSelection.setToolTipText("Add to selection");
btnAddSelection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SetAddToSelection();
}
});
}
return btnAddSelection;
}
/**
* This method initializes btnCreateAccident
* @return javax.swing.JToggleButton
* @uml.property name="btnCreateAccident"
*/
private JToggleButton getBtnCreateAccident() {
if (btnCreateAccident == null) {
btnCreateAccident = new JToggleButton();
btnCreateAccident.setText("Accident");
btnCreateAccident.setIcon(new ImageIcon(getClass().getResource("/resources/icons/accident.png")));
btnCreateAccident.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Accident);
}
});
}
return btnCreateAccident;
}
/**
* This method initializes btnCreateArea
* @return javax.swing.JButton
* @uml.property name="btnCreateArea"
*/
private JToggleButton getBtnCreateArea() {
if (btnCreateArea == null) {
btnCreateArea = new JToggleButton();
btnCreateArea.setText("Traffic Area");
btnCreateArea.setIcon(new ImageIcon(getClass().getResource("/resources/icons/traffic_area.png")));
btnCreateArea.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Area);
}
});
}
return btnCreateArea;
}
/**
* This method initializes btnCreateAreaFlow
* @return javax.swing.JMenuItem
* @uml.property name="btnCreateAreaFlow"
*/
private JToggleButton getBtnCreateAreaFlow() {
if (btnCreateAreaFlow == null) {
btnCreateAreaFlow = new JToggleButton();
btnCreateAreaFlow.setText("Area Flow");
btnCreateAreaFlow.setIcon(new ImageIcon(getClass().getResource("/resources/icons/areaflow.png")));
btnCreateAreaFlow.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.AreaFlow);
}
});
}
return btnCreateAreaFlow;
}
/**
* This method initializes btnCreateFlowEdgeToEdge
* @return javax.swing.JButton
* @uml.property name="btnCreateFlowEdgeToEdge"
*/
private JToggleButton getBtnCreateFlowEdgeToEdge() {
if (btnCreateFlowEdgeToEdge == null) {
btnCreateFlowEdgeToEdge = new JToggleButton();
btnCreateFlowEdgeToEdge.setText("Flow");
btnCreateFlowEdgeToEdge.setIcon(new ImageIcon(getClass().getResource("/resources/icons/flow.png")));
btnCreateFlowEdgeToEdge.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Flow);
}
});
}
return btnCreateFlowEdgeToEdge;
}
/**
* This method initializes btnCreateHotSpot
* @return javax.swing.JButton
* @uml.property name="btnCreateHotSpot"
*/
private JToggleButton getBtnCreateHotSpot() {
if (btnCreateHotSpot == null) {
btnCreateHotSpot = new JToggleButton();
btnCreateHotSpot.setText("Hotspot");
btnCreateHotSpot.setIcon(new ImageIcon(getClass().getResource("/resources/icons/hotspotinout.png")));
btnCreateHotSpot.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Hotspot);
}
});
}
return btnCreateHotSpot;
}
/**
* This method initializes btnCreateSchool
* @return javax.swing.JToggleButton
* @uml.property name="btnCreateSchool"
*/
private JToggleButton getBtnCreateSchool() {
if (btnCreateSchool == null) {
btnCreateSchool = new JToggleButton();
btnCreateSchool.setText("School");
btnCreateSchool.setIcon(new ImageIcon(getClass().getResource("/resources/icons/school.png")));
btnCreateSchool.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.School);
}
});
}
return btnCreateSchool;
}
/**
* This method initializes btnDelete
* @return javax.swing.JButton
* @uml.property name="btnDelete"
*/
private JButton getBtnDelete() {
if (btnDelete == null) {
btnDelete = new JButton();
btnDelete.setIcon(new ImageIcon(getClass().getResource("/resources/icons/delete.png")));
btnDelete.setToolTipText("Delete");
btnDelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().DeleteSelectedObjects();
}
});
}
return btnDelete;
}
/**
* This method initializes btnNewSelection
* @return javax.swing.JToggleButton
* @uml.property name="btnNewSelection"
*/
private JToggleButton getBtnNewSelection() {
if (btnNewSelection == null) {
btnNewSelection = new JToggleButton();
btnNewSelection.setIcon(new ImageIcon(getClass().getResource("/resources/icons/selectionnew.png")));
btnNewSelection.setToolTipText("New selection");
btnNewSelection.setSelected(true);
btnNewSelection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SetNewSelection();
}
});
}
return btnNewSelection;
}
/**
* This method initializes btnPan
* @return javax.swing.JButton
* @uml.property name="btnPan"
*/
private JToggleButton getBtnPan() {
if (btnPan == null) {
btnPan = new JToggleButton();
btnPan.setPreferredSize(new Dimension(16, 16));
btnPan.setSize(new Dimension(16, 16));
btnPan.setSelected(false);
btnPan.setIcon(new ImageIcon(getClass().getResource("/resources/icons/pan.gif")));
btnPan.setToolTipText("Pan");
btnPan.setLocation(new Point(16, 5));
btnPan.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Pan);
}
});
}
return btnPan;
}
/**
* This method initializes btnRemoveSelection
* @return javax.swing.JToggleButton
* @uml.property name="btnRemoveSelection"
*/
private JToggleButton getBtnRemoveSelection() {
if (btnRemoveSelection == null) {
btnRemoveSelection = new JToggleButton();
btnRemoveSelection.setIcon(new ImageIcon(getClass().getResource("/resources/icons/selectionremove.png")));
btnRemoveSelection.setToolTipText("Subtract from selection");
btnRemoveSelection.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SetRemoveFromSelection();
}
});
}
return btnRemoveSelection;
}
/**
* This method initializes btnSelect
* @return javax.swing.JButton
* @uml.property name="btnSelect"
*/
private JToggleButton getBtnSelect() {
if (btnSelect == null) {
btnSelect = new JToggleButton();
btnSelect.setIcon(new ImageIcon(getClass().getResource("/resources/icons/select.png")));
btnSelect.setToolTipText("Select");
btnSelect.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Select);
}
});
btnSelect.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent e) {
if (btnSelect.isSelected()) {
btnNewSelection.setVisible(true);
btnAddSelection.setVisible(true);
btnRemoveSelection.setVisible(true);
} else {
btnNewSelection.setVisible(false);
btnAddSelection.setVisible(false);
btnRemoveSelection.setVisible(false);
}
}
});
}
return btnSelect;
}
/**
* This method initializes btnUndelete
* @return javax.swing.JButton
* @uml.property name="btnUndelete"
*/
private JButton getBtnUndelete() {
if (btnUndelete == null) {
btnUndelete = new JButton();
btnUndelete.setIcon(new ImageIcon(getClass().getResource("/resources/icons/undelete.png")));
btnUndelete.setToolTipText("Undelete");
btnUndelete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().UndeleteSelectedObjects();
}
});
}
return btnUndelete;
}
/**
* This method initializes btnZoom
* @return javax.swing.JButton
* @uml.property name="btnZoom"
*/
private JToggleButton getBtnZoom() {
if (btnZoom == null) {
btnZoom = new JToggleButton();
btnZoom.setToolTipText("Zoom");
btnZoom.setPreferredSize(new Dimension(24, 24));
btnZoom.setBounds(new Rectangle(296, 1, 24, 24));
btnZoom.setIcon(new ImageIcon(getClass().getResource("/resources/icons/zoom.png")));
btnZoom.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().setTool(ToolType.Zoom);
}
});
}
return btnZoom;
}
/**
* This method initializes jContentPane
* @return javax.swing.JPanel
* @uml.property name="jContentPane"
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.add(getTlbTools(), BorderLayout.PAGE_START);
jContentPane.add(getSplitPane(), BorderLayout.CENTER);
}
return jContentPane;
}
/**
* This method initializes mapDisplay
* @return ui.Display
* @uml.property name="mapDisplay"
*/
private Display getMapDisplay() {
if (mapDisplay == null) {
mapDisplay = new Display(getScrlMapVertical(), getScrlMapHorizontal());
}
return mapDisplay;
}
/**
* This method initializes mnuFile
* @return javax.swing.JMenu
* @uml.property name="mnuFile"
*/
private JMenu getMnuFile() {
if (mnuFile == null) {
mnuFile = new JMenu();
mnuFile.setText("File");
mnuFile.add(getMnuitmNew());
mnuFile.add(getMnuitmOpen());
mnuFile.add(getMnuitmSave());
mnuFile.add(getMnuitmSaveAs());
mnuFile.add(getMnuitmExportTDL());
mnuFile.add(getMnuitmClose());
mnuFile.add(getMnuitmPurgeDeleted());
mnuFile.add(getMnuitmExit());
}
return mnuFile;
}
/**
* This method initializes mnuitmClose
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmClose"
*/
private JMenuItem getMnuitmClose() {
if (mnuitmClose == null) {
mnuitmClose = new JMenuItem();
mnuitmClose.setText("Close");
mnuitmClose.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmClose.setEnabled(false);
mnuitmClose.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
CloseProject();
}
});
}
return mnuitmClose;
}
/**
* This method initializes mnuitmDeletedMapElements
* @return javax.swing.JCheckBoxMenuItem
* @uml.property name="mnuitmDeletedMapElements"
*/
private JCheckBoxMenuItem getMnuitmDeletedMapElements() {
if (mnuitmDeletedMapElements == null) {
mnuitmDeletedMapElements = new JCheckBoxMenuItem();
mnuitmDeletedMapElements.setText("Show deleted map elements");
mnuitmDeletedMapElements.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
getMapDisplay().setShowDeleted(mnuitmDeletedMapElements.isSelected());
}
});
}
return mnuitmDeletedMapElements;
}
/**
* This method initializes mnuitmDrawAllTrafficLayers
* @return javax.swing.JCheckBoxMenuItem
* @uml.property name="mnuitmDrawAllTrafficLayers"
*/
private JCheckBoxMenuItem getMnuitmDrawAllTrafficLayers() {
if (mnuitmDrawAllTrafficLayers == null) {
mnuitmDrawAllTrafficLayers = new JCheckBoxMenuItem();
mnuitmDrawAllTrafficLayers.setText("Draw all traffic layers");
mnuitmDrawAllTrafficLayers.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
getMapDisplay().setDrawAllTrafficLayers(mnuitmDrawAllTrafficLayers.isSelected());
}
});
}
return mnuitmDrawAllTrafficLayers;
}
/**
* This method initializes mnuitmExit
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmExit"
*/
private JMenuItem getMnuitmExit() {
if (mnuitmExit == null) {
mnuitmExit = new JMenuItem();
mnuitmExit.setText("Exit");
mnuitmExit.setIcon(new ImageIcon(getClass().getResource("/resources/icons/exit.png")));
mnuitmExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
Exit();
}
});
}
return mnuitmExit;
}
/**
* This method initializes mnuitmExportSimulation
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmExportSimulation"
*/
private JMenuItem getMnuitmExportSimulation() {
if (mnuitmExportSimulation == null) {
mnuitmExportSimulation = new JMenuItem();
mnuitmExportSimulation.setText("Export...");
mnuitmExportSimulation.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmExportSimulation.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ExportSimulation();
}
});
}
return mnuitmExportSimulation;
}
/**
* This method initializes mnuitmHelpAbout
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmHelpAbout"
*/
private JMenuItem getMnuitmHelpAbout() {
if (mnuitmHelpAbout == null) {
mnuitmHelpAbout = new JMenuItem();
mnuitmHelpAbout.setText("About...");
mnuitmHelpAbout.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmHelpAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ShowHelpAbout();
}
});
}
return mnuitmHelpAbout;
}
protected void ShowHelpAbout() {
JOptionPane.showMessageDialog(this, "Version 1.1\nDeveloped by Leontios Papaleontiou and others");
}
/**
* This method initializes mnuitmSelectActivityBasedVehicleTypes
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSelectActivityBasedVehicleTypes"
*/
private JMenuItem getMnuitmSelectActivityBasedVehicleTypes() {
if (mnuitmSelectActivityBasedVehicleTypes == null) {
mnuitmSelectActivityBasedVehicleTypes = new JMenuItem();
mnuitmSelectActivityBasedVehicleTypes.setText("Select vehicle types for activity-based layers...");
mnuitmSelectActivityBasedVehicleTypes.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmSelectActivityBasedVehicleTypes.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SelectActivityBasedVehicleTypes();
}
});
}
return mnuitmSelectActivityBasedVehicleTypes;
}
/**
* This method initializes mnuitmJobTypes
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmJobTypes"
*/
private JMenuItem getMnuitmJobTypes() {
if (mnuitmJobTypes == null) {
mnuitmJobTypes = new JMenuItem();
mnuitmJobTypes.setText("Job types...");
mnuitmJobTypes.setIcon(new ImageIcon(getClass().getResource("/resources/icons/jobtypes.png")));
mnuitmJobTypes.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ShowJobTypes();
}
});
}
return mnuitmJobTypes;
}
/**
* This method initializes mnuitmLayerSelectVehicleTypes
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmLayerSelectVehicleTypes"
*/
private JMenuItem getMnuitmLayerSelectVehicleTypes() {
if (mnuitmLayerSelectVehicleTypes == null) {
mnuitmLayerSelectVehicleTypes = new JMenuItem();
mnuitmLayerSelectVehicleTypes.setText("Select vehicle types...");
mnuitmLayerSelectVehicleTypes.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SelectRandomTrafficLayerVehicleTypes();
}
});
}
return mnuitmLayerSelectVehicleTypes;
}
/**
* This method initializes mnuitmLayerProperties
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmLayerProperties"
*/
private JMenuItem getMnuitmLayerProperties() {
if (mnuitmLayerProperties == null) {
mnuitmLayerProperties = new JMenuItem();
mnuitmLayerProperties.setText("Properties...");
mnuitmLayerProperties.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SetTrafficLayerProperties();
}
});
}
return mnuitmLayerProperties;
}
/**
* This method initializes mnuitmNew
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmNew"
*/
private JMenuItem getMnuitmNew() {
if (mnuitmNew == null) {
mnuitmNew = new JMenuItem();
mnuitmNew.setText("New project...");
mnuitmNew.setIcon(new ImageIcon(getClass().getResource("/resources/icons/new.png")));
mnuitmNew.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
NewProject();
}
});
}
return mnuitmNew;
}
/**
* This method initializes mnuitmOpen
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmOpen"
*/
private JMenuItem getMnuitmOpen() {
if (mnuitmOpen == null) {
mnuitmOpen = new JMenuItem();
mnuitmOpen.setText("Open");
mnuitmOpen.setIcon(new ImageIcon(getClass().getResource("/resources/icons/open.png")));
mnuitmOpen.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
OpenProject();
}
});
}
return mnuitmOpen;
}
/**
* This method initializes mnuitmPurgeDeleted
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmPurgeDeleted"
*/
private JMenuItem getMnuitmPurgeDeleted() {
if (mnuitmPurgeDeleted == null) {
mnuitmPurgeDeleted = new JMenuItem();
mnuitmPurgeDeleted.setText("Purge deleted map");
mnuitmPurgeDeleted.setIcon(new ImageIcon(getClass().getResource("/resources/icons/purge.png")));
mnuitmPurgeDeleted.setEnabled(false);
mnuitmPurgeDeleted.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
PurgeDeleted();
}
});
}
return mnuitmPurgeDeleted;
}
/**
* This method initializes mnuitmSave
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSave"
*/
private JMenuItem getMnuitmSave() {
if (mnuitmSave == null) {
mnuitmSave = new JMenuItem();
mnuitmSave.setText("Save");
mnuitmSave.setIcon(new ImageIcon(getClass().getResource("/resources/icons/save.png")));
mnuitmSave.setEnabled(false);
mnuitmSave.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SaveProject();
}
});
}
return mnuitmSave;
}
/**
* This method initializes mnuitmSaveAs
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSaveAs"
*/
private JMenuItem getMnuitmSaveAs() {
if (mnuitmSaveAs == null) {
mnuitmSaveAs = new JMenuItem();
mnuitmSaveAs.setText("Save As...");
mnuitmSaveAs.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmSaveAs.setEnabled(false);
mnuitmSaveAs.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SaveProjectAs();
}
});
}
return mnuitmSaveAs;
}
/**
* This method initializes mnuitmSaveAs
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmExportTDL"
*/
private JMenuItem getMnuitmExportTDL() {
if (mnuitmExportTDL == null) {
mnuitmExportTDL = new JMenuItem();
mnuitmExportTDL.setText("Export TDL...");
mnuitmExportTDL.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmExportTDL.setEnabled(false);
mnuitmExportTDL.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ExportTDL();
}
});
}
return mnuitmExportTDL;
}
/**
* This method initializes mnuitmSelectAll
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSelectAll"
*/
private JMenuItem getMnuitmSelectAll() {
if (mnuitmSelectAll == null) {
mnuitmSelectAll = new JMenuItem();
mnuitmSelectAll.setText("Select All");
mnuitmSelectAll.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmSelectAll.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SelectAll();
}
});
}
return mnuitmSelectAll;
}
/**
* This method initializes mnuitmSelectInverse
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSelectInverse"
*/
private JMenuItem getMnuitmSelectInverse() {
if (mnuitmSelectInverse == null) {
mnuitmSelectInverse = new JMenuItem();
mnuitmSelectInverse.setText("Select Inverse");
mnuitmSelectInverse.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmSelectInverse.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SelectInverse();
}
});
}
return mnuitmSelectInverse;
}
/**
* This method initializes mnuitmSelectNone
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSelectNone"
*/
private JMenuItem getMnuitmSelectNone() {
if (mnuitmSelectNone == null) {
mnuitmSelectNone = new JMenuItem();
mnuitmSelectNone.setText("Select None");
mnuitmSelectNone.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmSelectNone.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
SelectNone();
}
});
}
return mnuitmSelectNone;
}
/**
* This method initializes mnuitmSettings
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmSettings"
*/
private JMenuItem getMnuitmSettings() {
if (mnuitmSettings == null) {
mnuitmSettings = new JMenuItem();
mnuitmSettings.setText("Settings...");
mnuitmSettings.setIcon(new ImageIcon(getClass().getResource("/resources/icons/settings.png")));
mnuitmSettings.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ShowSettings();
}
});
}
return mnuitmSettings;
}
/**
* This method initializes mnuitmVehicleTypes
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmVehicleTypes"
*/
private JMenuItem getMnuitmVehicleTypes() {
if (mnuitmVehicleTypes == null) {
mnuitmVehicleTypes = new JMenuItem();
mnuitmVehicleTypes.setText("Vehicle types...");
mnuitmVehicleTypes.setIcon(new ImageIcon(getClass().getResource("/resources/icons/vehicletypes.png")));
mnuitmVehicleTypes.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
ShowVehicleTypes();
}
});
}
return mnuitmVehicleTypes;
}
/**
* This method initializes mnuitmZoomToFit
* @return javax.swing.JMenuItem
* @uml.property name="mnuitmZoomToFit"
*/
private JMenuItem getMnuitmZoomToFit() {
if (mnuitmZoomToFit == null) {
mnuitmZoomToFit = new JMenuItem();
mnuitmZoomToFit.setText("Zoom to fit");
mnuitmZoomToFit.setIcon(new ImageIcon(getClass().getResource("/resources/icons/clear.png")));
mnuitmZoomToFit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
getMapDisplay().ZoomToFitAndCenter();
}
});
}
return mnuitmZoomToFit;
}
/**
* This method initializes mnuMain
* @return javax.swing.JMenuBar
* @uml.property name="mnuMain"
*/
private JMenuBar getMnuMain() {
if (mnuMain == null) {
mnuMain = new JMenuBar();
mnuMain.add(getMnuFile());
mnuMain.add(getMnuSelect());
mnuMain.add(getMnuView());
mnuMain.add(getMnuTrafficLayer());
mnuMain.add(getMnuSimulation());
mnuMain.add(getMnuHelp());
}
return mnuMain;
}
/**
* This method initializes mnuSelect
* @return javax.swing.JMenu
* @uml.property name="mnuSelect"
*/
private JMenu getMnuSelect() {
if (mnuSelect == null) {
mnuSelect = new JMenu();
mnuSelect.setText("Select");
mnuSelect.setEnabled(false);
mnuSelect.add(getMnuitmSelectInverse());
mnuSelect.add(getMnuitmSelectNone());
mnuSelect.add(getMnuitmSelectAll());
}
return mnuSelect;
}
/**
* This method initializes mnuSimulation
* @return javax.swing.JMenu
* @uml.property name="mnuSimulation"
*/
private JMenu getMnuSimulation() {
if (mnuSimulation == null) {
mnuSimulation = new JMenu();
mnuSimulation.setText("Simulation");
mnuSimulation.setEnabled(false);
mnuSimulation.add(getMnuitmExportSimulation());
mnuSimulation.add(getMnuitmSelectActivityBasedVehicleTypes());
}
return mnuSimulation;
}
/**
* This method initializes mnuHelp
* @return javax.swing.JMenu
* @uml.property name="mnuHelp"
*/
private JMenu getMnuHelp() {
if (mnuHelp == null) {
mnuHelp = new JMenu();
mnuHelp.setText("Help");
mnuHelp.add(getMnuitmHelpAbout());
}
return mnuHelp;
}
/**
* This method initializes mnuTrafficLayer
* @return javax.swing.JMenu
* @uml.property name="mnuTrafficLayer"
*/
private JMenu getMnuTrafficLayer() {
if (mnuTrafficLayer == null) {
mnuTrafficLayer = new JMenu();
mnuTrafficLayer.setText("Traffic Layer");
mnuTrafficLayer.setEnabled(false);
mnuTrafficLayer.add(getMnuitmLayerSelectVehicleTypes());
mnuTrafficLayer.add(getMnuitmLayerProperties());
}
return mnuTrafficLayer;
}
/**
* This method initializes mnuView
* @return javax.swing.JMenu
* @uml.property name="mnuView"
*/
private JMenu getMnuView() {
if (mnuView == null) {
mnuView = new JMenu();
mnuView.setText("View");
mnuView.setEnabled(false);
mnuView.add(getMnuitmDeletedMapElements());
mnuView.add(getMnuitmDrawAllTrafficLayers());
mnuView.add(getMnuitmZoomToFit());
mnuView.add(getMnuitmSettings());
mnuView.add(getMnuitmJobTypes());
mnuView.add(getMnuitmVehicleTypes());
}
return mnuView;
}
/**
* This method initializes pnlLayers2
* @return ui.PnlLayers
* @uml.property name="pnlLayers"
*/
private PnlLayers getPnlLayers() {
if (pnlLayers == null) {
pnlLayers = new PnlLayers();
}
return pnlLayers;
}
/**
* This method initializes pnlProperties
* @return ui.PnlProperties
* @uml.property name="pnlProperties"
*/
private PnlProperties getPnlProperties() {
if (pnlProperties == null) {
pnlProperties = new PnlProperties();
}
return pnlProperties;
}
/**
* This method initializes pnlScrollDisplay
* @return javax.swing.JPanel
* @uml.property name="pnlScrollDisplay"
*/
private JPanel getPnlScrollDisplay() {
if (pnlScrollDisplay == null) {
GridBagConstraints scrlHorizontalConstraints = new GridBagConstraints();
scrlHorizontalConstraints.fill = GridBagConstraints.HORIZONTAL;
scrlHorizontalConstraints.gridy = 1;
scrlHorizontalConstraints.anchor = GridBagConstraints.SOUTH;
scrlHorizontalConstraints.gridx = 0;
GridBagConstraints scrlVerticalConstraints = new GridBagConstraints();
scrlVerticalConstraints.fill = GridBagConstraints.VERTICAL;
scrlVerticalConstraints.gridy = 0;
scrlVerticalConstraints.weighty = 1.0;
scrlVerticalConstraints.anchor = GridBagConstraints.WEST;
scrlVerticalConstraints.gridx = 1;
GridBagConstraints mapDisplayConstraints = new GridBagConstraints();
mapDisplayConstraints.gridx = 0;
mapDisplayConstraints.anchor = GridBagConstraints.NORTHWEST;
mapDisplayConstraints.fill = GridBagConstraints.BOTH;
mapDisplayConstraints.weightx = 1.0D;
mapDisplayConstraints.weighty = 1.0D;
mapDisplayConstraints.gridy = 0;
pnlScrollDisplay = new JPanel();
pnlScrollDisplay.setLayout(new GridBagLayout());
pnlScrollDisplay.add(getMapDisplay(), mapDisplayConstraints);
pnlScrollDisplay.add(getScrlMapVertical(), scrlVerticalConstraints);
pnlScrollDisplay.add(getScrlMapHorizontal(), scrlHorizontalConstraints);
}
return pnlScrollDisplay;
}
/**
* This method initializes scrlMapHorizontal
* @return javax.swing.JScrollBar
* @uml.property name="scrlMapHorizontal"
*/
private JScrollBar getScrlMapHorizontal() {
if (scrlMapHorizontal == null) {
scrlMapHorizontal = new JScrollBar();
scrlMapHorizontal.setOrientation(Adjustable.HORIZONTAL);
scrlMapHorizontal.setEnabled(false);
}
return scrlMapHorizontal;
}
/**
* This method initializes scrlMapVertical
* @return javax.swing.JScrollBar
* @uml.property name="scrlMapVertical"
*/
private JScrollBar getScrlMapVertical() {
if (scrlMapVertical == null) {
scrlMapVertical = new JScrollBar();
scrlMapVertical.setEnabled(false);
}
return scrlMapVertical;
}
/**
* This method initializes splitPane
* @return javax.swing.JSplitPane
* @uml.property name="splitPane"
*/
private JSplitPane getSplitPane() {
if (splitPane == null) {
splitPane = new JSplitPane();
splitPane.setContinuousLayout(true);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(640);
splitPane.setResizeWeight(1.0D);
splitPane.setDividerSize(8);
splitPane.setLeftComponent(getPnlScrollDisplay());
splitPane.setRightComponent(getSplitPaneRight());
}
return splitPane;
}
/**
* This method initializes splitPaneRight
* @return javax.swing.JSplitPane
* @uml.property name="splitPaneRight"
*/
private JSplitPane getSplitPaneRight() {
if (splitPaneRight == null) {
splitPaneRight = new JSplitPane();
splitPaneRight.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitPaneRight.setResizeWeight(1.0D);
splitPaneRight.setDividerLocation(200);
splitPaneRight.setDividerSize(8);
splitPaneRight.setContinuousLayout(true);
splitPaneRight.setTopComponent(getPnlLayers());
splitPaneRight.setBottomComponent(getPnlProperties());
splitPaneRight.setOneTouchExpandable(true);
}
return splitPaneRight;
}
/**
* This method initializes tlbTools
* @return javax.swing.JToolBar
* @uml.property name="tlbTools"
*/
private JToolBar getTlbTools() {
if (tlbTools == null) {
tlbTools = new JToolBar();
tlbTools.setName("Tools");
tlbTools.setPreferredSize(new Dimension(500, 32));
tlbTools.setVisible(true);
tlbTools.setRollover(true);
tlbTools.add(getBtnSelect());
tlbTools.add(getBtnZoom());
tlbTools.add(getBtnPan());
tlbTools.add(new JToolBar.Separator());
tlbTools.add(getBtnCreateFlowEdgeToEdge());
tlbTools.add(getBtnCreateAreaFlow());
tlbTools.add(getBtnCreateHotSpot());
tlbTools.add(getBtnCreateAccident());
tlbTools.add(new JToolBar.Separator());
tlbTools.add(getBtnCreateArea());
tlbTools.add(getBtnCreateSchool());
tlbTools.add(new JToolBar.Separator());
tlbTools.add(getBtnDelete());
tlbTools.add(getBtnUndelete());
tlbTools.add(new JToolBar.Separator());
tlbTools.add(getBtnNewSelection());
tlbTools.add(getBtnAddSelection());
tlbTools.add(getBtnRemoveSelection());
SelectionTypeGroup.add(getBtnNewSelection());
SelectionTypeGroup.add(getBtnAddSelection());
SelectionTypeGroup.add(getBtnRemoveSelection());
ToolGroup.add(getBtnCreateFlowEdgeToEdge());
ToolGroup.add(getBtnCreateAreaFlow());
ToolGroup.add(getBtnCreateHotSpot());
ToolGroup.add(getBtnCreateAccident());
ToolGroup.add(getBtnCreateArea());
ToolGroup.add(getBtnCreateSchool());
ToolGroup.add(getBtnPan());
ToolGroup.add(getBtnZoom());
ToolGroup.add(getBtnSelect());
}
return tlbTools;
}
/**
* This method initializes this
*
*/
private void initialize() {
this.setSize(946, 505);
setPreferredSize(new Dimension(946, 505));
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
setJMenuBar(getMnuMain());
setContentPane(getJContentPane());
setTitle("SUMO Traffic Generator");
pack();
}
/**
* Creates a new project
*
*/
private void NewProject() {
// If there was an open project close it
if (project != null) {
if (CloseProject() == JOptionPane.CANCEL_OPTION) {
return;
}
}
// Show new project window
DlgNewProject dlg = new DlgNewProject(this);
dlg.setSize(new Dimension(452, 153));
// If the user pressed the OK button
if (dlg.getAnswer() == JOptionPane.OK_OPTION) {
try {
setCursor(Cursor.WAIT_CURSOR);
// Create the project
Project newProject = new Project(dlg.getProjectPath(), dlg.getMapFile());
// Notify any registered listeners that the project has changed
Broadcaster.NotifyProjectChanged(newProject);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "An error occured while creating the project", "Error", JOptionPane.ERROR_MESSAGE);
JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
}
}
/**
* Opens a project from file
*
*/
private void OpenProject() {
// If there was a previously open project close it
if (project != null) {
if (CloseProject() == JOptionPane.CANCEL_OPTION) {
return;
}
}
// Ask the user to select the project file
JFileChooser f = new JFileChooser();
f.setDialogTitle("Select project path");
f.setAcceptAllFileFilterUsed(false);
f.setFileFilter(new ProjectFileFilter());
f.setMultiSelectionEnabled(false);
int result = f.showOpenDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
return;
}
try {
setCursor(Cursor.WAIT_CURSOR);
File file = f.getSelectedFile();
// Open the project
Project openedProject = new Project(file.getAbsolutePath());
// Notify any registered listeners that the project has been opened
Broadcaster.NotifyProjectChanged(openedProject);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "An error occured while opening the project", "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
}
/**
* Saves the currently loaded project
*
*/
private void SaveProject() {
try {
setCursor(Cursor.WAIT_CURSOR);
project.Save();
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "An error occured while saving the project", "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
}
/**
* Exports the currently loaded project to TDL
*
*/
private void ExportTDL(){
// Ask the user to select the destination file
JFileChooser f = new JFileChooser();
f.setDialogTitle("Select export file");
f.setAcceptAllFileFilterUsed(false);
f.setFileFilter(new TDLFileFilter());
f.setMultiSelectionEnabled(false);
int result = f.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
return;
}
try {
setCursor(Cursor.WAIT_CURSOR);
File file = f.getSelectedFile();
if(!file.getAbsolutePath().endsWith(".tdl")){
file = new File(file.getAbsolutePath()+".tdl");
}
// Export the project as TDL
project.saveTDL(file.getAbsolutePath());
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "An error occured while exporting the project", "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
}
/**
* Saves the currently loaded project using a different path
*
*/
private void SaveProjectAs() {
// Ask the user to select the destination file
JFileChooser f = new JFileChooser();
f.setDialogTitle("Select project path");
f.setAcceptAllFileFilterUsed(false);
f.setFileFilter(new ProjectFileFilter());
f.setMultiSelectionEnabled(false);
int result = f.showSaveDialog(this);
if (result == JFileChooser.CANCEL_OPTION) {
return;
}
try {
setCursor(Cursor.WAIT_CURSOR);
File file = f.getSelectedFile();
// Save the project
project.SaveAs(file.getAbsolutePath());
// Update the window's title
setTitle("SUMO Traffic Generator" + " - " + project.getFileName());
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "An error occured while saving the project", "Error", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
}
/**
* Enables or disables the main toolbar
*
* @param status
*/
private void SetToolbarEnabled(boolean status) {
for (Component c : tlbTools.getComponents()) {
c.setEnabled(status);
}
}
/**
* Displays a dialog so that the user may select the vehicle types for the
* activity-based layers
*
*/
protected void SelectActivityBasedVehicleTypes() {
// Create a type selection that contains all the vehicle types of
// the project, each with a 0 probability
TypeSelection<VehicleType> projectVehicleTypes = new TypeSelection<VehicleType>(Project.getCurrentlyLoadedProject().getVehicleTypes());
// Get a copy of the activity based vehicle types (so that if the user
// cancels, the changes won't be permanent)
TypeSelection<VehicleType> abVehicleTypes = new TypeSelection<VehicleType>(Project.getCurrentlyLoadedProject().getActivityBasedTrafficVehicleSelection());
// Show the vehicle selection dialog
abVehicleTypes.addTypesNotInSelection(projectVehicleTypes);
DlgSelectTypes<VehicleType> dlg = new DlgSelectTypes<VehicleType>(abVehicleTypes);
dlg.setVisible(true);
if (dlg.getAnswer() == JOptionPane.OK_OPTION) {
// Remove any types that have 0 probability
abVehicleTypes.removeTypesWithZeroPercentage();
// Set the selected types to the layer
Project.getCurrentlyLoadedProject().setActivityBasedTrafficVehicleSelection(abVehicleTypes);
}
}
/**
* Exports the simulation
*
*/
protected void ExportSimulation() {
// Check if the user has provided the SUMO executable file paths and a
// temporary folder path
if (!ApplicationSettings.Validate()) {
JOptionPane.showMessageDialog(this, "Before you export the simulation you need to set the paths in the View > Settings dialog");
return;
}
// Show the dialog
DlgExportSimulation dlg = new DlgExportSimulation(this, project);
dlg.setVisible(true);
// If the user has pressed OK then get the selected traffic layers and
// export them
if (dlg.getAnswer() == JOptionPane.OK_OPTION) {
List<TrafficDefinitionLayer> layersToExport = dlg.getSelectedLayers();
try {
setCursor(Cursor.WAIT_CURSOR);
SimulationExporter.ExportSimulation(project, layersToExport);
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
}
}
/**
* Permanently deletes the deleted road network elements
*
*/
protected void PurgeDeleted() {
if (JOptionPane.showConfirmDialog(this, "Are you sure you want to permanently remove the deleted parts of the map?") == JOptionPane.YES_OPTION) {
try {
setCursor(Cursor.WAIT_CURSOR);
project.getRoadNetwork().PurgeDeleted();
} finally {
setCursor(Cursor.DEFAULT_CURSOR);
}
getMapDisplay().Refresh();
}
}
/**
* Selects all the elements on the display
*
*/
protected void SelectAll() {
getMapDisplay().SelectAll();
}
/**
* Selects the inverse elements on the display
*
*/
protected void SelectInverse() {
getMapDisplay().SelectInverse();
}
/**
* Deselects all elements on the display
*
*/
protected void SelectNone() {
getMapDisplay().SelectNone();
}
/**
* Enables the user to select vehicle types for the current traffic layer
*
*/
protected void SelectRandomTrafficLayerVehicleTypes() {
if (currentTrafficLayer instanceof RandomTrafficDefinitionLayer) {
RandomTrafficDefinitionLayer rdl = (RandomTrafficDefinitionLayer) currentTrafficLayer;
// Create a type selection that contains all the vehicle types of
// the
// project, each with a 0 probability
TypeSelection<VehicleType> projectVehicleTypes = new TypeSelection<VehicleType>(Project.getCurrentlyLoadedProject().getVehicleTypes());
// Get a copy of the layer's vehicle types (so that if the user
// cancels,
// the changes won't be permanent)
TypeSelection<VehicleType> layerVehicleTypes = new TypeSelection<VehicleType>(rdl.getVehicleSelection());
// Show the vehicle selection dialog
layerVehicleTypes.addTypesNotInSelection(projectVehicleTypes);
DlgSelectTypes<VehicleType> dlg = new DlgSelectTypes<VehicleType>(layerVehicleTypes);
dlg.setVisible(true);
if (dlg.getAnswer() == JOptionPane.OK_OPTION) {
// Remove any types that have 0 probability
layerVehicleTypes.removeTypesWithZeroPercentage();
// Set the selected types to the layer
rdl.setVehicleSelection(layerVehicleTypes);
}
}
}
/**
* Enables the user to modify the current layer's properties
*
*/
protected void SetTrafficLayerProperties() {
if (currentTrafficLayer instanceof RandomTrafficDefinitionLayer) {
DlgRandomLayerProperties dlg = new DlgRandomLayerProperties(this, (RandomTrafficDefinitionLayer) currentTrafficLayer);
}
}
/**
* Sets the selection mode to 'Add'
*
*/
protected void SetAddToSelection() {
getMapDisplay().setSelectionType(SelectionType.Add);
}
/**
* Sets the selection mode to 'New'
*
*/
protected void SetNewSelection() {
getMapDisplay().setSelectionType(SelectionType.New);
}
/**
* Sets the selection mode to 'Remove'
*
*/
protected void SetRemoveFromSelection() {
getMapDisplay().setSelectionType(SelectionType.Remove);
}
/**
* Shows the job types dialog
*
*/
protected void ShowJobTypes() {
DlgManageJobTypes dlg = new DlgManageJobTypes(this, project.getJobTypes());
project.setJobTypes(dlg.getJobTypes());
}
/**
* Shows the application settings dialog
*
*/
protected void ShowSettings() {
DlgSettings dlg = new DlgSettings(this);
dlg.setVisible(true);
}
/**
* Shows the vehicle types dialog
*
*/
protected void ShowVehicleTypes() {
DlgManageVehicleTypes dlg = new DlgManageVehicleTypes(this, project.getVehicleTypes());
project.setVehicleTypes(dlg.getVehicleTypes());
}
} // @jve:decl-index=0:visual-constraint="10,10"