diff --git a/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/preferences/LanguageConfigurationPreferencePage.java b/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/preferences/LanguageConfigurationPreferencePage.java index 5bad7ee7e..51fa3c366 100644 --- a/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/preferences/LanguageConfigurationPreferencePage.java +++ b/org.eclipse.tm4e.languageconfiguration/src/main/java/org/eclipse/tm4e/languageconfiguration/internal/preferences/LanguageConfigurationPreferencePage.java @@ -12,6 +12,7 @@ */ package org.eclipse.tm4e.languageconfiguration.internal.preferences; +import static org.eclipse.tm4e.core.internal.utils.NullSafetyHelper.lazyNonNull; import static org.eclipse.tm4e.languageconfiguration.internal.LanguageConfigurationMessages.*; import java.util.Collection; @@ -51,6 +52,7 @@ import org.eclipse.tm4e.languageconfiguration.internal.widgets.ColumnViewerComparator; import org.eclipse.tm4e.languageconfiguration.internal.widgets.LanguageConfigurationPreferencesWidget; import org.eclipse.tm4e.languageconfiguration.internal.wizards.LanguageConfigurationImportWizard; +import org.eclipse.tm4e.ui.internal.utils.UI; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.osgi.service.prefs.BackingStoreException; @@ -67,11 +69,8 @@ public final class LanguageConfigurationPreferencePage extends PreferencePage im private final ILanguageConfigurationRegistryManager manager = new WorkingCopyLanguageConfigurationRegistryManager( LanguageConfigurationRegistryManager.getInstance()); - @Nullable - private TableViewer definitionViewer; - - @Nullable - private LanguageConfigurationPreferencesWidget infoWidget; + private TableViewer definitionViewer = lazyNonNull(); + private LanguageConfigurationPreferencesWidget infoWidget = lazyNonNull(); public LanguageConfigurationPreferencePage() { setDescription(LanguageConfigurationPreferencePage_description); @@ -98,12 +97,7 @@ protected Control createContents(@Nullable final Composite ancestor) { createDefinitionsListContent(parent); - assert definitionViewer != null; - definitionViewer.setInput(manager); - - final var infoWidget = new LanguageConfigurationPreferencesWidget(parent, SWT.NONE); - this.infoWidget = infoWidget; - + infoWidget = new LanguageConfigurationPreferencesWidget(parent, SWT.NONE); final var data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; infoWidget.setLayoutData(data); @@ -111,8 +105,10 @@ protected Control createContents(@Nullable final Composite ancestor) { Dialog.applyDialogFont(parent); innerParent.layout(); - return parent; + definitionViewer.setInput(manager); + UI.selectFirstElement(definitionViewer); + return parent; } /** @@ -141,8 +137,7 @@ private void createDefinitionsListContent(final Composite parent) { final var viewerComparator = new ColumnViewerComparator(); - final var definitionViewer = new TableViewer(table); - this.definitionViewer = definitionViewer; + this.definitionViewer = new TableViewer(table); for (int i = 0; i < 4; i++) { final var column = new TableColumn(table, SWT.NONE); @@ -227,7 +222,6 @@ private void remove() { @Override public void selectionChanged(@Nullable final SelectionChangedEvent e) { final var selection = definitionViewer.getStructuredSelection(); - assert infoWidget != null; infoWidget.refresh(null, manager); if (selection.isEmpty()) { return; @@ -240,7 +234,6 @@ public void selectionChanged(@Nullable final SelectionChangedEvent e) { } private void selectDefinition(final ILanguageConfigurationDefinition definition) { - assert infoWidget != null; infoWidget.refresh(definition, manager); } }); diff --git a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/GrammarPreferencePage.java b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/GrammarPreferencePage.java index b060d95a2..e04f35314 100644 --- a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/GrammarPreferencePage.java +++ b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/GrammarPreferencePage.java @@ -53,6 +53,7 @@ import org.eclipse.tm4e.ui.TMUIPlugin; import org.eclipse.tm4e.ui.internal.TMUIMessages; import org.eclipse.tm4e.ui.internal.themes.WorkingCopyThemeManager; +import org.eclipse.tm4e.ui.internal.utils.UI; import org.eclipse.tm4e.ui.internal.widgets.ColumnSelectionAdapter; import org.eclipse.tm4e.ui.internal.widgets.ColumnViewerComparator; import org.eclipse.tm4e.ui.internal.widgets.ContentTypesBindingWidget; @@ -171,6 +172,7 @@ protected Control createContents(@Nullable final Composite ancestor) { previewViewer = doCreateViewer(innerParent); grammarViewer.setInput(grammarRegistryManager); + UI.selectFirstElement(grammarViewer); updateButtons(); Dialog.applyDialogFont(parent); diff --git a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/ThemePreferencePage.java b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/ThemePreferencePage.java index e3148ca68..491494cfd 100644 --- a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/ThemePreferencePage.java +++ b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/preferences/ThemePreferencePage.java @@ -51,6 +51,7 @@ import org.eclipse.tm4e.registry.TMEclipseRegistryPlugin; import org.eclipse.tm4e.ui.TMUIPlugin; import org.eclipse.tm4e.ui.internal.TMUIMessages; +import org.eclipse.tm4e.ui.internal.utils.UI; import org.eclipse.tm4e.ui.internal.widgets.ColumnSelectionAdapter; import org.eclipse.tm4e.ui.internal.widgets.ColumnViewerComparator; import org.eclipse.tm4e.ui.internal.widgets.GrammarDefinitionContentProvider; @@ -116,6 +117,7 @@ protected Control createContents(@Nullable final Composite ancestor) { parent.setWeights(2, 1); themesTable.setInput(themeManager); + UI.selectFirstElement(themesTable); Dialog.applyDialogFont(parent); innerParent.layout(); diff --git a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/utils/UI.java b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/utils/UI.java index be9f82616..1453f43ff 100644 --- a/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/utils/UI.java +++ b/org.eclipse.tm4e.ui/src/main/java/org/eclipse/tm4e/ui/internal/utils/UI.java @@ -13,6 +13,8 @@ import org.eclipse.jdt.annotation.Nullable; import org.eclipse.jface.text.ITextViewer; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPage; @@ -91,6 +93,14 @@ public static Display getDisplay() { return Display.getDefault(); } + public static boolean selectFirstElement(final TableViewer viewer) { + final var firstElement = viewer.getElementAt(0); + if (firstElement == null) + return false; + viewer.setSelection(new StructuredSelection(firstElement), true); + return true; + } + private UI() { } }