From 8069464598940a45b2604b3e5aed67d59676c2d1 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Sat, 16 Feb 2019 23:47:14 +0300 Subject: [PATCH] #5250 Content editor: text formatting --- .../ui/editors/BaseTextEditorCommands.java | 26 ++++++ .../plugin.xml | 1 - .../plugin.xml | 8 ++ .../content/ContentEditorContributor.java | 93 ++++++++----------- .../editors/content/ContentFormatHandler.java | 48 ++++++++++ .../dbeaver/ui/editors/sql/SQLEditorBase.java | 3 +- .../ui/editors/sql/SQLEditorCommands.java | 2 +- .../ui/editors/sql/SQLEditorContributor.java | 3 +- 8 files changed, 125 insertions(+), 59 deletions(-) create mode 100644 plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/BaseTextEditorCommands.java create mode 100644 plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentFormatHandler.java diff --git a/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/BaseTextEditorCommands.java b/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/BaseTextEditorCommands.java new file mode 100644 index 0000000000..ba82635b85 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ui.editors.base/src/org/jkiss/dbeaver/ui/editors/BaseTextEditorCommands.java @@ -0,0 +1,26 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ui.editors; + +/** + * BaseTextEditorCommands + */ +public class BaseTextEditorCommands { + + public static final String CMD_CONTENT_FORMAT = "org.jkiss.dbeaver.ui.editors.text.content.format"; //$NON-NLS-1$ + +} \ No newline at end of file diff --git a/plugins/org.jkiss.dbeaver.ui.editors.content/plugin.xml b/plugins/org.jkiss.dbeaver.ui.editors.content/plugin.xml index 3ebb958091..ff83905d12 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.content/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ui.editors.content/plugin.xml @@ -3,5 +3,4 @@ - diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/plugin.xml b/plugins/org.jkiss.dbeaver.ui.editors.data/plugin.xml index fe8a501bd6..c49fc76f62 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/plugin.xml @@ -625,6 +625,14 @@ + + + + + + + + diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditorContributor.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditorContributor.java index 9c03960069..39555681b4 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditorContributor.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentEditorContributor.java @@ -27,15 +27,20 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.*; +import org.eclipse.ui.actions.RetargetAction; import org.eclipse.ui.part.MultiPageEditorActionBarContributor; import org.eclipse.ui.texteditor.BasicTextEditorActionContributor; +import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; +import org.eclipse.ui.texteditor.RetargetTextEditorAction; import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.runtime.DBWorkbench; +import org.jkiss.dbeaver.ui.ActionUtils; import org.jkiss.dbeaver.ui.DBeaverIcons; import org.jkiss.dbeaver.ui.UIIcon; import org.jkiss.dbeaver.ui.UIUtils; import org.jkiss.dbeaver.ui.data.IValueController; import org.jkiss.dbeaver.ui.dialogs.DialogUtils; +import org.jkiss.dbeaver.ui.editors.BaseTextEditorCommands; import java.io.File; import java.lang.reflect.InvocationTargetException; @@ -44,8 +49,7 @@ import java.lang.reflect.InvocationTargetException; * Content Editor contributor. * Uses text editor contributor to fill status bar and menu for possible integrated text editors. */ -public class ContentEditorContributor extends MultiPageEditorActionBarContributor -{ +public class ContentEditorContributor extends MultiPageEditorActionBarContributor { private final BasicTextEditorActionContributor textContributor; private ContentEditor activeEditor; //private IEditorPart activePage; @@ -55,40 +59,34 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo private final IAction infoAction = new InfoAction(); private Combo encodingCombo; - public ContentEditorContributor() - { + public ContentEditorContributor() { textContributor = new BasicTextEditorActionContributor(); } - ContentEditor getEditor() - { + ContentEditor getEditor() { return activeEditor; } @Override - public void init(IActionBars bars, IWorkbenchPage page) - { + public void init(IActionBars bars, IWorkbenchPage page) { super.init(bars, page); textContributor.init(bars, page); } @Override - public void init(IActionBars bars) - { + public void init(IActionBars bars) { super.init(bars); textContributor.init(bars); } @Override - public void dispose() - { + public void dispose() { textContributor.dispose(); super.dispose(); } @Override - public void setActiveEditor(IEditorPart part) - { + public void setActiveEditor(IEditorPart part) { super.setActiveEditor(part); this.activeEditor = (ContentEditor) part; @@ -108,15 +106,13 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo } @Override - public void setActivePage(IEditorPart activeEditor) - { + public void setActivePage(IEditorPart activeEditor) { //this.activePage = activeEditor; this.textContributor.setActiveEditor(activeEditor); } @Override - public void contributeToMenu(IMenuManager manager) - { + public void contributeToMenu(IMenuManager manager) { super.contributeToMenu(manager); textContributor.contributeToMenu(manager); @@ -127,18 +123,21 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo menu.add(new Separator()); menu.add(infoAction); menu.add(new Separator()); + + IMenuManager editMenu = manager.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT); + if (editMenu != null) { + editMenu.add(ActionUtils.makeCommandContribution(UIUtils.getActiveWorkbenchWindow(), BaseTextEditorCommands.CMD_CONTENT_FORMAT)); + } } @Override - public void contributeToStatusLine(IStatusLineManager statusLineManager) - { + public void contributeToStatusLine(IStatusLineManager statusLineManager) { super.contributeToStatusLine(statusLineManager); textContributor.contributeToStatusLine(statusLineManager); } @Override - public void contributeToToolBar(IToolBarManager manager) - { + public void contributeToToolBar(IToolBarManager manager) { super.contributeToToolBar(manager); textContributor.contributeToToolBar(manager); // Execution @@ -147,11 +146,9 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo manager.add(new Separator()); manager.add(infoAction); manager.add(new Separator()); - manager.add(new ControlContribution("Encoding") - { + manager.add(new ControlContribution("Encoding") { @Override - protected Control createControl(Composite parent) - { + protected Control createControl(Composite parent) { String curCharset = null; if (getEditor() != null) { curCharset = getEditor().getEditorInput().getEncoding(); @@ -188,8 +185,7 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo public abstract class SimpleAction extends Action { - SimpleAction(String id, String text, String toolTip, DBIcon icon) - { + SimpleAction(String id, String text, String toolTip, DBIcon icon) { super(text, DBeaverIcons.getImageDescriptor(icon)); setId(id); //setActionDefinitionId(id); @@ -201,30 +197,24 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo } - private class FileExportAction extends SimpleAction - { - FileExportAction() - { + private class FileExportAction extends SimpleAction { + FileExportAction() { super(IWorkbenchCommandConstants.FILE_EXPORT, "Export", "Save to File", UIIcon.SAVE_AS); } @Override - public void run() - { + public void run() { getEditor().doSaveAs(); } } - private class FileImportAction extends SimpleAction - { - FileImportAction() - { + private class FileImportAction extends SimpleAction { + FileImportAction() { super(IWorkbenchCommandConstants.FILE_IMPORT, "Import", "Load from File", UIIcon.LOAD); } @Override - public void run() - { + public void run() { final ContentEditor editor = getEditor(); if (editor == null) { return; @@ -238,12 +228,10 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo editor.getSite().getWorkbenchWindow().run(true, true, new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) - throws InvocationTargetException, InterruptedException - { + throws InvocationTargetException, InterruptedException { try { editor.getEditorInput().loadFromExternalFile(loadFile, monitor); - } - catch (CoreException e) { + } catch (CoreException e) { throw new InvocationTargetException(e); } } @@ -254,29 +242,24 @@ public class ContentEditorContributor extends MultiPageEditorActionBarContributo } editor.setDirty(true); editor.fireContentChanged(); - } - catch (InvocationTargetException e) { + } catch (InvocationTargetException e) { DBWorkbench.getPlatformUI().showError( - "Can't load content", + "Can't load content", "Can't load content from file '" + loadFile.getAbsolutePath() + "'", e.getTargetException()); - } - catch (InterruptedException e) { + } catch (InterruptedException e) { // do nothing } } } - private class InfoAction extends SimpleAction - { - InfoAction() - { + private class InfoAction extends SimpleAction { + InfoAction() { super("org.jkiss.dbeaver.lob.actions.info", "Info", "Show column information", DBIcon.TREE_INFO); } @Override - public void run() - { + public void run() { getEditor().toggleInfoBar(); } } diff --git a/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentFormatHandler.java b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentFormatHandler.java new file mode 100644 index 0000000000..8e54517520 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ui.editors.data/src/org/jkiss/dbeaver/ui/editors/content/ContentFormatHandler.java @@ -0,0 +1,48 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ui.editors.content; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.text.TextViewer; +import org.eclipse.jface.text.source.SourceViewer; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.ui.texteditor.AbstractTextEditor; + +public class ContentFormatHandler extends AbstractHandler { + + public ContentFormatHandler() { + } + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + IEditorPart activeEditor = HandlerUtil.getActiveEditor(event); + if (activeEditor instanceof ContentEditor) { + IEditorPart editorPart = ((ContentEditor) activeEditor).getActiveEditor(); + ITextViewer textViewer = editorPart.getAdapter(ITextViewer.class); + if (textViewer instanceof TextViewer) { + ((TextViewer)textViewer).doOperation(SourceViewer.FORMAT); + } + } + return null; + } + + +} diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java index 5627b5eecc..5c8be73474 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorBase.java @@ -55,6 +55,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.sql.*; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.ui.*; +import org.jkiss.dbeaver.ui.editors.BaseTextEditorCommands; import org.jkiss.dbeaver.ui.editors.EditorUtils; import org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorMessages; import org.jkiss.dbeaver.ui.editors.sql.preferences.*; @@ -514,7 +515,7 @@ public abstract class SQLEditorBase extends BaseTextEditor implements DBPContext SQLEditorContributor.getActionResourcePrefix(SQLEditorContributor.ACTION_CONTENT_FORMAT_PROPOSAL), this, ISourceViewer.FORMAT); - a.setActionDefinitionId(SQLEditorCommands.CMD_CONTENT_FORMAT); + a.setActionDefinitionId(BaseTextEditorCommands.CMD_CONTENT_FORMAT); setAction(SQLEditorContributor.ACTION_CONTENT_FORMAT_PROPOSAL, a); setAction(ITextEditorActionConstants.CONTEXT_PREFERENCES, new Action(SQLEditorMessages.editor_sql_preference) { //$NON-NLS-1$ diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java index 653a72bf1e..678e549342 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorCommands.java @@ -43,7 +43,7 @@ public interface SQLEditorCommands String CMD_SQL_ASSIST_TEMPLATES = "org.jkiss.dbeaver.ui.editors.sql.assist.templates"; //$NON-NLS-1$ String CMD_SYNC_CONNECTION = "org.jkiss.dbeaver.ui.editors.sql.sync.connection"; String CMD_SQL_RENAME = "org.jkiss.dbeaver.ui.editors.sql.rename"; - String CMD_CONTENT_FORMAT = "org.jkiss.dbeaver.ui.editors.text.content.format"; //$NON-NLS-1$ String CMD_OPEN_FILE = "org.jkiss.dbeaver.ui.editors.sql.open.file"; //$NON-NLS-1$ String CMD_SAVE_FILE = "org.jkiss.dbeaver.ui.editors.sql.save.file"; //$NON-NLS-1$ + } diff --git a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java index 0bc89cb66e..bc17360a60 100644 --- a/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java +++ b/plugins/org.jkiss.dbeaver.ui.editors.sql/src/org/jkiss/dbeaver/ui/editors/sql/SQLEditorContributor.java @@ -29,6 +29,7 @@ import org.eclipse.ui.texteditor.StatusLineContributionItem; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.ui.ActionUtils; import org.jkiss.dbeaver.ui.UIUtils; +import org.jkiss.dbeaver.ui.editors.BaseTextEditorCommands; import org.jkiss.dbeaver.ui.editors.sql.internal.SQLEditorMessages; import java.util.ResourceBundle; @@ -78,7 +79,7 @@ public class SQLEditorContributor extends TextEditorActionContributor contentAssistProposal = new RetargetTextEditorAction(bundle, getActionResourcePrefix(ACTION_CONTENT_ASSIST_PROPOSAL)); contentAssistProposal.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); contentFormatProposal = new RetargetTextEditorAction(bundle, getActionResourcePrefix(ACTION_CONTENT_FORMAT_PROPOSAL)); - contentFormatProposal.setActionDefinitionId(SQLEditorCommands.CMD_CONTENT_FORMAT); + contentFormatProposal.setActionDefinitionId(BaseTextEditorCommands.CMD_CONTENT_FORMAT); contentAssistTip = new RetargetTextEditorAction(bundle, getActionResourcePrefix(ACTION_CONTENT_ASSIST_TIP)); contentAssistTip.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_CONTEXT_INFORMATION); -- GitLab