summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/openapi/options/ex
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/openapi/options/ex')
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java4
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/GlassPanel.java52
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java75
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java12
-rw-r--r--platform/platform-impl/src/com/intellij/openapi/options/ex/SingleConfigurableEditor.java16
5 files changed, 132 insertions, 27 deletions
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java
index 5f8dc0e890df..3b67a3478368 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableWrapper.java
@@ -165,10 +165,6 @@ public class ConfigurableWrapper implements SearchableConfigurable {
return myEp;
}
- public String getGroupId() {
- return myEp.groupId;
- }
-
public String getParentId() {
return myEp.parentId;
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/GlassPanel.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/GlassPanel.java
index 96cc9e451185..c80a222ffd96 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/GlassPanel.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/GlassPanel.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 JetBrains s.r.o.
+ * Copyright 2000-2014 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,7 +17,10 @@
package com.intellij.openapi.options.ex;
import com.intellij.ide.ui.search.SearchUtil;
+import com.intellij.openapi.ui.GraphicsConfig;
+import com.intellij.ui.ColorUtil;
import com.intellij.ui.components.JBTabbedPane;
+import com.intellij.util.ui.GraphicsUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nullable;
@@ -27,6 +30,7 @@ import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.Kernel;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
@@ -64,17 +68,19 @@ public class GlassPanel extends JComponent {
final Point leftPoint = SwingUtilities.convertPoint(myPanel, new Point(visibleRect.x, visibleRect.y), surfaceComponent);
Area innerPanel = new Area(new Rectangle2D.Double(leftPoint.x, leftPoint.y, visibleRect.width, visibleRect.height));
Area mask = new Area(screen);
-
+ ArrayList<JComponent> components = new ArrayList<JComponent>();
for (JComponent lightComponent : myLightComponents) {
- final Area area = getComponentArea(surfaceComponent, lightComponent);
+ final Area area = getComponentArea(surfaceComponent, lightComponent, 1);
if (area == null) continue;
+ components.add(lightComponent);
if (lightComponent instanceof JLabel) {
final JLabel label = (JLabel)lightComponent;
final Component labelFor = label.getLabelFor();
if (labelFor instanceof JComponent) {
- final Area labelForArea = getComponentArea(surfaceComponent, (JComponent)labelFor);
+ final Area labelForArea = getComponentArea(surfaceComponent, (JComponent)labelFor, 1);
if (labelForArea != null) {
+ components.add((JComponent)labelFor);
area.add(labelForArea);
}
}
@@ -86,19 +92,32 @@ public class GlassPanel extends JComponent {
Graphics2D g2 = (Graphics2D)g;
- Color shieldColor = new Color(0.0f, 0.0f, 0.0f, 0.15f);
+ Color shieldColor = new Color(0.0f, 0.0f, 0.0f, 0.20f);
Color boundsColor = Color.gray;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(shieldColor);
g2.fill(mask);
- g2.setColor(boundsColor);
- g2.draw(mask);
+ g2.setColor(ColorUtil.toAlpha(Color.orange, 25));
+ GraphicsConfig config = GraphicsUtil.setupAAPainting(g2);
+ for (int i = 2; i > 0; i--) {
+ g2.setStroke(new BasicStroke(i));
+ Area arrr = new Area();
+ for (JComponent component : components) {
+ Area area = getComponentArea(surfaceComponent, component, i-1);
+ if (area != null) {
+ arrr.add(area);
+ }
+ }
+ g2.draw(arrr);
+ }
+
+ config.restore();
}
}
@Nullable
- private Area getComponentArea(final JComponent surfaceComponent, final JComponent lightComponent) {
+ private Area getComponentArea(final JComponent surfaceComponent, final JComponent lightComponent, int offset) {
if (!lightComponent.isShowing()) return null;
final Point panelPoint = SwingUtilities.convertPoint(lightComponent, new Point(0, 0), surfaceComponent);
@@ -115,12 +134,17 @@ public class GlassPanel extends JComponent {
int hInset = isWithBorder ? 7 : isLabelFromTabbedPane ? 20 : 7;
int vInset = isWithBorder ? 1 : isLabelFromTabbedPane ? 10 : 5;
- final Area area = new Area(new RoundRectangle2D.Double(x - hInset + insetsToIgnore.left,
- y - vInset + insetsToIgnore.top,
- lightComponent.getWidth() + hInset * 2 - insetsToIgnore.right - insetsToIgnore.left,
- lightComponent.getHeight() + vInset * 2 - insetsToIgnore.top - insetsToIgnore.bottom,
- 6, 6));
- return area;
+ hInset += offset;
+ vInset += offset;
+ int xCoord = x - hInset + insetsToIgnore.left;
+ int yCoord = y - vInset + insetsToIgnore.top;
+ int width = lightComponent.getWidth() + hInset * 2 - insetsToIgnore.right - insetsToIgnore.left;
+ int height = lightComponent.getHeight() + vInset * 2 - insetsToIgnore.top - insetsToIgnore.bottom;
+ return new Area(new RoundRectangle2D.Double(xCoord,
+ yCoord,
+ width,
+ height,
+ Math.min(height, 30), Math.min(height, 30)));
}
protected static Kernel getBlurKernel(int blurSize) {
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
index f1411cf3551d..e3404ec017cd 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/MixedConfigurableGroup.java
@@ -17,15 +17,21 @@ package com.intellij.openapi.options.ex;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurableGroup;
+import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.OptionsBundle;
import com.intellij.openapi.options.SearchableConfigurable;
+import com.intellij.openapi.util.text.StringUtil;
+import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
+import javax.swing.JComponent;
-public final class MixedConfigurableGroup implements ConfigurableGroup {
+public final class MixedConfigurableGroup implements SearchableConfigurable, ConfigurableGroup {
private final String myGroupId;
private Configurable[] myConfigurables;
@@ -34,6 +40,7 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
myConfigurables = (configurables != null)
? configurables.toArray(new Configurable[configurables.size()])
: new Configurable[0];
+ Arrays.sort(myConfigurables, COMPARATOR);
}
private MixedConfigurableGroup(String groupId, HashMap<String, ArrayList<Configurable>> configurables) {
@@ -41,6 +48,45 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
}
@Override
+ public JComponent createComponent() {
+ return null;
+ }
+
+ @Override
+ public boolean isModified() {
+ return false;
+ }
+
+ @Override
+ public void apply() throws ConfigurationException {
+ }
+
+ @Override
+ public void reset() {
+ }
+
+ @Override
+ public void disposeUIResources() {
+ myConfigurables = null;
+ }
+
+ @Override
+ public Runnable enableSearch(String option) {
+ return null;
+ }
+
+ @NotNull
+ @Override
+ public String getId() {
+ return "configurable.group." + myGroupId;
+ }
+
+ @Override
+ public String getHelpTopic() {
+ return "configurable.group." + myGroupId + ".help.topic";
+ }
+
+ @Override
public String getDisplayName() {
return OptionsBundle.message("configurable.group." + myGroupId + ".settings.display.name");
}
@@ -60,7 +106,7 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
for (Configurable configurable : configurables) {
String groupId = null;
if (configurable instanceof ConfigurableWrapper) {
- groupId = ((ConfigurableWrapper)configurable).getGroupId();
+ groupId = ((ConfigurableWrapper)configurable).getExtensionPoint().groupId;
}
ArrayList<Configurable> list = map.get(groupId);
if (list == null) {
@@ -70,7 +116,7 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
}
ArrayList<Configurable> buildList = map.get("build");
if (buildList != null) {
- NodeConfigurable buildTools = new NodeConfigurable("build.tools");
+ NodeConfigurable buildTools = new NodeConfigurable("build.tools", 1000);
buildTools.add(find("MavenSettings", buildList.iterator()));
buildTools.add(find("reference.settingsdialog.project.gradle", buildList.iterator()));
buildTools.add(find("reference.settingsdialog.project.gant", buildList.iterator()));
@@ -106,4 +152,27 @@ public final class MixedConfigurableGroup implements ConfigurableGroup {
}
return null;
}
+
+ public static int getGroupWeight(Configurable configurable) {
+ if (configurable instanceof NodeConfigurable) {
+ return ((NodeConfigurable)configurable).getGroupWeight();
+ }
+ if (configurable instanceof ConfigurableWrapper) {
+ return ((ConfigurableWrapper)configurable).getExtensionPoint().groupWeight;
+ }
+ return 0;
+ }
+
+ private static final Comparator<Configurable> COMPARATOR = new Comparator<Configurable>() {
+ @Override
+ public int compare(Configurable configurable1, Configurable configurable2) {
+ if (configurable1 == null || configurable2 == null) {
+ return configurable2 != null ? -1 : configurable1 != null ? 1 : 0;
+ }
+ int weight1 = getGroupWeight(configurable1);
+ int weight2 = getGroupWeight(configurable2);
+ return weight1 > weight2 ? -1 : weight1 < weight2 ? 1 : StringUtil.naturalCompare(configurable1.getDisplayName(),
+ configurable2.getDisplayName());
+ }
+ };
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java
index 6571c7a63746..609943d02943 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/NodeConfigurable.java
@@ -27,9 +27,15 @@ import java.util.ArrayList;
public final class NodeConfigurable extends SearchableConfigurable.Parent.Abstract {
private final ArrayList<Configurable> myConfigurables = new ArrayList<Configurable>();
private final String myId;
+ private final int myWeight;
- public NodeConfigurable(@NotNull String id) {
+ public NodeConfigurable(@NotNull String id, int weight) {
myId = id;
+ myWeight = weight;
+ }
+
+ public int getGroupWeight() {
+ return myWeight;
}
public void add(Configurable configurable) {
@@ -48,13 +54,13 @@ public final class NodeConfigurable extends SearchableConfigurable.Parent.Abstra
@NotNull
@Override
public String getId() {
- return myId;
+ return "node.configurable." + myId;
}
@Nullable
@Override
public String getHelpTopic() {
- return myId;
+ return "node.configurable." + myId + ".help.topic";
}
@Nls
diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/SingleConfigurableEditor.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/SingleConfigurableEditor.java
index 80144d230eaf..def0dd16a2d2 100644
--- a/platform/platform-impl/src/com/intellij/openapi/options/ex/SingleConfigurableEditor.java
+++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/SingleConfigurableEditor.java
@@ -46,7 +46,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
private Component myParentComponent;
private Configurable myConfigurable;
private JComponent myCenterPanel;
- private String myDimensionKey;
+ private final String myDimensionKey;
private final boolean myShowApplyButton;
private boolean myChangesWereApplied;
@@ -134,6 +134,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
return displayName.replaceAll("\n", " ");
}
+ @Override
protected String getDimensionServiceKey() {
if (myDimensionKey == null) {
return super.getDimensionServiceKey();
@@ -143,6 +144,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
}
}
+ @Override
@NotNull
protected Action[] createActions() {
List<Action> actions = new ArrayList<Action>();
@@ -157,6 +159,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
return actions.toArray(new Action[actions.size()]);
}
+ @Override
protected void doHelpAction() {
HelpManager.getInstance().invokeHelp(myConfigurable.getHelpTopic());
}
@@ -169,6 +172,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
super.doCancelAction();
}
+ @Override
protected void doOKAction() {
try {
if (myConfigurable.isModified()) myConfigurable.apply();
@@ -201,10 +205,11 @@ public class SingleConfigurableEditor extends DialogWrapper {
public ApplyAction() {
super(CommonBundle.getApplyButtonText());
final Runnable updateRequest = new Runnable() {
+ @Override
public void run() {
- if (!SingleConfigurableEditor.this.isShowing()) return;
+ if (!isShowing()) return;
try {
- ApplyAction.this.setEnabled(myConfigurable != null && myConfigurable.isModified());
+ setEnabled(myConfigurable != null && myConfigurable.isModified());
}
catch (IndexNotReadyException ignored) {
}
@@ -214,6 +219,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
// invokeLater necessary to make sure dialog is already shown so we calculate modality state correctly.
SwingUtilities.invokeLater(new Runnable() {
+ @Override
public void run() {
addUpdateRequest(updateRequest);
}
@@ -224,6 +230,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
myUpdateAlarm.addRequest(updateRequest, 500, ModalityState.stateForComponent(getWindow()));
}
+ @Override
public void actionPerformed(ActionEvent event) {
if (myPerformAction) return;
try {
@@ -248,11 +255,13 @@ public class SingleConfigurableEditor extends DialogWrapper {
}
}
+ @Override
protected JComponent createCenterPanel() {
myCenterPanel = myConfigurable.createComponent();
return myCenterPanel;
}
+ @Override
public JComponent getPreferredFocusedComponent() {
if (myConfigurable instanceof BaseConfigurable) {
JComponent preferred = ((BaseConfigurable)myConfigurable).getPreferredFocusedComponent();
@@ -261,6 +270,7 @@ public class SingleConfigurableEditor extends DialogWrapper {
return IdeFocusTraversalPolicy.getPreferredFocusedComponent(myCenterPanel);
}
+ @Override
public void dispose() {
super.dispose();
myConfigurable.disposeUIResources();