From f613a1c5f5e98997c4d43babea2c64157da71588 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 8 May 2012 12:58:43 +0200 Subject: [PATCH 1/6] fix layout and borders --- .../execution/impl/BeforeRunStepsPanel.java | 11 +++-- .../com/intellij/ui/CommonActionsPanel.java | 4 +- .../src/com/intellij/ui/ToolbarDecorator.java | 48 +++++++++++-------- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java b/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java index ac80749045af..cc2b4687ea0f 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/BeforeRunStepsPanel.java @@ -15,10 +15,12 @@ */ package com.intellij.execution.impl; -import com.intellij.execution.*; +import com.intellij.execution.BeforeRunTask; +import com.intellij.execution.BeforeRunTaskProvider; +import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.UnknownRunConfiguration; -import com.intellij.openapi.actionSystem.ActionToolbarPosition; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DefaultActionGroup; @@ -63,8 +65,9 @@ class BeforeRunStepsPanel extends JPanel { myList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); myList.setCellRenderer(new MyListCellRenderer()); ToolbarDecorator myDecorator = ToolbarDecorator.createDecorator(myList).setVisibleRowCount(4); - if (!SystemInfo.isMac) - myDecorator.setToolbarPosition(ActionToolbarPosition.TOP); + if (!SystemInfo.isMac) { + myDecorator.setAsTopToolbar(); + } myDecorator.setEditAction(new AnActionButtonRunnable() { @Override public void run(AnActionButton button) { diff --git a/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java b/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java index ba0ff5eef1d3..eb35d73e1e72 100644 --- a/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java +++ b/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java @@ -32,9 +32,9 @@ import java.util.*; */ public class CommonActionsPanel extends JPanel { public static enum Buttons { - ADD, EDIT, REMOVE, UP, DOWN; + ADD, REMOVE, EDIT, UP, DOWN; - public static Buttons[] ALL = {ADD, EDIT, REMOVE, UP, DOWN}; + public static Buttons[] ALL = {ADD, REMOVE, EDIT, UP, DOWN}; Icon getIcon() { switch (this) { diff --git a/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java b/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java index 59dc1e7a5787..3085ec094829 100644 --- a/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java +++ b/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package com.intellij.ui; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.table.TableView; @@ -30,9 +31,7 @@ import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.LineBorder; import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; +import java.util.*; import java.util.List; /** @@ -287,7 +286,11 @@ public abstract class ToolbarDecorator implements DataProvider, CommonActionsPan myButtonComparator, myAddName, myRemoveName, myMoveUpName, myMoveDownName, myEditName, buttons); - myPanel.setBorder(myBorder); + if (myAsTopToolbar) { + contextComponent.setBorder(IdeBorderFactory.createBorder(SideBorder.ALL)); + } else { + myPanel.setBorder(myBorder); + } final JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(contextComponent); if (myPreferredSize != null) { scrollPane.setPreferredSize(myPreferredSize); @@ -307,7 +310,12 @@ public abstract class ToolbarDecorator implements DataProvider, CommonActionsPan installDnD(); panel.putClientProperty(ActionToolbar.ACTION_TOOLBAR_PROPERTY_KEY, myPanel.getComponent(0)); DataManager.registerDataProvider(panel, this); - if (!myAsTopToolbar) { + if (myAsTopToolbar) { + panel.setBorder(null); + if (getComponent().getBorder() == null) { + getComponent().setBorder(IdeBorderFactory.createBorder(SideBorder.ALL)); + } + } else { panel.setBorder(new LineBorder(UIUtil.getBorderColor())); final JComponent c = getComponent(); if (contextComponent != null) { @@ -358,21 +366,21 @@ public abstract class ToolbarDecorator implements DataProvider, CommonActionsPan private CommonActionsPanel.Buttons[] getButtons() { final ArrayList buttons = new ArrayList(); - if (myAddActionEnabled && myAddAction != null) { - buttons.add(CommonActionsPanel.Buttons.ADD); - } - if (myEditActionEnabled && myEditAction != null) { - buttons.add(CommonActionsPanel.Buttons.EDIT); - } - if (myRemoveActionEnabled && myRemoveAction != null) { - buttons.add(CommonActionsPanel.Buttons.REMOVE); - } - if (myUpActionEnabled && myUpAction != null) { - buttons.add(CommonActionsPanel.Buttons.UP); - } - if (myDownActionEnabled && myDownAction != null) { - buttons.add(CommonActionsPanel.Buttons.DOWN); + final HashMap> map = + new HashMap>(); + map.put(CommonActionsPanel.Buttons.ADD, Pair.create(myAddActionEnabled, myAddAction)); + map.put(CommonActionsPanel.Buttons.REMOVE, Pair.create(myRemoveActionEnabled, myRemoveAction)); + map.put(CommonActionsPanel.Buttons.EDIT, Pair.create(myEditActionEnabled, myEditAction)); + map.put(CommonActionsPanel.Buttons.UP, Pair.create(myUpActionEnabled, myUpAction)); + map.put(CommonActionsPanel.Buttons.DOWN, Pair.create(myDownActionEnabled, myDownAction)); + + for (CommonActionsPanel.Buttons button : CommonActionsPanel.Buttons.values()) { + final Pair action = map.get(button); + if (action != null && action.first && action.second != null) { + buttons.add(button); + } } + return buttons.toArray(new CommonActionsPanel.Buttons[buttons.size()]); } From 7e4eb79996e87067c9bc70845a8fd6ec04c7ab47 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 8 May 2012 13:03:59 +0200 Subject: [PATCH 2/6] don't call actions on hidden components --- platform/platform-api/src/com/intellij/ui/AnActionButton.java | 3 ++- .../platform-api/src/com/intellij/ui/CommonActionsPanel.java | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/ui/AnActionButton.java b/platform/platform-api/src/com/intellij/ui/AnActionButton.java index 88a3feacc3e3..e2c2100a05fc 100644 --- a/platform/platform-api/src/com/intellij/ui/AnActionButton.java +++ b/platform/platform-api/src/com/intellij/ui/AnActionButton.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -126,6 +126,7 @@ public abstract class AnActionButton extends AnAction implements ShortcutProvide } public void updateButton(AnActionEvent e) { + e.getPresentation().setEnabled(getContextComponent().isShowing()); } @Override diff --git a/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java b/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java index eb35d73e1e72..51e1c906079b 100644 --- a/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java +++ b/platform/platform-api/src/com/intellij/ui/CommonActionsPanel.java @@ -198,6 +198,9 @@ public class CommonActionsPanel extends JPanel { @Override public void updateButton(AnActionEvent e) { + super.updateButton(e); + if (!e.getPresentation().isEnabled()) return; + final JComponent c = getContextComponent(); if (c instanceof JTable || c instanceof JList) { final ListSelectionModel model = c instanceof JTable ? ((JTable)c).getSelectionModel() From 3ae7f3fc93397255f0f40353993cd60567ca9ca0 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Tue, 8 May 2012 14:46:02 +0200 Subject: [PATCH 3/6] AppCode: encoding conversion fixed --- .../ui/mac/foundation/Foundation.java | 30 +++++++++++-------- .../ui/mac/foundation/FoundationLibrary.java | 10 +++---- .../com/intellij/util/FoundationTest.java | 5 ++++ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java b/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java index 5089065e983d..a07b347605c8 100644 --- a/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java +++ b/platform/util/src/com/intellij/ui/mac/foundation/Foundation.java @@ -59,7 +59,7 @@ public class Foundation { public static ID getObjcClass(String className) { return myFoundationLibrary.objc_getClass(className); } - + public static ID getProtocol(String name) { return myFoundationLibrary.objc_getProtocol(name); } @@ -95,7 +95,7 @@ public class Foundation { public static boolean addMethod(ID cls, Pointer selectorName, Callback impl, String types) { return myFoundationLibrary.class_addMethod(cls, selectorName, impl, types); } - + public static boolean addProtocol(ID aClass, ID protocol) { return myFoundationLibrary.class_addProtocol(aClass, protocol); } @@ -156,7 +156,7 @@ public class Foundation { byte[] utf16Bytes = s.getBytes("UTF-16LE"); return invoke(invoke("NSString", "alloc"), "initWithBytes:length:encoding:", utf16Bytes, utf16Bytes.length, - myFoundationLibrary.CFStringConvertEncodingToNSStringEncoding(FoundationLibrary.kCFStringEncodingUTF16LE)); + convertCFEncodingToNS(FoundationLibrary.kCFStringEncodingUTF16LE)); } catch (UnsupportedEncodingException x) { throw new RuntimeException(x); @@ -178,7 +178,7 @@ public class Foundation { @Nullable public static String getEncodingName(long nsStringEncoding) { - int cfEncoding = myFoundationLibrary.CFStringConvertNSStringEncodingToEncoding(nsStringEncoding); + long cfEncoding = myFoundationLibrary.CFStringConvertNSStringEncodingToEncoding(nsStringEncoding); ID pointer = myFoundationLibrary.CFStringConvertEncodingToIANACharSetName(cfEncoding); return toStringViaUTF8(pointer); } @@ -187,10 +187,16 @@ public class Foundation { if (StringUtil.isEmptyOrSpaces(encodingName)) return -1; ID converted = nsString(encodingName); - int cfEncoding = myFoundationLibrary.CFStringConvertIANACharSetNameToEncoding(converted); - if (cfEncoding == FoundationLibrary.kCFStringEncodingInvalidId) return -1; + long cfEncoding = myFoundationLibrary.CFStringConvertIANACharSetNameToEncoding(converted); - return myFoundationLibrary.CFStringConvertEncodingToNSStringEncoding(cfEncoding); + ID restored = myFoundationLibrary.CFStringConvertEncodingToIANACharSetName(cfEncoding); + if (ID.NIL.equals(restored)) return -1; + + return convertCFEncodingToNS(cfEncoding); + } + + private static long convertCFEncodingToNS(long cfEncoding) { + return myFoundationLibrary.CFStringConvertEncodingToNSStringEncoding(cfEncoding) & 0xffffffffffl; // trim to C-type limits } public static void cfRetain(ID id) { @@ -277,18 +283,18 @@ public class Foundation { ourRunnableCallback = callback; } } - + public static class NSDictionary { private ID myDelegate; - + public NSDictionary(ID delegate) { myDelegate = delegate; } - + public ID get(ID key) { return invoke(myDelegate, "objectForKey:", key); } - + public ID get(String key) { return get(nsString(key)); } @@ -313,7 +319,7 @@ public class Foundation { return invoke(myDelegate, "objectAtIndex:", index); } } - + public static class NSAutoreleasePool { private ID myDelegate; diff --git a/platform/util/src/com/intellij/ui/mac/foundation/FoundationLibrary.java b/platform/util/src/com/intellij/ui/mac/foundation/FoundationLibrary.java index 0411ab7ad78d..6b4c0c6ca91b 100644 --- a/platform/util/src/com/intellij/ui/mac/foundation/FoundationLibrary.java +++ b/platform/util/src/com/intellij/ui/mac/foundation/FoundationLibrary.java @@ -34,11 +34,11 @@ public interface FoundationLibrary extends Library { byte CFStringGetCString(ID theString, byte[] buffer, int bufferSize, int encoding); int CFStringGetLength(ID theString); - int CFStringConvertNSStringEncodingToEncoding(long nsEncoding); - ID CFStringConvertEncodingToIANACharSetName(int cfEncoding); + long CFStringConvertNSStringEncodingToEncoding(long nsEncoding); + ID CFStringConvertEncodingToIANACharSetName(long cfEncoding); - int CFStringConvertIANACharSetNameToEncoding(ID encodingName); - long CFStringConvertEncodingToNSStringEncoding(int cfEncoding); + long CFStringConvertIANACharSetNameToEncoding(ID encodingName); + long CFStringConvertEncodingToNSStringEncoding(long cfEncoding); void CFRetain(ID cfTypeRef); void CFRelease(ID cfTypeRef); @@ -83,6 +83,4 @@ public interface FoundationLibrary extends Library { int kCFStringEncodingUTF32 = 0x0c000100; int kCFStringEncodingUTF32BE = 0x18000100; int kCFStringEncodingUTF32LE = 0x1c000100; - - int kCFStringEncodingInvalidId = 0xffffffff; } diff --git a/platform/util/testSrc/com/intellij/util/FoundationTest.java b/platform/util/testSrc/com/intellij/util/FoundationTest.java index 4cc631d85ce1..1e2e7387afa8 100644 --- a/platform/util/testSrc/com/intellij/util/FoundationTest.java +++ b/platform/util/testSrc/com/intellij/util/FoundationTest.java @@ -20,6 +20,11 @@ import com.intellij.ui.mac.foundation.Foundation; import junit.framework.TestCase; public class FoundationTest extends TestCase { + public void testStrings() throws Exception { + if (!SystemInfo.isMac) return; + assertEquals("Test", Foundation.toStringViaUTF8(Foundation.nsString("Test"))); + } + public void testEncodings() throws Exception { if (!SystemInfo.isMac) return; From af805bdea36ecd5c61bf23e1f4a3c071c645c4c1 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 8 May 2012 14:59:42 +0200 Subject: [PATCH 4/6] IDEA-65881 Navigation Bar jumps up above Toolbar after customizing any menu --- .../src/com/intellij/openapi/wm/impl/IdeRootPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java index 2f81eb10ecd2..89aa13f780b5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java @@ -222,7 +222,7 @@ public class IdeRootPane extends JRootPane implements UISettingsListener { myNorthPanel.remove(myToolbar); } myToolbar = createToolbar(); - myNorthPanel.add(myToolbar); + myNorthPanel.add(myToolbar, 0); updateToolbarVisibility(); myContentPane.revalidate(); } From 5259e979bdce0c4132f994998c36e3babc523de5 Mon Sep 17 00:00:00 2001 From: Serega Vasiliev Date: Tue, 8 May 2012 15:10:29 +0200 Subject: [PATCH 5/6] IDEA-83757 Play framework: navigate from views back to controller methods --- .../intellij/navigation/GotoRelatedItem.java | 17 +++++++++++++++++ .../navigation/DomGotoRelatedItem.java | 1 - 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/navigation/GotoRelatedItem.java b/platform/lang-api/src/com/intellij/navigation/GotoRelatedItem.java index 41e860243bc7..0ecc556d0d3e 100644 --- a/platform/lang-api/src/com/intellij/navigation/GotoRelatedItem.java +++ b/platform/lang-api/src/com/intellij/navigation/GotoRelatedItem.java @@ -75,4 +75,21 @@ public class GotoRelatedItem { } return items; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GotoRelatedItem item = (GotoRelatedItem)o; + + if (myElement != null ? !myElement.equals(item.myElement) : item.myElement != null) return false; + + return true; + } + + @Override + public int hashCode() { + return myElement != null ? myElement.hashCode() : 0; + } } diff --git a/xml/dom-openapi/src/com/intellij/codeInsight/navigation/DomGotoRelatedItem.java b/xml/dom-openapi/src/com/intellij/codeInsight/navigation/DomGotoRelatedItem.java index 3a96803ce32b..9b699716ab0b 100644 --- a/xml/dom-openapi/src/com/intellij/codeInsight/navigation/DomGotoRelatedItem.java +++ b/xml/dom-openapi/src/com/intellij/codeInsight/navigation/DomGotoRelatedItem.java @@ -32,7 +32,6 @@ public class DomGotoRelatedItem extends GotoRelatedItem { myElement = element; } - @NotNull @Override public String getCustomName() { return myElement.getPresentation().getElementName(); From de45088e0aa91d0afbe377e4a7bf12268d11c06e Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 8 May 2012 15:18:09 +0200 Subject: [PATCH 6/6] NPE fix --- platform/platform-api/src/com/intellij/ui/AnActionButton.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/ui/AnActionButton.java b/platform/platform-api/src/com/intellij/ui/AnActionButton.java index e2c2100a05fc..b231c285b956 100644 --- a/platform/platform-api/src/com/intellij/ui/AnActionButton.java +++ b/platform/platform-api/src/com/intellij/ui/AnActionButton.java @@ -126,7 +126,8 @@ public abstract class AnActionButton extends AnAction implements ShortcutProvide } public void updateButton(AnActionEvent e) { - e.getPresentation().setEnabled(getContextComponent().isShowing()); + final JComponent component = getContextComponent(); + e.getPresentation().setEnabled(component != null && component.isShowing()); } @Override