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

📄 vfsbrowser.java

📁 Java写的文本编辑器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	}	/**	 * Returns the file name filter glob.	 * @since jEdit 3.2pre2	 */	public String getFilenameFilter()	{		if(filterCheckbox.isSelected())		{			String filter = filterField.getText();			if(filter.length() == 0)				return "*";			else				return filter;		}		else			return "*";	}	public void setFilenameFilter(String filter)	{		if(filter == null || filter.length() == 0 || filter.equals("*"))			filterCheckbox.setSelected(false);		else		{			filterCheckbox.setSelected(true);			filterField.setText(filter);		}	}	public BrowserView getBrowserView()	{		return browserView;	}	public VFS.DirectoryEntry[] getSelectedFiles()	{		return browserView.getSelectedFiles();	}	public void addBrowserListener(BrowserListener l)	{		listenerList.add(BrowserListener.class,l);	}	public void removeBrowserListener(BrowserListener l)	{		listenerList.remove(BrowserListener.class,l);	}	// package-private members	void directoryLoaded(final VFS.DirectoryEntry[] list)	{		SwingUtilities.invokeLater(new Runnable()		{			public void run()			{				boolean filterEnabled = filterCheckbox.isSelected();				Vector directoryVector = new Vector();				if(list == null)				{					browserView.directoryLoaded(directoryVector);					return;				}				for(int i = 0; i < list.length; i++)				{					VFS.DirectoryEntry file = list[i];					if(file.hidden && !showHiddenFiles)						continue;					if(file.type == VFS.DirectoryEntry.FILE						&& filterEnabled						&& filenameFilter != null						&& !filenameFilter.isMatch(file.name))						continue;					directoryVector.addElement(file);				}				if(sortFiles)				{					MiscUtilities.quicksort(directoryVector,						new FileCompare());				}				browserView.directoryLoaded(directoryVector);			}		});	}	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;			}			if(sortIgnoreCase)			{				return file1.name.toLowerCase().compareTo(					file2.name.toLowerCase());			}			else			{				return file1.name.compareTo(file2.name);			}		}	}	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);			}		}	}	void filesActivated()	{		VFS.DirectoryEntry[] selectedFiles = browserView.getSelectedFiles();		for(int i = 0; i < selectedFiles.length; i++)		{			VFS.DirectoryEntry file = selectedFiles[i];			if(file.type == VFS.DirectoryEntry.DIRECTORY				|| file.type == VFS.DirectoryEntry.FILESYSTEM)				setDirectory(file.path);			else if(mode == BROWSER)			{				Buffer buffer = jEdit.getBuffer(file.path);				if(buffer == null)					buffer = jEdit.openFile(null,file.path);				else if(doubleClickClose)				{					jEdit.closeBuffer(view,buffer);					break;				}				if(buffer != null)				{					if(view == null)						view = jEdit.newView(null,buffer);					else						view.setBuffer(buffer);				}			}			else			{				// if a file is selected in OPEN_DIALOG or				// SAVE_DIALOG mode, just let the listener(s)				// handle it			}		}		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);			}		}	}	// has to be package-private so that BrowserIORequest can call it	void endRequest()	{		requestRunning = false;	}	// private members	private EventListenerList listenerList;	private View view;	private String path;	private HistoryTextField pathField;	private JCheckBox filterCheckbox;	private HistoryTextField filterField;	private JButton up, reload, roots, home, synchronize;	private BrowserView browserView;	private RE filenameFilter;	private int mode;	private boolean multipleSelection;	private boolean showHiddenFiles;	private boolean sortFiles;	private boolean sortMixFilesAndDirs;	private boolean sortIgnoreCase;	private boolean doubleClickClose;	private boolean requestRunning;	private JToolBar createToolBar()	{		JToolBar toolBar = new JToolBar();		toolBar.setFloatable(false);		toolBar.putClientProperty("JToolBar.isRollover",Boolean.TRUE);		toolBar.add(up = createToolButton("up"));		// see comment in UpMenuButton class to find out why we		// pass it the up button		toolBar.add(new UpMenuButton(up));		toolBar.add(reload = createToolButton("reload"));		toolBar.addSeparator();		toolBar.add(roots = createToolButton("roots"));		toolBar.add(home = createToolButton("home"));		toolBar.add(synchronize = createToolButton("synchronize"));		toolBar.addSeparator();		toolBar.add(new MoreMenuButton());		toolBar.add(Box.createGlue());		return toolBar;	}	private JButton createToolButton(String name)	{		JButton button = new JButton();		String prefix = "vfs.browser.";		button.setIcon(GUIUtilities.loadIcon(jEdit.getProperty(			prefix + name + ".icon")));		button.setToolTipText(jEdit.getProperty(prefix + name + ".label"));		button.setRequestFocusEnabled(false);		button.setMargin(new Insets(0,0,0,0));		button.addActionListener(new ActionHandler());		return button;	}	private void handleViewUpdate(ViewUpdate vmsg)	{		if(vmsg.getWhat() == ViewUpdate.CLOSED			&& vmsg.getView() == view)			view = null;	}	private void handleBufferUpdate(BufferUpdate bmsg)	{		if(bmsg.getWhat() == BufferUpdate.CREATED			|| bmsg.getWhat() == BufferUpdate.CLOSED)			browserView.updateFileView();		else if(bmsg.getWhat() == BufferUpdate.DIRTY_CHANGED)		{			// if a buffer becomes clean, it means it was			// saved. So we repaint the browser view, in			// case it was a 'save as'			if(!bmsg.getBuffer().isDirty())				browserView.updateFileView();		}	}	private void propertiesChanged()	{		showHiddenFiles = jEdit.getBooleanProperty("vfs.browser.showHiddenFiles");		sortFiles = jEdit.getBooleanProperty("vfs.browser.sortFiles");		sortMixFilesAndDirs = jEdit.getBooleanProperty("vfs.browser.sortMixFilesAndDirs");		sortIgnoreCase = jEdit.getBooleanProperty("vfs.browser.sortIgnoreCase");		doubleClickClose = jEdit.getBooleanProperty("vfs.browser.doubleClickClose");		browserView.propertiesChanged();		if(path != null)			reloadDirectory();	}	/* We do this stuff because the browser is not able to handle	 * more than one request yet */	private boolean startRequest()	{		if(requestRunning)		{			// dump stack trace for debugging purposes			Log.log(Log.DEBUG,this,new Throwable("For debugging purposes"));			GUIUtilities.error(this,"browser-multiple-io",null);			return false;		}		else		{			requestRunning = true;			return true;		}	}	private void updateFilterEnabled()	{		filterField.setEnabled(filterCheckbox.isSelected());	}	class ActionHandler implements ActionListener	{		public void actionPerformed(ActionEvent evt)		{			Object source = evt.getSource();			if(source == pathField || source == filterField				|| source == filterCheckbox)			{				updateFilterEnabled();				String path = pathField.getText();				if(path != null)					setDirectory(path);			}			else if(source == up)			{				VFS vfs = VFSManager.getVFSForPath(path);				setDirectory(vfs.getParentOfPath(path));			}			else if(source == reload)				reloadDirectory();			else if(source == roots)				setDirectory(FileRootsVFS.PROTOCOL + ":");			else if(source == home)				setDirectory(System.getProperty("user.home"));			else if(source == synchronize)			{				if(view != null)				{					Buffer buffer = view.getBuffer();					setDirectory(buffer.getVFS().getParentOfPath(						buffer.getPath()));				}				else					getToolkit().beep();			}		}	}	class UpMenuButton extends JButton	{		UpMenuButton(JButton upButton)		{			// for a better-looking GUI, we display the popup			// as if it is from the 'up' button, not the arrow			// to the right of it			this.upButton = upButton;			setIcon(GUIUtilities.loadIcon(				jEdit.getProperty("vfs.browser.up-menu.icon")));			UpMenuButton.this.setToolTipText(jEdit.getProperty(				"vfs.browser.up-menu.label"));			UpMenuButton.this.setRequestFocusEnabled(false);			setMargin(new Insets(0,0,0,0));			UpMenuButton.this.addMouseListener(new MouseHandler());		}		// private members		private JButton upButton;		private JPopupMenu popup;		private void createPopup()		{			popup = new JPopupMenu();			ActionHandler actionHandler = new ActionHandler();			VFS vfs = VFSManager.getVFSForPath(path);			String dir = vfs.getParentOfPath(path);			for(;;)			{				JMenuItem menuItem = new JMenuItem(dir);				menuItem.addActionListener(actionHandler);				popup.add(menuItem);				String parentDir = vfs.getParentOfPath(dir);				if(parentDir.equals(dir))					break;				else					dir = parentDir;			}		}		class ActionHandler implements ActionListener		{			public void actionPerformed(ActionEvent evt)			{				setDirectory(evt.getActionCommand());			}		}		class MouseHandler extends MouseAdapter		{			public void mousePressed(MouseEvent evt)			{				if(popup == null || !popup.isVisible())				{					createPopup();					popup.show(upButton,0,upButton.getHeight());				}				else				{					popup.setVisible(false);					popup = null;				}			}		}	}	class MoreMenuButton extends JButton	{		MoreMenuButton()		{			setText(jEdit.getProperty("vfs.browser.more.label"));			setIcon(GUIUtilities.loadIcon(jEdit.getProperty(				"vfs.browser.more.icon")));			setHorizontalTextPosition(SwingConstants.LEFT);			MoreMenuButton.this.setRequestFocusEnabled(false);			setMargin(new Insets(0,0,0,0));			MoreMenuButton.this.addMouseListener(new MouseHandler());		}		// private members		JPopupMenu popup;		class MouseHandler extends MouseAdapter		{			public void mousePressed(MouseEvent evt)			{				if(popup == null || !popup.isVisible())				{					popup = new BrowserPopupMenu(VFSBrowser.this,null);					popup.show(MoreMenuButton.this,0,MoreMenuButton.this.getHeight());				}				else				{					popup.setVisible(false);					popup = null;				}			}		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -