Package ui

Source Code of ui.PnlProperties

package ui;

import classes.Layer;
import classes.Project;
import classes.ProjectElement;
import enums.SelectionCount;
import interfaces.CurrentLayerChangedListener;
import interfaces.ModifiedCollectionListener;
import interfaces.ProjectChangedListener;
import interfaces.SelectionChangedListener;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingConstants;
import roadnetwork.Edge;
import roadnetwork.Junction;
import trafficdefinition.Accident;
import trafficdefinition.AreaFlow;
import trafficdefinition.Flow;
import trafficdefinition.HotSpot;
import trafficdefinition.School;
import trafficdefinition.TrafficArea;
import ui.propertypanels.PnlAccidentProperties;
import ui.propertypanels.PnlAreaFlowProperties;
import ui.propertypanels.PnlEdgeProperties;
import ui.propertypanels.PnlFlowProperties;
import ui.propertypanels.PnlHotSpotProperties;
import ui.propertypanels.PnlJunctionProperties;
import ui.propertypanels.PnlSchoolProperties;
import ui.propertypanels.PnlTrafficAreaProperties;

/**
* Panel used to show and edit the properties of road network and traffic elements
*/
public class PnlProperties extends JPanel implements ProjectChangedListener, ModifiedCollectionListener, CurrentLayerChangedListener, SelectionChangedListener {

  private static final long serialVersionUID = 1L;

  private JComboBox cmbElements = null;

  private JScrollPane scrollPane = null;

  private JLabel lblMessage = null;

  /**
   * Component used to display the selected element's properties
   */
  JComponent currentComponent = null;

  /**
   * Currently selected layer (road network or traffic)
   */
  private Layer currentLayer = null; // @jve:decl-index=0:

  /**
   * Reference to the map display so that we can refresh it when the user
   * selects an element
   */
  private Display mapDisplay = null;

  private JButton btnCenterOnSelectedElement = null;

  private JPanel pnlTop = null;

  /**
   * Default constructor
   */
  public PnlProperties() {
    super();
    initialize();

    //Show the default message (No project loaded)
    getScrollPane().setViewportView(getLblMessage());

    currentComponent = lblMessage;
  }

  /**
   * @param mapDisplay  the mapDisplay to set
   * @uml.property  name="mapDisplay"
   */
  public void setMapDisplay(Display mapDisplay) {
    this.mapDisplay = mapDisplay;
  }

  /**
   * This method initializes this
   *
   */
  private void initialize() {
    GridBagConstraints gridBagConstraints3 = new GridBagConstraints();
    gridBagConstraints3.gridx = 0;
    gridBagConstraints3.fill = GridBagConstraints.BOTH;
    gridBagConstraints3.gridwidth = 2;
    gridBagConstraints3.weightx = 1.0D;
    gridBagConstraints3.anchor = GridBagConstraints.NORTH;
    gridBagConstraints3.gridy = 0;
    GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
    gridBagConstraints1.fill = GridBagConstraints.BOTH;
    gridBagConstraints1.gridy = 1;
    gridBagConstraints1.weighty = 1.0;
    gridBagConstraints1.gridwidth = 2;
    gridBagConstraints1.gridx = 0;
    this.setSize(300, 200);
    this.setLayout(new GridBagLayout());
    this.add(getScrollPane(), gridBagConstraints1);
    this.add(getPnlTop(), gridBagConstraints3);
  }

  /**
   * @return  the lblMessage
   * @uml.property  name="lblMessage"
   */
  private JLabel getLblMessage() {
    if (lblMessage == null) {
      lblMessage = new JLabel();
      lblMessage.setText("No project loaded");
      lblMessage.setHorizontalTextPosition(SwingConstants.CENTER);
      lblMessage.setHorizontalAlignment(SwingConstants.CENTER);
    }

    return lblMessage;
  }

