![JAR search and dependency download from the Maven repository](/logo.png)
mds.wave.WavePopup Maven / Gradle / Ivy
package mds.wave;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.util.Enumeration;
import java.util.StringTokenizer;
import javax.swing.*;
public class WavePopup extends JPopupMenu implements ItemListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
protected Waveform wave = null;
protected SetupWaveformParams setup_params;
protected JSeparator sep1, sep2, sep3;
protected JMenuItem setup, autoscale, autoscaleY, autoscaleAll, autoscaleAllY, allSameScale, allSameXScale,
allSameXScaleAutoY, allSameYScale, resetScales, resetAllScales, playFrame, remove_panel, set_point,
undo_zoom, maximize, cb_copy, profile_dialog, colorMap, saveAsText;
protected JMenu markerList, colorList, markerStep, mode_2d, mode_1d;
protected JRadioButtonMenuItem plot_y_time, plot_x_y, plot_contour, plot_image;
protected JRadioButtonMenuItem plot_line, plot_no_line, plot_step;
protected ButtonGroup markerList_bg, colorList_bg, markerStep_bg, mode_2d_bg, mode_1d_bg;
protected int curr_x, curr_y;
protected Container parent;
private Waveform profile_source = null;
ProfileDialog profDialog;
ColorMapDialog colorMapDialog = null;
public WavePopup()
{
this(null, null);
}
public WavePopup(SetupWaveformParams setup_params, ProfileDialog profDialog)
{
setup = new JMenuItem("Set Limits...");
setup.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
ShowDialog();
}
});
this.setup_params = setup_params;
this.profDialog = profDialog;
remove_panel = new JMenuItem("Remove panel");
remove_panel.setEnabled(false);
remove_panel.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
final Object[] options =
{ "Yes", "No" };
final int opt = JOptionPane.showOptionDialog(null, "Are you sure you want to remove this wave panel?",
"Warning", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]);
switch (opt)
{
case JOptionPane.YES_OPTION:
((WaveformManager) parent).removePanel(wave);;
break;
}
}
});
maximize = new JMenuItem("Maximize Panel");
maximize.setEnabled(false);
maximize.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (((WaveformManager) WavePopup.this.parent).isMaximize())
{
((WaveformManager) WavePopup.this.parent).maximizeComponent(null);
}
else
{
((WaveformManager) WavePopup.this.parent).maximizeComponent(wave);
}
}
});
set_point = new JMenuItem("Set Point");
set_point.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
WavePopup.this.SetDeselectPoint(wave);
}
});
markerList = new JMenu("Markers");
JRadioButtonMenuItem ob;
markerList_bg = new ButtonGroup();
for (int i = 0; i < Signal.markerList.length; i++)
{
markerList_bg.add(ob = new JRadioButtonMenuItem(Signal.markerList[i]));
ob.getModel().setActionCommand("MARKER " + i);
markerList.add(ob);
ob.addItemListener(this);
}
markerList.setEnabled(false);
markerStep_bg = new ButtonGroup();
markerStep = new JMenu("Marker step");
for (int i = 0; i < Signal.markerStepList.length; i++)
{
markerStep_bg.add(ob = new JRadioButtonMenuItem("" + Signal.markerStepList[i]));
ob.getModel().setActionCommand("MARKER_STEP " + i);
markerStep.add(ob);
ob.addItemListener(this);
}
markerStep.setEnabled(false);
colorList = new JMenu("Colors");
colorList.setEnabled(false);
mode_1d_bg = new ButtonGroup();
mode_1d = new JMenu("Mode Plot 1D");
mode_1d.add(plot_line = new JRadioButtonMenuItem("Line"));
mode_1d_bg.add(plot_line);
plot_line.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
SetMode1D(Signal.MODE_LINE);
}
});
mode_1d.add(plot_no_line = new JRadioButtonMenuItem("No Line"));
mode_1d_bg.add(plot_no_line);
plot_no_line.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
SetMode1D(Signal.MODE_NOLINE);
}
});
mode_1d.add(plot_step = new JRadioButtonMenuItem("Step Plot"));
mode_1d_bg.add(plot_step);
plot_step.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
SetMode1D(Signal.MODE_STEP);
// wave.Update();
}
});
mode_2d_bg = new ButtonGroup();
mode_2d = new JMenu("signal 2D");
mode_2d.add(plot_y_time = new JRadioButtonMenuItem("Plot xz(y)"));
mode_2d_bg.add(plot_y_time);
plot_y_time.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
SetMode2D(Signal.MODE_XZ);
}
});
mode_2d.add(plot_x_y = new JRadioButtonMenuItem("Plot yz(x)"));
mode_2d_bg.add(plot_x_y);
plot_x_y.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
SetMode2D(Signal.MODE_YZ);
}
});
mode_2d.add(plot_contour = new JRadioButtonMenuItem("Plot Contour"));
mode_2d_bg.add(plot_contour);
plot_contour.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
{
SetMode2D(Signal.MODE_CONTOUR);
}
}
});
mode_2d.add(plot_image = new JRadioButtonMenuItem("Plot Image"));
mode_2d_bg.add(plot_image);
plot_image.addItemListener(new ItemListener()
{
@Override
public void itemStateChanged(ItemEvent e)
{
if (e.getStateChange() == ItemEvent.SELECTED)
{
wave.setShowSigImage(true);
SetMode2D(Signal.MODE_IMAGE);
}
else
wave.setShowSigImage(false);
}
});
sep1 = new JSeparator();
sep2 = new JSeparator();
autoscale = new JMenuItem("Autoscale");
autoscale.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
wave.Autoscale();
}
});
autoscaleY = new JMenuItem("Autoscale Y");
autoscaleY.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
wave.AutoscaleY();
}
});
autoscaleAll = new JMenuItem("Autoscale all");
autoscaleAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, ActionEvent.CTRL_MASK));
autoscaleAll.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (wave.IsImage())
((WaveformManager) WavePopup.this.parent).autoscaleAllImages();
else
((WaveformManager) WavePopup.this.parent).autoscaleAll();
}
});
autoscaleAllY = new JMenuItem("Autoscale all Y");
autoscaleAllY.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, ActionEvent.CTRL_MASK));
autoscaleAllY.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformManager) WavePopup.this.parent).autoscaleAllY();
}
});
allSameScale = new JMenuItem("All same scale");
allSameScale.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformManager) WavePopup.this.parent).allSameScale(wave);
}
});
allSameXScale = new JMenuItem("All same X scale");
allSameXScale.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformManager) WavePopup.this.parent).allSameXScale(wave);
}
});
allSameXScaleAutoY = new JMenuItem("All same X scale (auto Y)");
allSameXScaleAutoY.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformManager) WavePopup.this.parent).allSameXScaleAutoY(wave);
}
});
allSameYScale = new JMenuItem("All same Y scale");
allSameYScale.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformManager) WavePopup.this.parent).allSameYScale(wave);
}
});
resetScales = new JMenuItem("Reset scales");
resetScales.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
wave.ResetScales();
}
});
resetAllScales = new JMenuItem("Reset all scales");
resetAllScales.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformManager) WavePopup.this.parent).resetAllScales();
}
});
undo_zoom = new JMenuItem("Undo Zoom");
undo_zoom.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
wave.undoZoom();
}
});
cb_copy = new JMenuItem("Copy to Clipboard");
cb_copy.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
final Dimension dim = wave.getSize();
final BufferedImage ri = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_RGB);
final Graphics2D g2d = (Graphics2D) ri.getGraphics();
g2d.setBackground(Color.white);
wave.paint(g2d, dim, Waveform.PRINT);
try
{
final ImageTransferable imageTransferable = new ImageTransferable(ri);
final Clipboard cli = Toolkit.getDefaultToolkit().getSystemClipboard();
cli.setContents(imageTransferable, imageTransferable);
}
catch (final Exception exc)
{
System.out.println("Exception " + exc);
}
}
});
playFrame = new JMenuItem();
playFrame.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (wave.Playing())
wave.StopFrame();
else
wave.PlayFrame();
}
});
profile_dialog = new JMenuItem("Show profile dialog");
profile_dialog.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
ShowProfileDialog(wave);
}
});
colorMap = new JMenuItem("Color Palette");
colorMap.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
ShowColorMapDialog(wave);
}
});
sep3 = new JSeparator();
saveAsText = new JMenuItem("Save as text ...");
saveAsText.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
((WaveformContainer) WavePopup.this.parent).SaveAsText(wave, false);
}
});
}
protected void InitColorMenu()
{
if (!Waveform.isColorsChanged() && colorList_bg != null)
return;
if (colorList.getItemCount() != 0)
colorList.removeAll();
final String[] colors_name = Waveform.getColorsName();
JRadioButtonMenuItem ob = null;
colorList_bg = new ButtonGroup();
if (colors_name != null)
{
for (int i = 0; i < colors_name.length; i++)
{
colorList.add(ob = new JRadioButtonMenuItem(colors_name[i]));
ob.getModel().setActionCommand("COLOR_LIST " + i);
colorList_bg.add(ob);
ob.addItemListener(this);
}
}
}
protected void InitOptionMenu()
{
final boolean state = (wave.GetShowSignalCount() == 1);
markerList.setEnabled(state);
colorList.setEnabled(state);
set_point.setEnabled(true);
if (state)
{
final boolean state_m = (wave.GetMarker() != Signal.NONE);
markerStep.setEnabled(state_m);
SelectListItem(markerList_bg, wave.GetMarker());
int st;
for (st = 0; st < Signal.markerStepList.length; st++)
if (Signal.markerStepList[st] == wave.GetMarkerStep())
break;
SelectListItem(markerStep_bg, st);
SelectListItem(colorList_bg, wave.GetColorIdx());
}
else
markerStep.setEnabled(false);
}
@Override
public void itemStateChanged(ItemEvent e)
{
final Object target = e.getSource();
if (target instanceof JRadioButtonMenuItem && e.getStateChange() == ItemEvent.SELECTED)
{
final JRadioButtonMenuItem cb = (JRadioButtonMenuItem) target;
final String action_cmd = cb.getModel().getActionCommand();
if (action_cmd == null)
return;
final StringTokenizer act = new StringTokenizer(action_cmd);
final String action = act.nextToken();
final int idx = Integer.parseInt(act.nextToken());
if (action.equals("MARKER"))
{
SetMarker(idx);
markerStep.setEnabled(!(wave.GetMarker() == Signal.NONE || wave.GetMarker() == Signal.POINT));
// wave.Repaint(true);
wave.ReportChanges();
return;
}
if (action.equals("MARKER_STEP"))
{
SetMarkerStep(Signal.markerStepList[idx]);
// wave.Repaint(true);
wave.ReportChanges();
return;
}
if (action.equals("COLOR_LIST"))
{
SetColor(idx);
// wave.Repaint(true);
wave.ReportChanges();
return;
}
}
}
protected void SelectListItem(ButtonGroup bg, int idx)
{
if (idx >= 0 && idx < bg.getButtonCount())
{ // otherwise its out of range
AbstractButton b = null;
final Enumeration e = bg.getElements();
for (int i = 0; i <= idx; i++)
b = e.nextElement();
bg.setSelected(b.getModel(), true);
}
}
protected void SetColor(int idx)
{
if (wave.GetColorIdx() != idx)
wave.SetColorIdx(idx);
}
public void setColorMapDialog(ColorMapDialog colorMapDialog)
{ this.colorMapDialog = colorMapDialog; }
public void SetDeselectPoint(Waveform w)
{
if (w.ShowMeasure())
{
if (parent != null && parent instanceof WaveformManager)
((WaveformManager) parent).setShowMeasure(false);
w.SetShowMeasure(false);
}
else
{
if (parent != null && parent instanceof WaveformManager)
((WaveformManager) parent).setShowMeasure(true);
w.SetShowMeasure(true);
w.SetPointMeasure();
}
w.repaint();
}
protected void SetImageMenu()
{
SetMenuItem(true);
final boolean state = (wave.frames != null && wave.frames.getNumFrame() != 0);
colorList.setEnabled(state);
SelectListItem(colorList_bg, wave.GetColorIdx());
playFrame.setEnabled(state);
set_point.setEnabled(state && ((wave.mode == Waveform.MODE_POINT)));
profile_dialog.setEnabled(!wave.isSendProfile());
}
protected void SetMarker(int idx)
{
if (wave.GetMarker() != idx)
wave.SetMarker(idx);
}
protected void SetMarkerStep(int step)
{
if (wave.GetMarkerStep() != step)
wave.SetMarkerStep(step);
}
protected void SetMenu()
{
InitColorMenu();
if (wave.is_image)
SetImageMenu();
else
SetSignalMenu();
if (parent != null && parent instanceof WaveformManager)
remove_panel.setEnabled(((WaveformManager) parent).getWaveformCount() > 1);
}
protected void SetMenuItem(boolean is_image)
{
if (getComponentCount() != 0)
removeAll();
if (parent != null && parent instanceof WaveformManager)
{
if (((WaveformManager) parent).isMaximize())
{
maximize.setText("Show All Panels");
}
else
{
maximize.setText("Maximize Panel");
}
}
if (is_image)
{
add(setup);
colorList.setText("Colors");
if (profDialog != null)
add(profile_dialog);
if (parent != null && parent instanceof WaveformManager)
{
add(maximize);
add(remove_panel);
}
add(colorList);
add(colorMap);
add(playFrame);
add(set_point);
add(sep2);
add(autoscale);
if (parent != null && parent instanceof WaveformManager)
{
autoscaleAll.setText("Autoscale all images");
add(autoscaleAll);
maximize.setEnabled(((WaveformManager) parent).getWaveformCount() > 1);
}
set_point.setEnabled((wave.mode == Waveform.MODE_POINT));
}
else
{
add(setup);
setup.setEnabled((setup_params != null));
add(set_point);
set_point.setEnabled((wave.mode == Waveform.MODE_POINT));
add(sep1);
add(markerList);
add(markerStep);
colorList.setText("Colors");
add(colorList);
if (wave.mode == Waveform.MODE_POINT || wave.GetShowSignalCount() == 1)
{
if (wave.getSignalType() == Signal.TYPE_1D || (wave.getSignalType() == Signal.TYPE_2D
&& (wave.getSignalMode2D() == Signal.MODE_XZ || wave.getSignalMode2D() == Signal.MODE_YZ)))
{
add(mode_1d);
switch (wave.getSignalMode1D())
{
case Signal.MODE_LINE:
mode_1d_bg.setSelected(plot_line.getModel(), true);
break;
case Signal.MODE_NOLINE:
mode_1d_bg.setSelected(plot_no_line.getModel(), true);
break;
case Signal.MODE_STEP:
mode_1d_bg.setSelected(plot_step.getModel(), true);
break;
}
}
if (wave.getSignalType() == Signal.TYPE_2D)
{
add(colorMap);
add(mode_2d);
mode_2d.setEnabled(wave.getSignalMode2D() != Signal.MODE_PROFILE);
switch (wave.getSignalMode2D())
{
case Signal.MODE_XZ:
mode_2d_bg.setSelected(plot_y_time.getModel(), true);
break;
case Signal.MODE_YZ:
mode_2d_bg.setSelected(plot_x_y.getModel(), true);
break;
case Signal.MODE_CONTOUR:
mode_2d_bg.setSelected(plot_contour.getModel(), true);
break;
case Signal.MODE_IMAGE:
mode_2d_bg.setSelected(plot_image.getModel(), true);
break;
}
plot_image.setEnabled(!wave.IsShowSigImage());
}
}
add(sep2);
add(autoscale);
add(autoscaleY);
if (parent != null && parent instanceof WaveformManager)
{
insert(maximize, 1);
insert(remove_panel, 2);
autoscaleAll.setText("Autoscale all");
add(autoscaleAll);
add(autoscaleAllY);
add(allSameScale);
add(allSameXScale);
add(allSameXScaleAutoY);
add(allSameYScale);
add(resetAllScales);
maximize.setEnabled(((WaveformManager) parent).getWaveformCount() > 1);
}
add(resetScales);
add(undo_zoom);
// Copy image to clipborad can be done only with
// java release 1.4
// if(System.getProperty("java.version").indexOf("1.4") != -1)
{
add(cb_copy);
}
add(sep3);
add(saveAsText);
}
}
protected void SetMenuLabel()
{
if (!wave.IsImage())
{
if (wave.ShowMeasure())
{
set_point.setText("Deselect Point");
}
else
set_point.setText("Set Point");
}
else
{
if (wave.ShowMeasure()) // && wave.sendProfile())
set_point.setText("Deselect Point");
else
set_point.setText("Set Point");
if (wave.is_playing)
playFrame.setText("Stop play");
else
playFrame.setText("Start play");
}
}
protected void SetMode1D(int mode)
{
wave.setSignalMode1D(mode);
}
protected void SetMode2D(int mode)
{
wave.setSignalMode2D(mode);
}
public void setParent(Container parent)
{ this.parent = parent; }
protected void SetSignalMenu()
{
SetMenuItem(false);
if (wave.GetShowSignalCount() != 0)
{
InitOptionMenu();
}
else
{
markerList.setEnabled(false);
colorList.setEnabled(false);
markerStep.setEnabled(false);
set_point.setEnabled(false);
}
// undo_zoom.setEnabled(wave.undoZoomPendig());
undo_zoom.setEnabled(wave.undoZoomPendig());
}
public void Show(Waveform w, int x, int y, int tran_x, int tran_y)
{
// parent = (Container)this.getParent();
// if(wave != w)
{
wave = w;
SetMenu();
}
// else
// if(!w.IsImage())
// InitOptionMenu();
SetMenuLabel();
curr_x = x;
curr_y = y;
show(w, x - tran_x, y - tran_y);
}
public void ShowColorMapDialog(Waveform wave)
{
if (colorMapDialog == null)
{
colorMapDialog = new ColorMapDialog(null, null);
}
else
colorMapDialog.setWave(wave);
colorMapDialog.setLocationRelativeTo(wave);
colorMapDialog.setVisible(true);
}
protected void ShowDialog()
{
if (setup_params != null)
setup_params.Show(wave);
}
public void ShowProfileDialog(Waveform wave)
{
if (profDialog != null && profDialog.isVisible())
profDialog.dispose();
// profDialog = new ProfileDialog(null, wave);
profDialog.setWaveSource(wave);
profDialog.pack();
profDialog.setSize(200, 250);
if (profile_source != null)
profile_source.setSendProfile(false);
wave.setSendProfile(true);
profile_source = wave;
profDialog.setLocationRelativeTo(wave);
profDialog.setVisible(true);
wave.sendProfileEvent();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy