From 82f9cb47f2fe76871660c35a8972ae682b33c31b Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Fri, 23 Jan 2015 12:45:50 +0100 Subject: [PATCH 01/19] Platform: EditFolder icon --- platform/icons/src/modules/editFolder.png | Bin 0 -> 346 bytes platform/icons/src/modules/editFolder@2x.png | Bin 0 -> 679 bytes .../util/src/com/intellij/icons/AllIcons.java | 1 + 3 files changed, 1 insertion(+) create mode 100644 platform/icons/src/modules/editFolder.png create mode 100644 platform/icons/src/modules/editFolder@2x.png diff --git a/platform/icons/src/modules/editFolder.png b/platform/icons/src/modules/editFolder.png new file mode 100644 index 0000000000000000000000000000000000000000..47c9d87b41005894f137835e58b2e56a7bd7b326 GIT binary patch literal 346 zcmV-g0j2(lP)z$r!6P```pMSXEQtE-M-zf*OyooXZS##cr(*Ho4 z|EKQExCk`hAwdJMX-?RY_CIt<^#7QRNprCp@M%XDVa+S!pG0p+V!>-b`;GRU*fdA4 zjC-(idQwuzqA1Kj?C$Oc8vw*ik9OxiEMq%^>yI41nPUcUGl`0S)>8 za!1yu^c`t;L7Jmh#ogaNJt+mI4xa&Tb0#*;`?x*pBFK;j+cICJtxh-x)%+Wq0dNfS s0+9YcZ9;oHkZlFTEFi_$FvYnM0KBwxj5kC`&;S4c07*qoM6N<$f^7YlLjV8( literal 0 HcmV?d00001 diff --git a/platform/icons/src/modules/editFolder@2x.png b/platform/icons/src/modules/editFolder@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1dbe8a5a56b5afcb3ef495d8a17b24d8a30901 GIT binary patch literal 679 zcmV;Y0$BZtP)OZJ|CLe_`+Ud3Xs$;v-YGjcH*&by3)$E7a=0p(LPMvO*EU68V zFnVCYAR;QV2U8S(l%_qH)wj=g+~l~@-FCO?fe&8n9Na!{qbd2KsGHv@3=*-r?mrC$`2Q=gA=9%u<_0^#u*$h z@o{mV;eblUPs;UQ_#`=K_*+oPxK$R`h9aZ}#~f33!1{z#@Z0z&UE}K*uf^vaHyrS4 z%5^)Fb^k19e7Kj?;WJpk1;YU_4b=a^x25NTi}#X7oG-vNGXf64cNVZZA-;jdh$ZpE|6{7@DCE|$kH>Vvg+WT#&$1hCP=O9vR#uESl N002ovPDHLkV1o05JGlS= literal 0 HcmV?d00001 diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index b6ddc195f597..ced9f3fd3feb 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -731,6 +731,7 @@ public class AllIcons { public static final Icon DeleteContentRoot = IconLoader.getIcon("/modules/deleteContentRoot.png"); // 9x9 public static final Icon DeleteContentRootRollover = IconLoader.getIcon("/modules/deleteContentRootRollover.png"); // 9x9 public static final Icon Edit = IconLoader.getIcon("/modules/edit.png"); // 14x14 + public static final Icon EditFolder = IconLoader.getIcon("/modules/editFolder.png"); // 16x16 public static final Icon ExcludedGeneratedRoot = IconLoader.getIcon("/modules/excludedGeneratedRoot.png"); // 16x16 public static final Icon ExcludeRoot = IconLoader.getIcon("/modules/excludeRoot.png"); // 16x16 public static final Icon GeneratedFolder = IconLoader.getIcon("/modules/generatedFolder.png"); // 16x16 From 07996f8d7df689659a4dd1091aa1255dd07136b4 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 23 Jan 2015 15:12:15 +0300 Subject: [PATCH 02/19] [vcs] Capitalize the "VCS" word --- .../intellij/openapi/vcs/roots/VcsRootProblemNotifier.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java index be69c616f31b..45cb3e50f5e4 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/roots/VcsRootProblemNotifier.java @@ -198,13 +198,13 @@ public class VcsRootProblemNotifier { private static String makeTitle(@NotNull Collection unregisteredRoots, @NotNull Collection invalidRoots) { String title; if (unregisteredRoots.isEmpty()) { - title = "Invalid Vcs root " + pluralize("mapping", invalidRoots.size()); + title = "Invalid VCS root " + pluralize("mapping", invalidRoots.size()); } else if (invalidRoots.isEmpty()) { - title = "Unregistered Vcs " + pluralize("root", unregisteredRoots.size()) + " detected"; + title = "Unregistered VCS " + pluralize("root", unregisteredRoots.size()) + " detected"; } else { - title = "Vcs root configuration problems"; + title = "VCS root configuration problems"; } return title; } From 17d44b3ed07e3a00e8845888c650333f348f1485 Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Fri, 23 Jan 2015 16:07:35 +0300 Subject: [PATCH 03/19] OC-11351 Parameter info for Swift [map arguments + italic] --- .../ParameterInfoUIContextEx.java | 4 ++ .../hint/ParameterInfoComponent.java | 42 +++++++++++++------ .../jetbrains/python/PyParameterInfoTest.java | 5 +++ 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUIContextEx.java b/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUIContextEx.java index d1eb749f44a5..318f91521a72 100644 --- a/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUIContextEx.java +++ b/platform/lang-api/src/com/intellij/lang/parameterInfo/ParameterInfoUIContextEx.java @@ -16,6 +16,8 @@ package com.intellij.lang.parameterInfo; +import com.intellij.util.Function; + import java.awt.*; import java.util.EnumSet; @@ -37,4 +39,6 @@ public interface ParameterInfoUIContextEx extends ParameterInfoUIContext { enum Flag { HIGHLIGHT, DISABLE, STRIKEOUT // more to come } + + void setEscapeFunction(Function escapeFunction); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java index b1ad07f906d2..a48aeb018df3 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java @@ -27,6 +27,7 @@ import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SideBorder; +import com.intellij.util.Function; import com.intellij.util.ui.UIUtil; import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; @@ -138,6 +139,7 @@ public class ParameterInfoComponent extends JPanel { class MyParameterContext implements ParameterInfoUIContextEx { private int i; + private Function myEscapeFunction; @Override public String setupUIComponentPresentation(String text, @@ -148,18 +150,23 @@ public class ParameterInfoComponent extends JPanel { boolean isDisabledBeforeHighlight, Color background) { final String resultedText = - myPanels[i].setup(text, highlightStartOffset, highlightEndOffset, isDisabled, strikeout, isDisabledBeforeHighlight, background); + myPanels[i].setup(text, myEscapeFunction, highlightStartOffset, highlightEndOffset, isDisabled, strikeout, isDisabledBeforeHighlight, background); myPanels[i].setBorder(isLastParameterOwner() ? BACKGROUND_BORDER : new SideBorder(new JBColor(JBColor.LIGHT_GRAY, Gray._90), SideBorder.BOTTOM)); return resultedText; } @Override public String setupUIComponentPresentation(final String[] texts, final EnumSet[] flags, final Color background) { - final String resultedText = myPanels[i].setup(texts, flags, background); + final String resultedText = myPanels[i].setup(texts, myEscapeFunction, flags, background); myPanels[i].setBorder(isLastParameterOwner() ? BACKGROUND_BORDER : new SideBorder(new JBColor(JBColor.LIGHT_GRAY, Gray._90), SideBorder.BOTTOM)); return resultedText; } + @Override + public void setEscapeFunction(Function escapeFunction) { + myEscapeFunction = escapeFunction; + } + @Override public boolean isUIComponentEnabled() { return isEnabled(i); @@ -246,7 +253,14 @@ public class ParameterInfoComponent extends JPanel { myOneLineComponents = new OneLineComponent[0]; //TODO ??? } - private String setup(String text, int highlightStartOffset, int highlightEndOffset, boolean isDisabled, boolean strikeout, boolean isDisabledBeforeHighlight, Color background) { + private String setup(String text, + Function escapeFunction, + int highlightStartOffset, + int highlightEndOffset, + boolean isDisabled, + boolean strikeout, + boolean isDisabledBeforeHighlight, + Color background) { StringBuilder buf = new StringBuilder(); removeAll(); @@ -268,9 +282,9 @@ public class ParameterInfoComponent extends JPanel { TextRange hr = highlightingRange == null ? null : lRange.intersection(highlightingRange); hr = hr == null ? null : hr.shiftRight(-lineOffset); - String before = escapeString(hr == null ? line : line.substring(0, hr.getStartOffset())); - String in = hr == null ? "" : escapeString(hr.substring(line)); - String after = hr == null ? "" : escapeString(line.substring(hr.getEndOffset(), line.length())); + String before = escapeString(hr == null ? line : line.substring(0, hr.getStartOffset()), escapeFunction); + String in = hr == null ? "" : escapeString(hr.substring(line), escapeFunction); + String after = hr == null ? "" : escapeString(line.substring(hr.getEndOffset(), line.length()), escapeFunction); TextRange escapedHighlightingRange = in.isEmpty() ? null : TextRange.create(before.length(), before.length() + in.length()); buf.append(myOneLineComponents[i].setup(before + in + after, isDisabled, strikeout, background, escapedHighlightingRange)); @@ -288,11 +302,15 @@ public class ParameterInfoComponent extends JPanel { return buf.toString(); } - private String escapeString(String line) { - return XmlStringUtil.escapeString(line); + private String escapeString(String line, Function escapeFunction) { + line = XmlStringUtil.escapeString(line); + return escapeFunction == null ? line : escapeFunction.fun(line); } - public String setup(final String[] texts, final EnumSet[] flags, final Color background) { + public String setup(final String[] texts, + Function escapeFunction, + final EnumSet[] flags, + final Color background) { StringBuilder buf = new StringBuilder(); removeAll(); setBackground(background); @@ -304,7 +322,7 @@ public class ParameterInfoComponent extends JPanel { String line = ""; for (int i = 0; i < texts.length; i++) { - String paramText = escapeString(texts[i]); + String paramText = escapeString(texts[i], escapeFunction); if (paramText == null) break; line += texts[i]; final EnumSet flag = flags[i]; @@ -323,7 +341,7 @@ public class ParameterInfoComponent extends JPanel { curOffset += paramText.length(); if (line.length() >= 50) { final OneLineComponent component = new OneLineComponent(); - buf.append(component.setup(escapeString(line), flagsMap, background)); + buf.append(component.setup(escapeString(line, escapeFunction), flagsMap, background)); add(component, new GridBagConstraints(0, index, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); index += 1; @@ -334,7 +352,7 @@ public class ParameterInfoComponent extends JPanel { } } final OneLineComponent component = new OneLineComponent(); - buf.append(component.setup(escapeString(line), flagsMap, background)); + buf.append(component.setup(escapeString(line, escapeFunction), flagsMap, background)); add(component, new GridBagConstraints(0, index, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); components.add(component); diff --git a/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java b/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java index af516eabfa9a..8846046775d0 100644 --- a/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java +++ b/python/testSrc/com/jetbrains/python/PyParameterInfoTest.java @@ -25,6 +25,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.ArrayUtil; +import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import com.jetbrains.python.fixtures.LightMarkedTestCase; @@ -455,6 +456,10 @@ public class PyParameterInfoTest extends LightMarkedTestCase { return StringUtil.join(texts, ""); } + @Override + public void setEscapeFunction(Function escapeFunction) { + } + @Override public String setupUIComponentPresentation(String text, int highlightStartOffset, int highlightEndOffset, boolean isDisabled, boolean strikeout, boolean isDisabledBeforeHighlight, Color background) { From e9332d27ff99abe375422c22e37645f3f717adf3 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 23 Jan 2015 15:53:46 +0300 Subject: [PATCH 04/19] [git] rearrange: move test methods to the top --- .../tests/git4idea/repo/GitConfigTest.java | 85 +++++++++---------- 1 file changed, 42 insertions(+), 43 deletions(-) diff --git a/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java b/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java index f06426e36ed8..101d57efa84f 100644 --- a/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java +++ b/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java @@ -21,7 +21,6 @@ import com.intellij.openapi.application.PluginPathManager; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.VcsTestUtil; -import com.intellij.util.LineSeparator; import com.intellij.util.containers.ContainerUtil; import git4idea.GitBranch; import git4idea.GitLocalBranch; @@ -37,7 +36,48 @@ import java.io.IOException; import java.util.*; public class GitConfigTest extends GitPlatformTest { - + + public void testRemotes() throws IOException { + Collection objects = loadRemotes(); + for (TestSpec spec : objects) { + doTestRemotes(spec.name, spec.config, spec.result); + } + } + + public void testBranches() throws IOException { + Collection objects = loadBranches(); + for (TestSpec spec : objects) { + doTestBranches(spec.name, spec.config, spec.result); + } + } + + private void doTestRemotes(String testName, File configFile, File resultFile) throws IOException { + GitConfig config = GitConfig.read(myPlatformFacade, configFile); + VcsTestUtil.assertEqualCollections(testName, config.parseRemotes(), readRemoteResults(resultFile)); + } + + private void doTestBranches(String testName, File configFile, File resultFile) throws IOException { + Collection expectedInfos = readBranchResults(resultFile); + Collection localBranches = Collections2.transform(expectedInfos, new Function() { + @Override + public GitLocalBranch apply(@Nullable GitBranchTrackInfo input) { + assert input != null; + return input.getLocalBranch(); + } + }); + Collection remoteBranches = Collections2.transform(expectedInfos, new Function() { + @Override + public GitRemoteBranch apply(@Nullable GitBranchTrackInfo input) { + assert input != null; + return input.getRemoteBranch(); + } + }); + + VcsTestUtil.assertEqualCollections(testName, + GitConfig.read(myPlatformFacade, configFile).parseTrackInfos(localBranches, remoteBranches), + expectedInfos); + } + public Collection loadRemotes() throws IOException { return loadConfigData(getTestDataFolder("remote")); } @@ -95,47 +135,6 @@ public class GitConfigTest extends GitPlatformTest { return new File(pluginRoot, "testData"); } - public void testRemotes() throws IOException { - Collection objects = loadRemotes(); - for (TestSpec spec : objects) { - doTestRemotes(spec.name, spec.config, spec.result); - } - } - - public void testBranches() throws IOException { - Collection objects = loadBranches(); - for (TestSpec spec : objects) { - doTestBranches(spec.name, spec.config, spec.result); - } - } - - private void doTestRemotes(String testName, File configFile, File resultFile) throws IOException { - GitConfig config = GitConfig.read(myPlatformFacade, configFile); - VcsTestUtil.assertEqualCollections(testName, config.parseRemotes(), readRemoteResults(resultFile)); - } - - private void doTestBranches(String testName, File configFile, File resultFile) throws IOException { - Collection expectedInfos = readBranchResults(resultFile); - Collection localBranches = Collections2.transform(expectedInfos, new Function() { - @Override - public GitLocalBranch apply(@Nullable GitBranchTrackInfo input) { - assert input != null; - return input.getLocalBranch(); - } - }); - Collection remoteBranches = Collections2.transform(expectedInfos, new Function() { - @Override - public GitRemoteBranch apply(@Nullable GitBranchTrackInfo input) { - assert input != null; - return input.getRemoteBranch(); - } - }); - - VcsTestUtil.assertEqualCollections(testName, - GitConfig.read(myPlatformFacade, configFile).parseTrackInfos(localBranches, remoteBranches), - expectedInfos); - } - private static Collection readBranchResults(File file) throws IOException { String content = FileUtil.loadFile(file); Collection remotes = new ArrayList(); From 62c099be98b3025c946bab7f735fb4bdf1637b2b Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 23 Jan 2015 16:08:32 +0300 Subject: [PATCH 05/19] [git] IDEA-135557 unquote branch name values in .git/config Branch name is quoted in .git/config if it contains a hash (#) symbol (to avoid confusion with a comment). --- .../git4idea/src/git4idea/repo/GitConfig.java | 2 +- .../tests/git4idea/repo/GitConfigTest.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/repo/GitConfig.java b/plugins/git4idea/src/git4idea/repo/GitConfig.java index b9007606967a..783f2786b09f 100644 --- a/plugins/git4idea/src/git4idea/repo/GitConfig.java +++ b/plugins/git4idea/src/git4idea/repo/GitConfig.java @@ -185,7 +185,7 @@ public class GitConfig { } boolean merge = mergeName != null; - final String remoteBranchName = (merge ? mergeName : rebaseName); + final String remoteBranchName = StringUtil.unquoteString(merge ? mergeName : rebaseName); GitLocalBranch localBranch = findLocalBranch(branchName, localBranches); GitRemoteBranch remoteBranch = findRemoteBranch(remoteBranchName, remoteName, remoteBranches); diff --git a/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java b/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java index 101d57efa84f..5635130303ee 100644 --- a/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java +++ b/plugins/git4idea/tests/git4idea/repo/GitConfigTest.java @@ -18,6 +18,7 @@ package git4idea.repo; import com.google.common.base.Function; import com.google.common.collect.Collections2; import com.intellij.openapi.application.PluginPathManager; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.VcsTestUtil; @@ -27,6 +28,7 @@ import git4idea.GitLocalBranch; import git4idea.GitRemoteBranch; import git4idea.GitStandardRemoteBranch; import git4idea.test.GitPlatformTest; +import git4idea.test.GitTestUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -35,6 +37,8 @@ import java.io.FilenameFilter; import java.io.IOException; import java.util.*; +import static git4idea.test.GitExecutor.git; + public class GitConfigTest extends GitPlatformTest { public void testRemotes() throws IOException { @@ -51,6 +55,27 @@ public class GitConfigTest extends GitPlatformTest { } } + //inspired by IDEA-135557 + public void test_branch_with_hash_symbol() throws IOException { + GitTestUtil.createRepository(myProject, myProjectPath, true); + git("remote add origin http://example.git"); // define a remote to be able to set up tracking + git("update-ref refs/remotes/origin/a#branch HEAD"); + git("branch --track a#branch origin/a#branch"); + + File gitDir = new File(myProjectPath, ".git"); + GitConfig config = GitConfig.read(myPlatformFacade, new File(gitDir, "config")); + GitBranchState state = new GitRepositoryReader(gitDir).readState(config.parseRemotes()); + Collection trackInfos = config.parseTrackInfos(state.getLocalBranches(), state.getRemoteBranches()); + assertTrue("Couldn't find correct a#branch tracking information among: [" + trackInfos + "]", + ContainerUtil.exists(trackInfos, new Condition() { + @Override + public boolean value(GitBranchTrackInfo info) { + return info.getLocalBranch().getName().equals("a#branch") && + info.getRemoteBranch().getNameForLocalOperations().equals("origin/a#branch"); + } + })); + } + private void doTestRemotes(String testName, File configFile, File resultFile) throws IOException { GitConfig config = GitConfig.read(myPlatformFacade, configFile); VcsTestUtil.assertEqualCollections(testName, config.parseRemotes(), readRemoteResults(resultFile)); From f16e483c53e26bbecce0d4e923eb5add6ad567e1 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 19:16:55 +0100 Subject: [PATCH 06/19] HiDPI: Stripe buttons --- .../openapi/wm/impl/StripeButton.java | 5 +++-- .../openapi/wm/impl/StripeButtonUI.java | 20 ++++++++++--------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButton.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButton.java index f62ff2c1819a..f199e2a79525 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButton.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButton.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -31,6 +31,7 @@ import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.ui.MouseDragHelper; import com.intellij.ui.PopupHandler; import com.intellij.util.ui.JBImageIcon; +import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -107,7 +108,7 @@ public final class StripeButton extends AnchoredButton implements ActionListener private void init() { setFocusable(false); setBackground(ourBackgroundColor); - final Border border = BorderFactory.createEmptyBorder(5, 5, 0, 5); + final Border border = JBUI.Borders.empty(5, 5, 0, 5); setBorder(border); updatePresentation(); apply(myDecorator.getWindowInfo()); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButtonUI.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButtonUI.java index eb360e39d1ad..ca9f23536e59 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButtonUI.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/StripeButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2015 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.openapi.wm.impl; import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.ui.Gray; +import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import javax.swing.*; @@ -48,8 +49,8 @@ public final class StripeButtonUI extends MetalToggleButtonUI{ final AnchoredButton button=(AnchoredButton)c; final Dimension dim=super.getPreferredSize(button); - dim.width=(int)(4+dim.width*1.1f); - dim.height+=2; + dim.width=(int)(JBUI.scale(4) + dim.width*1.1f); + dim.height+= JBUI.scale(2); final ToolWindowAnchor anchor=button.getAnchor(); if(ToolWindowAnchor.LEFT==anchor||ToolWindowAnchor.RIGHT==anchor){ @@ -106,16 +107,17 @@ public final class StripeButtonUI extends MetalToggleButtonUI{ final ButtonModel model=button.getModel(); final Color background = button.getBackground(); - ourIconRect.x -= 2; - ourTextRect.x -= 2; + ourIconRect.x -= JBUI.scale(2); + ourTextRect.x -= JBUI.scale(2); + final int off = JBUI.scale(1); if (model.isArmed() && model.isPressed() || model.isSelected() || model.isRollover()) { - if (anchor == ToolWindowAnchor.LEFT) g2.translate(-1, 0); - if (anchor.isHorizontal()) g2.translate(0, -1); + if (anchor == ToolWindowAnchor.LEFT) g2.translate(-off, 0); + if (anchor.isHorizontal()) g2.translate(0, -off); final boolean dark = UIUtil.isUnderDarcula(); g2.setColor(dark ? Gray._15.withAlpha(model.isSelected() ? 85: 40) : Gray._85.withAlpha(model.isSelected()? 85: 40)); g2.fillRect(0, 0, button.getWidth(), button.getHeight()); - if (anchor == ToolWindowAnchor.LEFT) g2.translate(1, 0); - if (anchor.isHorizontal()) g2.translate(0, 1); + if (anchor == ToolWindowAnchor.LEFT) g2.translate(off, 0); + if (anchor.isHorizontal()) g2.translate(0, off); } From abf385737346c25b1b8c5a9e1410f8467d0014b3 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 19:30:02 +0100 Subject: [PATCH 07/19] HiDPI: OnePixelDivider --- .../src/com/intellij/openapi/ui/OnePixelDivider.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/OnePixelDivider.java b/platform/platform-api/src/com/intellij/openapi/ui/OnePixelDivider.java index 355540432648..634900d479f1 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/OnePixelDivider.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/OnePixelDivider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -23,6 +23,7 @@ import com.intellij.openapi.wm.IdeGlassPane; import com.intellij.openapi.wm.IdeGlassPaneUtil; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; +import com.intellij.util.ui.JBUI; import javax.swing.*; import java.awt.*; @@ -82,7 +83,7 @@ public class OnePixelDivider extends Divider { final MouseEvent event = getTargetEvent(e); final Point p = event.getPoint(); final int r = Math.abs(isVertical() ? p.y : p.x); - return r < 6; + return r < JBUI.scale(6); } @Override From c22512537db9f0fd57d7f0661e424144baa1f5bd Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 19:41:51 +0100 Subject: [PATCH 08/19] move CustomLineBorder to util --- .../src/com/intellij/ui/border/CustomLineBorder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename platform/{platform-api => util}/src/com/intellij/ui/border/CustomLineBorder.java (98%) diff --git a/platform/platform-api/src/com/intellij/ui/border/CustomLineBorder.java b/platform/util/src/com/intellij/ui/border/CustomLineBorder.java similarity index 98% rename from platform/platform-api/src/com/intellij/ui/border/CustomLineBorder.java rename to platform/util/src/com/intellij/ui/border/CustomLineBorder.java index ea72fe4cfe7c..b8f6de4d272b 100644 --- a/platform/platform-api/src/com/intellij/ui/border/CustomLineBorder.java +++ b/platform/util/src/com/intellij/ui/border/CustomLineBorder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. From a6f029724d81eaeb1e064513d22518b07519c095 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 19:42:19 +0100 Subject: [PATCH 09/19] JBUI: add custom line border --- platform/util/src/com/intellij/util/ui/JBUI.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index 4fd929658c8f..5630ce520e7e 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -15,7 +15,10 @@ */ package com.intellij.util.ui; +import com.intellij.ui.border.CustomLineBorder; + import javax.swing.*; +import javax.swing.border.Border; import java.awt.*; /** @@ -102,5 +105,9 @@ public class JBUI { public static JBEmptyBorder empty() { return new JBEmptyBorder(0); } + + public static Border customLine(Color color, int top, int left, int bottom, int right) { + return new CustomLineBorder(color, insets(top, left, bottom, right)); + } } } From d54893c01c7e1ea83adf36b49e0fd56d778b5158 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 19:52:00 +0100 Subject: [PATCH 10/19] JBUI: more utility methods for work with borders --- .../util/src/com/intellij/util/ui/JBUI.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index 5630ce520e7e..5c8a2f41b2a2 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -102,6 +102,26 @@ public class JBUI { return new JBEmptyBorder(top, left, bottom, right); } + public static JBEmptyBorder empty(int topAndBottom, int leftAndRight) { + return new JBEmptyBorder(topAndBottom, leftAndRight, topAndBottom, leftAndRight); + } + + public static JBEmptyBorder emptyTop(int offset) { + return new JBEmptyBorder(offset, 0, 0, 0); + } + + public static JBEmptyBorder emptyLeft(int offset) { + return new JBEmptyBorder(0, offset, 0, 0); + } + + public static JBEmptyBorder emptyBottom(int offset) { + return new JBEmptyBorder(0, 0, offset, 0); + } + + public static JBEmptyBorder emptyRight(int offset) { + return new JBEmptyBorder(0, 0, 0, offset); + } + public static JBEmptyBorder empty() { return new JBEmptyBorder(0); } From 2f7523552b5adf4b3a0c6956b3757715cfc6e5ca Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Fri, 23 Jan 2015 21:52:24 +0300 Subject: [PATCH 11/19] PY-11855 Run manage.py task improvements Command show params temp fix --- .../commandInterface/commandsWithArgs/InCommandStrategy.java | 2 +- .../commandInterface/commandsWithArgs/NoCommandStrategy.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/InCommandStrategy.java b/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/InCommandStrategy.java index de1dce0df232..c7a84377addf 100644 --- a/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/InCommandStrategy.java +++ b/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/InCommandStrategy.java @@ -49,7 +49,7 @@ class InCommandStrategy extends Strategy { @NotNull @Override public String getSubText() { - return "D"; + return "Tab will display list of arguments in next commit"; } @NotNull diff --git a/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/NoCommandStrategy.java b/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/NoCommandStrategy.java index d4da6eac1ef7..7b4f3f7b07f8 100644 --- a/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/NoCommandStrategy.java +++ b/python/src/com/jetbrains/python/commandInterface/commandsWithArgs/NoCommandStrategy.java @@ -33,7 +33,7 @@ class NoCommandStrategy extends Strategy { @NotNull @Override String getSubText() { - return "vse ploho"; + return "Enter command here"; // TODO: Use u18n } @NotNull From ef247c9ff96b94e60501c590a28e8d797b448e54 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 23 Jan 2015 11:45:41 +0100 Subject: [PATCH 12/19] IG: fix property --- .../src/com/siyeh/InspectionGadgetsBundle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties index 5c15a294ebb4..c334684b425c 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/InspectionGadgetsBundle.properties @@ -1780,7 +1780,7 @@ unnecessary.javadoc.link.display.name=Unnecessary Javadoc link unnecessary.javadoc.link.super.method.problem.descriptor=#ref pointing to super method is unnecessary #loc unnecessary.javadoc.link.this.method.problem.descriptor=#ref pointing to this method is unnecessary #loc unnecessary.javadoc.link.this.class.problem.descriptor=#ref pointing to containing class is unnecessary #loc -unnecessary.javadoc.link.quickfix=Remove unnecessary '{0}' +unnecessary.javadoc.link.quickfix=Remove unnecessary ''{0}'' thread.local.not.static.final.display.name=ThreadLocal field not declared static final thread.local.not.static.final.problem.descriptor=ThreadLocal #ref is not declared 'static final' #loc remove.try.finally.block.quickfix=Remove 'try-finally' block From cce5f7e16258955447c4ae09cfc5bf0a1df8a5b8 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 23 Jan 2015 19:58:42 +0100 Subject: [PATCH 13/19] IDEA-36824 (Add Inspection for dangling Javadoc comments) --- .../src/META-INF/InspectionGadgets.xml | 4 + .../siyeh/InspectionGadgetsBundle.properties | 4 + .../ig/javadoc/DanglingJavadocInspection.java | 137 ++++++++++++++++++ .../DanglingJavadoc.html | 10 ++ .../dangling_javadoc/DanglingJavadoc.java | 6 + .../DanglingJavadocInspectionTest.java | 41 ++++++ 6 files changed, 202 insertions(+) create mode 100644 plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java create mode 100644 plugins/InspectionGadgets/src/inspectionDescriptions/DanglingJavadoc.html create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/javadoc/dangling_javadoc/DanglingJavadoc.java create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml index fe80d85060a5..9b4162f96faf 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/META-INF/InspectionGadgets.xml @@ -1242,6 +1242,10 @@ implementationClass="com.siyeh.ig.javabeans.SuspiciousGetterSetterInspection"/> + #ref() use.of.clone.call.method.problem.descriptor=Implementation of #ref() use.of.clone.reference.problem.descriptor=Use of #ref +dangling.javadoc.display.name=Dangling Javadoc comment +dangling.javadoc.problem.descriptor=Dangling Javadoc comment #loc +dangling.javadoc.convert.quickfix=Replace with block comment +dangling.javadoc.delete.quickfix=Remove dangling comment \ No newline at end of file diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java new file mode 100644 index 000000000000..8b64f01bd5b3 --- /dev/null +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/javadoc/DanglingJavadocInspection.java @@ -0,0 +1,137 @@ +/* + * Copyright 2000-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.siyeh.ig.javadoc; + +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import com.intellij.psi.javadoc.PsiDocComment; +import com.intellij.psi.javadoc.PsiDocToken; +import com.intellij.psi.tree.IElementType; +import com.siyeh.InspectionGadgetsBundle; +import com.siyeh.ig.BaseInspection; +import com.siyeh.ig.BaseInspectionVisitor; +import com.siyeh.ig.InspectionGadgetsFix; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.NotNull; + +/** + * @author Bas Leijdekkers + */ +public class DanglingJavadocInspection extends BaseInspection { + + @Nls + @NotNull + @Override + public String getDisplayName() { + return InspectionGadgetsBundle.message("dangling.javadoc.display.name"); + } + + @NotNull + @Override + protected String buildErrorString(Object... infos) { + return InspectionGadgetsBundle.message("dangling.javadoc.problem.descriptor"); + } + + @NotNull + @Override + protected InspectionGadgetsFix[] buildFixes(Object... infos) { + return new InspectionGadgetsFix[] { + new DeleteCommentFix(), + new ConvertCommentFix() + }; + } + + private static class ConvertCommentFix extends InspectionGadgetsFix { + @Nls + @NotNull + @Override + public String getName() { + return InspectionGadgetsBundle.message("dangling.javadoc.convert.quickfix"); + } + + @NotNull + @Override + public String getFamilyName() { + return getName(); + } + + @Override + protected void doFix(Project project, ProblemDescriptor descriptor) { + final PsiElement element = descriptor.getPsiElement(); + final PsiElement docComment = element.getParent(); + final StringBuilder newCommentText = new StringBuilder(); + for (PsiElement child : docComment.getChildren()) { + if (child instanceof PsiDocToken) { + final PsiDocToken docToken = (PsiDocToken)child; + final IElementType tokenType = docToken.getTokenType(); + if (JavaDocTokenType.DOC_COMMENT_START.equals(tokenType)) { + newCommentText.append("/*"); + } + else if (!JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS.equals(tokenType)) { + newCommentText.append(child.getText()); + } + } + else { + newCommentText.append(child.getText()); + } + } + final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); + final PsiComment newComment = factory.createCommentFromText(newCommentText.toString(), element); + docComment.replace(newComment); + } + } + + private static class DeleteCommentFix extends InspectionGadgetsFix { + + @Nls + @NotNull + @Override + public String getName() { + return InspectionGadgetsBundle.message("dangling.javadoc.delete.quickfix"); + } + + @NotNull + @Override + public String getFamilyName() { + return getName(); + } + + @Override + protected void doFix(Project project, ProblemDescriptor descriptor) { + final PsiElement element = descriptor.getPsiElement(); + element.getParent().delete(); + } + } + + @Override + public BaseInspectionVisitor buildVisitor() { + return new DanglingJavadocVisitor(); + } + + private static class DanglingJavadocVisitor extends BaseInspectionVisitor { + + @Override + public void visitDocComment(PsiDocComment comment) { + super.visitDocComment(comment); + final PsiDocCommentOwner owner = comment.getOwner(); + if (owner != null) { + return; + } + registerError(comment.getFirstChild()); + } + } +} diff --git a/plugins/InspectionGadgets/src/inspectionDescriptions/DanglingJavadoc.html b/plugins/InspectionGadgets/src/inspectionDescriptions/DanglingJavadoc.html new file mode 100644 index 000000000000..deee2ae162f4 --- /dev/null +++ b/plugins/InspectionGadgets/src/inspectionDescriptions/DanglingJavadoc.html @@ -0,0 +1,10 @@ + + +Reports dangling Javadoc comments. +Javadoc comment are dangling if they don't belong to any class, method or field. +For example a Javadoc comment in between method declarations that have their own javadoc comments. + +

