This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hop.git


The following commit(s) were added to refs/heads/master by this push:
     new 8e9074d  HOP-2997 Add delete and rename options in VFS dialog
     new a11b0e3  Merge pull request #908 from nadment/HOP-2997_VfsDialog
8e9074d is described below

commit 8e9074d23691a2fd7701b4c51ec02d492adb4db1
Author: nadment <[email protected]>
AuthorDate: Tue Jun 29 21:44:32 2021 +0200

    HOP-2997 Add delete and rename options in VFS dialog
---
 .../apache/hop/ui/core/vfs/HopVfsFileDialog.java   | 116 ++++++++++++++++++++-
 .../ui/core/vfs/messages/messages_en_US.properties |   9 +-
 2 files changed, 119 insertions(+), 6 deletions(-)

diff --git a/ui/src/main/java/org/apache/hop/ui/core/vfs/HopVfsFileDialog.java 
b/ui/src/main/java/org/apache/hop/ui/core/vfs/HopVfsFileDialog.java
index f093a44..2c90fb5 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/vfs/HopVfsFileDialog.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/vfs/HopVfsFileDialog.java
@@ -26,6 +26,8 @@ import org.apache.hop.core.Const;
 import org.apache.hop.core.Props;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.gui.plugin.GuiPlugin;
+import org.apache.hop.core.gui.plugin.key.GuiKeyboardShortcut;
+import org.apache.hop.core.gui.plugin.key.GuiOsxKeyboardShortcut;
 import org.apache.hop.core.gui.plugin.toolbar.GuiToolbarElement;
 import org.apache.hop.core.logging.LogChannel;
 import org.apache.hop.core.plugins.IPlugin;
@@ -38,6 +40,7 @@ import org.apache.hop.i18n.BaseMessages;
 import org.apache.hop.ui.core.ConstUi;
 import org.apache.hop.ui.core.PropsUi;
 import org.apache.hop.ui.core.dialog.EnterStringDialog;
+import org.apache.hop.ui.core.dialog.ErrorDialog;
 import org.apache.hop.ui.core.dialog.IDirectoryDialog;
 import org.apache.hop.ui.core.dialog.IFileDialog;
 import org.apache.hop.ui.core.gui.GuiResource;
@@ -53,6 +56,7 @@ import org.apache.hop.ui.hopgui.file.IHopFileType;
 import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.TreeEditor;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.DragSource;
 import org.eclipse.swt.dnd.DragSourceAdapter;
@@ -79,6 +83,7 @@ import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.List;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.MessageBox;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.swt.widgets.ToolBar;
@@ -119,6 +124,8 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
   public static final String BROWSER_TOOLBAR_PARENT_ID = 
"HopVfsFileDialog-BrowserToolbar";
   private static final String BROWSER_ITEM_ID_CREATE_FOLDER = 
"0020-create-folder";
   private static final String BROWSER_ITEM_ID_SHOW_HIDDEN = "0200-show-hidden";
+  private static final String BROWSER_ITEM_ID_DELETE = "0100-delete";
+  private static final String BROWSER_ITEM_ID_RENAME = "0110-rename";
 
   private Shell parent;
   private IVariables variables;
@@ -135,6 +142,7 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
 
   private Text wDetails;
   private Tree wBrowser;
+  private TreeEditor wBrowserEditor;
 
   private boolean showingHiddenFiles;
 
@@ -150,7 +158,6 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
   private Image fileImage;
 
   private static HopVfsFileDialog instance;
-  private FileObject selectedFile;
 
   private java.util.List<String> navigationHistory;
   private int navigationIndex;
@@ -497,6 +504,12 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
           }
         });
 
+    
+    // Create Tree editor for rename
+    wBrowserEditor = new TreeEditor(wBrowser);
+    wBrowserEditor.horizontalAlignment = SWT.LEFT;
+    wBrowserEditor.grabHorizontal = true;
+    
     // Put file details or message/logging label at the bottom...
     //
     wDetails = new Text(browseSash, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | 
SWT.READ_ONLY);
@@ -644,11 +657,11 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
    * @param e
    */
   private void fileSelected(Event e) {
-    FileObject fileObject = getSelectedFileObject();
-    if (fileObject != null) {
-      selectedFile = fileObject;
+    FileObject selectedFile = getSelectedFileObject();
+    if (selectedFile != null) {
       showFilename(selectedFile);
-    }
+    }    
+    updateSelection();
   }
 
   private void showFilename(FileObject fileObject) {
@@ -791,6 +804,8 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
       populateFolder(activeFolder, parentFolderItem);
 
       parentFolderItem.setExpanded(true);
+      
+      updateSelection();
     } catch (Throwable e) {
       showError(BaseMessages.getString(PKG, 
"HopVfsFileDialog.Browsing.Error.Message", filename), e);
     }
@@ -1020,6 +1035,7 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
       toolTip = "i18n::HopVfsFileDialog.AddBookmark.Tooltip.Message",
       image = "ui/images/bookmark-add.svg")
   public void addBookmark() {
+    FileObject selectedFile = getSelectedFileObject();
     if (selectedFile != null) {
       String name = selectedFile.getName().getBaseName();
       EnterStringDialog dialog =
@@ -1190,6 +1206,90 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
   }
 
   @GuiToolbarElement(
+      root = BROWSER_TOOLBAR_PARENT_ID,
+      id = BROWSER_ITEM_ID_RENAME,
+      toolTip = "i18n::HopVfsFileDialog.RenameFile.Tooltip.Message",
+      image = "ui/images/rename.svg")
+  // FIXME: Keyboard don't work
+  @GuiKeyboardShortcut(key = SWT.F2)
+  @GuiOsxKeyboardShortcut(key = SWT.F2)
+  public void renameFile() {
+    FileObject file = getSelectedFileObject();
+    if (file != null) {    
+      TreeItem item = wBrowser.getSelection()[0];
+      
+      // The control that will be the editor must be a child of the Tree
+      Text text = new Text(wBrowser, SWT.BORDER);
+      text.setText(file.getName().getBaseName());
+      text.addListener(SWT.FocusOut, event -> text.dispose());
+      text.addListener(
+          SWT.KeyUp,
+          event -> {
+            switch (event.keyCode) {
+              case SWT.CR:
+              case SWT.KEYPAD_CR:
+                // If name changed
+                if (!item.getText().equals(text.getText())) {
+                  try {
+                    FileObject newFile =
+                        HopVfs.getFileObject(
+                            HopVfs.getFilename(file.getParent()) + "/" + 
text.getText());
+                    file.moveTo(newFile);
+                  } catch (Exception e) {
+                    showError(BaseMessages.getString(PKG, 
"HopVfsFileDialog.RenameFile.Error.Message", file), e);
+                  } finally {
+                    text.dispose();
+                    refreshBrowser();
+                  }
+                }
+                break;
+              case SWT.ESC:
+                text.dispose();
+                break;
+            }
+          });
+
+      text.selectAll();
+      text.setFocus();
+      wBrowserEditor.setEditor(text, item);    
+    }
+  }
+
+  @GuiToolbarElement(
+      root = BROWSER_TOOLBAR_PARENT_ID,
+      id = BROWSER_ITEM_ID_DELETE,
+      toolTip = "i18n::HopVfsFileDialog.DeleteFile.Tooltip.Message",
+      image = "ui/images/delete.svg")
+  // FIXME: Keyboard don't work
+  @GuiKeyboardShortcut(key = SWT.DEL)
+  @GuiOsxKeyboardShortcut(key = SWT.DEL)
+  public void deleteFile() {
+    FileObject file = getSelectedFileObject();
+    if (file != null) {        
+      try {
+        MessageBox box = new MessageBox(shell, SWT.YES | SWT.NO | 
SWT.ICON_QUESTION);
+        box.setText(
+            BaseMessages.getString(PKG, 
"HopVfsFileDialog.DeleteFile.Confirmation.Header"));
+        box.setMessage(
+            BaseMessages.getString(PKG, 
"HopVfsFileDialog.DeleteFile.Confirmation.Message")
+                + Const.CR
+                + Const.CR
+                + file.getName());
+        int answer = box.open();
+        if ((answer & SWT.YES) != 0) {
+          boolean deleted = file.delete();
+          if (deleted) {
+            refreshBrowser();
+            }
+          }
+      } catch (Exception e) {
+        showError(BaseMessages.getString(PKG, 
"HopVfsFileDialog.DeleteFile.Error.Message", file.toString()), e);
+      }
+    }      
+
+  } 
+  
+  @GuiToolbarElement(
       root = NAVIGATE_TOOLBAR_PARENT_ID,
       id = NAVIGATE_ITEM_ID_NAVIGATE_PREVIOUS,
       toolTip = "i18n::HopVfsFileDialog.NavigateToPrevPath.Tooltip.Message",
@@ -1464,4 +1564,10 @@ public class HopVfsFileDialog implements IFileDialog, 
IDirectoryDialog {
   public void setSaveFilename(String saveFilename) {
     this.saveFilename = saveFilename;
   }
+  
+  public void updateSelection() {
+    FileObject file = getSelectedFileObject();
+    browserToolbarWidgets.enableToolbarItem(BROWSER_ITEM_ID_DELETE, file != 
null);
+    browserToolbarWidgets.enableToolbarItem(BROWSER_ITEM_ID_RENAME, file != 
null);
+  }
 }
diff --git 
a/ui/src/main/resources/org/apache/hop/ui/core/vfs/messages/messages_en_US.properties
 
b/ui/src/main/resources/org/apache/hop/ui/core/vfs/messages/messages_en_US.properties
index c09e54e..b6033b3 100644
--- 
a/ui/src/main/resources/org/apache/hop/ui/core/vfs/messages/messages_en_US.properties
+++ 
b/ui/src/main/resources/org/apache/hop/ui/core/vfs/messages/messages_en_US.properties
@@ -37,6 +37,8 @@ HopVfsFileDialog.FindParentFolder.Error.Message=Error finding 
parent folder of f
 HopVfsFileDialog.Bookmark.Error.Message=Error saving bookmarks: ''{0}''
 HopVfsFileDialog.NavigateFolderUp.Error.Message=Error navigating up: ''{0}''
 HopVfsFileDialog.FolderCreate.Error.Message=Error creating folder: ''{0}''
+HopVfsFileDialog.DeleteFile.Error.Message=Error deleting file: ''{0}''
+HopVfsFileDialog.RenameFile.Error.Message=Error renaming file: ''{0}''
 
 HopVfsFileDialog.AddBookmark.Tooltip.Message=Add the selected file or folder 
as a new bookmark
 HopVfsFileDialog.RemoveBookmark.Tooltip.Message=Remove the selected bookmark
@@ -46,6 +48,8 @@ HopVfsFileDialog.NavigateToParent.Tooltip.Message=Navigate to 
the parent folder
 HopVfsFileDialog.NavigateToPrevPath.Tooltip.Message=Navigate to previous path 
from your history
 HopVfsFileDialog.NavigateToNextPath.Tooltip.Message=Navigate to next path from 
your history
 HopVfsFileDialog.CreateFolder.Tooltip.Message=Create folder
+HopVfsFileDialog.DeleteFile.Tooltip.Message=Delete selected file (DEL)
+HopVfsFileDialog.RenameFile.Tooltip.Message=Rename the selected file (F2)
 HopVfsFileDialog.ShowHiddenFiles.Tooltip.Message=Show or hide hidden files and 
directories
 
 HopVfsFileDialog.FileInfo.Tooltip.Folder=Folder: {0}
@@ -58,4 +62,7 @@ HopVfsFileDialog.FileInfo.Tooltip.Executable=Executable: {0}
 HopVfsFileDialog.FileInfo.Tooltip.Attributes=Attributes: {0}
 HopVfsFileDialog.FileInfo.Tooltip.Symlink=This is a symbolic link
 HopVfsFileDialog.Yes.Label=Yes
-HopVfsFileDialog.No.Label=No
\ No newline at end of file
+HopVfsFileDialog.No.Label=No
+
+HopVfsFileDialog.DeleteFile.Confirmation.Header=Delete file?
+HopVfsFileDialog.DeleteFile.Confirmation.Message=Are you sure you want to 
delete the following file?

Reply via email to