From 51e913592df63e7484f2cee5783b1918c8dd6ef4 Mon Sep 17 00:00:00 2001 From: Michael Scharf Date: Sat, 13 Oct 2007 02:20:08 +0000 Subject: [PATCH] bug 206219: [terminal] make it easy to invert the terminal colors https://bugs.eclipse.org/bugs/show_bug.cgi?id=206219 --- .../view/TerminalPreferenceInitializer.java | 3 ++- .../terminal/view/TerminalPreferencePage.java | 13 +++++++++++-- .../tm/internal/terminal/view/TerminalView.java | 5 ++++- .../tm/internal/terminal/view/ViewMessages.java | 7 ++++--- .../terminal/view/ViewMessages.properties | 1 + .../terminal/control/ITerminalViewControl.java | 1 + .../terminal/control/impl/TerminalControl.java | 3 +++ .../terminal/emulator/VT100TerminalControl.java | 4 ++++ .../terminal/textcanvas/ILinelRenderer.java | 1 + .../internal/terminal/textcanvas/StyleMap.java | 16 ++++++++++++++-- .../internal/terminal/textcanvas/TextCanvas.java | 5 +++++ .../terminal/textcanvas/TextLineRenderer.java | 4 ++++ 12 files changed, 54 insertions(+), 9 deletions(-) diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferenceInitializer.java b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferenceInitializer.java index 7fd4c4a10ed..b1f721e63fc 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferenceInitializer.java +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferenceInitializer.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Michael Scharf (Wind River) - initial API and implementation + * Michael Scharf (Wind River) - initial API and implementation * Martin Oberhuber (Wind River) - fixed copyright headers and beautified *******************************************************************************/ package org.eclipse.tm.internal.terminal.view; @@ -22,6 +22,7 @@ public class TerminalPreferenceInitializer extends AbstractPreferenceInitializer public void initializeDefaultPreferences() { Preferences store = TerminalViewPlugin.getDefault().getPluginPreferences(); store.setDefault(TerminalPreferencePage.PREF_LIMITOUTPUT, TerminalPreferencePage.DEFAULT_LIMITOUTPUT); + store.setDefault(TerminalPreferencePage.PREF_INVERT_COLORS, TerminalPreferencePage.DEFAULT_INVERT_COLORS); store.setDefault(TerminalPreferencePage.PREF_BUFFERLINES, TerminalPreferencePage.DEFAULT_BUFFERLINES); store.setDefault(TerminalPreferencePage.PREF_TIMEOUT_SERIAL, TerminalPreferencePage.DEFAULT_TIMEOUT_SERIAL); store.setDefault(TerminalPreferencePage.PREF_TIMEOUT_NETWORK, TerminalPreferencePage.DEFAULT_TIMEOUT_NETWORK); diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferencePage.java b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferencePage.java index 412796abf91..fc02b1a6969 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferencePage.java +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalPreferencePage.java @@ -11,7 +11,7 @@ * Helmut Haigermoser and Ted Williams. * * Contributors: - * Michael Scharf (Wind River) - split into core, view and connector plugins + * Michael Scharf (Wind River) - split into core, view and connector plugins * Martin Oberhuber (Wind River) - fixed copyright headers and beautified *******************************************************************************/ package org.eclipse.tm.internal.terminal.view; @@ -35,14 +35,18 @@ public class TerminalPreferencePage extends FieldEditorPreferencePage implements public static final String PREF_BUFFERLINES = "TerminalPrefBufferLines"; //$NON-NLS-1$ public static final String PREF_TIMEOUT_SERIAL = "TerminalPrefTimeoutSerial"; //$NON-NLS-1$ public static final String PREF_TIMEOUT_NETWORK = "TerminalPrefTimeoutNetwork"; //$NON-NLS-1$ + public static final String PREF_INVERT_COLORS = "TerminalPrefInvertColors"; //$NON-NLS-1$ public static final boolean DEFAULT_LIMITOUTPUT = true; public static final int DEFAULT_BUFFERLINES = 1000; public static final int DEFAULT_TIMEOUT_SERIAL = 5; public static final int DEFAULT_TIMEOUT_NETWORK = 5; + public static final boolean DEFAULT_INVERT_COLORS = false; + - protected TerminalBooleanFieldEditor fEditorLimitOutput; + protected BooleanFieldEditor fInvertColors; + protected IntegerFieldEditor fEditorBufferSize; protected IntegerFieldEditor fEditorSerialTimeout; @@ -57,6 +61,7 @@ public class TerminalPreferencePage extends FieldEditorPreferencePage implements Label ctlLabel; boolean bEnabled; + ctlButton = fEditorLimitOutput.getChangeControl(getFieldEditorParent()); ctlText = fEditorBufferSize.getTextControl(getFieldEditorParent()); ctlLabel = fEditorBufferSize.getLabelControl(getFieldEditorParent()); @@ -95,6 +100,9 @@ public class TerminalPreferencePage extends FieldEditorPreferencePage implements setPreferenceStore(preferenceStore); } protected void setupEditors() { + fInvertColors = new BooleanFieldEditor( + PREF_INVERT_COLORS, ViewMessages.INVERT_COLORS, + getFieldEditorParent()); fEditorLimitOutput = new TerminalBooleanFieldEditor( PREF_LIMITOUTPUT, ViewMessages.LIMITOUTPUT, getFieldEditorParent()); @@ -111,6 +119,7 @@ public class TerminalPreferencePage extends FieldEditorPreferencePage implements fEditorSerialTimeout.setValidRange(0, Integer.MAX_VALUE); fEditorNetworkTimeout.setValidRange(0, Integer.MAX_VALUE); + addField(fInvertColors); addField(fEditorLimitOutput); addField(fEditorBufferSize); addField(fEditorSerialTimeout); diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java index f3434978f9a..e5d444e7920 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java @@ -125,6 +125,10 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi || event.getProperty().equals(TerminalPreferencePage.PREF_BUFFERLINES)) { updatePreferences(); } + if(event.getProperty().equals(TerminalPreferencePage.PREF_INVERT_COLORS)) { + Preferences preferences = TerminalViewPlugin.getDefault().getPluginPreferences(); + fCtlTerminal.setInvertedColors(preferences.getBoolean(TerminalPreferencePage.PREF_INVERT_COLORS)); + } } }; public TerminalView() { @@ -167,7 +171,6 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalLi if(!limitOutput) bufferLineLimit=-1; fCtlTerminal.setBufferLineLimit(bufferLineLimit); - } // TerminalTarget interface public void setState(final TerminalState state) { diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.java b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.java index 75c48464b6f..18691e6d25c 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.java +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.java @@ -11,7 +11,7 @@ * Helmut Haigermoser and Ted Williams. * * Contributors: - * Michael Scharf (Wind River) - split into core, view and connector plugins + * Michael Scharf (Wind River) - split into core, view and connector plugins * Martin Oberhuber (Wind River) - fixed copyright headers and beautified *******************************************************************************/ package org.eclipse.tm.internal.terminal.view; @@ -30,8 +30,9 @@ public class ViewMessages extends NLS { public static String CONNECTIONTYPE; public static String VIEW_TITLE; public static String VIEW_SETTINGS; - + public static String LIMITOUTPUT; + public static String INVERT_COLORS; public static String BUFFERLINES; public static String SERIALTIMEOUT; public static String NETWORKTIMEOUT; @@ -40,7 +41,7 @@ public class ViewMessages extends NLS { public static String STATE_CONNECTING; public static String STATE_OPENED; public static String STATE_CLOSED; - + public static String CANNOT_INITIALIZE; public static String CONNECTOR_NOT_AVAILABLE; diff --git a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.properties b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.properties index 96a9132669c..cc5d69faf79 100644 --- a/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.properties +++ b/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ViewMessages.properties @@ -24,6 +24,7 @@ VIEW_TITLE = View Title: VIEW_SETTINGS = View Settings: LIMITOUTPUT = Limit terminal output +INVERT_COLORS = Invert terminal colors BUFFERLINES = Terminal buffer lines: SERIALTIMEOUT = Serial timeout (seconds): NETWORKTIMEOUT = Network timeout (seconds): diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java index 9424c59547f..3511f964d6e 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java @@ -24,6 +24,7 @@ import org.eclipse.tm.internal.terminal.provisional.api.TerminalState; public interface ITerminalViewControl { boolean isEmpty(); void setFont(Font font); + void setInvertedColors(boolean invert); Font getFont(); Control getControl(); boolean isDisposed(); diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java index 0eccf75ed87..cc75630f8d1 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/impl/TerminalControl.java @@ -869,4 +869,7 @@ public class TerminalControl implements ITerminalControlForText, ITerminalContro public void setScrollLock(boolean on) { } + public void setInvertedColors(boolean invert) { + } + } diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java index beb7be9a682..e990dadc316 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java @@ -906,4 +906,8 @@ public class VT100TerminalControl implements ITerminalControlForText, ITerminalC public void setScrollLock(boolean on) { fCtlText.setScrollLock(on); } + + public void setInvertedColors(boolean invert) { + fCtlText.setInvertedColors(invert); + } } diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java index 86f9990c810..c957d98a18a 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/ILinelRenderer.java @@ -20,4 +20,5 @@ public interface ILinelRenderer { int getCellHeight(); void drawLine(ITextCanvasModel model, GC gc, int line, int x, int y, int colFirst, int colLast); void onFontChange(); + void setInvertedColors(boolean invert); } diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java index e4df2d66d3c..df735fa2c2b 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java @@ -29,6 +29,7 @@ public class StyleMap { Map fFontMap=new HashMap(); private Point fCharSize; private final Style fDefaultStyle; + private boolean fInvertColors; StyleMap() { Display display=Display.getCurrent(); fColorMap.put(StyleColor.getStyleColor("white"), new Color(display,255,255,255)); //$NON-NLS-1$ @@ -57,7 +58,7 @@ public class StyleMap { } public Color getForegrondColor(Style style) { style = defaultIfNull(style); - if(style.isReverse()) + if(isReverse(style)) return getColor(style.getBackground()); else return getColor(style.getForground()); @@ -69,11 +70,22 @@ public class StyleMap { } public Color getBackgroundColor(Style style) { style = defaultIfNull(style); - if(style.isReverse()) + if(isReverse(style)) return getColor(style.getForground()); else return getColor(style.getBackground()); } + private boolean isReverse(Style style) { + if(fInvertColors) + return !style.isReverse(); + else + return style.isReverse(); + + } + public void setInvertedColors(boolean invert) { + fInvertColors=invert; + + } // static Font getBoldFont(Font font) { // FontData fontDatas[] = font.getFontData(); // FontData data = fontDatas[0]; diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java index 2e4e9d3b2fa..f11f8925341 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextCanvas.java @@ -300,5 +300,10 @@ public class TextCanvas extends GridCanvas { calculateGrid(); } + public void setInvertedColors(boolean invert) { + fCellRenderer.setInvertedColors(invert); + redraw(); + } + } diff --git a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java index 5f7ec3cbbca..66d7a2f9e7a 100644 --- a/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java +++ b/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java @@ -139,4 +139,8 @@ public class TextLineRenderer implements ILinelRenderer { public void onFontChange() { fStyleMap.updateFont(); } + public void setInvertedColors(boolean invert) { + fStyleMap.setInvertedColors(invert); + + } }