Package com.cburch.logisim.analyze.gui

Source Code of com.cburch.logisim.analyze.gui.Analyzer

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

package com.cburch.logisim.analyze.gui;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.cburch.logisim.analyze.model.AnalyzerModel;
import com.cburch.logisim.gui.generic.LFrame;
import com.cburch.logisim.gui.menu.LogisimMenuBar;
import com.cburch.logisim.util.LocaleListener;
import com.cburch.logisim.util.LocaleManager;

public class Analyzer extends LFrame {
  // used by circuit analysis to select the relevant tab automatically.
  public static final int INPUTS_TAB = 0;
  public static final int OUTPUTS_TAB = 1;
  public static final int TABLE_TAB = 2;
  public static final int EXPRESSION_TAB = 3;
  public static final int MINIMIZED_TAB = 4;
 
  private class MyListener implements LocaleListener {
    public void localeChanged() {
      Analyzer.this.setTitle(Strings.get("analyzerWindowTitle"));
      tabbedPane.setTitleAt(INPUTS_TAB, Strings.get("inputsTab"));
      tabbedPane.setTitleAt(OUTPUTS_TAB, Strings.get("outputsTab"));
      tabbedPane.setTitleAt(TABLE_TAB, Strings.get("tableTab"));
      tabbedPane.setTitleAt(EXPRESSION_TAB, Strings.get("expressionTab"));
      tabbedPane.setTitleAt(MINIMIZED_TAB, Strings.get("minimizedTab"));
      tabbedPane.setToolTipTextAt(INPUTS_TAB, Strings.get("inputsTabTip"));
      tabbedPane.setToolTipTextAt(OUTPUTS_TAB, Strings.get("outputsTabTip"));
      tabbedPane.setToolTipTextAt(TABLE_TAB, Strings.get("tableTabTip"));
      tabbedPane.setToolTipTextAt(EXPRESSION_TAB, Strings.get("expressionTabTip"));
      tabbedPane.setToolTipTextAt(MINIMIZED_TAB, Strings.get("minimizedTabTip"));
      buildCircuit.setText(Strings.get("buildCircuitButton"));
      inputsPanel.localeChanged();
      outputsPanel.localeChanged();
      truthTablePanel.localeChanged();
      expressionPanel.localeChanged();
      minimizedPanel.localeChanged();
      buildCircuit.localeChanged();
    }
  }
 
  private class EditListener implements ActionListener, ChangeListener {
    private void register(LogisimMenuBar menubar) {
      menubar.addActionListener(LogisimMenuBar.CUT, this);
      menubar.addActionListener(LogisimMenuBar.COPY, this);
      menubar.addActionListener(LogisimMenuBar.PASTE, this);
      menubar.addActionListener(LogisimMenuBar.DELETE, this);
      menubar.addActionListener(LogisimMenuBar.SELECT_ALL, this);
      tabbedPane.addChangeListener(this);
      enableItems(menubar);
    }
   
    public void actionPerformed(ActionEvent e) {
      Object src = e.getSource();
      Component c = tabbedPane.getSelectedComponent();
      if (c instanceof JScrollPane) {
        c = ((JScrollPane) c).getViewport().getView();
      }
      if (!(c instanceof TabInterface)) return;
      TabInterface tab = (TabInterface) c;
      if (src == LogisimMenuBar.CUT) {
        tab.copy();
        tab.delete();
      } else if (src == LogisimMenuBar.COPY) {
        tab.copy();
      } else if (src == LogisimMenuBar.PASTE) {
        tab.paste();
      } else if (src == LogisimMenuBar.DELETE) {
        tab.delete();
      } else if (src == LogisimMenuBar.SELECT_ALL) {
        tab.selectAll();
      }
    }
   
    private void enableItems(LogisimMenuBar menubar) {
      Component c = tabbedPane.getSelectedComponent();
      if (c instanceof JScrollPane) {
        c = ((JScrollPane) c).getViewport().getView();
      }
      boolean support = c instanceof TabInterface;
      menubar.setEnabled(LogisimMenuBar.CUT, support);
      menubar.setEnabled(LogisimMenuBar.COPY, support);
      menubar.setEnabled(LogisimMenuBar.PASTE, support);
      menubar.setEnabled(LogisimMenuBar.DELETE, support);
      menubar.setEnabled(LogisimMenuBar.SELECT_ALL, support);
    }

