/* * Copyright (C) 2015 Vinu K.N * * 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 org.domainmath.gui; import org.domainmath.gui.Util.ScriptFileView; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Cursor; import java.awt.Desktop; import java.awt.Dimension; import java.awt.Image; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.print.PrinterException; import java.io.*; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.text.DateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.StringTokenizer; import java.util.logging.Level; import java.util.logging.Logger; import java.util.prefs.Preferences; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.text.BadLocationException; import javax.swing.text.Caret; import javax.swing.text.Document; import javax.swing.text.Element; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import net.iharder.dnd.FileDrop; import net.infonode.docking.DockingWindow; import net.infonode.docking.DockingWindowAdapter; import net.infonode.docking.FloatingWindow; import net.infonode.docking.OperationAbortedException; import net.infonode.docking.RootWindow; import net.infonode.docking.SplitWindow; import net.infonode.docking.TabWindow; import net.infonode.docking.View; import net.infonode.docking.ViewSerializer; import net.infonode.docking.WindowBar; import net.infonode.docking.mouse.DockingWindowActionMouseButtonListener; import net.infonode.docking.properties.RootWindowProperties; import net.infonode.docking.theme.DockingWindowsTheme; import net.infonode.docking.theme.ShapedGradientDockingTheme; import net.infonode.docking.util.DockingUtil; import net.infonode.docking.util.MixedViewHandler; import net.infonode.docking.util.PropertiesUtil; import net.infonode.docking.util.ViewMap; import net.infonode.util.Direction; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.domainmath.gui.Util.DMILogger; import org.domainmath.gui.Util.DomainMathFileFilter; import org.domainmath.gui.about.AboutDlg; import org.domainmath.gui.arrayeditor.ArrayEditorPanel; import org.domainmath.gui.debugger.Breakpoint; import org.domainmath.gui.debugger.DbstackPanel; import org.domainmath.gui.dialog.find_replace.FindAndReplaceDialog; import org.domainmath.gui.editor.AutoCompleteListCellRenderer; import org.domainmath.gui.editor.OctaveM; import org.domainmath.gui.etc.ModuleLoader; import org.domainmath.gui.help.QuickHelpPanel; import org.domainmath.gui.octave.OctavePanel; import org.domainmath.gui.packages.PackageLoader; import org.domainmath.gui.pathsview.PathsPanel; import org.domainmath.gui.pkgview.PkgDocFrame; import org.domainmath.gui.pkgview.PkgViewPanel; import org.domainmath.gui.preferences.PreferencesDlg; import org.domainmath.gui.tools.ToolsLoader; import org.domainmath.gui.dialog.FileMiss; import org.domainmath.gui.dialog.Msg; import org.domainmath.gui.dialog.ShutDown; import org.domainmath.gui.octave.ExternalEngine; import org.domainmath.gui.workspace.WorkspacePanel; import org.fife.ui.autocomplete.AutoCompletion; import org.fife.ui.autocomplete.BasicCompletion; import org.fife.ui.autocomplete.CompletionProvider; import org.fife.ui.autocomplete.DefaultCompletionProvider; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit; import org.fife.ui.rsyntaxtextarea.SyntaxConstants; import org.fife.ui.rtextarea.Gutter; import org.fife.ui.rtextarea.GutterIconInfo; import org.fife.ui.rtextarea.RTextAreaEditorKit; import org.fife.ui.rtextarea.RTextScrollPane; /** * It creates DomainMath IDE * @author Vinu K.N */ public final class MainFrame extends javax.swing.JFrame { /** * Core of DomainMath IDE. * @see OctavePanel */ public static OctavePanel octavePanel; private static final long serialVersionUID = -1960567602980065979L; /** * Object of commandArea for special purpose * @see OctavePanel * @see RSyntaxTextArea */ private final RSyntaxTextArea commandArea; /** * Object of PreferencesDlg. */ public PreferencesDlg preferencesDlg; /** * Octave Installation path. * @see PreferencesDlg */ public static String octavePath; /** * Startup commands like graphics_toolkit gnuplot,pkg load java,.... * Each commands are separated by ; * @see PreferencesDlg */ private final String startupCmd; /** * Startup commands like --interactive --no-history,.... * see octave --help for more info about command line options * @see PreferencesDlg */ private final String cmdLineOptions; /** * Creates a folder called cache to store details of path,packages etc. */ private final File cache; /** * Parent root. */ public static String parent_root; /** * History of commands. * @see RSyntaxTextArea */ public static RSyntaxTextArea histArea; /** * ScrollPane of histArea. * @see histArea * @see RTextScrollPane */ private final RTextScrollPane histScrollPane; /** * Workspace Panel. */ public static WorkspacePanel workspace; /** * Log Root. */ public static String log_root; /** * Text Area in a FileTab. */ public RSyntaxTextArea areaFileTab; /** * ScrollPane of areaFileTab. */ public RTextScrollPane scroll1; CompletionProvider provider1 = createCompletionProvider(); /** * Selected file to Open in a file tab. */ private String selectedFileToOpen; /** * Script Editor. */ public JTabbedPane fileTab = new JTabbedPane(); public static JTabbedPane fileTab2 = new JTabbedPane(); /** * Folder or Parent of last selected file in file tab. */ private String currentDirFileTab; /** * Names of selected files including full path. */ public static List fileNameList =Collections.synchronizedList(new ArrayList()); /** * Create a folder called log. */ private final File logDir; /** * Index of files in the file tabbed pane. */ public static int FILE_TAB_INDEX; /** * Gutter of FileTab. */ private Gutter gutterFileTab; /** * URL of image. */ private URL urlDebugImageStop; /** * Maximum number of recent files list. */ private static int MAX_NUM_RECENT_FILES=10; /** * Recent menu's order. */ private static int RECENT_MENU_ORDER=2; /** * Start up or default directory. */ private final String startupDir; /** * Status bar. */ public static StatusPanel statusPanel; /** * Menu contain recently opened files list. */ private final RecentFileMenu recentFileMenu; private final PathsPanel pathPanel; private final PkgViewPanel pkgViewPanel; /** * Views of different panels. */ private View fileTabView; private View pathsView; private View pkgView; private View consoleView; private View arrayEditorView; private View workspaceView; private View filesView; private View historyView; private RootWindow rootWindow; private ViewMap viewMap = new ViewMap(); private HashMap dynamicViews = new HashMap(); private DockingWindowsTheme currentTheme = new ShapedGradientDockingTheme(); private RootWindowProperties properties = new RootWindowProperties(); final RootWindowProperties titleBarStyleProperties = PropertiesUtil.createTitleBarStyleRootWindowProperties(); TabWindow toolsTabWindow = new TabWindow(); TabWindow workspaceAndFilesTabWindow = new TabWindow(); private final File layout_file; private byte[] layouts = new byte[1]; private final boolean wantedToClearText; public FileTreePanel fileTreePanel; private final File worksDir; private final String dir; public JScrollPane consoleScrollPane; private final DbstackPanel dbstackPanel; private final View debuggerView; private final View quickHelpView; private final QuickHelpPanel quickHelpPanel; private final ArrayList<GutterIconInfo> debugMarksList; private final ArrayList<GutterIconInfo> breakPointMarksList; public static ArrayList<Breakpoint> breakPointList; private Thread thread; /** * Creates new form MainFrame. * @param args */ public MainFrame(String args[]) { // create folders called cache and log. cache = new File(System.getProperty("user.dir")+File.separator+"cache"); logDir = new File(System.getProperty("user.dir")+File.separator+"log"); worksDir = new File(System.getProperty("user.dir")+File.separator+"works"); cache.mkdir(); logDir.mkdir(); if(!worksDir.exists()){ worksDir.mkdir(); } parent_root=cache.getAbsolutePath()+File.separator; log_root=logDir.getAbsolutePath()+File.separator; preferencesDlg = new PreferencesDlg(this,true); layout_file = new File(System.getProperty("user.dir")+File.separator+"layout.ini"); initComponents(); new PackageLoader(this); new ToolsLoader(this); makeMenu(); setIconImage(icon); Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); setSize(pr2.getInt("Frame_width", 800),pr2.getInt("Frame_height", 600)); setLocationRelativeTo(null); FILE_TAB_INDEX =0; //create octavepanel. octavePanel = new OctavePanel(this); commandArea = octavePanel.commandArea; octavePath =preferencesDlg.getPath(); startupCmd =preferencesDlg.getStartupCmd(); wantedToClearText=preferencesDlg.wantedToClearText(); cmdLineOptions = preferencesDlg.getCmdLineOptions(); // set up histroy widget. histArea = new RSyntaxTextArea(); histArea.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_OCTAVE); histScrollPane =new RTextScrollPane(histArea); histScrollPane.setWheelScrollingEnabled(true); workspace =new WorkspacePanel(parent_root+"DomainMath_OctaveVariables.dat",this); dbstackPanel = new DbstackPanel(parent_root+"DomainMath_OctaveDbStack.dat",this); // create recent files menu. recentFileMenu=new RecentFileMenu("RecentFiles",MAX_NUM_RECENT_FILES){ @Override public void onSelectFile(String filePath,ActionEvent action_event){ onRecentFile(filePath,action_event); } }; this.fileMenu.add(recentFileMenu,MainFrame.RECENT_MENU_ORDER); statusPanel = new StatusPanel(); fileTab.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); fileTreePanel = new FileTreePanel(this); quickHelpPanel = new QuickHelpPanel(); pathPanel = new PathsPanel(parent_root+"DomainMath_OctavePaths.dat"); pkgViewPanel = new PkgViewPanel(parent_root+"DomainMath_OctavePackages.dat",this); histPanel(); this.popupTab(); dir=pr2.get("DomainMath_StartUpDir", System.getProperty("user.dir")); if(dir.equals(worksDir.getAbsolutePath())){ startupDir=dir; }else{ startupDir=worksDir.getAbsolutePath(); } currentDirFileTab = null; fileTabView=new View("Code Editor", null, fileTab); pathsView=new View("Set Paths", null, pathPanel); pkgView = new View("Packages", null, pkgViewPanel); consoleScrollPane = new JScrollPane(); consoleScrollPane.getVerticalScrollBar().setUnitIncrement(16); consoleScrollPane.setViewportView(octavePanel); consoleView = new View("Console", null, consoleScrollPane); arrayEditorView = new View("Array Editor", null, new ArrayEditorPanel()); workspaceView=new View("Workspace", null, workspace); debuggerView=new View("Debugger", null, this.dbstackPanel); filesView=new View("Files", null, fileTreePanel); quickHelpView=new View("Quick Help", null, quickHelpPanel); createRootWindow(); setDefaultLayout(); add(rootWindow, BorderLayout.CENTER); add(statusPanel,BorderLayout.PAGE_END); dragNDrop(); debugMarksList = new ArrayList<>(); breakPointMarksList = new ArrayList<>(); breakPointList = new ArrayList<>(); fileTab2 = fileTab; if(args !=null){ openStartUpFiles(args); } } public JMenu getPackageMenu() { return this.pkgMenu; } public JMenu getToolsMenu() { return this.toolsMenu; } public boolean isWantedToClearText() { return wantedToClearText; } public void initTabComponent(int i) { fileTab.setTabComponentAt(FILE_TAB_INDEX, new ButtonTabComponent(this)); } /** * Returns folder or Parent of last selected file in file tab. * @return currentDirFileTab */ public String getCurrentDirFileTab() { return currentDirFileTab; } private void onRecentFile(String fileName,ActionEvent action_event) { File file1=new File(fileName); if(file1.exists()) { if(!MainFrame.fileNameList.contains(file1.getAbsolutePath())) { open(file1, MainFrame.FILE_TAB_INDEX); setCurrentDirFileTab(file1.getParent()); }else { System.out.println(file1.getAbsolutePath()+" already open!"); } }else{ new FileMiss(this,file1.getName()+" does not exist."); JMenuItem item = (JMenuItem) action_event.getSource(); recentFileMenu.remove(item); } } /** * Set folder or Parent of last selected file in file tab. * @param currentDir */ public void setCurrentDirFileTab(String currentDir) { this.currentDirFileTab = currentDir; } public static void reloadWorkspace() { if(WorkspacePanel.automaticRefreshCheckBoxMenuItem.isSelected()) { MainFrame.octavePanel.evaluate("DomainMath_OctaveVariables('"+MainFrame.parent_root+"DomainMath_OctaveVariables.dat',whos);"); workspace.reload(); } } public void dirty() { areaFileTab.getDocument().addDocumentListener(new DocumentListener(){ @Override public void insertUpdate(DocumentEvent e) { } @Override public void removeUpdate(DocumentEvent e) { } @Override public void changedUpdate(DocumentEvent e) { if(fileTab.getTabRunCount() > 0) { String n = fileTab.getTitleAt(fileTab.getSelectedIndex()); if(!n.endsWith("*")) { fileTab.setTitleAt(fileTab.getSelectedIndex(), n+"*"); } } } }); } /** * Set TextArea with octave syntax style. */ public void setUpArea() { areaFileTab =new RSyntaxTextArea(); areaFileTab.setFont(this.preferencesDlg.getScriptFont()); areaFileTab.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_OCTAVE); scroll1 = new RTextScrollPane(areaFileTab); gutterFileTab = scroll1.getGutter(); gutterFileTab.setVisible(true); gutterFileTab.setBookmarkingEnabled(true); urlDebugImageStop = getClass().getResource("resources/stop.png"); gutterFileTab.setBookmarkIcon(new ImageIcon(urlDebugImageStop)); gutterFileTab.setFoldIndicatorEnabled(true); needOct(true); scroll1.setWheelScrollingEnabled(true); KeyStroke key = KeyStroke.getKeyStroke( KeyEvent.VK_ENTER, ActionEvent.CTRL_MASK); areaFileTab.getInputMap().put(key, new CtrlEnterAction()); } /** * Save current layout. */ public void saveLayout(){ try{ ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); rootWindow.write(out, false); out.close(); layouts = bos.toByteArray(); FileOutputStream output = new FileOutputStream(this.layout_file); IOUtils.write(layouts, output); }catch(IOException e) { } } /** * Load last saved layout. */ public void loadLayout() { if (layouts != null) { try { layouts=org.apache.commons.io.FileUtils.readFileToByteArray(this.layout_file); ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(layouts)); rootWindow.read(in, true); in.close(); } catch (IOException e1) { } } } /** * Save script as another name. */ public void saveScriptAs() { JFileChooser fc = new JFileChooser(); fc.setMultiSelectionEnabled(false); fc.setDialogTitle("Save As"); int returnVal = fc.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { String oldfile = fileTab.getToolTipTextAt(fileTab.getSelectedIndex()); save(fc.getSelectedFile(),fileTab.getSelectedIndex()); this.removeFileNameFromList(oldfile); fileTab.setToolTipTextAt(fileTab.getSelectedIndex(), fc.getSelectedFile().getAbsolutePath()); this.addFileNameToList(fc.getSelectedFile().getAbsolutePath()); } } public void addFileNameToList(String name) { fileNameList.add(name); } private void clearAllBreakPoints() { if(fileTab.getSelectedIndex() >= 0) { save(); String file_selected = fileTab.getTitleAt(fileTab.getSelectedIndex()); if(file_selected.endsWith(".m")) { String ftn_name=file_selected.substring(0,file_selected.indexOf(".m")); octavePanel.evalWithOutput( "dbclear ('"+ftn_name+"',dbstatus('"+ftn_name+"').line)"); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); t.getGutter().removeAllTrackingIcons(); }else{ System.out.println(""); } } } private void openStartUpFiles(String[] args) { for(int i=0;i<args.length;i++) { if(!fileNameList.contains(args[i])) { open(new File(args[i]),i); this.setCurrentDirFileTab(args[i]); }else { System.out.println(args[i]+" already open!"); } } } /** * It creates key board action,when you press Ctrl+Enter key it evaluate current line * or selected lines. * @see AbstractAction */ class CtrlEnterAction extends AbstractAction{ private static final long serialVersionUID = -8513963670607572717L; @Override public void actionPerformed(ActionEvent e) { if(fileTab.getSelectedIndex() >= 0) { try { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea area = (RSyntaxTextArea)t.getTextArea(); // if user not selected text. if(area.getSelectedText() == null) { int line =area.getCaretLineNumber(); Document doc = area.getDocument(); Element root = doc.getDefaultRootElement(); int lineCount = root.getElementCount(); Element elem = root.getElement(line); int start = elem.getStartOffset(); int end = line == lineCount - 1 ? elem.getEndOffset() - 1 : elem.getEndOffset(); String text = doc.getText(start, end - start); // check current line is not comment. if(!text.startsWith("#") && !text.startsWith("%")) { octavePanel.evalWithOutput(text); } }else{ //user seected text. String text=area.getSelectedText(); // check current line is not comment. if(!text.startsWith("#") && !text.startsWith("%")) { octavePanel.evalWithOutput(text); } } } catch (BadLocationException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } } } } public void removeFileNameFromList(int index) { fileNameList.remove(index); } public void removeFileNameFromList(String name) { fileNameList.remove(name); } public void open(File file ,int file_index) { selectedFileToOpen= file.getName(); if(selectedFileToOpen.endsWith(".m") || selectedFileToOpen.endsWith(".dyn") || selectedFileToOpen.endsWith(".mod") || selectedFileToOpen.endsWith(".pl")) { try { BufferedReader r = new BufferedReader(new FileReader(file)); try { setUpArea(); selectedFileToOpen= file.getName(); if(selectedFileToOpen.endsWith(".m")) { areaFileTab.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_OCTAVE); needOct(true); }else{ areaFileTab.setSyntaxEditingStyle(SyntaxConstants.SYNTAX_STYLE_NONE); } areaFileTab.read(r, null); r.close(); fileTab.addTab(file.getName(), scroll1); initTabComponent(FILE_TAB_INDEX); fileTab.setToolTipTextAt(FILE_TAB_INDEX, file.getAbsolutePath()); fileTab.setSelectedIndex(FILE_TAB_INDEX); this.addFileNameToList(file.getAbsolutePath()); FILE_TAB_INDEX++; dirty(); openInFlotingWindow(this.fileTabView); } catch (IOException ex) { } } catch (FileNotFoundException ex) { } } } public void openInFlotingWindow(View view) { if(!view.isShowing()) { FloatingWindow fw = rootWindow.createFloatingWindow(new Point(50, 50), new Dimension(600, 400), view); fw.getTopLevelAncestor().setVisible(true); } } /** * Creates file chooser dialog box and allows the user to select files * and importData selected files in fileTab. */ public void open(){ JFileChooser fc = new JFileChooser(); // set current directory. if(fileTab.getTabCount() >0) { File f = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); fc.setCurrentDirectory(f.getParentFile()); }else{ fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); } FileNameExtensionFilter filter = new FileNameExtensionFilter("M-Files (*.m)", "m"); fc.setAcceptAllFileFilterUsed(false); fc.setFileFilter(filter); fc.setMultiSelectionEnabled(true); fc.setFileView(new ScriptFileView()); File file1[]; int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { file1 = fc.getSelectedFiles(); this.setCurrentDirFileTab(fc.getCurrentDirectory().getAbsolutePath()); for(int i=0;i<file1.length;i++) { if(!fileNameList.contains(file1[i].getAbsolutePath())) { open(file1[i],i); }else { System.out.println(file1[i].getAbsolutePath()+" already open!"); } } } } public static void requestToChangeDir(String dir) { octavePanel.evalWithOutput("chdir "+"'"+dir+"'"); } private void save() { if(fileTab.getSelectedIndex() >= 0) { String _file = fileTab.getToolTipTextAt(fileTab.getSelectedIndex()); String fl =fileTab.getTitleAt(fileTab.getSelectedIndex()); if(fl.endsWith("*")) { File f =new File(_file); save(f,fileTab.getSelectedIndex()); } } } private void undo() { if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.undoLastAction(); } } private void redo() { if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.redoLastAction(); } } private void cut() { if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.cut(); } } private void copy() { if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.copy(); } } private void paste() { if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.paste(); } } private void selectAll() { if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.selectAll(); } } private void histPanel(){ JPanel p = new JPanel(new BorderLayout()); JToolBar b = new JToolBar(""); b.setFloatable(false); b.setRollover(true); JButton saveButton = new JButton(); JButton runButton = new JButton(); saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/script_save.png"))); runButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/terminal.png"))); b.add(saveButton); b.add(runButton); p.add(b,BorderLayout.PAGE_START); p.add(this.histScrollPane,BorderLayout.CENTER); saveButton.addActionListener((ActionEvent e) -> { saveHistoryAs(); }); runButton.addActionListener((ActionEvent e) -> { runHistory(); }); historyView=new View("History", null, p); } public String getStartupCmd() { return startupCmd; } public String getOctavePath() { return octavePath; } public String getCmdLineOptions() { return cmdLineOptions; } public void runHistory(){ String path=System.getProperty("user.dir")+File.separator+"scripts"+File.separator; saveHistory(new File(path+"history.m")); ExternalEngine externalEngine = new ExternalEngine(this.octavePath+" --interactive"); externalEngine.setTitle(octavePath); externalEngine.setLocationRelativeTo(this); externalEngine.setVisible(true); externalEngine.execute("run('"+path+"history.m"+"')\n"); } public void browse(){ JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setMultiSelectionEnabled(false); File _file; int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { _file = fc.getSelectedFile(); setDir(_file.getAbsolutePath()); } } /** 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() { buttonGroup1 = new javax.swing.ButtonGroup(); jToolBar1 = new javax.swing.JToolBar(); jButton1 = new javax.swing.JButton(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jSeparator4 = new javax.swing.JToolBar.Separator(); connectButton = new javax.swing.JButton(); disconnectButton = new javax.swing.JButton(); jSeparator9 = new javax.swing.JToolBar.Separator(); jButton4 = new javax.swing.JButton(); jButton5 = new javax.swing.JButton(); jSeparator15 = new javax.swing.JToolBar.Separator(); jButton6 = new javax.swing.JButton(); jButton7 = new javax.swing.JButton(); jButton8 = new javax.swing.JButton(); jSeparator13 = new javax.swing.JToolBar.Separator(); jPanel1 = new javax.swing.JPanel(); jLabel1 = new javax.swing.JLabel(); dirComboBox = new javax.swing.JComboBox(); folderUpButton = new javax.swing.JButton(); browseButton = new javax.swing.JButton(); addButton = new javax.swing.JButton(); jMenuBar1 = new javax.swing.JMenuBar(); fileMenu = new javax.swing.JMenu(); newFileItem = new javax.swing.JMenuItem(); openItem = new javax.swing.JMenuItem(); jSeparator17 = new javax.swing.JPopupMenu.Separator(); saveFileItem = new javax.swing.JMenuItem(); saveAsItem = new javax.swing.JMenuItem(); savePlotItem = new javax.swing.JMenuItem(); saveAllItem = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JPopupMenu.Separator(); printFileItem = new javax.swing.JMenuItem(); printItem = new javax.swing.JMenuItem(); jSeparator19 = new javax.swing.JPopupMenu.Separator(); preferencesItem = new javax.swing.JMenuItem(); jSeparator2 = new javax.swing.JPopupMenu.Separator(); connectItem = new javax.swing.JMenuItem(); disconnectItem = new javax.swing.JMenuItem(); jSeparator3 = new javax.swing.JPopupMenu.Separator(); exitItem = new javax.swing.JMenuItem(); editMenu = new javax.swing.JMenu(); undoItem = new javax.swing.JMenuItem(); redoItem = new javax.swing.JMenuItem(); jSeparator20 = new javax.swing.JPopupMenu.Separator(); cutItem = new javax.swing.JMenuItem(); copyItem = new javax.swing.JMenuItem(); pasteItem = new javax.swing.JMenuItem(); jSeparator21 = new javax.swing.JPopupMenu.Separator(); deleteItem = new javax.swing.JMenuItem(); selectAllItem = new javax.swing.JMenuItem(); jSeparator22 = new javax.swing.JPopupMenu.Separator(); jMenuItem2 = new javax.swing.JMenuItem(); jMenuItem3 = new javax.swing.JMenuItem(); jSeparator23 = new javax.swing.JPopupMenu.Separator(); jMenuItem4 = new javax.swing.JMenuItem(); jMenuItem5 = new javax.swing.JMenuItem(); jSeparator24 = new javax.swing.JPopupMenu.Separator(); jMenuItem6 = new javax.swing.JMenuItem(); jMenuItem1 = new javax.swing.JMenuItem(); jSeparator11 = new javax.swing.JPopupMenu.Separator(); clearOutWindowItem = new javax.swing.JMenuItem(); jMenu3 = new javax.swing.JMenu(); consoleItem = new javax.swing.JMenuItem(); historyItem = new javax.swing.JMenuItem(); filesItem = new javax.swing.JMenuItem(); workspaceItem = new javax.swing.JMenuItem(); codeEditorItem = new javax.swing.JMenuItem(); pathsItem = new javax.swing.JMenuItem(); pkgsItem = new javax.swing.JMenuItem(); arrayEditItem = new javax.swing.JMenuItem(); jMenuItem7 = new javax.swing.JMenuItem(); jMenu1 = new javax.swing.JMenu(); findItem = new javax.swing.JMenuItem(); replaceItem = new javax.swing.JMenuItem(); gotoItem = new javax.swing.JMenuItem(); jSeparator25 = new javax.swing.JPopupMenu.Separator(); googleItem = new javax.swing.JMenuItem(); wikiItem = new javax.swing.JMenuItem(); pkgMenu = new javax.swing.JMenu(); debugMenu = new javax.swing.JMenu(); runScriptItem = new javax.swing.JMenuItem(); runScriptCItem = new javax.swing.JMenuItem(); jMenuItem8 = new javax.swing.JMenuItem(); jSeparator8 = new javax.swing.JPopupMenu.Separator(); debugScriptMenuItem = new javax.swing.JMenuItem(); testScriptMenuItem = new javax.swing.JMenuItem(); toggleBreakpointItem = new javax.swing.JMenuItem(); removeToggleBreakpointItem = new javax.swing.JMenuItem(); clearAllBreakpointsItem = new javax.swing.JMenuItem(); jSeparator10 = new javax.swing.JPopupMenu.Separator(); stepItem = new javax.swing.JMenuItem(); stepInItem = new javax.swing.JMenuItem(); stepOutItem = new javax.swing.JMenuItem(); continueItem = new javax.swing.JMenuItem(); jSeparator5 = new javax.swing.JPopupMenu.Separator(); finishDebugItem = new javax.swing.JMenuItem(); toolsMenu = new javax.swing.JMenu(); fltkplotItem = new javax.swing.JMenuItem(); octaveCmdItem = new javax.swing.JMenuItem(); jMenu2 = new javax.swing.JMenu(); previousWindowItem = new javax.swing.JMenuItem(); nextWindowItem = new javax.swing.JMenuItem(); jSeparator29 = new javax.swing.JPopupMenu.Separator(); closeItem = new javax.swing.JMenuItem(); closeAllItem = new javax.swing.JMenuItem(); jSeparator18 = new javax.swing.JPopupMenu.Separator(); windowsItem = new javax.swing.JMenuItem(); helpMenu = new javax.swing.JMenu(); forumItem = new javax.swing.JMenuItem(); octaveInfoItem = new javax.swing.JMenuItem(); jSeparator12 = new javax.swing.JPopupMenu.Separator(); quickHelpItem = new javax.swing.JMenuItem(); jMenuItem9 = new javax.swing.JMenuItem(); docPkgItem = new javax.swing.JMenuItem(); referenceMenu = new javax.swing.JMenu(); referenceItem = new javax.swing.JMenuItem(); jSeparator6 = new javax.swing.JPopupMenu.Separator(); checkForUpdatesMenuItem = new javax.swing.JMenuItem(); onlineHelpItem = new javax.swing.JMenuItem(); faqItem = new javax.swing.JMenuItem(); jSeparator14 = new javax.swing.JPopupMenu.Separator(); reportBugItem = new javax.swing.JMenuItem(); feedBackItem = new javax.swing.JMenuItem(); jSeparator7 = new javax.swing.JPopupMenu.Separator(); AboutItem = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en"); // NOI18N setTitle(bundle.getString("DomainMath.title")); // NOI18N addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } public void windowOpened(java.awt.event.WindowEvent evt) { formWindowOpened(evt); } }); jToolBar1.setRollover(true); jToolBar1.setName("Standard"); // NOI18N jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/document-new.png"))); // NOI18N jButton1.setFocusable(false); jButton1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); jToolBar1.add(jButton1); jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/document-open.png"))); // NOI18N jButton2.setFocusable(false); jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton2.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jToolBar1.add(jButton2); jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/document-save-all.png"))); // NOI18N jButton3.setFocusable(false); jButton3.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton3.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jToolBar1.add(jButton3); jToolBar1.add(jSeparator4); connectButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/connect.png"))); // NOI18N connectButton.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("connectItem.mnemonic").charAt(0)); connectButton.setToolTipText(bundle.getString("connectItem.tooltip")); // NOI18N connectButton.setFocusable(false); connectButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); connectButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); connectButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { connectButtonActionPerformed(evt); } }); jToolBar1.add(connectButton); disconnectButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/disconnect.png"))); // NOI18N disconnectButton.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("disconnectItem.mnemonic").charAt(0)); disconnectButton.setToolTipText(bundle.getString("disconnectItem.tooltip")); // NOI18N disconnectButton.setFocusable(false); disconnectButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); disconnectButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); disconnectButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { disconnectButtonActionPerformed(evt); } }); jToolBar1.add(disconnectButton); jToolBar1.add(jSeparator9); jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/edit-undo.png"))); // NOI18N jButton4.setFocusable(false); jButton4.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton4.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton4.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton4ActionPerformed(evt); } }); jToolBar1.add(jButton4); jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/edit-redo.png"))); // NOI18N jButton5.setFocusable(false); jButton5.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton5.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton5ActionPerformed(evt); } }); jToolBar1.add(jButton5); jToolBar1.add(jSeparator15); jButton6.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/edit-cut.png"))); // NOI18N jButton6.setFocusable(false); jButton6.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton6.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton6ActionPerformed(evt); } }); jToolBar1.add(jButton6); jButton7.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/edit-copy.png"))); // NOI18N jButton7.setFocusable(false); jButton7.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton7.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton7ActionPerformed(evt); } }); jToolBar1.add(jButton7); jButton8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/edit-paste.png"))); // NOI18N jButton8.setFocusable(false); jButton8.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); jButton8.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); jButton8.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton8ActionPerformed(evt); } }); jToolBar1.add(jButton8); jToolBar1.add(jSeparator13); jLabel1.setText("Current Directory:"); dirComboBox.setEditable(true); dirComboBox.addItemListener(new java.awt.event.ItemListener() { public void itemStateChanged(java.awt.event.ItemEvent evt) { dirComboBoxItemStateChanged(evt); } }); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(1, 1, 1) .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dirComboBox, 0, 112, Short.MAX_VALUE) .addGap(1, 1, 1)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(5, 5, 5) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(dirComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(3, 3, 3)) ); jToolBar1.add(jPanel1); folderUpButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/go-up.png"))); // NOI18N folderUpButton.setToolTipText("Up"); folderUpButton.setFocusable(false); folderUpButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); folderUpButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); folderUpButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { folderUpButtonActionPerformed(evt); } }); jToolBar1.add(folderUpButton); browseButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/document-open.png"))); // NOI18N browseButton.setToolTipText(bundle.getString("browseButton.title")); // NOI18N browseButton.setFocusable(false); browseButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); browseButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); browseButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { browseButtonActionPerformed(evt); } }); jToolBar1.add(browseButton); addButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/size22x22/edit-add.png"))); // NOI18N addButton.setToolTipText(bundle.getString("addButton.title")); // NOI18N addButton.setFocusable(false); addButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); addButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); addButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addButtonActionPerformed(evt); } }); jToolBar1.add(addButton); getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START); fileMenu.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("fileMenu.mnemonic").charAt(0)); fileMenu.setText(bundle.getString("fileMenu.name")); // NOI18N newFileItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.InputEvent.CTRL_MASK)); newFileItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-new.png"))); // NOI18N newFileItem.setText("New"); newFileItem.setToolTipText(bundle.getString("newMenuItem.tooltip")); // NOI18N newFileItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { newFileItemActionPerformed(evt); } }); fileMenu.add(newFileItem); openItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK)); openItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-open.png"))); // NOI18N openItem.setText("Open..."); openItem.setToolTipText("Open File"); openItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openItemActionPerformed(evt); } }); fileMenu.add(openItem); fileMenu.add(jSeparator17); saveFileItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK)); saveFileItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-save.png"))); // NOI18N saveFileItem.setText("Save "); saveFileItem.setToolTipText(bundle.getString("saveMenuItem.tooltp")); // NOI18N saveFileItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveFileItemActionPerformed(evt); } }); fileMenu.add(saveFileItem); saveAsItem.setText("Save As..."); saveAsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveAsItemActionPerformed(evt); } }); fileMenu.add(saveAsItem); savePlotItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("savePlotItem.mnemonic").charAt(0)); savePlotItem.setText(bundle.getString("savePlotItem.name")); // NOI18N savePlotItem.setToolTipText(bundle.getString("savePlotItem.tooltip")); // NOI18N savePlotItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { savePlotItemActionPerformed(evt); } }); fileMenu.add(savePlotItem); saveAllItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); saveAllItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-save-all.png"))); // NOI18N saveAllItem.setText(bundle.getString("saveAllMenuItem.text")); // NOI18N saveAllItem.setToolTipText(bundle.getString("saveAllMenuItem.tooltip")); // NOI18N saveAllItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveAllItemActionPerformed(evt); } }); fileMenu.add(saveAllItem); fileMenu.add(jSeparator1); printFileItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK)); printFileItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-print2.png"))); // NOI18N printFileItem.setText("Print"); printFileItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { printFileItemActionPerformed(evt); } }); fileMenu.add(printFileItem); printItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); printItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("printItem.mnemonic").charAt(0)); printItem.setText(bundle.getString("printItem.name")); // NOI18N printItem.setToolTipText(bundle.getString("printItem.tooltip")); // NOI18N printItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { printItemActionPerformed(evt); } }); fileMenu.add(printItem); fileMenu.add(jSeparator19); preferencesItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/preferences.png"))); // NOI18N preferencesItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("preferecesItem.mnemonic").charAt(0)); preferencesItem.setText(bundle.getString("preferencesItem.name")); // NOI18N preferencesItem.setToolTipText(bundle.getString("preferencesItem.tooltip")); // NOI18N preferencesItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { preferencesItemActionPerformed(evt); } }); fileMenu.add(preferencesItem); fileMenu.add(jSeparator2); connectItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/connect.png"))); // NOI18N connectItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("connectItem.mnemonic").charAt(0)); connectItem.setText(bundle.getString("connectItem.name")); // NOI18N connectItem.setToolTipText(bundle.getString("connectItem.tooltip")); // NOI18N connectItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { connectItemActionPerformed(evt); } }); fileMenu.add(connectItem); disconnectItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/disconnect.png"))); // NOI18N disconnectItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("disconnectItem.mnemonic").charAt(0)); disconnectItem.setText(bundle.getString("disconnectItem.name")); // NOI18N disconnectItem.setToolTipText(bundle.getString("disconnectItem.tooltip")); // NOI18N disconnectItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { disconnectItemActionPerformed(evt); } }); fileMenu.add(disconnectItem); fileMenu.add(jSeparator3); exitItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("exitItem.mnemonic").charAt(0)); exitItem.setText(bundle.getString("exitItem.name")); // NOI18N exitItem.setToolTipText(bundle.getString("exitItem.tooltip")); // NOI18N exitItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exitItemActionPerformed(evt); } }); fileMenu.add(exitItem); jMenuBar1.add(fileMenu); editMenu.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("editMenu.mnemonic").charAt(0)); editMenu.setText("Edit"); undoItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Z, java.awt.event.InputEvent.CTRL_MASK)); undoItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-undo.png"))); // NOI18N undoItem.setText("Undo"); undoItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { undoItemActionPerformed(evt); } }); editMenu.add(undoItem); redoItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Y, java.awt.event.InputEvent.CTRL_MASK)); redoItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-redo.png"))); // NOI18N redoItem.setText("Redo"); redoItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { redoItemActionPerformed(evt); } }); editMenu.add(redoItem); editMenu.add(jSeparator20); cutItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK)); cutItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-cut.png"))); // NOI18N cutItem.setText("Cut"); cutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cutItemActionPerformed(evt); } }); editMenu.add(cutItem); copyItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK)); copyItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-copy.png"))); // NOI18N copyItem.setText("Copy"); copyItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copyItemActionPerformed(evt); } }); editMenu.add(copyItem); pasteItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK)); pasteItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-paste.png"))); // NOI18N pasteItem.setText("Paste"); pasteItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pasteItemActionPerformed(evt); } }); editMenu.add(pasteItem); editMenu.add(jSeparator21); deleteItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-delete.png"))); // NOI18N deleteItem.setText("Delete"); deleteItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { deleteItemActionPerformed(evt); } }); editMenu.add(deleteItem); selectAllItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK)); selectAllItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-select-all.png"))); // NOI18N selectAllItem.setText("Select All"); selectAllItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { selectAllItemActionPerformed(evt); } }); editMenu.add(selectAllItem); editMenu.add(jSeparator22); jMenuItem2.setAction(new RSyntaxTextAreaEditorKit.InsertTabAction()); jMenuItem2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_TAB, java.awt.event.InputEvent.CTRL_MASK)); jMenuItem2.setText("Increase Indent"); editMenu.add(jMenuItem2); jMenuItem3.setAction(new RSyntaxTextAreaEditorKit.DecreaseIndentAction()); jMenuItem3.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_TAB, java.awt.event.InputEvent.SHIFT_MASK)); jMenuItem3.setText("Decrease Indent"); editMenu.add(jMenuItem3); editMenu.add(jSeparator23); jMenuItem4.setAction(new RTextAreaEditorKit.UpperSelectionCaseAction()); jMenuItem4.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.CTRL_MASK)); jMenuItem4.setText("Make Uppercase"); editMenu.add(jMenuItem4); jMenuItem5.setAction(new RTextAreaEditorKit.LowerSelectionCaseAction()); jMenuItem5.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_U, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); jMenuItem5.setText("Make Lowercase"); editMenu.add(jMenuItem5); editMenu.add(jSeparator24); jMenuItem6.setText("Clear All Marks..."); jMenuItem6.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem6ActionPerformed(evt); } }); editMenu.add(jMenuItem6); jMenuItem1.setAction( new RSyntaxTextAreaEditorKit.ToggleCommentAction()); jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_SLASH, java.awt.event.InputEvent.CTRL_MASK)); jMenuItem1.setText("Toggle Comment"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); editMenu.add(jMenuItem1); editMenu.add(jSeparator11); clearOutWindowItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK)); clearOutWindowItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("clearOutputWindowItem.mnemonic").charAt(0)); clearOutWindowItem.setText(bundle.getString("clearOutputWindowItem.name")); // NOI18N clearOutWindowItem.setToolTipText(bundle.getString("clearOutputWindowItem.tooltip")); // NOI18N clearOutWindowItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clearOutWindowItemActionPerformed(evt); } }); editMenu.add(clearOutWindowItem); jMenuBar1.add(editMenu); jMenu3.setText(bundle.getString("viewMenu.title")); // NOI18N consoleItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_0, java.awt.event.InputEvent.CTRL_MASK)); consoleItem.setText(bundle.getString("consoleItem.title")); // NOI18N consoleItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { consoleItemActionPerformed(evt); } }); jMenu3.add(consoleItem); historyItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_1, java.awt.event.InputEvent.CTRL_MASK)); historyItem.setText(bundle.getString("historyItem.title")); // NOI18N historyItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { historyItemActionPerformed(evt); } }); jMenu3.add(historyItem); filesItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_2, java.awt.event.InputEvent.CTRL_MASK)); filesItem.setText(bundle.getString("filesItem.title")); // NOI18N filesItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { filesItemActionPerformed(evt); } }); jMenu3.add(filesItem); workspaceItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_3, java.awt.event.InputEvent.CTRL_MASK)); workspaceItem.setText(bundle.getString("worksaceItem.title")); // NOI18N workspaceItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { workspaceItemActionPerformed(evt); } }); jMenu3.add(workspaceItem); codeEditorItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_4, java.awt.event.InputEvent.CTRL_MASK)); codeEditorItem.setText(bundle.getString("codeEditorItem.title")); // NOI18N codeEditorItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { codeEditorItemActionPerformed(evt); } }); jMenu3.add(codeEditorItem); pathsItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_5, java.awt.event.InputEvent.CTRL_MASK)); pathsItem.setText(bundle.getString("setPathsItem.title")); // NOI18N pathsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pathsItemActionPerformed(evt); } }); jMenu3.add(pathsItem); pkgsItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_6, java.awt.event.InputEvent.CTRL_MASK)); pkgsItem.setText(bundle.getString("pkgsItem.title")); // NOI18N pkgsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pkgsItemActionPerformed(evt); } }); jMenu3.add(pkgsItem); arrayEditItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_7, java.awt.event.InputEvent.CTRL_MASK)); arrayEditItem.setText(bundle.getString("arrayEidtorItem.title")); // NOI18N arrayEditItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { arrayEditItemActionPerformed(evt); } }); jMenu3.add(arrayEditItem); jMenuItem7.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_8, java.awt.event.InputEvent.CTRL_MASK)); jMenuItem7.setText("Debugger Window"); jMenuItem7.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem7ActionPerformed(evt); } }); jMenu3.add(jMenuItem7); jMenuBar1.add(jMenu3); jMenu1.setMnemonic('S'); jMenu1.setText("Search"); findItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, java.awt.event.InputEvent.CTRL_MASK)); findItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-find.png"))); // NOI18N findItem.setMnemonic('F'); findItem.setText("Find..."); findItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { findItemActionPerformed(evt); } }); jMenu1.add(findItem); replaceItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_H, java.awt.event.InputEvent.CTRL_MASK)); replaceItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/edit-find-replace.png"))); // NOI18N replaceItem.setText("Replace..."); replaceItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { replaceItemActionPerformed(evt); } }); jMenu1.add(replaceItem); gotoItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); gotoItem.setText("Go To..."); gotoItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { gotoItemActionPerformed(evt); } }); jMenu1.add(gotoItem); jMenu1.add(jSeparator25); googleItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, java.awt.event.InputEvent.CTRL_MASK)); googleItem.setText("Google Search"); googleItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { googleItemActionPerformed(evt); } }); jMenu1.add(googleItem); wikiItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); wikiItem.setText("Wikipedia Search"); wikiItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { wikiItemActionPerformed(evt); } }); jMenu1.add(wikiItem); jMenuBar1.add(jMenu1); pkgMenu.setText(bundle.getString("pkgMenu.name")); // NOI18N jMenuBar1.add(pkgMenu); debugMenu.setText("Debug"); runScriptItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F6, 0)); runScriptItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/Run.png"))); // NOI18N runScriptItem.setText("Run Script"); runScriptItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { runScriptItemActionPerformed(evt); } }); debugMenu.add(runScriptItem); runScriptCItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F6, java.awt.event.InputEvent.SHIFT_MASK)); runScriptCItem.setText("Run Script from Console"); runScriptCItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { runScriptCItemActionPerformed(evt); } }); debugMenu.add(runScriptCItem); jMenuItem8.setText("Edit Run Configuration"); jMenuItem8.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem8ActionPerformed(evt); } }); debugMenu.add(jMenuItem8); debugMenu.add(jSeparator8); debugScriptMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, java.awt.event.InputEvent.CTRL_MASK)); debugScriptMenuItem.setText("Debug Script"); debugScriptMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { debugScriptMenuItemActionPerformed(evt); } }); debugMenu.add(debugScriptMenuItem); testScriptMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_T, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); testScriptMenuItem.setText("Test Script"); testScriptMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { testScriptMenuItemActionPerformed(evt); } }); debugMenu.add(testScriptMenuItem); toggleBreakpointItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F9, 0)); toggleBreakpointItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/resources/stop.png"))); // NOI18N toggleBreakpointItem.setText("Toggle Breakpoint"); toggleBreakpointItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { toggleBreakpointItemActionPerformed(evt); } }); debugMenu.add(toggleBreakpointItem); removeToggleBreakpointItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F9, java.awt.event.InputEvent.SHIFT_MASK)); removeToggleBreakpointItem.setText("Remove Toggle Breakpoint"); removeToggleBreakpointItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeToggleBreakpointItemActionPerformed(evt); } }); debugMenu.add(removeToggleBreakpointItem); clearAllBreakpointsItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F9, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); clearAllBreakpointsItem.setText("Clear All Breakpoints..."); clearAllBreakpointsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clearAllBreakpointsItemActionPerformed(evt); } }); debugMenu.add(clearAllBreakpointsItem); debugMenu.add(jSeparator10); stepItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F10, java.awt.event.InputEvent.SHIFT_MASK)); stepItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/step.png"))); // NOI18N stepItem.setText("Step"); stepItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { stepItemActionPerformed(evt); } }); debugMenu.add(stepItem); stepInItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0)); stepInItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/step-in.png"))); // NOI18N stepInItem.setText("Step in"); stepInItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { stepInItemActionPerformed(evt); } }); debugMenu.add(stepInItem); stepOutItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, java.awt.event.InputEvent.SHIFT_MASK)); stepOutItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/step-out.png"))); // NOI18N stepOutItem.setText("Step out"); stepOutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { stepOutItemActionPerformed(evt); } }); debugMenu.add(stepOutItem); continueItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F8, 0)); continueItem.setText("Continue"); continueItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { continueItemActionPerformed(evt); } }); debugMenu.add(continueItem); debugMenu.add(jSeparator5); finishDebugItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, java.awt.event.InputEvent.SHIFT_MASK)); finishDebugItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/finish.png"))); // NOI18N finishDebugItem.setText("Finish Debugger Session"); finishDebugItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { finishDebugItemActionPerformed(evt); } }); debugMenu.add(finishDebugItem); jMenuBar1.add(debugMenu); toolsMenu.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("ToolsMenu.mnemonic").charAt(0)); toolsMenu.setText(bundle.getString("ToolsMenu.name")); // NOI18N fltkplotItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); fltkplotItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("fltkPlotItem.mnemonic").charAt(0)); fltkplotItem.setText(bundle.getString("fltkPlotItem.name")); // NOI18N fltkplotItem.setToolTipText(bundle.getString("fltkPlotItem.tooltip")); // NOI18N fltkplotItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fltkplotItemActionPerformed(evt); } }); toolsMenu.add(fltkplotItem); octaveCmdItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("octaveCmdItem.mnemonic").charAt(0)); octaveCmdItem.setText(bundle.getString("octaveCmdItem.name")); // NOI18N octaveCmdItem.setToolTipText(bundle.getString("octaveCmdItem.tooltip")); // NOI18N octaveCmdItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { octaveCmdItemActionPerformed(evt); } }); toolsMenu.add(octaveCmdItem); jMenuBar1.add(toolsMenu); jMenu2.setText(bundle.getString("windowMenu.title")); // NOI18N previousWindowItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_PAGE_DOWN, java.awt.event.InputEvent.CTRL_MASK)); previousWindowItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/go-previous.png"))); // NOI18N previousWindowItem.setText(bundle.getString("previousWindowItem.title")); // NOI18N previousWindowItem.setToolTipText(bundle.getString("previousWindowItem.tooltip")); // NOI18N previousWindowItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { previousWindowItemActionPerformed(evt); } }); jMenu2.add(previousWindowItem); nextWindowItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_PAGE_UP, java.awt.event.InputEvent.CTRL_MASK)); nextWindowItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/go-next.png"))); // NOI18N nextWindowItem.setText(bundle.getString("nextWindowItem.title")); // NOI18N nextWindowItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { nextWindowItemActionPerformed(evt); } }); jMenu2.add(nextWindowItem); jMenu2.add(jSeparator29); closeItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.ALT_MASK)); closeItem.setText(bundle.getString("closeMenuItem.name")); // NOI18N closeItem.setToolTipText(bundle.getString("closeItem.tooltip")); // NOI18N closeItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeItemActionPerformed(evt); } }); jMenu2.add(closeItem); closeAllItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.SHIFT_MASK)); closeAllItem.setText(bundle.getString("closeAllItem.name")); // NOI18N closeAllItem.setToolTipText(bundle.getString("closeAllItem.tooltip")); // NOI18N closeAllItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeAllItemActionPerformed(evt); } }); jMenu2.add(closeAllItem); jMenu2.add(jSeparator18); windowsItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F4, java.awt.event.InputEvent.SHIFT_MASK)); windowsItem.setText(bundle.getString("windowsItem.title")); // NOI18N windowsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { windowsItemActionPerformed(evt); } }); jMenu2.add(windowsItem); jMenuBar1.add(jMenu2); helpMenu.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("helpMenu.mnemonic").charAt(0)); helpMenu.setText(bundle.getString("helpMenu.name")); // NOI18N forumItem.setText("Forum"); forumItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { forumItemActionPerformed(evt); } }); helpMenu.add(forumItem); octaveInfoItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("octInfoItem.mnemonic").charAt(0)); octaveInfoItem.setText(bundle.getString("octInfoItem.name")); // NOI18N octaveInfoItem.setToolTipText(bundle.getString("octInfoItem.tooltip")); // NOI18N octaveInfoItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { octaveInfoItemActionPerformed(evt); } }); helpMenu.add(octaveInfoItem); helpMenu.add(jSeparator12); quickHelpItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0)); quickHelpItem.setText(bundle.getString("quickHelpItem.name")); // NOI18N quickHelpItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { quickHelpItemActionPerformed(evt); } }); helpMenu.add(quickHelpItem); jMenuItem9.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, java.awt.event.InputEvent.SHIFT_MASK)); jMenuItem9.setText("Package Documentation"); jMenuItem9.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem9ActionPerformed(evt); } }); helpMenu.add(jMenuItem9); docPkgItem.setText("Package Online Documentation"); docPkgItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { docPkgItemActionPerformed(evt); } }); helpMenu.add(docPkgItem); referenceMenu.setText(bundle.getString("referencesMenu.name")); // NOI18N helpMenu.add(referenceMenu); referenceItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("addReferencesItem.mnemonic").charAt(0)); referenceItem.setText(bundle.getString("addReferencesItem.name")); // NOI18N referenceItem.setToolTipText(bundle.getString("addReferencesItem.tooltip")); // NOI18N referenceItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { referenceItemActionPerformed(evt); } }); helpMenu.add(referenceItem); helpMenu.add(jSeparator6); checkForUpdatesMenuItem.setText(bundle.getString("checkForUpdatesMenuItem.text")); // NOI18N checkForUpdatesMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkForUpdatesMenuItemActionPerformed(evt); } }); helpMenu.add(checkForUpdatesMenuItem); onlineHelpItem.setText("Help and Support"); onlineHelpItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onlineHelpItemActionPerformed(evt); } }); helpMenu.add(onlineHelpItem); faqItem.setText("Online FAQ"); faqItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { faqItemActionPerformed(evt); } }); helpMenu.add(faqItem); helpMenu.add(jSeparator14); reportBugItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("reportBugItem.mnemonic").charAt(0)); reportBugItem.setText(bundle.getString("reportBugItem.name")); // NOI18N reportBugItem.setToolTipText(bundle.getString("reportBugItem.tooltip")); // NOI18N reportBugItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { reportBugItemActionPerformed(evt); } }); helpMenu.add(reportBugItem); feedBackItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("yourFeedbackItem.mnemonic").charAt(0)); feedBackItem.setText(bundle.getString("yourFeedbackItem.name")); // NOI18N feedBackItem.setToolTipText(bundle.getString("yourFeedbackItem.tooltip")); // NOI18N feedBackItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { feedBackItemActionPerformed(evt); } }); helpMenu.add(feedBackItem); helpMenu.add(jSeparator7); AboutItem.setMnemonic(java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en").getString("aboutItem.mnemonic").charAt(0)); AboutItem.setText(bundle.getString("aboutItem.name")); // NOI18N AboutItem.setToolTipText(bundle.getString("aboutItem.tooltip")); // NOI18N AboutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { AboutItemActionPerformed(evt); } }); helpMenu.add(AboutItem); jMenuBar1.add(helpMenu); setJMenuBar(jMenuBar1); pack(); }// </editor-fold>//GEN-END:initComponents /** * Set Current directory of Octave. * @param dir */ public static void setDir(String dir) { MainFrame.addFolder(dir); MainFrame.dirComboBox.setSelectedItem(dir); } /** * Creates Reference menus */ public void makeMenu() { try { Preferences pr = Preferences.userNodeForPackage(this.getClass()); StringTokenizer t = new StringTokenizer(pr.get("Ref_list", null),"=;"); while(t.hasMoreTokens()) { referenceMenu.add(new DocumentAction(t.nextToken(),t.nextToken())); } } catch (Exception ex) { } } private void AboutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AboutItemActionPerformed AboutDlg aboutDlg = new AboutDlg(this,true); aboutDlg.setLocationRelativeTo(this); aboutDlg.setVisible(true); }//GEN-LAST:event_AboutItemActionPerformed public static void setPath(String path) { try { URI uri = new URI(path); Desktop desktop=Desktop.getDesktop(); desktop.browse(uri); } catch (URISyntaxException | IOException ex) { } } private void reportBugItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reportBugItemActionPerformed setPath("http://domainmathide.freeforums.org/bugs-f3.html"); }//GEN-LAST:event_reportBugItemActionPerformed private void feedBackItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_feedBackItemActionPerformed setPath("http://domainmathide.freeforums.org/feedback-f4.html"); }//GEN-LAST:event_feedBackItemActionPerformed private void referenceItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_referenceItemActionPerformed DocDialog DocDlg = new DocDialog(this,true); DocDlg.setLocationRelativeTo(this); DocDlg.setVisible(true); }//GEN-LAST:event_referenceItemActionPerformed private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); MainFrame.octavePanel.start(); DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.getDefault()); String t="# -- "+formatter.format(new Date())+" -- #"; histArea.append(t+"\n"); String path=Character.toString('"') +System.getProperty("user.dir")+File.separator+"scripts"+Character.toString('"'); MainFrame.octavePanel.evaluate("addpath(genpath("+path+"));savepath();"); MainFrame.octavePanel.evaluate("DomainMath_OctavePaths('"+parent_root+"DomainMath_OctavePaths.dat');"); MainFrame.octavePanel.evaluate("DomainMath_OctavePackages('"+parent_root+"DomainMath_OctavePackages.dat');"); MainFrame.octavePanel.evaluate("DomainMath_OctaveVariables('"+parent_root+"DomainMath_OctaveVariables.dat',whos);"); // MainFrame.workspace.reload(); MainFrame.octavePanel.evaluate("DomainMath_OctaveConfig('"+parent_root+"DomainMath_OctaveConfig.dat');"); String f=System.getProperty("user.dir") +File.separator+"cache"+File.separator+"pkg_list.xml"; MainFrame.octavePanel.evaluate("DomainMath_PkgContents('"+f+"');"); loadLayout(); MainFrame.reloadWorkspace(); loadPackageAuto(); setDirComboContent(); this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); new ModuleLoader().load(this,false); DMILogger.msg("DMI is Ready."); }//GEN-LAST:event_formWindowOpened public void loadPackageAuto(){ Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); String packageList = pr2.get("DomainMath_Packages", ";"); StringTokenizer t = new StringTokenizer(packageList,";"); while(t.hasMoreTokens()){ MainFrame.octavePanel.evaluate("pkg load "+t.nextToken()); } } public void saveFrameSize(int w, int h) { Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); pr2.putInt("Frame_width", w); pr2.putInt("Frame_height", h); } public void deleteText() { RSyntaxTextArea textArea = commandArea; boolean beep = true; if ((textArea != null) && (textArea.isEditable())) { try { Document doc = textArea.getDocument(); Caret caret = textArea.getCaret(); int dot = caret.getDot(); int mark = caret.getMark(); if (dot != mark) { doc.remove(Math.min(dot, mark), Math.abs(dot - mark)); beep = false; } else if (dot < doc.getLength()) { int delChars = 1; if (dot < doc.getLength() - 1) { String dotChars = doc.getText(dot, 2); char c0 = dotChars.charAt(0); char c1 = dotChars.charAt(1); if (c0 >= '\uD800' && c0 <= '\uDBFF' && c1 >= '\uDC00' && c1 <= '\uDFFF') { delChars = 2; } } doc.remove(dot, delChars); beep = false; } } catch (Exception bl) { } } if (beep) { UIManager.getLookAndFeel().provideErrorFeedback(textArea); } textArea.requestFocusInWindow(); } private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitItemActionPerformed exitApp(); }//GEN-LAST:event_exitItemActionPerformed private void printItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_printItemActionPerformed try { octavePanel.outputArea.print(); } catch (PrinterException ex) { } }//GEN-LAST:event_printItemActionPerformed private void preferencesItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_preferencesItemActionPerformed preferencesDlg.setLocationRelativeTo(this); preferencesDlg.setVisible(true); }//GEN-LAST:event_preferencesItemActionPerformed public void saveHistory(File file) { try { try (BufferedWriter r = new BufferedWriter(new FileWriter(file))) { DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.getDefault()); r.append("# Created by DomainMath IDE on "+formatter.format(new Date())); r.newLine(); histArea.write(r); r.close(); } } catch (Exception re) { JOptionPane.showMessageDialog(this,re.toString(),"Error",JOptionPane.ERROR_MESSAGE); } } public void saveHistoryAs() { JFileChooser fc = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter( "M-Files (*.m)", "m"); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setFileFilter(filter); fc.setMultiSelectionEnabled(false); fc.setDialogTitle("Save As"); File file_save; int returnVal = fc.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { String path = fc.getSelectedFile().getAbsolutePath(); if(!path.endsWith(".m")) { file_save = new File(fc.getSelectedFile().getAbsolutePath()+".m"); saveHistory(file_save); }else { file_save = new File(fc.getSelectedFile().getAbsolutePath()+".m"); saveHistory(file_save); } } } public void connect() { commandArea.setText(">>"); octavePanel.outputArea.setText(""); octavePanel.start(); new Msg(this,"Octave connected.").setVisible(true); if(!commandArea.isEnabled()) { commandArea.setEnabled(true); } } public void disconnect() { octavePanel.quit(); commandArea.setEnabled(false); new Msg(this,"Octave disconnected.").setVisible(true); } private void connectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectItemActionPerformed connect(); MainFrame.octavePanel.evaluate("DomainMath_OctavePaths('"+parent_root+"DomainMath_OctavePaths.dat');"); MainFrame.octavePanel.evaluate("DomainMath_OctavePackages('"+parent_root+"DomainMath_OctavePackages.dat');"); MainFrame.octavePanel.evaluate("DomainMath_OctaveVariables('"+parent_root+"DomainMath_OctaveVariables.dat',whos);"); MainFrame.workspace.reload(); MainFrame.workspace.reload(); if(this.startupDir.equals("")) { setDir(System.getProperty("user.dir")); octavePanel.evaluate("chdir "+"'"+System.getProperty("user.dir") +"'"); }else{ setDir(startupDir); octavePanel.evaluate("chdir "+"'"+startupDir +"'"); } }//GEN-LAST:event_connectItemActionPerformed private void disconnectItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disconnectItemActionPerformed disconnect(); }//GEN-LAST:event_disconnectItemActionPerformed private void clearOutWindowItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearOutWindowItemActionPerformed octavePanel.clear(); }//GEN-LAST:event_clearOutWindowItemActionPerformed private void connectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_connectButtonActionPerformed connect(); }//GEN-LAST:event_connectButtonActionPerformed private void disconnectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disconnectButtonActionPerformed disconnect(); }//GEN-LAST:event_disconnectButtonActionPerformed private void exitFinal(ShutDown shutDown) { MainFrame.workspace.requestToClearAll(); MainFrame.reloadWorkspace(); octavePanel.quit(); File f = new File(System.getProperty("user.dir")+File.separator+"scripts"+File.separator+"dmns.m"); f.deleteOnExit(); File dir_content[]; try { dir_content =logDir.listFiles(); for(int i=0; i<dir_content.length;i++) { Files.delete(dir_content[i].toPath()); } Files.delete(logDir.toPath()); } catch (IOException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } this.saveLayout(); File _f = new File(parent_root+"DomainMath_OctaveDbStack.dat"); _f.delete(); saveCurrentDir(); try { FileUtils.deleteDirectory(new File(System.getProperty("user.dir")+File.separator+"doc_cache")); } catch (IOException ex) { Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex); } saveFrameSize(this.getWidth(),this.getHeight()); shutDown.dispose(); this.dispose(); System.exit(0); } public void exitApp(){ int j=fileTab.getTabCount()-1; while(j != -1) { askSave(j); j--; } ShutDown shutDown = new ShutDown(this,"DomainMath IDE","Really do you want to exit?"); JButton yes = new JButton("Yes"); JButton no =new JButton("No"); JCheckBox confirmation = shutDown.getCheckBox(); Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); boolean skipConfirmation = pr2.getBoolean("skip_confirmation", false); confirmation.addItemListener((ItemEvent e) -> { if(ItemEvent.DESELECTED == e.getStateChange()) { pr2.putBoolean("skip_confirmation", false); } else { pr2.putBoolean("skip_confirmation", true); } }); yes.addActionListener((ActionEvent e) ->{ exitFinal(shutDown); }); no.addActionListener((ActionEvent e) -> { shutDown.dispose(); }); if(false == skipConfirmation) { shutDown.addButton(yes); shutDown.addButton(no); shutDown.setVisible(true); } else { exitFinal(shutDown); } } private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing exitApp(); }//GEN-LAST:event_formWindowClosing public void saveCurrentDir() { String s=""; ArrayList<String> l = new ArrayList<>(); for(int i=0; i<dirComboBox.getItemCount();i++){ // s+=dirComboBox.getItemAt(i).toString()+File.pathSeparator; l.add(dirComboBox.getItemAt(i).toString()); } if(l.contains(worksDir.getAbsolutePath())){ l.remove(worksDir.getAbsolutePath()); } System.out.println("Directory list:"+l); for(String st:l){ s+=st+File.pathSeparator; } Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); if(s != null) { pr2.put("DomainMath_CurrentDir", s); System.out.println("Saved current directory list:"+s); }else{ pr2.put("DomainMath_CurrentDir", worksDir.getAbsolutePath()); } pr2.put("DomainMath_StartUpDir", worksDir.getAbsolutePath()); } public void setDirComboContent(){ Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); String s=pr2.get("DomainMath_CurrentDir",""); ArrayList<String> l = new ArrayList<>(); if(s!=null) { StringTokenizer t =new StringTokenizer(s,File.pathSeparator); while(t.hasMoreTokens()) { // System.out.println(t.nextToken()); l.add(t.nextToken()); } System.out.println("Open:"+l); File _f; for(String st:l){ _f = new File(st); if(_f.exists()) { addDirList(st); } } if(worksDir.exists()){ addDirList(worksDir.getAbsolutePath()); cd(worksDir.getAbsolutePath()); } else{ worksDir.mkdir(); addDirList(worksDir.getAbsolutePath()); cd(worksDir.getAbsolutePath()); } } // else{ // addDirList(worksDir.getAbsolutePath()); // } } public String getSavedCurrentDir() { Preferences pr2 = Preferences.userNodeForPackage(this.getClass()); return pr2.get("DomainMath_CurrentDir", null); } private void createFile(String path,String ext) { String name = path+"octave"+ext; String cmd =MainFrame.octavePath+" --persist "+Character.toString('"')+path+"dmns.m"+Character.toString('"'); try { try (FileWriter w = new FileWriter(new File(name))) { w.write(cmd, 0, cmd.length()); w.flush(); } } catch (IOException ex) { } } private void addDirList(String dir) { try{ File f = new File(dir); if(f.exists()) { setDir(dir); System.out.println("Added:"+dir); fileTreePanel.updateFileTree(f); }else{ System.err.println(f.getAbsolutePath()+"not exist"); } }catch(Exception e) { } } private void octaveCmdItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_octaveCmdItemActionPerformed ExternalEngine externalEngine = new ExternalEngine(this.octavePath+" --interactive"); externalEngine.setTitle(this.octavePath); externalEngine.setLocationRelativeTo(this); externalEngine.setVisible(true); }//GEN-LAST:event_octaveCmdItemActionPerformed private void openscript(File file) { try { Desktop desktop=Desktop.getDesktop(); desktop.open(file); } catch (Exception ioe) { JOptionPane.showMessageDialog(null, file.getAbsolutePath() + " doesn't exist"); } } private void fltkplotItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fltkplotItemActionPerformed runHistory(); }//GEN-LAST:event_fltkplotItemActionPerformed private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setMultiSelectionEnabled(false); Path browse_file; int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { browse_file = fc.getSelectedFile().toPath(); setDir(browse_file.toString()); requestToChangeDir(browse_file.toString()); fileTreePanel.updateFileTree(fc.getSelectedFile()); } }//GEN-LAST:event_browseButtonActionPerformed public static void evaluate(String cmd){ MainFrame.octavePanel.evaluate(cmd); } public static void evaluateWithOutput(String cmd){ MainFrame.octavePanel.evalWithOutput(cmd); } private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addButtonActionPerformed String dir=MainFrame.dirComboBox.getSelectedItem().toString(); int i = JOptionPane.showConfirmDialog(this, "Add this folder to Path List?-\n"+dir, "DomainMath IDE", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE); if(i == JOptionPane.YES_OPTION) { MainFrame.octavePanel.evaluate("addpath(genpath("+"'"+dir+"'));"); MainFrame.octavePanel.evaluate("savepath();"); } }//GEN-LAST:event_addButtonActionPerformed private void octaveInfoItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_octaveInfoItemActionPerformed File config_cache=new File(parent_root+"DomainMath_OctaveConfig.dat"); OctaveConfigDialog octaveConfigDialog = new OctaveConfigDialog(this,true,config_cache); octaveConfigDialog.setLocationRelativeTo(this); octaveConfigDialog.setVisible(true); }//GEN-LAST:event_octaveInfoItemActionPerformed public void saveplot() { JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setFileFilter(DomainMathFileFilter.SAVE_PLOT_FILE_FILTER); fc.setAcceptAllFileFilterUsed(false); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setMultiSelectionEnabled(false); File file_plot; String name; int returnVal = fc.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { System.err.println(fc.getFileFilter().getDescription()); file_plot = fc.getSelectedFile(); name =file_plot.getName(); evaluateWithOutput("saveas(1,"+"'"+file_plot.getAbsolutePath()+"');"); } } private void savePlotItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_savePlotItemActionPerformed saveplot(); }//GEN-LAST:event_savePlotItemActionPerformed private void forumItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_forumItemActionPerformed setPath("http://domainmathide.freeforums.org/"); }//GEN-LAST:event_forumItemActionPerformed private void faqItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_faqItemActionPerformed setPath("http://domainmathide.freeforums.org/faq-f8.html"); }//GEN-LAST:event_faqItemActionPerformed private void onlineHelpItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onlineHelpItemActionPerformed setPath("http://domainmathide.freeforums.org/help-and-support-f5.html"); }//GEN-LAST:event_onlineHelpItemActionPerformed private int getFirstCharacter(Element row) { if (row == null) { return 0; } int lastColumnInRow = row.getEndOffset(); return lastColumnInRow; } private void docPkgItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_docPkgItemActionPerformed setPath("http://octave.sourceforge.net/packages.php"); }//GEN-LAST:event_docPkgItemActionPerformed private void quickHelpItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quickHelpItemActionPerformed this.openInFlotingWindow(this.quickHelpView); }//GEN-LAST:event_quickHelpItemActionPerformed private void folderUpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_folderUpButtonActionPerformed try{ File f = new File(MainFrame.dirComboBox.getSelectedItem().toString()); if(f.getParentFile().exists()) { setDir(f.getParent()); requestToChangeDir(f.getParent()); fileTreePanel.updateFileTree(f.getParentFile()); }else{ java.awt.Toolkit.getDefaultToolkit().beep(); } }catch(Exception e) { System.out.println("No Parent"); } }//GEN-LAST:event_folderUpButtonActionPerformed private void newFileItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newFileItemActionPerformed newFile(); }//GEN-LAST:event_newFileItemActionPerformed private void openItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openItemActionPerformed open(); }//GEN-LAST:event_openItemActionPerformed private void saveFileItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveFileItemActionPerformed save(); }//GEN-LAST:event_saveFileItemActionPerformed private void saveAllItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAllItemActionPerformed for(int i=0;i<fileTab.getTabCount();i++) { String _file = fileTab.getToolTipTextAt(i); String fl = fileTab.getTitleAt(i); if(fl.endsWith("*")) { File f =new File(_file); save(f,i); } } }//GEN-LAST:event_saveAllItemActionPerformed private void closeItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { askSave(fileTab.getSelectedIndex()); } }//GEN-LAST:event_closeItemActionPerformed private void closeAllItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeAllItemActionPerformed int i=fileTab.getTabCount()-1; while(i != -1) { askSave(i); i--; } }//GEN-LAST:event_closeAllItemActionPerformed private void printFileItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_printFileItemActionPerformed printdoc(); }//GEN-LAST:event_printFileItemActionPerformed private void undoItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_undoItemActionPerformed this.undo(); }//GEN-LAST:event_undoItemActionPerformed private void redoItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_redoItemActionPerformed this.redo(); }//GEN-LAST:event_redoItemActionPerformed private void cutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cutItemActionPerformed this.cut(); }//GEN-LAST:event_cutItemActionPerformed private void copyItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyItemActionPerformed this.copy(); }//GEN-LAST:event_copyItemActionPerformed private void pasteItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pasteItemActionPerformed this.paste(); }//GEN-LAST:event_pasteItemActionPerformed private void deleteItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteItemActionPerformed this.deleteText(); }//GEN-LAST:event_deleteItemActionPerformed private void selectAllItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllItemActionPerformed this.selectAll(); }//GEN-LAST:event_selectAllItemActionPerformed private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem6ActionPerformed if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.removeAllLineHighlights(); } }//GEN-LAST:event_jMenuItem6ActionPerformed private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed }//GEN-LAST:event_jMenuItem1ActionPerformed private void findItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); FindAndReplaceDialog find = new FindAndReplaceDialog(this,false,fileTab,selectedArea.getSelectedText()); find.setVisible(true); } }//GEN-LAST:event_findItemActionPerformed private void replaceItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); FindAndReplaceDialog find = new FindAndReplaceDialog(this,false,fileTab,selectedArea.getSelectedText()); find.setVisible(true); } }//GEN-LAST:event_replaceItemActionPerformed public void gotoLine(String goto_file,int lineRequested){ if(fileTab.getSelectedIndex() >= 0) { int indexOf = MainFrame.fileNameList.indexOf(goto_file); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(indexOf); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); try { Element element = selectedArea.getDocument().getDefaultRootElement(); int rowCount = element.getElementCount(); if (lineRequested > rowCount || lineRequested < 0) { setVisible(false); return; } Element row = null; int firstCharacter = 0; int rowNumber = 0; for (int i = 0; i < lineRequested; ++i) { firstCharacter = getFirstCharacter(row); rowNumber = element.getElementIndex(firstCharacter); row = element.getElement(rowNumber); } int lastColumnInRow = row.getEndOffset(); selectedArea.select(firstCharacter, lastColumnInRow - 1); }catch(Exception e) { } } } private void gotoItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_gotoItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { String s = JOptionPane.showInputDialog("Line Number:"); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); try { Element element = selectedArea.getDocument().getDefaultRootElement(); int lineRequested = Integer.parseInt(s); int rowCount = element.getElementCount(); if (lineRequested > rowCount || lineRequested < 0) { setVisible(false); return; } Element row = null; int firstCharacter = 0; int rowNumber = 0; for (int i = 0; i < lineRequested; ++i) { firstCharacter = getFirstCharacter(row); rowNumber = element.getElementIndex(firstCharacter); row = element.getElement(rowNumber); } int lastColumnInRow = row.getEndOffset(); selectedArea.select(firstCharacter, lastColumnInRow - 1); }catch(Exception e) { } } }//GEN-LAST:event_gotoItemActionPerformed private void googleItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_googleItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); String s = selectedArea.getSelectedText(); if(!s.equals("")) { String f="http://www.google.com/search?q="+s.replaceAll(" ", "+"); setPath(f); } } }//GEN-LAST:event_googleItemActionPerformed private void wikiItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_wikiItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); String s = selectedArea.getSelectedText(); if(!s.equals("")) { String f="http://en.wikipedia.org/wiki/Special:Search?search="+s.replaceAll(" ", "+"); setPath(f); } } }//GEN-LAST:event_wikiItemActionPerformed private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed this.undo(); }//GEN-LAST:event_jButton4ActionPerformed private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed this.redo(); }//GEN-LAST:event_jButton5ActionPerformed private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed this.cut(); }//GEN-LAST:event_jButton6ActionPerformed private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed this.copy(); }//GEN-LAST:event_jButton7ActionPerformed private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed this.paste(); }//GEN-LAST:event_jButton8ActionPerformed private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed for(int i=0;i<fileTab.getTabCount();i++) { String _file = fileTab.getToolTipTextAt(i); String fl = fileTab.getTitleAt(i); if(fl.endsWith("*")) { File f =new File(_file); save(f,i); } } }//GEN-LAST:event_jButton3ActionPerformed private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed open(); }//GEN-LAST:event_jButton2ActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed newFile(); }//GEN-LAST:event_jButton1ActionPerformed /** * Run script. */ private void runFile(Path path) { File file_selected = path.toFile(); String f = file_selected.getName(); String config_name = file_selected.getName().substring(0, f.lastIndexOf("."))+".rcfg"; File cfg = new File(file_selected.getParent()+File.separator+config_name); try { JAXBContext jaxbContext = JAXBContext.newInstance(RunConfigurations.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); RunConfigurations runConfig = (RunConfigurations) jaxbUnmarshaller.unmarshal(cfg); int selectedIndex = runConfig.getIndex(); List<RunConfiguration> runConfiguration = runConfig.getRunConfiguration(); MainFrame.octavePanel.evalWithOutput(runConfiguration.get(selectedIndex).getConfig()); reloadWorkspace(); } catch ( JAXBException ex) { String name =path.getFileName().toString(); String ext =name.substring(name.lastIndexOf(".")); if(ext.equalsIgnoreCase(".m")){ String m_file_name=name.substring(0, name.indexOf(".m")) ; MainFrame.octavePanel.evalWithOutput(m_file_name+"()"); reloadWorkspace(); } } } private void runFile2(Path path) { File file_selected = path.toFile(); String f = file_selected.getName(); String config_name = file_selected.getName().substring(0, f.lastIndexOf("."))+".rcfg"; File cfg = new File(file_selected.getParent()+File.separator+config_name); try { JAXBContext jaxbContext = JAXBContext.newInstance(RunConfigurations.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); RunConfigurations runConfig = (RunConfigurations) jaxbUnmarshaller.unmarshal(cfg); int selectedIndex = runConfig.getIndex(); List<RunConfiguration> runConfiguration = runConfig.getRunConfiguration(); ExternalEngine externalEngine = new ExternalEngine(this.octavePath+" --interactive"); externalEngine.setTitle(octavePath); externalEngine.setLocationRelativeTo(this); externalEngine.setVisible(true); externalEngine.execute("cd '"+path.getParent()+"'\n"); externalEngine.execute(runConfiguration.get(selectedIndex).getConfig()); } catch ( JAXBException ex) { String name =path.getFileName().toString(); String ext =name.substring(name.lastIndexOf(".")); if(ext.equalsIgnoreCase(".m")){ String m_file_name=name.substring(0, name.indexOf(".m")) ; ExternalEngine externalEngine = new ExternalEngine(this.octavePath+" --interactive"); externalEngine.setTitle(octavePath); externalEngine.setLocationRelativeTo(this); externalEngine.setVisible(true); externalEngine.execute("cd '"+path.getParent()+"'\n"); externalEngine.execute(m_file_name+"()"); } } } public void newFile() { NewScriptDialog newFileDlg =new NewScriptDialog(this,true); newFileDlg.setLocationRelativeTo(this); newFileDlg.setVisible(true); this.openInFlotingWindow(this.fileTabView); } public void needOct(boolean need) { AutoCompletion ac = new AutoCompletion(provider1); if(need) { ac.install(this.areaFileTab); } else { ac.uninstall(); } } public CompletionProvider createCompletionProvider() { DefaultCompletionProvider provider = new DefaultCompletionProvider(); JList l = new JList(); AutoCompleteListCellRenderer cellRender = new AutoCompleteListCellRenderer(l.getFont(), l.getBackground(),l.getForeground(), l.getSelectionBackground(),l.getSelectionForeground()); provider.setListCellRenderer(cellRender); OctaveM _m = new OctaveM(); List a = _m.getKey("DomainMath_OctaveAutoComplete.ini"); for(int i=0;i<a.size();i++) { provider.addCompletion(new BasicCompletion(provider, a.get(i).toString())); } return provider; } public void save(File file,int index) { try { try (BufferedWriter r = new BufferedWriter(new FileWriter(file))) { this.fileTab.setTitleAt(index,file.getName()); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(index); RSyntaxTextArea a = (RSyntaxTextArea)t.getTextArea(); a.write(r); r.close(); this.setCurrentDirFileTab(file.getParent()); } } catch (Exception re) { JOptionPane.showMessageDialog(this,re.getMessage(),"Error",JOptionPane.ERROR_MESSAGE); } } private void printdoc() { if(fileTab.getSelectedIndex() >=0) { try { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); selectedArea.print(); } catch (PrinterException ex) { } } } private void popupTab(){ JPopupMenu popup = new JPopupMenu(); JMenuItem pcloseItem = new JMenuItem("Close"); JMenuItem pcloseAllItem = new JMenuItem("Close All"); popup.add(pcloseItem); popup.add(pcloseAllItem); fileTab.addMouseListener(new MainFrame.PopupListener(popup)); pcloseItem.addActionListener((ActionEvent e) -> { if(fileTab.getSelectedIndex() >= 0) { askSave(fileTab.getSelectedIndex()); } }); pcloseAllItem.addActionListener((ActionEvent e) -> { int i=fileTab.getTabCount()-1; while(i != -1) { askSave(i); i--; } }); } /** * It closes a file. * @param selectedIndex */ public void askSave(int selectedIndex) { String s = fileTab.getTitleAt(selectedIndex) ; if(s.endsWith("*")) { //modified document. String f =s.substring(0, s.lastIndexOf("*")); // ask to save file. int i = JOptionPane.showConfirmDialog(this, "Do you want to save changes in "+f+" ?", "DomainMath IDE", JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE); if(i == JOptionPane.YES_OPTION) { //need to save file // add this file to recent menu list. File selected_file = new File(fileTab.getToolTipTextAt(selectedIndex)); recentFileMenu.addEntry(selected_file.getAbsolutePath()); // save the file. save(selected_file,selectedIndex); // close the file. this.removeFileNameFromList(selectedIndex); fileTab.remove(selectedIndex); FILE_TAB_INDEX--; }else if (i == JOptionPane.NO_OPTION){ // I dont need to save the file. // add this file to recent menu list. File selected_file = new File(fileTab.getToolTipTextAt(selectedIndex)); recentFileMenu.addEntry(selected_file.getAbsolutePath()); // close the file. this.removeFileNameFromList(selectedIndex); fileTab.remove(selectedIndex); FILE_TAB_INDEX--; } }else { //unmodified file. // add this file to recent menu list. File selected_file = new File(fileTab.getToolTipTextAt(selectedIndex)); recentFileMenu.addEntry(selected_file.getAbsolutePath()); // close the file. removeFileNameFromList(selectedIndex); fileTab.remove(selectedIndex); FILE_TAB_INDEX--; } } private void createRootWindow() { viewMap.addView(0, fileTabView); viewMap.addView(1, pathsView); viewMap.addView(2, pkgView); viewMap.addView(3, consoleView); viewMap.addView(4, arrayEditorView); viewMap.addView(5, workspaceView); viewMap.addView(6, filesView); viewMap.addView(7, historyView); viewMap.addView(8, debuggerView); viewMap.addView(9, quickHelpView); MixedViewHandler handler = new MixedViewHandler(viewMap, new ViewSerializer() { @Override public void writeView(View view, ObjectOutputStream out) throws IOException { out.writeInt(((DynamicView) view).getId()); } @Override public View readView(ObjectInputStream in) throws IOException { return getDynamicView(in.readInt()); } }); rootWindow = DockingUtil.createRootWindow(viewMap, handler, true); properties.addSuperObject(currentTheme.getRootWindowProperties()); properties.addSuperObject(titleBarStyleProperties); rootWindow.getRootWindowProperties().addSuperObject(properties); rootWindow.getWindowBar(Direction.DOWN).setEnabled(true); rootWindow.addListener(new DockingWindowAdapter() { @Override public void windowAdded(DockingWindow addedToWindow, DockingWindow addedWindow) { updateViews(addedWindow, true); } @Override public void windowRemoved(DockingWindow removedFromWindow, DockingWindow removedWindow) { updateViews(removedWindow, false); } @Override public void windowClosing(DockingWindow window) throws OperationAbortedException { } @Override public void windowDocking(DockingWindow window) throws OperationAbortedException { } @Override public void windowUndocking(DockingWindow window) throws OperationAbortedException { } }); rootWindow.addTabMouseButtonListener(DockingWindowActionMouseButtonListener.MIDDLE_BUTTON_CLOSE_LISTENER); } private void updateViews(DockingWindow window, boolean added) { if (window instanceof View) { if (window instanceof DynamicView) { if (added) { dynamicViews.put(new Integer(((DynamicView) window).getId()), window); } else { dynamicViews.remove(new Integer(((DynamicView) window).getId())); } } else { } } else { for (int i = 0; i < window.getChildWindowCount(); i++) { updateViews(window.getChildWindow(i), added); } } } private View getDynamicView(int id) { View view = (View) dynamicViews.get(new Integer(id)); if (view == null) { if(id == 0) { view =fileTabView; }else if(id ==1) { view=pathsView; }else if(id ==2) { view=pkgView; }else if(id ==3) { view=consoleView; }else if(id ==4) { view=arrayEditorView; }else if(id ==5) { view=workspaceView; }else if(id ==6) { view=filesView; }else if(id ==7) { view=historyView; }else if(id ==8) { view=debuggerView; }else if(id ==9) { view=quickHelpView; } } return view; } private void setDefaultLayout() { workspaceAndFilesTabWindow.addTab(this.workspaceView); workspaceAndFilesTabWindow.addTab(this.filesView); workspaceView.restoreFocus(); SplitWindow leftSplitWindow = new SplitWindow(false, 0.7f,this.workspaceAndFilesTabWindow,this.historyView); rootWindow.setWindow(new SplitWindow(true, 0.3f,leftSplitWindow,consoleView)); WindowBar windowBar = rootWindow.getWindowBar(Direction.DOWN); while (windowBar.getChildWindowCount() > 0) { windowBar.getChildWindow(0).close(); } } class PopupListener extends MouseAdapter { JPopupMenu popup; PopupListener(JPopupMenu popupMenu) { popup = popupMenu; } @Override public void mousePressed(MouseEvent e) { maybeShowPopup(e); } @Override public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger() && fileTab.getTabCount() > 0) { popup.show(e.getComponent(),e.getX(), e.getY()); } } } public void executeScript(File file_selected) { requestToChangeDir(file_selected.getParent()); setDir(file_selected.getParent()); this.runFile(Paths.get(file_selected.getAbsolutePath())); fileTreePanel.updateFileTree(file_selected.getParentFile()); } public void changeDirectory(File f) { if(f.exists()) { setDir(f.getAbsolutePath()); requestToChangeDir(f.getAbsolutePath()); fileTreePanel.updateFileTree(f); } } private void runScriptItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runScriptItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { save(); File file_selected = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); executeScript(file_selected); } }//GEN-LAST:event_runScriptItemActionPerformed private void finishDebugItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishDebugItemActionPerformed MainFrame.octavePanel.evalWithOutput("dbquit"); File f = new File(parent_root+"DomainMath_OctaveDbStack.dat"); f.delete(); clearAllBreakPoints(); this.breakPointList.removeAll(this.breakPointList); }//GEN-LAST:event_finishDebugItemActionPerformed private void stepItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stepItemActionPerformed MainFrame.octavePanel.evalWithOutput("dbstep"); createStackData(); }//GEN-LAST:event_stepItemActionPerformed private void stepInItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stepInItemActionPerformed MainFrame.octavePanel.evalWithOutput("dbstep in"); createStackData(); }//GEN-LAST:event_stepInItemActionPerformed private void stepOutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_stepOutItemActionPerformed MainFrame.octavePanel.evalWithOutput("dbstep out"); createStackData(); }//GEN-LAST:event_stepOutItemActionPerformed private void setToggleBreakpoint(int n) { if(fileTab.getSelectedIndex() >= 0) { save(); String file_selected = fileTab.getTitleAt(fileTab.getSelectedIndex()); if(file_selected.endsWith(".m")) { String ftn_name=file_selected.substring(0,file_selected.indexOf(".m")); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); octavePanel.evalWithOutput( "dbstop ('"+ftn_name+"',"+ n+")"); } }else{ System.out.println("Hello"); } } /** * remove toggle breakpoint. */ private void removeToggleBreakpoint() { if(fileTab.getSelectedIndex() >= 0) { save(); String file_selected = fileTab.getTitleAt(fileTab.getSelectedIndex()); if(file_selected.endsWith(".m")) { String ftn_name=file_selected.substring(0,file_selected.indexOf(".m")); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); octavePanel.evalWithOutput( "dbclear ('"+ftn_name+"',"+ selectedArea.getCaretLineNumber()+")"); } }else{ System.out.println("Hello"); } } public void setContinueMark(String goto_file,int n){ if(fileTab.getSelectedIndex() >= 0) { int indexOf = MainFrame.fileNameList.indexOf(goto_file); RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(indexOf); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); // remove any previous continue mark. for(GutterIconInfo f:debugMarksList){ t.getGutter().removeTrackingIcon(f); } Breakpoint breakpoint = new Breakpoint(new File(goto_file),(n-1)); for(Breakpoint b:breakPointList){ if(Breakpoint.compare(b, breakpoint)) { try { t.getGutter().removeBookmark((n-1)); GutterIconInfo addLineTrackingIcon = t.getGutter().addLineTrackingIcon((n-1), new ImageIcon(getClass().getResource("resources/continue_break.png"))); } catch (BadLocationException ex) { } }else{ // add Continue mark. if(n > 0) { try { GutterIconInfo addLineTrackingIcon = t.getGutter().addLineTrackingIcon((n-1), new ImageIcon(getClass().getResource("resources/continue.png"))); debugMarksList.add(addLineTrackingIcon); } catch (BadLocationException ex) { } } } } } } public void makeBreakPoint(){ if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); final RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); try { File f = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); MainFrame.octavePanel.evaluate("chdir "+"'"+f.getParent()+"'"); setToggleBreakpoint(selectedArea.getCaretLineNumber()+1); GutterIconInfo addLineTrackingIcon = t.getGutter().addLineTrackingIcon(selectedArea.getCaretLineNumber(), new ImageIcon(urlDebugImageStop)); Breakpoint breakpoint = new Breakpoint(f,selectedArea.getCaretLineNumber()+1); breakpoint.setPoint(new Point(addLineTrackingIcon.getMarkedOffset(),addLineTrackingIcon.getMarkedOffset())); breakPointMarksList.add(addLineTrackingIcon); breakPointList.add(breakpoint); } catch (BadLocationException ex) { } } } private void toggleBreakpointItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_toggleBreakpointItemActionPerformed makeBreakPoint(); }//GEN-LAST:event_toggleBreakpointItemActionPerformed private void clearAllBreakpointsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearAllBreakpointsItemActionPerformed clearAllBreakPoints(); this.breakPointList.removeAll(this.breakPointList); }//GEN-LAST:event_clearAllBreakpointsItemActionPerformed private void removeToggleBreakpointItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeToggleBreakpointItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { RTextScrollPane t =(RTextScrollPane) fileTab.getComponentAt(fileTab.getSelectedIndex()); RSyntaxTextArea selectedArea = (RSyntaxTextArea)t.getTextArea(); try { File f = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); GutterIconInfo[] trackingIcons = gutterFileTab.getTrackingIcons(selectedArea.getCaret().getMagicCaretPosition()); removeToggleBreakpoint(); t.getGutter().removeTrackingIcon(trackingIcons[0]); Breakpoint breakpoint = new Breakpoint(f,trackingIcons[0].getMarkedOffset()); this.breakPointList.remove(breakpoint); } catch (Exception ex) { } } }//GEN-LAST:event_removeToggleBreakpointItemActionPerformed private void continueItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_continueItemActionPerformed MainFrame.octavePanel.evalWithOutput("dbcont"); File f = new File(parent_root+"DomainMath_OctaveDbStack.dat"); f.delete(); clearAllBreakPoints(); }//GEN-LAST:event_continueItemActionPerformed private void saveAsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAsItemActionPerformed if(fileTab.getSelectedIndex() >=0) { saveScriptAs(); } }//GEN-LAST:event_saveAsItemActionPerformed /** * Change current directory to another directory. * @param s */ public void cd(String s) { File f= new File(s); if(f.exists()) { octavePanel.evaluate("chdir "+"'"+s+"'"); fileTreePanel.updateFileTree(f); }else{ JOptionPane.showMessageDialog(this, "Directory not exist", "Error", JOptionPane.ERROR_MESSAGE); } } public static void addFolder(String s) { for(int i=0; i<dirComboBox.getItemCount();i++) { if(s==dirComboBox.getItemAt(i)){ System.out.println("Repeated"); }else{ dirComboBox.removeItem(s); dirComboBox.insertItemAt(s, 0); dirComboBox.setSelectedIndex(0); break; } } } private void dirComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_dirComboBoxItemStateChanged if(evt.getStateChange()== ItemEvent.SELECTED){ Object s =this.dirComboBox.getSelectedItem(); int n= dirComboBox.getItemCount(); if(dirComboBox.getSelectedIndex()<=-1) { if(n==0){ dirComboBox.addItem(s); cd(s.toString()); }else{ for(int i=0; i<dirComboBox.getItemCount();i++) { if(s==dirComboBox.getItemAt(i)){ System.out.println("Repeated"); }else{ dirComboBox.removeItem(s); dirComboBox.insertItemAt(s, 0); dirComboBox.setSelectedIndex(0); cd(s.toString()); break; } } } }else{ if (dirComboBox.getSelectedIndex()>0) { Object item = dirComboBox.getSelectedItem(); dirComboBox.removeItem(item); dirComboBox.insertItemAt(item, 0); dirComboBox.setSelectedIndex(0); cd(item.toString()); } } } }//GEN-LAST:event_dirComboBoxItemStateChanged public void dragNDrop() { FileDrop fileDrop = new FileDrop( System.out, fileTab, /*dragBorder,*/ new FileDrop.Listener(){ @Override public void filesDropped( java.io.File[] files ){ for( int i = 0; i < files.length; i++ ) { try{ File file1=files[i]; if(!MainFrame.fileNameList.contains(file1.getAbsolutePath())) { open(file1, MainFrame.FILE_TAB_INDEX); setCurrentDirFileTab(file1.getParent()); }else { System.out.println(file1.getAbsolutePath()+" already open!"); } } catch( Exception e ) { } } } }); } private void previousWindowItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_previousWindowItemActionPerformed if(fileTab.getSelectedIndex() >=0) { if(fileTab.getSelectedIndex() != 0){ fileTab.setSelectedIndex((fileTab.getSelectedIndex()-1)); } } }//GEN-LAST:event_previousWindowItemActionPerformed private void nextWindowItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nextWindowItemActionPerformed if(fileTab.getSelectedIndex() >=0) { try{ fileTab.setSelectedIndex((fileTab.getSelectedIndex()+1)); }catch(Exception e){ fileTab.setSelectedIndex(0); } } }//GEN-LAST:event_nextWindowItemActionPerformed private void focusView(View view) { if (view.getRootWindow() != null) { view.restoreFocus(); } else { DockingUtil.addWindow(view, rootWindow); } } private void codeEditorItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_codeEditorItemActionPerformed focusView(this.fileTabView); }//GEN-LAST:event_codeEditorItemActionPerformed private void pathsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pathsItemActionPerformed this.openInFlotingWindow(this.pathsView); }//GEN-LAST:event_pathsItemActionPerformed private void pkgsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pkgsItemActionPerformed this.openInFlotingWindow(this.pkgView); }//GEN-LAST:event_pkgsItemActionPerformed private void consoleItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_consoleItemActionPerformed focusView(this.consoleView); }//GEN-LAST:event_consoleItemActionPerformed private void arrayEditItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_arrayEditItemActionPerformed this.openInFlotingWindow(this.arrayEditorView); }//GEN-LAST:event_arrayEditItemActionPerformed private void workspaceItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_workspaceItemActionPerformed focusView(this.workspaceView); }//GEN-LAST:event_workspaceItemActionPerformed private void filesItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filesItemActionPerformed focusView(this.filesView); }//GEN-LAST:event_filesItemActionPerformed private void historyItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_historyItemActionPerformed focusView(this.historyView); }//GEN-LAST:event_historyItemActionPerformed private void windowsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_windowsItemActionPerformed WindowsDialog windowsDialog = new WindowsDialog(this,true); windowsDialog.setLocationRelativeTo(this); windowsDialog.setVisible(true); }//GEN-LAST:event_windowsItemActionPerformed private void testScriptMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testScriptMenuItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { save(); File file_selected = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); requestToChangeDir(file_selected.getParent()); setDir(file_selected.getParent()); Path path=Paths.get(file_selected.getAbsolutePath()); String name =path.getFileName().toString(); String ext =name.substring(name.lastIndexOf(".")); if(ext.equalsIgnoreCase(".m")){ String m_file_name=name.substring(0, name.indexOf(".m")) ; evaluateWithOutput("test "+m_file_name); reloadWorkspace(); } } }//GEN-LAST:event_testScriptMenuItemActionPerformed public void createStackData(){ MainFrame.octavePanel.evaluate("dbstack_data=dbstack;"); MainFrame.octavePanel.evaluate("DomainMath_OctaveDbStack('"+parent_root+"DomainMath_OctaveDbStack.dat',dbstack_data);"); this.dbstackPanel.reload(); this.dbstackPanel.openFiles(); } private void debugScriptMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_debugScriptMenuItemActionPerformed this.openInFlotingWindow(this.debuggerView); if(fileTab.getSelectedIndex() >= 0) { save(); File file_selected = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); executeScript(file_selected); createStackData(); } }//GEN-LAST:event_debugScriptMenuItemActionPerformed private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem7ActionPerformed this.openInFlotingWindow(this.debuggerView); }//GEN-LAST:event_jMenuItem7ActionPerformed private void jMenuItem8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem8ActionPerformed if(fileTab.getSelectedIndex() >= 0) { save(); File file_selected = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); String f = file_selected.getName(); String config_name = file_selected.getName().substring(0, f.lastIndexOf("."))+".rcfg"; File cfg = new File(file_selected.getParent()+File.separator+config_name); // executeScript(file_selected); ScriptRunConfigDialog scriptRunConfigDialog = new ScriptRunConfigDialog(this,true,cfg,file_selected); scriptRunConfigDialog.setLocationRelativeTo(this); scriptRunConfigDialog.setVisible(true); } }//GEN-LAST:event_jMenuItem8ActionPerformed private void jMenuItem9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem9ActionPerformed MainFrame.octavePanel.evaluate("pkg load all;"); String f=System.getProperty("user.dir") +File.separator+"cache"+File.separator+"pkg_list.xml"; MainFrame.octavePanel.evaluate("DomainMath_PkgContents('"+f+"');"); PkgDocFrame pkgDocFrame = new PkgDocFrame(this); pkgDocFrame.setLocationRelativeTo(this); this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); ActionListener taskPerformer = (ActionEvent evt1) -> { pkgDocFrame.setVisible(true); }; javax.swing.Timer t= new javax.swing.Timer(1200, taskPerformer); t.setRepeats(false); t.start(); this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); }//GEN-LAST:event_jMenuItem9ActionPerformed private void checkForUpdatesMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkForUpdatesMenuItemActionPerformed new ModuleLoader().load(this,true); }//GEN-LAST:event_checkForUpdatesMenuItemActionPerformed private void runScriptCItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runScriptCItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { save(); File file_selected = new File(fileTab.getToolTipTextAt(fileTab.getSelectedIndex())); runFile2(file_selected.toPath()); } }//GEN-LAST:event_runScriptCItemActionPerformed public static void main(String args[]) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new MainFrame(null).setVisible(true); } }); } public java.net.URL imgURL = getClass().getResource("/org/domainmath/gui/resources/DomainMath.png"); public Image icon = Toolkit.getDefaultToolkit().getImage(imgURL); // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem AboutItem; private javax.swing.JButton addButton; private javax.swing.JMenuItem arrayEditItem; private javax.swing.JButton browseButton; private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JMenuItem checkForUpdatesMenuItem; private javax.swing.JMenuItem clearAllBreakpointsItem; private javax.swing.JMenuItem clearOutWindowItem; private javax.swing.JMenuItem closeAllItem; private javax.swing.JMenuItem closeItem; private javax.swing.JMenuItem codeEditorItem; private javax.swing.JButton connectButton; private javax.swing.JMenuItem connectItem; private javax.swing.JMenuItem consoleItem; private javax.swing.JMenuItem continueItem; private javax.swing.JMenuItem copyItem; private javax.swing.JMenuItem cutItem; private javax.swing.JMenu debugMenu; private javax.swing.JMenuItem debugScriptMenuItem; private javax.swing.JMenuItem deleteItem; public static javax.swing.JComboBox dirComboBox; private javax.swing.JButton disconnectButton; private javax.swing.JMenuItem disconnectItem; private javax.swing.JMenuItem docPkgItem; private javax.swing.JMenu editMenu; private javax.swing.JMenuItem exitItem; private javax.swing.JMenuItem faqItem; private javax.swing.JMenuItem feedBackItem; private javax.swing.JMenu fileMenu; private javax.swing.JMenuItem filesItem; private javax.swing.JMenuItem findItem; private javax.swing.JMenuItem finishDebugItem; private javax.swing.JMenuItem fltkplotItem; private javax.swing.JButton folderUpButton; private javax.swing.JMenuItem forumItem; private javax.swing.JMenuItem googleItem; private javax.swing.JMenuItem gotoItem; private javax.swing.JMenu helpMenu; private javax.swing.JMenuItem historyItem; private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JButton jButton4; private javax.swing.JButton jButton5; private javax.swing.JButton jButton6; private javax.swing.JButton jButton7; private javax.swing.JButton jButton8; private javax.swing.JLabel jLabel1; private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenu jMenu3; private javax.swing.JMenuBar jMenuBar1; 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.JMenuItem jMenuItem6; private javax.swing.JMenuItem jMenuItem7; private javax.swing.JMenuItem jMenuItem8; private javax.swing.JMenuItem jMenuItem9; private javax.swing.JPanel jPanel1; private javax.swing.JPopupMenu.Separator jSeparator1; private javax.swing.JPopupMenu.Separator jSeparator10; private javax.swing.JPopupMenu.Separator jSeparator11; private javax.swing.JPopupMenu.Separator jSeparator12; private javax.swing.JToolBar.Separator jSeparator13; private javax.swing.JPopupMenu.Separator jSeparator14; private javax.swing.JToolBar.Separator jSeparator15; private javax.swing.JPopupMenu.Separator jSeparator17; private javax.swing.JPopupMenu.Separator jSeparator18; private javax.swing.JPopupMenu.Separator jSeparator19; private javax.swing.JPopupMenu.Separator jSeparator2; private javax.swing.JPopupMenu.Separator jSeparator20; private javax.swing.JPopupMenu.Separator jSeparator21; private javax.swing.JPopupMenu.Separator jSeparator22; private javax.swing.JPopupMenu.Separator jSeparator23; private javax.swing.JPopupMenu.Separator jSeparator24; private javax.swing.JPopupMenu.Separator jSeparator25; private javax.swing.JPopupMenu.Separator jSeparator29; private javax.swing.JPopupMenu.Separator jSeparator3; private javax.swing.JToolBar.Separator jSeparator4; private javax.swing.JPopupMenu.Separator jSeparator5; private javax.swing.JPopupMenu.Separator jSeparator6; private javax.swing.JPopupMenu.Separator jSeparator7; private javax.swing.JPopupMenu.Separator jSeparator8; private javax.swing.JToolBar.Separator jSeparator9; private javax.swing.JToolBar jToolBar1; private javax.swing.JMenuItem newFileItem; private javax.swing.JMenuItem nextWindowItem; private javax.swing.JMenuItem octaveCmdItem; private javax.swing.JMenuItem octaveInfoItem; private javax.swing.JMenuItem onlineHelpItem; private javax.swing.JMenuItem openItem; private javax.swing.JMenuItem pasteItem; private javax.swing.JMenuItem pathsItem; private javax.swing.JMenu pkgMenu; private javax.swing.JMenuItem pkgsItem; private javax.swing.JMenuItem preferencesItem; private javax.swing.JMenuItem previousWindowItem; private javax.swing.JMenuItem printFileItem; private javax.swing.JMenuItem printItem; private javax.swing.JMenuItem quickHelpItem; private javax.swing.JMenuItem redoItem; private javax.swing.JMenuItem referenceItem; private javax.swing.JMenu referenceMenu; private javax.swing.JMenuItem removeToggleBreakpointItem; private javax.swing.JMenuItem replaceItem; private javax.swing.JMenuItem reportBugItem; private javax.swing.JMenuItem runScriptCItem; private javax.swing.JMenuItem runScriptItem; private javax.swing.JMenuItem saveAllItem; private javax.swing.JMenuItem saveAsItem; private javax.swing.JMenuItem saveFileItem; private javax.swing.JMenuItem savePlotItem; private javax.swing.JMenuItem selectAllItem; private javax.swing.JMenuItem stepInItem; private javax.swing.JMenuItem stepItem; private javax.swing.JMenuItem stepOutItem; private javax.swing.JMenuItem testScriptMenuItem; private javax.swing.JMenuItem toggleBreakpointItem; private javax.swing.JMenu toolsMenu; private javax.swing.JMenuItem undoItem; private javax.swing.JMenuItem wikiItem; private javax.swing.JMenuItem windowsItem; private javax.swing.JMenuItem workspaceItem; // End of variables declaration//GEN-END:variables private static class DynamicView extends View { private int id; /** * Constructor. * * @param title the view title * @param icon the view icon * @param component the view component * @param id the view id */ DynamicView(String title, Icon icon, Component component, int id) { super(title, icon, component); this.id = id; } /** * Returns the view id. * * @return the view id */ public int getId() { return id; } } }