  /**
   * This method initializes cmbElements
   * @return  javax.swing.JComboBox
   * @uml.property  name="cmbElements"
   */
  private JComboBox getCmbElements() {
    if (cmbElements == null) {
      cmbElements = new JComboBox();
      cmbElements.setPreferredSize(new Dimension(31, 20));
      cmbElements.setEnabled(false);
      cmbElements.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
          SelectedElementChanged();
        }
      });
    }
    return cmbElements;
  }

  /**
   * Handler for the selection changed event of the combobox
   *
   */
  protected void SelectedElementChanged() {
    if (cmbElements.getSelectedIndex() != -1) {
      // Instruct the current layer to apply the new selection
      currentLayer.SelectElement((ProjectElement)cmbElements.getSelectedItem());

      // Refresh the map display
      mapDisplay.Refresh();

      // Show the properties for the selected element
      ShowElementProperties((ProjectElement) cmbElements.getSelectedItem());
     
      //Enable the center button
      btnCenterOnSelectedElement.setEnabled(true);
    }
    else{
      //Disable the center button
      btnCenterOnSelectedElement.setEnabled(false);     
    }
  }

  /**
   * Called when the user changes the selection using the select tool in the
   * map display
   */
  public void SelectionChanged(SelectionCount count, ProjectElement selectedItem) {
    switch (count) {
    // No items selected
    case None:
      cmbElements.setSelectedIndex(-1);

      getLblMessage().setText("No items selected");
      getScrollPane().setViewportView(lblMessage);
      currentComponent = lblMessage;
      break;
    // One item selected
    case Single:
      // Select the corresponding element in the combo box
      cmbElements.setSelectedItem(selectedItem);

      // Show the selected element's properties
      ShowElementProperties(selectedItem);

      break;
    // Multiple items selected
    case Multiple:
      cmbElements.setSelectedIndex(-1);
      getLblMessage().setText("Multiple items selected");
      getScrollPane().setViewportView(lblMessage);
      currentComponent = lblMessage;
      break;
    }
  }

  /**
   * Displays the appropriate properties component for the specified element
   *
   * @param selectedItem
   */
  private void ShowElementProperties(ProjectElement selectedItem) {
    if (selectedItem instanceof Edge) {
      PnlEdgeProperties propertyPanel = new PnlEdgeProperties();

      propertyPanel.setEdge((Edge) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    } else if (selectedItem instanceof Junction) {
      PnlJunctionProperties propertyPanel = new PnlJunctionProperties();

      propertyPanel.setJunction((Junction) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    } else if (selectedItem instanceof Flow) {
      PnlFlowProperties propertyPanel = new PnlFlowProperties();

      propertyPanel.setFlow((Flow) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    } else if (selectedItem instanceof AreaFlow) {
      PnlAreaFlowProperties propertyPanel = new PnlAreaFlowProperties();

      propertyPanel.setAreaFlow((AreaFlow) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    } else if (selectedItem instanceof HotSpot) {
      PnlHotSpotProperties propertyPanel = new PnlHotSpotProperties();

      propertyPanel.setHotSpot((HotSpot) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    } else if (selectedItem instanceof TrafficArea) {
      PnlTrafficAreaProperties propertyPanel = new PnlTrafficAreaProperties();

      propertyPanel.setArea((TrafficArea) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    else if (selectedItem instanceof School) {
      PnlSchoolProperties propertyPanel = new PnlSchoolProperties();

      propertyPanel.setSchool((School) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    else if (selectedItem instanceof Accident) {
      PnlAccidentProperties propertyPanel = new PnlAccidentProperties();

      propertyPanel.setAccident((Accident) selectedItem);

      currentComponent = propertyPanel;

      getScrollPane().setViewportView(propertyPanel);
    } else {
      getLblMessage().setText("One item selected");
      getScrollPane().setViewportView(lblMessage);
      currentComponent = lblMessage;
    }
  }

  /**
   * Called when the selected layer is modified to refresh the combobox
   */
  public void CollectionModified() {
    cmbElements.setModel(new DefaultComboBoxModel(currentLayer.getElements().toArray()));
    cmbElements.updateUI();
  }

  /**
   * Called when the user selects a different layer
   */
  public void CurrentLayerChanged(Layer<? extends ProjectElement> newCurrentLayer) {
    // Remove event handlers for the previously selected layer
    if (currentLayer != null) {
      currentLayer.removeModifiedCollectionListener(this);
      currentLayer.removeSelectionChangedListener(this);
    }

    currentLayer = newCurrentLayer;

    // Fill the combo box with the layer's elements
    cmbElements.setModel(new DefaultComboBoxModel(newCurrentLayer.getElements().toArray()));
    cmbElements.setEnabled(true);
    cmbElements.setSelectedIndex(-1);

    getLblMessage().setText("No items selected");
    getScrollPane().setViewportView(lblMessage);
    currentComponent = lblMessage;

    // Register the event handlers on the new layer
    newCurrentLayer.addModifiedCollectionListener(this);
    newCurrentLayer.addSelectionChangedListener(this);
  }

  /**
   * Called when the user closes, opens or creates a new project
   */
  public void ProjectChanged(Project p) {
    // If the user closed the project remove any registered event handers
    // and empty the combo box
    if (p == null) {
      currentLayer.removeModifiedCollectionListener(this);
      currentLayer.removeSelectionChangedListener(this);

      currentLayer = null;

      cmbElements.setModel(new DefaultComboBoxModel());
      cmbElements.setEnabled(false);

      getLblMessage().setText("No project loaded");
      getScrollPane().setViewportView(lblMessage);
      currentComponent = lblMessage;
    }
  }

  /**
   * This method initializes scrollPane
   * @return  javax.swing.JScrollPane
   * @uml.property  name="scrollPane"
   */
  private JScrollPane getScrollPane() {
    if (scrollPane == null) {
      scrollPane = new JScrollPane();
    }
    return scrollPane;
  }

  /**
   * This method initializes btnCenterOnSelectedElement 
   * @return  javax.swing.JButton
   * @uml.property  name="btnCenterOnSelectedElement"
   */
  private JButton getBtnCenterOnSelectedElement() {
    if (btnCenterOnSelectedElement == null) {
      btnCenterOnSelectedElement = new JButton();
      btnCenterOnSelectedElement.setPreferredSize(new Dimension(20, 20));
      btnCenterOnSelectedElement.setIcon(new ImageIcon(getClass().getResource("/resources/icons/centeronelement.png")));
      btnCenterOnSelectedElement.setToolTipText("Center on element");
      btnCenterOnSelectedElement.setEnabled(false);
      btnCenterOnSelectedElement.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent e) {
          CenterOnSelectedElement();
        }
      });
    }
    return btnCenterOnSelectedElement;
  }

  /**
   * Centers the map on the selected element
   *
   */
  protected void CenterOnSelectedElement() {
    mapDisplay.CenterAndZoomOnElement((ProjectElement) cmbElements.getSelectedItem());
  }

  /**
   * This method initializes pnlTop 
   * @return  javax.swing.JPanel
   * @uml.property  name="pnlTop"
   */
  private JPanel getPnlTop() {
    if (pnlTop == null) {
      GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
      gridBagConstraints2.fill = GridBagConstraints.HORIZONTAL;
      gridBagConstraints2.gridy = 0;
      gridBagConstraints2.gridx = 1;
      GridBagConstraints gridBagConstraints = new GridBagConstraints();
      gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
      gridBagConstraints.gridy = 0;
      gridBagConstraints.weightx = 1.0;
      gridBagConstraints.gridx = 0;
      pnlTop = new JPanel();
      pnlTop.setLayout(new GridBagLayout());
      pnlTop.setPreferredSize(new Dimension(100, 20));
      pnlTop.add(getCmbElements(), gridBagConstraints);
      pnlTop.add(getBtnCenterOnSelectedElement(), gridBagConstraints2);
    }
    return pnlTop;
  }

  // TODO molo une te kam xhan dhe me doren kpus

}
TOP

Related Classes of ui.PnlProperties

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.