blob: 5c5c742caa7561b0c60c088b3199fb2fb6dfc32a [file] [log] [blame]
/*
* 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;
}
}