/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package vue.terminal; import controller.terminal.controller.TerminalRentController; import controller.terminal.interfacesGUI.TerminalRent; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.Insets; import java.awt.LayoutManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Set; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import vue.common.ValidityPanel; /** * * @author Valentin SEITZ */ public class TerminalRentPanel extends AbstractTerminalPanel implements TerminalRent { //Panel to manage informations private GridBagLayout gblInformations; //First line (number of bikes private JLabel lblNbBikes; private JComboBox cboNbBikes; private ValidityPanel panelNbBikesValid; //Second line (duration) private JLabel lblDuration; private JComboBox cboDuration; private JComboBox cboDurationUnit; private ValidityPanel panelDurationValid; //Panel to fire actions private JButton btnRent; public TerminalRentPanel(LayoutManager lm, boolean bln) { super(lm, bln); initialize(); } public TerminalRentPanel(LayoutManager lm) { super(lm); initialize(); } public TerminalRentPanel(boolean bln) { super(bln); initialize(); } public TerminalRentPanel() { initialize(); } private void initialize() { GridBagConstraints gbc; {//Contenu this.gblInformations = new GridBagLayout(); { this.gblInformations.columnWidths = new int[]{0, 0, 0, TerminalMainFrame.ROW_HEIGHT, 0}; this.gblInformations.rowHeights = new int[]{TerminalMainFrame.ROW_HEIGHT, TerminalMainFrame.ROW_HEIGHT, 0}; this.gblInformations.columnWeights = new double[]{0.0, 1.0, 1.0, 0.0, Double.MIN_VALUE}; this.gblInformations.rowWeights = new double[]{1.0, 1.0, Double.MIN_VALUE}; } this.getPanelContent().setLayout(this.gblInformations); {//First line //Nb selector of bikes this.cboNbBikes = new JComboBox(); { { this.cboNbBikes.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent ie) { if (cboNbBikes.getSelectedIndex() == -1) { panelNbBikesValid.setValid(ValidityPanel.NONE); } else { if (TerminalRentController.getTerminalRentController().getMaxAvailableBikes() >= (((Integer) (cboNbBikes.getSelectedItem())).intValue())) { panelNbBikesValid.setValid(ValidityPanel.VALID); } else { panelNbBikesValid.setValid(ValidityPanel.INVALID); } } panelNbBikesValid.repaint(); } }); } { gbc = new GridBagConstraints(); gbc.insets = new Insets(0, 0, TerminalMainFrame.VERTICAL_GAP, TerminalMainFrame.HORIZONTAL_GAP); gbc.fill = GridBagConstraints.BOTH; gbc.gridwidth = 2; gbc.gridx = 1; gbc.gridy = 0; } } this.getPanelContent().add(this.cboNbBikes, gbc); //Label for nb bikes this.lblNbBikes = new JLabel("Nombre de vélos"); { this.lblNbBikes.setLabelFor(this.cboNbBikes); { gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.VERTICAL; gbc.insets = new Insets(0, TerminalMainFrame.HORIZONTAL_GAP, TerminalMainFrame.VERTICAL_GAP, TerminalMainFrame.HORIZONTAL_GAP); gbc.anchor = GridBagConstraints.EAST; gbc.gridx = 0; gbc.gridy = 0; } } this.getPanelContent().add(this.lblNbBikes, gbc); //Validity for nb bikes this.panelNbBikesValid = new ValidityPanel(); { gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.insets = new Insets(0, 0, TerminalMainFrame.VERTICAL_GAP, 0); gbc.gridx = 3; gbc.gridy = 0; } this.getPanelContent().add(this.panelNbBikesValid, gbc); }//First line {//Second line //Duration selector this.cboDuration = new JComboBox(); { { gbc = new GridBagConstraints(); gbc.insets = new Insets(0, 0, TerminalMainFrame.VERTICAL_GAP, TerminalMainFrame.HORIZONTAL_GAP); gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 1; gbc.gridy = 1; } } this.getPanelContent().add(this.cboDuration, gbc); //Duration unit selector this.cboDurationUnit = new JComboBox(); { { this.cboDurationUnit.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent ie) { initializePossibleDurations(); } }); } { gbc = new GridBagConstraints(); gbc.insets = new Insets(0, 0, TerminalMainFrame.VERTICAL_GAP, TerminalMainFrame.HORIZONTAL_GAP); gbc.fill = GridBagConstraints.BOTH; gbc.gridx = 2; gbc.gridy = 1; } } this.getPanelContent().add(this.cboDurationUnit, gbc); //Label for duration selector this.lblDuration = new JLabel("Durée de location"); { this.lblDuration.setLabelFor(this.cboDuration); { gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.VERTICAL; gbc.insets = new Insets(0, TerminalMainFrame.HORIZONTAL_GAP, TerminalMainFrame.VERTICAL_GAP, TerminalMainFrame.HORIZONTAL_GAP); gbc.anchor = GridBagConstraints.EAST; gbc.gridx = 0; gbc.gridy = 1; } } this.getPanelContent().add(this.lblDuration, gbc); //Validity for duration (and duration unit) this.panelDurationValid = new ValidityPanel(); { gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.BOTH; gbc.insets = new Insets(0, 0, TerminalMainFrame.VERTICAL_GAP, 0); gbc.gridx = 3; gbc.gridy = 1; } this.getPanelContent().add(this.panelDurationValid, gbc); }//Second line } {//Actions this.getPanelActions().setLayout(new GridLayout(1, 1)); this.btnRent = new JButton("Louer"); { this.btnRent.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent ae) { TerminalRentController.getTerminalRentController().doRent( ((Integer) cboNbBikes.getSelectedItem()).intValue(), ((Integer) cboDuration.getSelectedItem()).intValue(), ((String) cboDurationUnit.getSelectedItem()).toString()); } }); } this.getPanelActions().add(this.btnRent); } } @Override public void init() { Set<String> durationUnits; //Initialize bike amount this.cboNbBikes.removeAllItems(); for (int i = 1; i <= TerminalRentController.getTerminalRentController().getMaxAvailableBikes(); i++) { this.cboNbBikes.addItem(new Integer(i)); } //Initialize duration units this.cboDurationUnit.removeAllItems(); durationUnits = TerminalRentController.getTerminalRentController().getPossibleDurationUnits(); for (String durationUnit : durationUnits) { this.cboDurationUnit.addItem(durationUnit); } //Choose first available duration unit if (this.cboDurationUnit.getItemCount() > 0) { this.cboDurationUnit.setSelectedIndex(0); } initializePossibleDurations(); } private void initializePossibleDurations() { Set<Integer> durations; //Initialize available durations this.cboDuration.removeAllItems(); if (this.cboDurationUnit.getItemCount() > 0) { durations = TerminalRentController.getTerminalRentController().getPossibleDurations(((String) this.cboDurationUnit.getSelectedItem())); for (Integer duration : durations) { this.cboDuration.addItem(duration); } } } }