Package visualization

Source Code of visualization.NeuroBaldrControlFrame$MainControlFrame

package visualization;

import graphs.XYInputsvOuputByThetaGraph;

import java.util.ArrayList;


import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTabbedPane;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

import odor.Odor;

import java.awt.Dimension;
import java.io.*;

import structures.Network;
import util.Util;

public class NeuroBaldrControlFrame extends JFrame implements RunsSimulation
{
  private ArrayList<JNetwork> networkArray;
  private JTabbedPane networkProcesTabs;
  public static final int X_OFFSET = 105;
  public static final int Y_OFFSET = 55;
  private Odor[] battery;
  private File batteryFile;
  private XYInputsvOuputByThetaGraph outputGraph;
  private File saveDirectory;
  private OptionsFrame optionsFrame;
  private ControlWidget myControlWidget;
 
  private class MainControlFrame extends ControlWidget
  {
    private javax.swing.JButton showOptionsScreen;
    private javax.swing.JButton showSimulationScreen;
   
    public MainControlFrame(RunsSimulation runner ,Odor[] battery)
    {
      super(runner ,battery);
     
      showOptionsScreen = new javax.swing.JButton("Show Options");
     
      showOptionsScreen.addActionListener(new java.awt.event.ActionListener()
      {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
          optionsFrame.setVisible(true);
          internalSetVisible(false);
        }
      });
     
      showSimulationScreen = new javax.swing.JButton("Show Simulation");
     
      showSimulationScreen.addActionListener(new java.awt.event.ActionListener()
      {
        public void actionPerformed(java.awt.event.ActionEvent evt)
        {
          optionsFrame.setVisible(false);
          internalSetVisible(true);
          forceTabUpdate();
        }
      });
     
