Skip to content
Snippets Groups Projects
Commit 9e8b1372 authored by tjc's avatar tjc
Browse files

use paintComponent for plots

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@2069 ee4ac58c-ac51-4696-9907-e4b3aa274f04
parent cf80122b
No related branches found
No related tags found
No related merge requests found
......@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/BasePlot.java,v 1.1 2004-06-09 09:46:04 tjc Exp $
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/BasePlot.java,v 1.2 2004-11-24 09:38:20 tjc Exp $
**/
package uk.ac.sanger.artemis.components;
......@@ -40,7 +40,7 @@ import javax.swing.*;
* scale is tied to a FeatureDisplay component.
*
* @author Kim Rutherford
* @version $Id: BasePlot.java,v 1.1 2004-06-09 09:46:04 tjc Exp $
* @version $Id: BasePlot.java,v 1.2 2004-11-24 09:38:20 tjc Exp $
**/
public class BasePlot extends Plot
......@@ -181,7 +181,7 @@ public class BasePlot extends Plot
selection_end_marker = null;
}
repaintCanvas ();
repaint();
}
/**
......@@ -191,7 +191,7 @@ public class BasePlot extends Plot
public void selectionChanged (SelectionChangeEvent event) {
selection_start_marker = null;
selection_end_marker = null;
repaintCanvas ();
repaint();
}
/**
......@@ -500,7 +500,7 @@ public class BasePlot extends Plot
* canvas (see drawCrossHair ()).
**/
protected int getPointPosition (final int canvas_x_position) {
return (int) ((1.0 * canvas_x_position / getCanvas ().getSize ().width) *
return (int) ((1.0 * canvas_x_position / getSize ().width) *
getWidthInBases ()) + getStart ();
}
......@@ -509,7 +509,7 @@ public class BasePlot extends Plot
**/
private int getCanvasPosition (final int base) {
return (int) ((1.0 * base - getStart ()) / getWidthInBases () *
getCanvas ().getSize ().width);
getSize ().width);
}
/**
......
......@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/BasePlotGroup.java,v 1.4 2004-11-17 13:19:43 tjc Exp $
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/BasePlotGroup.java,v 1.5 2004-11-24 09:38:20 tjc Exp $
*/
package uk.ac.sanger.artemis.components;
......@@ -42,7 +42,7 @@ import javax.swing.*;
* which can toggled off and on.
*
* @author Kim Rutherford
* @version $Id: BasePlotGroup.java,v 1.4 2004-11-17 13:19:43 tjc Exp $
* @version $Id: BasePlotGroup.java,v 1.5 2004-11-24 09:38:20 tjc Exp $
**/
public class BasePlotGroup extends JPanel
......@@ -199,7 +199,7 @@ public class BasePlotGroup extends JPanel
BasePlot bp = (BasePlot)children[i];
if(!bp.isVisible())
continue;
bp.paintCanvas(g);
bp.paintComponent(g);
g.translate(0,bp.getHeight());
}
}
......
......@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/FeaturePlot.java,v 1.1 2004-06-09 09:46:42 tjc Exp $
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/FeaturePlot.java,v 1.2 2004-11-24 09:38:20 tjc Exp $
*/
package uk.ac.sanger.artemis.components;
......@@ -36,7 +36,7 @@ import java.awt.event.*;
* particular feature.
*
* @author Kim Rutherford
* @version $Id: FeaturePlot.java,v 1.1 2004-06-09 09:46:42 tjc Exp $
* @version $Id: FeaturePlot.java,v 1.2 2004-11-24 09:38:20 tjc Exp $
**/
public class FeaturePlot extends Plot
......@@ -104,7 +104,7 @@ public class FeaturePlot extends Plot
recalculate_flag = true;
repaintCanvas ();
repaint();
}
/**
......@@ -325,7 +325,7 @@ public class FeaturePlot extends Plot
}
drawPoints (g, min_value, max_value, step_size, window_size,
getCanvas ().getSize ().width,
getSize ().width,
0, // no offset.
value_array_array[value_index]);
}
......
......@@ -20,7 +20,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/Plot.java,v 1.3 2004-10-05 09:24:37 tjc Exp $
* $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/Plot.java,v 1.4 2004-11-24 09:38:20 tjc Exp $
**/
package uk.ac.sanger.artemis.components;
......@@ -43,30 +43,19 @@ import javax.swing.JPopupMenu;
* This class implements a simple plot component.
*
* @author Kim Rutherford
* @version $Id: Plot.java,v 1.3 2004-10-05 09:24:37 tjc Exp $
* @version $Id: Plot.java,v 1.4 2004-11-24 09:38:20 tjc Exp $
**/
public abstract class Plot extends JPanel
{
/**
* The drawing area for this component.
**/
private JComponent canvas = null;
/**
* A scroll bar for changing the window size.
**/
/** scroll bar for changing the window size. */
private JScrollBar window_changer = null;
/**
* The height of the font used in this component.
**/
/** height of the font used in this component. */
private int font_height;
/**
* Off screen image used for double buffering when drawing the canvas.
**/
/** off screen image used for double buffering when drawing */
private Image offscreen;
/**
......@@ -103,6 +92,18 @@ public abstract class Plot extends JPanel
**/
final private java.util.Vector listener_list = new java.util.Vector();
/**
* Recalculate the values all the state that is used for drawing the plot
**/
protected abstract void recalculateValues();
/**
* Get the position in the Feature or Sequence of the given x canvas
* position. This is the label used when the user clicks the mouse in on
* the canvas (see drawCrossHair()).
**/
protected abstract int getPointPosition(final int canvas_x_position);
/**
* Create a new plot component.
* @param algorithm The object that will generate the values we plot in
......@@ -157,7 +158,7 @@ public abstract class Plot extends JPanel
public void adjustmentValueChanged(AdjustmentEvent e)
{
recalculate_flag = true;
repaintCanvas ();
repaint();
}
});
......@@ -166,15 +167,15 @@ public abstract class Plot extends JPanel
public void componentShown(ComponentEvent e)
{
recalculate_flag = true;
repaintCanvas ();
repaint();
}
});
add(window_changer, "East");
// setBackground(Color.white);
createCanvas();
getCanvas().setBackground (Color.white);
addMouseListener(mouse_listener);
addMouseMotionListener(mouse_motion_listener);
}
final int SCROLL_NOB_SIZE = 10;
......@@ -196,39 +197,6 @@ public abstract class Plot extends JPanel
return window_changer.getValue();
}
/**
* Create the canvas object for this BasePlot and add it to the component.
**/
private void createCanvas()
{
canvas = new JComponent()
{
/**
* Set the offscreen buffer to null as part of invalidation.
**/
public void invalidate()
{
super.invalidate();
offscreen = null;
}
/**
* Override update to *not* erase the background before painting
*/
public void update(Graphics g)
{
paint(g);
}
/**
* Paint the canvas.
*/
public void paint(Graphics g)
{
paintCanvas (g);
}
};
final MouseListener mouse_listener = new MouseAdapter()
{
/**
......@@ -252,7 +220,7 @@ public abstract class Plot extends JPanel
{
getAlgorithm().setScalingFlag(scaling_toggle.getState());
recalculate_flag = true;
repaintCanvas();
repaint();
}
});
......@@ -270,11 +238,13 @@ public abstract class Plot extends JPanel
200000, 500000, 1000000
};
JMenuItem window_size_item;
for(int i = 0 ; i < window_sizes.length ; ++i)
{
final int size = i;
JMenuItem window_size_item = new JMenuItem(" " + window_sizes[i]);
window_size_item = new JMenuItem(" " + window_sizes[i]);
window_size_item.addActionListener(new ActionListener()
{
......@@ -285,7 +255,7 @@ public abstract class Plot extends JPanel
{
window_changer.setMaximum(new_maximum + SCROLL_NOB_SIZE);
recalculate_flag = true;
repaintCanvas ();
repaint();
}
}
});
......@@ -314,13 +284,11 @@ public abstract class Plot extends JPanel
else
fireClickEvent();
repaintCanvas();
repaint();
}
}
};
canvas.addMouseListener (mouse_listener);
final MouseMotionListener mouse_motion_listener =
new MouseMotionAdapter()
{
......@@ -338,14 +306,10 @@ public abstract class Plot extends JPanel
cancelCrossHairs();
fireDragEvent();
repaintCanvas();
repaint();
}
};
canvas.addMouseMotionListener (mouse_motion_listener);
add (canvas, "Center");
}
/**
* Return true if and only if the given MouseEvent (a mouse press) should
......@@ -366,10 +330,10 @@ public abstract class Plot extends JPanel
**/
private void fireClickEvent()
{
PlotMouseListener listener;
for(int i = 0; i < listener_list.size(); ++i)
{
final PlotMouseListener listener =
(PlotMouseListener)listener_list.elementAt(i);
listener = (PlotMouseListener)listener_list.elementAt(i);
listener.mouseClick(getPointPosition(cross_hair_position));
}
}
......@@ -380,10 +344,10 @@ public abstract class Plot extends JPanel
**/
private void fireDragEvent()
{
PlotMouseListener listener;
for(int i = 0; i < listener_list.size(); ++i)
{
final PlotMouseListener listener =
(PlotMouseListener)listener_list.elementAt(i);
listener = (PlotMouseListener)listener_list.elementAt(i);
listener.mouseDrag(getPointPosition(drag_start_position),
getPointPosition(cross_hair_position));
}
......@@ -395,10 +359,10 @@ public abstract class Plot extends JPanel
**/
private void fireDoubleClickEvent()
{
PlotMouseListener listener;
for(int i = 0; i < listener_list.size(); ++i)
{
final PlotMouseListener listener =
(PlotMouseListener)listener_list.elementAt (i);
listener = (PlotMouseListener)listener_list.elementAt(i);
listener.mouseDoubleClick(getPointPosition(cross_hair_position));
}
}
......@@ -427,37 +391,31 @@ public abstract class Plot extends JPanel
* double buffering when drawing the canvas.
* @param g The Graphics object of the canvas.
**/
protected void paintCanvas(final Graphics g)
protected void paintComponent(final Graphics g)
{
super.paintComponent(g);
if(!isVisible())
return;
final int canvas_width = canvas.getSize().width;
final int canvas_height = canvas.getSize().height;
final int width = getWidth() - window_changer.getWidth();
final int height = getHeight();
if(canvas_height <= 0 || canvas_width <= 0)
{
// there is no point painting a zero width canvas
if(height <= 0 || width <= 0)
return;
}
if(offscreen == null)
offscreen = createImage(canvas_width,
canvas_height);
offscreen = createImage(width, height);
Graphics og = offscreen.getGraphics();
og.setClip(0, 0, canvas_width, canvas_height);
og.setClip(0, 0, width, height);
og.setColor(new Color(240, 240, 240));
og.fillRect(0, 0, canvas.getSize().width, canvas.getSize().height);
og.fillRect(0, 0, width, height);
// Redraw the graph on the canvas using the algorithm from the
// constructor.
drawMultiValueGraph(og);
drawLabels(og);
g.drawImage(offscreen, 0, 0, null);
og.dispose();
}
......@@ -468,7 +426,7 @@ public abstract class Plot extends JPanel
**/
protected int getCrossHairPosition()
{
if(cross_hair_position >= getCanvas().getSize().width)
if(cross_hair_position >= getSize().width)
return -1;
else
return cross_hair_position;
......@@ -494,10 +452,10 @@ public abstract class Plot extends JPanel
protected void drawScaleLine(final Graphics g,
final int start, final int end)
{
final int canvas_width = canvas.getSize ().width;
final int canvas_height = canvas.getSize ().height;
final int width = getWidth() - window_changer.getWidth();
final int height = getHeight();
final int scale_number_y_pos = canvas_height - 1;
final int scale_number_y_pos = height - 1;
final float bases_per_pixel = 1.0F;
......@@ -517,12 +475,10 @@ public abstract class Plot extends JPanel
final int index_of_last_label = end / base_label_spacing;
for (int i = index_of_first_label ;
i <= index_of_last_label ;
++i)
String label_string;
for(int i = index_of_first_label; i <= index_of_last_label; i++)
{
final String label_string =
String.valueOf ((int)(i * base_label_spacing));
label_string = String.valueOf((int)(i * base_label_spacing));
final int scale_number_x_pos =
(int)((i * base_label_spacing - start) / bases_per_pixel);
......@@ -531,8 +487,8 @@ public abstract class Plot extends JPanel
scale_number_x_pos + 2,
scale_number_y_pos);
g.drawLine (scale_number_x_pos, canvas_height - getScaleHeight () / 2,
scale_number_x_pos, canvas_height - getScaleHeight ());
g.drawLine(scale_number_x_pos, height - getScaleHeight() / 2,
scale_number_x_pos, height - getScaleHeight());
}
}
......@@ -558,31 +514,32 @@ public abstract class Plot extends JPanel
final float [] plot_values)
{
final float residues_per_pixel =
(float) total_unit_count / canvas.getSize ().width;
(float) total_unit_count / getSize().width;
// this is the height of the graph (slightly smaller than the canvas for
// ease of viewing).
final int graph_height = canvas.getSize ().height -
final int graph_height = getSize().height -
getLabelHeight() - // leave room for the algorithm name
getScaleHeight() - // leave room for the scale
2;
if (graph_height < 5) {
// too small to draw
if(graph_height < 5)
return;
}
final int number_of_values = plot_values.length;
int start_residue;
int end_residue;
int start_x;
int end_x;
for(int i = 0; i<number_of_values - 1; ++i)
{
final int start_residue =
window_size / 2 + i * step_size + start_position;
final int end_residue =
start_residue + step_size;
start_residue = window_size / 2 + i * step_size + start_position;
end_residue = start_residue + step_size;
final int start_x = (int) (start_residue / residues_per_pixel);
final int end_x = (int) (end_residue / residues_per_pixel);
start_x = (int)(start_residue / residues_per_pixel);
end_x = (int)(end_residue / residues_per_pixel);
// this is a number between 0.0 and 1.0
final float scaled_start_value =
......@@ -621,13 +578,14 @@ public abstract class Plot extends JPanel
{
final Float average = getAlgorithm().getAverage();
if (average != null) {
if(average != null)
{
g.setColor(Color.gray);
// this is the height of the graph (slightly smaller than the canvas for
// ease of viewing).
final int graph_height =
canvas.getSize ().height - getFontHeight ();
getSize().height - getFontHeight();
// this is a number between 0.0 and 1.0
final float scaled_average =
......@@ -639,17 +597,17 @@ public abstract class Plot extends JPanel
getFontHeight() + 1;
g.drawLine(0, position,
canvas.getSize ().width, position);
getSize().width, position);
final FontMetrics fm = g.getFontMetrics();
final int canvas_width = canvas.getSize ().width;
final int width = getSize().width;
final String average_string =
String.valueOf(Math.round(average.floatValue() * 100.0) / 100.0);
g.drawString(average_string,
canvas_width - fm.stringWidth (average_string) - 1,
width - fm.stringWidth(average_string) - 1,
position);
}
}
......@@ -679,14 +637,14 @@ public abstract class Plot extends JPanel
{
g.setColor(Color.black);
final int canvas_width = canvas.getSize ().width;
final int canvas_height = canvas.getSize ().height;
final int width = getWidth() - window_changer.getWidth();
final int height = getHeight();
g.drawLine (0, canvas_height - getScaleHeight (),
canvas_width, canvas_height - getScaleHeight ());
g.drawLine(0, height - getScaleHeight(),
width, height - getScaleHeight());
g.drawLine(0, getLabelHeight(),
canvas_width, getLabelHeight ());
width, getLabelHeight());
final FontMetrics fm = g.getFontMetrics();
......@@ -694,14 +652,14 @@ public abstract class Plot extends JPanel
String.valueOf(((int)(min_value * 100)) / 100.0);
g.drawString(min_string,
canvas_width - fm.stringWidth (min_string) - 1,
canvas_height - 1 - getScaleHeight ());
width - fm.stringWidth(min_string) - 1,
height - 1 - getScaleHeight());
final String max_string =
String.valueOf(((int)(max_value * 100)) / 100.0);
g.drawString(max_string,
canvas_width - fm.stringWidth (max_string) - 1,
width - fm.stringWidth(max_string) - 1,
1 + getFontHeight() * 2);
}
......@@ -717,41 +675,13 @@ public abstract class Plot extends JPanel
if(x_position >= 0)
{
g.drawLine(x_position, getLabelHeight(),
x_position, canvas.getSize ().height);
x_position, getSize().height);
g.drawString(label, x_position + 2,
getFontHeight() * (2 + label_pos) + 2);
}
}
/**
* Return the JComponent of this Plot.
**/
protected JComponent getCanvas()
{
return canvas;
}
/**
* Call repaint () on the canvas object.
**/
protected void repaintCanvas()
{
canvas.repaint ();
}
/**
* Recalculate the values all the state that is used for drawing the plot
**/
protected abstract void recalculateValues ();
/**
* Get the position in the Feature or Sequence of the given x canvas
* position. This is the label used when the user clicks the mouse in on
* the canvas (see drawCrossHair ()).
**/
protected abstract int getPointPosition (final int canvas_x_position);
/**
* Return the amount of vertical space (in pixels) to use for the scale.
**/
......
......@@ -71,7 +71,7 @@ public class PrintACT extends ScrollPanel
{
if(c[j] instanceof BasePlot)
{
((BasePlot)c[j]).paintCanvas(g2d);
((BasePlot)c[j]).paintComponent(g2d);
g2d.translate(0,((BasePlot)c[j]).getHeight());
}
}
......@@ -89,7 +89,7 @@ public class PrintACT extends ScrollPanel
{
if(c[j] instanceof BasePlot)
{
((BasePlot)c[j]).paintCanvas(g2d);
((BasePlot)c[j]).paintComponent(g2d);
g2d.translate(0,((BasePlot)c[j]).getHeight());
}
}
......@@ -125,7 +125,7 @@ public class PrintACT extends ScrollPanel
height += ((BasePlot)c[j]).getHeight();
if(((BasePlot)c[j]).getSize().width < width &&
((BasePlot)c[j]).getSize().width > 0)
width = ((BasePlot)c[j]).getCanvas().getSize().width;
width = ((BasePlot)c[j]).getSize().width;
}
}
......@@ -143,7 +143,7 @@ public class PrintACT extends ScrollPanel
height += ((BasePlot)c[j]).getHeight();
if(((BasePlot)c[j]).getSize().width < width &&
((BasePlot)c[j]).getSize().width > 0)
width = ((BasePlot)c[j]).getCanvas().getSize().width;
width = ((BasePlot)c[j]).getSize().width;
}
}
......@@ -313,7 +313,7 @@ public class PrintACT extends ScrollPanel
height += ((BasePlot)c[j]).getHeight();
if(((BasePlot)c[j]).getSize().width < width &&
((BasePlot)c[j]).getSize().width > 0)
width = ((BasePlot)c[j]).getCanvas().getSize().width;
width = ((BasePlot)c[j]).getSize().width;
}
}
......@@ -331,7 +331,7 @@ public class PrintACT extends ScrollPanel
height += ((BasePlot)c[j]).getHeight();
if(((BasePlot)c[j]).getSize().width < width &&
((BasePlot)c[j]).getSize().width > 0)
width = ((BasePlot)c[j]).getCanvas().getSize().width;
width = ((BasePlot)c[j]).getSize().width;
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment