Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import net.miginfocom.swing.MigLayout;

import org.micromanager.lightsheetmanager.api.data.GeometryType;
import org.micromanager.lightsheetmanager.api.data.LightSheetType;
import org.micromanager.lightsheetmanager.gui.components.Label;
import org.micromanager.lightsheetmanager.gui.data.Icons;
import org.micromanager.lightsheetmanager.gui.tabs.TabPanel;
Expand Down Expand Up @@ -45,6 +46,18 @@ public LightSheetManagerFrame(final LightSheetManager model, final boolean isLoa
model_.setErrorText("SCAPE geometry does not support multiple imaging paths. "
+ " Use the \"SimultaneousCameras\" property to support multiple cameras.");
createErrorUserInterface();
return;
}
if (model_.devices().adapter().numIlluminationPaths() > 1) {
model_.setErrorText("SCAPE geometry can only have a single illumination path.");
createErrorUserInterface();
return;
}
if (model_.devices().adapter().lightSheetType() == LightSheetType.SCANNED) {
model_.setErrorText("Scanned light sheets are not implemented for SCAPE geometry, " +
"please contact the developers if you need this feature.");
createErrorUserInterface();
return;
}
createUserInterface();
// update after loading the settings and creating ui
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class LightSheetManagerPlugin implements MenuPlugin, SciJavaPlugin {
public static final String copyright = "Applied Scientific Instrumentation (ASI), 2022-2026";
public static final String description = "A plugin to control various types of light sheet microscopes.";
public static final String menuName = "Light Sheet Manager";
public static final String version = "0.6.3";
public static final String version = "0.6.4";

private Studio studio_;
private LightSheetManager model_;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package org.micromanager.lightsheetmanager.gui.tabs;

import org.micromanager.lightsheetmanager.api.data.CameraMode;
import org.micromanager.lightsheetmanager.gui.components.Button;
import org.micromanager.lightsheetmanager.gui.components.ComboBox;
import org.micromanager.lightsheetmanager.gui.components.Label;
import org.micromanager.lightsheetmanager.gui.components.ListeningPanel;
import org.micromanager.lightsheetmanager.gui.components.Panel;
import org.micromanager.lightsheetmanager.LightSheetManager;
import org.micromanager.lightsheetmanager.gui.components.Spinner;
import org.micromanager.lightsheetmanager.model.devices.cameras.CameraBase;

import java.awt.Font;
import java.awt.Rectangle;
import java.util.Objects;

public class CameraTab extends Panel implements ListeningPanel {
Expand All @@ -19,9 +20,12 @@ public class CameraTab extends Panel implements ListeningPanel {
private Button btnQuarterROI_;
private Button btnEigthROI_;
private Button btnCustomROI_;
private Button btnGetCurrentROI_;
private Button btnCurrentROI_;

private ComboBox<CameraMode> cmbCameraTriggerMode_;
private Spinner spnOffsetX_;
private Spinner spnOffsetY_;
private Spinner spnWidth_;
private Spinner spnHeight_;

private final LightSheetManager model_;

Expand All @@ -36,8 +40,8 @@ private void createUserInterface() {

final Panel pnlROI = new Panel("Imaging ROI");

final Label lblXOffset = new Label("X Offset:");
final Label lblYOffset = new Label("Y Offset:");
final Label lblOffsetX = new Label("Offset X:");
final Label lblOffsetY = new Label("Offset Y:");
final Label lblWidth = new Label("Width:");
final Label lblHeight = new Label("Height:");

Expand All @@ -47,27 +51,108 @@ private void createUserInterface() {
btnQuarterROI_ = new Button("1/4", 70, 30);
btnEigthROI_ = new Button("1/8", 70, 30);
btnCustomROI_ = new Button("Custom", 140, 30);
btnGetCurrentROI_ = new Button("Get Current ROI", 140, 30);
btnCurrentROI_ = new Button("Get Current ROI", 140, 30);

spnOffsetX_ = Spinner.createIntegerSpinner(0, 0, Integer.MAX_VALUE, 1);
spnOffsetY_ = Spinner.createIntegerSpinner(0, 0, Integer.MAX_VALUE, 1);
spnWidth_ = Spinner.createIntegerSpinner(0, 0, Integer.MAX_VALUE, 1);
spnHeight_ = Spinner.createIntegerSpinner(0, 0, Integer.MAX_VALUE, 1);

pnlROI.add(btnUnchangedROI_, "span 2, wrap");
pnlROI.add(btnFullROI_, "");
pnlROI.add(btnHalfROI_, "wrap");
pnlROI.add(btnQuarterROI_, "");
pnlROI.add(btnEigthROI_, "wrap");
pnlROI.add(btnCustomROI_, "span 2, wrap");
pnlROI.add(lblXOffset, "wrap");
pnlROI.add(lblYOffset, "wrap");
pnlROI.add(lblWidth, "wrap");
pnlROI.add(lblHeight, "wrap");
pnlROI.add(btnGetCurrentROI_, "span 2");

pnlROI.add(lblOffsetX, "");
pnlROI.add(spnOffsetX_, "wrap");
pnlROI.add(lblOffsetY, "");
pnlROI.add(spnOffsetY_, "wrap");
pnlROI.add(lblWidth, "");
pnlROI.add(spnWidth_, "wrap");
pnlROI.add(lblHeight, "");
pnlROI.add(spnHeight_, "wrap");
pnlROI.add(btnCurrentROI_, "span 2");

add(lblTitle, "wrap");
add(pnlROI, "wrap");
}

// TODO: should change roi for all cameras?
private void createEventHandlers() {
//model_.studio().core().setROI();
// roi is full camera
btnFullROI_.registerListener(() -> {
final CameraBase[] cameras = model_.devices().imagingCameras();
for (CameraBase camera : cameras) {
camera.setROI(camera.getResolution());
}
});

// roi 1/2
btnHalfROI_.registerListener(() -> {
final CameraBase[] cameras = model_.devices().imagingCameras();
for (CameraBase camera : cameras) {
camera.setROI(computeCenterRectangle(camera.getResolution(), 2));
}
});

// roi 1/4
btnQuarterROI_.registerListener(() -> {
final CameraBase[] cameras = model_.devices().imagingCameras();
for (CameraBase camera : cameras) {
camera.setROI(computeCenterRectangle(camera.getResolution(), 4));
}
});

// roi 1/8
btnEigthROI_.registerListener(() -> {
final CameraBase[] cameras = model_.devices().imagingCameras();
for (CameraBase camera : cameras) {
camera.setROI(computeCenterRectangle(camera.getResolution(), 8));
}
});

// set custom roi
btnCustomROI_.registerListener(() -> {
final CameraBase[] cameras = model_.devices().imagingCameras();
for (CameraBase camera : cameras) {
camera.setROI(customROI());
}
});

// populate spinner with current roi
btnCurrentROI_.registerListener(() -> {
final Rectangle roi = model_.devices().firstImagingCamera().getROI();
spnOffsetX_.setValue(roi.x);
spnOffsetY_.setValue(roi.y);
spnWidth_.setValue(roi.width);
spnHeight_.setValue(roi.height);
});
}

// Returns the custom ROI set by the spinners.
private Rectangle customROI() {
return new Rectangle(
spnOffsetX_.getInt(), spnOffsetY_.getInt(),
spnWidth_.getInt(), spnHeight_.getInt()
);
}

// Computes the ROI based on a scaling factor.
private Rectangle computeCenterRectangle(final Rectangle rect, final int scale) {
if (scale < 1) {
model_.studio().logs().showError("scale must be > 1; could not compute ROI!");
return rect;
}
if (rect.x != 0 || rect.y != 0) {
model_.studio().logs().showError("position must be (0, 0); could not compute ROI!");
return rect;
}
final int width = rect.width / scale;
final int height = rect.height / scale;
final int x = (rect.width - width) / 2;
final int y = (rect.height - height) / 2;
return new Rectangle(x, y, width, height);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package org.micromanager.lightsheetmanager.gui.tabs;

import org.micromanager.lightsheetmanager.api.data.CameraMode;
import org.micromanager.lightsheetmanager.api.data.GeometryType;
import org.micromanager.lightsheetmanager.gui.components.Label;
import org.micromanager.lightsheetmanager.gui.components.ListeningPanel;
import org.micromanager.lightsheetmanager.gui.components.Panel;
Expand Down Expand Up @@ -36,15 +35,7 @@ private void createUserInterface() {
}

public void swapPanels(final CameraMode cameraMode) {
setupPanel_.getBeamSheetPanel().swapPanels(cameraMode);
}

public int getPathNum() {
return pathNum_;
}

public SetupPanel getSetupPanel() {
return setupPanel_;
setupPanel_.getLightSheetPanel().swapPanels(cameraMode);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import org.micromanager.lightsheetmanager.api.data.CameraMode;
import org.micromanager.lightsheetmanager.LightSheetManagerFrame;
import org.micromanager.lightsheetmanager.LightSheetManager;
import org.micromanager.lightsheetmanager.api.data.GeometryType;
import org.micromanager.lightsheetmanager.model.DeviceManager;
import org.micromanager.lightsheetmanager.gui.components.Panel;
import org.micromanager.lightsheetmanager.gui.components.TabbedPane;
Expand All @@ -13,7 +12,6 @@

/**
* The tabbed pane to select between different settings panels.
*
*/
public class TabPanel extends Panel {

Expand All @@ -26,7 +24,7 @@ public class TabPanel extends Panel {

private final TabbedPane tabbedPane_;

private DeviceManager devices_;
private final DeviceManager devices_;

private final LightSheetManager model_;
private final LightSheetManagerFrame frame_;
Expand Down Expand Up @@ -105,18 +103,10 @@ public void swapSetupPathPanels(final CameraMode cameraMode) {
}
}

public NavigationTab getNavigationTab() {
return navigationTab_;
}

public AcquisitionTab getAcquisitionTab() {
return acquisitionTab_;
}

public CameraTab getCameraTab() {
return cameraTab_;
}

public SetupPathTab getSetupPathTab(final int view) {
return setupPathTabs_.get(view-1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import java.awt.Dimension;
import java.util.Objects;

public class PiezoCalibrationPanel extends Panel {
public class CalibrationPanel extends Panel {

private Button btnTwoPoint_;
private Button btnUpdate_;
Expand All @@ -37,7 +37,7 @@ public class PiezoCalibrationPanel extends Panel {
private final PositionPanel panel_;
private final LightSheetManager model_;

public PiezoCalibrationPanel(final LightSheetManager model, final PositionPanel panel, final int pathNum) {
public CalibrationPanel(final LightSheetManager model, final PositionPanel panel, final int pathNum) {
super("Galvo Piezo Calibration");
model_ = Objects.requireNonNull(model);
panel_ = Objects.requireNonNull(panel);
Expand Down
Loading
Loading