⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vfsbrowser.java

📁 用java 编写的源码开放的文本编辑器。有很多有用的特性
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	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 + -