DvUtils.java
// @formatter:off
/*******************************************************************************
*
* This file is part of JMad.
*
* Copyright (c) 2008-2011, CERN. All rights reserved.
*
* 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.
*
******************************************************************************/
// @formatter:on
package cern.accsoft.steering.util.gui.dv.ds;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import cern.jdve.Chart;
import cern.jdve.ChartInteractor;
import cern.jdve.ChartRenderer;
import cern.jdve.LabelRenderer;
import cern.jdve.data.DataSet;
import cern.jdve.graphic.ChartAnnotation;
import cern.jdve.graphic.Marker;
import cern.jdve.graphic.MarkerFactory;
import cern.jdve.graphic.RenderingHint;
import cern.jdve.interactor.CoordinatesPane;
import cern.jdve.interactor.DataPickerInteractor;
import cern.jdve.interactor.ScrollInteractor;
import cern.jdve.interactor.ZoomInteractor;
import cern.jdve.renderer.BarChartRenderer;
import cern.jdve.renderer.HiLoRenderer;
import cern.jdve.renderer.PolylineChartRenderer;
import cern.jdve.renderer.ScatterChartRenderer;
import cern.jdve.viewer.DataView;
/**
* @author Kajetan Fuchsberger (kajetan.fuchsberger at cern.ch)
*/
public final class DvUtils {
public final static RenderingHint VALIDITY_RENDERING_HINT = new ValidityRenderingHint();
/**
* private constructor, no external instantiation
*/
private DvUtils() {
// only static methods
}
/**
* creates a DataView which additionaly contains an edit - interactor toolbar for fitting.
*
* @param chart
* @return
*/
public final static DataView createFitInteractorView(Chart chart) {
chart.setInteractors(ChartInteractor.createEditIteractors());
ChartInteractor interactor = chart.getInteractorOfType(ChartInteractor.DATA_PICKER);
if ((interactor != null) && (interactor instanceof DataPickerInteractor)) {
configureDataPickerInteractor((DataPickerInteractor) interactor);
}
SineFitInteractor sineFitInteractor = new AlohaSineFitInteractor();
chart.addInteractor(sineFitInteractor);
DataView dataView = new DataView(chart);
JToolBar toolBar = chart.getInteractorsToolbar();
/* add all components from the fit-interactor to the toolbar */
toolBar.addSeparator();
Component[] fitComponents = sineFitInteractor.getToolBarComponents();
for (int i = 0; i < fitComponents.length; i++) {
toolBar.add(fitComponents[i]);
}
dataView.add(toolBar, BorderLayout.NORTH);
return dataView;
}
/**
* creates the default DataView for Aloha.
*
* @param chart the chart for which to create the DataView
* @return the dataView
*/
public final static DataView createDataView(Chart chart) {
/* default behaviour for the moment */
return new DataView(chart);
}
/**
* create a polyline renderer for aloha and sets the dataSet
*
* @param dataSet the dataSet to use for the renderer
* @return the renderer
*/
public final static ChartRenderer createPolylineRenderer(DataSet dataSet) {
ChartRenderer renderer = createMarkerPolylineRenderer();
renderer.setDataSet(dataSet);
return renderer;
}
/**
* creates the default polyline-renderer with marker for aloha
*
* @return
*/
public final static ChartRenderer createMarkerPolylineRenderer() {
PolylineChartRenderer renderer = new PolylineChartRenderer(MarkerFactory.getMarker(Marker.CIRCLE));
renderer.setMarkerSize(4);
configureRenderer(renderer);
return renderer;
}
/**
* creates the default marker rederer for aloha
*
* @return
*/
public final static ChartRenderer createScatterRenderer() {
ScatterChartRenderer renderer = new ScatterChartRenderer(MarkerFactory.getMarker(Marker.CIRCLE), 4);
configureRenderer(renderer);
return renderer;
}
/**
* creates the default renderer that connects two points (e.g. for alignment) for aloha.
*
* @return the renderer
*/
public final static ChartRenderer createTwoPointRenderer() {
TwoPointChartRenderer renderer = new TwoPointChartRenderer(MarkerFactory.getMarker(Marker.CIRCLE), 5);
configureRenderer(renderer);
return renderer;
}
/**
* creates the default PolyLineRenderer without markers for aloha.
*
* @return the Renderer
*/
public final static ChartRenderer createPolyLineRenderer() {
ChartRenderer renderer = new PolylineChartRenderer();
configureRenderer(renderer);
return renderer;
}
/**
* creates the default HiLo-Renderer for aloha
*
* @return the Renderer
*/
public final static ChartRenderer createHiLoRenderer() {
ChartRenderer renderer = new HiLoRenderer();
configureRenderer(renderer);
return renderer;
}
/**
* creates the default BarChartRenderer for aloha.
*
* @return the BarChartRenderer
*/
public final static ChartRenderer createBarChartRenderer() {
BarChartRenderer renderer = new BarChartRenderer();
configureRenderer(renderer);
return renderer;
}
private final static void configureRenderer(ChartRenderer renderer) {
renderer.setRenderingHint(VALIDITY_RENDERING_HINT);
}
/**
* create the default data-picker for aloha.
*
* @return the DataPickerInteractor
*/
public final static ChartInteractor createDataPickerInteractor() {
DataPickerInteractor dataPicker = new DataPickerInteractor();
configureDataPickerInteractor(dataPicker);
return dataPicker;
}
public final static void configureDefaultInteractors(Chart chart) {
chart.addInteractor(DvUtils.createDataPickerInteractor());
chart.addInteractor(new ZoomInteractor());
chart.addInteractor(new ScrollInteractor());
}
/**
* configures the {@link DataPickerInteractor} to our default values,
*
* @param dataPicker
*/
private final static void configureDataPickerInteractor(DataPickerInteractor dataPicker) {
dataPicker.setPointCoordPane(new AccurateCoordinatesPane());
dataPicker.setDisplayDataSetName(false);
dataPicker.setCursorCoordPainted(false);
dataPicker.getPointCoordPane().setXCoordDisplay(CoordinatesPane.DATA_LABEL);
}
/**
* creates a simple annotation in the chart, with the given Text
*
* @param chart the chart to add the annotation to
* @param comment the text of the annotation
* @return the annotatioon
*/
public final static ChartAnnotation addComment(Chart chart, String comment) {
ChartAnnotation commentAnnotation = new ChartAnnotation(comment, 5, 1, false);
LabelRenderer labRender = new LabelRenderer();
labRender.setFont(new Font("Monospaced", Font.BOLD, 12));
labRender.setHorizontalAlignment(SwingConstants.LEFT);
labRender.setVerticalAlignment(SwingConstants.TOP);
labRender.setBackground(null);
labRender.setBorder(null);
commentAnnotation.setLabelRenderer(labRender);
chart.addDecoration(commentAnnotation);
return commentAnnotation;
}
}