Package ch.bfh.ti.kybernetik.gui.swing

Source Code of ch.bfh.ti.kybernetik.gui.swing.SimulatorControlGuiFrame

/**
* Copyright (C) BFH www.bfh.ch 2011
* Code written by: Patrick Dobler, Marc Folly
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package ch.bfh.ti.kybernetik.gui.swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import net.miginfocom.swing.MigLayout;
import ch.bfh.ti.kybernetik.engine.controller.Simulator;
import ch.bfh.ti.kybernetik.engine.controller.lightBulb.LightBulbController;
import ch.bfh.ti.kybernetik.engine.controller.lightBulb.LightBulbControllerFactory;
import ch.bfh.ti.kybernetik.engine.controller.roboter.RoboterController;
import ch.bfh.ti.kybernetik.engine.controller.roboter.RoboterControllerFactory;
import ch.bfh.ti.kybernetik.gui.slick.GuiSimulator;
import ch.bfh.ti.kybernetik.gui.slick.GuiSimulatorListener;
import ch.bfh.ti.kybernetik.gui.slick.components.LightBulbComponent;
import ch.bfh.ti.kybernetik.gui.slick.components.RoboterComponent;

/**
* A Swing based control GUI to add further control functions to the
* {@link GuiSimulator}.
*
* Due the fact that the Slick based {@link GuiSimulator} is limited in
* controlling functions, such as adding new roboters and control their
* behaviors, we added a second GUI to handle these operations
*
*/
public class SimulatorControlGuiFrame extends JFrame implements GuiSimulatorListener {

  private static final long serialVersionUID = 1L;

  private GuiSimulator guiSimulator;

  private Simulator simulator;

  private RoboterComponent selectedRoboterComponent;

  private JButton editRoboterButton;

  private EditRoboterFrame editRoboterFrame;

  private EditLightBulbFrame editLightBulbFrame;

  private LightBulbComponent selectedLightBulbComponent;

  private JButton editLightBulbButton;

  private JCheckBox renderTracingCheckBox;

  public SimulatorControlGuiFrame(Simulator simulator, GuiSimulator guiSimulator) {
    this.simulator = simulator;
    setTitle("Simulator Controller");
    setSize(350, 280);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.guiSimulator = guiSimulator;
    this.initGUI();
    guiSimulator.registerGuiSimulatorListener(this);
  }

  public final void initGUI() {
    JPanel panel = new JPanel(new MigLayout());
    getContentPane().add(panel);

    panel.add(new JLabel("Add Roboter"));
    panel.add(getAddRandomRoboterButton(), "wrap");

    panel.add(new JLabel("Add LightBulb"));
    panel.add(getAddRandomLightBulbButton(), "wrap");

    panel.add(new JLabel("Edit Selected LightBulb"));
    panel.add(getEditSelectedLightBulbButton(), "wrap");

    panel.add(new JLabel("Edit Selected Roboter"));
    panel.add(getEditSelectedRoboterButton(), "wrap");

    panel.add(new JLabel("Render Tracing"));
    panel.add(getRenderTracingCheckBox(), "wrap");

    panel.add(new JLabel("Simulator Speed"));
    panel.add(getSimulatorSpeedInputComponent(), "wrap");

    panel.add(new JLabel("Simulator Delta T"));
    panel.add(getDeltaTInputComponent(), "wrap");

  }