    public void stateChanged(ChangeEvent e) {
      enableItems((LogisimMenuBar) getJMenuBar());
     
      Object selected = tabbedPane.getSelectedComponent();
      if (selected instanceof JScrollPane) {
        selected = ((JScrollPane) selected).getViewport().getView();
      }
      if (selected instanceof AnalyzerTab) {
        ((AnalyzerTab) selected).updateTab();
      }
    }
  }
 
  private MyListener myListener = new MyListener();
  private EditListener editListener = new EditListener();
  private AnalyzerModel model = new AnalyzerModel();
  private JTabbedPane tabbedPane = new JTabbedPane();
 
  private VariableTab inputsPanel;
  private VariableTab outputsPanel;
  private TableTab truthTablePanel;
  private ExpressionTab expressionPanel;
  private MinimizedTab minimizedPanel;
  private BuildCircuitButton buildCircuit;
 
  Analyzer() {
    inputsPanel = new VariableTab(model.getInputs());
    outputsPanel = new VariableTab(model.getOutputs());
    truthTablePanel = new TableTab(model.getTruthTable());
    expressionPanel = new ExpressionTab(model);
    minimizedPanel = new MinimizedTab(model);
    buildCircuit = new BuildCircuitButton(this, model);

    truthTablePanel.addMouseListener(new TruthTableMouseListener());
   
    tabbedPane = new JTabbedPane();
    addTab(INPUTS_TAB, inputsPanel);
    addTab(OUTPUTS_TAB, outputsPanel);
    addTab(TABLE_TAB, truthTablePanel);
    addTab(EXPRESSION_TAB, expressionPanel);
    addTab(MINIMIZED_TAB, minimizedPanel);
   
    Container contents = getContentPane();
    JPanel vertStrut = new JPanel(null);
    vertStrut.setPreferredSize(new Dimension(0, 300));
    JPanel horzStrut = new JPanel(null);
    horzStrut.setPreferredSize(new Dimension(450, 0));
    JPanel buttonPanel = new JPanel();
    buttonPanel.add(buildCircuit);
    contents.add(vertStrut, BorderLayout.WEST);
    contents.add(horzStrut, BorderLayout.NORTH);
    contents.add(tabbedPane, BorderLayout.CENTER);
    contents.add(buttonPanel, BorderLayout.SOUTH);
   
    DefaultRegistry registry = new DefaultRegistry(getRootPane());
    inputsPanel.registerDefaultButtons(registry);
    outputsPanel.registerDefaultButtons(registry);
    expressionPanel.registerDefaultButtons(registry);
   
    LocaleManager.addLocaleListener(myListener);
    myListener.localeChanged();
   
    LogisimMenuBar menubar = new LogisimMenuBar(this, null);
    setJMenuBar(menubar);
    editListener.register(menubar);
  }
 
  private void addTab(int index, final JComponent comp) {
    final JScrollPane pane = new JScrollPane(comp,
        ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
        ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    if (comp instanceof TableTab) {
      pane.setVerticalScrollBar(((TableTab) comp).getVerticalScrollBar());
    }
    pane.addComponentListener(new ComponentListener() {
      public void componentResized(ComponentEvent event) {
        int width = pane.getViewport().getWidth();
        comp.setSize(new Dimension(width, comp.getHeight()));
      }

      public void componentMoved(ComponentEvent arg0) { }
      public void componentShown(ComponentEvent arg0) { }
      public void componentHidden(ComponentEvent arg0) { }
    });
    tabbedPane.insertTab("Untitled", null, pane, null, index);
  }
 
  public AnalyzerModel getModel() {
    return model;
  }
 
  public void setSelectedTab(int index) {
    Object found = tabbedPane.getComponentAt(index);
    if (found instanceof AnalyzerTab) {
      ((AnalyzerTab) found).updateTab();
    }
    tabbedPane.setSelectedIndex(index);
  }
 
  public static void main(String[] args) {
    Analyzer frame = new Analyzer();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}
TOP

Related Classes of com.cburch.logisim.analyze.gui.Analyzer

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.