X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Fconsole%2FSCLConsoleView.java;h=516b267f40c5030e829ea810ff0fb45f87ee3cc5;hp=bab62144b5e514ffbcdd6f6984b650e7875a4e76;hb=6a8b529bc5ceff5f1455968c03e65d140ffb6e39;hpb=3429953fc33fa37fe9f03d01f66dbe66fa97e567 diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/console/SCLConsoleView.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/console/SCLConsoleView.java index bab62144b..516b267f4 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/console/SCLConsoleView.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/console/SCLConsoleView.java @@ -6,8 +6,13 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; @@ -28,6 +33,7 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.preferences.ScopedPreferenceStore; import org.simantics.scl.compiler.commands.CommandSession; @@ -110,13 +116,54 @@ public class SCLConsoleView extends ViewPart { console.getSession().setImportEntries(entries); } + AtomicReference> assignedImports = new AtomicReference<>(); + + private class SetImportsJob extends Job { + + public SetImportsJob() { + super(Messages.SCLConsoleView_SetImports); + setUser(true); + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + try { + ArrayList entries = assignedImports.getAndSet(null); + if (entries != null) + setCurrentImports(entries); + return Status.OK_STATUS; + } finally { + monitor.done(); + } + } + + @Override + public boolean shouldSchedule() { + return PlatformUI.isWorkbenchRunning(); + } + + @Override + public boolean shouldRun() { + return PlatformUI.isWorkbenchRunning(); + } + + } + + SetImportsJob setImportsJob = new SetImportsJob(); + + private void scheduleSetCurrentImports(ArrayList entries) { + boolean scheduled = assignedImports.getAndSet(entries) != null; + if (!scheduled) + setImportsJob.schedule(); + } + private void manageImports() { ManageImportsDialog dialog = new ManageImportsDialog( getSite().getShell(), getCurrentImports()); if(dialog.open() == Dialog.OK) { writeImportPreferences(dialog.getImports()); - setCurrentImports(dialog.getImports()); + scheduleSetCurrentImports(dialog.getImports()); } } @@ -263,10 +310,11 @@ public class SCLConsoleView extends ViewPart { toolBarManager.update(true); setRefreshAutomatically(store.getBoolean(REFRESH_AUTOMATICALLY), false); + addScriptDropSupport(console); + // Do this after the actions and SCLConsoleListener are // registered because it can cause output to the console. - setCurrentImports(readImportPreferences()); - addScriptDropSupport(console); + scheduleSetCurrentImports(readImportPreferences()); } private class ScriptRunningDropTarget extends DropTargetAdapter {