blob: cad3fc88ca221c3c88b50b9eb49ede2806792467 [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.application.options.codeStyle.arrangement.component;
import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition;
import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition;
import com.intellij.psi.codeStyle.arrangement.std.ArrangementSettingsToken;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ui.components.JBList;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
/**
* @author Denis Zhdanov
* @since 3/11/13 11:56 AM
*/
public class ArrangementComboBoxUiComponent extends AbstractArrangementUiComponent {
@NotNull private final JComboBox myComboBox;
@SuppressWarnings("unchecked")
public ArrangementComboBoxUiComponent(@NotNull List<ArrangementSettingsToken> tokens) {
super(tokens);
ArrangementSettingsToken[] tokensArray = tokens.toArray(new ArrangementSettingsToken[tokens.size()]);
Arrays.sort(tokensArray, new Comparator<ArrangementSettingsToken>() {
@Override
public int compare(ArrangementSettingsToken t1, ArrangementSettingsToken t2) {
return t1.getRepresentationValue().compareTo(t2.getRepresentationValue());
}
});
myComboBox = new JComboBox(tokensArray);
myComboBox.setRenderer(new ListCellRendererWrapper() {
@Override
public void customize(JList list, Object value, int index, boolean selected, boolean hasFocus) {
setText(((ArrangementSettingsToken)value).getRepresentationValue());
}
});
myComboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
fireStateChanged();
}
}
});
int minWidth = 0;
ListCellRenderer renderer = myComboBox.getRenderer();
JBList dummyList = new JBList();
for (int i = 0, max = myComboBox.getItemCount(); i < max; i++) {
Component rendererComponent = renderer.getListCellRendererComponent(dummyList, myComboBox.getItemAt(i), i, false, true);
minWidth = Math.max(minWidth, rendererComponent.getPreferredSize().width);
}
myComboBox.setPreferredSize(new Dimension(minWidth * 5 / 3, myComboBox.getPreferredSize().height));
}
@NotNull
@Override
public ArrangementSettingsToken getToken() {
return (ArrangementSettingsToken)myComboBox.getSelectedItem();
}
@Override
public void chooseToken(@NotNull ArrangementSettingsToken data) throws IllegalArgumentException {
myComboBox.setSelectedItem(data);
}
@NotNull
@Override
public ArrangementMatchCondition getMatchCondition() {
ArrangementSettingsToken token = getToken();
return new ArrangementAtomMatchCondition(token, token);
}
@Override
protected JComponent doGetUiComponent() {
return myComboBox;
}
@Override
public boolean isSelected() {
return true;
}
@Override
public void setSelected(boolean selected) {
}
@Override
public boolean isEnabled() {
return myComboBox.isEnabled();
}
@Override
public void setEnabled(boolean enabled) {
myComboBox.setEnabled(enabled);
}
@Override
protected void doReset() {
}
@Override
public int getBaselineToUse(int width, int height) {
return -1;
}
}