/*
* Copyright 2003-2014 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 jetbrains.mps.ide.compiler;
import jetbrains.mps.compiler.JavaCompilerOptionsComponent.JavaVersion;
import jetbrains.mps.ide.compiler.CompilerSettingsComponent.CompilerState;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import java.util.List;
public class CompilerSettingsPreferencePage {
private final List<JavaVersionPresentationItem> myTargetVersionItems = new ArrayList<JavaVersionPresentationItem>();
private static final JavaVersionPresentationItem DEFAULT_VERSION_ITEM = new JavaVersionPresentationItem(null, "JDK Default");
private JPanel myMainPanel;
private JComboBox myTargetJavaVersionComboBox;
private JavaVersionPresentationItem myInitialTargetJavaVersion;
{
for (JavaVersion version : JavaVersion.values()) {
myTargetVersionItems.add(new JavaVersionPresentationItem(version, version.getCompilerVersion()));
}
myTargetVersionItems.add(DEFAULT_VERSION_ITEM);
}
public CompilerSettingsPreferencePage(CompilerState options) {
JavaVersion targetJavaVersion = JavaVersion.parse(options.getTargetVersion());
if (targetJavaVersion == null) {
myInitialTargetJavaVersion = DEFAULT_VERSION_ITEM;
} else {
myInitialTargetJavaVersion = new JavaVersionPresentationItem(targetJavaVersion, targetJavaVersion.getCompilerVersion());
}
}
public JComponent getMainPanel() {
if (myMainPanel == null) {
createMainPanel();
}
return myMainPanel;
}
private void createMainPanel() {
myMainPanel = new JPanel();
myMainPanel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.weighty = 1;
c.weightx = 1;
c.anchor = GridBagConstraints.NORTHWEST;
JPanel panel = createCompilerOptionsPanel();
myMainPanel.add(panel, c);
}
private JPanel createCompilerOptionsPanel() {
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST;
c.weighty = 1;
c.weightx = 1;
c.insets.top = 4;
c.insets.left = 5;
myTargetJavaVersionComboBox = new JComboBox(new DefaultComboBoxModel(myTargetVersionItems.toArray()));
myTargetJavaVersionComboBox.setSelectedItem(myInitialTargetJavaVersion);
panel.add(new JLabel("Project bytecode version"), c);
c.gridx = 1;
c.insets.top = 0;
panel.add(myTargetJavaVersionComboBox, c);
return panel;
}
JavaVersion getSelectedTargetJavaVersion() {
JavaVersionPresentationItem selectedItem = (JavaVersionPresentationItem) myTargetJavaVersionComboBox.getSelectedItem();
return selectedItem.getJavaVersion();
}
boolean isModified() {
return !(myInitialTargetJavaVersion.equals(myTargetJavaVersionComboBox.getSelectedItem()));
}
void commit() {
myInitialTargetJavaVersion = ((JavaVersionPresentationItem) myTargetJavaVersionComboBox.getSelectedItem());
}
void reset() {
myTargetJavaVersionComboBox.setSelectedItem(myInitialTargetJavaVersion);
}
private static class JavaVersionPresentationItem {
private JavaVersion myJavaVersion;
private final String myDescription;
JavaVersionPresentationItem(JavaVersion javaVersion, String description) {
myJavaVersion = javaVersion;
myDescription = description;
}
public JavaVersion getJavaVersion() {
return myJavaVersion;
}
public String getDescription() {
return myDescription;
}
@Override
public String toString() {
return myDescription;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof JavaVersionPresentationItem)) {
return false;
}
if (this == obj) {
return true;
}
if (myJavaVersion == null) {
return ((JavaVersionPresentationItem) obj).myJavaVersion == null;
}
return myJavaVersion.equals(((JavaVersionPresentationItem) obj).myJavaVersion);
}
@Override
public int hashCode() {
return 17 + 37 * (myJavaVersion == null ? 0 : myJavaVersion.hashCode());
}
}
}