Merge remote-tracking branch 'origin/master'

This commit is contained in:
Dmitry Trofimov
2013-11-20 18:08:11 +01:00
3 changed files with 117 additions and 1 deletions
@@ -0,0 +1,105 @@
/*
* Copyright 2000-2013 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.intellij.internal;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.ui.components.JBScrollPane;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
/**
* @author Konstantin Bulenkov
*/
@SuppressWarnings("UndesirableClassUsage")
public class ShowNonRetinaImagesActions extends DumbAwareAction {
@Override
public void actionPerformed(AnActionEvent e) {
final Project project = e.getProject();
if (project == null) return;
class ImageInfo {
boolean retina;
boolean normal;
boolean dark;
boolean retina_dark;
}
HashMap<String, ImageInfo> info = new HashMap<String, ImageInfo>();
final Collection<VirtualFile> images = FilenameIndex.getAllFilesByExt(project, "png", GlobalSearchScope.projectScope(project));
for (VirtualFile image : images) {
final String path = image.getPath();
final String key = toKey(path);
ImageInfo imageInfo = info.get(key);
if (imageInfo == null) {
imageInfo = new ImageInfo();
info.put(key, imageInfo);
}
if (path.endsWith("@2x_dark.png")) {
imageInfo.retina_dark = true;
} else if (path.endsWith("_dark.png")) {
imageInfo.dark = true;
} else if (path.endsWith("@2x.png")) {
imageInfo.retina = true;
} else {
imageInfo.normal = true;
}
}
final ArrayList<String> retinaMissed = new ArrayList<String>();
for (String key : info.keySet()) {
if (!info.get(key).retina && info.get(key).normal) {
retinaMissed.add(key);
}
}
Collections.sort(retinaMissed, String.CASE_INSENSITIVE_ORDER);
new DialogWrapper(project) {
{
init();
}
@Nullable
@Override
protected JComponent createCenterPanel() {
return new JBScrollPane(new JTextArea(StringUtil.join(retinaMissed, "\n")));
}
}.show();
}
private static String toKey(String path) {
if (path.endsWith("@2x_dark.png")) {
return path.substring(0, path.lastIndexOf("@2x_dark.png")) + ".png";
}
if (path.endsWith("_dark.png")) {
return path.substring(0, path.lastIndexOf("_dark.png")) + ".png";
}
if (path.endsWith("@2x.png")) {
return path.substring(0, path.lastIndexOf("@2x.png")) + ".png";
}
return path;
}
}
@@ -205,6 +205,14 @@ public class DarculaComboBoxUI extends BasicComboBoxUI implements Border {
paintCurrentValue(g, r, hasFocus);
}
@Override
protected Rectangle rectangleForCurrentValue() {
final Rectangle r = super.rectangleForCurrentValue();
r.x-=2;
r.y-=1;
return r;
}
public void paintCurrentValue(Graphics g, Rectangle bounds, boolean hasFocus) {
ListCellRenderer renderer = comboBox.getRenderer();
Component c;
@@ -247,9 +255,11 @@ public class DarculaComboBoxUI extends BasicComboBoxUI implements Border {
r.height -= myPadding.top + myPadding.bottom;
}
currentValuePane.paintComponent(g, c, comboBox, r.x-2, r.y, r.width, r.height, shouldValidate);
currentValuePane.paintComponent(g, c, comboBox, r.x, r.y, r.width, r.height, shouldValidate);
}
@Override
protected void installKeyboardActions() {
super.installKeyboardActions();
@@ -612,6 +612,7 @@
</group>
<group id="TopAnomalies" internal="true" class="com.intellij.internal.anomalies.TopAnomaliesAction" text="Top Anomalies" popup="true"/>
<action id="ImageDuplicates" internal="true" class="com.intellij.internal.ShowImageDuplicatesAction" text="Find Image Duplicates"/>
<action id="ShowNonRetinaImages" internal="true" class="com.intellij.internal.ShowNonRetinaImagesActions" text="Show Non Retina Images"/>
<separator/>
<reference ref="MaintenanceGroup"/>