import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
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.part.ViewPart;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.simantics.scl.compiler.commands.CommandSession;
import org.simantics.scl.compiler.commands.CommandSessionImportEntry;
import org.simantics.scl.compiler.commands.SCLConsoleListener;
+import org.simantics.scl.compiler.module.repository.UpdateListener;
import org.simantics.scl.compiler.testing.TestRunnable;
import org.simantics.scl.osgi.internal.TestUtils;
+import org.simantics.scl.runtime.reporting.SCLReportingHandler;
import org.simantics.scl.ui.Activator;
import org.simantics.scl.ui.imports.internal.ManageImportsDialog;
import org.simantics.scl.ui.tests.SCLTestsDialog;
public static final String PLUGIN_ID = "org.simantics.scl.ui";
public static final String IMPORTS = "imports";
+ public static final String REFRESH_AUTOMATICALLY = "refresh-automatically";
public static final String SEPARATOR = ";";
public static final String DISABLED_TAG = "[DISABLED]";
+ IPersistentPreferenceStore store;
SCLConsole console;
+ boolean refreshAutomatically = false;
+ MenuItem refreshAutomaticallyItem;
private ArrayList<CommandSessionImportEntry> readImportPreferences() {
- IPersistentPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, PLUGIN_ID);
String importsString = store.getString(IMPORTS);
String[] splitted = importsString.split(SEPARATOR);
}
IPersistentPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, PLUGIN_ID);
- store.putValue(IMPORTS, b.toString());
+ store.setValue(IMPORTS, b.toString());
}
private ArrayList<CommandSessionImportEntry> getCurrentImports() {
}
}
}
+
+ private UpdateListener dependencyListener = new UpdateListener() {
+ @Override
+ public void notifyAboutUpdate() {
+ if(refreshAutomatically)
+ console.getSession().updateRuntimeEnvironment(true);
+ }
+ };
+ private void setRefreshAutomatically(boolean refreshAutomatically, boolean refreshAlso) {
+ this.refreshAutomatically = refreshAutomatically;
+ if(refreshAutomaticallyItem != null)
+ refreshAutomaticallyItem.setSelection(refreshAutomatically);
+
+ store.setValue(REFRESH_AUTOMATICALLY, refreshAutomatically);
+
+ if(refreshAutomatically) {
+ console.getSession().setDependenciesListener(dependencyListener);
+ if(refreshAlso)
+ console.getSession().updateRuntimeEnvironment(true);
+ }
+ else {
+ console.getSession().setDependenciesListener(null);
+ dependencyListener.stopListening();
+ }
+ }
+
@Override
public void createPartControl(Composite parent) {
+ store = new ScopedPreferenceStore(InstanceScope.INSTANCE, PLUGIN_ID);
+ store.setDefault(REFRESH_AUTOMATICALLY, true);
+
this.console = new SCLConsole(parent, SWT.NONE);
- setCurrentImports(readImportPreferences());
-
- addScriptDropSupport(console);
IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
// Interrupt action
- final Action interruptAction = new Action("Interrupt current command",
- Activator.imageDescriptorFromPlugin("org.simantics.scl.ui", "icons/stop.png")) {
- @Override
- public void run() {
- console.interruptCurrentCommands();
- }
- };
- interruptAction.setDisabledImageDescriptor(
- Activator.imageDescriptorFromPlugin("org.simantics.scl.ui", "icons/stop_disabled.png"));
- interruptAction.setEnabled(false);
+ Action interruptAction = ConsoleActions.createInterruptAction(console);
toolBarManager.add(interruptAction);
// Clear console action
- final Action clearAction = new Action("Clear console",
- Activator.imageDescriptorFromPlugin("org.simantics.scl.ui", "icons/clear_console.png")) {
- @Override
- public void run() {
- setEnabled(false);
- console.clear();
- }
- };
- clearAction.setDisabledImageDescriptor(
- Activator.imageDescriptorFromPlugin("org.simantics.scl.ui", "icons/clear_console_disabled.png"));
- clearAction.setEnabled(false);
+ Action clearAction = ConsoleActions.createClearAction(console);
toolBarManager.add(clearAction);
+
console.addListener(new SCLConsoleListener() {
@Override
public void startedExecution() {
});
// Refresh action
- toolBarManager.add(new Action("Refresh modules",
- Activator.imageDescriptorFromPlugin("org.simantics.scl.ui", "icons/arrow_refresh.png")) {
+ toolBarManager.add(new Action("Refresh modules", IAction.AS_DROP_DOWN_MENU) {
+ {
+ setImageDescriptor(Activator.imageDescriptorFromPlugin("org.simantics.scl.ui", "icons/arrow_refresh.png"));
+ setMenuCreator(new IMenuCreator() {
+ Menu menu;
+ @Override
+ public Menu getMenu(Menu parent) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public Menu getMenu(Control parent) {
+ if(menu == null) {
+ menu = new Menu(parent);
+ refreshAutomaticallyItem = new MenuItem(menu, SWT.CHECK);
+ refreshAutomaticallyItem.setText("Refresh automatically");
+ refreshAutomaticallyItem.setSelection(refreshAutomatically);
+ refreshAutomaticallyItem.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ setRefreshAutomatically(!refreshAutomatically, true);
+ }
+ });
+ }
+ return menu;
+ }
+
+ @Override
+ public void dispose() {
+ if(menu != null)
+ menu.dispose();
+ }
+ });
+ }
@Override
public void run() {
console.getSession().getModuleRepository().getSourceRepository().checkUpdates();
manageImports();
}
});
-
+
// Show action for running SCL tests if in development mode
if (Platform.inDevelopmentMode()) {
toolBarManager.add(new Action("Run tests",
}
toolBarManager.update(true);
+
+ setRefreshAutomatically(store.getBoolean(REFRESH_AUTOMATICALLY), false);
+ // Do this after the actions and SCLConsoleListener are
+ // registered because it can cause output to the console.
+ setCurrentImports(readImportPreferences());
+ addScriptDropSupport(console);
}
private class ScriptRunningDropTarget extends DropTargetAdapter {
console.dispose();
}
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T getAdapter(Class<T> adapter) {
+ if (adapter == CommandSession.class)
+ return (T) console.getSession();
+ if (adapter == SCLReportingHandler.class)
+ return (T) console.getHandler();
+ return super.getAdapter(adapter);
+ }
+
}