📄 vfsbrowser.java
字号:
private JPanel createMenuBar() { JPanel menuBar = new JPanel(); menuBar.setLayout(new BoxLayout(menuBar,BoxLayout.X_AXIS)); menuBar.setBorder(new EmptyBorder(0,0,1,0)); menuBar.add(new CommandsMenuButton()); menuBar.add(Box.createHorizontalStrut(3)); menuBar.add(new PluginsMenuButton()); menuBar.add(Box.createHorizontalStrut(3)); menuBar.add(new FavoritesMenuButton()); return menuBar; } //}}} //{{{ createToolBar() method private JToolBar createToolBar() { JToolBar toolBar = new JToolBar(); toolBar.setFloatable(false); toolBar.add(up = createToolButton("up")); toolBar.add(reload = createToolButton("reload")); toolBar.add(roots = createToolButton("roots")); toolBar.add(home = createToolButton("home")); toolBar.add(synchronize = createToolButton("synchronize")); if(mode == BROWSER) toolBar.add(newFile = createToolButton("new-file")); toolBar.add(newDirectory = createToolButton("new-directory")); if(mode == BROWSER) toolBar.add(searchInDirectory = createToolButton("search-in-directory")); return toolBar; } //}}} //{{{ createToolButton() method private JButton createToolButton(String name) { JButton button = new RolloverButton(); String prefix = "vfs.browser.commands."; String iconName = jEdit.getProperty( prefix + name + ".icon"); if(iconName != null) { Icon icon = GUIUtilities.loadIcon(iconName); if(icon != null) button.setIcon(icon); else { Log.log(Log.ERROR,this,"Missing icon: " + iconName); } } else Log.log(Log.ERROR,this,"Missing icon name: " + name); button.setToolTipText(jEdit.getProperty(prefix + name + ".label")); button.addActionListener(new ActionHandler()); return button; } //}}} //{{{ propertiesChanged() method private void propertiesChanged() { showHiddenFiles = jEdit.getBooleanProperty("vfs.browser.showHiddenFiles"); sortMixFilesAndDirs = jEdit.getBooleanProperty("vfs.browser.sortMixFilesAndDirs"); sortIgnoreCase = jEdit.getBooleanProperty("vfs.browser.sortIgnoreCase"); doubleClickClose = jEdit.getBooleanProperty("vfs.browser.doubleClickClose"); browserView.propertiesChanged(); if(mode == BROWSER) { boolean showToolbar = jEdit.getBooleanProperty("vfs.browser.showToolbar"); if(showToolbar && toolbar == null) { toolbar = createToolBar(); toolbar.add(Box.createGlue()); toolbarBox.add(toolbar,0); revalidate(); } else if(!showToolbar && toolbar != null) { toolbarBox.remove(toolbar); toolbar = null; revalidate(); } } if(path != null) reloadDirectory(); } //}}} /* We do this stuff because the browser is not able to handle * more than one request yet */ //{{{ startRequest() method 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; } } //}}} //{{{ updateFilterEnabled() method private void updateFilterEnabled() { filterField.setEnabled(filterCheckbox.isSelected()); } //}}} //{{{ maybeReloadDirectory() method private void maybeReloadDirectory(String dir) { // this is a dirty hack and it relies on the fact // that updates for parents are sent before updates // for the changed nodes themselves (if this was not // the case, the browser wouldn't be updated properly // on delete, etc). // // to avoid causing '> 1 request' errors, don't reload // directory if request already active if(requestRunning) return; // save a file -> sends vfs update. if a VFS file dialog box // is shown from the same event frame as the save, the // VFSUpdate will be delivered before the directory is loaded, // and before the path is set. if(path != null) { try { requestRunning = true; browserView.maybeReloadDirectory(dir); } finally { VFSManager.runInAWTThread(new Runnable() { public void run() { requestRunning = false; } }); } } } //}}} //}}} //{{{ Inner classes //{{{ ActionHandler class 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); browserView.focusOnFileView(); } else if(source == up) { VFS vfs = VFSManager.getVFSForPath(path); setDirectory(vfs.getParentOfPath(path)); } else if(source == reload) reloadDirectory(); else if(source == roots) rootDirectory(); else if(source == home) setDirectory(System.getProperty("user.home")); else if(source == synchronize) { Buffer buffer = view.getBuffer(); setDirectory(buffer.getDirectory()); } else if(source == newFile) newFile(); else if(source == newDirectory) mkdir(); else if(source == searchInDirectory) searchInDirectory(); } } //}}} //{{{ CommandsMenuButton class class CommandsMenuButton extends JButton { //{{{ CommandsMenuButton constructor CommandsMenuButton() { setText(jEdit.getProperty("vfs.browser.commands.label")); setIcon(GUIUtilities.loadIcon("ToolbarMenu.gif")); setHorizontalTextPosition(SwingConstants.LEADING); popup = new BrowserCommandsMenu(VFSBrowser.this,null); CommandsMenuButton.this.setRequestFocusEnabled(false); setMargin(new Insets(1,1,1,1)); CommandsMenuButton.this.addMouseListener(new MouseHandler()); if(OperatingSystem.isMacOSLF()) CommandsMenuButton.this.putClientProperty("JButton.buttonType","toolbar"); } //}}} BrowserCommandsMenu popup; //{{{ MouseHandler class class MouseHandler extends MouseAdapter { public void mousePressed(MouseEvent evt) { if(!popup.isVisible()) { // Update 'show hidden files' check box popup.update(); GUIUtilities.showPopupMenu( popup,CommandsMenuButton.this,0, CommandsMenuButton.this.getHeight(), false); } else { popup.setVisible(false); } } } //}}} } //}}} //{{{ PluginsMenuButton class class PluginsMenuButton extends JButton { //{{{ PluginsMenuButton constructor PluginsMenuButton() { setText(jEdit.getProperty("vfs.browser.plugins.label")); setIcon(GUIUtilities.loadIcon("ToolbarMenu.gif")); setHorizontalTextPosition(SwingConstants.LEADING); PluginsMenuButton.this.setRequestFocusEnabled(false); setMargin(new Insets(1,1,1,1)); PluginsMenuButton.this.addMouseListener(new MouseHandler()); popup = new JPopupMenu(); ActionHandler actionHandler = new ActionHandler(); JMenuItem mi = new JMenuItem(jEdit.getProperty( "vfs.browser.plugins.plugin-manager.label")); mi.setActionCommand("plugin-manager"); mi.addActionListener(actionHandler); popup.add(mi); popup.addSeparator(); // put them in a vector for sorting Vector vec = new Vector(); Enumeration enum = VFSManager.getFilesystems(); while(enum.hasMoreElements()) { VFS vfs = (VFS)enum.nextElement(); if((vfs.getCapabilities() & VFS.BROWSE_CAP) == 0) continue; JMenuItem menuItem = new JMenuItem(jEdit.getProperty( "vfs." + vfs.getName() + ".label")); menuItem.setActionCommand(vfs.getName()); menuItem.addActionListener(actionHandler); vec.addElement(menuItem); } if(vec.size() != 0) { MiscUtilities.quicksort(vec,new MiscUtilities.MenuItemCompare()); for(int i = 0; i < vec.size(); i++) popup.add((JMenuItem)vec.elementAt(i)); } else { mi = new JMenuItem(jEdit.getProperty( "vfs.browser.plugins.no-plugins.label")); mi.setEnabled(false); popup.add(mi); } if(OperatingSystem.isMacOSLF()) PluginsMenuButton.this.putClientProperty("JButton.buttonType","toolbar"); } //}}} JPopupMenu popup; //{{{ ActionHandler class class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { if(evt.getActionCommand().equals("plugin-manager")) { new org.gjt.sp.jedit.pluginmgr.PluginManager( JOptionPane.getFrameForComponent( VFSBrowser.this)); } else { VFS vfs = VFSManager.getVFSByName(evt.getActionCommand()); String directory = vfs.showBrowseDialog(null, VFSBrowser.this); if(directory != null) setDirectory(directory); } } } //}}} //{{{ MouseHandler class class MouseHandler extends MouseAdapter { public void mousePressed(MouseEvent evt) { if(!popup.isVisible()) { GUIUtilities.showPopupMenu( popup,PluginsMenuButton.this,0, PluginsMenuButton.this.getHeight(), false); } else { popup.setVisible(false); } } } //}}} } //}}} //{{{ FavoritesMenuButton class class FavoritesMenuButton extends JButton { //{{{ FavoritesMenuButton constructor FavoritesMenuButton() { setText(jEdit.getProperty("vfs.browser.favorites.label")); setIcon(GUIUtilities.loadIcon("ToolbarMenu.gif")); setHorizontalTextPosition(SwingConstants.LEADING); FavoritesMenuButton.this.setRequestFocusEnabled(false); setMargin(new Insets(1,1,1,1)); FavoritesMenuButton.this.addMouseListener(new MouseHandler()); if(OperatingSystem.isMacOSLF()) FavoritesMenuButton.this.putClientProperty("JButton.buttonType","toolbar"); } //}}} JPopupMenu popup; //{{{ ActionHandler class class ActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { String actionCommand = evt.getActionCommand(); if(actionCommand.equals("add-to-favorites")) { // if any directories are selected, add // them, otherwise add current directory Vector toAdd = new Vector(); VFS.DirectoryEntry[] selected = getSelectedFiles(); for(int i = 0; i < selected.length; i++) { VFS.DirectoryEntry file = selected[i]; if(file.type == VFS.DirectoryEntry.FILE) { toAdd.addElement(MiscUtilities .getParentOfPath(file.path)); } else toAdd.addElement(file.path); } if(toAdd.size() != 0) { for(int i = 0; i < toAdd.size(); i++) { FavoritesVFS.addToFavorites((String)toAdd.elementAt(i)); } } else { if(path.equals(FavoritesVFS.PROTOCOL + ":")) { GUIUtilities.error(VFSBrowser.this, "vfs.browser.recurse-favorites", null); } else { FavoritesVFS.addToFavorites(path); } } } else setDirectory(actionCommand); } } //}}} //{{{ MouseHandler class class MouseHandler extends MouseAdapter { public void mousePressed(MouseEvent evt) { if(popup == null || !popup.isVisible()) { popup = new JPopupMenu(); ActionHandler actionHandler = new ActionHandler(); JMenuItem mi = new JMenuItem( jEdit.getProperty( "vfs.browser.favorites" + ".add-to-favorites.label")); mi.setActionCommand("add-to-favorites"); mi.addActionListener(actionHandler); popup.add(mi); mi = new JMenuItem( jEdit.getProperty( "vfs.browser.favorites" + ".edit-favorites.label")); mi.setActionCommand("favorites:"); mi.addActionListener(actionHandler); popup.add(mi); popup.addSeparator(); Object[] favorites = FavoritesVFS.getFavorites(); if(favorites.length == 0) { mi = new JMenuItem( jEdit.getProperty( "vfs.browser.favorites" + ".no-favorites.label")); mi.setEnabled(false); popup.add(mi); } else { MiscUtilities.quicksort(favorites, new MiscUtilities.StringICaseCompare()); for(int i = 0; i < favorites.length; i++) { mi = new JMenuItem(favorites[i].toString()); mi.setIcon(FileCellRenderer.dirIcon); mi.addActionListener(actionHandler); popup.add(mi); } } GUIUtilities.showPopupMenu( popup,FavoritesMenuButton.this,0, FavoritesMenuButton.this.getHeight(), false); } else { popup.setVisible(false); popup = null; } } } //}}} } //}}} //}}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -