Package com.cburch.logisim.gui.main

Source Code of com.cburch.logisim.gui.main.SimulationExplorer

/* Copyright (c) 2011, Carl Burch. License information is located in the
* com.cburch.logisim.Main source code and at www.cburch.com/logisim/. */

package com.cburch.logisim.gui.main;

import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.TreePath;

import com.cburch.draw.toolbar.Toolbar;
import com.cburch.logisim.circuit.CircuitState;
import com.cburch.logisim.circuit.Simulator;
import com.cburch.logisim.proj.Project;
import com.cburch.logisim.proj.ProjectEvent;
import com.cburch.logisim.proj.ProjectListener;

class SimulationExplorer extends JPanel
    implements ProjectListener, MouseListener {
  private Project project;
  private SimulationTreeModel model;
  private JTree tree;
 
  SimulationExplorer(Project proj, MenuListener menu) {
    super(new BorderLayout());
    this.project = proj;
   
    SimulationToolbarModel toolbarModel = new SimulationToolbarModel(proj, menu);
    Toolbar toolbar = new Toolbar(toolbarModel);
    add(toolbar, BorderLayout.NORTH);

    model = new SimulationTreeModel(proj.getSimulator().getCircuitState());
    model.setCurrentView(project.getCircuitState());
    tree = new JTree(model);
    tree.setCellRenderer(new SimulationTreeRenderer());
    tree.addMouseListener(this);
    tree.setToggleClickCount(3);
    add(new JScrollPane(tree), BorderLayout.CENTER);
    proj.addProjectListener(this);
  }

  //
  // ProjectListener methods
  //
  public void projectChanged(ProjectEvent event) {
    int action = event.getAction();
    if (action == ProjectEvent.ACTION_SET_STATE) {
      Simulator sim = project.getSimulator();
      CircuitState root = sim.getCircuitState();
      if (model.getRootState() != root) {
        model = new SimulationTreeModel(root);
        tree.setModel(model);
      }
      model.setCurrentView(project.getCircuitState());
      TreePath path = model.mapToPath(project.getCircuitState());
      if (path != null) {
        tree.scrollPathToVisible(path);
      }
    }
  }
 
  //
  // MouseListener methods
  //
  //
  // MouseListener methods
  //
  public void mouseEntered(MouseEvent e) { }
  public void mouseExited(MouseEvent e) { }
  public void mousePressed(MouseEvent e) {
    requestFocus();
    checkForPopup(e);
  }
  public void mouseReleased(MouseEvent e) {
    checkForPopup(e);
  }
  private void checkForPopup(MouseEvent e) {
    if (e.isPopupTrigger()) {
      ; // do nothing
    }
  }
  public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 2) {
      TreePath path = tree.getPathForLocation(e.getX(), e.getY());
      if (path != null) {
        Object last = path.getLastPathComponent();
        if (last instanceof SimulationTreeCircuitNode) {
          SimulationTreeCircuitNode node;
          node = (SimulationTreeCircuitNode) last;
          project.setCircuitState(node.getCircuitState());
        }
      }
    }
  }
}
TOP

Related Classes of com.cburch.logisim.gui.main.SimulationExplorer

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.