/* * Copyright (C) 2014 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.pathsview; import java.awt.Component; import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.net.URI; import java.nio.file.Paths; import java.util.StringTokenizer; import javax.swing.BorderFactory; import javax.swing.DefaultListModel; import javax.swing.JFileChooser; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.ListCellRenderer; import javax.swing.SwingWorker; import javax.swing.filechooser.FileSystemView; import org.domainmath.gui.MainFrame; import org.domainmath.gui.dialog.Msg; /** * * @author Auto Test */ public class PathsPanel extends javax.swing.JPanel { private DefaultListModel model; private final String dataFile; /** * Creates new form PathsPanel * @param dataFile */ public PathsPanel(String dataFile) { initComponents(); model =new DefaultListModel(); this.dataFile=dataFile; setPaths(dataFile); this.pathsList.setCellRenderer(new PathsCellRenderer()); this.pathsList.setModel(model); setPopMenu(); } public final void setPaths(String datafile) { String line; try { FileInputStream fin = new FileInputStream(datafile); BufferedReader br = new BufferedReader(new InputStreamReader(fin)); try { while((line=br.readLine()) != null) { StringTokenizer s2 = new StringTokenizer(line,File.pathSeparator); while(s2.hasMoreTokens()) { model.addElement(s2.nextToken()); } } br.close(); } catch (IOException ex) { } } catch (FileNotFoundException ex) { } } private void showPopup(MouseEvent e){ if(e.isPopupTrigger()) { this.jPopupMenu1.show(e.getComponent(), e.getX(), e.getY()); } } public void addFolder() { JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setMultiSelectionEnabled(true); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int returnVal = fc.showOpenDialog(this); File selected_dir[]; String cmdAddPath; String savePath; if (returnVal == JFileChooser.APPROVE_OPTION) { selected_dir = fc.getSelectedFiles(); for(int i=0; i<selected_dir.length; i++) { int showConfirmDialog = JOptionPane.showConfirmDialog(this,"Do you want to add subfolders?","Add Subfolders",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if(showConfirmDialog== JOptionPane.YES_OPTION) { cmdAddPath = "addpath(genpath("+"'"+selected_dir[i].getAbsolutePath()+"'));"; savePath = "savepath();"; MainFrame.octavePanel.evaluate(cmdAddPath); MainFrame.octavePanel.evaluate(savePath); MainFrame.octavePanel.evaluate("DomainMath_OctavePaths('"+dataFile+"');"); reload(); }else{ cmdAddPath = "addpath("+"'"+selected_dir[i].getAbsolutePath()+"');"; savePath = "savepath();"; MainFrame.octavePanel.evaluate(cmdAddPath); MainFrame.octavePanel.evaluate(savePath); MainFrame.octavePanel.evaluate("DomainMath_OctavePaths('"+dataFile+"');"); reload(); } } } } public void reload() { new DataTask().execute(); } public void open(String dir) { try { URI uri = Paths.get(dir).toUri(); Desktop desktop=Desktop.getDesktop(); desktop.browse(uri); } catch (IOException | NullPointerException ex) { } } public void remove(String dir){ try { if(!dir.equals("")){ if(!dir.equals(".")){ String rmPath ="rmpath("+"'"+dir+"');"; String savePath = "savepath();"; MainFrame.octavePanel.evaluate(rmPath); MainFrame.octavePanel.evaluate(savePath); MainFrame.octavePanel.evaluate("DomainMath_OctavePaths('"+dataFile+"');"); reload(); } }else{ new Msg(null,"Please choose a path..."); } }catch(Exception ex) { new Msg(null,"Please choose a path..."); } } /** * 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() { jPopupMenu1 = new javax.swing.JPopupMenu(); openItem = new javax.swing.JMenuItem(); addFolderItem = new javax.swing.JMenuItem(); removeFolderItem = new javax.swing.JMenuItem(); refreshItem = new javax.swing.JMenuItem(); jPanel1 = new javax.swing.JPanel(); jScrollPane1 = new javax.swing.JScrollPane(); pathsList = new javax.swing.JList(); jToolBar1 = new javax.swing.JToolBar(); openButton = new javax.swing.JButton(); addFolderButton = new javax.swing.JButton(); removeFolderButton = new javax.swing.JButton(); refreshButton = new javax.swing.JButton(); openItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_16.png"))); // NOI18N openItem.setText("Open"); openItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openItemActionPerformed(evt); } }); jPopupMenu1.add(openItem); addFolderItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_add_16.png"))); // NOI18N addFolderItem.setText("Add Folder"); addFolderItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addFolderItemActionPerformed(evt); } }); jPopupMenu1.add(addFolderItem); removeFolderItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_delete_16.png"))); // NOI18N removeFolderItem.setText("Remove"); removeFolderItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeFolderItemActionPerformed(evt); } }); jPopupMenu1.add(removeFolderItem); refreshItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/view-refresh-7.png"))); // NOI18N refreshItem.setText("Refresh"); refreshItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { refreshItemActionPerformed(evt); } }); jPopupMenu1.add(refreshItem); setBackground(new java.awt.Color(0, 153, 0)); setLayout(new java.awt.BorderLayout()); jPanel1.setLayout(new java.awt.BorderLayout()); jScrollPane1.setBorder(null); jScrollPane1.setViewportView(pathsList); jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER); jToolBar1.setFloatable(false); jToolBar1.setOrientation(javax.swing.SwingConstants.VERTICAL); jToolBar1.setRollover(true); openButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_16.png"))); // NOI18N openButton.setToolTipText("Open selected folder"); openButton.setFocusable(false); openButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); openButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); openButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openButtonActionPerformed(evt); } }); jToolBar1.add(openButton); addFolderButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_add_16.png"))); // NOI18N addFolderButton.setToolTipText("Add a folder"); addFolderButton.setFocusable(false); addFolderButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); addFolderButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); addFolderButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addFolderButtonActionPerformed(evt); } }); jToolBar1.add(addFolderButton); removeFolderButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_delete_16.png"))); // NOI18N removeFolderButton.setToolTipText("Reomve path"); removeFolderButton.setFocusable(false); removeFolderButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); removeFolderButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); removeFolderButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeFolderButtonActionPerformed(evt); } }); jToolBar1.add(removeFolderButton); refreshButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/view-refresh-7.png"))); // NOI18N refreshButton.setToolTipText("Reload paths list"); refreshButton.setFocusable(false); refreshButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); refreshButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); refreshButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { refreshButtonActionPerformed(evt); } }); jToolBar1.add(refreshButton); jPanel1.add(jToolBar1, java.awt.BorderLayout.LINE_START); add(jPanel1, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed if(pathsList.getSelectedIndex()!= -1) { open(pathsList.getSelectedValue().toString()); } }//GEN-LAST:event_openButtonActionPerformed private void addFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addFolderButtonActionPerformed addFolder(); }//GEN-LAST:event_addFolderButtonActionPerformed private void removeFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeFolderButtonActionPerformed if(pathsList.getSelectedIndex()!= -1) { int showConfirmDialog = JOptionPane.showConfirmDialog(this, "Do you want remove selected paths?","Remove Path" ,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(showConfirmDialog==JOptionPane.YES_OPTION) { int[] selectedIndices = pathsList.getSelectedIndices(); for(int i:selectedIndices) { remove(model.getElementAt(i).toString()); } } } }//GEN-LAST:event_removeFolderButtonActionPerformed private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed reload(); }//GEN-LAST:event_refreshButtonActionPerformed private void openItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openItemActionPerformed if(pathsList.getSelectedIndex()!= -1) { open(pathsList.getSelectedValue().toString()); } }//GEN-LAST:event_openItemActionPerformed private void addFolderItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addFolderItemActionPerformed addFolder(); }//GEN-LAST:event_addFolderItemActionPerformed private void removeFolderItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeFolderItemActionPerformed if(pathsList.getSelectedIndex()!= -1) { int showConfirmDialog = JOptionPane.showConfirmDialog(this, "Do you want remove selected paths?","Remove Path" ,JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if(showConfirmDialog==JOptionPane.YES_OPTION) { int[] selectedIndices = pathsList.getSelectedIndices(); for(int i:selectedIndices) { remove(model.getElementAt(i).toString()); } } } }//GEN-LAST:event_removeFolderItemActionPerformed private void refreshItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshItemActionPerformed reload(); }//GEN-LAST:event_refreshItemActionPerformed private void setPopMenu() { this.pathsList.addMouseListener(new MouseListener() { @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { showPopup(e); } @Override public void mouseReleased(MouseEvent e) { showPopup(e); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } }); } class PathsCellRenderer extends JLabel implements ListCellRenderer { public PathsCellRenderer() { setOpaque(true); } @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { FileSystemView fsv = FileSystemView.getFileSystemView(); setText(value.toString()); setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3)); setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/pathsview/resources/folder_16.png"))); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } return this; } } //PathsCellRenderer private class DataTask extends SwingWorker<Void, Void> { @Override protected Void doInBackground() { int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { model.removeAllElements(); setPaths(dataFile); } }; javax.swing.Timer t= new javax.swing.Timer(delay, taskPerformer); t.setRepeats(false); t.start(); return null; } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addFolderButton; private javax.swing.JMenuItem addFolderItem; private javax.swing.JPanel jPanel1; private javax.swing.JPopupMenu jPopupMenu1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JToolBar jToolBar1; private javax.swing.JButton openButton; private javax.swing.JMenuItem openItem; private javax.swing.JList pathsList; private javax.swing.JButton refreshButton; private javax.swing.JMenuItem refreshItem; private javax.swing.JButton removeFolderButton; private javax.swing.JMenuItem removeFolderItem; // End of variables declaration//GEN-END:variables } //PathsPanel