Added "Scroll Lock" toolbar action.
diff --git a/com.google.eclipse.terminal.local/icons/scroll_lock.gif b/com.google.eclipse.terminal.local/icons/scroll_lock.gif
new file mode 100644
index 0000000..68fd6cf
--- /dev/null
+++ b/com.google.eclipse.terminal.local/icons/scroll_lock.gif
Binary files differ
diff --git a/com.google.eclipse.terminal.local/plugin.xml b/com.google.eclipse.terminal.local/plugin.xml
index 25c1c48..6cf6dc1 100644
--- a/com.google.eclipse.terminal.local/plugin.xml
+++ b/com.google.eclipse.terminal.local/plugin.xml
@@ -74,7 +74,7 @@
<extension
point="org.eclipse.ui.handlers">
<handler
- class="com.google.eclipse.terminal.local.ui.OpenTerminalCommand"
+ class="com.google.eclipse.terminal.local.ui.command.OpenTerminalCommand"
commandId="com.google.eclipse.terminal.local.open">
</handler>
</extension>
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
index 4cbb715..61ae1a7 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/Activator.java
@@ -8,10 +8,14 @@
*/
package com.google.eclipse.terminal.local;
+import static com.google.eclipse.terminal.local.ImageKeys.SCROLL_LOCK;
import static org.eclipse.core.runtime.IStatus.*;
+import java.net.URL;
+
import org.eclipse.core.runtime.*;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.*;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -35,6 +39,11 @@
super.stop(context);
}
+ @Override protected void initializeImageRegistry(ImageRegistry registry) {
+ URL scrollLockImageUrl = instance().getBundle().getEntry("icons/scroll_lock.gif");
+ registry.put(SCROLL_LOCK, ImageDescriptor.createFromURL(scrollLockImageUrl));
+ }
+
public static void log(String message, Throwable cause) {
log(new Status(ERROR, PLUGIN_ID, OK, message, cause));
}
@@ -43,6 +52,10 @@
instance().getLog().log(status);
}
+ public static ImageDescriptor imageDescriptor(String key) {
+ return instance().getImageRegistry().getDescriptor(key);
+ }
+
public static Activator instance() {
return plugin;
}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
new file mode 100644
index 0000000..7290c5d
--- /dev/null
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ImageKeys.java
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.terminal.local;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public final class ImageKeys {
+ public static final String SCROLL_LOCK = "scrollLock";
+
+ private ImageKeys() {}
+}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/OpenTerminalCommand.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/command/OpenTerminalCommand.java
similarity index 96%
rename from com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/OpenTerminalCommand.java
rename to com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/command/OpenTerminalCommand.java
index 4be9975..ba818bb 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/OpenTerminalCommand.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/command/OpenTerminalCommand.java
@@ -6,7 +6,7 @@
*
* http://www.eclipse.org/legal/epl-v10.html
*/
-package com.google.eclipse.terminal.local.ui;
+package com.google.eclipse.terminal.local.ui.command;
import static com.google.eclipse.terminal.local.ui.view.TerminalView.openTerminalView;
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
index d3c655e..da4c1e0 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.java
@@ -15,6 +15,7 @@
*/
public class Messages extends NLS {
public static String defaultViewTitle;
+ public static String scrollLock;
static {
Class<Messages> type = Messages.class;
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
index 950c180..8417f99 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/Messages.properties
@@ -1 +1,2 @@
defaultViewTitle=Local Terminal
+scrollLock=Scroll Lock
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
index ac56d8d..c5387e1 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
@@ -9,16 +9,18 @@
package com.google.eclipse.terminal.local.ui.view;
import static com.google.eclipse.terminal.local.Activator.*;
+import static com.google.eclipse.terminal.local.ImageKeys.SCROLL_LOCK;
import static com.google.eclipse.terminal.local.ui.preferences.ColorsAndFontsPreferences.*;
import static com.google.eclipse.terminal.local.ui.preferences.GeneralPreferences.*;
import static com.google.eclipse.terminal.local.ui.util.Displays.runInDisplayThread;
-import static com.google.eclipse.terminal.local.ui.view.Messages.defaultViewTitle;
+import static com.google.eclipse.terminal.local.ui.view.Messages.*;
import static com.google.eclipse.terminal.local.util.Platform.userHomeDirectory;
import static org.eclipse.core.runtime.Path.fromOSString;
import static org.eclipse.jface.resource.JFaceResources.TEXT_FONT;
import static org.eclipse.ui.IWorkbenchPage.VIEW_ACTIVATE;
import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.action.*;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.*;
import org.eclipse.swt.SWT;
@@ -36,6 +38,7 @@
* @author alruiz@google.com (Alex Ruiz)
*/
public class TerminalView extends ViewPart implements LifeCycleListener {
+ private static final String SCROLL_LOCK_ENABLED = "scrollLock";
private static final String TITLE_STATE_TYPE = "title";
private static final String WORKING_DIRECTORY_STATE_TYPE = "workingDirectory";
@@ -47,6 +50,8 @@
private TerminalWidget terminalWidget;
private IPath workingDirectory;
+ private Action scrollLockAction;
+
public static void openTerminalView(IPath workingDirectory) {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
try {
@@ -77,6 +82,7 @@
}
@Override public void saveState(IMemento memento) {
+ saveState(memento, SCROLL_LOCK_ENABLED, String.valueOf(terminalWidget.isScrollLockEnabled()));
saveState(memento, TITLE_STATE_TYPE, getPartName());
saveState(memento, WORKING_DIRECTORY_STATE_TYPE, workingDirectory.toOSString());
}
@@ -130,7 +136,10 @@
};
JFaceResources.getFontRegistry().addListener(textFontChangeListener);
updateFont();
+ scrollLockAction = new ScrollLockAction();
+ setupLocalToolBars();
if (savedState != null) {
+ updateScrollLockUsingSavedState();
connectUsingSavedState();
return;
}
@@ -138,6 +147,7 @@
setPartName(defaultViewTitle);
open(userHomeDirectory());
}
+ enableScrollLock(scrollLockAction.isChecked());
}
private void updateColors() {
@@ -163,6 +173,25 @@
terminalWidget.setBufferLineCount(bufferLineCount());
}
+ private void setupLocalToolBars() {
+ IToolBarManager toolBarManager = getViewSite().getActionBars().getToolBarManager();
+ toolBarManager.add(scrollLockAction);
+ }
+
+ private void updateScrollLockUsingSavedState() {
+ boolean newValue = Boolean.valueOf(savedState(SCROLL_LOCK_ENABLED));
+ enableScrollLockAndUpdateAction(newValue);
+ }
+
+ private void enableScrollLockAndUpdateAction(boolean enabled) {
+ enableScrollLock(enabled);
+ scrollLockAction.setChecked(enabled);
+ }
+
+ private void enableScrollLock(boolean enabled) {
+ terminalWidget.enableScrollLock(enabled);
+ }
+
private void connectUsingSavedState() {
String title = savedState(TITLE_STATE_TYPE);
setPartName(title);
@@ -199,4 +228,17 @@
}
super.dispose();
}
+
+ private class ScrollLockAction extends Action {
+ ScrollLockAction() {
+ super(scrollLock, AS_RADIO_BUTTON);
+ setChecked(false);
+ setImageDescriptor(imageDescriptor(SCROLL_LOCK));
+ }
+
+ @Override public void run() {
+ boolean newValue = !terminalWidget.isScrollLockEnabled();
+ enableScrollLockAndUpdateAction(newValue);
+ }
+ }
}
diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
index 184ef70..784acca 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalWidget.java
@@ -144,6 +144,14 @@
return terminalControl.setFocus();
}
+ public boolean isScrollLockEnabled() {
+ return terminalControl.isScrollLock();
+ }
+
+ void enableScrollLock(boolean enabled) {
+ terminalControl.setScrollLock(enabled);
+ }
+
private static class TerminalListener implements ITerminalListener {
ITerminalListener delegate;