+New in 14.1 + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/javadoc/dangling_javadoc/DanglingJavadoc.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/javadoc/dangling_javadoc/DanglingJavadoc.java new file mode 100644 index 000000000000..6655d1010243 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/javadoc/dangling_javadoc/DanglingJavadoc.java @@ -0,0 +1,6 @@ +class DanglingJavadoc { + + /** + * yada yada + */ +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java new file mode 100644 index 000000000000..0e599afb998d --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/javadoc/DanglingJavadocInspectionTest.java @@ -0,0 +1,41 @@ +/* + * Copyright 2000-2015 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * (c) 2015 Silent Forest AB + * created: 23 January 2015 + */ +package com.siyeh.ig.javadoc; + +import com.intellij.codeInspection.InspectionProfileEntry; +import com.siyeh.ig.LightInspectionTestCase; +import org.jetbrains.annotations.Nullable; + +/** + * @author Bas Leijdekkers + */ +public class DanglingJavadocInspectionTest extends LightInspectionTestCase { + + public void testDanglingJavadoc() { + doTest(); + } + + @Nullable + @Override + protected InspectionProfileEntry getInspection() { + return new DanglingJavadocInspection(); + } +} From e67f6bdc2443e68dfc880adb8fde2c54e1179de2 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 20:15:07 +0100 Subject: [PATCH 14/19] JBUI: more utility methods for work with insets --- platform/util/src/com/intellij/util/ui/JBUI.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index 5c8a2f41b2a2..6ccd8bb3cbcb 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -55,6 +55,22 @@ public class JBUI { return new JBInsets(0, 0, 0, 0); } + public static JBInsets insetsTop(int t) { + return insets(t, 0, 0, 0); + } + + public static JBInsets insetsLeft(int l) { + return insets(0, l, 0, 0); + } + + public static JBInsets insetsBottom(int b) { + return insets(0, 0, b, 0); + } + + public static JBInsets insetsRight(int r) { + return insets(0, 0, 0, r); + } + public static EmptyIcon emptyIcon(int i) { return (EmptyIcon)EmptyIcon.create(scale(i)); } From a793d9c5c8ffdd8a650d7b683a2cbbaefc2301db Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 20:15:50 +0100 Subject: [PATCH 15/19] HiDPI: fix dividers in settings --- .../openapi/options/newEditor/SettingsEditor.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java index aad8d3629d91..e72fa2560b6f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -30,17 +30,20 @@ import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.OnePixelSplitter; -import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.panels.VerticalLayout; import com.intellij.ui.treeStructure.SimpleNode; +import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; -import java.awt.event.*; -import java.util.*; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.KeyEvent; +import java.util.LinkedHashMap; +import java.util.Map; /** * @author Sergey.Malenkov @@ -221,7 +224,7 @@ final class SettingsEditor extends AbstractEditor implements DataProvider { JPanel panel = new JPanel(new BorderLayout()); panel.add(BorderLayout.WEST, mySearchPanel); panel.add(BorderLayout.CENTER, myBanner); - panel.setBorder(new CustomLineBorder(OnePixelDivider.BACKGROUND, 0, 0, 1, 0)); + panel.setBorder(JBUI.Borders.customLine(OnePixelDivider.BACKGROUND, 0, 0, 1, 0)); add(BorderLayout.NORTH, panel); } mySplitter = new OnePixelSplitter(false, myProperties.getFloat(SPLITTER_PROPORTION, .2f)); From 5e8f7f9e770d395726efcffbec542027732c7ede Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 20:16:16 +0100 Subject: [PATCH 16/19] use JBUI to fix hidpi --- .../intellij/openapi/ui/DialogWrapper.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index 2fd75d600334..9ad0896b5ad8 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -38,10 +38,8 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeGlassPaneUtil; import com.intellij.openapi.wm.WindowManager; import com.intellij.ui.ColorUtil; -import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.JBColor; import com.intellij.ui.UIBundle; -import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.JBOptionButton; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.Alarm; @@ -49,6 +47,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.TimeoutUtil; import com.intellij.util.ui.AwtVisitor; import com.intellij.util.ui.DialogUtil; +import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import com.intellij.xml.util.XmlStringUtil; import org.intellij.lang.annotations.MagicConstant; @@ -148,7 +147,7 @@ public abstract class DialogWrapper { */ private int myButtonAlignment = SwingConstants.RIGHT; private boolean myCrossClosesWindow = true; - private Insets myButtonMargins = new Insets(2, 16, 2, 16); + private Insets myButtonMargins = JBUI.insets(2, 16); protected Action myOKAction; protected Action myCancelAction; @@ -442,7 +441,7 @@ public abstract class DialogWrapper { @Nullable protected Border createContentPaneBorder() { if (getStyle() == DialogStyle.COMPACT) { - return new EmptyBorder(0,0,0,0); + return JBUI.Borders.empty(); } return ourDefaultBorder; } @@ -483,7 +482,7 @@ public abstract class DialogWrapper { JPanel panel = new JPanel(new BorderLayout()); final JPanel lrButtonsPanel = new JPanel(new GridBagLayout()); - final Insets insets = SystemInfo.isMacOSLeopard ? new Insets(0, 0, 0, 0) : new Insets(8, 0, 0, 0); + final Insets insets = SystemInfo.isMacOSLeopard ? JBUI.emptyInsets() : JBUI.insetsTop(8); if (actions.length > 0 || leftSideActions.length > 0) { int gridX = 0; @@ -563,10 +562,10 @@ public abstract class DialogWrapper { } if (getStyle() == DialogStyle.COMPACT) { - CustomLineBorder line = new CustomLineBorder(OnePixelDivider.BACKGROUND, 1, 0, 0, 0); - panel.setBorder(new CompoundBorder(line, BorderFactory.createEmptyBorder(8, 12, 8, 12))); + Border line = JBUI.Borders.customLine(OnePixelDivider.BACKGROUND, 1, 0, 0, 0); + panel.setBorder(new CompoundBorder(line, JBUI.Borders.empty(8, 12))); } else { - panel.setBorder(IdeBorderFactory.createEmptyBorder(new Insets(8, 0, 0, 0))); + panel.setBorder(JBUI.Borders.emptyTop(8)); } return panel; @@ -606,7 +605,7 @@ public abstract class DialogWrapper { panel.add(wrapper, BorderLayout.WEST); panel.add(southPanel, BorderLayout.EAST); - checkBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 20)); + checkBox.setBorder(JBUI.Borders.emptyRight(20)); return panel; } @@ -1954,7 +1953,7 @@ public abstract class DialogWrapper { setLayout(new BorderLayout()); JBScrollPane pane = new JBScrollPane(myLabel, ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - pane.setBorder(IdeBorderFactory.createEmptyBorder()); + pane.setBorder(JBUI.Borders.empty()); pane.setBackground(null); pane.getViewport().setBackground(null); pane.setOpaque(false); @@ -1975,7 +1974,7 @@ public abstract class DialogWrapper { myLabel .setText(XmlStringUtil.wrapInHtml("" + text + "")); myLabel.setIcon(AllIcons.Actions.Lightning); - myLabel.setBorder(new EmptyBorder(4, 10, 0, 2)); + myLabel.setBorder(JBUI.Borders.empty(4, 10, 0, 2)); setVisible(true); } From 90be9689588012f64c889c2b74c52e0854e2b7fc Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 23 Jan 2015 20:38:35 +0100 Subject: [PATCH 17/19] action buttons top offset is too big on HiDPI devices --- .../platform-api/src/com/intellij/openapi/ui/DialogWrapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index 9ad0896b5ad8..358816782299 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -482,7 +482,7 @@ public abstract class DialogWrapper { JPanel panel = new JPanel(new BorderLayout()); final JPanel lrButtonsPanel = new JPanel(new GridBagLayout()); - final Insets insets = SystemInfo.isMacOSLeopard ? JBUI.emptyInsets() : JBUI.insetsTop(8); + final Insets insets = SystemInfo.isMacOSLeopard ? JBUI.emptyInsets() : new Insets(8, 0, 0, 0); //don't wrap to JBInsets if (actions.length > 0 || leftSideActions.length > 0) { int gridX = 0; From 81292d78bed935090edc0209694968533f82acd6 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sat, 24 Jan 2015 02:31:21 +0100 Subject: [PATCH 18/19] rollback to 0.5 border for HiDPI --- .../src/com/intellij/openapi/ui/DialogWrapper.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index 358816782299..66d1c6c8d6a9 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -40,6 +40,7 @@ import com.intellij.openapi.wm.WindowManager; import com.intellij.ui.ColorUtil; import com.intellij.ui.JBColor; import com.intellij.ui.UIBundle; +import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.JBOptionButton; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.Alarm; @@ -562,7 +563,7 @@ public abstract class DialogWrapper { } if (getStyle() == DialogStyle.COMPACT) { - Border line = JBUI.Borders.customLine(OnePixelDivider.BACKGROUND, 1, 0, 0, 0); + Border line = new CustomLineBorder(OnePixelDivider.BACKGROUND, 1, 0, 0, 0); panel.setBorder(new CompoundBorder(line, JBUI.Borders.empty(8, 12))); } else { panel.setBorder(JBUI.Borders.emptyTop(8)); From 39756816656fbcec842bb02889420052d957c07b Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sat, 24 Jan 2015 02:46:43 +0100 Subject: [PATCH 19/19] ability to remove useless Help button from dialog --- .../platform-api/src/com/intellij/openapi/ui/DialogWrapper.java | 2 ++ platform/util/resources/misc/registry.properties | 2 ++ 2 files changed, 4 insertions(+) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java index 66d1c6c8d6a9..35f0b92cdb8b 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/DialogWrapper.java @@ -465,6 +465,8 @@ public abstract class DialogWrapper { && Arrays.asList(actions).contains(getHelpAction())) { hasHelpToMoveToLeftSide = true; actions = ArrayUtil.remove(actions, getHelpAction()); + } else if (Registry.is("ide.remove.help.button.from.dialogs")) { + actions = ArrayUtil.remove(actions, getHelpAction()); } if (SystemInfo.isMac) { diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 2aabfad8c11d..6607fe134121 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -518,3 +518,5 @@ lcd.contrast.value.description=Set LCD text contrast value from 100 to 250 removable.welcome.screen.projects=true removable.welcomesreen.projects.description=Allows removing recent projects from welcome screen with mouse ide.find.show.preview=true +ide.remove.help.button.from.dialogs=false +ide.remove.help.button.from.dialogs.description=Removes help button from dialogs