/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package robotinterface.gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.UIManager;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.EventListener;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextPane;
import javax.swing.JToolBar;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileFilter;
import javax.swing.text.BadLocationException;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea;
import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaHighlighter;
import org.fife.ui.rsyntaxtextarea.SquiggleUnderlineHighlightPainter;
import robotinterface.algorithm.Command;
import robotinterface.algorithm.parser.Parser;
import robotinterface.algorithm.parser.decoder.ParseException;
import robotinterface.algorithm.parser.decoder.TokenMgrError;
import robotinterface.algorithm.procedure.Function;
import robotinterface.drawable.DrawingPanel;
import static robotinterface.drawable.swing.MutableWidgetContainer.autoUpdateValue;
import robotinterface.gui.panels.FlowchartPanel;
import robotinterface.gui.panels.Interpertable;
import robotinterface.gui.panels.SimulationPanel;
import robotinterface.gui.panels.TabController;
import robotinterface.gui.panels.editor.EditorPanel;
import robotinterface.gui.panels.console.MessageConsole;
import robotinterface.gui.panels.robot.RobotControlPanel;
import static robotinterface.gui.panels.robot.RobotControlPanel.VIRTUAL_CONNECTION;
import robotinterface.gui.panels.robot.RobotManager;
import robotinterface.interpreter.Interpreter;
import robotinterface.project.Project;
import robotinterface.robot.Robot;
import robotinterface.robot.connection.Connection;
import robotinterface.util.fommil.jni.JniNamer;
import robotinterface.util.SplashScreen;
/**
*
* @author antunes
*/
public class GUI extends JFrame implements ComponentListener {
private static Logger logger = null;
private static GUI INSTANCE = null;
private Project mainProject = new Project();
private ArrayList<EditorPanel> mapCE = new ArrayList<>();
private ArrayList<FlowchartPanel> mapFC = new ArrayList<>();
private ImageIcon codeIcon;
private ImageIcon flowchartIcon;
private final ImageIcon splitIcon;
private final ImageIcon unsplitIcon;
private final RobotManager robotManager;
private final JFileChooser fileChooser;
private final boolean allowMainTabbedPaneStateChanged;
private final JSplitPane simulationSplitPanel;
private boolean splitView = false;
private static JTextArea console;
public boolean LOG = false;
private static ConsoleManagerThread cmt = null;
private Interpreter mainInterpreter = new Interpreter();
private Interpreter interpreter;
private ShortcutsWindow shortcutsWindow;
private int lastIdx;
private final JToolBar helpPanel;
private String helpTip = "";
private AboutWindow aboutWindow;
private JToolBar aushd() {
return helpPanel;
}
private static class ConsoleManagerThread extends Thread {
public ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
@Override
public void run() {
int size;
while (true) {
size = queue.size();
if (size != 0) {
console.setText(console.getText() + "\n" + queue.poll());
console.selectAll();
if (size > 20) {
System.err.println("Console Queue Overflow :/");
console.setText("Console Queue Overflow :/\n" + queue.poll());
queue.clear();
}
}
try {
Thread.sleep(1);
} catch (InterruptedException ex) {
}
}
}
public void enqueue(String str) {
queue.offer(str);
}
}
public static void print(String str) {
if (cmt == null || !cmt.isAlive()) {
cmt = new ConsoleManagerThread();
cmt.start();
}
cmt.enqueue(str);
}
private GUI() {
codeIcon = new ImageIcon(getClass().getResource("/resources/tango/32x32/mimetypes/text-x-generic.png"));
flowchartIcon = new ImageIcon(getClass().getResource("/resources/tango/32x32/mimetypes/text-x-script.png"));
splitIcon = new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/window-split-vertical.png"));
unsplitIcon = new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/window-unsplit.png"));
helpPanel = new JToolBar() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.drawString(helpTip, 25, g.getFontMetrics().getAscent() + 2);
}
};
initComponents();
setLocationRelativeTo(null);
setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
// secondarySplitPane.setDividerLocation(.5);
stepButton.setVisible(false);
deleteButton.setVisible(false);
jSeparator5.setVisible(false);
//muito importante para fazer o KeyListener funcionar
//o NetBeans mentiu quando disse que o JFrame era focusable! =(
setFocusable(true);
console = new JTextArea();
consolePanel.setLayout(new GridLayout());
consolePanel.setName("Console");
consolePanel.add(new JScrollPane(console));
// dynamicTabbedPane.add(consolePanel);
// MessageConsole mc = new MessageConsole(console);
// mc.redirectOut(Color.BLACK, System.out);
// mc.redirectErr(Color.RED, System.err);
// mc.setMessageLines(100);
final JPopupMenu popupMenu = new JPopupMenu();
JMenuItem menuItem = new JMenuItem("Limpar");
menuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
console.setText("");
}
});
popupMenu.add(menuItem);
console.add(popupMenu);
console.addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
if (e.getButton() == e.BUTTON3) {
popupMenu.show(console, e.getX(), e.getY());
}
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
});
// jSpinner1.setModel(new SpinnerNumberModel(0, 0, 9999, 10));
// jSpinner1.addChangeListener(new ChangeListener() {
// @Override
// public void stateChanged(ChangeEvent e) {
// int i = (int) jSpinner1.getValue();
// if (interpreter != null) {
// interpreter.setTimestep(i);
// }
// }
// });
// autoUpdateValue(jSpinner1);
jSpinner1.setVisible(false);
robotComboBox.setVisible(false);
timestepTButton.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
if (interpreter != null) {
if (timestepTButton.getModel().isSelected()) {
interpreter.setTimestep(200);
} else {
interpreter.setTimestep(0);
}
} else if (timestepTButton.getModel().isSelected()) {
timestepTButton.getModel().setPressed(false);
}
}
});
//robot manager
robotManager = new RobotManager(this);
robotManager.createRobot();
jScrollPane3.setViewportView(robotManager);
jScrollPane3.getVerticalScrollBar().setUnitIncrement(10);
FileFilter ff = new FileFilter() {
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
String extension = null;
String s = file.getName();
int i = s.lastIndexOf('.');
if (i > 0 && i < s.length() - 1) {
extension = s.substring(i + 1).toLowerCase();
}
if (extension != null) {
if (extension.equals(Project.FILE_EXTENSION)) {
return true;
} else {
return false;
}
}
return false;
}
@Override
public String getDescription() {
return "Projetos";
}
};
Boolean old = UIManager.getBoolean("FileChooser.readOnly");
UIManager.put("FileChooser.readOnly", Boolean.TRUE);
fileChooser = new JFileChooser();
UIManager.put("FileChooser.readOnly", old);
fileChooser.setAcceptAllFileFilterUsed(false);
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
fileChooser.setMultiSelectionEnabled(false);
fileChooser.addChoosableFileFilter(ff);
simulationSplitPanel = new JSplitPane();
// dynamicToolBar.setVisible(false);
updateRobotList();
if (LOG) {
saveSatateAndCompare();
}
allowMainTabbedPaneStateChanged = true;
mainTabbedPaneStateChanged(null);
super.addComponentListener(this);
console.setText("");
addDebugMenu();
super.setIconImage(new ImageIcon(getClass().getResource("/resources/jifi_icon.png")).getImage());
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent we) {
String ObjButtons[] = {"Fechar", "Cancelar"};
int PromptResult = JOptionPane.showOptionDialog(null, "Tem certeza que deseja fechar o programa?\nTodas as alterações não salvas serão perdidas.", "JIFI", JOptionPane.NO_OPTION, JOptionPane.WARNING_MESSAGE, null, ObjButtons, ObjButtons[1]);
if (PromptResult == JOptionPane.YES_OPTION) {
System.exit(0);
}
}
});
//simplificando....
addNewCodePanel.setVisible(false);
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
{
//adicionando um novo fluxograma
FlowchartPanel fp = new FlowchartPanel(new Function(), mainInterpreter);
mainProject.getFunctions().add(fp.getFunction());
mapFC.add(fp);
add(fp, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
}
}
});
}
@Deprecated
public final void addDebugMenu() {
menuDev.add(newItem("Print lib dir", new ActionListener() {
public void actionPerformed(ActionEvent e) {
String str = "natives/" + JniNamer.os() + "/" + JniNamer.arch();
JOptionPane.showMessageDialog(null, str, "Print lib dir", JOptionPane.INFORMATION_MESSAGE);
}
}));
}
@Deprecated
public final JMenuItem newItem(String name, ActionListener action) {
JMenuItem item = new JMenuItem();
item.setText(name);
item.addActionListener(action);
return item;
}
public SimulationPanel getSimulationPanel() {
return simulationPanel;
}
public void updateRobotList() {
//combobox
robotComboBox.removeAllItems();
ArrayList<Robot> simualtionRobotList = simulationPanel.getRobots();
for (RobotControlPanel panel : robotManager) {
robotComboBox.addItem(panel);
//simulation
if (!simualtionRobotList.contains(panel.getRobot())) {
simulationPanel.addRobot(panel.getRobot());
panel.getRobot().setEnvironment(simulationPanel.getEnv());
}
}
}
public boolean setDefaultRobot(Interpreter interpreter, boolean ask) {
Object o = robotComboBox.getSelectedItem();
if (o instanceof RobotControlPanel) {
RobotControlPanel rcp = (RobotControlPanel) o;
Robot r = rcp.getRobot();
Connection c = r.getMainConnection();
if (c == null || !c.isConnected()) {
if (ask) {
if (rcp.getConnectionComboBox().getItemCount() >= 2 && VIRTUAL_CONNECTION.equals(rcp.getConnectionComboBox().getSelectedItem())) {
int returnVal = JOptionPane.showConfirmDialog(this, "O Robô selecionado ainda não está conectado, \nquer que eu crie uma conexão virtual para você?", "Executar", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (returnVal == JOptionPane.NO_OPTION) {
return false;
}
}
}
rcp.setConnection(0);
boolean connected = rcp.tryConnect();
if (connected) {
interpreter.setRobot(r);
}
return connected;
} else {
//FAZER DIREITO
interpreter.setRobot(r);
}
} else if (o == null) {
int returnVal = JOptionPane.showConfirmDialog(this, "Nenhum robô está selecionado, quer que eu crie um?", "Executar", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (returnVal == JOptionPane.YES_OPTION) {
robotManager.createRobot();
setDefaultRobot(interpreter, false);
}
}
return true;
}
public static GUI getInstance() {
if (INSTANCE == null) {
INSTANCE = new GUI();
}
return INSTANCE;
}
public Collection<Function> getFunctions() {
ArrayList<Function> funcs = new ArrayList<>();
for (Component cc : mainTabbedPane.getComponents()) {
if (cc instanceof FlowchartPanel) {
funcs.add(((FlowchartPanel) cc).getFunction());
}
}
return funcs;
}
public void updateTabNames() {
for (int i = 0; i < mainTabbedPane.getTabCount(); i++) {
Component c = mainTabbedPane.getComponentAt(i);
if (c instanceof FlowchartPanel) {
Function f = ((FlowchartPanel) c).getFunction();
mainTabbedPane.setTitleAt(i, "Fluxograma");
}
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
dynamicToolBar = new javax.swing.JToolBar();
secondarySplitPane = new javax.swing.JSplitPane();
staticTabbedPane = new javax.swing.JTabbedPane();
toolBar = new javax.swing.JToolBar();
newFileButton = new javax.swing.JButton();
openButton = new javax.swing.JButton();
saveButton = new javax.swing.JButton();
jSeparator4 = new javax.swing.JToolBar.Separator();
clearSimulationButton = new javax.swing.JButton();
jSeparator2 = new javax.swing.JToolBar.Separator();
timestepTButton = new javax.swing.JToggleButton();
robotComboBox = new javax.swing.JComboBox();
runButton = new javax.swing.JButton();
jSpinner1 = new javax.swing.JSpinner();
stepButton = new javax.swing.JButton();
pauseButton = new javax.swing.JButton();
stopButton = new javax.swing.JButton();
jSeparator3 = new javax.swing.JToolBar.Separator();
switchCodeButton = new javax.swing.JButton();
jSeparator5 = new javax.swing.JToolBar.Separator();
deleteButton = new javax.swing.JButton();
jSeparator1 = new javax.swing.JToolBar.Separator();
splitViewButton = new javax.swing.JButton();
filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0));
keyboardShortcutsButton = new javax.swing.JButton();
jSeparator6 = new javax.swing.JToolBar.Separator();
keyboardShortcutsButton1 = new javax.swing.JButton();
primarySplitPane = new javax.swing.JSplitPane();
mainTabbedPane = new javax.swing.JTabbedPane();
simulationPanel = new robotinterface.gui.panels.SimulationPanel();
addNewCodePanel = new javax.swing.JPanel();
dynamicTabbedPane = new javax.swing.JTabbedPane();
consolePanel = new javax.swing.JPanel();
jScrollPane3 = new javax.swing.JScrollPane();
jToolBar1 = aushd();
helpCheckBox = new javax.swing.JCheckBox();
menuBar = new javax.swing.JMenuBar();
menuFile = new javax.swing.JMenu();
jMenuItem3 = new javax.swing.JMenuItem();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem2 = new javax.swing.JMenuItem();
jMenu1 = new javax.swing.JMenu();
jMenuItem4 = new javax.swing.JMenuItem();
jSeparator7 = new javax.swing.JPopupMenu.Separator();
jMenuItem5 = new javax.swing.JMenuItem();
menuDev = new javax.swing.JMenu();
dynamicToolBar.setFloatable(false);
dynamicToolBar.setRollover(true);
secondarySplitPane.setBorder(null);
secondarySplitPane.setDividerLocation(220);
secondarySplitPane.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
secondarySplitPane.setEnabled(false);
staticTabbedPane.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
staticTabbedPane.setEnabled(false);
secondarySplitPane.setLeftComponent(staticTabbedPane);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("JIFI - Java Interactive Flowchart Interpreter");
toolBar.setFloatable(false);
newFileButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/document-new.png"))); // NOI18N
newFileButton.setToolTipText("Novo Arquivo");
newFileButton.setBorder(null);
newFileButton.setFocusable(false);
newFileButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
newFileButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
newFileButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
newFileButtonMouseEntered(evt);
}
});
newFileButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
newFileButtonActionPerformed(evt);
}
});
toolBar.add(newFileButton);
openButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/document-open.png"))); // NOI18N
openButton.setToolTipText("Abrir");
openButton.setBorder(null);
openButton.setFocusable(false);
openButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
openButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
openButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
openButtonMouseEntered(evt);
}
});
openButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openButtonActionPerformed(evt);
}
});
toolBar.add(openButton);
saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/devices/media-floppy.png"))); // NOI18N
saveButton.setToolTipText("Salvar");
saveButton.setBorder(null);
saveButton.setFocusable(false);
saveButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
saveButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
saveButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
saveButtonMouseEntered(evt);
}
});
saveButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
saveButtonActionPerformed(evt);
}
});
toolBar.add(saveButton);
toolBar.add(jSeparator4);
clearSimulationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/edit-clear.png"))); // NOI18N
clearSimulationButton.setToolTipText("Limpar Simulação");
clearSimulationButton.setBorder(null);
clearSimulationButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
clearSimulationButton.setFocusable(false);
clearSimulationButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
clearSimulationButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
clearSimulationButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
clearSimulationButtonMouseEntered(evt);
}
});
clearSimulationButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearSimulationButtonActionPerformed(evt);
}
});
toolBar.add(clearSimulationButton);
toolBar.add(jSeparator2);
timestepTButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/appointment-new.png"))); // NOI18N
timestepTButton.setToolTipText("Diminuir Tempo");
timestepTButton.setFocusable(false);
timestepTButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
timestepTButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
timestepTButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
timestepTButtonMouseEntered(evt);
}
});
timestepTButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
timestepTButtonActionPerformed(evt);
}
});
toolBar.add(timestepTButton);
robotComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
robotComboBox.setMaximumSize(new java.awt.Dimension(32767, 28));
robotComboBox.setPreferredSize(new java.awt.Dimension(100, 28));
toolBar.add(robotComboBox);
runButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/media-playback-start.png"))); // NOI18N
runButton.setToolTipText("Executar");
runButton.setBorder(null);
runButton.setFocusable(false);
runButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
runButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
runButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
runButtonMouseEntered(evt);
}
});
runButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
runButtonActionPerformed(evt);
}
});
toolBar.add(runButton);
jSpinner1.setMaximumSize(new java.awt.Dimension(32767, 28));
jSpinner1.setPreferredSize(new java.awt.Dimension(70, 28));
toolBar.add(jSpinner1);
stepButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/step.png"))); // NOI18N
stepButton.setToolTipText("Passo-a-passo");
stepButton.setBorder(null);
stepButton.setFocusable(false);
stepButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
stepButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
stepButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
stepButtonActionPerformed(evt);
}
});
toolBar.add(stepButton);
pauseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/media-playback-pause.png"))); // NOI18N
pauseButton.setToolTipText("Pausar");
pauseButton.setBorder(null);
pauseButton.setFocusable(false);
pauseButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
pauseButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
pauseButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
pauseButtonMouseEntered(evt);
}
});
pauseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
pauseButtonActionPerformed(evt);
}
});
toolBar.add(pauseButton);
stopButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/media-playback-stop.png"))); // NOI18N
stopButton.setToolTipText("Parar");
stopButton.setBorder(null);
stopButton.setFocusable(false);
stopButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
stopButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
stopButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
stopButtonMouseEntered(evt);
}
});
stopButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
stopButtonActionPerformed(evt);
}
});
toolBar.add(stopButton);
toolBar.add(jSeparator3);
switchCodeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/mimetypes/text-x-generic.png"))); // NOI18N
switchCodeButton.setToolTipText("Converter");
switchCodeButton.setBorder(null);
switchCodeButton.setFocusable(false);
switchCodeButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
switchCodeButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
switchCodeButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
switchCodeButtonMouseEntered(evt);
}
});
switchCodeButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
switchCodeButtonActionPerformed(evt);
}
});
toolBar.add(switchCodeButton);
toolBar.add(jSeparator5);
deleteButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/tab-remove.png"))); // NOI18N
deleteButton.setToolTipText("Fechar Aba");
deleteButton.setBorder(null);
deleteButton.setFocusable(false);
deleteButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
deleteButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
deleteButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
deleteButtonMouseEntered(evt);
}
});
deleteButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
deleteButtonActionPerformed(evt);
}
});
toolBar.add(deleteButton);
toolBar.add(jSeparator1);
splitViewButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/actions/window-split-vertical.png"))); // NOI18N
splitViewButton.setToolTipText("Visão Lado a Lado");
splitViewButton.setBorder(null);
splitViewButton.setFocusable(false);
splitViewButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
splitViewButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
splitViewButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
splitViewButtonMouseEntered(evt);
}
});
splitViewButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
splitViewButtonActionPerformed(evt);
}
});
toolBar.add(splitViewButton);
splitViewButton.getAccessibleContext().setAccessibleDescription("Dividir Janela");
toolBar.add(filler1);
keyboardShortcutsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/apps/preferences-desktop-keyboard-shortcuts.png"))); // NOI18N
keyboardShortcutsButton.setToolTipText("Atalhos do Programa");
keyboardShortcutsButton.setBorder(null);
keyboardShortcutsButton.setFocusable(false);
keyboardShortcutsButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
keyboardShortcutsButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
keyboardShortcutsButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
keyboardShortcutsButtonMouseEntered(evt);
}
});
keyboardShortcutsButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
keyboardShortcutsButtonActionPerformed(evt);
}
});
toolBar.add(keyboardShortcutsButton);
toolBar.add(jSeparator6);
keyboardShortcutsButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/resources/tango/32x32/apps/help-browser.png"))); // NOI18N
keyboardShortcutsButton1.setToolTipText("Sobre o JIFI");
keyboardShortcutsButton1.setBorder(null);
keyboardShortcutsButton1.setFocusable(false);
keyboardShortcutsButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
keyboardShortcutsButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
keyboardShortcutsButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
keyboardShortcutsButton1MouseEntered(evt);
}
});
keyboardShortcutsButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
keyboardShortcutsButton1ActionPerformed(evt);
}
});
toolBar.add(keyboardShortcutsButton1);
primarySplitPane.setBorder(null);
primarySplitPane.setDividerLocation(200);
primarySplitPane.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
primarySplitPane.setDoubleBuffered(true);
mainTabbedPane.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT);
mainTabbedPane.addChangeListener(new javax.swing.event.ChangeListener() {
public void stateChanged(javax.swing.event.ChangeEvent evt) {
mainTabbedPaneStateChanged(evt);
}
});
mainTabbedPane.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
mainTabbedPaneMouseMoved(evt);
}
});
mainTabbedPane.addTab("Simulação", new javax.swing.ImageIcon(getClass().getResource("/resources/tango/16x16/devices/input-gaming.png")), simulationPanel); // NOI18N
javax.swing.GroupLayout addNewCodePanelLayout = new javax.swing.GroupLayout(addNewCodePanel);
addNewCodePanel.setLayout(addNewCodePanelLayout);
addNewCodePanelLayout.setHorizontalGroup(
addNewCodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 726, Short.MAX_VALUE)
);
addNewCodePanelLayout.setVerticalGroup(
addNewCodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 591, Short.MAX_VALUE)
);
mainTabbedPane.addTab("", new javax.swing.ImageIcon(getClass().getResource("/resources/tango/16x16/actions/list-add.png")), addNewCodePanel); // NOI18N
primarySplitPane.setRightComponent(mainTabbedPane);
mainTabbedPane.getAccessibleContext().setAccessibleName("");
mainTabbedPane.getAccessibleContext().setAccessibleDescription("");
dynamicTabbedPane.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
public void mouseMoved(java.awt.event.MouseEvent evt) {
dynamicTabbedPaneMouseMoved(evt);
}
});
javax.swing.GroupLayout consolePanelLayout = new javax.swing.GroupLayout(consolePanel);
consolePanel.setLayout(consolePanelLayout);
consolePanelLayout.setHorizontalGroup(
consolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
consolePanelLayout.setVerticalGroup(
consolePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 0, Short.MAX_VALUE)
);
dynamicTabbedPane.addTab("Terminal", consolePanel);
dynamicTabbedPane.addTab("Conexões", jScrollPane3);
primarySplitPane.setLeftComponent(dynamicTabbedPane);
jToolBar1.setFloatable(false);
jToolBar1.setRollover(true);
helpCheckBox.setSelected(true);
helpCheckBox.setToolTipText("Selecione para dicas");
helpCheckBox.setFocusable(false);
helpCheckBox.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
helpCheckBox.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
helpCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
helpCheckBoxActionPerformed(evt);
}
});
jToolBar1.add(helpCheckBox);
menuFile.setText("Arquivo");
jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem3.setText("Carregar");
jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem3ActionPerformed(evt);
}
});
menuFile.add(jMenuItem3);
jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem1.setText("Salvar");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
menuFile.add(jMenuItem1);
jMenuItem2.setText("Sair");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
menuFile.add(jMenuItem2);
menuBar.add(menuFile);
jMenu1.setText("Ajuda");
jMenuItem4.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.CTRL_MASK));
jMenuItem4.setText("Atalhos do Programa");
jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem4ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem4);
jMenu1.add(jSeparator7);
jMenuItem5.setText("Sobre");
jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem5ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem5);
menuBar.add(jMenu1);
menuDev.setText(" ");
menuBar.add(menuDev);
menuDev.getAccessibleContext().setAccessibleName(".");
setJMenuBar(menuBar);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(primarySplitPane)
.addComponent(toolBar, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(toolBar, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(primarySplitPane, javax.swing.GroupLayout.DEFAULT_SIZE, 618, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
public void setSimulationMode() {
mainTabbedPane.setSelectedComponent(simulationPanel);
System.out.println("set");
}
// Interpreter interpreter = null;
private void mainTabbedPaneStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_mainTabbedPaneStateChanged
if (!allowMainTabbedPaneStateChanged) {
return;
}
System.gc();
Component cmp = mainTabbedPane.getSelectedComponent();
//dynamicTabbedPane.removeAll();
if (cmp == simulationPanel || (cmp instanceof JSplitPane)) {
simulationPanel.play();
} else {
simulationPanel.pause();
}
dynamicToolBar.removeAll();
// for (Component cc : dynamicTabbedPane.getComponents()) {
// if (cc != consolePanel) {//jPanel5
// dynamicTabbedPane.remove(cc);
// }
// }
if (cmp == addNewCodePanel) {
//adicionando uma nova aba
FlowchartPanel fp = new FlowchartPanel(new Function(), mainInterpreter);
mainProject.getFunctions().add(fp.getFunction());
mapFC.add(fp);
add(fp, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
return;
} else {
if (cmp instanceof TabController) {
for (JPanel p : ((TabController) cmp).getTabs()) {
dynamicTabbedPane.addTab(p.getName(), p);
}
for (JComponent jc : ((TabController) cmp).getToolBarComponents()) {
dynamicToolBar.add(jc);
}
}
}
if (cmp instanceof Interpertable) {
interpreter = ((Interpertable) cmp).getInterpreter();
} else if (cmp == simulationPanel) {
for (Component c : mainTabbedPane.getComponents()) {
if (c instanceof Interpertable) {
Interpreter i = ((Interpertable) c).getInterpreter();
if (i.getInterpreterState() == Interpreter.PLAY) {
interpreter = i;
break;
}
}
}
}
updateControlBar(interpreter);
if (cmp instanceof FlowchartPanel || cmp instanceof EditorPanel) {
switchCodeButton.setEnabled(true);
deleteButton.setEnabled(true);
splitViewButton.setEnabled(true);
} else {
switchCodeButton.setEnabled(false);
deleteButton.setEnabled(false);
if (!(cmp instanceof JSplitPane)) {
splitViewButton.setEnabled(false);
} else {
splitViewButton.setEnabled(true);
}
}
if (cmp instanceof KeyListener) {
boolean n = true;
for (KeyListener l : getKeyListeners()) {
if (l.equals(cmp)) {
n = false;
}
// removeKeyListener(l);
}
// System.out.println("addKeyListener:" + cmp);
if (n) {
addKeyListener((KeyListener) cmp);
}
}
if (cmp instanceof ComponentListener) {
for (ComponentListener l : mainTabbedPane.getComponentListeners()) {
mainTabbedPane.removeComponentListener(l);
}
mainTabbedPane.addComponentListener((ComponentListener) cmp);
((ComponentListener) cmp).componentResized(new ComponentEvent(mainTabbedPane, ComponentEvent.COMPONENT_RESIZED));
}
if (cmp instanceof FlowchartPanel) {
switchCodeButton.setIcon(codeIcon);
} else if (cmp instanceof EditorPanel) {
switchCodeButton.setIcon(flowchartIcon);
interpreter = null;
updateControlBar(null);
}
updateTabNames();
dynamicToolBar.updateUI();
if (LOG) {
saveSatateAndCompare();
}
}//GEN-LAST:event_mainTabbedPaneStateChanged
private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runButtonActionPerformed
if (interpreter != null) {
if (setDefaultRobot(interpreter, true)) {
interpreter.setInterpreterState(Interpreter.PLAY);
if (console != null) {
console.setText("");
}
} else {
interpreter.setInterpreterState(Interpreter.STOP);
}
}
updateControlBar(interpreter);
}//GEN-LAST:event_runButtonActionPerformed
private void stepButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stepButtonActionPerformed
if (interpreter != null) {
interpreter.setInterpreterState(Interpreter.WAITING);
if (setDefaultRobot(interpreter, true)) {
while (true) {
interpreter.step();
if (interpreter.getCurrentCommand() != null && interpreter.getCurrentCommand().getDrawableResource() != null) {
break;
}
}
}
}
updateControlBar(interpreter);
}//GEN-LAST:event_stepButtonActionPerformed
private void pauseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pauseButtonActionPerformed
if (interpreter != null) {
interpreter.setInterpreterState(Interpreter.WAITING);
}
updateControlBar(interpreter);
}//GEN-LAST:event_pauseButtonActionPerformed
private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stopButtonActionPerformed
if (interpreter != null) {
interpreter.setInterpreterState(Interpreter.STOP);
}
updateControlBar(interpreter);
}//GEN-LAST:event_stopButtonActionPerformed
private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
returnVal = JOptionPane.showConfirmDialog(this, "O projeto atual será fechado, deseja prosseguir?", "Abrir", JOptionPane.YES_NO_OPTION);
if (returnVal != JOptionPane.YES_OPTION) {
return;
}
newFileButtonActionPerformed(null);
simulationPanel.resetSimulation();
File file = fileChooser.getSelectedFile();
mainProject.importFile(file.getAbsolutePath());
} else {
return;
}
loadLoop:
for (Function f : mainProject.getFunctions()) {
for (Component c : mainTabbedPane.getComponents()) {
if (c instanceof FlowchartPanel) {
if (((FlowchartPanel) c).getFunction() == f) {
continue loadLoop;
}
} else if (c instanceof EditorPanel) {
int i = mapCE.indexOf(c);
if (i != -1 && i < mapFC.size()) {
if (mapFC.get(i).getFunction() == f) {
continue loadLoop;
}
}
}
}
FlowchartPanel fcp = new FlowchartPanel(f, mainInterpreter);
add(fcp, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
mapFC.add(fcp);
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
}
}//GEN-LAST:event_openButtonActionPerformed
private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed
int returnVal = fileChooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
String filename = file.toString();
if (!filename.endsWith("." + Project.FILE_EXTENSION)) {
filename += "." + Project.FILE_EXTENSION;
}
file = new File(filename);
if (file.exists()) {
returnVal = JOptionPane.showConfirmDialog(this, "Deseja sobreescrever o arquivo?", "Salvar", JOptionPane.YES_NO_OPTION);
if (returnVal != JOptionPane.YES_OPTION) {
return;
}
}
ArrayList<Function> functions = mainProject.getFunctions();
boolean showNameRepeatDialog = true;
int k;
for (int i = 0; i < functions.size() - 1; i++) {
k = 2;
for (int j = i + 1; j < functions.size(); j++) {
if (functions.get(i).getName().equals(functions.get(j).getName())) {
if (showNameRepeatDialog) {
returnVal = JOptionPane.showConfirmDialog(this, "Existem funções com o mesmo nome,\n"
+ "deseja renomea-las automaticamente?", "Salvar", JOptionPane.YES_NO_OPTION);
if (returnVal != JOptionPane.YES_OPTION) {
return;
}
showNameRepeatDialog = false;
}
functions.get(j).setName(functions.get(j).getName() + k);
k++;
}
}
}
mainProject.save(file.getAbsolutePath());
}
}//GEN-LAST:event_saveButtonActionPerformed
private void switchCodeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_switchCodeButtonActionPerformed
Component cmp = mainTabbedPane.getSelectedComponent();
if (cmp instanceof FlowchartPanel) {
FlowchartPanel fcp = (FlowchartPanel) cmp;
EditorPanel cep;
int i = mapFC.indexOf(cmp);
if (i != -1 && i < mapCE.size()) {
cep = mapCE.get(i);
} else {
cep = new EditorPanel(fcp.getFunction());
mapCE.add(cep);
}
long t = System.currentTimeMillis();
cep.getTextArea().setText(Parser.encode(fcp.getFunction()));
long t2 = System.currentTimeMillis();
// System.out.println("conversão: " + ((t2 - t) / 1000.0) + "ms");
cep.getTextArea().setCaretPosition(0);
add(cep, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);// - 2
mainTabbedPane.remove(fcp);
fcp.getInterpreter().setInterpreterState(Interpreter.STOP);
// switchCodeButton.setIcon(codeIcon);
} else if (cmp instanceof EditorPanel) {
EditorPanel cep = (EditorPanel) cmp;
//int returnVal = JOptionPane.showConfirmDialog(this, "Durante a conversão erros podem ocorrer, deseja prosseguir?", "Converter Código", JOptionPane.YES_NO_OPTION);
if (true /*returnVal == JOptionPane.YES_OPTION*/) {
FlowchartPanel fcp;
Function f = null;
int i = mapCE.indexOf(cmp);
int errorOnLine = -1;
int errorColumn = 0;
String errorDesc = "";
try {
long t = System.currentTimeMillis();
f = Parser.decode(cep.getTextArea().getText());
long t2 = System.currentTimeMillis();
// System.out.println("conversão: " + ((t2 - t) / 1000.0) + "ms");
} catch (ParseException ex) {
errorOnLine = ex.currentToken.next.endLine;
errorColumn = ex.currentToken.next.beginColumn;
if (ex.tokenImage.length == 1) {
errorDesc = ex.tokenImage[0];
} else {
errorDesc = "Error de sintaxe";
}
} catch (TokenMgrError ex) {
String msg = ex.getMessage();
msg = msg.substring(0, msg.indexOf(','));
msg = msg.substring(msg.lastIndexOf(" ") + 1);
try {
errorOnLine = Integer.parseInt(msg);
} catch (Exception ex1) {
errorOnLine = -2;
}
msg = ex.getMessage();
msg = msg.substring(0, msg.indexOf("."));
msg = msg.substring(msg.lastIndexOf(' ') + 1);
errorColumn = Integer.parseInt(msg);
errorDesc = "Erro lexico";
} catch (Throwable e) {
errorDesc = e.getMessage();
errorOnLine = -2;
e.printStackTrace();
}
switch (errorOnLine) {
case -1:
break;
case -2:
System.err.println("Erro desconhecido: " + errorDesc);
return;
default:
System.err.println(errorDesc + " na linha " + errorOnLine + ".");
try {
RSyntaxTextArea textArea = cep.getTextArea();
// textArea.removeAllLineHighlights();
// textArea.addLineHighlight(errorOnLine - 1, Color.red.brighter().brighter());
RSyntaxTextAreaHighlighter highlighter = (RSyntaxTextAreaHighlighter) textArea.getHighlighter();
SquiggleUnderlineHighlightPainter parserErrorHighlightPainter = new SquiggleUnderlineHighlightPainter(Color.RED);
// System.out.println(errorColumn);
int p0 = textArea.getLineStartOffset(errorOnLine - 1);
// System.out.println(p0);
int p1 = textArea.getLineEndOffset(errorOnLine - 1);
String line = textArea.getText(p0, p1 - p0);
// System.out.println("'" + line + "'");
for (char c : line.toCharArray()) {
if (c == ' ' || c == '\t') {
p0++;
} else {
break;
}
}
//todo tirar tabs e espaços
highlighter.removeAllHighlights();
highlighter.addHighlight(p0, p1, parserErrorHighlightPainter);
} catch (BadLocationException ex) {
}
return;
}
if (i != -1 && i < mapFC.size()) {
fcp = mapFC.get(i);
mainProject.getFunctions().remove(fcp.getFunction());
fcp.setFunction(f);
} else {
fcp = new FlowchartPanel(f, mainInterpreter);
mapFC.add(fcp);
}
mainProject.getFunctions().add(f);
add(fcp, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
mainTabbedPane.remove(cep);
// switchCodeButton.setIcon(flowchartIcon);
fcp.getInterpreter().setInterpreterState(Interpreter.STOP);
}
}
mainTabbedPaneStateChanged(null);
}//GEN-LAST:event_switchCodeButtonActionPerformed
private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButtonActionPerformed
Component cmp = mainTabbedPane.getSelectedComponent();
if (!(cmp instanceof FlowchartPanel) && !(cmp instanceof EditorPanel)) {
return;
}
int returnVal = JOptionPane.showConfirmDialog(this, "Deseja excluir esse programa?", "Excluir", JOptionPane.YES_NO_OPTION);
if (returnVal == JOptionPane.YES_OPTION) {
Function f = null;
if (cmp instanceof FlowchartPanel) {
f = ((FlowchartPanel) cmp).getFunction();
} else if (cmp instanceof EditorPanel) {
int i = mapCE.indexOf(cmp);
if (i != -1 && i < mapFC.size()) {
f = mapFC.get(i).getFunction();
}
}
if (f != null && mainProject.getFunctions().remove(f)) {
mainTabbedPane.setSelectedIndex(0);
mainTabbedPane.remove(cmp);
} else {
System.out.println("fail ><");
}
}
}//GEN-LAST:event_deleteButtonActionPerformed
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
saveButtonActionPerformed(null);
}//GEN-LAST:event_jMenuItem1ActionPerformed
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
System.exit(0);
}//GEN-LAST:event_jMenuItem2ActionPerformed
private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed
openButtonActionPerformed(null);
}//GEN-LAST:event_jMenuItem3ActionPerformed
private void clearSimulationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearSimulationButtonActionPerformed
int returnVal = JOptionPane.showConfirmDialog(this, "Deseja limpar a simulação?", "Limpar", JOptionPane.YES_NO_OPTION);
if (returnVal == JOptionPane.YES_OPTION) {
simulationPanel.resetSimulation();
simulationPanel.repaint();
}
}//GEN-LAST:event_clearSimulationButtonActionPerformed
private static <T> void compare(List<T> a, List<T> b, Logger lg) {
Level level = Level.OFF;
lg.log(level, "\t{0}:", new Object[]{a.get(0)});
boolean change = false;
for (T t : a) {
if (!b.contains(t)) {
lg.log(level, "\t\t{0} [{1}] *removido*", new Object[]{t.getClass().getSimpleName(), t.hashCode()});
change = true;
}
}
for (T t : b) {
if (!a.contains(t)) {
lg.log(level, "\t\t{0} [{1}] *adicionado*", new Object[]{t.getClass().getSimpleName(), t.hashCode()});
change = true;
}
}
if (!change) {
lg.log(level, "\t\t*sem alterações*");
}
}
private static HashMap<Component, ArrayList<ArrayList<Object>>> STATE = new HashMap<>();
private static void saveComponentStateAndCompare(Component c, Logger lg) {
Level level = Level.OFF;
lg.log(level, ">> {0} [{1}]", new Object[]{c.getClass().getSimpleName(), c.hashCode()});
ArrayList<ArrayList<Object>> componentState = new ArrayList<>();
ArrayList<Object> listeners;
Class listenerTypes[] = new Class[]{
MouseListener.class,
KeyListener.class,
MouseWheelListener.class,
MouseWheelListener.class,
ActionListener.class,
ComponentListener.class,
MouseMotionListener.class
};
for (Class type : listenerTypes) {
listeners = new ArrayList<>();
listeners.add(type.getSimpleName());
listeners.addAll(Arrays.asList(c.getListeners(type)));
componentState.add(listeners);
}
//compare
if (STATE.containsKey(c)) {
ArrayList<ArrayList<Object>> componentOldState = STATE.get(c);
for (int i = 0; i < componentOldState.size(); i++) {
compare(componentOldState.get(i), componentState.get(i), lg);
}
STATE.remove(c);
} else {
lg.log(level, "\t\t{0} [{1}] *novo componente swing*", new Object[]{c.getClass().getSimpleName(), c.hashCode()});
}
STATE.put(c, componentState);
}
private void saveSatateAndCompare() {
Date date = new Date();
getLogger().log(Level.OFF, "< Inicio {0} >", date);
saveComponentStateAndCompare(this, logger);
saveComponentStateAndCompare(mainTabbedPane, logger);
for (Component c : mainTabbedPane.getComponents()) {
saveComponentStateAndCompare(c, logger);
}
logger.log(Level.OFF, "< Fim {0} >\n", date);
}
private boolean askLog = true;
private void newFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newFileButtonActionPerformed
if (splitView) {
splitViewButtonActionPerformed(null);
}
int returnVal = JOptionPane.YES_OPTION;
if (evt != null) {
returnVal = JOptionPane.showConfirmDialog(this, "Deseja fechar esse projeto e resetar a simulação?", "Fechar", JOptionPane.YES_NO_OPTION);
}
if (returnVal == JOptionPane.YES_OPTION) {
for (FlowchartPanel fp : mapFC) {
Interpreter i = ((FlowchartPanel) fp).getInterpreter();
if (i != null) {
i.setInterpreterState(Interpreter.STOP);
}
}
simulationPanel.resetSimulation();
simulationPanel.repaint();
mainTabbedPane.setSelectedIndex(0);
mainProject.getFunctions().clear();
for (Component cmp : mainTabbedPane.getComponents()) {
if ((cmp instanceof FlowchartPanel) || (cmp instanceof EditorPanel)) {
mainTabbedPane.remove(cmp);
}
}
mapFC.clear();
mapCE.clear();
if (evt != null) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
{
//adicionando um novo fluxograma
FlowchartPanel fp = new FlowchartPanel(new Function(), mainInterpreter);
mainProject.getFunctions().add(fp.getFunction());
mapFC.add(fp);
add(fp, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
}
}
});
}
}
}//GEN-LAST:event_newFileButtonActionPerformed
private void splitViewButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_splitViewButtonActionPerformed
Component cmp = mainTabbedPane.getSelectedComponent();
if (!splitView && cmp instanceof FlowchartPanel) {
final FlowchartPanel fcp = (FlowchartPanel) cmp;
mainTabbedPane.remove(addNewCodePanel);
mainTabbedPane.remove(fcp);
mainTabbedPane.remove(simulationPanel);
simulationSplitPanel.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
simulationSplitPanel.setBottomComponent(fcp);
simulationSplitPanel.setTopComponent(simulationPanel);
simulationSplitPanel.setOneTouchExpandable(false);
Dimension minimumSize = new Dimension(100, 50);
fcp.setMinimumSize(minimumSize);
simulationPanel.setMinimumSize(minimumSize);
interpreter = ((Interpertable) cmp).getInterpreter();
updateControlBar(interpreter);
fcp.hideSidePanel(true);
simulationPanel.hideSidePanel(true);
simulationSplitPanel.setDividerLocation(mainTabbedPane.getWidth() / 2);
PropertyChangeListener propertyChangeListener = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent pce) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
fcp.createBuffers();
simulationPanel.createBuffers();
fcp.resetGlobalPosition();
simulationPanel.resetGlobalPosition();
}
});
}
};
simulationSplitPanel.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, propertyChangeListener);
//mainTabbedPane.add(simulationSplitPanel, new ImageIcon(getClass().getResource("/resources/tango/16x16/apps/preferences-system-windows.png")));
mainTabbedPane.addTab("Simulação + Fluxograma", new ImageIcon(getClass().getResource("/resources/tango/16x16/apps/preferences-system-windows.png")), simulationSplitPanel);
// mainTabbedPane.addTab(addNewCodePanel.getName(), new ImageIcon(getClass().getResource("/resources/tango/16x16/actions/list-add.png")), addNewCodePanel);
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
simulationSplitPanel.setDividerLocation(simulationSplitPanel.getDividerLocation() + 1);
}
});
splitView = true;
splitViewButton.setIcon(unsplitIcon);
splitViewButton.setToolTipText("Visão em Abas");
} else if (splitView) {
mainTabbedPane.remove(addNewCodePanel);
mainTabbedPane.remove(simulationSplitPanel);
mainTabbedPane.addTab("Simulação", new javax.swing.ImageIcon(getClass().getResource("/resources/tango/16x16/devices/input-gaming.png")), simulationPanel);
Component bottomComponent = simulationSplitPanel.getBottomComponent();
simulationPanel.hideSidePanel(false);
if (bottomComponent instanceof FlowchartPanel) {
((FlowchartPanel) bottomComponent).hideSidePanel(false);
}
mainTabbedPane.add(bottomComponent, new ImageIcon(getClass().getResource("/resources/tango/16x16/categories/applications-other.png")));
// mainTabbedPane.addTab(addNewCodePanel.getName(), new ImageIcon(getClass().getResource("/resources/tango/16x16/actions/list-add.png")), addNewCodePanel);
mainTabbedPane.setSelectedIndex(mainTabbedPane.getTabCount() - 1);//-2
splitView = false;
if (evt != null && cmp != simulationSplitPanel && simulationSplitPanel.getBottomComponent() != cmp) {
mainTabbedPane.setSelectedComponent(cmp);
splitViewButtonActionPerformed(null);
}
splitViewButton.setIcon(splitIcon);
splitViewButton.setToolTipText("Visão Lado a Lado");
}
}//GEN-LAST:event_splitViewButtonActionPerformed
private void timestepTButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_timestepTButtonActionPerformed
}//GEN-LAST:event_timestepTButtonActionPerformed
private void keyboardShortcutsButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keyboardShortcutsButtonActionPerformed
if (shortcutsWindow == null) {
shortcutsWindow = new ShortcutsWindow();
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
shortcutsWindow.setVisible(true);
}
});
}//GEN-LAST:event_keyboardShortcutsButtonActionPerformed
private void newFileButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_newFileButtonMouseEntered
printHelp("Fecha o projeto atual, limpa a simulação e cria um programa vazio");
}//GEN-LAST:event_newFileButtonMouseEntered
private void openButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openButtonMouseEntered
printHelp("Abre um projeto salvo");
}//GEN-LAST:event_openButtonMouseEntered
private void saveButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_saveButtonMouseEntered
printHelp("Salva o projeto atual (Ambiente e Código)");
}//GEN-LAST:event_saveButtonMouseEntered
private void clearSimulationButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clearSimulationButtonMouseEntered
printHelp("Remove todas as linhas colocadas na simulação (esta operação não pode ser desfeita)");
}//GEN-LAST:event_clearSimulationButtonMouseEntered
private void timestepTButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_timestepTButtonMouseEntered
printHelp("Coloca uma espera a cada comando executado, permitindo visualizar a execução do programa lentamente");
}//GEN-LAST:event_timestepTButtonMouseEntered
private void runButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_runButtonMouseEntered
printHelp("Executa o programa criado");
}//GEN-LAST:event_runButtonMouseEntered
private void pauseButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_pauseButtonMouseEntered
printHelp("Pausa a execução do programa");
}//GEN-LAST:event_pauseButtonMouseEntered
private void stopButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_stopButtonMouseEntered
printHelp("Interrompe a execução do programa e retorna para o primeiro comando");
}//GEN-LAST:event_stopButtonMouseEntered
private void switchCodeButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_switchCodeButtonMouseEntered
printHelp("Transforma o fluxograma em código fonte e vice-versa");
}//GEN-LAST:event_switchCodeButtonMouseEntered
private void deleteButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_deleteButtonMouseEntered
printHelp("????");
}//GEN-LAST:event_deleteButtonMouseEntered
private void splitViewButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_splitViewButtonMouseEntered
printHelp("Permite visualizar a simulação e o programa lado a lado, clique outra vez para separa-los");
}//GEN-LAST:event_splitViewButtonMouseEntered
private void keyboardShortcutsButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_keyboardShortcutsButtonMouseEntered
printHelp("Exibe uma lista dos principais atalhos do programa");
}//GEN-LAST:event_keyboardShortcutsButtonMouseEntered
private void dynamicTabbedPaneMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_dynamicTabbedPaneMouseMoved
JTabbedPane tp = (JTabbedPane) evt.getSource();
int idx = tp.indexAtLocation(evt.getX(), evt.getY());
if (idx != lastIdx) {
lastIdx = idx;
if (idx == 0) {
printHelp("O Terminal permite visualizar as mensagens enviadas pelo robô (comando 'Exibir')");
} else if (idx == 1) {
printHelp("A aba Conexões permite se comunicar com o robô real e acompanhar os pacotes enviados, perdidos e recebidos");
}
}
}//GEN-LAST:event_dynamicTabbedPaneMouseMoved
private void helpCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpCheckBoxActionPerformed
helpTip = "";
helpPanel.repaint();
}//GEN-LAST:event_helpCheckBoxActionPerformed
private void mainTabbedPaneMouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_mainTabbedPaneMouseMoved
JTabbedPane tp = (JTabbedPane) evt.getSource();
int idx = tp.indexAtLocation(evt.getX(), evt.getY());
if (idx != lastIdx) {
lastIdx = idx;
if (idx == 0) {
printHelp("Área de simulação, permite visualizar o robô se movendo e interagindo com obstáculos conforme o programado");
} else if (idx == 1) {
printHelp("O editor de código permite definir o comportamento do robô em sua interação com o ambiente");
}
}
}//GEN-LAST:event_mainTabbedPaneMouseMoved
private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed
keyboardShortcutsButtonActionPerformed(null);
}//GEN-LAST:event_jMenuItem4ActionPerformed
private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem5ActionPerformed
if (aboutWindow == null) {
aboutWindow = new AboutWindow();
}
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
aboutWindow.setVisible(true);
}
});
}//GEN-LAST:event_jMenuItem5ActionPerformed
private void keyboardShortcutsButton1MouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_keyboardShortcutsButton1MouseEntered
printHelp("Exibe informações sobre o progama e o projeto");
}//GEN-LAST:event_keyboardShortcutsButton1MouseEntered
private void keyboardShortcutsButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_keyboardShortcutsButton1ActionPerformed
jMenuItem5ActionPerformed(null);
}//GEN-LAST:event_keyboardShortcutsButton1ActionPerformed
public void printHelp(String str) {
if (helpCheckBox.isSelected()) {
helpTip = str;
helpPanel.repaint();
}
}
public void add(JComponent panel, ImageIcon icon) {
mainTabbedPane.remove(addNewCodePanel);
mainTabbedPane.addTab(panel.getName(), icon, panel);
if (panel instanceof ComponentListener) {
mainTabbedPane.addComponentListener((ComponentListener) panel);
}
// mainTabbedPane.addTab(addNewCodePanel.getName(), new ImageIcon(getClass().getResource("/resources/tango/16x16/actions/list-add.png")), addNewCodePanel);
}
public void updateControlBar(Interpreter interpreter) {
if (interpreter == null) {
runButton.setEnabled(false);
jSpinner1.setEnabled(false);
stepButton.setEnabled(false);
pauseButton.setEnabled(false);
stopButton.setEnabled(false);
return;
}
if (interpreter.getInterpreterState() == Interpreter.PLAY) {
//play
runButton.setEnabled(false);
stepButton.setEnabled(false);
pauseButton.setEnabled(true);
stopButton.setEnabled(true);
} else {
Command currentCommand = interpreter.getCurrentCommand();
Function function = interpreter.getMainFunction();
if (currentCommand != function) {
//pause
runButton.setEnabled(true);
stepButton.setEnabled(true);
pauseButton.setEnabled(false);
stopButton.setEnabled(true);
} else {
//stop
runButton.setEnabled(true);
stepButton.setEnabled(true);
pauseButton.setEnabled(false);
stopButton.setEnabled(false);
}
}
jSpinner1.setEnabled(true);
}
public static Logger getLogger() {
Formatter myFormatter = new Formatter() {
@Override
public String format(final LogRecord r) {
StringBuilder sb = new StringBuilder();
sb.append(formatMessage(r)).append(System.getProperty("line.separator"));
if (null != r.getThrown()) {
sb.append("Throwable occurred: "); //$NON-NLS-1$
Throwable t = r.getThrown();
PrintWriter pw = null;
try {
StringWriter sw = new StringWriter();
pw = new PrintWriter(sw);
t.printStackTrace(pw);
sb.append(sw.toString());
} finally {
if (pw != null) {
try {
pw.close();
} catch (Exception e) {
// ignore
}
}
}
}
return sb.toString();
}
};
if (logger == null) {
logger = Logger.getLogger(GUI.class
.getName());
FileHandler fh;
try {
// This block configure the logger with handler and formatter
Date date = new Date();
fh = new FileHandler("log" + date + ".txt");
fh.setFormatter(myFormatter);
logger.addHandler(fh);
logger.setUseParentHandlers(false);
// the following statement is used to log any messages
// logger.info("My first log");
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return logger;
}
/**
* Sets the java library path to the specified path
*
* @param path the new library path
* @throws Exception
*/
public static void setLibraryPath(String path) throws Exception {
System.setProperty("java.library.path", path);
//set sys_paths to null
final Field sysPathsField = ClassLoader.class
.getDeclaredField("sys_paths");
sysPathsField.setAccessible(
true);
sysPathsField.set(
null, null);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
final SplashScreen splashScreen = new SplashScreen("/resources/jifi5.png");
splashScreen.splash();
String path = GUI.class
.getProtectionDomain().getCodeSource().getLocation().getPath();
path = path.substring(0, path.lastIndexOf('/') + 1);
path += "natives/" + JniNamer.os() + "/" + JniNamer.arch();
String defaultPath = System.getProperty("java.library.path");
System.out.println("Carregando algo do tipo: \"" + JniNamer.getJniName("librxtxSerial") + "\"");
try {
String newPath = path;
/*
*
* Make sure the library is on the java lib path
* Make sure you're using System.loadLibrary() correctly.
* If your library is called "libSample.so",
* the call should be System.loadLibrary("Sample").
* Consider that there may be an issue with the library under OpenJDK,
* and that's the Java VM you're using.
* Run the command java -version and if part of the response is
* something like OpenJDK Runtime Environment (build 1.6.0_0-b11),
* try installing the official Sun JDK and see if that works.
*/
setLibraryPath(newPath);
System.loadLibrary("rxtxSerial");
System.out.println("Biblioteca librxtxSerial." + JniNamer.extension(JniNamer.os()) + " carregada com sucesso em " + path);
} catch (Error | Exception e) {
// e.printStackTrace();
System.out.println("Falha ao caregar librxtxSerial." + JniNamer.extension(JniNamer.os()) + " em " + path);
try {
setLibraryPath(defaultPath);
System.loadLibrary("rxtxSerial");
System.out.println("Biblioteca librxtxSerial." + JniNamer.extension(JniNamer.os()) + " carregada com sucesso em " + defaultPath);
} catch (Error | Exception e2) {
e.printStackTrace();
System.out.println("Falha ao caregar librxtxSerial." + JniNamer.extension(JniNamer.os()) + " em " + defaultPath);
e2.printStackTrace();
}
}
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
String systemLookAndFeelClassName = UIManager.getSystemLookAndFeelClassName();
if (!systemLookAndFeelClassName.equals(UIManager.getCrossPlatformLookAndFeelClassName())) {
UIManager.setLookAndFeel(systemLookAndFeelClassName);
} else {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
}
} catch (Throwable e) {
e.printStackTrace();
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
GUI RobofIDE = GUI.getInstance();
RobofIDE.setVisible(true);
splashScreen.dispose();
}
}
);
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel addNewCodePanel;
private javax.swing.JButton clearSimulationButton;
private javax.swing.JPanel consolePanel;
private javax.swing.JButton deleteButton;
private javax.swing.JTabbedPane dynamicTabbedPane;
private javax.swing.JToolBar dynamicToolBar;
private javax.swing.Box.Filler filler1;
private javax.swing.JCheckBox helpCheckBox;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JMenuItem jMenuItem4;
private javax.swing.JMenuItem jMenuItem5;
private javax.swing.JScrollPane jScrollPane3;
private javax.swing.JToolBar.Separator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar.Separator jSeparator3;
private javax.swing.JToolBar.Separator jSeparator4;
private javax.swing.JToolBar.Separator jSeparator5;
private javax.swing.JToolBar.Separator jSeparator6;
private javax.swing.JPopupMenu.Separator jSeparator7;
private javax.swing.JSpinner jSpinner1;
private javax.swing.JToolBar jToolBar1;
private javax.swing.JButton keyboardShortcutsButton;
private javax.swing.JButton keyboardShortcutsButton1;
private javax.swing.JTabbedPane mainTabbedPane;
private javax.swing.JMenuBar menuBar;
private javax.swing.JMenu menuDev;
private javax.swing.JMenu menuFile;
private javax.swing.JButton newFileButton;
private javax.swing.JButton openButton;
private javax.swing.JButton pauseButton;
private javax.swing.JSplitPane primarySplitPane;
private javax.swing.JComboBox robotComboBox;
private javax.swing.JButton runButton;
private javax.swing.JButton saveButton;
private javax.swing.JSplitPane secondarySplitPane;
private robotinterface.gui.panels.SimulationPanel simulationPanel;
private javax.swing.JButton splitViewButton;
private javax.swing.JTabbedPane staticTabbedPane;
private javax.swing.JButton stepButton;
private javax.swing.JButton stopButton;
private javax.swing.JButton switchCodeButton;
private javax.swing.JToggleButton timestepTButton;
private javax.swing.JToolBar toolBar;
// End of variables declaration//GEN-END:variables
public Interpreter getInterpreter() {
return interpreter;
}
@Override
public void componentResized(final ComponentEvent e) {
if (splitView) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//simulationSplitPanel.setDividerLocation(simulationSplitPanel.getDividerLocation() + 1);
simulationSplitPanel.setDividerLocation(mainTabbedPane.getWidth() / 2);
int width = e.getComponent().getWidth() - 50;
helpPanel.setPreferredSize(new Dimension(width, 25));
helpPanel.repaint();
}
});
}
}
@Override
public void componentMoved(ComponentEvent e) {
}
@Override
public void componentShown(ComponentEvent e) {
}
@Override
public void componentHidden(ComponentEvent e) {
}
}