X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Fissues%2FSCLIssuesView.java;h=9f4994eb1ddd42b141d680a370e0b60be1018cbe;hb=refs%2Fchanges%2F75%2F1775%2F3;hp=b4fd1edd8a1c8fdad594ff86e6a6b610f8b5abcb;hpb=7045f0f516c243563976207abcec13a68891ff1d;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java index b4fd1edd8..9f4994eb1 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/issues/SCLIssuesView.java @@ -1,5 +1,10 @@ package org.simantics.scl.ui.issues; +import java.util.Iterator; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.resource.ImageRegistry; @@ -11,6 +16,9 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.graphics.Image; @@ -23,11 +31,12 @@ import org.eclipse.swt.widgets.Table; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.handlers.IHandlerService; import org.eclipse.ui.part.ViewPart; import org.simantics.scl.compiler.errors.ErrorSeverity; import org.simantics.scl.osgi.SCLOsgi; +import org.simantics.scl.osgi.issues.SCLIssuesTableEntry; import org.simantics.scl.ui.Activator; -import org.simantics.scl.ui.editor2.OpenSCLDefinition; public class SCLIssuesView extends ViewPart { @@ -43,6 +52,8 @@ public class SCLIssuesView extends ViewPart { SCLIssuesContentProvider issuesContentProvider = new SCLIssuesContentProvider(); + Clipboard clipboard; + public SCLIssuesView() { super(); imageRegistry = Activator.getInstance().getImageRegistry(); @@ -55,7 +66,8 @@ public class SCLIssuesView extends ViewPart { IAction action = new Action("Refresh") { @Override public void run() { - SCLOsgi.MODULE_REPOSITORY.getSourceRepository().checkUpdates(); + tableViewer.setInput(SCLOsgi.MODULE_REPOSITORY); +// issuesContentProvider.refresh() } }; action.setImageDescriptor(imageRegistry.getDescriptor("arrow_refresh")); @@ -64,10 +76,12 @@ public class SCLIssuesView extends ViewPart { @Override public void createPartControl(Composite parent) { + this.clipboard = new Clipboard(parent.getDisplay()); + this.parent = parent; parent.setLayout(new FillLayout()); tableViewer = new TableViewer(parent, - SWT.FULL_SELECTION | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL); + SWT.FULL_SELECTION | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL); ColumnViewerToolTipSupport.enableFor(tableViewer); tableViewer.setContentProvider(issuesContentProvider); @@ -90,6 +104,8 @@ public class SCLIssuesView extends ViewPart { SCLIssuesTableEntry entry = (SCLIssuesTableEntry)element; return entry.error.severity == ErrorSeverity.ERROR ? imageRegistry.get("error") + : entry.error.severity == ErrorSeverity.IMPORT_ERROR + ? imageRegistry.get("import_error") : imageRegistry.get("warning"); } }); @@ -142,9 +158,28 @@ public class SCLIssuesView extends ViewPart { public void doubleClick(DoubleClickEvent event) { IStructuredSelection selection = (IStructuredSelection)event.getSelection(); SCLIssuesTableEntry entry = (SCLIssuesTableEntry)selection.getFirstElement(); - OpenSCLDefinition.openDefinition(entry.moduleName, entry.error.location); + entry.openLocation(); } }); + + IHandlerService serv = (IHandlerService) getSite().getService(IHandlerService.class); + serv.activateHandler(org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY, new CopyHandler()); + } + + class CopyHandler extends AbstractHandler { + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + IStructuredSelection selection = tableViewer.getStructuredSelection(); + if(!selection.isEmpty()) { + StringBuilder b = new StringBuilder(); + for(Iterator it=selection.iterator();it.hasNext();) { + SCLIssuesTableEntry entry = (SCLIssuesTableEntry)it.next(); + b.append(entry.moduleName).append('\t').append(entry.error.description).append('\n'); + } + clipboard.setContents(new Object[] { b.toString() }, new Transfer[] { TextTransfer.getInstance() }); + } + return null; + } } private void resizeColumns() { @@ -176,6 +211,10 @@ public class SCLIssuesView extends ViewPart { public void dispose() { super.dispose(); issuesContentProvider.dispose(); + if(clipboard != null) { + clipboard.dispose(); + clipboard = null; + } } }