Java tutorial
/* * Copyright 2013 Corpuslinguistic working group Humboldt University Berlin. * * 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 annis.gui.components; import annis.gui.AnnisUI; import annis.gui.frequency.FrequencyResultPanel; import annis.libgui.Helper; import annis.libgui.InstanceConfig; import annis.service.objects.FrequencyTable; import com.vaadin.data.Property; import com.vaadin.ui.OptionGroup; import com.vaadin.ui.Panel; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import org.slf4j.LoggerFactory; /** * * @author Thomas Krause <krauseto@hu-berlin.de> */ public class FrequencyChart extends VerticalLayout { public static final org.slf4j.Logger log = LoggerFactory.getLogger(FrequencyChart.class); public static final int MAX_ITEMS = 25; private FrequencyWhiteboard whiteboard; private final OptionGroup options; private FrequencyTable lastTable; public FrequencyChart(FrequencyResultPanel freqPanel) { setSizeFull(); options = new OptionGroup(); options.setSizeUndefined(); options.addItem(FrequencyWhiteboard.Scale.LINEAR); options.addItem(FrequencyWhiteboard.Scale.LOG10); options.setItemCaption(FrequencyWhiteboard.Scale.LINEAR, "linear scale"); options.setItemCaption(FrequencyWhiteboard.Scale.LOG10, "log<sub>10</sub> scale"); options.setHtmlContentAllowed(true); options.setImmediate(true); options.setValue(FrequencyWhiteboard.Scale.LINEAR); //options.addStyleName("horizontal"); options.addValueChangeListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent event) { // redraw graph with right scale if (lastTable != null) { setFrequencyData(lastTable); } } }); addComponent(options); InnerPanel panel = new InnerPanel(freqPanel); addComponent(panel); setExpandRatio(panel, 1.0f); } public void setFrequencyData(FrequencyTable table) { String font = "sans-serif"; float fontSize = 7.0f; // in pixel UI ui = UI.getCurrent(); if (ui instanceof AnnisUI) { InstanceConfig cfg = ((AnnisUI) ui).getInstanceConfig(); if (cfg != null && cfg.getFont() != null) { if (cfg.getFrequencyFont() != null) { font = cfg.getFrequencyFont().getName(); // only use the font size if given in pixel (since flotr2 can only use this kind of information) String size = cfg.getFrequencyFont().getSize(); if (size != null && size.trim().endsWith("px")) { fontSize = Float.parseFloat(size.replace("px", "").trim()); // the label sizes will be multiplied by 1.3 in the Flotr2 library, thus // divide here to get the correct size fontSize = fontSize / 1.3f; } else { log.warn( "No valid font size (must in in \"px\" unit) given for frequency font configuration. " + "The value is {}", fontSize); } } else if (cfg.getFont() != null) { font = cfg.getFont().getName(); // only use the font size if given in pixel (since flotr2 can only use this kind of information) String size = cfg.getFont().getSize(); if (size != null && size.trim().endsWith("px")) { fontSize = Float.parseFloat(size.replace("px", "").trim()); // the label sizes will be multiplied by 1.3 in the Flotr2 library, thus // divide here to get the correct size fontSize = fontSize / 1.3f; } } } } lastTable = table; whiteboard.setFrequencyData(table, (FrequencyWhiteboard.Scale) options.getValue(), font, fontSize); } /** * This panel allows us to scroll the chart. */ private class InnerPanel extends Panel { public InnerPanel(FrequencyResultPanel freqPanel) { setSizeFull(); whiteboard = new FrequencyWhiteboard(freqPanel); whiteboard.addStyleName(Helper.CORPUS_FONT_FORCE); setContent(whiteboard); } } }