Package ui

Source Code of ui.MainWindow

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"
TOP

Related Classes of ui.MainWindow

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.