From: <sh...@us...> - 2008-12-30 06:30:11
|
Revision: 14253 http://jedit.svn.sourceforge.net/jedit/?rev=14253&view=rev Author: shlomy Date: 2008-12-30 06:30:07 +0000 (Tue, 30 Dec 2008) Log Message: ----------- Applied patch #2296738, which implements feature request #1936518 - adding a 'properties' context menu to the VFS browser, showing the properties of the selected file(s). Modified Paths: -------------- jEdit/trunk/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java jEdit/trunk/org/gjt/sp/jedit/browser.actions.xml jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/gui/FilePropertiesDialog.java Modified: jEdit/trunk/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java 2008-12-30 04:30:55 UTC (rev 14252) +++ jEdit/trunk/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java 2008-12-30 06:30:07 UTC (rev 14253) @@ -121,6 +121,10 @@ add(createMenuItem("copy-path")); add(createMenuItem("paste")); + + if( browser.getSelectedFiles().length != 0) + add(createMenuItem("properties")); + addSeparator(); } Modified: jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java 2008-12-30 04:30:55 UTC (rev 14252) +++ jEdit/trunk/org/gjt/sp/jedit/browser/VFSBrowser.java 2008-12-30 06:30:07 UTC (rev 14253) @@ -34,11 +34,13 @@ import java.util.List; import org.gjt.sp.jedit.io.*; +import org.gjt.sp.jedit.io.FileVFS.LocalFile; import org.gjt.sp.jedit.gui.*; import org.gjt.sp.jedit.msg.*; import org.gjt.sp.jedit.search.*; import org.gjt.sp.jedit.*; import org.gjt.sp.jedit.buffer.JEditBuffer; +import org.gjt.sp.util.IOUtilities; import org.gjt.sp.util.Log; import org.gjt.sp.jedit.menu.MenuItemTextComparator; //}}} @@ -750,6 +752,40 @@ }); } //}}} + //{{{ rename() method + public void rename(String from, String newname) + { + VFS vfs = VFSManager.getVFSForPath(from); + + String filename = vfs.getFileName(from); + String[] args = { filename }; + String to = newname; + + if(to == null || filename.equals(newname)) + 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)); + + VFSManager.runInAWTThread(new Runnable() + { + public void run() + { + endRequest(); + } + }); + } //}}} + //{{{ mkdir() method public void mkdir() { @@ -820,6 +856,15 @@ jEdit.newFile(view,path); } //}}} + //{{{ fileProperties() method + /** + * Show selected file's properties. + */ + public void fileProperties() + { + new FilePropertiesDialog(view, this); + } //}}} + //{{{ searchInDirectory() method /** * Opens a directory search in the current directory. Modified: jEdit/trunk/org/gjt/sp/jedit/browser.actions.xml =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/browser.actions.xml 2008-12-30 04:30:55 UTC (rev 14252) +++ jEdit/trunk/org/gjt/sp/jedit/browser.actions.xml 2008-12-30 06:30:07 UTC (rev 14253) @@ -139,6 +139,12 @@ </CODE> </ACTION> +<ACTION NAME="vfs.browser.properties"> + <CODE> + browser.fileProperties(); + </CODE> +</ACTION> + <ACTION NAME="vfs.browser.reload"> <CODE> browser.reloadDirectory(); Added: jEdit/trunk/org/gjt/sp/jedit/gui/FilePropertiesDialog.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/gui/FilePropertiesDialog.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/gui/FilePropertiesDialog.java 2008-12-30 06:30:07 UTC (rev 14253) @@ -0,0 +1,306 @@ + +package org.gjt.sp.jedit.gui; + +//{{{ Imports +import java.io.File; + +import java.awt.BorderLayout; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.border.EmptyBorder; + +import org.gjt.sp.jedit.GUIUtilities; +import org.gjt.sp.jedit.OperatingSystem; +import org.gjt.sp.jedit.jEdit; +import org.gjt.sp.jedit.View; +import org.gjt.sp.jedit.browser.VFSBrowser; +import org.gjt.sp.jedit.io.VFSFile; +import org.gjt.sp.jedit.io.FileVFS.LocalFile; +import org.gjt.sp.jedit.MiscUtilities; +import org.gjt.sp.util.IOUtilities; +//}}} + +/** + * File's Properties dialog. This class create and show a window from the selected file or files. + */ +public class FilePropertiesDialog extends EnhancedDialog +{ + private View view; + private VFSBrowser browser; + private VFSFile[] selectedFiles = null; + private LocalFile local; + + //{{{ FilePropertiesDialog(View view, VFSBrowser browser) constructor + /** + * The FilePropertiesDialog's constructor + * @param view The view + * @param browser The VFSBrowser + */ + public FilePropertiesDialog(View view, VFSBrowser browser) + { + super(view,jEdit.getProperty("vfs.browser.properties.title"),true); + GUIUtilities.loadGeometry(this,"propdialog"); + + this.browser = browser; + this.view = view; + + this.selectedFiles = browser.getSelectedFiles(); + this.local = (LocalFile)selectedFiles[0]; + createAndShowGUI(); + } //}}} + + //{{{ createAndShowGUI() method + private void createAndShowGUI() + { + addComponentsToPane(); + this.pack(); + + this.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + this.setFocusable(true); + this.toFront(); + this.requestFocus(); + this.setResizable(false); + this.setVisible(true); + } //}}} + + private JButton okButton; + private JButton cancelButton; + private JTextField nameTextField; + private JLabel infoIcon; + private JCheckBox readable; + private JCheckBox write; + + //{{{ addComponentsToPane() method + public void addComponentsToPane() + { + JPanel content = new JPanel(new BorderLayout()); + content.setBorder(new EmptyBorder(12,5,0,5)); + setContentPane(content); + + if (selectedFiles.length == 1) + { + content.add(BorderLayout.NORTH, createNorthPanel()); + content.add(BorderLayout.CENTER, createCenterPanel()); + content.add(BorderLayout.SOUTH, createSouthPanel()); + } + else if(selectedFiles.length > 1) + { + content.add(BorderLayout.NORTH, createNorthPanelAll()); + content.add(BorderLayout.CENTER, createCenterPanelAll()); + content.add(BorderLayout.SOUTH, createSouthPanelAll()); + } + } //}}} + + + //{{{createNorthPanelAll() method + public JPanel createNorthPanelAll() + { + int filesCounter=0, directoriesCounter=0; + + JPanel northPanel = new JPanel(new BorderLayout()); + + infoIcon = new JLabel(); + infoIcon.setIcon(UIManager.getIcon("OptionPane.informationIcon")); + northPanel.add(BorderLayout.WEST, infoIcon); + + for(int i=0;i<selectedFiles.length;i++) + { + if(selectedFiles[i].getType() == VFSFile.DIRECTORY) + { + directoriesCounter++; + } + else if(selectedFiles[i].getType() == VFSFile.FILE) + { + filesCounter++; + } + } + JPanel nameField = new JPanel(); + nameField.add(new JLabel(jEdit.getProperty("fileprop.selectedFiles")+": "+filesCounter+", "+ + jEdit.getProperty("fileprop.selectedDirectories")+": "+directoriesCounter)); + + northPanel.add(BorderLayout.CENTER, nameField); + northPanel.add(BorderLayout.SOUTH, new JPanel()); + + return northPanel; + } //}}} + + + //{{{createCenterPanelAll() method + public JPanel createCenterPanelAll() + { + long filesSize=0; + File ioFile; + JPanel centerPanel = new JPanel(new BorderLayout()); + + for(int i=0;i<selectedFiles.length;i++){ + if(selectedFiles[i].getType() == VFSFile.DIRECTORY){ + ioFile = new File(selectedFiles[i].getPath()); + filesSize += IOUtilities.fileLength(ioFile); + } + else if(selectedFiles[i].getType() == VFSFile.FILE) + { + filesSize += selectedFiles[i].getLength(); + } + } + + JPanel propField = new JPanel(); + propField.setLayout(new GridLayout(2, 1)); + String path = local.getPath(); + if(OperatingSystem.isWindows() || OperatingSystem.isWindows9x() || OperatingSystem.isWindowsNT()) + { + path = path.substring(0, path.lastIndexOf(92)); // 92 = '\' + } + else + { + path = path.substring(0, path.lastIndexOf('/')); + } + propField.add(new JLabel(jEdit.getProperty("fileprop.path")+": "+path)); + propField.add(new JLabel(jEdit.getProperty("fileprop.size")+": "+MiscUtilities.formatFileSize(filesSize))); + Border etch = BorderFactory.createEtchedBorder(); + propField.setBorder(BorderFactory.createTitledBorder(etch, jEdit.getProperty("fileprop.properties"))); + centerPanel.add(BorderLayout.CENTER, propField); + + return centerPanel; + } //}}} + + //{{{ createSouthPanelAll() method + public JPanel createSouthPanelAll() + { + ButtonActionHandler actionHandler = new ButtonActionHandler(); + JPanel southPanel = new JPanel(new BorderLayout()); + + JPanel buttonsField = new JPanel(); + okButton = new JButton(jEdit.getProperty("fileprop.okBtn")); + buttonsField.add(okButton); + okButton.addActionListener(actionHandler); + cancelButton = new JButton(jEdit.getProperty("fileprop.cancelBtn")); + buttonsField.add(cancelButton); + cancelButton.addActionListener(actionHandler); + + southPanel.add(BorderLayout.EAST, buttonsField); + + return southPanel; + } //}}} + + //{{{ createNorthPanel() method + public JPanel createNorthPanel() + { + JPanel northPanel = new JPanel(new BorderLayout()); + + infoIcon = new JLabel(); + infoIcon.setIcon(UIManager.getIcon("OptionPane.informationIcon")); + northPanel.add(BorderLayout.WEST, infoIcon); + + JPanel nameField = new JPanel(); + nameField.add(new JLabel(jEdit.getProperty("fileprop.name")+": ")); + nameTextField = new JTextField(local.getName(), 20); + nameField.add(nameTextField); + northPanel.add(BorderLayout.CENTER, nameField); + northPanel.add(BorderLayout.SOUTH, new JPanel()); + + return northPanel; + } //}}} + + //{{{ createCenterPanel() method + public JPanel createCenterPanel() + { + java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm"); + + JPanel centerPanel = new JPanel(new BorderLayout()); + + JPanel propField = new JPanel(); + propField.setLayout(new GridLayout(4, 1)); + propField.add(new JLabel(jEdit.getProperty("fileprop.name")+": "+local.getName())); + propField.add(new JLabel(jEdit.getProperty("fileprop.path")+": "+local.getPath())); + propField.add(new JLabel(jEdit.getProperty("fileprop.lastmod")+": "+sdf.format((new java.util.Date(local.getModified()))))); + if(local.getType() == VFSFile.DIRECTORY) + { + File ioFile = new File(local.getPath()); + propField.add(new JLabel(jEdit.getProperty("fileprop.size")+": "+MiscUtilities.formatFileSize(IOUtilities.fileLength(ioFile)))); + } + else + { + propField.add(new JLabel(jEdit.getProperty("fileprop.size")+": "+MiscUtilities.formatFileSize(local.getLength()))); + } + Border etch = BorderFactory.createEtchedBorder(); + propField.setBorder(BorderFactory.createTitledBorder(etch, jEdit.getProperty("fileprop.properties"))); + centerPanel.add(BorderLayout.CENTER, propField); + + JPanel attributeField = new JPanel(); + attributeField.setLayout(new GridLayout(1, 2)); + readable = new JCheckBox(jEdit.getProperty("fileprop.readable")); + readable.setSelected(local.isReadable()); + readable.setEnabled(false); + attributeField.add(readable); + + write = new JCheckBox(jEdit.getProperty("fileprop.writeable")); + write.setSelected(local.isWriteable()); + write.setEnabled(false); + attributeField.add(write); + attributeField.setBorder(BorderFactory.createTitledBorder(etch, jEdit.getProperty("fileprop.attribute"))); + centerPanel.add(BorderLayout.SOUTH, attributeField); + + return centerPanel; + } //}}} + + //{{{ createSouthPanel() method + public JPanel createSouthPanel() + { + ButtonActionHandler actionHandler = new ButtonActionHandler(); + JPanel southPanel = new JPanel(new BorderLayout()); + + JPanel buttonsField = new JPanel(); + okButton = new JButton(jEdit.getProperty("fileprop.okBtn")); + buttonsField.add(okButton); + okButton.addActionListener(actionHandler); + cancelButton = new JButton(jEdit.getProperty("fileprop.cancelBtn")); + buttonsField.add(cancelButton); + cancelButton.addActionListener(actionHandler); + + southPanel.add(BorderLayout.EAST, buttonsField); + + return southPanel; + } //}}} + + //{{{ ok() method + public void ok() + { + if(this.nameTextField != null) + { + browser.rename(browser.getSelectedFiles()[0].getPath(), nameTextField.getText()); + } + + GUIUtilities.saveGeometry(this,"propdialog"); + setVisible(false); + } //}}} + + //{{{ cancel() method + public void cancel() + { + GUIUtilities.saveGeometry(this,"propdialog"); + setVisible(false); + } //}}} + + //{{{ ButtonActionHandler class + class ButtonActionHandler implements ActionListener + { + public void actionPerformed(ActionEvent evt) + { + Object source = evt.getSource(); + + + if(source == okButton) + { + ok(); + } + else if(source == cancelButton) + { + cancel(); + } + } + } //}}} +} Modified: jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-12-30 04:30:55 UTC (rev 14252) +++ jEdit/trunk/org/gjt/sp/jedit/jedit_gui.props 2008-12-30 06:30:07 UTC (rev 14253) @@ -2298,6 +2298,8 @@ vfs.browser.home.icon=22x22/actions/go-home.png vfs.browser.home.label=Home Directory vfs.browser.home.shortcut=~ +vfs.browser.properties.label=Properties +vfs.browser.properties.title=File/Directory Properties vfs.browser.insert.label=Insert vfs.browser.new-directory.icon=22x22/actions/folder-new.png vfs.browser.new-directory.label=New Directory... @@ -2542,6 +2544,21 @@ #}}} +#{{{ File Properties Dialog +fileprop.name=Name +fileprop.path=Path +fileprop.lastmod=Last Modified +fileprop.size=Size +fileprop.properties=Properties +fileprop.readable=Readable +fileprop.writeable=Writeable +fileprop.attribute=Attribute +fileprop.okBtn=OK +fileprop.cancelBtn=Cancel +fileprop.selectedFiles=Selected files +fileprop.selectedDirectories=Selected directories +#}}} + errorwidget.popupmenu=logs-remove-all-errors logs-remove-all-errors.label=Remove all errors This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |