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?