Fix sample mount/unmount with user panel
This commit is contained in:
@@ -1,476 +1,478 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
|
||||
*/
|
||||
package ch.psi.mxsc;
|
||||
|
||||
import ch.psi.mxsc.BasePlateGraphics.DrawMode;
|
||||
import ch.psi.pshell.device.Device;
|
||||
import ch.psi.pshell.imaging.Data;
|
||||
import ch.psi.pshell.imaging.ImageListener;
|
||||
import ch.psi.pshell.imaging.Source;
|
||||
import ch.psi.pshell.swing.DevicePanel;
|
||||
import ch.psi.utils.State;
|
||||
import ch.psi.utils.swing.SwingUtils;
|
||||
import java.awt.Point;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPopupMenu;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class BasePlatePanel extends DevicePanel {
|
||||
JPopupMenu samplePopupMenu;
|
||||
JMenuItem menuLoadSample;
|
||||
JMenuItem menuUnloadSample;
|
||||
BasePlateGraphics basePlateGraphics;
|
||||
PuckGraphics puckGraphics;
|
||||
|
||||
boolean TOGGLE_SELECTION = false;
|
||||
/**
|
||||
* Creates new form BasePlatePanel
|
||||
*/
|
||||
public BasePlatePanel() {
|
||||
initComponents();
|
||||
addMouseListener(mouseAdapter);
|
||||
samplePopupMenu = new JPopupMenu();
|
||||
menuLoadSample = new JMenuItem("Load");
|
||||
menuLoadSample.addActionListener((ActionEvent e) -> {
|
||||
try {
|
||||
//getDevice().loadSample();
|
||||
int sample = clickedSample.getNumber();
|
||||
int puck = clickedPuck.getNumber();
|
||||
char segment = clickedPuck.getSegment();
|
||||
Controller.instance.execute("mount('" + segment + "'," + puck + "," + sample + ")");
|
||||
} catch (Exception ex) {
|
||||
SwingUtils.showException(this, ex);
|
||||
}
|
||||
});
|
||||
menuUnloadSample = new JMenuItem("Unload");
|
||||
menuUnloadSample.addActionListener((ActionEvent e) -> {
|
||||
try {
|
||||
//getDevice().unloadSample(getDevice().getSelectedSample());
|
||||
int sample = clickedSample.getNumber();
|
||||
int puck = clickedPuck.getNumber();
|
||||
char segment = clickedPuck.getSegment();
|
||||
Controller.instance.execute("unmount('" + segment + "'," + puck + "," + sample + ")");
|
||||
} catch (Exception ex) {
|
||||
SwingUtils.showException(this, ex);
|
||||
}
|
||||
});
|
||||
samplePopupMenu.add(menuLoadSample);
|
||||
samplePopupMenu.add(menuUnloadSample);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasePlate getDevice() {
|
||||
return (BasePlate) super.getDevice();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDevice(Device device){
|
||||
super.setDevice(device);
|
||||
if (mode==Mode.puck){
|
||||
basePlateGraphics = null;
|
||||
} else {
|
||||
basePlateGraphics = (device==null) ? null : new BasePlateGraphics((BasePlate)device);
|
||||
}
|
||||
}
|
||||
|
||||
Mode mode = Mode.horizontal;
|
||||
|
||||
public enum Mode {
|
||||
single,
|
||||
horizontal,
|
||||
vertical,
|
||||
overlapped,
|
||||
puck
|
||||
}
|
||||
|
||||
public Mode getMode() {
|
||||
return mode;
|
||||
}
|
||||
|
||||
public void setMode(Mode mode) {
|
||||
this.mode = mode;
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
enum SelectionMode{
|
||||
Samples,
|
||||
Pucks,
|
||||
None
|
||||
}
|
||||
SelectionMode selectionMode = SelectionMode.None;
|
||||
public SelectionMode getSelectionMode() {
|
||||
return selectionMode;
|
||||
}
|
||||
|
||||
public void setSelectionMode(SelectionMode selectionMode) {
|
||||
this.selectionMode = selectionMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form. WARNING: Do NOT
|
||||
* modify this code. The content of this method is always regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 400, Short.MAX_VALUE)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 300, Short.MAX_VALUE)
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
@Override
|
||||
protected void onDeviceStateChanged(State state, State former) {
|
||||
repaint();
|
||||
}
|
||||
|
||||
Rectangle platePlotRect;
|
||||
Rectangle puckPlotRect;
|
||||
Source source;
|
||||
|
||||
void createPuckGraphics(){
|
||||
Puck selectedPuck = getDevice().getSelectedPuck();
|
||||
if (selectedPuck==null){
|
||||
puckGraphics=null;
|
||||
} else {
|
||||
if ((puckGraphics==null) || (puckGraphics.puck!= selectedPuck)){
|
||||
puckGraphics = new PuckGraphics(selectedPuck, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint(Graphics g) {
|
||||
super.paint(g);
|
||||
if (getDevice() != null) {
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
Dimension size = getSize();
|
||||
if ((size.width > 40) && (size.height > 40)) {
|
||||
int border = 0;
|
||||
int borderPuck = 1;
|
||||
Rectangle plotRect = new Rectangle(border, border, size.width - 2 * border, size.height - 2 * border);
|
||||
Puck selectedPuck = getDevice().getSelectedPuck();
|
||||
platePlotRect = null;
|
||||
puckPlotRect = null;
|
||||
|
||||
switch (mode) {
|
||||
case single:
|
||||
platePlotRect = plotRect;
|
||||
puckPlotRect = null;
|
||||
basePlateGraphics.draw(g2d, platePlotRect, (img==null), false, true, DrawMode.center, img);
|
||||
break;
|
||||
case horizontal:
|
||||
platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width / 2, plotRect.height);
|
||||
basePlateGraphics.draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null);
|
||||
if (selectedPuck!=null){
|
||||
puckPlotRect = new Rectangle(plotRect.x + plotRect.width / 2 + borderPuck, plotRect.y + borderPuck, plotRect.width / 2 - 2 * borderPuck, plotRect.height - 2 * borderPuck);
|
||||
createPuckGraphics();
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, false, true);
|
||||
}
|
||||
break;
|
||||
case vertical:
|
||||
platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width, plotRect.height / 2);
|
||||
basePlateGraphics.draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null);
|
||||
if (selectedPuck!=null){
|
||||
puckPlotRect = new Rectangle(plotRect.x + borderPuck, plotRect.y + plotRect.height / 2 + borderPuck, plotRect.width - 2 * borderPuck, plotRect.height / 2 - 2 * borderPuck);
|
||||
createPuckGraphics();
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, false, true);
|
||||
}
|
||||
break;
|
||||
case overlapped:
|
||||
//getDevice().draw(g2d, plotRect, false, true);
|
||||
platePlotRect = new Rectangle(plotRect.x - ((int) (plotRect.width * 0.14)), plotRect.y - ((int) (plotRect.height * 0.14)), (int) (plotRect.width * 1.28), (int) (plotRect.height * 1.28));
|
||||
basePlateGraphics.draw(g2d, platePlotRect, false, true, false, DrawMode.fill, null);
|
||||
if (selectedPuck!=null){
|
||||
createPuckGraphics();
|
||||
int overlappedSize = (int) (1.5 * puckGraphics.getDrawSize());
|
||||
puckPlotRect = new Rectangle((int) (plotRect.getCenterX() - overlappedSize / 2), (int) (plotRect.getCenterY() - overlappedSize / 2), overlappedSize, overlappedSize);
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, false, true);
|
||||
}
|
||||
break;
|
||||
case puck:
|
||||
if (selectedPuck!=null){
|
||||
puckPlotRect = new Rectangle(plotRect.x + borderPuck, plotRect.y + borderPuck, plotRect.width - 2 * borderPuck, plotRect.height - 2 * borderPuck);
|
||||
createPuckGraphics();
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, true, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BufferedImage img;
|
||||
ImageListener imageListener = new ImageListener() {
|
||||
@Override
|
||||
public void onImage(Object origin, BufferedImage image, Data data) {
|
||||
img = image;
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Object origin, Exception ex) {
|
||||
img = null;
|
||||
repaint();
|
||||
}
|
||||
};
|
||||
void setCameraView(Source source){
|
||||
img = null;
|
||||
if (this.source!=null){
|
||||
this.source.removeListener(imageListener);
|
||||
}
|
||||
this.source = source;
|
||||
if (source!=null){
|
||||
source.addListener(imageListener);
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
Sample clickedSample;
|
||||
Puck clickedPuck;
|
||||
|
||||
MouseAdapter mouseAdapter = new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
checkMouseEvent(e, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
checkMouseEvent(e, false);
|
||||
}
|
||||
|
||||
private void checkMouseEvent(MouseEvent e, boolean pressed) {
|
||||
if (isEnabled() && (getDevice()!=null)) {
|
||||
try {
|
||||
Sample sample = getSample(e.getX(), e.getY());
|
||||
Puck puck = getPuck(e.getX(), e.getY());
|
||||
|
||||
clickedSample = sample;
|
||||
clickedPuck = puck;
|
||||
if (e.isPopupTrigger()) {
|
||||
if (sample != null) {
|
||||
onSamplePopupMenu(e, sample);
|
||||
} else if (puck != null){
|
||||
onPuckPopupMenu(e, puck);
|
||||
} else {
|
||||
onBasePlatePopupMenu(e);
|
||||
}
|
||||
} else if ((pressed) && (e.getClickCount() % 2 == 0)) {
|
||||
if (sample != null) {
|
||||
onSampleDoubleClicked(e, sample);
|
||||
} else if (puck != null){
|
||||
onPuckDoubleClicked(e, puck);
|
||||
}
|
||||
} else if ((e.getButton() == java.awt.event.MouseEvent.BUTTON1)) {
|
||||
if (sample != null) {
|
||||
if (pressed) {
|
||||
onSamplePressed(e, sample);
|
||||
} else {
|
||||
onSampleReleased(e, sample);
|
||||
}
|
||||
}else if (puck != null){
|
||||
if (pressed) {
|
||||
onPuckPressed(e, puck);
|
||||
} else {
|
||||
onPuckReleased(e, puck);
|
||||
}
|
||||
} else {
|
||||
if (pressed) {
|
||||
onPlatePressed(e);
|
||||
} else {
|
||||
onPlateReleased(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(BasePlatePanel.class.getName()).log(Level.WARNING, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (isEnabled()&& (getDevice()!=null)) {
|
||||
if (e.getButton() == java.awt.event.MouseEvent.BUTTON1) {
|
||||
Sample sample = getSample(e.getX(), e.getY());
|
||||
Puck puck = getPuck(e.getX(), e.getY());
|
||||
if (sample != null) {
|
||||
onSampleClicked(e, sample);
|
||||
} else {
|
||||
onPuckClicked(e, puck);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Sample getSample(int x, int y) {
|
||||
Point p = new Point(x, y);
|
||||
if (puckGraphics!=null){
|
||||
for (SampleGraphics sample :puckGraphics.sampleGraphics){
|
||||
if (sample.getDrawPosition().distance(p) <= (sample.getDrawSize() / 2)) {
|
||||
return sample.sample;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (basePlateGraphics!=null){
|
||||
for (PuckGraphics puck : basePlateGraphics.puckGraphics){
|
||||
if ((mode==Mode.single) || puck.puck.isSelected()){
|
||||
for (SampleGraphics sample :puck.sampleGraphics){
|
||||
if (sample.getDrawPosition().distance(p) <= (sample.getDrawSize() / 2)) {
|
||||
return sample.sample;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
Puck getPuck(int x, int y) {
|
||||
Point p = new Point(x, y);
|
||||
if (puckGraphics!=null){
|
||||
if (puckGraphics.getDrawPosition().distance(p) <= (puckGraphics.getDrawSize() / 2)) {
|
||||
return puckGraphics.puck;
|
||||
}
|
||||
}
|
||||
if (mode == Mode.puck){
|
||||
return getDevice().getSelectedPuck(); //Won't de-select it by clicking outside
|
||||
}
|
||||
if (basePlateGraphics!=null){
|
||||
for (PuckGraphics puck : basePlateGraphics.puckGraphics){
|
||||
if (puck.getDrawPosition().distance(p) <= (puck.getDrawSize() / 2)) {
|
||||
return puck.puck;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
void onSampleClicked(MouseEvent e, Sample sample){
|
||||
|
||||
}
|
||||
|
||||
void selectSample(Sample sample){
|
||||
if (getSelectionMode()==SelectionMode.Samples){
|
||||
if (sample!=null){
|
||||
sample.setSelected(true);
|
||||
}
|
||||
Controller.getInstance().onSamplePressed(sample);
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
void onSamplePressed(MouseEvent e, Sample sample){
|
||||
if (getSelectionMode()==SelectionMode.Samples){
|
||||
if (TOGGLE_SELECTION){
|
||||
sample.toggleSelected(true);
|
||||
} else {
|
||||
sample.setSelected(true);
|
||||
}
|
||||
repaint();
|
||||
Controller.getInstance().onSamplePressed(sample);
|
||||
} else if (getSelectionMode()==SelectionMode.Pucks){
|
||||
onPuckPressed(e, sample.getPuck());
|
||||
}
|
||||
}
|
||||
|
||||
void onSampleReleased(MouseEvent e, Sample sample){
|
||||
|
||||
}
|
||||
|
||||
void onSamplePopupMenu(MouseEvent e,Sample sample){
|
||||
//menuLoadSample.setEnabled(sample.isPresent() && getDevice().getLoadedSample()==null);
|
||||
//menuUnloadSample.setEnabled(!sample.isPresent() && getDevice().getLoadedSample()!=null);
|
||||
menuLoadSample.setEnabled(!sample.isLoaded() && getDevice().getLoadedSample()==null);
|
||||
menuUnloadSample.setEnabled(sample.isLoaded() && getDevice().getLoadedSample()!=null);
|
||||
samplePopupMenu.show(e.getComponent(), e.getX(), e.getY());
|
||||
}
|
||||
|
||||
void onSampleDoubleClicked(MouseEvent e,Sample sample){
|
||||
|
||||
}
|
||||
|
||||
void onPuckClicked(MouseEvent e, Puck puck){
|
||||
|
||||
}
|
||||
|
||||
void selectPuck(Puck puck){
|
||||
if (getSelectionMode()!=SelectionMode.None){
|
||||
if (puck != null){
|
||||
puck.setSelected(true);
|
||||
} else {
|
||||
getDevice().resetSelection();
|
||||
}
|
||||
Controller.getInstance().onPuckPressed(puck);
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
void onPuckPressed(MouseEvent e, Puck puck){
|
||||
if (getSelectionMode()!=SelectionMode.None){
|
||||
if (TOGGLE_SELECTION){
|
||||
puck.toggleSelected(true);
|
||||
} else {
|
||||
puck.setSelected(true);
|
||||
}
|
||||
repaint();
|
||||
Controller.getInstance().onPuckPressed(puck);
|
||||
}
|
||||
}
|
||||
|
||||
void onPuckReleased(MouseEvent e, Puck puck){
|
||||
Controller.getInstance().onPuckReleased(puck);
|
||||
}
|
||||
|
||||
void onPlatePressed(MouseEvent e){
|
||||
if (!TOGGLE_SELECTION){
|
||||
getDevice().resetSelection();
|
||||
}
|
||||
Controller.getInstance().onPlatePressed(getDevice());
|
||||
}
|
||||
|
||||
void onPlateReleased(MouseEvent e){
|
||||
Controller.getInstance().onPlateReleased(getDevice());
|
||||
}
|
||||
|
||||
|
||||
void onPuckPopupMenu(MouseEvent e, Puck puck){
|
||||
}
|
||||
|
||||
void onPuckDoubleClicked(MouseEvent e, Puck puck){
|
||||
|
||||
}
|
||||
|
||||
void onBasePlatePopupMenu(MouseEvent e){
|
||||
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
/*
|
||||
* Copyright (c) 2014 Paul Scherrer Institute. All rights reserved.
|
||||
*/
|
||||
package ch.psi.mxsc;
|
||||
|
||||
import ch.psi.mxsc.BasePlateGraphics.DrawMode;
|
||||
import ch.psi.pshell.device.Device;
|
||||
import ch.psi.pshell.imaging.Data;
|
||||
import ch.psi.pshell.imaging.ImageListener;
|
||||
import ch.psi.pshell.imaging.Source;
|
||||
import ch.psi.pshell.swing.DevicePanel;
|
||||
import ch.psi.utils.State;
|
||||
import ch.psi.utils.swing.SwingUtils;
|
||||
import java.awt.Point;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.JPopupMenu;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class BasePlatePanel extends DevicePanel {
|
||||
JPopupMenu samplePopupMenu;
|
||||
JMenuItem menuLoadSample;
|
||||
JMenuItem menuUnloadSample;
|
||||
BasePlateGraphics basePlateGraphics;
|
||||
PuckGraphics puckGraphics;
|
||||
|
||||
boolean TOGGLE_SELECTION = false;
|
||||
/**
|
||||
* Creates new form BasePlatePanel
|
||||
*/
|
||||
public BasePlatePanel() {
|
||||
initComponents();
|
||||
addMouseListener(mouseAdapter);
|
||||
samplePopupMenu = new JPopupMenu();
|
||||
menuLoadSample = new JMenuItem("Load");
|
||||
menuLoadSample.addActionListener((ActionEvent e) -> {
|
||||
try {
|
||||
//getDevice().loadSample();
|
||||
int sample = clickedSample.getNumber();
|
||||
int puck = clickedPuck.getNumber();
|
||||
char segment = clickedPuck.getSegment();
|
||||
Controller.instance.execute("mount('" + segment + "'," + puck + "," + sample + ")");
|
||||
} catch (Exception ex) {
|
||||
SwingUtils.showException(this, ex);
|
||||
}
|
||||
});
|
||||
menuUnloadSample = new JMenuItem("Unload");
|
||||
menuUnloadSample.addActionListener((ActionEvent e) -> {
|
||||
try {
|
||||
//getDevice().unloadSample(getDevice().getSelectedSample());
|
||||
int sample = clickedSample.getNumber();
|
||||
int puck = clickedPuck.getNumber();
|
||||
char segment = clickedPuck.getSegment();
|
||||
Controller.instance.execute("unmount('" + segment + "'," + puck + "," + sample + ")");
|
||||
} catch (Exception ex) {
|
||||
SwingUtils.showException(this, ex);
|
||||
}
|
||||
});
|
||||
samplePopupMenu.add(menuLoadSample);
|
||||
samplePopupMenu.add(menuUnloadSample);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BasePlate getDevice() {
|
||||
return (BasePlate) super.getDevice();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDevice(Device device){
|
||||
super.setDevice(device);
|
||||
if (mode==Mode.puck){
|
||||
basePlateGraphics = null;
|
||||
} else {
|
||||
basePlateGraphics = (device==null) ? null : new BasePlateGraphics((BasePlate)device);
|
||||
}
|
||||
}
|
||||
|
||||
Mode mode = Mode.horizontal;
|
||||
|
||||
public enum Mode {
|
||||
single,
|
||||
horizontal,
|
||||
vertical,
|
||||
overlapped,
|
||||
puck
|
||||
}
|
||||
|
||||
public Mode getMode() {
|
||||
return mode;
|
||||
}
|
||||
|
||||
public void setMode(Mode mode) {
|
||||
this.mode = mode;
|
||||
repaint();
|
||||
}
|
||||
|
||||
|
||||
enum SelectionMode{
|
||||
Samples,
|
||||
Pucks,
|
||||
None
|
||||
}
|
||||
SelectionMode selectionMode = SelectionMode.None;
|
||||
public SelectionMode getSelectionMode() {
|
||||
return selectionMode;
|
||||
}
|
||||
|
||||
public void setSelectionMode(SelectionMode selectionMode) {
|
||||
this.selectionMode = selectionMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called from within the constructor to initialize the form. WARNING: Do NOT
|
||||
* modify this code. The content of this method is always regenerated by the Form Editor.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||
private void initComponents() {
|
||||
|
||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||
this.setLayout(layout);
|
||||
layout.setHorizontalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 400, Short.MAX_VALUE)
|
||||
);
|
||||
layout.setVerticalGroup(
|
||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||
.addGap(0, 300, Short.MAX_VALUE)
|
||||
);
|
||||
}// </editor-fold>//GEN-END:initComponents
|
||||
|
||||
@Override
|
||||
protected void onDeviceStateChanged(State state, State former) {
|
||||
repaint();
|
||||
}
|
||||
|
||||
Rectangle platePlotRect;
|
||||
Rectangle puckPlotRect;
|
||||
Source source;
|
||||
|
||||
void createPuckGraphics(){
|
||||
Puck selectedPuck = getDevice().getSelectedPuck();
|
||||
if (selectedPuck==null){
|
||||
puckGraphics=null;
|
||||
} else {
|
||||
if ((puckGraphics==null) || (puckGraphics.puck!= selectedPuck)){
|
||||
puckGraphics = new PuckGraphics(selectedPuck, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint(Graphics g) {
|
||||
super.paint(g);
|
||||
if (getDevice() != null) {
|
||||
Graphics2D g2d = (Graphics2D) g;
|
||||
Dimension size = getSize();
|
||||
if ((size.width > 40) && (size.height > 40)) {
|
||||
int border = 0;
|
||||
int borderPuck = 1;
|
||||
Rectangle plotRect = new Rectangle(border, border, size.width - 2 * border, size.height - 2 * border);
|
||||
Puck selectedPuck = getDevice().getSelectedPuck();
|
||||
platePlotRect = null;
|
||||
puckPlotRect = null;
|
||||
|
||||
switch (mode) {
|
||||
case single:
|
||||
platePlotRect = plotRect;
|
||||
puckPlotRect = null;
|
||||
basePlateGraphics.draw(g2d, platePlotRect, (img==null), false, true, DrawMode.center, img);
|
||||
break;
|
||||
case horizontal:
|
||||
platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width / 2, plotRect.height);
|
||||
basePlateGraphics.draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null);
|
||||
if (selectedPuck!=null){
|
||||
puckPlotRect = new Rectangle(plotRect.x + plotRect.width / 2 + borderPuck, plotRect.y + borderPuck, plotRect.width / 2 - 2 * borderPuck, plotRect.height - 2 * borderPuck);
|
||||
createPuckGraphics();
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, false, true);
|
||||
}
|
||||
break;
|
||||
case vertical:
|
||||
platePlotRect = new Rectangle(plotRect.x, plotRect.y, plotRect.width, plotRect.height / 2);
|
||||
basePlateGraphics.draw(g2d, platePlotRect, false, true, true, DrawMode.fill, null);
|
||||
if (selectedPuck!=null){
|
||||
puckPlotRect = new Rectangle(plotRect.x + borderPuck, plotRect.y + plotRect.height / 2 + borderPuck, plotRect.width - 2 * borderPuck, plotRect.height / 2 - 2 * borderPuck);
|
||||
createPuckGraphics();
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, false, true);
|
||||
}
|
||||
break;
|
||||
case overlapped:
|
||||
//getDevice().draw(g2d, plotRect, false, true);
|
||||
platePlotRect = new Rectangle(plotRect.x - ((int) (plotRect.width * 0.14)), plotRect.y - ((int) (plotRect.height * 0.14)), (int) (plotRect.width * 1.28), (int) (plotRect.height * 1.28));
|
||||
basePlateGraphics.draw(g2d, platePlotRect, false, true, false, DrawMode.fill, null);
|
||||
if (selectedPuck!=null){
|
||||
createPuckGraphics();
|
||||
int overlappedSize = (int) (1.5 * puckGraphics.getDrawSize());
|
||||
puckPlotRect = new Rectangle((int) (plotRect.getCenterX() - overlappedSize / 2), (int) (plotRect.getCenterY() - overlappedSize / 2), overlappedSize, overlappedSize);
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, false, true);
|
||||
}
|
||||
break;
|
||||
case puck:
|
||||
if (selectedPuck!=null){
|
||||
puckPlotRect = new Rectangle(plotRect.x + borderPuck, plotRect.y + borderPuck, plotRect.width - 2 * borderPuck, plotRect.height - 2 * borderPuck);
|
||||
createPuckGraphics();
|
||||
puckGraphics.draw(g2d, puckPlotRect, true, true, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BufferedImage img;
|
||||
ImageListener imageListener = new ImageListener() {
|
||||
@Override
|
||||
public void onImage(Object origin, BufferedImage image, Data data) {
|
||||
img = image;
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Object origin, Exception ex) {
|
||||
img = null;
|
||||
repaint();
|
||||
}
|
||||
};
|
||||
void setCameraView(Source source){
|
||||
img = null;
|
||||
if (this.source!=null){
|
||||
this.source.removeListener(imageListener);
|
||||
}
|
||||
this.source = source;
|
||||
if (source!=null){
|
||||
source.addListener(imageListener);
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
|
||||
Sample clickedSample;
|
||||
Puck clickedPuck;
|
||||
|
||||
MouseAdapter mouseAdapter = new MouseAdapter() {
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
checkMouseEvent(e, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
checkMouseEvent(e, false);
|
||||
}
|
||||
|
||||
private void checkMouseEvent(MouseEvent e, boolean pressed) {
|
||||
if (isEnabled() && (getDevice()!=null)) {
|
||||
try {
|
||||
Sample sample = getSample(e.getX(), e.getY());
|
||||
Puck puck = getPuck(e.getX(), e.getY());
|
||||
|
||||
clickedSample = sample;
|
||||
clickedPuck = puck;
|
||||
if (e.isPopupTrigger()) {
|
||||
if (sample != null) {
|
||||
onSamplePopupMenu(e, sample);
|
||||
} else if (puck != null){
|
||||
onPuckPopupMenu(e, puck);
|
||||
} else {
|
||||
onBasePlatePopupMenu(e);
|
||||
}
|
||||
} else if ((pressed) && (e.getClickCount() % 2 == 0)) {
|
||||
if (sample != null) {
|
||||
onSampleDoubleClicked(e, sample);
|
||||
} else if (puck != null){
|
||||
onPuckDoubleClicked(e, puck);
|
||||
}
|
||||
} else if ((e.getButton() == java.awt.event.MouseEvent.BUTTON1)) {
|
||||
if (sample != null) {
|
||||
if (pressed) {
|
||||
onSamplePressed(e, sample);
|
||||
} else {
|
||||
onSampleReleased(e, sample);
|
||||
}
|
||||
}else if (puck != null){
|
||||
if (pressed) {
|
||||
onPuckPressed(e, puck);
|
||||
} else {
|
||||
onPuckReleased(e, puck);
|
||||
}
|
||||
} else {
|
||||
if (pressed) {
|
||||
onPlatePressed(e);
|
||||
} else {
|
||||
onPlateReleased(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception ex) {
|
||||
Logger.getLogger(BasePlatePanel.class.getName()).log(Level.WARNING, null, ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
if (isEnabled()&& (getDevice()!=null)) {
|
||||
if (e.getButton() == java.awt.event.MouseEvent.BUTTON1) {
|
||||
Sample sample = getSample(e.getX(), e.getY());
|
||||
Puck puck = getPuck(e.getX(), e.getY());
|
||||
if (sample != null) {
|
||||
onSampleClicked(e, sample);
|
||||
} else {
|
||||
onPuckClicked(e, puck);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Sample getSample(int x, int y) {
|
||||
Point p = new Point(x, y);
|
||||
if (puckGraphics!=null){
|
||||
for (SampleGraphics sample :puckGraphics.sampleGraphics){
|
||||
if (sample.getDrawPosition().distance(p) <= (sample.getDrawSize() / 2)) {
|
||||
return sample.sample;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (basePlateGraphics!=null){
|
||||
for (PuckGraphics puck : basePlateGraphics.puckGraphics){
|
||||
if ((mode==Mode.single) || puck.puck.isSelected()){
|
||||
for (SampleGraphics sample :puck.sampleGraphics){
|
||||
if (sample.getDrawPosition().distance(p) <= (sample.getDrawSize() / 2)) {
|
||||
return sample.sample;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
Puck getPuck(int x, int y) {
|
||||
Point p = new Point(x, y);
|
||||
if (puckGraphics!=null){
|
||||
if (puckGraphics.getDrawPosition().distance(p) <= (puckGraphics.getDrawSize() / 2)) {
|
||||
return puckGraphics.puck;
|
||||
}
|
||||
}
|
||||
if (mode == Mode.puck){
|
||||
return getDevice().getSelectedPuck(); //Won't de-select it by clicking outside
|
||||
}
|
||||
if (basePlateGraphics!=null){
|
||||
for (PuckGraphics puck : basePlateGraphics.puckGraphics){
|
||||
if (puck.getDrawPosition().distance(p) <= (puck.getDrawSize() / 2)) {
|
||||
return puck.puck;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
void onSampleClicked(MouseEvent e, Sample sample){
|
||||
|
||||
}
|
||||
|
||||
void selectSample(Sample sample){
|
||||
if (getSelectionMode()==SelectionMode.Samples){
|
||||
if (sample!=null){
|
||||
sample.setSelected(true);
|
||||
}
|
||||
Controller.getInstance().onSamplePressed(sample);
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
void onSamplePressed(MouseEvent e, Sample sample){
|
||||
if (getSelectionMode()==SelectionMode.Samples){
|
||||
if (TOGGLE_SELECTION){
|
||||
sample.toggleSelected(true);
|
||||
} else {
|
||||
sample.setSelected(true);
|
||||
}
|
||||
repaint();
|
||||
Controller.getInstance().onSamplePressed(sample);
|
||||
} else if (getSelectionMode()==SelectionMode.Pucks){
|
||||
onPuckPressed(e, sample.getPuck());
|
||||
}
|
||||
}
|
||||
|
||||
void onSampleReleased(MouseEvent e, Sample sample){
|
||||
|
||||
}
|
||||
|
||||
void onSamplePopupMenu(MouseEvent e,Sample sample){
|
||||
if (getSelectionMode()==SelectionMode.Samples){
|
||||
//menuLoadSample.setEnabled(sample.isPresent() && getDevice().getLoadedSample()==null);
|
||||
//menuUnloadSample.setEnabled(!sample.isPresent() && getDevice().getLoadedSample()!=null);
|
||||
menuLoadSample.setEnabled(!sample.isLoaded() && getDevice().getLoadedSample()==null);
|
||||
menuUnloadSample.setEnabled(sample.isLoaded() && getDevice().getLoadedSample()!=null);
|
||||
samplePopupMenu.show(e.getComponent(), e.getX(), e.getY());
|
||||
}
|
||||
}
|
||||
|
||||
void onSampleDoubleClicked(MouseEvent e,Sample sample){
|
||||
|
||||
}
|
||||
|
||||
void onPuckClicked(MouseEvent e, Puck puck){
|
||||
|
||||
}
|
||||
|
||||
void selectPuck(Puck puck){
|
||||
if (getSelectionMode()!=SelectionMode.None){
|
||||
if (puck != null){
|
||||
puck.setSelected(true);
|
||||
} else {
|
||||
getDevice().resetSelection();
|
||||
}
|
||||
Controller.getInstance().onPuckPressed(puck);
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
|
||||
void onPuckPressed(MouseEvent e, Puck puck){
|
||||
if (getSelectionMode()!=SelectionMode.None){
|
||||
if (TOGGLE_SELECTION){
|
||||
puck.toggleSelected(true);
|
||||
} else {
|
||||
puck.setSelected(true);
|
||||
}
|
||||
repaint();
|
||||
Controller.getInstance().onPuckPressed(puck);
|
||||
}
|
||||
}
|
||||
|
||||
void onPuckReleased(MouseEvent e, Puck puck){
|
||||
Controller.getInstance().onPuckReleased(puck);
|
||||
}
|
||||
|
||||
void onPlatePressed(MouseEvent e){
|
||||
if (!TOGGLE_SELECTION){
|
||||
getDevice().resetSelection();
|
||||
}
|
||||
Controller.getInstance().onPlatePressed(getDevice());
|
||||
}
|
||||
|
||||
void onPlateReleased(MouseEvent e){
|
||||
Controller.getInstance().onPlateReleased(getDevice());
|
||||
}
|
||||
|
||||
|
||||
void onPuckPopupMenu(MouseEvent e, Puck puck){
|
||||
}
|
||||
|
||||
void onPuckDoubleClicked(MouseEvent e, Puck puck){
|
||||
|
||||
}
|
||||
|
||||
void onBasePlatePopupMenu(MouseEvent e){
|
||||
|
||||
}
|
||||
|
||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||
// End of variables declaration//GEN-END:variables
|
||||
}
|
||||
|
||||
@@ -85,6 +85,9 @@ public class PuckGraphics {
|
||||
}
|
||||
|
||||
public boolean isHighlithted() {
|
||||
if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){
|
||||
return puck.isSelected();
|
||||
}
|
||||
return puck.isSelected() || puck.isSegmentSelected();
|
||||
}
|
||||
|
||||
@@ -229,7 +232,14 @@ public class PuckGraphics {
|
||||
}
|
||||
|
||||
int getBorderWidth(boolean drawBackground) {
|
||||
return drawBackground ? puck.isSegmentSelected() ? 2 : 1 : puck.isSegmentSelected() ? 2 : 1;
|
||||
int selectedWidth = 2;
|
||||
int normalWidth = 1;
|
||||
if (MainPanel.BASE_PLATE_LAYOUT == MainPanel.BasePlateLayout.rt){
|
||||
selectedWidth = 3;
|
||||
}
|
||||
return drawBackground ?
|
||||
puck.isSegmentSelected() ? selectedWidth : normalWidth :
|
||||
puck.isSegmentSelected() ? selectedWidth : normalWidth;
|
||||
}
|
||||
|
||||
int getReferenceDrawSize() {
|
||||
|
||||
Reference in New Issue
Block a user