package krasa.formatter.action;
import javax.swing.*;
import krasa.formatter.settings.ProjectSettingsComponent;
import krasa.formatter.settings.Settings;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.IconLoader;
/**
* @author Vojtech Krasa
*/
public class ChangeFormatterToolbarAction extends AnAction {
private static final Logger LOG = Logger.getInstance(ChangeFormatterToolbarAction.class.getName());
public static final Icon ICON = IconLoader.getIcon("/krasa/formatter/eclipse.gif");
public static final Icon ICON1 = IconLoader.getIcon("/krasa/formatter/IDEA.gif");
@Override
public void actionPerformed(AnActionEvent e) {
Settings settings;
Project project = getProject(e);
if (project != null) {
ProjectSettingsComponent instance = ProjectSettingsComponent.getInstance(project);
settings = instance.getSettings();
settings.setFormatter(Settings.Formatter.DEFAULT == settings.getFormatter() ? Settings.Formatter.ECLIPSE
: Settings.Formatter.DEFAULT);
instance.install(settings);
updateIcon(settings, e.getPresentation());
}
}
private Settings getSettings(AnActionEvent e) {
Settings settings = null;
Project project = getProject(e);
if (project != null) {
ProjectSettingsComponent instance = ProjectSettingsComponent.getInstance(project);
settings = instance.getSettings();
}
return settings;
}
private Project getProject(AnActionEvent e) {
try {
return e.getProject();
} catch (Throwable e1) {
// old version
}
return e.getProject();
}
private void updateIcon(Settings state, Presentation presentation) {
if (state.getFormatter() == Settings.Formatter.DEFAULT) {
presentation.setIcon(ICON1);
} else {
presentation.setIcon(ICON);
}
}
@Override
public void update(AnActionEvent e) {
super.update(e);
try {
Presentation presentation = e.getPresentation();
final Settings state = getSettings(e);
if (state != null) {
updateIcon(state, presentation);
}
} catch (Throwable e1) {
e.getPresentation().setEnabled(false);
}
}
}