📄 vfsbrowser.java
字号:
public void reloadDirectory() { // used by FTP plugin to clear directory cache VFSManager.getVFSForPath(path).reloadDirectory(path); updateFilenameFilter(); browserView.loadDirectory(path); } //}}} //{{{ delete() method /** * Note that all files must be on the same VFS. */ public void delete(VFS.DirectoryEntry[] files) { String dialogType; if(MiscUtilities.isURL(files[0].deletePath) && FavoritesVFS.PROTOCOL.equals( MiscUtilities.getProtocolOfURL(files[0].deletePath))) { dialogType = "vfs.browser.delete-favorites"; } else { dialogType = "vfs.browser.delete-confirm"; } StringBuffer buf = new StringBuffer(); for(int i = 0; i < files.length; i++) { buf.append(files[i].path); buf.append('\n'); } Object[] args = { buf.toString() }; int result = GUIUtilities.confirm(this,dialogType,args, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if(result != JOptionPane.YES_OPTION) return; VFS vfs = VFSManager.getVFSForPath(files[0].deletePath); if(!startRequest()) return; for(int i = 0; i < files.length; i++) { Object session = vfs.createVFSSession(files[i].deletePath,this); if(session == null) continue; VFSManager.runInWorkThread(new BrowserIORequest( BrowserIORequest.DELETE,this, session,vfs,files[i].deletePath, null,null,false)); } } //}}} //{{{ rename() method public void rename(String from) { VFS vfs = VFSManager.getVFSForPath(from); String filename = vfs.getFileName(from); String[] args = { filename }; String to = GUIUtilities.input(this,"vfs.browser.rename", args,filename); if(to == null) return; to = MiscUtilities.constructPath(vfs.getParentOfPath(from),to); Object session = vfs.createVFSSession(from,this); if(session == null) return; if(!startRequest()) return; VFSManager.runInWorkThread(new BrowserIORequest( BrowserIORequest.RENAME,this, session,vfs,from,to,null,false)); } //}}} //{{{ mkdir() method public void mkdir() { String newDirectory = GUIUtilities.input(this,"vfs.browser.mkdir",null); if(newDirectory == null) return; // if a directory is selected, create new dir in there. // if a file is selected, create new dir inside its parent. VFS.DirectoryEntry[] selected = getSelectedFiles(); String parent; if(selected.length == 0) parent = path; else if(selected[0].type == VFS.DirectoryEntry.FILE) { parent = selected[0].path; parent = VFSManager.getVFSForPath(parent) .getParentOfPath(parent); } else parent = selected[0].path; VFS vfs = VFSManager.getVFSForPath(parent); // path is the currently viewed directory in the browser newDirectory = MiscUtilities.constructPath(parent,newDirectory); Object session = vfs.createVFSSession(newDirectory,this); if(session == null) return; if(!startRequest()) return; VFSManager.runInWorkThread(new BrowserIORequest( BrowserIORequest.MKDIR,this, session,vfs,newDirectory,null,null,false)); } //}}} //{{{ newFile() method /** * Creates a new file in the current directory. * @since jEdit 4.0pre2 */ public void newFile() { VFS.DirectoryEntry[] selected = getSelectedFiles(); if(selected.length >= 1) { VFS.DirectoryEntry file = selected[0]; if(file.type == VFS.DirectoryEntry.DIRECTORY) jEdit.newFile(view,file.path); else { VFS vfs = VFSManager.getVFSForPath(file.path); jEdit.newFile(view,vfs.getParentOfPath(file.path)); } } else jEdit.newFile(view,path); } //}}} //{{{ searchInDirectory() method /** * Opens a directory search in the current directory. * @since jEdit 4.0pre2 */ public void searchInDirectory() { String path, filter; VFS.DirectoryEntry[] selected = getSelectedFiles(); if(selected.length >= 1) { VFS.DirectoryEntry file = selected[0]; if(file.type == VFS.DirectoryEntry.DIRECTORY) { path = file.path; filter = getFilenameFilter(); } else { VFS vfs = VFSManager.getVFSForPath(file.path); path = vfs.getParentOfPath(file.path); String name = MiscUtilities.getFileName(file.path); String ext = MiscUtilities.getFileExtension(name); filter = (ext == null || ext.length() == 0 ? getFilenameFilter() : "*" + ext); } } else { path = this.path; filter = getFilenameFilter(); } if(path.endsWith("/") || path.endsWith(File.separator)) path = path.substring(0,path.length() - 1); SearchAndReplace.setSearchFileSet(new DirectoryListSet( path,filter,true)); new SearchDialog(view,null,SearchDialog.DIRECTORY); } //}}} //{{{ getBrowserView() method public BrowserView getBrowserView() { return browserView; } //}}} //{{{ getSelectedFiles() method public VFS.DirectoryEntry[] getSelectedFiles() { return browserView.getSelectedFiles(); } //}}} //{{{ addBrowserListener() method public void addBrowserListener(BrowserListener l) { listenerList.add(BrowserListener.class,l); } //}}} //{{{ removeBrowserListener() method public void removeBrowserListener(BrowserListener l) { listenerList.remove(BrowserListener.class,l); } //}}} //{{{ Package-private members String currentEncoding; //{{{ updateFilenameFilter() method void updateFilenameFilter() { try { String filter = filterField.getText(); if(filter.length() == 0) filter = "*"; filenameFilter = new RE(MiscUtilities.globToRE(filter),RE.REG_ICASE); } catch(Exception e) { Log.log(Log.ERROR,VFSBrowser.this,e); String[] args = { filterField.getText(), e.getMessage() }; GUIUtilities.error(this,"vfs.browser.bad-filter",args); } } //}}} //{{{ directoryLoaded() method void directoryLoaded(final DefaultMutableTreeNode node, final boolean loadingRoot, final String path, final VFS.DirectoryEntry[] list) { SwingUtilities.invokeLater(new Runnable() { public void run() { if(loadingRoot) { // This is the new, canonical path VFSBrowser.this.path = path; if(!pathField.getText().equals(path)) pathField.setText(path); pathField.addCurrentToHistory(); } boolean filterEnabled = filterCheckbox.isSelected(); Vector directoryVector = new Vector(); int directories = 0; int files = 0; int invisible = 0; if(list != null) { for(int i = 0; i < list.length; i++) { VFS.DirectoryEntry file = list[i]; if(file.hidden && !showHiddenFiles) { invisible++; continue; } if(file.type == VFS.DirectoryEntry.FILE && mode == CHOOSE_DIRECTORY_DIALOG) { invisible++; continue; } if(file.type == VFS.DirectoryEntry.FILE && filterEnabled && filenameFilter != null && !filenameFilter.isMatch(file.name)) { invisible++; continue; } if(file.type == VFS.DirectoryEntry.FILE) files++; else directories++; directoryVector.addElement(file); } MiscUtilities.quicksort(directoryVector, new FileCompare()); } browserView.directoryLoaded(node,path, directoryVector); // to notify listeners that any existing // selection has been deactivated // turns out under some circumstances this // method can switch the current buffer in // BROWSER mode. // in any case, this is only needed for the // directory chooser (why?), so we add a // check. otherwise poor Rick will go insane. if(mode == CHOOSE_DIRECTORY_DIALOG) filesSelected(); } }); } //}}} //{{{ FileCompare class class FileCompare implements MiscUtilities.Compare { public int compare(Object obj1, Object obj2) { VFS.DirectoryEntry file1 = (VFS.DirectoryEntry)obj1; VFS.DirectoryEntry file2 = (VFS.DirectoryEntry)obj2; if(!sortMixFilesAndDirs) { if(file1.type != file2.type) return file2.type - file1.type; } return MiscUtilities.compareStrings(file1.name, file2.name,sortIgnoreCase); } } //}}} //{{{ filesSelected() method void filesSelected() { VFS.DirectoryEntry[] selectedFiles = browserView.getSelectedFiles(); if(mode == BROWSER) { for(int i = 0; i < selectedFiles.length; i++) { VFS.DirectoryEntry file = selectedFiles[i]; Buffer buffer = jEdit.getBuffer(file.path); if(buffer != null && view != null) view.setBuffer(buffer); } } Object[] listeners = listenerList.getListenerList(); for(int i = 0; i < listeners.length; i++) { if(listeners[i] == BrowserListener.class) { BrowserListener l = (BrowserListener)listeners[i+1]; l.filesSelected(this,selectedFiles); } } } //}}} //{{{ filesActivated() method // canDoubleClickClose set to false when ENTER pressed static final int M_OPEN = 0; static final int M_OPEN_NEW_VIEW = 1; static final int M_OPEN_NEW_PLAIN_VIEW = 2; static final int M_OPEN_NEW_SPLIT = 3; void filesActivated(int mode, boolean canDoubleClickClose) { VFS.DirectoryEntry[] selectedFiles = browserView.getSelectedFiles(); Buffer buffer = null;check_selected: for(int i = 0; i < selectedFiles.length; i++) { VFS.DirectoryEntry file = selectedFiles[i]; if(file.type == VFS.DirectoryEntry.DIRECTORY || file.type == VFS.DirectoryEntry.FILESYSTEM) { if(mode == M_OPEN_NEW_VIEW && this.mode == BROWSER) browseDirectoryInNewWindow(view,file.path); else setDirectory(file.path); } else if(this.mode == BROWSER || this.mode == BROWSER_DIALOG) { Buffer _buffer = jEdit.getBuffer(file.path); if(_buffer == null) { Hashtable props = new Hashtable(); props.put(Buffer.ENCODING,currentEncoding); _buffer = jEdit.openFile(null,null,file.path, false,props); } else if(doubleClickClose && canDoubleClickClose && this.mode != BROWSER_DIALOG && selectedFiles.length == 1) { // close if this buffer is currently // visible in the view. EditPane[] editPanes = view.getEditPanes(); for(int j = 0; j < editPanes.length; j++) { if(editPanes[j].getBuffer() == _buffer) { jEdit.closeBuffer(view,_buffer); return; } } } if(_buffer != null) buffer = _buffer; } else { // if a file is selected in OPEN_DIALOG or // SAVE_DIALOG mode, just let the listener(s) // handle it } } if(buffer != null) { switch(mode) { case M_OPEN: view.setBuffer(buffer); break; case M_OPEN_NEW_VIEW: jEdit.newView(view,buffer,false); break; case M_OPEN_NEW_PLAIN_VIEW: jEdit.newView(view,buffer,true); break; case M_OPEN_NEW_SPLIT: view.splitHorizontally().setBuffer(buffer); break; } } Object[] listeners = listenerList.getListenerList(); for(int i = 0; i < listeners.length; i++) { if(listeners[i] == BrowserListener.class) { BrowserListener l = (BrowserListener)listeners[i+1]; l.filesActivated(this,selectedFiles); } } } //}}} //{{{ endRequest() method void endRequest() { requestRunning = false; } //}}} //}}} //{{{ Private members //{{{ Instance variables private EventListenerList listenerList; private View view; private boolean floating; private String path; private HistoryTextField pathField; private JCheckBox filterCheckbox; private HistoryTextField filterField; private Box toolbarBox; private JToolBar toolbar; private JButton up, reload, roots, home, synchronize, newFile, newDirectory, searchInDirectory; private BrowserView browserView; private RE filenameFilter; private int mode; private boolean multipleSelection; private boolean showHiddenFiles; private boolean sortMixFilesAndDirs; private boolean sortIgnoreCase; private boolean doubleClickClose; private boolean requestRunning; //}}} //{{{ createMenuBar() method
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -