mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Fix a few things for the QML editor.
Fixed up content type warning. Hooked up colors for the QMLEditor to the CEditor preferences. Fixed up tabbing in the main.qml template. Fixed the GCC toolchain to find compiler on path on windows. Change-Id: I66a013666d1ab99bfe94a2a558486cc81681c67c
This commit is contained in:
parent
022e9428fd
commit
1cd5ff5169
5 changed files with 136 additions and 42 deletions
|
@ -289,6 +289,12 @@ public class GCCToolChain extends PlatformObject implements IToolChain {
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Platform.getOS().equals(Platform.OS_WIN32)) {
|
||||||
|
if (!command.toString().endsWith(".exe")) { //$NON-NLS-1$
|
||||||
|
command = Paths.get(command.toString() + ".exe"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (path != null) {
|
if (path != null) {
|
||||||
for (Path p : path) {
|
for (Path p : path) {
|
||||||
Path c = p.resolve(command);
|
Path c = p.resolve(command);
|
||||||
|
|
|
@ -68,7 +68,7 @@
|
||||||
point="org.eclipse.core.filebuffers.documentSetup">
|
point="org.eclipse.core.filebuffers.documentSetup">
|
||||||
<participant
|
<participant
|
||||||
class="org.eclipse.cdt.internal.qt.ui.editor.QMLDocumentSetupParticipant"
|
class="org.eclipse.cdt.internal.qt.ui.editor.QMLDocumentSetupParticipant"
|
||||||
contentTypeId="qmlFile"
|
contentTypeId="org.eclipse.cdt.qt.core.qmlFile"
|
||||||
extensions="qml">
|
extensions="qml">
|
||||||
</participant>
|
</participant>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
|
@ -17,6 +17,7 @@ import javax.script.ScriptException;
|
||||||
import org.eclipse.cdt.internal.qt.ui.Activator;
|
import org.eclipse.cdt.internal.qt.ui.Activator;
|
||||||
import org.eclipse.cdt.internal.qt.ui.actions.OpenDeclarationsAction;
|
import org.eclipse.cdt.internal.qt.ui.actions.OpenDeclarationsAction;
|
||||||
import org.eclipse.cdt.qt.core.IQMLAnalyzer;
|
import org.eclipse.cdt.qt.core.IQMLAnalyzer;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
|
@ -27,8 +28,11 @@ import org.eclipse.jface.text.IRegion;
|
||||||
import org.eclipse.jface.text.Region;
|
import org.eclipse.jface.text.Region;
|
||||||
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher;
|
import org.eclipse.jface.text.source.DefaultCharacterPairMatcher;
|
||||||
import org.eclipse.jface.text.source.ICharacterPairMatcher;
|
import org.eclipse.jface.text.source.ICharacterPairMatcher;
|
||||||
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
import org.eclipse.ui.IFileEditorInput;
|
import org.eclipse.ui.IFileEditorInput;
|
||||||
|
import org.eclipse.ui.editors.text.EditorsUI;
|
||||||
import org.eclipse.ui.editors.text.TextEditor;
|
import org.eclipse.ui.editors.text.TextEditor;
|
||||||
|
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
|
||||||
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
|
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,14 +43,36 @@ public class QMLEditor extends TextEditor {
|
||||||
|
|
||||||
public static final String BRACKET_MATCHING_COLOR_PREFERENCE = "org.eclipse.cdt.qt.ui.qmlMatchingBracketsColor"; //$NON-NLS-1$
|
public static final String BRACKET_MATCHING_COLOR_PREFERENCE = "org.eclipse.cdt.qt.ui.qmlMatchingBracketsColor"; //$NON-NLS-1$
|
||||||
private static final String BRACKET_MATCHING_PREFERENCE = "org.eclipse.cdt.qt.ui.qmlMatchingBrackets"; //$NON-NLS-1$
|
private static final String BRACKET_MATCHING_PREFERENCE = "org.eclipse.cdt.qt.ui.qmlMatchingBrackets"; //$NON-NLS-1$
|
||||||
|
|
||||||
private static final char[] BRACKETS = { '{', '}', '(', ')', '[', ']' };
|
private static final char[] BRACKETS = { '{', '}', '(', ')', '[', ']' };
|
||||||
|
|
||||||
private final IQMLAnalyzer analyzer = Activator.getService(IQMLAnalyzer.class);
|
private final IQMLAnalyzer analyzer = Activator.getService(IQMLAnalyzer.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initializeEditor() {
|
protected void initializeEditor() {
|
||||||
super.initializeEditor();
|
super.initializeEditor();
|
||||||
setSourceViewerConfiguration(new QMLSourceViewerConfiguration(this, getPreferenceStore()));
|
IPreferenceStore prefStore = new ChainedPreferenceStore(new IPreferenceStore[] {
|
||||||
|
Activator.getDefault().getPreferenceStore(),
|
||||||
|
CUIPlugin.getDefault().getPreferenceStore(),
|
||||||
|
CUIPlugin.getDefault().getCorePreferenceStore(),
|
||||||
|
EditorsUI.getPreferenceStore()
|
||||||
|
});
|
||||||
|
setPreferenceStore(prefStore);
|
||||||
|
setSourceViewerConfiguration(new QMLSourceViewerConfiguration(this, prefStore));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void handlePreferenceStoreChanged(PropertyChangeEvent event) {
|
||||||
|
((QMLSourceViewerConfiguration) getSourceViewerConfiguration()).handlePreferenceStoreChanged(event);
|
||||||
|
super.handlePreferenceStoreChanged(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean affectsTextPresentation(PropertyChangeEvent event) {
|
||||||
|
if (((QMLSourceViewerConfiguration) getSourceViewerConfiguration()).affectsTextPresentation(event)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return super.affectsTextPresentation(event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -77,7 +103,7 @@ public class QMLEditor extends TextEditor {
|
||||||
support.setMatchingCharacterPainterPreferenceKeys(BRACKET_MATCHING_PREFERENCE,
|
support.setMatchingCharacterPainterPreferenceKeys(BRACKET_MATCHING_PREFERENCE,
|
||||||
BRACKET_MATCHING_COLOR_PREFERENCE);
|
BRACKET_MATCHING_COLOR_PREFERENCE);
|
||||||
|
|
||||||
IPreferenceStore store = getPreferenceStore();
|
IPreferenceStore store = Activator.getDefault().getPreferenceStore();
|
||||||
store.setDefault(BRACKET_MATCHING_PREFERENCE, true);
|
store.setDefault(BRACKET_MATCHING_PREFERENCE, true);
|
||||||
store.setDefault(BRACKET_MATCHING_COLOR_PREFERENCE, "155,155,155"); //$NON-NLS-1$
|
store.setDefault(BRACKET_MATCHING_COLOR_PREFERENCE, "155,155,155"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,8 +12,13 @@ package org.eclipse.cdt.internal.qt.ui.editor;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.CDTUITools;
|
||||||
|
import org.eclipse.cdt.ui.PreferenceConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.ICColorConstants;
|
||||||
|
import org.eclipse.cdt.ui.text.IColorManager;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
|
import org.eclipse.jface.preference.PreferenceConverter;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.TextAttribute;
|
import org.eclipse.jface.text.TextAttribute;
|
||||||
import org.eclipse.jface.text.contentassist.ContentAssistant;
|
import org.eclipse.jface.text.contentassist.ContentAssistant;
|
||||||
|
@ -30,37 +35,29 @@ import org.eclipse.jface.text.rules.RuleBasedScanner;
|
||||||
import org.eclipse.jface.text.rules.Token;
|
import org.eclipse.jface.text.rules.Token;
|
||||||
import org.eclipse.jface.text.rules.WordRule;
|
import org.eclipse.jface.text.rules.WordRule;
|
||||||
import org.eclipse.jface.text.source.ISourceViewer;
|
import org.eclipse.jface.text.source.ISourceViewer;
|
||||||
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.graphics.Color;
|
import org.eclipse.swt.graphics.Color;
|
||||||
import org.eclipse.swt.graphics.RGB;
|
import org.eclipse.swt.graphics.RGB;
|
||||||
import org.eclipse.swt.widgets.Display;
|
|
||||||
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
|
import org.eclipse.ui.editors.text.TextSourceViewerConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Performs syntax highlighting for the {@link QMLEditor}.
|
* Performs syntax highlighting for the {@link QMLEditor}.
|
||||||
*/
|
*/
|
||||||
public class QMLSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
public class QMLSourceViewerConfiguration extends TextSourceViewerConfiguration {
|
||||||
private static final int TOKEN_DEFAULT = 0;
|
private Token defaultToken;
|
||||||
private static final int TOKEN_MULTI_LINE_COMMENT = 1;
|
private Token multiLineCommentToken;
|
||||||
private static final int TOKEN_SINGLE_LINE_COMMENT = 2;
|
private Token singleLineCommentToken;
|
||||||
private static final int TOKEN_KEYWORD = 3;
|
private Token keywordToken;
|
||||||
private static final int TOKEN_STRING = 4;
|
private Token stringToken;
|
||||||
private static final int TOKEN_TASK_TAG = 5;
|
private Token taskTagToken;
|
||||||
|
|
||||||
// Just using Qt Creator defaults-ish for now
|
|
||||||
// TODO: Add preference page for syntax highlighting
|
|
||||||
private static final IToken[] allTokens = new IToken[] { new Token(null),
|
|
||||||
new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 155, 200)))),
|
|
||||||
new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 155, 200)))),
|
|
||||||
new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(155, 155, 0)), null, SWT.BOLD)),
|
|
||||||
new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 155, 0)), null, SWT.ITALIC)),
|
|
||||||
new Token(new TextAttribute(new Color(Display.getCurrent(), new RGB(0, 100, 155)), null, SWT.BOLD)) };
|
|
||||||
|
|
||||||
private final QMLEditor editor;
|
private final QMLEditor editor;
|
||||||
|
|
||||||
public QMLSourceViewerConfiguration(QMLEditor editor, IPreferenceStore prefs) {
|
public QMLSourceViewerConfiguration(QMLEditor editor, IPreferenceStore prefs) {
|
||||||
super(prefs);
|
super(prefs);
|
||||||
this.editor = editor;
|
this.editor = editor;
|
||||||
|
initTokens(prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -89,21 +86,21 @@ public class QMLSourceViewerConfiguration extends TextSourceViewerConfiguration
|
||||||
|
|
||||||
private ITokenScanner createMultiLineCommentTokenScanner() {
|
private ITokenScanner createMultiLineCommentTokenScanner() {
|
||||||
RuleBasedScanner scanner = new RuleBasedScanner();
|
RuleBasedScanner scanner = new RuleBasedScanner();
|
||||||
scanner.setDefaultReturnToken(allTokens[TOKEN_MULTI_LINE_COMMENT]);
|
scanner.setDefaultReturnToken(multiLineCommentToken);
|
||||||
scanner.setRules(new IRule[] { createTaskTagRule(allTokens[TOKEN_MULTI_LINE_COMMENT]) });
|
scanner.setRules(new IRule[] { createTaskTagRule(multiLineCommentToken) });
|
||||||
return scanner;
|
return scanner;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ITokenScanner createSingleLineCommentTokenScanner() {
|
private ITokenScanner createSingleLineCommentTokenScanner() {
|
||||||
RuleBasedScanner scanner = new RuleBasedScanner();
|
RuleBasedScanner scanner = new RuleBasedScanner();
|
||||||
scanner.setDefaultReturnToken(allTokens[TOKEN_SINGLE_LINE_COMMENT]);
|
scanner.setDefaultReturnToken(singleLineCommentToken);
|
||||||
scanner.setRules(new IRule[] { createTaskTagRule(allTokens[TOKEN_SINGLE_LINE_COMMENT]) });
|
scanner.setRules(new IRule[] { createTaskTagRule(singleLineCommentToken) });
|
||||||
return scanner;
|
return scanner;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ITokenScanner createStringTokenScanner() {
|
private ITokenScanner createStringTokenScanner() {
|
||||||
RuleBasedScanner scanner = new RuleBasedScanner();
|
RuleBasedScanner scanner = new RuleBasedScanner();
|
||||||
scanner.setDefaultReturnToken(allTokens[TOKEN_STRING]);
|
scanner.setDefaultReturnToken(stringToken);
|
||||||
return scanner;
|
return scanner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,13 +117,13 @@ public class QMLSourceViewerConfiguration extends TextSourceViewerConfiguration
|
||||||
public boolean isWordPart(char c) {
|
public boolean isWordPart(char c) {
|
||||||
return Character.isJavaIdentifierPart(c);
|
return Character.isJavaIdentifierPart(c);
|
||||||
}
|
}
|
||||||
}, allTokens[TOKEN_DEFAULT]);
|
}, defaultToken);
|
||||||
|
|
||||||
// Works decently well for now. However, some keywords like 'color' can
|
// Works decently well for now. However, some keywords like 'color' can
|
||||||
// also be used as identifiers. Can only fix this with
|
// also be used as identifiers. Can only fix this with
|
||||||
// semantic highlighting after the parser is completed.
|
// semantic highlighting after the parser is completed.
|
||||||
for (String keyword : QMLKeywords.getKeywords(true)) {
|
for (String keyword : QMLKeywords.getKeywords(true)) {
|
||||||
wordRule.addWord(keyword, allTokens[TOKEN_KEYWORD]);
|
wordRule.addWord(keyword, keywordToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
scanner.setRules(new IRule[] { wordRule });
|
scanner.setRules(new IRule[] { wordRule });
|
||||||
|
@ -147,9 +144,9 @@ public class QMLSourceViewerConfiguration extends TextSourceViewerConfiguration
|
||||||
}, defaultToken);
|
}, defaultToken);
|
||||||
|
|
||||||
// TODO: Add preference page for task tags
|
// TODO: Add preference page for task tags
|
||||||
wordRule.addWord("TODO", allTokens[TOKEN_TASK_TAG]); //$NON-NLS-1$
|
wordRule.addWord("TODO", taskTagToken); //$NON-NLS-1$
|
||||||
wordRule.addWord("FIXME", allTokens[TOKEN_TASK_TAG]); //$NON-NLS-1$
|
wordRule.addWord("FIXME", taskTagToken); //$NON-NLS-1$
|
||||||
wordRule.addWord("XXX", allTokens[TOKEN_TASK_TAG]); //$NON-NLS-1$
|
wordRule.addWord("XXX", taskTagToken); //$NON-NLS-1$
|
||||||
|
|
||||||
return wordRule;
|
return wordRule;
|
||||||
}
|
}
|
||||||
|
@ -165,10 +162,75 @@ public class QMLSourceViewerConfiguration extends TextSourceViewerConfiguration
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Map<String, IAdaptable> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
|
protected Map<String, IAdaptable> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Map<String, IAdaptable> targets = super.getHyperlinkDetectorTargets(sourceViewer);
|
Map<String, IAdaptable> targets = super.getHyperlinkDetectorTargets(sourceViewer);
|
||||||
targets.put("org.eclipse.cdt.qt.ui.qml", editor); //$NON-NLS-1$
|
targets.put("org.eclipse.cdt.qt.ui.qml", editor); //$NON-NLS-1$
|
||||||
return targets;
|
return targets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initTokens(IPreferenceStore prefStore) {
|
||||||
|
IColorManager colorManager = CDTUITools.getColorManager();
|
||||||
|
defaultToken = new Token(null);
|
||||||
|
multiLineCommentToken = new Token(createTextAttribute(colorManager, ICColorConstants.C_MULTI_LINE_COMMENT));
|
||||||
|
singleLineCommentToken = new Token(createTextAttribute(colorManager, ICColorConstants.C_SINGLE_LINE_COMMENT));
|
||||||
|
keywordToken = new Token(createTextAttribute(colorManager, ICColorConstants.C_KEYWORD));
|
||||||
|
stringToken = new Token(createTextAttribute(colorManager, ICColorConstants.C_STRING));
|
||||||
|
taskTagToken = new Token(createTextAttribute(colorManager, ICColorConstants.TASK_TAG));
|
||||||
|
}
|
||||||
|
|
||||||
|
private TextAttribute createTextAttribute(IColorManager colorManager, String colorKey) {
|
||||||
|
Color color = colorManager.getColor(colorKey);
|
||||||
|
if (color == null) {
|
||||||
|
RGB rgb= PreferenceConverter.getColor(fPreferenceStore, colorKey);
|
||||||
|
colorManager.unbindColor(colorKey);
|
||||||
|
colorManager.bindColor(colorKey, rgb);
|
||||||
|
color = colorManager.getColor(colorKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
String boldKey= colorKey + PreferenceConstants.EDITOR_BOLD_SUFFIX;
|
||||||
|
String italicKey= colorKey + PreferenceConstants.EDITOR_ITALIC_SUFFIX;
|
||||||
|
String strikethroughKey= colorKey + PreferenceConstants.EDITOR_STRIKETHROUGH_SUFFIX;
|
||||||
|
String underlineKey= colorKey + PreferenceConstants.EDITOR_UNDERLINE_SUFFIX;
|
||||||
|
|
||||||
|
int style= fPreferenceStore.getBoolean(boldKey) ? SWT.BOLD : SWT.NORMAL;
|
||||||
|
if (fPreferenceStore.getBoolean(italicKey))
|
||||||
|
style |= SWT.ITALIC;
|
||||||
|
|
||||||
|
if (fPreferenceStore.getBoolean(strikethroughKey))
|
||||||
|
style |= TextAttribute.STRIKETHROUGH;
|
||||||
|
|
||||||
|
if (fPreferenceStore.getBoolean(underlineKey))
|
||||||
|
style |= TextAttribute.UNDERLINE;
|
||||||
|
|
||||||
|
return new TextAttribute(color, null, style);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handlePreferenceStoreChanged(PropertyChangeEvent event) {
|
||||||
|
IColorManager colorManager = CDTUITools.getColorManager();
|
||||||
|
String property = event.getProperty();
|
||||||
|
if (property.startsWith(ICColorConstants.C_MULTI_LINE_COMMENT)) {
|
||||||
|
multiLineCommentToken.setData(createTextAttribute(colorManager, ICColorConstants.C_MULTI_LINE_COMMENT));
|
||||||
|
}
|
||||||
|
if (property.startsWith(ICColorConstants.C_SINGLE_LINE_COMMENT)) {
|
||||||
|
singleLineCommentToken.setData(createTextAttribute(colorManager, ICColorConstants.C_SINGLE_LINE_COMMENT));
|
||||||
|
}
|
||||||
|
if (property.startsWith(ICColorConstants.C_KEYWORD)) {
|
||||||
|
keywordToken.setData(createTextAttribute(colorManager, ICColorConstants.C_KEYWORD));
|
||||||
|
}
|
||||||
|
if (property.startsWith(ICColorConstants.C_STRING)) {
|
||||||
|
stringToken.setData(createTextAttribute(colorManager, ICColorConstants.C_STRING));
|
||||||
|
}
|
||||||
|
if (property.startsWith(ICColorConstants.TASK_TAG)) {
|
||||||
|
taskTagToken.setData(createTextAttribute(colorManager, ICColorConstants.TASK_TAG));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean affectsTextPresentation(PropertyChangeEvent event) {
|
||||||
|
String property = event.getProperty();
|
||||||
|
return property.startsWith(ICColorConstants.C_MULTI_LINE_COMMENT)
|
||||||
|
|| property.startsWith(ICColorConstants.C_SINGLE_LINE_COMMENT)
|
||||||
|
|| property.startsWith(ICColorConstants.C_KEYWORD)
|
||||||
|
|| property.startsWith(ICColorConstants.C_STRING)
|
||||||
|
|| property.startsWith(ICColorConstants.TASK_TAG);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue