mirror of
https://github.com/peterdell/wudsn-ide.git
synced 2024-12-21 18:29:40 +00:00
Separate preferences keys for dark theme colors
This commit is contained in:
parent
62102443b5
commit
3667bfb22b
@ -121,6 +121,7 @@ public final class Texts extends NLS {
|
||||
* Preferences: syntax highlighting.
|
||||
*/
|
||||
public static String PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_TITLE;
|
||||
public static String PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_DARK_THEME_TITLE;
|
||||
|
||||
public static String PREFERENCES_TEXT_ATTRIBUTE_COMMENT_NAME;
|
||||
public static String PREFERENCES_TEXT_ATTRIBUTE_STRING_NAME;
|
||||
|
@ -61,6 +61,7 @@ COMPILER_SYMBOLS_VIEW_DECIMAL_VALUE_COLUMN_LABEL=Decimal Value
|
||||
COMPILER_SYMBOLS_VIEW_STRING_VALUE_COLUMN_LABEL=String Value
|
||||
|
||||
PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_TITLE=Syntax Highlighting
|
||||
PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_DARK_THEME_TITLE=Syntax Highlighting for Dark Theme
|
||||
|
||||
PREFERENCES_TEXT_ATTRIBUTE_COMMENT_NAME=Comments
|
||||
PREFERENCES_TEXT_ATTRIBUTE_STRING_NAME=Strings
|
||||
|
@ -60,6 +60,7 @@ COMPILER_SYMBOLS_VIEW_DECIMAL_VALUE_COLUMN_LABEL=Dezimalwert
|
||||
COMPILER_SYMBOLS_VIEW_STRING_VALUE_COLUMN_LABEL=Textwert
|
||||
|
||||
PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_TITLE=Syntax Hervorhebung
|
||||
PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_DARK_THEME_TITLE=Syntax Hervorhebung für dunkles Theme
|
||||
|
||||
PREFERENCES_TEXT_ATTRIBUTE_COMMENT_NAME=Kommentare
|
||||
PREFERENCES_TEXT_ATTRIBUTE_STRING_NAME=Textkonstanten
|
||||
|
@ -61,6 +61,7 @@ COMPILER_SYMBOLS_VIEW_DECIMAL_VALUE_COLUMN_LABEL=Decimal Value
|
||||
COMPILER_SYMBOLS_VIEW_STRING_VALUE_COLUMN_LABEL=String Value
|
||||
|
||||
PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_TITLE=Syntax Highlighting
|
||||
PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_DARK_THEME_TITLE=Syntax Highlighting for Dark Theme
|
||||
|
||||
PREFERENCES_TEXT_ATTRIBUTE_COMMENT_NAME=Comments
|
||||
PREFERENCES_TEXT_ATTRIBUTE_STRING_NAME=Strings
|
||||
|
@ -31,9 +31,9 @@ import com.wudsn.ide.lng.LanguagePlugin;
|
||||
import com.wudsn.ide.lng.compiler.CompilerDefinition;
|
||||
import com.wudsn.ide.lng.compiler.CompilerPaths;
|
||||
import com.wudsn.ide.lng.compiler.CompilerPaths.CompilerPath;
|
||||
import com.wudsn.ide.lng.preferences.LanguagePreferencesConstants.EditorConstants;
|
||||
import com.wudsn.ide.lng.editor.LanguageContentAssistProcessorDefaultCase;
|
||||
import com.wudsn.ide.lng.editor.LanguageEditorCompileCommandPositioningMode;
|
||||
import com.wudsn.ide.lng.preferences.LanguagePreferencesConstants.EditorConstants;
|
||||
|
||||
/**
|
||||
* Facade class for typed access to the plugin preferences.
|
||||
|
@ -109,7 +109,6 @@ public final class LanguagePreferencesConstants {
|
||||
*/
|
||||
public static final String EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_PROCEDURE_DEFINITION_SECTION = "editor.text.attribute.identifier.procedure"; //$NON-NLS-1$
|
||||
|
||||
|
||||
/**
|
||||
* Preference key for positioning for for compiling.
|
||||
*
|
||||
@ -120,16 +119,17 @@ public final class LanguagePreferencesConstants {
|
||||
/**
|
||||
* Gets preference key name for a editor attribute.
|
||||
*
|
||||
* @param language The language <code>null</code>.
|
||||
* @param language The language, not <code>null</code>.
|
||||
* @attributeName The attribute name, not <code>null</code>.
|
||||
*
|
||||
* @return The preference key name for the compiler executable path, not empty
|
||||
* and not <code>null</code>.
|
||||
*/
|
||||
public static String getEditorAttributeKey(Language language, String textAttributeName) {
|
||||
public static String getEditorAttributeKey(Language language, String attributeName) {
|
||||
if (language == null) {
|
||||
throw new IllegalArgumentException("Parameter 'language' must not be null.");
|
||||
}
|
||||
String preferencesKey = getLanguagePreferencesKey(language, textAttributeName);
|
||||
String preferencesKey = getLanguagePreferencesKey(language, attributeName);
|
||||
return preferencesKey;
|
||||
}
|
||||
|
||||
|
@ -57,13 +57,23 @@ public final class LanguagePreferencesInitializer extends AbstractPreferenceInit
|
||||
store.setDefault(key, value);
|
||||
}
|
||||
|
||||
private void setLanguageTextAttributeDefault(Language language, String textAttributeName, int r, int g, int b,
|
||||
private void setLanguageTextAttributeDefault(Language language, String textAttributeName, int rgb, int rgbDarkTheme,
|
||||
int style) {
|
||||
setLanguageTextAttributeDefault(language, false, textAttributeName, rgb, style);
|
||||
setLanguageTextAttributeDefault(language, true, textAttributeName, rgbDarkTheme, style);
|
||||
}
|
||||
|
||||
private void setLanguageTextAttributeDefault(Language language, boolean darkTheme, String textAttributeName,
|
||||
int rgb, int style) {
|
||||
// Editor.
|
||||
var display = Display.getCurrent();
|
||||
int b = (rgb) & 0xFF;
|
||||
int g = (rgb >> 8) & 0xFF;
|
||||
int r = (rgb >> 16) & 0xFF;
|
||||
var textAttribute = new TextAttribute(new Color(display, r, g, b), null, style);
|
||||
var preferencesKey = LanguagePreferencesConstants.EditorConstants.getEditorAttributeKey(language,
|
||||
textAttributeName);
|
||||
preferencesKey = LanguagesPreferences.getThemeTextAttributePreferencesKey(darkTheme, preferencesKey);
|
||||
setDefault(preferencesKey, TextAttributeConverter.toString(textAttribute));
|
||||
}
|
||||
|
||||
@ -89,16 +99,41 @@ public final class LanguagePreferencesInitializer extends AbstractPreferenceInit
|
||||
if (language == null) {
|
||||
throw new IllegalArgumentException("Parameter 'language' must not be null.");
|
||||
}
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_COMMENT, 0, 128, 0, SWT.ITALIC);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_DIRECTVE, 128, 64, 0, SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_NUMBER, 0, 0, 255, SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_OPCODE_LEGAL, 0, 0, 128,
|
||||
final int black = 0x00000;
|
||||
final int white = 0xffffff;
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_COMMENT, 0x008000, 0x80ff80,
|
||||
SWT.ITALIC);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_DIRECTVE, 0x804000, 0xffc080,
|
||||
SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_OPCODE_ILLEGAL, 255, 32, 32,
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_NUMBER, 0x0000ff, 0x0080c0,
|
||||
SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_OPCODE_PSEUDO, 32, 128, 32,
|
||||
SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_STRING, 0, 0, 255, SWT.NORMAL);
|
||||
|
||||
// Identifiers
|
||||
setLanguageTextAttributeDefault(language,
|
||||
EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_ENUM_DEFINITION_SECTION, black, white, SWT.NORMAL);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_EQUATE, black, white,
|
||||
SWT.NORMAL);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_LABEL, black, white,
|
||||
SWT.NORMAL);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_LOCAL_SECTION, black,
|
||||
white, SWT.NORMAL);
|
||||
setLanguageTextAttributeDefault(language,
|
||||
EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_MACRO_DEFINITION_SECTION, black, white, SWT.NORMAL);
|
||||
setLanguageTextAttributeDefault(language,
|
||||
EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_PROCEDURE_DEFINITION_SECTION, black, white,
|
||||
SWT.NORMAL);
|
||||
setLanguageTextAttributeDefault(language,
|
||||
EditorConstants.EDITOR_TEXT_ATTRIBUTE_IDENTIFIER_STRUCTURE_DEFINITION_SECTION, black, white,
|
||||
SWT.NORMAL);
|
||||
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_OPCODE_LEGAL, 0x000080,
|
||||
0x8080ff, SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_OPCODE_ILLEGAL, 0xff2020,
|
||||
0xd00000, SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_OPCODE_PSEUDO, 0x208020,
|
||||
0xc0ffc0, SWT.BOLD);
|
||||
setLanguageTextAttributeDefault(language, EditorConstants.EDITOR_TEXT_ATTRIBUTE_STRING, 0x0000ff, 0x00ff40,
|
||||
SWT.NORMAL);
|
||||
|
||||
// Content assist.
|
||||
var preferencesKey = EditorConstants.getEditorContentProcessorDefaultCaseKey(language);
|
||||
|
@ -31,6 +31,7 @@ import org.eclipse.jface.preference.FieldEditorPreferencePage;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.preference.RadioGroupFieldEditor;
|
||||
import org.eclipse.jface.text.TextAttribute;
|
||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||
import org.eclipse.jface.viewers.ISelectionChangedListener;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
@ -57,6 +58,7 @@ import org.eclipse.ui.IWorkbench;
|
||||
import org.eclipse.ui.IWorkbenchPreferencePage;
|
||||
import org.eclipse.ui.model.WorkbenchViewerComparator;
|
||||
|
||||
import com.wudsn.ide.base.common.HexUtility;
|
||||
import com.wudsn.ide.base.common.ProcessWithLogs;
|
||||
import com.wudsn.ide.base.gui.SWTFactory;
|
||||
import com.wudsn.ide.lng.Language;
|
||||
@ -211,8 +213,12 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
if (parent == null) {
|
||||
throw new IllegalArgumentException("Parameter 'parent' must not be null.");
|
||||
}
|
||||
Group group = SWTFactory.createGroup(parent, Texts.PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_TITLE, 2, 1,
|
||||
GridData.FILL_HORIZONTAL);
|
||||
var title = Texts.PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_TITLE;
|
||||
if (LanguagesPreferences.isDarkThemeActive()) {
|
||||
title = Texts.PREFERENCES_SYNTAX_HIGHLIGHTING_GROUP_DARK_THEME_TITLE;
|
||||
}
|
||||
|
||||
Group group = SWTFactory.createGroup(parent, title, 2, 1, GridData.FILL_HORIZONTAL);
|
||||
Label label;
|
||||
GridLayout layout;
|
||||
GridData gd;
|
||||
@ -245,9 +251,19 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
label.setLayoutData(gd);
|
||||
|
||||
textAttributeForegroundColorSelector = new ColorSelector(stylesComposite);
|
||||
Button foregroundColorButton = textAttributeForegroundColorSelector.getButton();
|
||||
final var foregroundColorButton = textAttributeForegroundColorSelector.getButton();
|
||||
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
||||
foregroundColorButton.setLayoutData(gd);
|
||||
textAttributeForegroundColorSelector.addListener(new IPropertyChangeListener() {
|
||||
|
||||
@Override
|
||||
public void propertyChange(PropertyChangeEvent event) {
|
||||
if (event.getProperty().equals(ColorSelector.PROP_COLORCHANGE)) {
|
||||
updatetextAttributeForegroundColor();
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
textAttributeBoldCheckBox = new Button(stylesComposite, SWT.CHECK);
|
||||
textAttributeBoldCheckBox.setText(Texts.PREFERENCES_BOLD_LABEL);
|
||||
@ -362,8 +378,9 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
List<TextAttributeDefinition> textAttributeDefinitions = EditorConstants.getTextAttributeDefinitions(language);
|
||||
textAttributeListItems = new ArrayList<TextAttributeListItem>(textAttributeDefinitions.size());
|
||||
|
||||
for (TextAttributeDefinition textAttributeDefinition : textAttributeDefinitions) {
|
||||
String data = getPreferenceStore().getString(textAttributeDefinition.getPreferencesKey());
|
||||
for (var textAttributeDefinition : textAttributeDefinitions) {
|
||||
var preferencesKey = LanguagesPreferences.getThemeTextAttributePreferencesKey(textAttributeDefinition);
|
||||
String data = getPreferenceStore().getString(preferencesKey);
|
||||
TextAttribute textAttribute = TextAttributeConverter.fromString(data);
|
||||
|
||||
TextAttributeListItem item = new TextAttributeListItem(textAttributeDefinition);
|
||||
@ -376,10 +393,10 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
if (parent == null) {
|
||||
throw new IllegalArgumentException("Parameter 'parent' must not be null.");
|
||||
}
|
||||
Group group = SWTFactory.createGroup(parent, Texts.PREFERENCES_EDITOR_GROUP_TITLE, 1, 1,
|
||||
var group = SWTFactory.createGroup(parent, Texts.PREFERENCES_EDITOR_GROUP_TITLE, 1, 1,
|
||||
GridData.FILL_HORIZONTAL);
|
||||
|
||||
Composite space = SWTFactory.createComposite(group, 2, 1, GridData.FILL_HORIZONTAL);
|
||||
var space = SWTFactory.createComposite(group, 2, 1, GridData.FILL_HORIZONTAL);
|
||||
|
||||
String[][] labelsAndValues;
|
||||
labelsAndValues = new String[][] { {
|
||||
@ -498,9 +515,9 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
IPreferenceStore preferencesStore = getPreferenceStore();
|
||||
for (TextAttributeListItem listItem : textAttributeListItems) {
|
||||
|
||||
String key = listItem.getDefinition().getPreferencesKey();
|
||||
preferencesStore.setValue(key, preferencesStore.getDefaultString(key));
|
||||
addChangedProperty(key);
|
||||
String preferencesKey = LanguagesPreferences.getThemeTextAttributePreferencesKey(listItem.getDefinition());
|
||||
preferencesStore.setValue(preferencesKey, preferencesStore.getDefaultString(preferencesKey));
|
||||
addChangedProperty(preferencesKey);
|
||||
}
|
||||
|
||||
disposeTextAttributesList();
|
||||
@ -512,12 +529,12 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
* Saves all changes to the {@link IPreferenceStore}.
|
||||
*/
|
||||
private void saveChanges() {
|
||||
String data;
|
||||
IPreferenceStore store = getPreferenceStore();
|
||||
var store = getPreferenceStore();
|
||||
|
||||
for (TextAttributeListItem listItem : textAttributeListItems) {
|
||||
data = TextAttributeConverter.toString(listItem.getTextAttribute());
|
||||
store.setValue(listItem.getDefinition().getPreferencesKey(), data);
|
||||
var data = TextAttributeConverter.toString(listItem.getTextAttribute());
|
||||
var preferencesKey = LanguagesPreferences.getThemeTextAttributePreferencesKey(listItem.getDefinition());
|
||||
store.setValue(preferencesKey, data);
|
||||
|
||||
}
|
||||
|
||||
@ -554,6 +571,7 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
italic = (textAttribute.getStyle() & SWT.ITALIC) == SWT.ITALIC;
|
||||
|
||||
textAttributeForegroundColorSelector.setColorValue(color.getRGB());
|
||||
updatetextAttributeForegroundColor();
|
||||
textAttributeBoldCheckBox.setSelection(bold);
|
||||
textAttributeItalicCheckBox.setSelection(italic);
|
||||
|
||||
@ -562,6 +580,14 @@ public abstract class LanguagePreferencesPage extends FieldEditorPreferencePage
|
||||
textAttributeItalicCheckBox.setEnabled(true);
|
||||
}
|
||||
|
||||
private void updatetextAttributeForegroundColor() {
|
||||
var rgb = textAttributeForegroundColorSelector.getColorValue();
|
||||
String rgbString = ("0x" + HexUtility.getLongValueHexString(rgb.red)
|
||||
+ HexUtility.getLongValueHexString(rgb.green) + HexUtility.getLongValueHexString(rgb.blue))
|
||||
.toLowerCase();
|
||||
textAttributeForegroundColorSelector.getButton().setToolTipText(rgbString);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current highlighting color list item.
|
||||
*
|
||||
|
@ -19,8 +19,12 @@
|
||||
|
||||
package com.wudsn.ide.lng.preferences;
|
||||
|
||||
import org.eclipse.core.runtime.preferences.InstanceScope;
|
||||
import org.eclipse.jface.preference.IPreferenceStore;
|
||||
import org.eclipse.jface.text.TextAttribute;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.preferences.ScopedPreferenceStore;
|
||||
|
||||
import com.wudsn.ide.base.common.AbstractIDEPlugin;
|
||||
import com.wudsn.ide.lng.Language;
|
||||
@ -33,6 +37,11 @@ import com.wudsn.ide.lng.LanguagePlugin;
|
||||
*/
|
||||
public final class LanguagesPreferences {
|
||||
|
||||
/**
|
||||
* Cached theme ID.
|
||||
*/
|
||||
static String themeID = null;
|
||||
|
||||
/**
|
||||
* The preference store to which all calls are delegated.
|
||||
*/
|
||||
@ -107,6 +116,40 @@ public final class LanguagesPreferences {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if the current OS theme has a dark appearance, else
|
||||
* returns <code>false</code>.
|
||||
*/
|
||||
static boolean isDarkThemeActive() {
|
||||
if (themeID == null) {
|
||||
var store = new ScopedPreferenceStore(InstanceScope.INSTANCE, "org.eclipse.e4.ui.css.swt.theme");
|
||||
themeID = store.getString("themeid");
|
||||
if (themeID == null) {
|
||||
themeID = "undefined";
|
||||
}
|
||||
}
|
||||
return themeID.equals("org.eclipse.e4.ui.css.theme.e4_dark");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the text attribute preferences key based on the current theme. Dark
|
||||
* themes have a separate set of color.
|
||||
*
|
||||
* @param textAttributeDefinition The text attribute definition, not
|
||||
* <code>null</code>.
|
||||
* @return The theme specific key of the preference, not <code>null</code>.
|
||||
*/
|
||||
static String getThemeTextAttributePreferencesKey(TextAttributeDefinition textAttributeDefinition) {
|
||||
return getThemeTextAttributePreferencesKey(isDarkThemeActive(), textAttributeDefinition.getPreferencesKey());
|
||||
}
|
||||
|
||||
static String getThemeTextAttributePreferencesKey(boolean darkTheme, String preferencesKey) {
|
||||
if (darkTheme) {
|
||||
preferencesKey += ".darkTheme";
|
||||
}
|
||||
return preferencesKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the text attribute for a token type.
|
||||
*
|
||||
@ -120,6 +163,7 @@ public final class LanguagesPreferences {
|
||||
throw new IllegalArgumentException("Parameter 'preferencesKey' must not be null.");
|
||||
}
|
||||
|
||||
preferencesKey = getThemeTextAttributePreferencesKey(isDarkThemeActive(), preferencesKey);
|
||||
return TextAttributeConverter.fromString(getString(preferencesKey));
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ import org.eclipse.ui.IWorkbench;
|
||||
import org.eclipse.ui.IWorkbenchPreferencePage;
|
||||
|
||||
/**
|
||||
* Structural page
|
||||
* Structural page without editors.
|
||||
*
|
||||
* @author Peter Dell
|
||||
*/
|
||||
@ -32,13 +32,11 @@ public final class LanguagesPreferencesPage extends FieldEditorPreferencePage im
|
||||
|
||||
@Override
|
||||
public void init(IWorkbench workbench) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void createFieldEditors() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user