提交 dc7a71f0 编写于 作者: S Serge Rider

#1825 File editor tab context menu actions

上级 34c44ecc
......@@ -70,4 +70,6 @@ public interface CoreCommands
String CMD_LINK_EDITOR = "org.jkiss.dbeaver.core.navigator.linkeditor";
String CMD_SYNC_CONNECTION = "org.jkiss.dbeaver.ui.editors.sql.sync.connection";
String CMD_SQL_RENAME = "org.jkiss.dbeaver.ui.editors.sql.rename";
}
package org.jkiss.dbeaver.ui.e4;
import org.eclipse.core.resources.IFile;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.internal.e4.compatibility.CompatibilityPart;
import org.jkiss.dbeaver.core.CoreCommands;
import org.jkiss.dbeaver.ui.ActionUtils;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditor;
import org.jkiss.dbeaver.ui.editors.sql.handlers.RenameHandler;
import java.io.File;
public class DBeaverStackRenderer extends StackRenderer {
......@@ -12,7 +28,70 @@ public class DBeaverStackRenderer extends StackRenderer {
protected void populateTabMenu(Menu menu, MPart part) {
super.populateTabMenu(menu, part);
IWorkbenchPart workbenchPart = getWorkbenchPart(part);
if (workbenchPart instanceof IEditorPart) {
IFile inputFile = EditorUtils.getFileFromInput(((IEditorPart) workbenchPart).getEditorInput());
if (inputFile != null) {
File localFile = inputFile.getLocation().toFile();
if (localFile != null) {
populateFileMenu(menu, workbenchPart, inputFile, localFile);
}
}
}
}
private void populateFileMenu(final Menu menu, final IWorkbenchPart workbenchPart, final IFile inputFile, final File file) {
new MenuItem(menu, SWT.SEPARATOR);
{
MenuItem menuItemOpenFolder = new MenuItem(menu, SWT.NONE);
menuItemOpenFolder.setText("Open file folder in explorer");
menuItemOpenFolder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
if (file.getParentFile().isDirectory()) {
UIUtils.launchProgram(file.getParentFile().getAbsolutePath());
}
}
});
}
{
MenuItem menuItemOthers = new MenuItem(menu, SWT.NONE);
menuItemOthers.setText("Copy file path to clipboard");
menuItemOthers.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String filePath = file.getAbsolutePath();
UIUtils.setClipboardContents(Display.getCurrent(), TextTransfer.getInstance(), filePath);
}
});
}
{
MenuItem menuItemOthers = new MenuItem(menu, SWT.NONE);
String renameText = "Rename file";
if (workbenchPart instanceof SQLEditor) {
renameText += "\t" + ActionUtils.findCommandDescription(CoreCommands.CMD_SQL_RENAME, workbenchPart.getSite(), true);
}
menuItemOthers.setText(renameText);
menuItemOthers.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
RenameHandler.renameFile(workbenchPart, inputFile, "file");
}
});
}
}
private IWorkbenchPart getWorkbenchPart(MPart part) {
if (part != null) {
Object clientObject = part.getObject();
if (clientObject instanceof CompatibilityPart) {
return ((CompatibilityPart) clientObject).getPart();
}
}
return null;
}
}
\ No newline at end of file
......@@ -23,33 +23,40 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.runtime.ui.DBUserInterface;
import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler;
import org.jkiss.dbeaver.ui.dialogs.EnterNameDialog;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditor;
import org.jkiss.dbeaver.utils.RuntimeUtils;
public class RenameHandler extends AbstractDataSourceHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
SQLEditor editor = RuntimeUtils.getObjectAdapter(HandlerUtil.getActivePart(event), SQLEditor.class);
IEditorPart editor = RuntimeUtils.getObjectAdapter(HandlerUtil.getActivePart(event), IEditorPart.class);
if (editor == null) {
log.error("No active SQL editor");
return null;
}
Shell shell = HandlerUtil.getActiveShell(event);
IFile file = EditorUtils.getFileFromInput(editor.getEditorInput());
if (file == null) {
DBUserInterface.getInstance().showError("Rename", "Can't rename - no source file");
return null;
}
String newName = EnterNameDialog.chooseName(shell, "Rename SQL script [" + file.getName() + "]", file.getName());
renameFile(editor, file, "SQL script");
//file.set
return null;
}
public static void renameFile(IWorkbenchPart editor, IFile file, String fileTitle) {
Shell shell = editor.getSite().getShell();
String newName = EnterNameDialog.chooseName(shell, "Rename " + fileTitle + " [" + file.getName() + "]", file.getName());
if (newName == null) {
return null;
return;
}
if (newName.indexOf('.') == -1) {
int divPos = file.getName().lastIndexOf('.');
......@@ -60,15 +67,15 @@ public class RenameHandler extends AbstractDataSourceHandler {
if (!newName.equals(file.getName())) {
NullProgressMonitor monitor = new NullProgressMonitor();
editor.doSave(monitor);
if (editor instanceof IEditorPart) {
((IEditorPart)editor).doSave(monitor);
}
try {
file.move(file.getParent().getFullPath().append(newName), true, monitor);
} catch (CoreException e) {
DBUserInterface.getInstance().showError("Rename", "Error renaming file '" + file.getName() + "'", e);
}
}
//file.set
return null;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册