  private JButton getEditSelectedRoboterButton() {
    if (editRoboterButton == null) {
      editRoboterButton = new JButton("Edit Selected Roboter");
      editRoboterButton.setEnabled(false);
      editRoboterButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
          editRoboterFrame = new EditRoboterFrame(selectedRoboterComponent);
          editRoboterFrame.setVisible(true);
        }
      });
    }
    return editRoboterButton;
  }

  private JButton getEditSelectedLightBulbButton() {
    if (editLightBulbButton == null) {
      editLightBulbButton = new JButton("Edit Selected LightBulb");
      editLightBulbButton.setEnabled(false);
      editLightBulbButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
          editLightBulbFrame = new EditLightBulbFrame(selectedLightBulbComponent);
          editLightBulbFrame.setVisible(true);
        }
      });
    }
    return editLightBulbButton;
  }

  private JButton getAddRandomLightBulbButton() {
    JButton addRoboterButton = new JButton("Create Random LightBulb");
    addRoboterButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        LightBulbController lightBulbController = LightBulbControllerFactory.createRandomLightBulbConroller(simulator.getWidth(),
            simulator.getWidth());

        simulator.addLightBulbController(lightBulbController);
      }
    });
    return addRoboterButton;
  }

  private JButton getAddRandomRoboterButton() {
    JButton addRoboterButton = new JButton("Create Random Roboter");
    addRoboterButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        RoboterController aRoboterController = RoboterControllerFactory.createRandomRoboterController(simulator.getWidth(),
            simulator.getHeight());
        simulator.addRoboterController(aRoboterController);

      }
    });
    return addRoboterButton;
  }

  private JComponent getSimulatorSpeedInputComponent() {
    JSlider simulatorSpeedSlider = new JSlider(JSlider.HORIZONTAL, 1, 500, simulator.getSimulatorSpeed());
    simulatorSpeedSlider.setPaintLabels(true);
    simulatorSpeedSlider.setMajorTickSpacing(25);
    simulatorSpeedSlider.setPaintTicks(true);
    Hashtable<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
    labelTable.put(new Integer(1), new JLabel("Fast"));
    labelTable.put(new Integer(500), new JLabel("Slow"));
    simulatorSpeedSlider.setLabelTable(labelTable);
    simulatorSpeedSlider.setPaintLabels(true);
    simulatorSpeedSlider.addChangeListener(new ChangeListener() {

      @Override
      public void stateChanged(ChangeEvent e) {
        JSlider source = (JSlider) e.getSource();
        simulator.setSimulatorSpeed(source.getValue());
      }
    });
    return simulatorSpeedSlider;
  }

  private JCheckBox getRenderTracingCheckBox() {
    if (renderTracingCheckBox == null) {
      renderTracingCheckBox = new JCheckBox();
      renderTracingCheckBox.setSelected(guiSimulator.isRenderTracing());
      renderTracingCheckBox.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
          guiSimulator.setRenderTracing(renderTracingCheckBox.isSelected());
        }
      });
    }

    return renderTracingCheckBox;

  }

  private JComponent getDeltaTInputComponent() {
    final JTextField textField = new JTextField(100);
    textField.setText(String.valueOf(simulator.getDeltaT()));
    textField.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent e) {
        String newText = textField.getText();
        try {
          Double newValue = Double.valueOf(newText);
          simulator.setDeltaT(newValue);
        } catch (NumberFormatException nfe) {
          System.out.println("Invalid Input for Delta T: " + nfe);
        }
      }
    });
    return textField;

  }

  @Override
  public void selctedRoboterComponent(RoboterComponent newSelectedRc) {
    if (newSelectedRc != null) {
      this.selectedRoboterComponent = newSelectedRc;
      this.hideAllEditFrames();
      this.getEditSelectedRoboterButton().setEnabled(true);
    }
  }

  @Override
  public void selctedLightComponent(LightBulbComponent newSelectedLightBulbComponent) {
    if (newSelectedLightBulbComponent != null) {
      this.selectedLightBulbComponent = newSelectedLightBulbComponent;
      this.hideAllEditFrames();
      this.getEditSelectedLightBulbButton().setEnabled(true);
    }
  }

  private void hideAllEditFrames() {
    if (editRoboterFrame != null) {
      editRoboterFrame.setVisible(false);
    }
    if (editLightBulbFrame != null) {
      editLightBulbFrame.setVisible(false);
    }
    this.getEditSelectedRoboterButton().setEnabled(false);
    this.getEditSelectedLightBulbButton().setEnabled(false);
  }
}
TOP

Related Classes of ch.bfh.ti.kybernetik.gui.swing.SimulatorControlGuiFrame

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.