<<<<<<< HEAD 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 } ======= 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 } >>>>>>> origin/abdalla