package ch.uzh.ifi.attempto.acewiki.gf;
import ch.uzh.ifi.attempto.acewiki.Wiki;
import ch.uzh.ifi.attempto.acewiki.core.ModuleElement;
import ch.uzh.ifi.attempto.acewiki.gui.WikiLink;
import ch.uzh.ifi.attempto.echocomp.Label;
import ch.uzh.ifi.attempto.echocomp.VSpace;
import nextapp.echo.app.Border;
import nextapp.echo.app.Color;
import nextapp.echo.app.Column;
import nextapp.echo.app.Component;
import nextapp.echo.app.Extent;
import nextapp.echo.app.Font;
import nextapp.echo.app.Grid;
import nextapp.echo.app.Insets;
import nextapp.echo.app.Table;
import nextapp.echo.app.table.TableCellRenderer;
public class GfLexiconEditor extends Column {
private static final long serialVersionUID = 886670658151721528L;
private static final Font FONT_CELL = new Font(Font.MONOSPACE, Font.BOLD, new Extent(12));
private final Wiki mWiki;
private final Grid mGridModules;
private final Table mTable;
private final Label mLabel;
public GfLexiconEditor(Wiki wiki, GfLexiconEditorModel model) {
mWiki = wiki;
mGridModules = new Grid(5);
mGridModules.setInsets(new Insets(0, 2, 8, 2));
mLabel = new Label(makeLabel(model));
mTable = new Table(model);
mTable.setHeaderVisible(true);
mTable.setDefaultHeaderRenderer(new TableCellRenderer() {
private static final long serialVersionUID = 2675263246653547541L;
@Override
public Component getTableCellRendererComponent(Table t, Object v, int c, int r) {
if (v == null) {
return null;
}
Label l = new Label(v.toString());
l.setFont(FONT_CELL);
return l;
}
});
mTable.setFont(new Font(Font.MONOSPACE, Font.PLAIN, new Extent(11)));
mTable.setInsets(new Insets(6, 6, 6, 6));
mTable.setBorder(new Border(1, Color.LIGHTGRAY, Border.SIDE_BOTTOM));
mTable.setDefaultRenderer(Object.class, new GfLexiconEditorCellRenderer(mWiki));
add(mGridModules);
add(new VSpace(10));
add(mLabel);
add(new VSpace(10));
add(mTable);
}
public void setModel(GfLexiconEditorModel model) {
mTable.setModel(model);
mLabel.setText(makeLabel(model));
mGridModules.removeAll();
for (ModuleElement oe : model.getModules()) {
mGridModules.add(new WikiLink(oe, oe.getWord(), mWiki, false));
}
}
public GfLexiconEditorModel getModel() {
return (GfLexiconEditorModel) mTable.getModel();
}
private String makeLabel(GfLexiconEditorModel model) {
// TODO: localize
return model.getRowCount() + " functions in " + (model.getColumnCount() - 1) + " modules";
}
}