use of org.knime.base.node.viz.histogram.datamodel.AbstractHistogramVizModel in project knime-core by knime.
the class AbstractHistogramPlotter method setShowGridLines.
/**
* @param showGridLines set to <code>true</code> if the grid lines of the
* y axis should be shown
*/
public void setShowGridLines(final boolean showGridLines) {
final AbstractHistogramVizModel vizModel = getHistogramVizModel();
if (vizModel == null) {
throw new IllegalStateException("Exception in setShowGridLines: " + "Viz model must not be null");
}
if (vizModel.setShowGridLines(showGridLines)) {
final HistogramDrawingPane drawingPane = getHistogramDrawingPane();
if (showGridLines) {
final Coordinate yCoordinates = getYAxis().getCoordinate();
if (yCoordinates == null) {
return;
}
final double drawingHeight = vizModel.getDrawingSpace().getHeight();
final int[] gridLines = getGridLineCoordinates(yCoordinates, drawingHeight);
drawingPane.setGridLines(gridLines);
} else {
drawingPane.setGridLines(null);
}
repaint();
}
}
use of org.knime.base.node.viz.histogram.datamodel.AbstractHistogramVizModel in project knime-core by knime.
the class AbstractHistogramPlotter method getXColumnSpec.
/**
* Returns the <code>DataColumnSpec</code> of the x column.
*
* @return the <code>DataColumnSpec</code> of the x column
*/
private DataColumnSpec getXColumnSpec() {
final AbstractHistogramVizModel vizModel = getHistogramVizModel();
if (vizModel == null) {
throw new IllegalStateException("Exception in getXColumnSpec: " + "Viz model must not be null");
}
final DataColumnSpec xColSpec = vizModel.getXColumnSpec();
String colName = xColSpec.getName();
final Set<DataCell> binCaptions = vizModel.getBinCaptions();
if (vizModel.isBinNominal()) {
colName = "Binned " + xColSpec.getName();
}
// case set one value which indicates this
if (binCaptions.size() < 1) {
binCaptions.add(new StringCell("No bins available"));
final DataColumnSpec colSpec = createColumnSpec(colName, StringCell.TYPE, Double.NaN, Double.NaN, binCaptions);
return colSpec;
}
final DataColumnSpec colSpec = createColumnSpec(colName, StringCell.TYPE, Double.NaN, Double.NaN, binCaptions);
return colSpec;
}
use of org.knime.base.node.viz.histogram.datamodel.AbstractHistogramVizModel in project knime-core by knime.
the class AbstractHistogramPlotter method hiLiteSelected.
/**
* {@inheritDoc}
*/
@Override
public void hiLiteSelected() {
final AbstractHistogramVizModel vizModel = getHistogramVizModel();
if (vizModel == null || !vizModel.supportsHiliting()) {
LOGGER.debug("VizModel doesn't support hiliting or was null");
return;
}
final Set<RowKey> selectedKeys = vizModel.getSelectedKeys();
delegateHiLite(selectedKeys);
repaint();
}
use of org.knime.base.node.viz.histogram.datamodel.AbstractHistogramVizModel in project knime-core by knime.
the class HistogramDrawingPane method paintContent.
// **********************************************
/*--------- the drawing methods ----------------*/
// **********************************************
/**
* {@inheritDoc}
*/
@Override
public void paintContent(final Graphics g) {
final Graphics2D g2 = (Graphics2D) g;
final Rectangle2D bounds = getBounds();
String msg = m_infoMsg;
final AbstractHistogramVizModel vizModel = m_vizModel;
if (vizModel == null || vizModel.getBins() == null) {
// if we have no bins and no info message display a no bars info
if (msg == null) {
msg = "No bins to display";
}
}
// check if we have to display an information message
if (msg != null) {
DrawingUtils.drawMessage(g2, INFO_MSG_FONT, msg, bounds);
return;
}
if (m_updatePropertiesPanel && m_properties != null) {
m_properties.updateHistogramSettings(vizModel);
m_updatePropertiesPanel = false;
}
// check if we have to draw the grid lines
if (vizModel.isShowGridLines() && m_gridLines != null) {
for (final int gridLine : m_gridLines) {
DrawingUtils.paintHorizontalLine(g2, 0, gridLine, (int) bounds.getWidth(), GRID_LINE_COLOR, GRID_LINE_STROKE);
}
}
// get all variables which are needed multiple times
final AggregationMethod aggrMethod = vizModel.getAggregationMethod();
// final Collection<ColorColumn> aggrColumns =
// vizModel.getAggrColumns();
final HistogramLayout layout = vizModel.getHistogramLayout();
// if the user has selected more then one aggregation column we have to
// draw the bar outline to how him which bar belongs to which aggregation
// column
final boolean drawBinOutline = vizModel.isShowBinOutline();
final boolean drawBarOutline = vizModel.isShowBarOutline();
// (aggrColumns != null
// && aggrColumns.size() > 1)
// || HistogramLayout.SIDE_BY_SIDE.equals(
// m_vizModel.getHistogramLayout());
final boolean showElementOutline = vizModel.isShowElementOutline();
final LabelDisplayPolicy labelDisplayPolicy = vizModel.getLabelDisplayPolicy();
final boolean showLabelVertical = vizModel.isShowLabelVertical();
final float barOutlineAlpha;
if (HistogramLayout.SIDE_BY_SIDE.equals(vizModel.getHistogramLayout())) {
barOutlineAlpha = BAR_SIDE_BY_SIDE_SURROUNDING_ALPHA;
} else {
barOutlineAlpha = BAR_STACKED_SURROUNDING_ALPHA;
}
// loop over all bins and paint them
for (final BinDataModel bin : vizModel.getBins()) {
if (drawBinOutline) {
DrawingUtils.drawRectangle(g2, bin.getSurroundingRectangle(), BIN_SURROUNDING_COLOR, BIN_SURROUNDING_STROKE);
}
if (!bin.isPresentable()) {
// the bars doen't fit in this bin so we have to
// fill the complete bin in black to show it to the user
DrawingUtils.drawBlock(g2, bin.getBinRectangle(), OVERLOADED_ELEMENT_FILLING, OVERLOADED_ELEMENT_ALPHA);
if (bin.isSelected()) {
DrawingUtils.drawRectangle(g2, bin.getBinRectangle(), ELEMENT_SELECTED_OUTLINE_COLOR, ELEMENT_SELECTED_OUTLINE_STROKE);
}
if (bin instanceof InteractiveBinDataModel) {
final InteractiveBinDataModel interactiveBin = (InteractiveBinDataModel) bin;
drawHiliteRect(g2, interactiveBin.getHiliteRectangle());
}
continue;
}
final Collection<BarDataModel> bars = bin.getBars();
for (final BarDataModel bar : bars) {
if (drawBarOutline) {
// draw the outline of the bar if we have multiple
// aggregation columns
DrawingUtils.drawBlock(g2, bar.getSurroundingRectangle(), bar.getColor(), barOutlineAlpha);
}
if (bar.isPresentable()) {
drawElements(g2, bar.getElements(), showElementOutline);
} else {
// the elements doen't fit in this bar so we have to
// fill the complete bar to show it to the user
final Rectangle2D barRectangle = bar.getShape();
DrawingUtils.drawBlock(g2, barRectangle, OVERLOADED_ELEMENT_FILLING, OVERLOADED_ELEMENT_ALPHA);
if (bar.isSelected()) {
DrawingUtils.drawRectangle(g2, barRectangle, ELEMENT_SELECTED_OUTLINE_COLOR, ELEMENT_SELECTED_OUTLINE_STROKE);
}
if (bar instanceof InteractiveBarDataModel) {
final InteractiveBarDataModel interactiveBar = (InteractiveBarDataModel) bar;
drawHiliteRect(g2, interactiveBar.getHiliteShape());
}
}
// draw the bar label at last to have them on top
drawLabels(g2, bar, aggrMethod, layout, bounds, labelDisplayPolicy, showLabelVertical);
}
// end of bar loop
}
// check if we have to draw the base line
if (m_baseLine != null) {
DrawingUtils.paintHorizontalLine(g2, 0, m_baseLine.intValue(), (int) bounds.getWidth(), BASE_LINE_COLOR, BASE_LINE_STROKE);
}
return;
}
use of org.knime.base.node.viz.histogram.datamodel.AbstractHistogramVizModel in project knime-core by knime.
the class FixedColumnHistogramNodeView method modelChanged.
/**
* Whenever the model changes an update for the plotter is triggered and new
* HiLiteHandler are set.
*/
@Override
public void modelChanged() {
final FixedColumnHistogramNodeModel model = getNodeModel();
if (model == null) {
return;
}
final DataTableSpec tableSpec = model.getTableSpec();
if (m_plotter != null) {
m_plotter.reset();
}
final AbstractHistogramVizModel vizModel = model.getHistogramVizModel();
if (vizModel == null) {
return;
}
if (m_plotter == null) {
final FixedHistogramProperties props = new FixedHistogramProperties(tableSpec, vizModel);
m_plotter = new FixedHistogramPlotter(props, model.getInHiLiteHandler(0));
// hiliting is not supported in the fixed column histogram
}
m_plotter.setHiLiteHandler(model.getInHiLiteHandler(0));
m_plotter.setHistogramVizModel(tableSpec, vizModel);
m_plotter.updatePaintModel();
if (getComponent() != m_plotter) {
setComponent(m_plotter);
}
if (m_plotter != null) {
m_plotter.fitToScreen();
}
}
Aggregations