package org.openpnp.machine.reference.psh; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.Icon; import org.openpnp.gui.MainFrame; import org.openpnp.gui.components.ClassSelectionDialog; import org.openpnp.gui.support.Icons; import org.openpnp.gui.support.MessageBoxes; import org.openpnp.machine.reference.vision.OpenCvVisionProvider; import org.openpnp.model.Configuration; import org.openpnp.model.Location; import org.openpnp.spi.Camera; import org.openpnp.spi.Head; import org.openpnp.spi.PropertySheetHolder; import org.openpnp.spi.base.SimplePropertySheetHolder; import org.pmw.tinylog.Logger; public class CamerasPropertySheetHolder extends SimplePropertySheetHolder { final Head head; public CamerasPropertySheetHolder(Head head, String title, List<? extends PropertySheetHolder> children, Icon icon) { super(title, children, icon); this.head = head; } @Override public Action[] getPropertySheetHolderActions() { return new Action[] {newCameraAction}; } public Action newCameraAction = new AbstractAction() { { putValue(SMALL_ICON, Icons.add); putValue(NAME, "New Camera..."); putValue(SHORT_DESCRIPTION, "Create a new camera."); } @Override public void actionPerformed(ActionEvent arg0) { Configuration configuration = Configuration.get(); ClassSelectionDialog<Camera> dialog = new ClassSelectionDialog<>(MainFrame.get(), "Select Camera...", "Please select a Camera implemention from the list below.", configuration.getMachine().getCompatibleCameraClasses()); dialog.setVisible(true); Class<? extends Camera> cameraClass = dialog.getSelectedClass(); if (cameraClass == null) { return; } try { Camera camera = cameraClass.newInstance(); if (camera.getUnitsPerPixel() == null) { camera.setUnitsPerPixel(new Location(Configuration.get().getSystemUnits())); } try { if (camera.getVisionProvider() == null) { camera.setVisionProvider(new OpenCvVisionProvider()); } } catch (Exception e) { Logger.debug("Couldn't set default vision provider."); } if (head != null) { head.addCamera(camera); } else { configuration.getMachine().addCamera(camera); } MainFrame.get().getCameraViews().addCamera(camera); } catch (Exception e) { MessageBoxes.errorBox(MainFrame.get(), "Camera Error", e); } } }; }