diff options
author | Marco Stornelli | 2019-04-25 15:54:54 +0000 |
---|---|---|
committer | Doug Schaefer | 2019-04-26 17:15:56 +0000 |
commit | 225ee8550a5eae96fc71b408de5eed19a6ae2984 (patch) | |
tree | 651dbf7047e69b7d167d7706c159284a830d3cf7 /dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug | |
parent | fc2543362190076be37843e4f7f556e2f25fe538 (diff) | |
download | org.eclipse.cdt-225ee8550a5eae96fc71b408de5eed19a6ae2984.tar.gz org.eclipse.cdt-225ee8550a5eae96fc71b408de5eed19a6ae2984.tar.xz org.eclipse.cdt-225ee8550a5eae96fc71b408de5eed19a6ae2984.zip |
Bug 501609 - Fix colors for disassembly view
All colors were hard-coded and it was nearly impossible to use the
view with a dark theme. Added colors to the preferences and changed
the main view background according to the theme.
Change-Id: Ic35df1e272e8b2a90f11c1af3cb3b105cd535fe5
Signed-off-by: Marco Stornelli <marco.stornelli@gmail.com>
Diffstat (limited to 'dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug')
9 files changed, 251 insertions, 10 deletions
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/AddressRulerColumn.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/AddressRulerColumn.java index 7c4263ded50..b4c0dbeb56d 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/AddressRulerColumn.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/AddressRulerColumn.java @@ -54,6 +54,7 @@ public class AddressRulerColumn extends DisassemblyRulerColumn setForeground(getColor(DisassemblyPreferenceConstants.ADDRESS_COLOR)); setRadix(prefs.getInt(DisassemblyPreferenceConstants.ADDRESS_RADIX)); setShowRadixPrefix(prefs.getBoolean(DisassemblyPreferenceConstants.SHOW_ADDRESS_RADIX)); + setBackground(getColor(DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR)); setAddressSize(32); } @@ -199,6 +200,9 @@ public class AddressRulerColumn extends DisassemblyRulerColumn computeIndentations(); layout(false); needRedraw = true; + } else if (DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR.equals(property)) { + setBackground(getColor(property)); + needRedraw = true; } if (needRedraw) { redraw(); diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.java index b3a0a09d9d6..5812994e0a8 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.java @@ -68,6 +68,14 @@ public final class DisassemblyMessages extends NLS { public static String DisassemblyPreferencePage_OpcodeFormat; public static String DisassemblyPreferencePage_OpcodeFormatTooltip; public static String DisassemblyPreferencePage_showRadixTooltip; + public static String DisassemblyPreferencePage_addressColor; + public static String DisassemblyPreferencePage_rulerBackgroundColor; + public static String DisassemblyPreferencePage_errorColor; + public static String DisassemblyPreferencePage_instructionColor; + public static String DisassemblyPreferencePage_sourceColor; + public static String DisassemblyPreferencePage_labelColor; + public static String DisassemblyPreferencePage_codeBytesColor; + public static String DisassemblyPreferencePage_offsetsColor; public static String DisassemblyIPAnnotation_primary; public static String DisassemblyIPAnnotation_secondary; public static String SourceReadingJob_name; diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.properties b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.properties index 189448e0c71..dea56eafa68 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.properties +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyMessages.properties @@ -64,6 +64,14 @@ DisassemblyPreferencePage_radix_hexadecimal=Hexadecimal DisassemblyPreferencePage_OpcodeFormatTooltip=Use this format for the instruction value DisassemblyPreferencePage_OpcodeFormat=Opcode display format: DisassemblyPreferencePage_showRadixTooltip=Show '0x' with hexadecimal addresses +DisassemblyPreferencePage_addressColor=Address color +DisassemblyPreferencePage_codeBytesColor=Code bytes color +DisassemblyPreferencePage_offsetsColor=Offsets color +DisassemblyPreferencePage_rulerBackgroundColor=Ruler background color +DisassemblyPreferencePage_errorColor=Error color +DisassemblyPreferencePage_instructionColor=Instruction color +DisassemblyPreferencePage_sourceColor=Source color +DisassemblyPreferencePage_labelColor=Label color DisassemblyIPAnnotation_primary=Debug Current Instruction Pointer DisassemblyIPAnnotation_secondary=Debug Call Stack diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java index f855d49a4a4..d23e0576b52 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java @@ -725,8 +725,23 @@ public abstract class DisassemblyPart extends WorkbenchPart support.setColumnVisible(desc, newState); } } + } else if (property.equals(DisassemblyPreferenceConstants.ERROR_COLOR)) { + fErrorColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.ERROR_COLOR)); + refreshView(10); + } else if (property.equals(DisassemblyPreferenceConstants.INSTRUCTION_COLOR)) { + fInstructionColor = EditorsUI.getSharedTextColors().getColor(PreferenceConverter + .getColor(getPreferenceStore(), DisassemblyPreferenceConstants.INSTRUCTION_COLOR)); + refreshView(10); + } else if (property.equals(DisassemblyPreferenceConstants.SOURCE_COLOR)) { + fSourceColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.SOURCE_COLOR)); + refreshView(10); + } else if (property.equals(DisassemblyPreferenceConstants.LABEL_COLOR)) { + fLabelColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.LABEL_COLOR)); + refreshView(10); } - } /** @@ -741,7 +756,7 @@ public abstract class DisassemblyPart extends WorkbenchPart parent.setLayout(layout); fVerticalRuler = createVerticalRuler(); int styles = SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION; - fViewer = new DisassemblyViewer(parent, fVerticalRuler, getOverviewRuler(), true, styles); + fViewer = new DisassemblyViewer(parent, fVerticalRuler, getOverviewRuler(), true, styles, getPreferenceStore()); SourceViewerConfiguration sourceViewerConfig = new DisassemblyViewerConfiguration(this); fViewer.addTextPresentationListener(this); fViewer.configure(sourceViewerConfig); @@ -785,10 +800,14 @@ public abstract class DisassemblyPart extends WorkbenchPart } }); - fErrorColor = getSharedColors().getColor(new RGB(96, 0, 0)); - fInstructionColor = getSharedColors().getColor(new RGB(0, 0, 96)); - fSourceColor = getSharedColors().getColor(new RGB(64, 0, 80)); - fLabelColor = getSharedColors().getColor(new RGB(0, 0, 96)); + fErrorColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.ERROR_COLOR)); + fInstructionColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.INSTRUCTION_COLOR)); + fSourceColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.SOURCE_COLOR)); + fLabelColor = EditorsUI.getSharedTextColors().getColor( + PreferenceConverter.getColor(getPreferenceStore(), DisassemblyPreferenceConstants.LABEL_COLOR)); IVerticalRuler ruler = getVerticalRuler(); if (ruler instanceof CompositeRuler) { diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/FunctionOffsetRulerColumn.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/FunctionOffsetRulerColumn.java index 1e314e637a3..9f67aae49cb 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/FunctionOffsetRulerColumn.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/FunctionOffsetRulerColumn.java @@ -37,6 +37,7 @@ public class FunctionOffsetRulerColumn extends DisassemblyRulerColumn { public FunctionOffsetRulerColumn() { super(); setForeground(getColor(DisassemblyPreferenceConstants.FUNCTION_OFFSETS_COLOR)); + setBackground(getColor(DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR)); } /* @@ -78,6 +79,9 @@ public class FunctionOffsetRulerColumn extends DisassemblyRulerColumn { if (DisassemblyPreferenceConstants.FUNCTION_OFFSETS_COLOR.equals(property)) { setForeground(getColor(property)); needRedraw = true; + } else if (DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR.equals(property)) { + setBackground(getColor(property)); + needRedraw = true; } if (needRedraw) { redraw(); diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/OpcodeRulerColumn.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/OpcodeRulerColumn.java index a62c300e2d2..43a09856829 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/OpcodeRulerColumn.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/OpcodeRulerColumn.java @@ -40,6 +40,7 @@ public class OpcodeRulerColumn extends DisassemblyRulerColumn { */ public OpcodeRulerColumn() { super(); + setBackground(getColor(DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR)); setForeground(getColor(DisassemblyPreferenceConstants.CODE_BYTES_COLOR)); setRadix(getPreferenceStore().getInt(DisassemblyPreferenceConstants.OPCODE_RADIX)); } @@ -120,6 +121,9 @@ public class OpcodeRulerColumn extends DisassemblyRulerColumn { setRadix(store.getInt(property)); layout(false); needRedraw = true; + } else if (DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR.equals(property)) { + setBackground(getColor(property)); + needRedraw = true; } if (needRedraw) { redraw(); diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferenceConstants.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferenceConstants.java index e8e0544c03b..44687f1666f 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferenceConstants.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferenceConstants.java @@ -41,6 +41,11 @@ public class DisassemblyPreferenceConstants { public static final String AVOID_READ_BEFORE_PC = "disassembly.avoidReadBeforePC"; //$NON-NLS-1$ public static final String TRACK_EXPRESSION = "disassembly.trackExpression"; //$NON-NLS-1$ public static final String SYNC_ACTIVE_CONTEXT = "disassembly.syncActiveContext"; //$NON-NLS-1$ + public static final String RULER_BACKGROUND_COLOR = "disassembly.rulerBackgroundColor"; //$NON-NLS-1$ + public static final String ERROR_COLOR = "disassembly.errorColor"; //$NON-NLS-1$ + public static final String INSTRUCTION_COLOR = "disassembly.instructionColor"; //$NON-NLS-1$ + public static final String SOURCE_COLOR = "disassembly.sourceColor"; //$NON-NLS-1$ + public static final String LABEL_COLOR = "disassembly.labelColor"; //$NON-NLS-1$ /** * @@ -66,6 +71,11 @@ public class DisassemblyPreferenceConstants { PreferenceConverter.setDefault(store, ADDRESS_COLOR, new RGB(0, 96, 0)); PreferenceConverter.setDefault(store, FUNCTION_OFFSETS_COLOR, new RGB(96, 0, 0)); PreferenceConverter.setDefault(store, CODE_BYTES_COLOR, new RGB(96, 0, 0)); + PreferenceConverter.setDefault(store, RULER_BACKGROUND_COLOR, new RGB(255, 255, 255)); + PreferenceConverter.setDefault(store, ERROR_COLOR, new RGB(96, 0, 0)); + PreferenceConverter.setDefault(store, INSTRUCTION_COLOR, new RGB(0, 0, 96)); + PreferenceConverter.setDefault(store, SOURCE_COLOR, new RGB(64, 0, 80)); + PreferenceConverter.setDefault(store, LABEL_COLOR, new RGB(0, 0, 96)); } public static class Initializer extends AbstractPreferenceInitializer { diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferencePage.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferencePage.java index f8e509309be..b63e96698ff 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferencePage.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/preferences/DisassemblyPreferencePage.java @@ -21,8 +21,11 @@ import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.DisassemblyMessages; import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.IDisassemblyHelpContextIds; import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.preference.ColorSelector; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; +import org.eclipse.jface.resource.DataFormatException; +import org.eclipse.jface.resource.StringConverter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -46,6 +49,7 @@ public class DisassemblyPreferencePage extends PreferencePage implements IWorkbe private List<Button> fCheckBoxes = new ArrayList<>(); private List<Combo> fComboBoxes = new ArrayList<>(); private ArrayList<Text> fNumberFields = new ArrayList<>(); + private List<ColorSelector> colors = new ArrayList<>(); private ModifyListener fNumberFieldListener = new ModifyListener() { @Override public void modifyText(ModifyEvent e) { @@ -111,6 +115,31 @@ public class DisassemblyPreferencePage extends PreferencePage implements IWorkbe Button showSymbolsCB = addCheckBox(composite, label, DisassemblyPreferenceConstants.SHOW_SYMBOLS, 0); showSymbolsCB.setToolTipText(DisassemblyMessages.DisassemblyPreferencePage_showSymbolsTooltip); + Composite stylesComposite = new Composite(parent, SWT.NONE); + layout = new GridLayout(); + layout.marginHeight = 0; + layout.marginWidth = 0; + layout.numColumns = 2; + stylesComposite.setLayout(layout); + stylesComposite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.ERROR_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_errorColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.INSTRUCTION_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_instructionColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.SOURCE_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_sourceColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.LABEL_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_labelColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.RULER_BACKGROUND_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_rulerBackgroundColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.ADDRESS_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_addressColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.CODE_BYTES_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_codeBytesColor, stylesComposite)); + colors.add(createColorFieldEditor(DisassemblyPreferenceConstants.FUNCTION_OFFSETS_COLOR, + DisassemblyMessages.DisassemblyPreferencePage_offsetsColor, stylesComposite)); + Dialog.applyDialogFont(parent); initialize(); @@ -118,6 +147,25 @@ public class DisassemblyPreferencePage extends PreferencePage implements IWorkbe return composite; } + /** + * Creates a new color field editor. + */ + private ColorSelector createColorFieldEditor(String preferenceName, String label, Composite parent) { + Label labelControl = new Label(parent, SWT.LEFT); + labelControl.setText(label); + GridData gd = new GridData(); + gd.horizontalIndent = GridData.BEGINNING; + labelControl.setLayoutData(gd); + + gd = new GridData(GridData.FILL_HORIZONTAL); + gd.horizontalAlignment = GridData.END; + ColorSelector colorSelector = new ColorSelector(parent); + colorSelector.getButton().setLayoutData(gd); + colorSelector.getButton().setData(preferenceName); + + return colorSelector; + } + /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ @@ -216,7 +264,10 @@ public class DisassemblyPreferencePage extends PreferencePage implements IWorkbe Combo combo = iter.next(); store.setValue((String) combo.getData(), fcRadixValues[combo.getSelectionIndex()]); } - return super.performOk(); + for (ColorSelector c : colors) { + store.setValue((String) c.getButton().getData(), StringConverter.asString(c.getColorValue())); + } + return true; } /* (non-Javadoc) @@ -243,7 +294,13 @@ public class DisassemblyPreferencePage extends PreferencePage implements IWorkbe } } } - super.performDefaults(); + for (ColorSelector c : colors) { + try { + c.setColorValue(StringConverter.asRGB(store.getDefaultString((String) c.getButton().getData()))); + } catch (DataFormatException e) { + DsfUIPlugin.log(e); + } + } } /** @@ -270,6 +327,13 @@ public class DisassemblyPreferencePage extends PreferencePage implements IWorkbe } } } + for (ColorSelector c : colors) { + try { + c.setColorValue(StringConverter.asRGB(store.getString((String) c.getButton().getData()))); + } catch (DataFormatException e) { + DsfUIPlugin.log(e); + } + } } /** diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/provisional/DisassemblyViewer.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/provisional/DisassemblyViewer.java index c0cc9951143..1ba5b864da7 100644 --- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/provisional/DisassemblyViewer.java +++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/provisional/DisassemblyViewer.java @@ -19,6 +19,8 @@ import org.eclipse.cdt.dsf.debug.internal.ui.disassembly.model.DisassemblyDocume import org.eclipse.cdt.dsf.internal.ui.DsfUIPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.preference.IPreferenceStore; +import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; @@ -27,20 +29,27 @@ import org.eclipse.jface.text.source.IOverviewRuler; import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.text.source.IVerticalRulerColumn; import org.eclipse.jface.text.source.SourceViewer; +import org.eclipse.jface.text.source.SourceViewerConfiguration; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.texteditor.AbstractTextEditor; /** * DisassemblyViewer */ -public class DisassemblyViewer extends SourceViewer { +public class DisassemblyViewer extends SourceViewer implements IPropertyChangeListener { class ResizeListener implements ControlListener { @Override @@ -53,8 +62,12 @@ public class DisassemblyViewer extends SourceViewer { } } + private Color fForegroundColor; + private Color fBackgroundColor; private boolean fUserTriggeredScrolling; private int fCachedLastTopPixel; + private IPreferenceStore fPreferenceStore; + private boolean fIsConfigured = false; /** * Create a new DisassemblyViewer. @@ -65,10 +78,107 @@ public class DisassemblyViewer extends SourceViewer { * @param styles */ public DisassemblyViewer(Composite parent, IVerticalRuler ruler, IOverviewRuler overviewRuler, - boolean showsAnnotationOverview, int styles) { + boolean showsAnnotationOverview, int styles, IPreferenceStore store) { super(parent, ruler, overviewRuler, showsAnnotationOverview, styles); // always readonly setEditable(false); + setPreferenceStore(store); + } + + /** + * Creates a color from the information stored in the given preference store. + * Returns <code>null</code> if there is no such information available. + * + * @param store the store to read from + * @param key the key used for the lookup in the preference store + * @param display the display used create the color + * @return the created color according to the specification in the preference store + */ + private Color createColor(IPreferenceStore store, String key, Display display) { + RGB rgb = null; + + if (store.contains(key)) { + if (store.isDefault(key)) { + rgb = PreferenceConverter.getDefaultColor(store, key); + } else { + rgb = PreferenceConverter.getColor(store, key); + } + + if (rgb != null) + return new Color(display, rgb); + } + + return null; + } + + protected void initializeViewerColors() { + if (fPreferenceStore != null) { + StyledText styledText = getTextWidget(); + + // ----------- foreground color -------------------- + Color color = fPreferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT) + ? null + : createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND, + styledText.getDisplay()); + styledText.setForeground(color); + + if (fForegroundColor != null) + fForegroundColor.dispose(); + + fForegroundColor = color; + + // ---------- background color ---------------------- + color = fPreferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT) ? null + : createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, + styledText.getDisplay()); + styledText.setBackground(color); + + if (fBackgroundColor != null) + fBackgroundColor.dispose(); + + fBackgroundColor = color; + } + } + + public void setPreferenceStore(IPreferenceStore store) { + if (fIsConfigured && fPreferenceStore != null) + fPreferenceStore.removePropertyChangeListener(this); + + fPreferenceStore = store; + + if (fIsConfigured && fPreferenceStore != null) { + fPreferenceStore.addPropertyChangeListener(this); + initializeViewerColors(); + } + } + + @Override + public void unconfigure() { + if (fForegroundColor != null) { + fForegroundColor.dispose(); + fForegroundColor = null; + } + if (fBackgroundColor != null) { + fBackgroundColor.dispose(); + fBackgroundColor = null; + } + + if (fPreferenceStore != null) + fPreferenceStore.removePropertyChangeListener(this); + + super.unconfigure(); + + fIsConfigured = false; + } + + @Override + public void configure(SourceViewerConfiguration configuration) { + super.configure(configuration); + if (fPreferenceStore != null) { + fPreferenceStore.addPropertyChangeListener(this); + initializeViewerColors(); + } + fIsConfigured = true; } /* @@ -273,4 +383,14 @@ public class DisassemblyViewer extends SourceViewer { super.updateViewportListeners(origin); } + @Override + public void propertyChange(PropertyChangeEvent event) { + String property = event.getProperty(); + if (AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND.equals(property) + || AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT.equals(property) + || AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND.equals(property) + || AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(property)) { + initializeViewerColors(); + } + } } |