package jav.gui.token.edit;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.util.LinkedHashSet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JList;
/**
*Copyright (c) 2012, IMPACT working group at the Centrum für Informations- und Sprachverarbeitung, University of Munich.
*All rights reserved.
*Redistribution and use in source and binary forms, with or without
*modification, are permitted provided that the following conditions are met:
*Redistributions of source code must retain the above copyright
*notice, this list of conditions and the following disclaimer.
*Redistributions in binary form must reproduce the above copyright
*notice, this list of conditions and the following disclaimer in the
*documentation and/or other materials provided with the distribution.
*THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
*IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
*TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
*PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
*HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
*LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
*THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
*(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
*OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This file is part of the ocr-postcorrection tool developed
* by the IMPACT working group at the Centrum für Informations- und Sprachverarbeitung, University of Munich.
* For further information and contacts visit http://ocr.cis.uni-muenchen.de/
*
* @author thorsten (thorsten.vobl@googlemail.com)
*/
public class MyEditCustomComboBox extends JComboBox {
private boolean layingOut = false;
private String type;
private int widestLengh = 0;
private boolean wide = false;
public MyEditCustomComboBox(LinkedHashSet<ComboBoxEntry> entries, Font f, Dimension d, final long numofcands, JButton b) {
super(entries.toArray());
// Object[] objectentries = ;
// for (Object o : objectentries) {
// this.addItem(o);
// }
MyComboBoxUI mcui = new MyComboBoxUI();
// LargerComboBoxUI lcui = new LargerComboBoxUI();
MyEditCustomComboBoxEditor ed = new MyEditCustomComboBoxEditor(f, d, b);
// this.setSize(new Dimension(d.width+b.getSize().width,d.height));
this.setPreferredSize(new Dimension(d.width+b.getSize().width+80,d.height));
this.setFont(f);
this.setEditable(true);
this.setUI(mcui);
this.setEditor(ed);
this.setRenderer(new ComboSeparatorsRenderer(this.getRenderer()) {
@Override
protected boolean addSeparatorAfter(JList list, Object value, int index) {
return index == 0 || index == numofcands;
}
});
}
// @Override
// public void processKeyEvent(KeyEvent e) {
// System.out.println(e.getKeyCode());
// if( e.getKeyCode() != KeyEvent.VK_TAB) {
// super.processKeyEvent(e);
// }
// }
public boolean isWide() {
return wide;
}
//Setting the JComboBox wide
public void setWide(boolean wide) {
this.wide = wide;
widestLengh = getWidestItemWidth();
}
@Override
public Dimension getSize() {
Dimension dim = super.getSize();
if (!layingOut && isWide()) {
dim.width = Math.max(widestLengh, dim.width);
}
return dim;
}
public int getWidestItemWidth() {
int numOfItems = this.getItemCount();
Font font = this.getFont();
FontMetrics metrics = this.getFontMetrics(font);
int widest = 0;
for (int i = 0; i < numOfItems; i++) {
Object item = this.getItemAt(i);
int lineWidth = metrics.stringWidth(item.toString());
widest = Math.max(widest, lineWidth);
}
return widest + 5;
}
@Override
public void doLayout() {
try {
layingOut = true;
super.doLayout();
} finally {
layingOut = false;
}
}
public String getType() {
return type;
}
public void setType(String t) {
type = t;
}
}