package org.elixir_lang.icons;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.util.IconLoader;
import com.intellij.ui.LayeredIcon;
import com.intellij.ui.RowIcon;
import com.intellij.util.PlatformIcons;
import org.elixir_lang.structure_view.element.Timed;
import org.elixir_lang.structure_view.element.Visible;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
// RowIcon on travis-ci does not have RowIcon(Icon...) constructor, so fake it
class RowIconFactory {
public static RowIcon create(Icon... icons) {
RowIcon rowIcon = new RowIcon(icons.length);
for (int i = 0; i < icons.length; i++) {
rowIcon.setIcon(icons[i], i);
}
return rowIcon;
}
}
/**
* Created by zyuyou on 15/7/6.
*/
public interface ElixirIcons {
class Time {
public static final Icon COMPILE = AllIcons.Actions.Compile;
public static final Icon RUN = AllIcons.General.Run;
@NotNull
public static Icon from(@NotNull Timed.Time time) {
Icon icon = null;
switch (time) {
case COMPILE:
icon = COMPILE;
break;
case RUN:
icon = RUN;
break;
}
assert icon != null;
return icon;
}
}
class Visibility {
public static final Icon PRIVATE = PlatformIcons.PRIVATE_ICON;
public static final Icon PUBLIC = PlatformIcons.PUBLIC_ICON;
@NotNull
public static Icon from(@Nullable Visible.Visibility visibility) {
Icon icon = null;
if (visibility != null) {
switch (visibility) {
case PRIVATE:
icon = PRIVATE;
break;
case PUBLIC:
icon = PUBLIC;
break;
}
assert icon != null;
} else {
icon = ElixirIcons.UNKNOWN;
}
return icon;
}
}
Icon CALLBACK = AllIcons.Gutter.ImplementedMethod;
Icon CALL_DEFINITION = PlatformIcons.FUNCTION_ICON;
Icon CALL_DEFINITION_CLAUSE = RowIconFactory.create(CALL_DEFINITION, PlatformIcons.PACKAGE_LOCAL_ICON);
Icon DELEGATION = RowIconFactory.create(AllIcons.General.Run, PlatformIcons.PACKAGE_LOCAL_ICON);
Icon EXCEPTION = PlatformIcons.EXCEPTION_CLASS_ICON;
Icon FIELD = AllIcons.Nodes.Field;
Icon FILE = IconLoader.getIcon("/icons/elixir-16.png");
Icon IMPLEMENTATION = RowIconFactory.create(PlatformIcons.ANONYMOUS_CLASS_ICON, AllIcons.General.OverridingMethod);
Icon MIX_MODULE_CONFLICT = AllIcons.Actions.Cancel;
Icon MODULE = PlatformIcons.PACKAGE_ICON;
Icon OVERRIDABLE = AllIcons.General.OverridenMethod;
Icon OVERRIDE = AllIcons.General.OverridingMethod;
Icon PARAMETER = AllIcons.Nodes.Parameter;
Icon PROTOCOL = RowIconFactory.create(PlatformIcons.ANONYMOUS_CLASS_ICON, AllIcons.General.OverridenMethod);
Icon STRUCTURE = AllIcons.Toolwindows.ToolWindowStructure;
// same icon as intellij-erlang to match their look and feel
Icon TYPE = IconLoader.getIcon("/icons/type.png");
// MUST be after TYPE
Icon SPECIFICATION = RowIconFactory.create(CALL_DEFINITION, TYPE);
// it is the unknown that is only a question mark
Icon UNKNOWN = AllIcons.RunConfigurations.Unknown;
Icon VARIABLE = AllIcons.Nodes.Variable;
Icon ELIXIR_APPLICATION = IconLoader.getIcon("/icons/elixir-Application-16.png");
Icon ELIXIR_SUPERVISOR = IconLoader.getIcon("/icons/elixir-Supervisor-16.png");
Icon ELIXIR_GEN_EVENT = IconLoader.getIcon("/icons/elixir-GenEvent-16.png");
Icon ELIXIR_GEN_SERVER = IconLoader.getIcon("/icons/elixir-GenServer-16.png");
Icon ELIXIR_MARK = IconLoader.getIcon("/icons/elixir-mark.png");
Icon ELIXIR_MODULE_NODE = new LayeredIcon(PlatformIcons.FOLDER_ICON, ELIXIR_MARK);
Icon MIX = IconLoader.getIcon("/icons/mix-16.png");
Icon MIX_EX_UNIT = new LayeredIcon(MIX, AllIcons.Nodes.JunitTestMark);
}