提交 3efeea88 编写于 作者: A Alexander Fedorov

#2556 editor vertical ruler should show breakpoints

Former-commit-id: 58a91ae2
上级 b0967e8c
...@@ -252,6 +252,12 @@ public class TabbedFolderPageEditor extends TabbedFolderPage implements IDatabas ...@@ -252,6 +252,12 @@ public class TabbedFolderPageEditor extends TabbedFolderPage implements IDatabas
public TabbedFolderPageEditorSite(MultiPageEditorPart multiPageEditor, IEditorPart editor) { public TabbedFolderPageEditorSite(MultiPageEditorPart multiPageEditor, IEditorPart editor) {
super(multiPageEditor, editor); super(multiPageEditor, editor);
} }
@Override
public String getId() {
String id = editorDescriptor.getId();
return id;
}
@NotNull @NotNull
@Override @Override
......
/* /*
* DBeaver - Universal Database Manager * DBeaver - Universal Database Manager
* Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org) * Copyright (C) 2010-2017 Serge Rider (serge@jkiss.org)
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
* You may obtain a copy of the License at * You may obtain a copy of the License at
* *
* http://www.apache.org/licenses/LICENSE-2.0 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software * Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, * distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jkiss.dbeaver.ui.editors.sql; package org.jkiss.dbeaver.ui.editors.sql;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.jface.action.Action; import org.eclipse.core.runtime.jobs.JobChangeAdapter;
import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.IContributionManager;
import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.action.Separator;
import org.eclipse.jface.text.Document; import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.IDocument;
import org.eclipse.swt.SWT; import org.eclipse.jface.text.IRegion;
import org.eclipse.swt.custom.SashForm; import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.widgets.Control; import org.eclipse.swt.events.FocusListener;
import org.eclipse.ui.IEditorSite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PartInitException; import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.part.MultiPageEditorSite; import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.PartInitException;
import org.jkiss.dbeaver.DBException; import org.eclipse.ui.part.MultiPageEditorSite;
import org.jkiss.dbeaver.core.CoreCommands; import org.eclipse.ui.texteditor.IDocumentProvider;
import org.jkiss.dbeaver.core.DBeaverUI; import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext; import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.exec.compile.DBCCompileLog; import org.jkiss.dbeaver.core.CoreCommands;
import org.jkiss.dbeaver.model.exec.compile.DBCSourceHost; import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.runtime.AbstractJob; import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.sql.SQLUtils; import org.jkiss.dbeaver.model.exec.compile.DBCCompileLog;
import org.jkiss.dbeaver.model.struct.DBSObject; import org.jkiss.dbeaver.model.exec.compile.DBCSourceHost;
import org.jkiss.dbeaver.ui.*; import org.jkiss.dbeaver.model.runtime.AbstractJob;
import org.jkiss.dbeaver.ui.controls.ObjectCompilerLogViewer; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.ui.controls.ProgressPageControl; import org.jkiss.dbeaver.model.sql.SQLUtils;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput; import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.editors.entity.EntityEditor; import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.editors.text.BaseTextDocumentProvider; import org.jkiss.dbeaver.ui.controls.ObjectCompilerLogViewer;
import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.dbeaver.ui.controls.ProgressPageControl;
import org.jkiss.dbeaver.ui.editors.IDatabaseEditorInput;
/** import org.jkiss.dbeaver.ui.editors.entity.EntityEditor;
* SQLEditorNested import org.jkiss.dbeaver.ui.editors.text.BaseTextDocumentProvider;
*/ import org.jkiss.dbeaver.utils.RuntimeUtils;
public abstract class SQLEditorNested<T extends DBSObject>
extends SQLEditorBase /**
implements IActiveWorkbenchPart, IRefreshablePart, DBCSourceHost * SQLEditorNested
{ */
public abstract class SQLEditorNested<T extends DBSObject>
private EditorPageControl pageControl; extends SQLEditorBase
private ObjectCompilerLogViewer compileLog; implements IActiveWorkbenchPart, IRefreshablePart, DBCSourceHost
private Control editorControl; {
private SashForm editorSash;
private boolean activated; private EditorPageControl pageControl;
private ObjectCompilerLogViewer compileLog;
public SQLEditorNested() { private Control editorControl;
super(); private SashForm editorSash;
private boolean activated;
setDocumentProvider(new ObjectDocumentProvider());
//setHasVerticalRuler(false); public SQLEditorNested() {
} super();
@Override setDocumentProvider(new ObjectDocumentProvider());
public IDatabaseEditorInput getEditorInput() { //setHasVerticalRuler(false);
return (IDatabaseEditorInput)super.getEditorInput(); }
}
@Override
@Override public IDatabaseEditorInput getEditorInput() {
public T getSourceObject() return (IDatabaseEditorInput)super.getEditorInput();
{ }
IDatabaseEditorInput editorInput = getEditorInput();
if (editorInput == null) { @Override
return null; public T getSourceObject()
} {
return (T) editorInput.getDatabaseObject(); IDatabaseEditorInput editorInput = getEditorInput();
} if (editorInput == null) {
return null;
@Override }
public DBCExecutionContext getExecutionContext() { return (T) editorInput.getDatabaseObject();
IDatabaseEditorInput editorInput = getEditorInput(); }
if (editorInput == null) {
return null; @Override
} public DBCExecutionContext getExecutionContext() {
return editorInput.getExecutionContext(); IDatabaseEditorInput editorInput = getEditorInput();
} if (editorInput == null) {
return null;
@Override }
public void createPartControl(Composite parent) return editorInput.getExecutionContext();
{ }
pageControl = new EditorPageControl(parent, SWT.SHEET);
@Override
boolean hasCompiler = getCompileCommandId() != null; public void createPartControl(Composite parent)
{
if (hasCompiler) { pageControl = new EditorPageControl(parent, SWT.SHEET);
editorSash = new SashForm(pageControl.createContentContainer(), SWT.VERTICAL | SWT.SMOOTH);
super.createPartControl(editorSash); boolean hasCompiler = getCompileCommandId() != null;
editorControl = editorSash.getChildren()[0]; if (hasCompiler) {
compileLog = new ObjectCompilerLogViewer(editorSash, false); editorSash = new SashForm(pageControl.createContentContainer(), SWT.VERTICAL | SWT.SMOOTH);
} else { super.createPartControl(editorSash);
super.createPartControl(pageControl.createContentContainer());
} editorControl = editorSash.getChildren()[0];
compileLog = new ObjectCompilerLogViewer(editorSash, false);
// Create new or substitute progress control } else {
pageControl.createOrSubstituteProgressPanel(getSite()); super.createPartControl(pageControl.createContentContainer());
pageControl.setInfo("Source"); }
if (hasCompiler) { // Create new or substitute progress control
editorSash.setWeights(new int[]{70, 30}); pageControl.createOrSubstituteProgressPanel(getSite());
editorSash.setMaximizedControl(editorControl); pageControl.setInfo("Source");
}
if (hasCompiler) {
// Use focus to activate page control editorSash.setWeights(new int[]{70, 30});
final Control editorControl = getEditorControl(); editorSash.setMaximizedControl(editorControl);
assert editorControl != null; }
editorControl.addFocusListener(new FocusListener() {
@Override // Use focus to activate page control
public void focusGained(FocusEvent e) { final Control editorControl = getEditorControl();
if (pageControl != null && !pageControl.isDisposed()) { assert editorControl != null;
pageControl.activate(true); editorControl.addFocusListener(new FocusListener() {
} @Override
} public void focusGained(FocusEvent e) {
if (pageControl != null && !pageControl.isDisposed()) {
@Override pageControl.activate(true);
public void focusLost(FocusEvent e) { }
if (pageControl != null && !pageControl.isDisposed()) { }
pageControl.activate(false);
} @Override
} public void focusLost(FocusEvent e) {
}); if (pageControl != null && !pageControl.isDisposed()) {
} pageControl.activate(false);
}
@Override }
public void doSave(final IProgressMonitor progressMonitor) { });
DBeaverUI.syncExec(new Runnable() { }
@Override
public void run() { @Override
SQLEditorNested.super.doSave(progressMonitor); public void doSave(final IProgressMonitor progressMonitor) {
} DBeaverUI.syncExec(new Runnable() {
}); @Override
} public void run() {
SQLEditorNested.super.doSave(progressMonitor);
@Override }
public void activatePart() { });
if (!activated) { }
reloadSyntaxRules();
activated = true; @Override
} public void activatePart() {
} if (!activated) {
reloadSyntaxRules();
@Override activated = true;
public void deactivatePart() { }
} }
@Override @Override
public void refreshPart(Object source, boolean force) { public void deactivatePart() {
// Check if we are in saving process }
// If so then no refresh needed (source text was updated during save)
IEditorSite editorSite = getEditorSite(); @Override
if (editorSite instanceof MultiPageEditorSite && public void refreshPart(Object source, boolean force) {
((MultiPageEditorSite) editorSite).getMultiPageEditor() instanceof EntityEditor && // Check if we are in saving process
((EntityEditor) ((MultiPageEditorSite) editorSite).getMultiPageEditor()).isSaveInProgress()) // If so then no refresh needed (source text was updated during save)
{ IEditorSite editorSite = getEditorSite();
return; if (editorSite instanceof MultiPageEditorSite &&
} ((MultiPageEditorSite) editorSite).getMultiPageEditor() instanceof EntityEditor &&
((EntityEditor) ((MultiPageEditorSite) editorSite).getMultiPageEditor()).isSaveInProgress())
final IDocumentProvider documentProvider = getDocumentProvider(); {
if (documentProvider instanceof SQLEditorNested.ObjectDocumentProvider) { return;
((SQLEditorNested.ObjectDocumentProvider) documentProvider).sourceText = null; }
}
if (force) { final IDocumentProvider documentProvider = getDocumentProvider();
try { if (documentProvider instanceof SQLEditorNested.ObjectDocumentProvider) {
super.init(editorSite, getEditorInput()); ((SQLEditorNested.ObjectDocumentProvider) documentProvider).sourceText = null;
//setFocus(); }
} catch (PartInitException e) { if (force) {
log.error(e); try {
} super.init(editorSite, getEditorInput());
} //setFocus();
reloadSyntaxRules(); } catch (PartInitException e) {
} log.error(e);
}
protected String getCompileCommandId() }
{ reloadSyntaxRules();
return null; }
}
protected String getCompileCommandId()
public boolean isDocumentLoaded() { {
final IDocumentProvider documentProvider = getDocumentProvider(); return null;
if (documentProvider instanceof SQLEditorNested.ObjectDocumentProvider) { }
return ((SQLEditorNested.ObjectDocumentProvider) documentProvider).sourceLoaded;
} public boolean isDocumentLoaded() {
return true; final IDocumentProvider documentProvider = getDocumentProvider();
} if (documentProvider instanceof SQLEditorNested.ObjectDocumentProvider) {
return ((SQLEditorNested.ObjectDocumentProvider) documentProvider).sourceLoaded;
private class ObjectDocumentProvider extends BaseTextDocumentProvider { }
return true;
private String sourceText; }
private boolean sourceLoaded;
private class ObjectDocumentProvider extends BaseTextDocumentProvider {
@Override
public boolean isReadOnly(Object element) { private String sourceText;
return SQLEditorNested.this.isReadOnly(); private boolean sourceLoaded;
}
@Override
@Override public boolean isReadOnly(Object element) {
public boolean isModifiable(Object element) { return SQLEditorNested.this.isReadOnly();
return !SQLEditorNested.this.isReadOnly(); }
}
@Override
@Override public boolean isModifiable(Object element) {
protected IDocument createDocument(Object element) throws CoreException { return !SQLEditorNested.this.isReadOnly();
final Document document = new Document(); }
if (sourceText == null) { @Override
sourceText = SQLUtils.generateCommentLine(getDataSource(), "Loading '" + getEditorInput().getName() + "' source..."); protected IAnnotationModel createAnnotationModel(Object element) throws CoreException {
document.set(sourceText); //FIXME:AF: provide common way to retrieve IResource for remote object
IResource resource = DBeaverCore.getInstance().getProjectManager().getActiveProject();
AbstractJob job = new AbstractJob("Load SQL source") { return new ResourceMarkerAnnotationModel(resource);
{ }
setUser(true);
} @Override
@Override protected IDocument createDocument(Object element) throws CoreException {
protected IStatus run(DBRProgressMonitor monitor) { final Document document = new Document();
try {
sourceText = getSourceText(monitor); if (sourceText == null) {
if (sourceText == null) { sourceText = SQLUtils.generateCommentLine(getDataSource(), "Loading '" + getEditorInput().getName() + "' source...");
sourceText = SQLUtils.generateCommentLine(getDataSource(), "Empty source"); document.set(sourceText);
}
return Status.OK_STATUS; AbstractJob job = new AbstractJob("Load SQL source") {
} catch (Exception e) { {
sourceText = "/* ERROR WHILE READING SOURCE:\n\n" + e.getMessage() + "\n*/"; setUser(true);
return Status.CANCEL_STATUS; }
} @Override
} protected IStatus run(DBRProgressMonitor monitor) {
}; try {
job.addJobChangeListener(new JobChangeAdapter() { sourceText = getSourceText(monitor);
@Override if (sourceText == null) {
public void done(IJobChangeEvent event) { sourceText = SQLUtils.generateCommentLine(getDataSource(), "Empty source");
DBeaverUI.asyncExec(new Runnable() { }
@Override return Status.OK_STATUS;
public void run() { } catch (Exception e) {
try { sourceText = "/* ERROR WHILE READING SOURCE:\n\n" + e.getMessage() + "\n*/";
SQLEditorNested.this.init(getEditorSite(), getEditorInput()); return Status.CANCEL_STATUS;
SQLEditorNested.this.reloadSyntaxRules(); }
} catch (PartInitException e) { }
log.error(e); };
} job.addJobChangeListener(new JobChangeAdapter() {
} @Override
}); public void done(IJobChangeEvent event) {
super.done(event); DBeaverUI.asyncExec(new Runnable() {
} @Override
}); public void run() {
job.schedule(); try {
} SQLEditorNested.this.init(getEditorSite(), getEditorInput());
// Set text SQLEditorNested.this.reloadSyntaxRules();
document.set(sourceText); } catch (PartInitException e) {
sourceLoaded = true; log.error(e);
}
return document; }
} });
super.done(event);
@Override }
protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException { });
setSourceText(RuntimeUtils.makeMonitor(monitor), document.get()); job.schedule();
} }
} // Set text
document.set(sourceText);
@Override sourceLoaded = true;
public DBCCompileLog getCompileLog()
{ return document;
return compileLog; }
}
@Override
@Override protected void doSaveDocument(IProgressMonitor monitor, Object element, IDocument document, boolean overwrite) throws CoreException {
public void setCompileInfo(String message, boolean error) setSourceText(RuntimeUtils.makeMonitor(monitor), document.get());
{ }
pageControl.setInfo(message); }
}
@Override
@Override public DBCCompileLog getCompileLog()
public void positionSource(int line, int position) {
{ return compileLog;
try { }
final IRegion lineInfo = getTextViewer().getDocument().getLineInformation(line - 1);
final int offset = lineInfo.getOffset() + position - 1; @Override
super.selectAndReveal(offset, 1); public void setCompileInfo(String message, boolean error)
//textEditor.setFocus(); {
} catch (BadLocationException e) { pageControl.setInfo(message);
log.warn(e); }
// do nothing
} @Override
} public void positionSource(int line, int position)
{
@Override try {
public void showCompileLog() final IRegion lineInfo = getTextViewer().getDocument().getLineInformation(line - 1);
{ final int offset = lineInfo.getOffset() + position - 1;
editorSash.setMaximizedControl(null); super.selectAndReveal(offset, 1);
compileLog.layoutLog(); //textEditor.setFocus();
} } catch (BadLocationException e) {
log.warn(e);
protected abstract String getSourceText(DBRProgressMonitor monitor) // do nothing
throws DBException; }
}
protected abstract void setSourceText(DBRProgressMonitor monitor, String sourceText);
@Override
protected void contributeEditorCommands(IContributionManager toolBarManager) public void showCompileLog()
{ {
toolBarManager.add(ActionUtils.makeCommandContribution(getSite().getWorkbenchWindow(), CoreCommands.CMD_OPEN_FILE)); editorSash.setMaximizedControl(null);
toolBarManager.add(ActionUtils.makeCommandContribution(getSite().getWorkbenchWindow(), CoreCommands.CMD_SAVE_FILE)); compileLog.layoutLog();
String compileCommandId = getCompileCommandId(); }
if (compileCommandId != null) {
toolBarManager.add(new Separator()); protected abstract String getSourceText(DBRProgressMonitor monitor)
toolBarManager.add(ActionUtils.makeCommandContribution(getSite().getWorkbenchWindow(), compileCommandId)); throws DBException;
toolBarManager.add(new ViewLogAction());
} protected abstract void setSourceText(DBRProgressMonitor monitor, String sourceText);
}
protected void contributeEditorCommands(IContributionManager toolBarManager)
@Override {
public void doSaveAs() { toolBarManager.add(ActionUtils.makeCommandContribution(getSite().getWorkbenchWindow(), CoreCommands.CMD_OPEN_FILE));
saveToExternalFile(); toolBarManager.add(ActionUtils.makeCommandContribution(getSite().getWorkbenchWindow(), CoreCommands.CMD_SAVE_FILE));
} String compileCommandId = getCompileCommandId();
if (compileCommandId != null) {
private class EditorPageControl extends ProgressPageControl { toolBarManager.add(new Separator());
toolBarManager.add(ActionUtils.makeCommandContribution(getSite().getWorkbenchWindow(), compileCommandId));
public EditorPageControl(Composite parent, int style) toolBarManager.add(new ViewLogAction());
{ }
super(parent, style); }
}
@Override
@Override public void doSaveAs() {
protected void fillCustomActions(IContributionManager contributionManager) { saveToExternalFile();
contributeEditorCommands(contributionManager); }
}
} private class EditorPageControl extends ProgressPageControl {
public class ViewLogAction extends Action public EditorPageControl(Composite parent, int style)
{ {
public ViewLogAction() super(parent, style);
{ }
super("View compile log", DBeaverIcons.getImageDescriptor(UIIcon.COMPILE_LOG)); //$NON-NLS-2$
} @Override
protected void fillCustomActions(IContributionManager contributionManager) {
@Override contributeEditorCommands(contributionManager);
public void run() }
{ }
if (getTextViewer().getControl().isDisposed()) {
return; public class ViewLogAction extends Action
} {
if (editorSash.getMaximizedControl() == null) { public ViewLogAction()
editorSash.setMaximizedControl(editorControl); {
} else { super("View compile log", DBeaverIcons.getImageDescriptor(UIIcon.COMPILE_LOG)); //$NON-NLS-2$
showCompileLog(); }
}
} @Override
public void run()
} {
if (getTextViewer().getControl().isDisposed()) {
} return;
}
if (editorSash.getMaximizedControl() == null) {
editorSash.setMaximizedControl(editorControl);
} else {
showCompileLog();
}
}
}
}
...@@ -14,4 +14,6 @@ Require-Bundle: org.eclipse.core.runtime, ...@@ -14,4 +14,6 @@ Require-Bundle: org.eclipse.core.runtime,
org.jkiss.dbeaver.core, org.jkiss.dbeaver.core,
org.jkiss.dbeaver.ui, org.jkiss.dbeaver.ui,
org.jkiss.dbeaver.debug.core org.jkiss.dbeaver.debug.core
Export-Package: org.jkiss.dbeaver.debug.ui Export-Package: org.jkiss.dbeaver.debug.ui,
org.jkiss.dbeaver.debug.ui.actions,
org.jkiss.dbeaver.debug.ui.details
...@@ -23,21 +23,21 @@ ...@@ -23,21 +23,21 @@
point="org.eclipse.core.runtime.adapters"> point="org.eclipse.core.runtime.adapters">
<factory <factory
adaptableType="org.jkiss.dbeaver.ui.editors.entity.EntityEditor" adaptableType="org.jkiss.dbeaver.ui.editors.entity.EntityEditor"
class="org.jkiss.dbeaver.debug.internal.ui.actions.DebugActionAdapterFactory"> class="org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory">
<adapter <adapter
type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget"> type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget">
</adapter> </adapter>
</factory> </factory>
<factory <factory
adaptableType="org.jkiss.dbeaver.ui.editors.entity.EntityEditorInput" adaptableType="org.jkiss.dbeaver.ui.editors.entity.EntityEditorInput"
class="org.jkiss.dbeaver.debug.internal.ui.actions.DebugActionAdapterFactory"> class="org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory">
<adapter <adapter
type="org.eclipse.debug.ui.actions.ILaunchable"> type="org.eclipse.debug.ui.actions.ILaunchable">
</adapter> </adapter>
</factory> </factory>
<factory <factory
adaptableType="org.jkiss.dbeaver.model.navigator.DBNDatabaseObject" adaptableType="org.jkiss.dbeaver.model.navigator.DBNDatabaseObject"
class="org.jkiss.dbeaver.debug.internal.ui.actions.DebugActionAdapterFactory"> class="org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory">
<adapter <adapter
type="org.eclipse.debug.ui.actions.ILaunchable"> type="org.eclipse.debug.ui.actions.ILaunchable">
</adapter> </adapter>
......
package org.jkiss.dbeaver.debug.internal.ui.actions; package org.jkiss.dbeaver.debug.ui.actions;
import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.debug.ui.actions.ILaunchable; import org.eclipse.debug.ui.actions.ILaunchable;
import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget; import org.eclipse.debug.ui.actions.IToggleBreakpointsTarget;
import org.jkiss.dbeaver.debug.ui.actions.ToggleProcedureBreakpointTarget;
public class DebugActionAdapterFactory implements IAdapterFactory { public class DebugActionAdapterFactory implements IAdapterFactory {
......
...@@ -77,4 +77,31 @@ ...@@ -77,4 +77,31 @@
</shortcut> </shortcut>
</extension> </extension>
<extension
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="org.jkiss.dbeaver.ext.postgresql.ui.editors.PostgreSourceViewEditor"
class="org.jkiss.dbeaver.debug.ui.actions.DebugActionAdapterFactory">
<adapter
type="org.eclipse.debug.ui.actions.IToggleBreakpointsTarget">
</adapter>
</factory>
</extension>
<extension
point="org.eclipse.ui.editorActions">
<editorContribution
id="org.jkiss.dbeaver.debug.ui.editorContribution"
targetID="postgresql.source.view">
<action
actionID="RulerDoubleClick"
class="org.eclipse.debug.ui.actions.RulerToggleBreakpointActionDelegate"
icon="platform:/plugin/org.eclipse.debug.ui/$nl$/icons/full/obj16/brkp_obj.png"
id="org.jkiss.dbeaver.debug.ui.actions.ManageBreakpointRulerAction"
label="Toggle &amp;Breakpoint"
style="push">
</action>
</editorContribution>
</extension>
</plugin> </plugin>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册