      this.add(showOptionsScreen);
      this.add(showSimulationScreen);
      pack();
    }
  }
 
  @Deprecated
  public NeuroBaldrControlFrame(int numNetworks)
  {
    //STEP 1: Save Location Load/Set
    setupDirectory();
   
    //STEP 1.5: Generate Initial Networks
    networkArray = new ArrayList<JNetwork>(numNetworks);
    for (int x=0; x<numNetworks; x++)
    {
      networkArray.add(new JNetwork(new Network(main.Main.NUM_COLS)));
    }
   
    //STEP 2: Show Options Screen
    optionsFrame = new OptionsFrame(networkArray);
    optionsFrame.setVisible(true);
   
  }
 
  /**
   * Forces JTab update by removing and replacing all JNetworks
   */
  private void forceTabUpdate()
  {
    networkProcesTabs.removeAll();
   
    for (JNetwork jn : networkArray)
    {
      networkProcesTabs.addTab(jn.toString(), jn);
    }
   
    networkProcesTabs.validate();
    validate();
  }
 
  @Deprecated
  private void addJNetworkTab(Network n)
  {
    JNetwork temp = new JNetwork(n);
   
    if (!networkArray.contains(temp))
    { 
      networkArray.add(temp);
    }
   
    networkProcesTabs.addTab(temp.toString(), temp);
    networkProcesTabs.validate();
  }
 
  /**
   * Adds JNetwork to tab iff it's not in there already
   * @param temp
   */
  private void addJNetworkTab(JNetwork temp)
  {   
    if (!networkArray.contains(temp))
    { 
      networkArray.add(temp);
    }
   
    networkProcesTabs.addTab(temp.toString(), temp);
    networkProcesTabs.validate();
  }
 
  private void internalSetVisible(boolean s)
  {
    setVisible(s);
  }
 
  public NeuroBaldrControlFrame(int numNetworks, Odor[] battery)
  {
    //STEP 1: Save Location Load/Set
    setupDirectory();
   
    //STEP 1.5: Generate Initial Networks
    networkArray = new ArrayList<JNetwork>(numNetworks);
    for (int x=0; x<numNetworks; x++)
    {
      networkArray.add(new JNetwork(new Network(main.Main.NUM_COLS)));
    }
   
    //STEP 2: Setup Options Screen
    this.battery = battery;
    optionsFrame = new OptionsFrame(networkArray, battery);
   
    //STEP 3: Setup Simulation Screen
    networkProcesTabs = new JTabbedPane(SwingConstants.LEFT);
   
    for (JNetwork j : networkArray)
    {
      addJNetworkTab(j);
    }
   
    //STEP 4: Setup Control Widget
    myControlWidget = new MainControlFrame(this, battery);
    myControlWidget.setVisible(true);
   
    //STEP 5: Display
    setContentPane(networkProcesTabs);
    initializeGraphics();
    validate();
  }
 
  /**
   * Sets default window properties
   */
  public void initializeGraphics()
  {
    setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
    this.setSize(new Dimension(X_OFFSET+JNetwork.COL_START_X+JNetwork.COL_OFFSET*networkArray.get(0).getNumCols(),
        Y_OFFSET+JNetwork.COL_START_Y+JNetwork.GRANULE_RADIUS*JNetwork.getGranulesPerColumn(networkArray.get(0))));
    setTitle("Main Simulation");
  }
 
  private void setupDirectory()
  {
    try
    {
      atttemptDefaultLocationLoad();
    }
    catch(IOException e)
    {
      JOptionPane.showConfirmDialog(this, "Unable to Load Files from Default Directory: Continuing Anyways");
    }
   
    boolean canWork = (saveDirectory != null && saveDirectory.exists() &&saveDirectory.isDirectory() && saveDirectory.list() != null);
   
    while(canWork == false)
    {
      String tempInput = JOptionPane.showInputDialog("Please enter default save location: ");
     
      if (tempInput == null)
      {
        System.exit(0);
      }
      else
      {
        saveDirectory = new File(tempInput);
        saveDirectory.mkdir();
        canWork = (saveDirectory.exists() && saveDirectory.isDirectory() && saveDirectory.canRead() && saveDirectory.canWrite());
      }
     
      if (!canWork)
      {
        JOptionPane.showMessageDialog(this, "Error: Invalid Directory. Try Again");
      }
     
    }
  }
 
  private void atttemptDefaultLocationLoad() throws IOException
  {
    File test;
    if (Util.getOS() == Util.IS_LINUX || Util.getOS() == Util.IS_MAC)
    {
      test = new File(""+System.getProperty("user.home")+File.separatorChar+".neurobaldr");     
    }
    else if (Util.getOS() == Util.IS_WINDOWS)
    {
      test = new File(""+System.getenv("APPDATA")+File.separatorChar+".neurobaldr");
    }
    else
    {
      throw new UnsupportedOperationException();
    }
   
    if (test.exists() && test.isDirectory())
    {
      saveDirectory = test;
      batteryFile = new File(saveDirectory.getAbsolutePath()+File.separatorChar+"odorbattery.dat");
     
      if (batteryFile.exists())
      {
        battery = Odor.fileToBattery(batteryFile);
      }
      else
      {
        batteryFile.createNewFile();
      }
     
    }
    else
    {
      saveDirectory = test;
      saveDirectory.mkdir();
     
      batteryFile = new File(saveDirectory.getAbsolutePath()+File.separatorChar+"odorbattery.dat");
      batteryFile.createNewFile();
    }
  }
 
  //TODO Fix getJNetwork()
  public JNetwork getJNetwork()
  {
    return null;
  }

  public void runSimulation(Object data)
  {
    boolean flag = false;
   
    for(JNetwork network : networkArray)
    {
      network.fire(myControlWidget.getSelectedOdor());
       
      if (outputGraph == null || flag == false)
      {
        outputGraph = new XYInputsvOuputByThetaGraph(network, myControlWidget.getSelectedOdor());
        flag = true;
      }
      else
      {
        outputGraph.addXYSeries(network);
      }   
   
      outputGraph.setVisible(true);
     
      validate();
      this.repaint();
     
      network.resetGranules();
    }
  }

  public void setOdor(Odor input)
  {
    for(JNetwork network : networkArray)
    {
      network.setOdor(input);
    }
  }

}
TOP

Related Classes of visualization.NeuroBaldrControlFrame$MainControlFrame

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.