📄 remotedir.java
字号:
/* * 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 2 * 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, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */package net.sf.jftp.gui;import net.sf.jftp.gui.framework.*;import net.sf.jftp.config.*;import net.sf.jftp.net.*;import net.sf.jftp.util.*;import net.sf.jftp.*;import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;import javax.swing.event.*;import java.util.*;public class RemoteDir extends DirPanel implements ListSelectionListener, ActionListener, ConnectionListener, KeyListener{ HImageButton deleteButton; HImageButton mkdirButton; HImageButton cmdButton; HImageButton refreshButton; HImageButton cdButton; HImageButton uploadButton; HImageButton downloadButton; //HImageButton openButton; static final String deleteString = "rm"; static final String mkdirString = "mkdir"; static final String refreshString = "fresh"; static final String cdString = "cd"; static final String cmdString = "cmd"; static final String downloadString = "<-"; static final String uploadString = "->"; //static final String openString = "open"; private DirCanvas label = new DirCanvas(this); private boolean pathChanged = true; private boolean firstGui = true; private int pos=0; private JPanel p = new JPanel(); private BorderPanel buttonPanel = new BorderPanel(); private JPanel currDirPanel = new JPanel(); private DefaultListModel jlm; private JScrollPane jsp = new JScrollPane(jl); private int tmpindex = -1; private Hashtable dummy = new Hashtable(); private HImageButton list = new HImageButton(Settings.listImage,"list","Show remote listing...",this); private HImageButton transferType = new HImageButton(Settings.typeImage,"type","Toggle transfer type...",this);public RemoteDir(){ type = "remote"; con = new FilesystemConnection(); con.addConnectionListener(this); if(!con.chdir("/")) con.chdir("C:\\");}public RemoteDir(String path){ type = "remote"; path = path; con = new FilesystemConnection(); con.addConnectionListener(this); con.chdir(path);} public void gui_init() { setLayout(new BorderLayout()); currDirPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.LEFT)); buttonPanel.left = false; deleteButton = new HImageButton(Settings.deleteImage,deleteString,"Delete selected",this); deleteButton.setToolTipText("Delete selected"); mkdirButton = new HImageButton(Settings.mkdirImage,mkdirString,"Create a new directory",this); mkdirButton.setToolTipText("Create directory"); refreshButton = new HImageButton(Settings.refreshImage,refreshString,"Refresh current directory",this); refreshButton.setToolTipText("Refresh directory"); cdButton = new HImageButton(Settings.cdImage,cdString,"Change directory",this); cdButton.setToolTipText("Change directory"); cmdButton = new HImageButton(Settings.cmdImage,cmdString,"Execute remote command",this); cmdButton.setToolTipText("Execute remote command"); downloadButton = new HImageButton(Settings.downloadImage,downloadString,"Download selected",this); downloadButton.setToolTipText("Download selected"); //openButton = new HImageButton(Settings.openImage,openString,"Connect to server",this); //openButton.setToolTipText("Connect"); setLabel(); label.setSize(getSize().width-10, 24); currDirPanel.add(label); currDirPanel.setSize(getSize().width-10, 32); label.setSize(getSize().width-20, 24); p.setLayout(new BorderLayout()); p.add("North", currDirPanel); buttonPanel.add(downloadButton); buttonPanel.add(new JLabel(" ")); //buttonPanel.add(openButton); //buttonPanel.add(new JLabel(" ")); buttonPanel.add(refreshButton); buttonPanel.add(new JLabel(" ")); buttonPanel.add(mkdirButton); buttonPanel.add(cdButton); buttonPanel.add(deleteButton); buttonPanel.add(new JLabel(" ")); buttonPanel.add(cmdButton); buttonPanel.add(list); buttonPanel.add(transferType); buttonPanel.add(new JLabel(" ")); buttonPanel.setVisible(true); buttonPanel.setSize(getSize().width-10, 32); p.add("West", buttonPanel); add("North", p); //setDirList(true); jlm=new DefaultListModel(); jl=new JList(jlm); jl.setCellRenderer(new DirCellRenderer()); jl.setVisibleRowCount(Settings.visibleFileRows); jl.addListSelectionListener(this); jl.addKeyListener(this); // add this becaus we need to fetch only doubleclicks MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { if(JFtp.uiBlocked) return; //System.out.println("DirEntryListener::"); if (e.getClickCount() == 2) { //System.out.println("2xList selection: "+jl.getSelectedValue().toString()); int index = jl.getSelectedIndex()-1; // mousewheel bugfix if(index < -1) return; String tgt=(String)jl.getSelectedValue().toString(); if (index < 0) { if(JFtp.mainFrame != null) JFtp.mainFrame.setCursor(Cursor.WAIT_CURSOR); con.chdir(path+tgt); if(JFtp.mainFrame != null) JFtp.mainFrame.setCursor(Cursor.DEFAULT_CURSOR); } else if(dirEntry == null || dirEntry.length < index || dirEntry[index] == null) return; else if (dirEntry[index].isDirectory()) { con.chdir(path+tgt); } else if(dirEntry[index].isLink()) { if(!con.chdir(path+tgt)) { showContentWindow(path + dirEntry[index].toString(), dirEntry[index]); //blockedTransfer(index); } } else { showContentWindow(path + dirEntry[index].toString(), dirEntry[index]); //blockedTransfer(index); } } } }; jl.addMouseListener(mouseListener); jsp = new JScrollPane(jl); jsp.setSize(getSize().width-20, getSize().height-72); add("Center", jsp); jsp.setVisible(true); setVisible(true); } public void setViewPort() { } private void setLabel() { if(con instanceof FilesystemConnection) label.setText("Filesystem: "+cutPath(path)); else if(con instanceof FtpConnection) label.setText("Ftp: "+cutPath(path)); else if(con instanceof SftpConnection) label.setText("Sftp: "+cutPath(path)); else label.setText(cutPath(path)); } public void gui(boolean fakeInit) { if (firstGui) { gui_init(); firstGui=false; } setLabel(); if(con instanceof FtpConnection) { list.show(); cmdButton.show(); transferType.show(); } else { list.hide(); cmdButton.hide(); transferType.hide(); } if (!fakeInit) { setDirList(false); } //TODO Log.debug("invalidate()"); invalidate(); validate(); //TODO .debug("validated."); } public void setDirList(boolean fakeInit) { jlm = new DefaultListModel(); DirEntry dwn = new DirEntry("..",this); dwn.setDirectory(); jlm.addElement(dwn); if(!fakeInit) { if(pathChanged) { pathChanged = false; //TODO .debug("before DirLister"); DirLister dir = new DirLister(con); while(!dir.finished) LocalIO.pause(10); if(dir.isOk()) { //TODO .debug("dir is ok"); length = dir.getLength(); dirEntry = new DirEntry[length]; files = dir.list(); String fSize[] = dir.sList(); int perms[] = dir.getPermissions(); // --------- sorting aphabetically ------------ if(Settings.sortDir) { String[] tmpx = new String[length]; //if(fSize != null) System.out.println(":"+length+":"+fSize.length+":"+files.length); int pLength = length; if(perms != null) pLength = perms.length; //System.out.println(files.length + ":" + fSize.length+":"+ pLength + ":"+ length); if(fSize.length != files.length || pLength != files.length || length != files.length) System.out.println("Sort mismatch - hopefully ignoring it..."); for(int x=0; x<length; x++) { if(perms != null) tmpx[x] = files[x] + "@@@" + fSize[x] + "@@@" + perms[x]; else tmpx[x] = files[x] + "@@@" + fSize[x]; } LocalIO.sortStrings(tmpx); for(int y=0; y<length; y++) { files[y] = tmpx[y].substring(0,tmpx[y].indexOf("@@@")); String tmp = tmpx[y].substring(tmpx[y].indexOf("@@@")+3); if(tmp.indexOf("@@@") > 0) fSize[y] = tmp.substring(0,tmp.lastIndexOf("@@@")); else fSize[y] = tmp; if(perms != null) perms[y] = Integer.parseInt(tmpx[y].substring(tmpx[y].lastIndexOf("@@@")+3)); } } // ----------- end sorting -------------------- for(int i=0; i<length; i++) { //System.out.println(files[i]); if(files == null || files[i] == null) { //System.out.println("Critical error, files or files[i] is null!\nPlease report when and how this happened..."); System.out.println("skipping setDirList, files or files[i] is null!"); return; //System.exit(0); } //Log.debug("adding: " + files[i]); dirEntry[i] = new DirEntry(files[i],this); if(dirEntry[i] == null) { System.out.println("\nskipping setDirList, dirEntry[i] is null!"); return; } if(dirEntry[i].file == null) { System.out.println("\nskipping setDirList, dirEntry[i].file is null!"); return; } if(perms != null) dirEntry[i].setPermission(perms[i]); dirEntry[i].setFileSize(Long.parseLong(fSize[i])); if(dirEntry[i].file.endsWith("/")) { dirEntry[i].setDirectory(); } else { dirEntry[i].setFile(); } if(dirEntry[i].file.endsWith("###")) { dirEntry[i].setLink(); } jlm.addElement(dirEntry[i]); } } else { Log.debug("Not a directory: " + path); } } //System.out.println("length: "+dirEntry.length); } jl.setModel(jlm); jl.grabFocus(); jl.setSelectedIndex(0); //Log.debug("ListModel set."); //System.out.print("x"); //new Exception().printStackTrace(); //System.out.println("\n\n\n"); } public void actionPerformed(ActionEvent e) { if(JFtp.uiBlocked) return; if(e.getActionCommand().equals("rm")) { lock(false); if(Settings.getAskToDelete()) { if(!UITool.askToDelete(this)) return; } for(int i=0; i<length;i++) { if(dirEntry[i].selected) { con.removeFileOrDir(dirEntry[i].file); } } unlock(false); fresh(); } else if(e.getActionCommand().equals("mkdir")) { Creator c = new Creator("Create:",con); fresh(); } else if(e.getActionCommand().equals("cmd")) { if(!(con instanceof FtpConnection)) { Log.debug("This feature is for ftp only."); return; } RemoteCommand rc = new RemoteCommand(); fresh(); } else if(e.getActionCommand().equals("cd")) { PathChanger pthc = new PathChanger("remote"); fresh(); //String tmp = UITool.getPathFromDialog(); //setPath(tmp); } else if(e.getActionCommand().equals("fresh")) { fresh(); } else if(e.getActionCommand().equals("->")) { blockedTransfer(-2); } else if(e.getActionCommand().equals("<-")) { blockedTransfer(-2); } else if(e.getActionCommand().equals("list")) { try { java.net.URL url = new java.io.File(Settings.ls_out).toURL(); Displayer d = new Displayer(url); } catch(java.net.MalformedURLException ex) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -