diff --git a/bundles/org.eclipse.launchbar.ui/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.launchbar.ui/.settings/org.eclipse.jdt.core.prefs index 0c68a61dca8..4a1ace7a1ef 100644 --- a/bundles/org.eclipse.launchbar.ui/.settings/org.eclipse.jdt.core.prefs +++ b/bundles/org.eclipse.launchbar.ui/.settings/org.eclipse.jdt.core.prefs @@ -1,7 +1,101 @@ eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled +org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore +org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull +org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault +org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable +org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.comparingIdentical=error +org.eclipse.jdt.core.compiler.problem.deadCode=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore +org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=enabled +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=error +org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled +org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=error +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=error +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error +org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning +org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning +org.eclipse.jdt.core.compiler.problem.nullReference=error +org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning +org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=error +org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning +org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning +org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning +org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore +org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore +org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning +org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedImport=error +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning org.eclipse.jdt.core.compiler.source=1.8 diff --git a/bundles/org.eclipse.launchbar.ui/icons/icon_debug_32x32.png b/bundles/org.eclipse.launchbar.ui/icons/icon_debug_32x32.png new file mode 100644 index 00000000000..eb338673155 Binary files /dev/null and b/bundles/org.eclipse.launchbar.ui/icons/icon_debug_32x32.png differ diff --git a/bundles/org.eclipse.launchbar.ui/icons/icon_profile_32x32.png b/bundles/org.eclipse.launchbar.ui/icons/icon_profile_32x32.png new file mode 100644 index 00000000000..1e28fd9f8b0 Binary files /dev/null and b/bundles/org.eclipse.launchbar.ui/icons/icon_profile_32x32.png differ diff --git a/bundles/org.eclipse.launchbar.ui/icons/icon_run_32x32.png b/bundles/org.eclipse.launchbar.ui/icons/icon_run_32x32.png new file mode 100644 index 00000000000..d704b703b71 Binary files /dev/null and b/bundles/org.eclipse.launchbar.ui/icons/icon_run_32x32.png differ diff --git a/bundles/org.eclipse.launchbar.ui/icons/launch_base_blank.png b/bundles/org.eclipse.launchbar.ui/icons/launch_base_blank.png new file mode 100644 index 00000000000..9259f65398f Binary files /dev/null and b/bundles/org.eclipse.launchbar.ui/icons/launch_base_blank.png differ diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/Messages.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/Messages.java index 7aef26870a3..be31a049e01 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/Messages.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/Messages.java @@ -42,6 +42,7 @@ public class Messages extends NLS { public static String LaunchConfigurationEditDialog_5; public static String LaunchConfigurationEditDialog_6; public static String ModeSelector_0; + public static String ModeSelector_ToolTip; public static String NewLaunchConfigEditPage_0; public static String NewLaunchConfigEditPage_1; public static String NewLaunchConfigEditPage_2; diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/CSelector.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/CSelector.java index ade71106fec..b9d4808157d 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/CSelector.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/CSelector.java @@ -522,7 +522,7 @@ public abstract class CSelector extends Composite { if (currentLabel != null) { currentLabel.getText(); } - return ""; + return ""; //$NON-NLS-1$ } protected boolean hasActionArea() { diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java index 8a481f1316c..b375dc331d4 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/LaunchBarControl.java @@ -7,7 +7,7 @@ * * Contributors: * Doug Schaefer - * Torkild U. Resheim - add preference to control target selector + * Torkild U. Resheim - add preference to control target selector *******************************************************************************/ package org.eclipse.launchbar.ui.internal.controls; @@ -106,20 +106,19 @@ public class LaunchBarControl implements Listener { manager.removeListener(this); } - private void createButton(Composite parent, String imageName, String toolTipText, final String command) { + private ToolItem createButton(Composite parent, String imageName, String toolTipText, final String command) { ToolItem button = new ToolItem((ToolBar) parent, SWT.FLAT); - // button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); Image srcImage = Activator.getDefault().getImage(imageName); - // Image image = new Image(parent.getDisplay(), srcImage, - // SWT.IMAGE_COPY); button.setImage(srcImage); button.setToolTipText(toolTipText); + button.setData("command", command); //$NON-NLS-1$ button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { Activator.runCommand(command); }; }); + return button; } @Override diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/ModeSelector.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/ModeSelector.java index 1a46006323f..b44e8bb3cb4 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/ModeSelector.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/ModeSelector.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.launchbar.ui.internal.controls; +import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.Map; @@ -21,6 +22,7 @@ import org.eclipse.debug.core.ILaunchMode; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.ILaunchGroup; +import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; @@ -28,22 +30,25 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.launchbar.core.internal.LaunchBarManager; import org.eclipse.launchbar.ui.internal.Activator; import org.eclipse.launchbar.ui.internal.Messages; +import org.eclipse.osgi.util.NLS; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.PaletteData; import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; @SuppressWarnings("restriction") public class ModeSelector extends CSelector { - private static final String[] noModes = new String[] { "---" }; //$NON-NLS-1$ - private final LaunchBarManager manager = Activator.getDefault().getLaunchBarUIManager().getManager(); public ModeSelector(Composite parent, int style) { super(parent, style); - setToolTipText(Messages.ModeSelector_0); - setContentProvider(new IStructuredContentProvider() { @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { @@ -65,7 +70,6 @@ public class ModeSelector extends CSelector { return noModes; } }); - setLabelProvider(new LabelProvider() { private Map images = new HashMap<>(); @@ -123,7 +127,6 @@ public class ModeSelector extends CSelector { return super.getText(element); } }); - setSorter(new Comparator() { @Override public int compare(Object o1, Object o2) { @@ -202,6 +205,106 @@ public class ModeSelector extends CSelector { if (element == null) element = noModes[0]; super.setSelection(element); + updateLaunchButton(findLaunchButton()); } + private ToolItem findLaunchButton() { + String commandId = Activator.CMD_LAUNCH; + for (Control control : getParent().getChildren()) { + if (control instanceof ToolBar) { + for (ToolItem toolItem : ((ToolBar) control).getItems()) { + if (commandId.equals(toolItem.getData("command"))) { //$NON-NLS-1$ + // found launch button + return toolItem; + } + } + } + } + Activator.log(new RuntimeException("Launch button is not found in toolbar")); //$NON-NLS-1$ + return null; + } + + private void updateLaunchButton(ToolItem toolItem) { + if (toolItem == null) { + return; + } + toolItem.setImage(Activator.getDefault().getImage(Activator.IMG_BUTTON_LAUNCH)); + Object selection = getSelection(); + if (selection instanceof ILaunchMode) { + ILaunchMode lmode = (ILaunchMode) selection; + toolItem.setToolTipText(NLS.bind(Messages.ModeSelector_ToolTip, lmode.getLabel())); + String mode = lmode.getIdentifier(); + String iconPath = "icons/icon_" + mode + "_32x32.png"; //$NON-NLS-1$ //$NON-NLS-2$ + Image modeBigImage = Activator.getDefault().getImage(iconPath); + if (modeBigImage == null) { + // no icon for the mode, lets do an overlay + Image modeImageOrig = getLabelProvider().getImage(lmode); + if (modeImageOrig != null) { + ImageDescriptor composite = new ReversedCenterOverlay(modeImageOrig.getImageData()); + Activator.getDefault().getImageRegistry().put(iconPath, composite); + modeBigImage = Activator.getDefault().getImage(iconPath); + } + } + if (modeBigImage != null) { + toolItem.setImage(modeBigImage); + } + } + } + + private final class ReversedCenterOverlay extends CompositeImageDescriptor { + private ImageData small; + + public ReversedCenterOverlay(ImageData small) { + this.small = small; + } + + @Override + protected Point getSize() { + return new Point(32, 32); + } + + @Override + protected void drawCompositeImage(int width, int height) { + ImageDescriptor base = Activator.getImageDescriptor("icons/launch_base_blank.png"); //$NON-NLS-1$ + ImageData baseData = base.getImageData(); + int baseColor = baseData.getPixel(16, 16); + ImageData data = getReversed(small, baseData.palette.getRGB(baseColor)); + drawImage(baseData, 0, 0); + drawImage(data, 8, 8); + } + + private ImageData getReversed(ImageData imageData, RGB baseColor) { + int width = imageData.width; + PaletteData palette = imageData.palette; + RGB whiteColor = new RGB(255, 255, 255); + if (!palette.isDirect) { + palette.colors = Arrays.copyOf(palette.colors, palette.colors.length + 2); + palette.colors[palette.colors.length - 1] = baseColor; + palette.colors[palette.colors.length - 2] = whiteColor; + } + int whitePixel = palette.getPixel(whiteColor); + int basePixed = palette.getPixel(baseColor); + int transPixed = imageData.transparentPixel; + int[] lineData = new int[imageData.width]; + for (int y = 0; y < imageData.height; y++) { + imageData.getPixels(0, y, width, lineData, 0); + for (int x = 0; x < lineData.length; x++) { + int pixelValue = lineData[x]; + if (pixelValue == transPixed) { + imageData.setPixel(x, y, basePixed); + continue; + } + RGB rgb = palette.getRGB(pixelValue); + float brightness = rgb.getHSB()[2]; + if (brightness > 0.97) { + imageData.setPixel(x, y, basePixed); + } else { + imageData.setPixel(x, y, whitePixel); + } + } + } + imageData.transparentPixel = -1; + return imageData; + } + } } diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/messages.properties b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/messages.properties index 2e57068198c..122b2e13e27 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/messages.properties +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/messages.properties @@ -25,6 +25,7 @@ LaunchConfigurationEditDialog_4=Are you sure you want to delete LaunchConfigurationEditDialog_5=Deleting launch configuration LaunchConfigurationEditDialog_6=Duplicating launch configuration ModeSelector_0=Launch Mode +ModeSelector_ToolTip=Launch in ''{0}'' mode NewLaunchConfigEditPage_0=NewLaunchConfigEditPage NewLaunchConfigEditPage_1=Launch Configuration Properties NewLaunchConfigEditPage_2=Edit the new launch configuration properties