Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Jemerov
2012-05-08 16:14:44 +02:00
10 changed files with 88 additions and 47 deletions
@@ -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;
}
}
@@ -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) {
@@ -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,8 @@ public abstract class AnActionButton extends AnAction implements ShortcutProvide
}
public void updateButton(AnActionEvent e) {
final JComponent component = getContextComponent();
e.getPresentation().setEnabled(component != null && component.isShowing());
}
@Override
@@ -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) {
@@ -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()
@@ -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<CommonActionsPanel.Buttons> buttons = new ArrayList<CommonActionsPanel.Buttons>();
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<CommonActionsPanel.Buttons, Pair<Boolean, AnActionButtonRunnable>> map =
new HashMap<CommonActionsPanel.Buttons, Pair<Boolean, AnActionButtonRunnable>>();
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<Boolean, AnActionButtonRunnable> action = map.get(button);
if (action != null && action.first && action.second != null) {
buttons.add(button);
}
}
return buttons.toArray(new CommonActionsPanel.Buttons[buttons.size()]);
}
@@ -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();
}
@@ -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;
@@ -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;
}
@@ -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;
@@ -32,7 +32,6 @@ public class DomGotoRelatedItem extends GotoRelatedItem {
myElement = element;
}
@NotNull
@Override
public String getCustomName() {
return myElement.getPresentation().getElementName();