/*
 * Copyright 2000-2009 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.openapi.roots.ui.configuration;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.pom.java.LanguageLevel;

import javax.swing.*;
import java.awt.*;

/**
 * @author ven
 */
public class LanguageLevelCombo extends ComboBox {
  public static final String USE_PROJECT_LANGUAGE_LEVEL = ProjectBundle.message("project.language.level.combo.item");

  public LanguageLevelCombo() {
    for (LanguageLevel level : LanguageLevel.values()) {
      addItem(level);
    }
    setRenderer(new MyDefaultListCellRenderer());
  }

  public void reset(Project project){
    setSelectedItem(LanguageLevelProjectExtension.getInstance(project).getLanguageLevel());
  }

  public void setSelectedItem(Object anObject) {
    if (anObject == null){
      anObject = USE_PROJECT_LANGUAGE_LEVEL;
    }
    super.setSelectedItem(anObject);
  }

  private static class MyDefaultListCellRenderer extends DefaultListCellRenderer {
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
      if (value instanceof LanguageLevel) {
        setText(((LanguageLevel)value).getPresentableText());
      }
      else if (value instanceof String) {
        setText((String)value);
      }
      return this;
    }
  }
}

@@ -648,16 +648,68 @@
 ation;%0A%0A
+import com.intellij.ide.ui.ListCellRendererWrapper;%0A
 import c
@@ -972,27 +972,8 @@
 g.*;
-%0Aimport java.awt.*;
 %0A%0A/*
@@ -1304,35 +1304,419 @@
 new 
-MyDefaultListCellRenderer()
+ListCellRendererWrapper(getRenderer()) %7B%0A      @Override%0A      public void customize(final JList list, final Object value, final int index, final boolean selected, final boolean hasFocus) %7B%0A        if (value instanceof LanguageLevel) %7B%0A          setText(((LanguageLevel)value).getPresentableText());%0A        %7D%0A        else if (value instanceof String) %7B%0A          setText((String)value);%0A        %7D%0A      %7D%0A    %7D
 );%0A 
@@ -1755,16 +1755,17 @@
 project)
+ 
 %7B%0A    se
@@ -1929,16 +1929,17 @@
 == null)
+ 
 %7B%0A      
@@ -2027,535 +2027,7 @@
 %0A  %7D
-%0A%0A  private static class MyDefaultListCellRenderer extends DefaultListCellRenderer %7B%0A    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) %7B%0A      super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);%0A      if (value instanceof LanguageLevel) %7B%0A        setText(((LanguageLevel)value).getPresentableText());%0A      %7D%0A      else if (value instanceof String) %7B%0A        setText((String)value);%0A      %7D%0A      return this;%0A    %7D%0A  %7D
 %0A%7D%0A

Fix language level combo for GTK+ L&F